Skip to content

Commit 3e66df0

Browse files
committed
Clean up wx LutView
1 parent 5ac6598 commit 3e66df0

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

src/ndv/views/_wx/_array_view.py

+32-32
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class _WxLUTWidget(wx.Panel):
7171
def __init__(self, parent: wx.Window) -> None:
7272
super().__init__(parent)
7373

74+
# -- WDIDGETS -- #
7475
self.visible = wx.CheckBox(self, label="Visible")
7576
self.visible.SetValue(True)
7677

@@ -86,41 +87,39 @@ def __init__(self, parent: wx.Window) -> None:
8687

8788
self.auto_clim = wx.ToggleButton(self, label="Auto", size=(50, -1))
8889

89-
self.histogram: HistogramCanvas | None = None
9090
self._histogram_height = 100 # px
9191
self.histogram_btn = wx.ToggleButton(self, label="Hist", size=(40, -1))
9292
_add_icon(self.histogram_btn, "foundation:graph-bar")
9393

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)
11094
self.set_hist_range_btn = wx.Button(self, label="Reset", size=(40, -1))
11195
_add_icon(self.set_hist_range_btn, "fluent:full-screen-maximize-24-filled")
11296
self.set_hist_range_btn.Show(False)
11397

11498
self.log_btn = wx.ToggleButton(self, label="Log", size=(40, -1))
115-
_add_icon(self.log_btn, "mdi:math-log")
11699
self.log_btn.SetToolTip("log (base 10, count+1)")
100+
_add_icon(self.log_btn, "mdi:math-log")
117101
self.log_btn.Show(False)
118102

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
119114
histogram_ctrls = wx.BoxSizer(wx.VERTICAL)
120115
histogram_ctrls.Add(self.log_btn, 0, wx.ALL, 2)
121116
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)
122120
self._histogram_sizer.Add(histogram_ctrls, 0, wx.EXPAND, 5)
123121

122+
# Overall layout
124123
self.sizer = wx.BoxSizer(wx.VERTICAL)
125124
self.sizer.Add(self.lut_ctrls, 0, wx.EXPAND, 5)
126125
self.sizer.Add(self._histogram_sizer, 0, wx.EXPAND, 5)
@@ -138,6 +137,7 @@ def __init__(self, parent: wx.Window, channel: ChannelKey = None) -> None:
138137
super().__init__()
139138
self._wxwidget = wdg = _WxLUTWidget(parent)
140139
self._channel = channel
140+
self.histogram: HistogramCanvas | None = None
141141
# TODO: Fix type
142142
self._histogram: wx.Window | None = None
143143
# TODO: use emit_fast
@@ -175,12 +175,12 @@ def _on_histogram_requested(self, event: wx.CommandEvent) -> None:
175175
toggled = self._wxwidget.histogram_btn.GetValue()
176176
self._show_histogram(toggled)
177177

178-
if self._wxwidget.histogram is None:
178+
if self.histogram is None:
179179
self.histogramRequested.emit(self._channel)
180180

181181
def _on_log_btn_toggled(self, event: wx.CommandEvent) -> None:
182182
toggled = self._wxwidget.log_btn.GetValue()
183-
if hist := self._wxwidget.histogram:
183+
if hist := self.histogram:
184184
hist.set_log_base(10 if toggled else None)
185185

186186
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:
191191
event = wx.PyCommandEvent(wx.EVT_TOGGLEBUTTON.typeId, btn.GetId())
192192
event.SetEventObject(btn)
193193
wx.PostEvent(btn.GetEventHandler(), event)
194-
if hist := self._wxwidget.histogram:
194+
if hist := self.histogram:
195195
hist.set_range()
196196

197197
def _add_histogram(self, histogram: HistogramCanvas) -> None:
@@ -209,30 +209,30 @@ def _add_histogram(self, histogram: HistogramCanvas) -> None:
209209

210210
# Setup references to the histogram
211211
self._histogram = widget
212-
self._wxwidget.histogram = histogram
212+
self.histogram = histogram
213213

214214
# Assign a fixed size
215215
hist_size = wx.Size(self._wxwidget.Size.width, self._wxwidget._histogram_height)
216216
widget.SetMinSize(hist_size)
217217
self._wxwidget._histogram_sizer.Add(widget, 0, wx.ALIGN_CENTER, 5)
218218

219219
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
230223
size = wx.Size(self._wxwidget.lut_ctrls.MinSize)
231224
if show:
232225
size.height += self._wxwidget._histogram_height
233226
self._wxwidget.SetMinSize(size)
234227
self._wxwidget.GetParent().Layout()
235228

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+
236236
# Public Methods
237237
def frontend_widget(self) -> wx.Window:
238238
return self._wxwidget

0 commit comments

Comments
 (0)