Salome HOME
Merge multi-study removal branch.
[modules/gui.git] / tools / CurvePlot / src / python / views / CurveTabsView.py
1 from View import View
2 from XYView import XYView
3 from utils import Logger
4
5 class CurveTabsView(View):
6   def __init__(self, controller):
7     View.__init__(self, controller)
8     self._XYViews = {}  # key: SALOME view ID, value: XYView
9       
10   def closeXYView(self, salomeViewID):
11     Logger.Debug("CurveTabsView::closeXYView: %d" % salomeViewID)
12     self._controller.setCurvePlotRequestingClose(True)
13     self._controller._sgPyQt.closeView(salomeViewID)
14     self._controller.setCurvePlotRequestingClose(False)
15     # Destroy the view
16     self._XYViews.pop(salomeViewID)
17     Logger.Debug("CurveTabsView::closeXYView count %d" % len(self._XYViews))
18   
19   def createXYView(self, model):
20     v = XYView(self._controller)
21     self._controller.associate(model, v)
22     return v
23   
24   def onCurrentPlotSetChange(self):
25     """ Avoid a unnecessary call to update() when just switching current plot set! """
26     cps = self._model.getCurrentPlotSet()
27     if not cps is None:
28       mp = self.mapModId2ViewId()
29       salomeViewID = mp[cps.getID()]
30       self._controller._sgPyQt.activateView(salomeViewID)
31   
32   def mapModId2ViewId(self):
33     """ Gives a map from model ID (the model behind the XYView) to view ID
34     """
35     lst = [(v._model.getID(), view_id) for view_id, v in self._XYViews.items()]
36     return dict(lst)
37   
38   def update(self):
39     """
40     Updates the list of tabs shown in the GUI
41     """
42     if self._model is None:
43         return
44     
45     # Check list of tabs:
46     set_mod = set(self._model._plotSets.keys())
47     set_view = set([ v._model.getID() for v in self._XYViews.values() ])
48     mp = self.mapModId2ViewId()
49     
50     # Deleted/Added curves:
51     dels = set_view - set_mod
52     added = set_mod - set_view
53     
54     for d in dels:
55       salomeViewID = mp[d]
56       v = self._XYViews[salomeViewID]
57       v.cleanBeforeClose()
58       self.closeXYView(salomeViewID)
59     
60     newViews = []
61     for a in added:
62       newViews.append(self.createXYView(self._model._plotSets[a]))
63     
64     # Now update all tabs individually (this will trigger creation of new ones if not already there):
65     for v in self._XYViews.values() + newViews:
66       # The update on newViews will trigger the SALOME view creation:
67       v.update() 
68     
69     # And complete internal structure for new views
70     # This is not done in 
71     for v in newViews:
72       self._XYViews[v._salomeViewID] = v
73       
74     # Finally activate the proper tab:
75     self.onCurrentPlotSetChange()
76