2016-11-02 21:09:14 +00:00
|
|
|
import ClientConstants as CC
|
|
|
|
import collections
|
|
|
|
import wx
|
|
|
|
|
|
|
|
menus_to_submenus = collections.defaultdict( set )
|
|
|
|
menus_to_menu_item_data = collections.defaultdict( set )
|
|
|
|
|
|
|
|
def AppendMenu( menu, submenu, label ):
|
|
|
|
|
2016-11-16 20:21:43 +00:00
|
|
|
label.replace( '&', '&&' )
|
|
|
|
|
2016-11-02 21:09:14 +00:00
|
|
|
menu.AppendMenu( CC.ID_NULL, label, submenu )
|
|
|
|
|
|
|
|
menus_to_submenus[ menu ].add( submenu )
|
|
|
|
|
|
|
|
def AppendMenuItem( menu, label, description, event_handler, callable, *args, **kwargs ):
|
|
|
|
|
2016-11-16 20:21:43 +00:00
|
|
|
label.replace( '&', '&&' )
|
|
|
|
|
2016-11-02 21:09:14 +00:00
|
|
|
menu_item = menu.Append( wx.ID_ANY, label, description )
|
|
|
|
|
|
|
|
l_callable = GetLambdaCallable( callable, *args, **kwargs )
|
|
|
|
|
|
|
|
event_handler.Bind( wx.EVT_MENU, l_callable, source = menu_item )
|
|
|
|
|
|
|
|
menus_to_menu_item_data[ menu ].add( ( menu_item, event_handler ) )
|
|
|
|
|
|
|
|
return menu_item
|
|
|
|
|
|
|
|
def GetLambdaCallable( callable, *args, **kwargs ):
|
|
|
|
|
|
|
|
l_callable = lambda event: callable( *args, **kwargs )
|
|
|
|
|
|
|
|
return l_callable
|
|
|
|
|
|
|
|
def DestroyMenuItems( menu ):
|
|
|
|
|
|
|
|
menu_item_data = menus_to_menu_item_data[ menu ]
|
|
|
|
|
|
|
|
del menus_to_menu_item_data[ menu ]
|
|
|
|
|
|
|
|
for ( menu_item, event_handler ) in menu_item_data:
|
|
|
|
|
|
|
|
event_handler.Unbind( wx.EVT_MENU, source = menu_item )
|
|
|
|
|
|
|
|
menu_item.Destroy()
|
|
|
|
|
|
|
|
|
|
|
|
submenus = menus_to_submenus[ menu ]
|
|
|
|
|
|
|
|
del menus_to_submenus[ menu ]
|
|
|
|
|
|
|
|
for submenu in submenus:
|
|
|
|
|
|
|
|
DestroyMenuItems( submenu )
|
|
|
|
|
|
|
|
|
|
|
|
def DestroyMenu( menu ):
|
|
|
|
|
|
|
|
DestroyMenuItems( menu )
|
|
|
|
|
|
|
|
menu.Destroy()
|
|
|
|
|