@@ -36,24 +36,41 @@ def __init__(self, label, button_width, menu_width, x, y):
3636 self ._menu_items = []
3737 self ._root_button = None
3838
39- def add_item (self , function , label ):
39+ def add_item (self , function , label , selected = False ):
40+ key = label .lower ().replace (" " , "_" )
4041 self ._menu_items .append (
4142 {
43+ "key" : key ,
4244 "function" : function ,
4345 "label" : label ,
46+ "selected" : selected ,
4447 }
4548 )
4649 self ._render ()
4750
51+ def select_item (self , key ):
52+ print (f"selecting { key } " )
53+ for item in self ._menu_items :
54+ if item ["key" ] == key :
55+ item ["selected" ] = True
56+ else :
57+ item ["selected" ] = False
58+ self ._render ()
59+
4860 @staticmethod
49- def _create_button (callback , label , width , x , y = 0 , border = True ):
61+ def _create_button (callback , label , width , x , y = 0 , border = True , selected = False ):
5062 if border :
5163 outline_color = 0x000000
5264 selected_outline = 0x333333
5365 else :
5466 outline_color = 0xEEEEEE
5567 selected_outline = 0xBBBBBB
5668
69+ if selected :
70+ label_color = 0x008800
71+ else :
72+ label_color = 0x333333
73+
5774 button = EventButton (
5875 callback ,
5976 x = x ,
@@ -64,13 +81,14 @@ def _create_button(callback, label, width, x, y=0, border=True):
6481 style = EventButton .RECT ,
6582 fill_color = 0xEEEEEE ,
6683 outline_color = outline_color ,
67- label_color = 0x333333 ,
84+ label_color = label_color ,
6885 selected_fill = 0xBBBBBB ,
6986 selected_label = 0x333333 ,
7087 selected_outline = selected_outline ,
7188 )
7289 return button
7390
91+
7492 def _toggle_submenu (self ):
7593 self ._menu_items_group .hidden = not self ._menu_items_group .hidden
7694
@@ -87,7 +105,7 @@ def _render(self):
87105 self ._button_width ,
88106 self ._xpos ,
89107 self ._ypos ,
90- border = True ,
108+ True ,
91109 )
92110 self .append (self ._root_button )
93111
@@ -113,7 +131,8 @@ def _render(self):
113131 self ._menu_width - 2 ,
114132 self ._xpos + 1 ,
115133 self ._ypos + index * MENU_ITEM_HEIGHT + self ._root_button .height ,
116- border = False ,
134+ False ,
135+ item ["selected" ],
117136 )
118137 self ._menu_items_group .append (button )
119138
@@ -151,3 +170,7 @@ def visible(self):
151170 @property
152171 def items_group (self ):
153172 return self ._menu_items_group
173+
174+ @property
175+ def items (self ):
176+ return self ._menu_items
0 commit comments