Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions src/sas/qtgui/Plotting/Plotter2D.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,14 +354,40 @@ def getActiveSlicerPlots(self):
break
return slicer_plots

def _slicerUsesPlotWindow(self, slicer, plot_window):
"""
Return True if slicer, or any nested slicer it owns, is associated
with plot_window.
"""
stack = [slicer]
seen = set()

while stack:
current = stack.pop()
if id(current) in seen:
continue
seen.add(id(current))

if getattr(current, "_plot_window", None) is plot_window:
return True

children = getattr(current, "slicers", None)
if children:
if isinstance(children, dict):
stack.extend(children.values())
else:
stack.extend(children)

return False

def removeSlicersForPlotWindow(self, plot_window):
"""
Remove any slicers associated with a closed slicer plot window.
"""
# Identify slicers associated with the closed plot window
removed_slicers = [
name for name, slicer in self.slicers.items()
if getattr(slicer, '_plot_window', None) is plot_window
if self._slicerUsesPlotWindow(slicer, plot_window)
]

if not removed_slicers:
Expand Down Expand Up @@ -394,7 +420,6 @@ def removeSlicersForPlotWindow(self, plot_window):
for slicer_name, slicer_obj in self.slicers.items():
if slicer_obj is self.slicer:
slicer_widget.checkSlicerByName(slicer_name)
print("Checked slicer")
break
if hasattr(self.slicer, 'model'):
slicer_widget.setModel(self.slicer.model())
Expand Down
Loading