22
33class Toolbar (object ):
44
5- def __init__ (self , interactor , label , vertical = True , left = 10 , top = 10 , open_label = "Open" , on_open = None , close_label = "Close" , button_margin = 5 , parent = None , save = None ):
5+ def __init__ (self , interactor , label , vertical = True , left = 10 , top = 10 , open_label = "Open" , on_open = None , close_label = "Close" , on_close = None , button_margin = 5 , parent = None , save = None ):
66
77 self .save = save
88 self .interactor = interactor
@@ -12,13 +12,13 @@ def __init__(self, interactor, label, vertical=True, left=10, top=10, open_label
1212 self .top = top
1313 self .label = ToggleButton (self .interactor , label , on = self .__on__ , off = self .__off__ , on_prefix = open_label , off_prefix = close_label , left = self .left - self .margin , top = self .top )
1414 self .on_open = on_open
15+ self .on_close = on_close
1516 self .vertical = vertical
1617
1718 self .open = False
1819
1920 # Increment this as widgets are added
2021 self .width , self .height = self .label .get_dimensions ()
21- self .height += button_margin
2222
2323 self .widgets = []
2424 self .bars = {}
@@ -47,13 +47,15 @@ def __delleft(self):
4747
4848 def __on__ (self ):
4949 self .open = True
50+ self .show_widgets ()
5051 if self .on_open is not None :
5152 self .on_open ()
52- self .show_widgets ()
5353
5454 def __off__ (self ):
5555 self .open = False
5656 self .hide_widgets ()
57+ if self .on_close is not None :
58+ self .on_close ()
5759
5860 def copy (self , interactor ):
5961 t = Toolbar (interactor , self .label .label , vertical = self .vertical , left = self .left - self .margin , top = self .top , button_margin = self .margin )
@@ -87,9 +89,6 @@ def place(self):
8789 self .width += self .margin
8890
8991 for widget in self .widgets :
90-
91- widget_width , widget_height = widget .get_dimensions ()
92-
9392 if self .vertical :
9493 widget .left = self .left
9594 widget .top = self .top + self .height
@@ -107,6 +106,7 @@ def place(self):
107106 self .height += widget_height + self .margin
108107 else :
109108 self .width += widget_width + self .margin
109+ self .label .manager .queue_render ()
110110
111111 def get_dimensions (self ):
112112 """
@@ -136,11 +136,10 @@ def hide(self):
136136 self .hide_widgets ()
137137
138138 def show_widgets (self ):
139+ self .place ()
139140 for widget in self .widgets :
140141 widget .show ()
141142
142- self .place ()
143-
144143 def hide_widgets (self ):
145144 """
146145 Hides all widgets in this toolbar
@@ -182,7 +181,6 @@ def add_button(self, labels, **kwargs):
182181 kwargs ["top" ] = self .top
183182
184183 b = Button (self .interactor , ** kwargs )
185-
186184 if self .open :
187185 b .show ()
188186
@@ -192,6 +190,7 @@ def add_button(self, labels, **kwargs):
192190 self .width = kwargs ["left" ] + b .get_dimensions ()[0 ]
193191
194192 self .widgets .append (b )
193+
195194 return b
196195
197196
@@ -211,6 +210,18 @@ def add_toolbar(self, label, **kwargs):
211210
212211 if "vertical" not in kwargs :
213212 kwargs ["vertical" ] = self .vertical
213+ _open = kwargs .get ("on_open" , None )
214+ def hook_open ():
215+ self .place ()
216+ if _open :
217+ _open ()
218+ _close = kwargs .get ("on_close" , None )
219+ def hook_close ():
220+ self .place ()
221+ if _close :
222+ _close ()
223+ kwargs ["on_open" ] = hook_open
224+ kwargs ["on_close" ] = hook_close
214225
215226 toolbar = Toolbar (self .interactor , label , ** kwargs )
216227
0 commit comments