1
2 from PyQt4 import QtCore, QtGui
3
5
7 self.kids = {}
8 self.splitchar = splitchar
9 self._dyn_callback = None
10
12 parent = self
13 kid = self
14 for p in plist:
15 kid = parent.kids.get(p)
16 if kid == None:
17 kid = VQMenu(p, parent=parent, splitchar=self.splitchar)
18 action = parent.addMenu(kid)
19 parent.kids[p] = kid
20 parent = kid
21
22 return kid
23
25 self.clear()
26 for name in self._dyn_callback():
27 act = QtGui.QAction(name, self)
28 cb = ActionCall(self._dyn_callback, name)
29 act.connect(act, QtCore.SIGNAL('triggered()'), cb)
30 self.addAction(act)
31
33 '''
34 Add a dynamic menu item which will populate on-hover by asking
35 the specified callback for a list of actions.
36
37 Example:
38 def callback(name=None):
39
40 if name == None:
41 return ('one', 'two', 'three')
42
43 print('SELECTED: %s' % name)
44
45 m.addDynMenu( callback )
46 '''
47 plist = pathstr.split(self.splitchar)
48 menu = self._addMenuFields( plist )
49 menu._dyn_callback = callback
50 menu.connect(menu, QtCore.SIGNAL('aboutToShow()'), menu._addDynActions)
51
52 - def addField(self, pathstr, callback=None, args=(), tip=None):
53 plist = pathstr.split(self.splitchar)
54 kid = self._addMenuFields(plist[:-1])
55
56 acall = ActionCall( callback, *args )
57 action = QtGui.QAction(plist[-1], kid)
58 action.connect(action, QtCore.SIGNAL('triggered()'), acall)
59
60 if tip: action.setStatusTip(tip)
61
62 kid.addAction(action)
63
64 return kid
65
70
76
78
79 - def __init__(self, callback, *args, **kwargs):
83
85 return self.callback(*self.args, **self.kwargs)
86