diff --git a/src/sas/qtgui/MainWindow/DataExplorer.py b/src/sas/qtgui/MainWindow/DataExplorer.py index fcad8c5197..bd97543d0a 100644 --- a/src/sas/qtgui/MainWindow/DataExplorer.py +++ b/src/sas/qtgui/MainWindow/DataExplorer.py @@ -1044,7 +1044,10 @@ def isPlotShown(self, plot): """ if not hasattr(plot, 'name'): return False - ids_vals = [val.data[0].name for val in self.active_plots.values()] + + ids_vals = [val.data[0].name for val in self.active_plots.values() + if val.data[0].plot_role != Data1D.ROLE_DATA or + isinstance(val.data[0], Data2D)] return plot.name in ids_vals diff --git a/src/sas/qtgui/MainWindow/UnitTesting/DataExplorerTest.py b/src/sas/qtgui/MainWindow/UnitTesting/DataExplorerTest.py index 7978c4b1b2..c6c0ce247b 100644 --- a/src/sas/qtgui/MainWindow/UnitTesting/DataExplorerTest.py +++ b/src/sas/qtgui/MainWindow/UnitTesting/DataExplorerTest.py @@ -14,14 +14,14 @@ import path_prepare # Local -from sas.qtgui.Plotting.PlotterData import Data1D +from sas.qtgui.Plotting.PlotterData import Data1D, Data2D from sas.sascalc.dataloader.loader import Loader from sas.qtgui.MainWindow.DataManager import DataManager from sas.qtgui.MainWindow.DataExplorer import DataExplorerWindow from sas.qtgui.MainWindow.GuiManager import GuiManager from sas.qtgui.Utilities.GuiUtils import * -from UnitTesting.TestUtils import QtSignalSpy +from sas.qtgui.UnitTesting.TestUtils import QtSignalSpy from sas.qtgui.Plotting.Plotter import Plotter from sas.qtgui.Plotting.Plotter2D import Plotter2D import sas.qtgui.Plotting.PlotHelper as PlotHelper @@ -917,6 +917,99 @@ def testClosePlotsForItem(self): self.assertEqual(len(PlotHelper.currentPlots()), 0) self.assertEqual(len(self.form.plot_widgets), 0) + def testPlotsFromMultipleData1D(self): + """ + Tests interplay between plotting 1D datasets and plotting + a single 1D dataset from two separate fit tabs + GH issue 1546 + """ + # prepare active_plots + plot1 = Plotter(parent=self.form) + data1 = Data1D() + data1.name = 'p1' + data1.plot_role = Data1D.ROLE_DATA + plot1.data = data1 + + plot2 = Plotter(parent=self.form) + data2 = Data1D() + data2.name = 'M2 [p1]' + data2.plot_role = Data1D.ROLE_DEFAULT + plot2.data = data2 + + plot3 = Plotter(parent=self.form) + data3 = Data1D() + data3.name = 'Residuals for M2[p1]' + data3.plot_role = Data1D.ROLE_RESIDUAL + plot3.data = data3 + + # pretend we're displaying three plots + self.form.active_plots['p1'] = plot1 + self.form.active_plots['M2 [p1]'] = plot2 + self.form.active_plots['Residuals for M2[p1]'] = plot3 + + # redoing plots from the same tab + # data -> must be shown + self.assertFalse(self.form.isPlotShown(data1)) + + # model and residuals are already shown + self.assertTrue(self.form.isPlotShown(data2)) + self.assertTrue(self.form.isPlotShown(data3)) + + # Try from different fit page + plot4 = Plotter(parent=self.form) + data4 = Data1D() + data4.name = 'M1 [p1]' + data4.plot_role = Data1D.ROLE_DEFAULT + plot4.data = data1 + # same data but must show, since different model + self.assertFalse(self.form.isPlotShown(data4)) + + def testPlotsFromMultipleData2D(self): + """ + Tests interplay between plotting 2D datasets and plotting + a single 2D dataset from two separate fit tabs + GH issue 1546 + """ + # prepare active_plots + plot1 = Plotter(parent=self.form) + data1 = Data2D() + data1.name = 'p1' + data1.plot_role = Data1D.ROLE_DATA + plot1.data = data1 + + plot2 = Plotter(parent=self.form) + data2 = Data2D() + data2.name = 'M2 [p1]' + data2.plot_role = Data1D.ROLE_DEFAULT + plot2.data = data2 + + plot3 = Plotter(parent=self.form) + data3 = Data2D() + data3.name = 'Residuals for M2[p1]' + data3.plot_role = Data1D.ROLE_RESIDUAL + plot3.data = data3 + + # pretend we're displaying three plots + self.form.active_plots['p1'] = plot1 + self.form.active_plots['M2 [p1]'] = plot2 + self.form.active_plots['Residuals for M2[p1]'] = plot3 + + # redoing plots from the same tab + # data -> Already there, don't show + self.assertTrue(self.form.isPlotShown(data1)) + + # model and residuals are already shown + self.assertTrue(self.form.isPlotShown(data2)) + self.assertTrue(self.form.isPlotShown(data3)) + + # Try from different fit page + plot4 = Plotter(parent=self.form) + data4 = Data2D() + data4.name = 'M1 [p1]' + plot4.data = data1 + # same data but must show, since different model + self.assertFalse(self.form.isPlotShown(data4)) + if __name__ == "__main__": unittest.main()