Skip to content

Commit

Permalink
Merge pull request #2365 from SasView/2350-delete-closes-dream-panel
Browse files Browse the repository at this point in the history
2350: Close the BUMPS/DREAM results panel when data is deleted
  • Loading branch information
butlerpd authored Nov 8, 2022
2 parents b0bd593 + b362961 commit fa56cb1
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 9 deletions.
11 changes: 11 additions & 0 deletions src/sas/qtgui/MainWindow/DataExplorer.py
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,10 @@ def deleteFile(self, event):

# Delete corresponding open plots
self.closePlotsForItem(item)
# Close result panel if results represent the deleted data item
# Results panel only stores Data1D/Data2D object
# => QStandardItems must still exist for direct comparison
self.closeResultPanelOnDelete(GuiUtils.dataFromItem(item))

self.model.removeRow(ind)
# Decrement index since we just deleted it
Expand Down Expand Up @@ -1905,6 +1909,13 @@ def closePlotsForItem(self, item):

pass # debugger anchor

def closeResultPanelOnDelete(self, data):
"""
Given a data1d/2d object, close the fitting results panel if currently populated with the data
"""
# data - Single data1d/2d object to be deleted
self.parent.results_panel.onDataDeleted(data)

def onAnalysisUpdate(self, new_perspective_name: str):
"""
Update the perspective combo index based on passed string
Expand Down
35 changes: 26 additions & 9 deletions src/sas/qtgui/Utilities/ResultPanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from PyQt5 import QtGui
from PyQt5 import QtWidgets


class ResultPanel(QtWidgets.QTabWidget):
"""
FitPanel class contains fields allowing to fit models and data
Expand All @@ -28,6 +29,7 @@ def __init__(self, parent, manager=None, *args, **kwargs):
self.manager = manager
self.communicator = self.manager.communicator()
self.setMinimumSize(400, 400)
self.data_id = None

self.updateBumps() # patch bumps ## TEMPORARY ##

Expand All @@ -54,18 +56,13 @@ def updateBumps(self):
def onPlotResults(self, results, optimizer="Unknown"):
# import moved here due to its cost
from bumps.dream.stats import var_stats, format_vars
# Clear up previous results
for view in (self.convergenceView, self.correlationView,
self.uncertaintyView, self.traceView):
view.close()
# close all tabs. REMEMBER TO USE REVERSED RANGE!!!
for index in reversed(range(self.count())):
self.removeTab(index)
self.clearAnyData()

result = results[0][0]
filename = result.data.sas_data.filename
name = result.data.sas_data.name
current_optimizer = optimizer
self.setWindowTitle(self.window_name + " - " + filename + " - " + current_optimizer)
self.data_id = result.data.sas_data.id
self.setWindowTitle(self.window_name + " - " + name + " - " + current_optimizer)
if hasattr(result, 'convergence') and len(result.convergence) > 0:
best, pop = result.convergence[:, 0], result.convergence[:, 1:]
self.convergenceView.update(best, pop)
Expand Down Expand Up @@ -94,6 +91,26 @@ def onPlotResults(self, results, optimizer="Unknown"):
if self.count()==0:
self.close()

def onDataDeleted(self, data):
""" Check if the data set is shown in the window and close tabs as needed. """
if not data or not self.isVisible():
return
if data.id == self.data_id:
self.setWindowTitle(self.window_name)
self.clearAnyData()
self.close()

def clearAnyData(self):
""" Clear any previous results and reset window to its base state. """
self.data_id = None
# Clear up previous results
for view in (self.convergenceView, self.correlationView,
self.uncertaintyView, self.traceView):
view.close()
# close all tabs. REMEMBER TO USE REVERSED RANGE!!!
for index in reversed(range(self.count())):
self.removeTab(index)

def closeEvent(self, event):
"""
Overwrite QDialog close method to allow for custom widget close
Expand Down

0 comments on commit fa56cb1

Please sign in to comment.