1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import gtk
from .base import Widget
class ContextMenu(Widget):
def __init__(self, options):
super(ContextMenu, self).__init__()
self.set_widget(gtk.Menu())
for i, item_info in enumerate(options):
if item_info is None:
# separator
item = gtk.SeparatorMenuItem()
else:
label, callback = item_info
item = gtk.MenuItem(label)
if isinstance(callback, list):
submenu = ContextMenu(callback)
item.set_submenu(submenu._widget)
elif callback is not None:
item.connect('activate', self.on_activate, callback, i)
else:
item.set_sensitive(False)
self._widget.append(item)
item.show()
def popup(self):
self._widget.popup(None, None, None, 0, 0)
def on_activate(self, widget, callback, i):
callback(self, i)
|