"""
def __init__(self, parent=None, **kwargs):
self._parent = parent
+ self._bindings = []
super(Menu, self).__init__(**kwargs)
def Bind(self, **kwargs):
while not isinstance(obj, wx.Frame):
obj = obj._parent
obj.Bind(**kwargs)
+ self._bindings.append(kwargs)
+
+ def Unbind(self, **kwargs):
+ assert 'id' in kwargs, kwargs
+ try:
+ self._bindings.remove(kwargs)
+ except ValueError:
+ pass
+ kwargs.pop('handler', None)
+ obj = self
+ while not isinstance(obj, wx.Frame):
+ obj = obj._parent
+ obj.Unbind(**kwargs)
+
+ def _unbind_all_items(self):
+ for kwargs in self._bindings:
+ self.Unbind(**kwargs)
+ self._bindings = []
class MenuBar (wx.MenuBar):
self._callbacks = callbacks
self._c = {}
- def update(self, perspectives, selected, callback):
+ def update(self, perspectives, selected):
"""Rebuild the perspectives menu.
"""
+ self._unbind_all_items()
for item in self.GetMenuItems():
- self.UnBind(item.GetId)
self.DeleteItem(item)
self._c = {
'save': self.Append(id=wx.ID_ANY, text='Save Perspective'),
'delete': self.Append(id=wx.ID_ANY, text='Delete Perspective'),
}
+ self.Bind(event=wx.EVT_MENU, handler=self.save_perspective,
+ id=self._c['save'].GetId())
+ self.Bind(event=wx.EVT_MENU, handler=self.delete_perspective,
+ id=self._c['delete'].GetId())
self.AppendSeparator()
for label in perspectives:
self._c[label] = self.AppendRadioItem(id=wx.ID_ANY, text=label)
- self.Bind(event=wx.EVT_MENU, handler=callback,
+ self.Bind(event=wx.EVT_MENU, handler=self.select_perspective,
id=self._c[label].GetId())
if label == selected:
self._c[label].Check(True)
+ @callback
+ def save_perspective(self, event):
+ pass
+
+ @callback
+ def delete_perspective(self, event):
+ pass
+
+ def select_perspective(self, event):
+ _id = event.GetId()
+ item = self.FindItemById(_id)
+ label = item.GetLabel()
+ selected = item.IsChecked()
+ assert selected == True, label
+ in_callback(self, name=label)
+
class HelpMenu (Menu):
def __init__(self, callbacks=None, **kwargs):