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/CAJ1i%2BSa5aBtBP-Qc12uX53iBwO%2BLhDbneiX4eZj02ScAYJhBUA%40mail.gmail.com.

Reply via email to