Salome HOME
c8b00f631142adfbb949f53a738616c5cf68ef4a
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_CanvasControlNodePrs.cxx
1 //  SUPERV SUPERVGUI : GUI for Supervisor component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE
4 //
5 //  File   : SUPERVGUI_CanvasControlNodePrs.cxx
6 //  Author : Natalia KOPNOVA
7 //  Module : SUPERV
8
9
10 using namespace std;
11 #include "SUPERVGUI_CanvasControlNodePrs.h"
12 #include "SUPERVGUI_CanvasControlNode.h"
13 #include "SUPERVGUI_Canvas.h"
14
15 #define SHIFT LABEL_HEIGHT/2
16
17 //=====================================================================
18 // Control node presentation
19 //=====================================================================
20 SUPERVGUI_CanvasControlNodePrs::SUPERVGUI_CanvasControlNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, SUPERVGUI_CanvasNode* theNode):
21   SUPERVGUI_CanvasNodePrs( mgr, theCanvas, theNode)
22 {
23   Trace("SUPERVGUI_CanvasControlNodePrs::SUPERVGUI_CanvasControlNodePrs");
24   setLabelVisible(false);
25   setNodeColor(Qt::cyan.light());
26 }
27
28 void SUPERVGUI_CanvasControlNodePrs::hideAll()
29 {
30   bool aDisp = isVisible();
31   if (aDisp) hide();
32
33   setPortVisible(false);
34
35   if (aDisp) {
36     show();
37     canvas()->update();
38   }
39 }
40
41 void SUPERVGUI_CanvasControlNodePrs::showAll()
42 {
43   bool aDisp = isVisible();
44   if (aDisp) hide();
45
46   setPortVisible(true);
47
48   if (aDisp) {
49     show();
50     canvas()->update();
51   }
52 }
53
54 QRect SUPERVGUI_CanvasControlNodePrs::getStatusRect() const
55 {
56   return QRect((int)x(), ((int)y())+getTitleHeight()+getLabelHeight()+
57                getBodyHeight()+getGateHeight(),
58                width(), getStatusHeight());
59 }
60
61 QRect SUPERVGUI_CanvasControlNodePrs::getBodyRect() const
62 {
63   return QRect((int)x(), ((int)y())+getTitleHeight()+getLabelHeight(), 
64                width(), getBodyHeight());
65 }
66
67 QRect SUPERVGUI_CanvasControlNodePrs::getGateRect() const
68 {
69   return QRect((int)x(), ((int)y())+getTitleHeight()+getLabelHeight()+getBodyHeight(), 
70                width(), getGateHeight());
71 }
72
73 //=====================================================================
74 // Start control node presentation
75 //=====================================================================
76 SUPERVGUI_CanvasStartNodePrs::SUPERVGUI_CanvasStartNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, SUPERVGUI_CanvasStartNode* theNode):
77   SUPERVGUI_CanvasControlNodePrs( mgr, theCanvas, theNode)
78 {
79   Trace("SUPERVGUI_CanvasStartNodePrs::SUPERVGUI_CanvasStartNodePrs");
80 }
81
82 QPointArray SUPERVGUI_CanvasStartNodePrs::areaPoints() const
83 {
84   int w = width();
85   int h = height()+2; // add width of pen 
86
87   int h1 = getTitleHeight()+1;
88   int h2 = getStatusHeight()+1;
89
90   QPointArray aPnts(8);
91   QPoint p((int)x(), (int)y()-1);
92   aPnts[0] = p + QPoint(0, h1);
93   aPnts[1] = p + QPoint(SHIFT, 0);
94   aPnts[2] = aPnts[1] + QPoint(w, 0);
95   aPnts[3] = aPnts[0] + QPoint(w, 0);
96   aPnts[4] = aPnts[3] + QPoint(0, h-h1-h2);
97   aPnts[5] = aPnts[2] + QPoint(0, h);
98   aPnts[6] = aPnts[1] + QPoint(0, h);
99   aPnts[7] = aPnts[0] + QPoint(0, h-h1-h2);
100   return aPnts;
101 }
102
103 void SUPERVGUI_CanvasStartNodePrs::drawFrame(QPainter& thePainter) 
104 {
105   QRect r = getRect();
106
107   int h1 = getTitleHeight();
108   int h2 = getStatusHeight();
109
110   QRect r0(r.x(), r.y()+h1, r.width(), r.height()-h1-h2);
111
112   QBrush saved = thePainter.brush();
113   thePainter.setBrush(NoBrush);
114   thePainter.drawRect(r0);
115   thePainter.setBrush(saved);
116 }
117
118 void SUPERVGUI_CanvasStartNodePrs::drawTitleShape(QPainter& thePainter) 
119 {
120   QRect r = getTitleRect();
121   int w = width()-1;
122
123   QPointArray aPnts(4);
124   aPnts[0] = r.topLeft() + QPoint(0, r.height());
125   aPnts[1] = r.topLeft() + QPoint(SHIFT, 0);
126   aPnts[2] = aPnts[1] + QPoint(w, 0);
127   aPnts[3] = aPnts[0] + QPoint(w, 0);
128
129   thePainter.setBrush(Qt::red.light());
130   thePainter.drawPolygon(aPnts);
131 }
132
133 void SUPERVGUI_CanvasStartNodePrs::drawStatusShape(QPainter& thePainter) 
134 {
135   QRect r = getStatusRect();
136   int w = width()-1;
137
138   QPointArray aPnts(4);
139   aPnts[0] = r.topLeft() + QPoint(SHIFT, r.height());
140   aPnts[1] = r.topLeft();
141   aPnts[2] = aPnts[1] + QPoint(w, 0);
142   aPnts[3] = aPnts[0] + QPoint(w, 0);
143
144   thePainter.drawPolygon(aPnts);
145 }
146
147
148 void SUPERVGUI_CanvasStartNodePrs::setState(SUPERV::GraphState theState) 
149 {
150   QRect r = getStatusRect();
151   canvas()->setChanged(QRect(r.x(), r.y(), r.width()+SHIFT, r.height()));
152   SUPERVGUI_CanvasNodePrs::setState(theState);
153 }
154
155
156 //=====================================================================
157 // End control node presentation
158 //=====================================================================
159 SUPERVGUI_CanvasEndNodePrs::SUPERVGUI_CanvasEndNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, SUPERVGUI_CanvasEndNode* theNode):
160   SUPERVGUI_CanvasControlNodePrs(mgr,theCanvas, theNode)
161 {
162   Trace("SUPERVGUI_CanvasEndNodePrs::SUPERVGUI_CanvasEndNodePrs");
163 }
164
165 QPointArray SUPERVGUI_CanvasEndNodePrs::areaPoints() const
166 {
167   int w = width();
168   int h = height()+2;
169
170   int h1 = getTitleHeight()+1;
171   int h2 = getStatusHeight()+1;
172
173   QPointArray aPnts(8);
174   QPoint p((int)x(), (int)y()-1);
175   aPnts[0] = p + QPoint(0, h1);
176   aPnts[1] = p + QPoint(-SHIFT, 0);
177   aPnts[2] = aPnts[1] + QPoint(w, 0);
178   aPnts[3] = aPnts[0] + QPoint(w, 0);
179   aPnts[4] = aPnts[3] + QPoint(0, h-h1-h2);
180   aPnts[5] = aPnts[2] + QPoint(0, h);
181   aPnts[6] = aPnts[1] + QPoint(0, h);
182   aPnts[7] = aPnts[0] + QPoint(0, h-h1-h2);
183   return aPnts;
184 }
185
186 void SUPERVGUI_CanvasEndNodePrs::drawFrame(QPainter& thePainter) 
187 {
188   QRect r = getRect();
189
190   int h1 = getTitleHeight();
191   int h2 = getStatusHeight();
192
193   QRect r0(r.x(), r.y()+h1, r.width(), r.height()-h1-h2);
194
195   QBrush saved = thePainter.brush();
196   thePainter.setBrush(NoBrush);
197   thePainter.drawRect(r0);
198   thePainter.setBrush(saved);
199 }
200
201 void SUPERVGUI_CanvasEndNodePrs::drawTitleShape(QPainter& thePainter) 
202 {
203   QRect r = getTitleRect();
204   int w = width()-1;
205
206   QPointArray aPnts(4);
207   aPnts[0] = r.topLeft() + QPoint(0, r.height());
208   aPnts[1] = r.topLeft() + QPoint(-SHIFT, 0);
209   aPnts[2] = aPnts[1] + QPoint(w, 0);
210   aPnts[3] = aPnts[0] + QPoint(w, 0);
211
212   thePainter.setBrush(Qt::red.light());
213   thePainter.drawPolygon(aPnts);
214 }
215
216 void SUPERVGUI_CanvasEndNodePrs::drawStatusShape(QPainter& thePainter) 
217 {
218   QRect r = getStatusRect();
219   int w = width()-1;
220
221   QPointArray aPnts(4);
222   aPnts[0] = r.topLeft() + QPoint(-SHIFT, r.height());
223   aPnts[1] = r.topLeft();
224   aPnts[2] = aPnts[1] + QPoint(w, 0);
225   aPnts[3] = aPnts[0] + QPoint(w, 0);
226
227   thePainter.drawPolygon(aPnts);
228 }
229
230 void SUPERVGUI_CanvasEndNodePrs::setState(SUPERV::GraphState theState)
231 {
232   QRect r = getStatusRect();
233   canvas()->setChanged(QRect(r.x()-SHIFT, r.y(), r.width()+SHIFT, r.height()));
234   SUPERVGUI_CanvasNodePrs::setState(theState);
235 }
236
237 //=====================================================================
238 // Goto control node presentation
239 //=====================================================================
240 SUPERVGUI_CanvasGotoNodePrs::SUPERVGUI_CanvasGotoNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, SUPERVGUI_CanvasGotoNode* theNode):
241   SUPERVGUI_CanvasControlNodePrs(mgr, theCanvas, theNode)
242 {
243   Trace("SUPERVGUI_CanvasGotoNodePrs::SUPERVGUI_CanvasGotoNodePrs");
244 }
245
246 QPointArray SUPERVGUI_CanvasGotoNodePrs::areaPoints() const
247 {
248   int w = width();
249   int h = height()+2;
250
251   int h1 = getTitleHeight()+1;
252   int h2 = getStatusHeight()+1;
253
254   QPointArray aPnts(8);
255   QPoint p((int)x(), (int)y()-1);
256   aPnts[0] = p + QPoint(0, h1);
257   aPnts[1] = p + QPoint(SHIFT, 0);
258   aPnts[2] = aPnts[1] + QPoint(w-2*SHIFT, 0);
259   aPnts[3] = aPnts[0] + QPoint(w, 0);
260   aPnts[4] = aPnts[3] + QPoint(0, h-h1-h2);
261   aPnts[5] = aPnts[2] + QPoint(0, h);
262   aPnts[6] = aPnts[1] + QPoint(0, h);
263   aPnts[7] = aPnts[0] + QPoint(0, h-h1-h2);
264   return aPnts;
265 }
266
267 void SUPERVGUI_CanvasGotoNodePrs::drawFrame(QPainter& thePainter) 
268 {
269   QRect r = getRect();
270
271   int h1 = getTitleHeight();
272   int h2 = getStatusHeight();
273
274   QRect r0(r.x(), r.y()+h1, r.width(), r.height()-h1-h2);
275
276   QBrush saved = thePainter.brush();
277   thePainter.setBrush(NoBrush);
278   thePainter.drawRect(r0);
279   thePainter.setBrush(saved);
280 }
281
282 void SUPERVGUI_CanvasGotoNodePrs::drawTitleShape(QPainter& thePainter) 
283 {
284   QRect r = getTitleRect();
285   int w = width()-1;
286
287   QPointArray aPnts(4);
288   aPnts[0] = r.topLeft() + QPoint(0, r.height());
289   aPnts[1] = r.topLeft() + QPoint(SHIFT, 0);
290   aPnts[2] = aPnts[1] + QPoint(w-2*SHIFT, 0);
291   aPnts[3] = aPnts[0] + QPoint(w, 0);
292
293   thePainter.setBrush(Qt::green.light());
294   thePainter.drawPolygon(aPnts);
295 }
296
297 void SUPERVGUI_CanvasGotoNodePrs::drawStatusShape(QPainter& thePainter) 
298 {
299   QRect r = getStatusRect();
300   int w = width()-1;
301
302   QPointArray aPnts(4);
303   aPnts[0] = r.topLeft() + QPoint(SHIFT, r.height());
304   aPnts[1] = r.topLeft();
305   aPnts[2] = aPnts[1] + QPoint(w, 0);
306   aPnts[3] = aPnts[0] + QPoint(w-2*SHIFT, 0);
307
308   thePainter.drawPolygon(aPnts);
309 }
310
311
312 //=====================================================================
313 // Macro node presentation
314 //=====================================================================
315 SUPERVGUI_CanvasMacroNodePrs::SUPERVGUI_CanvasMacroNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, SUPERVGUI_CanvasMacroNode* theNode):
316   SUPERVGUI_CanvasNodePrs( mgr, theCanvas, theNode)
317 {
318   Trace("SUPERVGUI_CanvasControlNodePrs::SUPERVGUI_CanvasControlNodePrs");
319   setNodeColor(QColor(255, 186, 149)); //QColor(255, 200, 170));
320 }
321
322 void SUPERVGUI_CanvasMacroNodePrs::drawFrame(QPainter& thePainter) 
323 {
324   SUPERVGUI_CanvasNodePrs::drawFrame(thePainter);
325
326   QPen saved = thePainter.pen();
327   thePainter.setPen(QPen(saved.color(), 2));
328
329   QRect r = getRect();
330   thePainter.drawLine(r.left(), r.top(), r.left(), r.bottom());
331   thePainter.drawLine(r.left()+3, r.top(), r.left()+3, r.bottom());
332   thePainter.drawLine(r.right()-3, r.top(), r.right()-3, r.bottom());
333   thePainter.drawLine(r.right(), r.top(), r.right(), r.bottom());
334   thePainter.setPen(saved);
335 }
336
337 QPointArray SUPERVGUI_CanvasMacroNodePrs::areaPoints() const
338 {
339   int w = width()+2; // add width of pen
340   int h = height()+1;
341
342   QPointArray aPnts(4);
343   aPnts[0] = QPoint((int)x()-1, (int)y());
344   aPnts[1] = aPnts[0] + QPoint(w, 0);
345   aPnts[2] = aPnts[1] + QPoint(0, h);
346   aPnts[3] = aPnts[0] + QPoint(0, h);
347   return aPnts;
348 }