@@ -71,6 +71,7 @@ class _WxLUTWidget(wx.Panel):
71
71
def __init__ (self , parent : wx .Window ) -> None :
72
72
super ().__init__ (parent )
73
73
74
+ # -- WDIDGETS -- #
74
75
self .visible = wx .CheckBox (self , label = "Visible" )
75
76
self .visible .SetValue (True )
76
77
@@ -86,41 +87,39 @@ def __init__(self, parent: wx.Window) -> None:
86
87
87
88
self .auto_clim = wx .ToggleButton (self , label = "Auto" , size = (50 , - 1 ))
88
89
89
- self .histogram : HistogramCanvas | None = None
90
90
self ._histogram_height = 100 # px
91
91
self .histogram_btn = wx .ToggleButton (self , label = "Hist" , size = (40 , - 1 ))
92
92
_add_icon (self .histogram_btn , "foundation:graph-bar" )
93
93
94
- # Layout
95
- self .lut_ctrls = wx .BoxSizer (wx .HORIZONTAL )
96
- self .lut_ctrls .Add (self .visible , 0 , wx .ALL , 2 )
97
- self .lut_ctrls .Add (self .cmap , 0 , wx .ALL , 2 )
98
- self .lut_ctrls .Add (self .clims , 1 , wx .ALL , 2 )
99
- self .lut_ctrls .Add (self .auto_clim , 0 , wx .ALL , 2 )
100
- self .lut_ctrls .Add (self .histogram_btn , 0 , wx .ALL , 2 )
101
-
102
- # TODO: Consider a container for this...
103
- self ._histogram_sizer = wx .BoxSizer (wx .HORIZONTAL )
104
- # Add a vertical spacer that expands to take up available space
105
- # This is the key component that pushes everything down
106
- # spacer = QSpacerItem(
107
- # 0, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding
108
- # )
109
- # histogram_ctrls.addItem(spacer)
110
94
self .set_hist_range_btn = wx .Button (self , label = "Reset" , size = (40 , - 1 ))
111
95
_add_icon (self .set_hist_range_btn , "fluent:full-screen-maximize-24-filled" )
112
96
self .set_hist_range_btn .Show (False )
113
97
114
98
self .log_btn = wx .ToggleButton (self , label = "Log" , size = (40 , - 1 ))
115
- _add_icon (self .log_btn , "mdi:math-log" )
116
99
self .log_btn .SetToolTip ("log (base 10, count+1)" )
100
+ _add_icon (self .log_btn , "mdi:math-log" )
117
101
self .log_btn .Show (False )
118
102
103
+ # -- LAYOUT -- #
104
+
105
+ # "main" lut controls (always visible)
106
+ self .lut_ctrls = wx .BoxSizer (wx .HORIZONTAL )
107
+ self .lut_ctrls .Add (self .visible , 0 , wx .ALL , 2 )
108
+ self .lut_ctrls .Add (self .cmap , 0 , wx .ALL , 2 )
109
+ self .lut_ctrls .Add (self .clims , 1 , wx .ALL , 2 )
110
+ self .lut_ctrls .Add (self .auto_clim , 0 , wx .ALL , 2 )
111
+ self .lut_ctrls .Add (self .histogram_btn , 0 , wx .ALL , 2 )
112
+
113
+ # histogram controls go in their own sizer
119
114
histogram_ctrls = wx .BoxSizer (wx .VERTICAL )
120
115
histogram_ctrls .Add (self .log_btn , 0 , wx .ALL , 2 )
121
116
histogram_ctrls .Add (self .set_hist_range_btn , 0 , wx .ALL , 2 )
117
+
118
+ # histogram sizer contains controls + a histogram (which is added later)
119
+ self ._histogram_sizer = wx .BoxSizer (wx .HORIZONTAL )
122
120
self ._histogram_sizer .Add (histogram_ctrls , 0 , wx .EXPAND , 5 )
123
121
122
+ # Overall layout
124
123
self .sizer = wx .BoxSizer (wx .VERTICAL )
125
124
self .sizer .Add (self .lut_ctrls , 0 , wx .EXPAND , 5 )
126
125
self .sizer .Add (self ._histogram_sizer , 0 , wx .EXPAND , 5 )
@@ -138,6 +137,7 @@ def __init__(self, parent: wx.Window, channel: ChannelKey = None) -> None:
138
137
super ().__init__ ()
139
138
self ._wxwidget = wdg = _WxLUTWidget (parent )
140
139
self ._channel = channel
140
+ self .histogram : HistogramCanvas | None = None
141
141
# TODO: Fix type
142
142
self ._histogram : wx .Window | None = None
143
143
# TODO: use emit_fast
@@ -175,12 +175,12 @@ def _on_histogram_requested(self, event: wx.CommandEvent) -> None:
175
175
toggled = self ._wxwidget .histogram_btn .GetValue ()
176
176
self ._show_histogram (toggled )
177
177
178
- if self ._wxwidget . histogram is None :
178
+ if self .histogram is None :
179
179
self .histogramRequested .emit (self ._channel )
180
180
181
181
def _on_log_btn_toggled (self , event : wx .CommandEvent ) -> None :
182
182
toggled = self ._wxwidget .log_btn .GetValue ()
183
- if hist := self ._wxwidget . histogram :
183
+ if hist := self .histogram :
184
184
hist .set_log_base (10 if toggled else None )
185
185
186
186
def _on_set_histogram_range_clicked (self , event : wx .CommandEvent ) -> None :
@@ -191,7 +191,7 @@ def _on_set_histogram_range_clicked(self, event: wx.CommandEvent) -> None:
191
191
event = wx .PyCommandEvent (wx .EVT_TOGGLEBUTTON .typeId , btn .GetId ())
192
192
event .SetEventObject (btn )
193
193
wx .PostEvent (btn .GetEventHandler (), event )
194
- if hist := self ._wxwidget . histogram :
194
+ if hist := self .histogram :
195
195
hist .set_range ()
196
196
197
197
def _add_histogram (self , histogram : HistogramCanvas ) -> None :
@@ -209,30 +209,30 @@ def _add_histogram(self, histogram: HistogramCanvas) -> None:
209
209
210
210
# Setup references to the histogram
211
211
self ._histogram = widget
212
- self ._wxwidget . histogram = histogram
212
+ self .histogram = histogram
213
213
214
214
# Assign a fixed size
215
215
hist_size = wx .Size (self ._wxwidget .Size .width , self ._wxwidget ._histogram_height )
216
216
widget .SetMinSize (hist_size )
217
217
self ._wxwidget ._histogram_sizer .Add (widget , 0 , wx .ALIGN_CENTER , 5 )
218
218
219
219
def _show_histogram (self , show : bool = True ) -> None :
220
- def set_visible_in (sizer : wx .Sizer ) -> None :
221
- for child in sizer .GetChildren ():
222
- if child .IsSizer ():
223
- set_visible_in (child .GetSizer ())
224
- elif child .IsWindow ():
225
- child .GetWindow ().Show (show )
226
-
227
- set_visible_in (self ._wxwidget ._histogram_sizer )
228
-
229
- # Resize the widget around the histogram
220
+ # Recursively show/hide _histograrm_sizer
221
+ self ._set_sizer_visibility (show , self ._wxwidget ._histogram_sizer )
222
+ # Resize the widget
230
223
size = wx .Size (self ._wxwidget .lut_ctrls .MinSize )
231
224
if show :
232
225
size .height += self ._wxwidget ._histogram_height
233
226
self ._wxwidget .SetMinSize (size )
234
227
self ._wxwidget .GetParent ().Layout ()
235
228
229
+ def _set_sizer_visibility (self , show : bool , sizer : wx .Sizer ) -> None :
230
+ for child in sizer .GetChildren ():
231
+ if child .IsSizer ():
232
+ self ._set_sizer_visibility (show , child .GetSizer ())
233
+ elif child .IsWindow ():
234
+ child .GetWindow ().Show (show )
235
+
236
236
# Public Methods
237
237
def frontend_widget (self ) -> wx .Window :
238
238
return self ._wxwidget
0 commit comments