Salome HOME
Merge remote-tracking branch 'origin/rnv/vtk_opengl2_backend' into V8_1_BR
[modules/gui.git] / tools / CurvePlot / src / python / views / CurveView.py
1 from View import View
2 from utils import Logger
3
4 class CurveView(View):
5   _PICKER_PRECISION = 20  #pts
6     
7   def __init__(self, controller, parentXYView):
8     View.__init__(self, controller)
9     self._mplAxes = None
10     self._mplLines = None
11     self._isHighlighted = False
12     self._initialLineWidth = None
13     self._parentXYView = parentXYView
14     
15     self._marker = None
16     self._color = None
17     self._lineStyle = None
18     
19   def setMPLAxes(self, axes):
20     self._mplAxes = axes
21         
22   def erase(self):
23     self._mplAxes.lines.remove(self._mplLines[0])
24     self._mplLines = None
25     
26   def draw(self):
27     m = self._model
28     x_idx, y_idx = m.getXAxisIndex(), m.getYAxisIndex()
29     d = self._model.getTable().getData()
30     self._mplLines = self._mplAxes.plot(d[:, x_idx], d[:, y_idx], label=m._title, 
31                                         picker=self._PICKER_PRECISION)
32     self._initialLineWidth = self._mplLines[0].get_linewidth()
33   
34   def onCurveTitleChange(self):
35     if self._mplLines is None:
36       return
37     self._mplLines[0].set_label(self._model._title)
38   
39   def update(self):
40     Logger.Debug("CurveView::udpate")
41     if self._mplLines is None:
42       return
43     lineStyle, marker, color = self.getLineStyle(), self.getMarker(), self.getColor()
44     self.erase()
45     self.draw()
46     # Reset correctly color, marker and highlight state
47     self.setLineStyle(lineStyle)
48     self.setMarker(marker)
49     self.setColor(color)
50     self.toggleHighlight(self._isHighlighted, force=True)
51     
52   def setLineStyle(self, lin_style):
53     lin = self._mplLines[0] 
54     lin.set_linestyle(lin_style)
55     
56   def getLineStyle(self):
57     if self._mplLines is None:
58       return None
59     return self._mplLines[0].get_linestyle()
60     
61   def setMarker(self, marker):
62     lin = self._mplLines[0]
63     lin.set_marker(marker)
64
65   def getMarker(self):
66     if self._mplLines is None:
67       return None
68     return self._mplLines[0].get_marker()
69
70   def toggleHighlight(self, highlight, force=False):
71     lin = self._mplLines[0]
72     if highlight and (force or not self._isHighlighted):
73       lin.set_linewidth(2*self._initialLineWidth)
74       self._isHighlighted = True
75     elif not highlight and (force or self._isHighlighted):
76       lin.set_linewidth(self._initialLineWidth)
77       self._isHighlighted = False
78     else:
79       # Nothing to do, already the correct state
80       return
81     
82   def isHighlighted(self):
83     return self._isHighlighted
84     
85   def setColor(self, rgb_color):
86     lin = self._mplLines[0]
87     lin.set_color(rgb_color)
88     
89   def getColor(self):
90     if self._mplLines is None:
91       return None
92     return self._mplLines[0].get_color()