1 from pyqtside import QtGui
2 from pyqtside.QtGui import QMenu
3 from pyqtside.QtCore import Qt
6 from CurveTreeDockWidget import CurveTreeDockWidget
7 from utils import Logger
9 class CurveBrowserView( View, CurveTreeDockWidget) :
11 def __init__( self, controller) :
13 View.__init__( self, controller)
14 CurveTreeDockWidget.__init__(self)
15 self._noUpdate = False
17 treeWidget = self.getTreeWidget()
18 treeWidget.itemSelectionChanged.connect(self.onItemSelectionChanged)
19 treeWidget.itemDoubleClicked.connect(self.onItemDoubleCliked)
20 treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
21 treeWidget.customContextMenuRequested.connect(self.openMenu)
24 """ Update this view due to model change """
25 if self._model == None or self._noUpdate:
28 # widget clear and repopulation will trigger onItemSelectionChanged(),
29 # which in turns triggers update() (via setCurrentCurve()). So avoid recursion:
32 treeWidget = self.getTreeWidget()
35 plotSets = self._model._plotSets
37 # The second (hidden) column in the tree bares the ID of the object and its nature (plotset or curve)
38 for p in plotSets.values():
39 item = QtGui.QTreeWidgetItem([unicode(p.getTitle()), unicode(p.getID()) + '_set'])
40 treeWidget.addTopLevelItem(item)
41 for c in p._curves.values():
42 chld = QtGui.QTreeWidgetItem([unicode(c.getTitle()), unicode(c.getID()) + '_crv'])
45 treeWidget.expandAll()
47 # Finally select the proper item in the tree:
48 cps = self._model.getCurrentPlotSet()
50 ccv = cps.getCurrentCurve()
52 key = str(cps.getID()) + '_set'
54 key = str(ccv.getID()) + '_crv'
55 listItems = treeWidget.findItems(key, Qt.MatchExactly | Qt.MatchRecursive,1)
56 if len(listItems) > 0:
57 treeWidget.setCurrentItem(listItems[0])
59 self._noUpdate = False
61 def onItemSelectionChanged(self):
63 Change the current selected XYplot/curve
68 # setCurrentCurve() and setCurrentPlotSet() will trigger update(),
69 # which in turns triggers onItemSelectionChanged(). So avoid recursion:
72 pm = self._controller._plotManager
73 treeWidget = self.getTreeWidget()
74 it = treeWidget.currentItem()
76 objStr = str(it.text(1)) # no unicode here!
77 objID = int(objStr[0:-4])
80 # Find correct plot set:
81 cps = pm.getPlotSetContainingCurve(objID)
83 cps.setCurrentCurve(objID)
84 pm.setCurrentPlotSet(cps.getID())
86 pm.clearAllCurrentCurve()
87 pm.setCurrentPlotSet(objID)
89 raise Exception("Internal error - should not happen")
91 ps = pm.getCurrentPlotSet()
93 ps.setCurrentCurve(-1)
94 pm.setCurrentPlotSet(-1)
96 self._noUpdate = False
98 def onItemDoubleCliked(self):
99 Logger.Debug("item doubled clicked")
101 def openMenu(self, position):
102 menu = self._controller._browserContextualMenu
103 treeWidget = self.getTreeWidget()
104 menu.exec_(treeWidget.mapToGlobal(position))