Interesting, thanks! I will be interested to see if there are other options...
Regards, J^n On Monday, October 31, 2022 at 3:17:49 PM UTC [email protected] wrote: > I generally make a node with a unique headline somewhere, like '@common > code-xyz' that has the function definition: > > @common code-xyz > --- > def hello(): > g.es('hello') > --- > > Then in my @button: > > @button run-hello > --- > # load the common code 'library' > pos = g.findNodeAnywhere(c, '@common code-xyz') > exec(g.getScript(c, pos)) > > # call the code > hello() > --- > > Hope this helps! > Jake > > > On Mon, Oct 31, 2022 at 11:12 AM jkn <[email protected]> wrote: > >> Thanks, this looks very interesting... >> >> I have one question - something I have wondered about before. If I have >> your example code as a button command, say ... then where/how can I put the >> >> def toggle_app_tab(log, tabname, top_widget): >> # ... >> >> code, in order for it to accessible by multiple such buttons/commands? >> I've never been sure about this. >> >> Thanks, J^n >> >> >> On Sunday, October 30, 2022 at 3:09:26 PM UTC [email protected] wrote: >> >>> I have made several apps (really, "applets") to run in tabs in Leo's Log >>> frame. I find this convenient because they don't need to take up a whole >>> panel, as Viewrendered/Viewrendered3 do, and they don't even need to be >>> plugins so they can be simpler. They are mostly intended to be used in a >>> specific outline; their code can reside in the outline. >>> >>> I wanted to share how I open these apps in the Log frame. Since they >>> are not plugins, they don't load automatically when Leo starts. I don't >>> find that to be a problem, since it's easy to provide a Leo command, >>> button, or menu item to open them when you want to use them. >>> >>> I open a tabbed app with the following command: >>> >>> def toggle_app_tab(log, tabname, top_widget): >>> """Create or remove our app's tab. >>> >>> ARGUMENTS >>> log -- the log panel object for this outline. >>> tabname -- a string to use as the display name of our tab. >>> top_widget -- an instance of top level widget of our app. >>> """ >>> # If our tab is visible, remove it >>> if log.contentsDict.get(f'{tabname}-visible', False): >>> log.deleteTab(tabname) >>> log.contentsDict[f'{tabname}-visible'] = False >>> else: >>> # Show our tab, reusing our widget if already loaded >>> if log.contentsDict.get(f'{tabname}-loaded', False): >>> log.createTab(tabname, >>> widget = log.contentsDict[f'{tabname}-widget'], >>> createText = False) >>> log.contentsDict[f'{tabname}-visible'] = True >>> log.selectTab(tabname) >>> else: >>> # Create our tab for the first time >>> log.createTab(tabname, widget = w, >>> createText = False) >>> log.selectTab(tabname) >>> log.contentsDict[f'{tabname}-loaded'] = True >>> log.contentsDict[f'{tabname}-visible'] = True >>> log.contentsDict[f'{tabname}-widget'] = w >>> >>> By "widget", I mean a PyQt widget. It will usually contain other GUI >>> widgets and code. Here's how this function would typically be called. The >>> widget does not need to have the signature shown here, but it's an obvious >>> way to get Leo's key objects into the app. >>> >>> log = c.frame.log >>> TABNAME = 'The App' >>> import theApp >>> w = theApp.MainWidget(g, c) >>> toggle_app_tab(log, TABNAME, w) >>> >>> Notice that when we "remove" the app - meaning the app's tab is removed >>> from the Log frame - we keep a reference to the main widget. This way, >>> when we make the tab visible again, the app will have retained all its >>> state and you can pick up where you left off. >>> >>> I have attached a screen shot of one of my tabbed apps in session. >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "leo-editor" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/leo-editor/3b9b231b-220f-4d95-8f65-ff89f6ff24d5n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/leo-editor/3b9b231b-220f-4d95-8f65-ff89f6ff24d5n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/leo-editor/95b22799-dfde-4ded-9931-b7a5b212223cn%40googlegroups.com.
