Skip to content

Commit 2c82b9d

Browse files
committed
WIP: Remove gross closures
1 parent 139d69c commit 2c82b9d

File tree

1 file changed

+17
-23
lines changed

1 file changed

+17
-23
lines changed

src/ndv/views/_qt/_array_view.py

+17-23
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pathlib import Path
66
from typing import TYPE_CHECKING, Any, cast
77

8+
import psygnal
89
from qtpy.QtCore import QSize, Qt, Signal
910
from qtpy.QtGui import QMovie
1011
from qtpy.QtWidgets import (
@@ -177,12 +178,15 @@ def __init__(self, parent: QWidget | None = None) -> None:
177178

178179

179180
class QLutView(LutView):
181+
# NB: In practice this will be a ChannelKey but Unions not allowed here.
182+
histogramRequested = psygnal.Signal(object)
183+
180184
def __init__(self, channel: ChannelKey = None) -> None:
181185
super().__init__()
182186
self._qwidget = _QLUTWidget()
183187
self._channel = channel
184-
self._histogram: QWidget | None = None
185188
# TODO: use emit_fast
189+
self._qwidget.histogram_btn.toggled.connect(self._on_q_histogram_toggled)
186190
self._qwidget.visible.toggled.connect(self._on_q_visibility_changed)
187191
self._qwidget.cmap.currentColormapChanged.connect(self._on_q_cmap_changed)
188192
self._qwidget.clims.valueChanged.connect(self._on_q_clims_changed)
@@ -237,6 +241,16 @@ def _on_q_auto_changed(self, autoscale: bool) -> None:
237241
clims = self._qwidget.clims.value()
238242
self._model.clims = ClimsManual(min=clims[0], max=clims[1])
239243

244+
def _on_q_histogram_toggled(self, toggled: bool) -> None:
245+
container = self._qwidget._histogram_container
246+
if count := container.count():
247+
for i in range(count):
248+
item = container.itemAt(i).widget()
249+
if isinstance(item, QWidget):
250+
item.setVisible(toggled)
251+
elif toggled:
252+
self.histogramRequested.emit(self._channel)
253+
240254

241255
class _QDimsSliders(QWidget):
242256
currentIndexChanged = Signal()
@@ -370,10 +384,6 @@ def __init__(self, canvas_widget: QWidget, parent: QWidget | None = None):
370384
set_range_icon = QIconifyIcon("fluent:full-screen-maximize-24-filled")
371385
self.set_range_btn = QPushButton(set_range_icon, "", self)
372386

373-
# # button to add a histogram
374-
# add_histogram_icon = QIconifyIcon("foundation:graph-bar")
375-
# self.histogram_btn = QPushButton(add_histogram_icon, "", self)
376-
377387
self.luts = _UpCollapsible(
378388
"LUTs",
379389
parent=self,
@@ -389,7 +399,6 @@ def __init__(self, canvas_widget: QWidget, parent: QWidget | None = None):
389399

390400
self._btn_layout.addWidget(self.channel_mode_combo)
391401
self._btn_layout.addWidget(self.ndims_btn)
392-
# self._btn_layout.addWidget(self.histogram_btn)
393402
self._btn_layout.addWidget(self.set_range_btn)
394403
# self._btns.addWidget(self._add_roi_btn)
395404

@@ -456,14 +465,7 @@ def add_lut_view(self, channel: ChannelKey) -> QLutView:
456465
view = QLutView(channel)
457466
self._luts[channel] = view
458467

459-
def _on_histogram_requested(toggled: bool) -> None:
460-
if view._histogram:
461-
view._histogram.setVisible(toggled)
462-
else:
463-
self.histogramRequested.emit(view._channel)
464-
465-
# TODO: This ugly
466-
view._qwidget.histogram_btn.toggled.connect(_on_histogram_requested)
468+
view.histogramRequested.connect(self.histogramRequested)
467469
self._qwidget.luts.addWidget(view.frontend_widget())
468470
return view
469471

@@ -485,20 +487,12 @@ def _on_add_histogram_clicked(self, channel: int) -> None:
485487

486488
def add_histogram(self, channel: ChannelKey, widget: QWidget) -> None:
487489
if lut := self._luts.get(channel, None):
488-
# FIXME: Yuck
490+
# # FIXME: Yuck
489491
lut._qwidget.resize(
490492
QSize(lut._qwidget.width(), lut._qwidget.height() + 100)
491493
)
492494
widget.resize(QSize(lut._qwidget.width(), 100))
493495
lut._qwidget._histogram_container.addWidget(widget)
494-
lut._histogram = widget
495-
496-
# self._qwidget.luts.childAt
497-
# if hasattr(self, "_hist"):
498-
# raise RuntimeError("Only one histogram can be added at a time")
499-
# self._hist = widget
500-
# self._qwidget.splitter.addWidget(widget)
501-
# self._qwidget.splitter.setSizes([self._qwidget.height() - 100, 100])
502496

503497
def remove_histogram(self, widget: QWidget) -> None:
504498
widget.setParent(None)

0 commit comments

Comments
 (0)