On Sat, 25 May 2013 05:00:46 -0700 (PDT)
Fidel Pérez <
fidel...@gmail.com> wrote:
> Hi:
> Im trying to make a button loop through all its siblings and make buttons
> of them when their bodies have certain conditions. This way, when I
> increase the tree, the button will auto-update with the new branches.
>
> For that, I need to refer the actual button's sibilings, instead of the
> "node which is selected" when i press the button. I need "p" of the node
> when my position is in another node (to which I will have to refer too) so
> I actually get an interaction among the sibilings tree and the position Im
> currently in.
This question may have come up recently, here it is
https://groups.google.com/forum/?fromgroups#!topic/leo-editor/K90m_aIiz9k
last message in that thread.
Another way would be, if you were creating the button from a script, to
include a reference to the position in the command.
from leo.plugins.mod_scripting import scriptingController
sc = scriptingController(c)
def my_cmd(c=c, v=p.v):
p = c.vnode2position(v)
g.es("Created from "+p.h)
b = sc.createIconButton(
'but',
command = my_cmd,
statusLine = 'Make buttons',
bg="light_blue"
)
- stores v, not p, p will break
- create button by clicking run-script, or by making this a @script
node
- change its headline, click button again, new headline reported
And here's the really hacky version which knows not only the node it
came from but the button it's fired from:
from leo.plugins.mod_scripting import scriptingController
sc = scriptingController(c)
data = {'clicks':0}
def my_cmd(c=c, v=p.v, data=data):
p = c.vnode2position(v)
g.es("Created from "+p.h)
data['clicks'] += 1
data['b'].button.setText(str(data['clicks']))
b = sc.createIconButton(
'zero',
command = my_cmd,
statusLine = 'Make buttons',
bg="light_blue"
)
data['b'] = b
- sc.createIconButton() returns a QWidgetAction, not a QPushButton,
hence the '.button' part.
- I guess this is a closure, with the surrounding @script node acting
as the scope for the closure's data ('data').
Cheers -Terry