Salome HOME
"Loading" state added to presentation of node in array view.
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_CanvasCellNodePrs.cxx
1 //  SUPERV SUPERVGUI : GUI for Supervisor component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE
4 //
5 //  File   : SUPERVGUI_CanvasCellNodePrs.cxx
6 //  Author : 
7 //  Module : SUPERV
8
9 #include "SUPERVGUI_CanvasCellNodePrs.h"
10 #include "SUPERVGUI_Canvas.h"
11
12 #define TEXT_MARGIN 5
13
14 // ----------------------------------------------------------
15 // Cell widget of the table on QCanvas
16 // ----------------------------------------------------------
17 SUPERVGUI_CanvasCellNodePrs::SUPERVGUI_CanvasCellNodePrs(QCanvas* theCanvas, SUPERVGUI_CanvasCellNode* theNode):
18   myTitleWidth(CELL_WIDTH_PART),
19   myLabelWidth(CELL_WIDTH_PART),
20   myStatusWidth(CELL_WIDTH_PART), 
21   SUPERVGUI_CanvasNodePrs(theCanvas, theNode, true)
22 {
23   MESSAGE("SUPERVGUI_CanvasCellNodePrs::SUPERVGUI_CanvasCellNodePrs");
24
25   //setZ(0);
26   myPortVisible = false;
27
28   QCanvasItemList anIL2 = canvas()->allItems();
29   cout<<" ===> 1 conatructor CellPrs : CanvasArray has "<<anIL2.count()<<" children!"<<endl;
30 }
31
32 void SUPERVGUI_CanvasCellNodePrs::moveBy(double dx, double dy) {
33   Trace("SUPERVGUI_CanvasCellNodePrs::moveBy");
34   int aX = (int) (x()+dx);
35   int aY = (int) (y()+dy);
36
37   int w = aX + width() + GRAPH_MARGIN;
38   int h = aY + height() + GRAPH_MARGIN;
39   if (canvas()->width() > w) w = canvas()->width();
40   if (canvas()->height() > h) h = canvas()->height();
41   if (canvas()->width() < w || canvas()->height() < h)
42     canvas()->resize(w, h);
43   QCanvasPolygonalItem::moveBy(dx, dy);
44 }
45
46 void SUPERVGUI_CanvasCellNodePrs::drawShape(QPainter& thePainter) {
47   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawShape  begin");
48   drawTitle(thePainter);
49   drawLabel(thePainter);
50   drawStatus(thePainter);
51   drawFrame(thePainter);
52   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawShape  end");
53 }
54
55 void drawCellText(QPainter& thePainter, const QString& theText, 
56                   const QRect& theRect, int theHAlign = Qt::AlignAuto)
57 {
58   int flags = theHAlign | Qt::AlignVCenter;
59   QRect r(theRect.x() + TEXT_MARGIN, theRect.y(), 
60           theRect.width() - 2*TEXT_MARGIN, theRect.height());
61
62   QWMatrix aMat = thePainter.worldMatrix();
63   if (aMat.m11() != 1.0) { 
64     // for scaled picture only
65     QRect r1 = aMat.mapRect(r);
66     QFont saved = thePainter.font();
67     QFont f(saved);
68     if (f.pointSize() == -1) {
69       f.setPixelSize(f.pixelSize()*aMat.m11());
70     }
71     else {
72       f.setPointSize(f.pointSize()*aMat.m11());
73     }
74     thePainter.save();
75     QWMatrix m;
76     thePainter.setWorldMatrix(m);
77     thePainter.setFont(f);
78     thePainter.drawText(r1, flags, theText);
79     thePainter.setFont(saved);
80     thePainter.restore();
81   }
82   else {
83     thePainter.drawText(r, flags, theText);
84   }
85 }
86
87 void SUPERVGUI_CanvasCellNodePrs::drawTitle(QPainter& thePainter) {
88   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawTitle  begin");
89   QBrush saved = thePainter.brush();
90   if (getNode()->getEngine()->IsLoop() || getNode()->getEngine()->IsEndLoop()
91       ||
92       getNode()->getEngine()->IsSwitch() || getNode()->getEngine()->IsEndSwitch())
93     thePainter.setBrush(Qt::red.light());
94   else if (getNode()->getEngine()->IsGOTO())
95     thePainter.setBrush(Qt::green.light());
96   else {
97     QBrush br(MAIN_TITLE);
98     thePainter.setBrush(br);
99   }
100   drawTitleShape(thePainter);
101   thePainter.setBrush(saved);
102
103   drawCellText(thePainter, getNode()->getEngine()->Name(), getTitleRect(), Qt::AlignLeft);
104   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawTitle  end");
105 }
106
107 void SUPERVGUI_CanvasCellNodePrs::drawLabel(QPainter& thePainter) 
108 {
109   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawLabel  begin");
110   QRect r = getLabelRect();
111
112   QPen saved = thePainter.pen();
113   thePainter.setPen(NoPen);
114   thePainter.drawRect(r);
115   thePainter.setPen(saved);
116
117   drawCellText(thePainter, getNode()->getLabelText(), r, Qt::AlignLeft);
118   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawLabel  end");
119 }
120
121 void SUPERVGUI_CanvasCellNodePrs::drawStatus(QPainter& thePainter) 
122 {
123   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawStatus  begin");
124   QRect r = getStatusRect();
125
126   QBrush savedB = thePainter.brush();
127   thePainter.setBrush(getStatusColor());
128   drawStatusShape(thePainter);
129   thePainter.setBrush(savedB);
130
131   drawCellText(thePainter, getStatus(), r, Qt::AlignHCenter);
132   MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawStatus  end");
133 }
134
135 QRect SUPERVGUI_CanvasCellNodePrs::getTitleRect() const
136 {
137   MESSAGE("SUPERVGUI_CanvasCellNodePrs::getTitleRect()!!!");
138   cout<<" xT = "<<(int)x()
139       <<" yT = "<<(int)y()
140       <<" wT = "<<getTitleWidth()
141       <<" hT = "<<getTitleHeight()<<endl;
142   return QRect((int)x(), (int)y(), getTitleWidth(), getTitleHeight());
143 }
144
145 QRect SUPERVGUI_CanvasCellNodePrs::getLabelRect() const
146 {
147   MESSAGE("SUPERVGUI_CanvasCellNodePrs::getLabelRect()!!!");
148   cout<<" xL = "<<((int)x())+getTitleWidth()
149       <<" yL = "<<(int)y()
150       <<" wL = "<<getLabelWidth()
151       <<" hL = "<<getLabelHeight()<<endl;
152   return QRect(((int)x())+getTitleWidth(), (int)y(), getLabelWidth(), getLabelHeight());
153 }
154
155 QRect SUPERVGUI_CanvasCellNodePrs::getStatusRect() const
156 {
157   MESSAGE("SUPERVGUI_CanvasCellNodePrs::getStatusRect()!!!");
158   cout<<" xS = "<<((int)x())+getTitleWidth()+getLabelWidth()
159       <<" yS = "<<(int)y()
160       <<" wS = "<<getStatusWidth()
161       <<" hS = "<<getStatusHeight()<<endl;
162   return QRect(((int)x())+getTitleWidth()+getLabelWidth(), (int)y(),
163                getStatusWidth(), getStatusHeight());
164 }
165
166 int SUPERVGUI_CanvasCellNodePrs::getTitleWidth() const {
167   return myTitleWidth;
168 }
169
170 int SUPERVGUI_CanvasCellNodePrs::getLabelWidth() const {
171   return myLabelWidth;
172 }
173
174 int SUPERVGUI_CanvasCellNodePrs::getStatusWidth() const {
175   return myStatusWidth;
176 }
177
178 int SUPERVGUI_CanvasCellNodePrs::width() const
179 {
180   MESSAGE("SUPERVGUI_CanvasCellNodePrs::width()  begin");
181   return myTitleWidth + myLabelWidth + myStatusWidth;
182 }
183
184 int SUPERVGUI_CanvasCellNodePrs::height() const
185 {
186   MESSAGE("SUPERVGUI_CanvasCellNodePrs::height()  begin");
187   return getTitleHeight();
188 }
189
190 void SUPERVGUI_CanvasCellNodePrs::setState(SUPERV::GraphState theState)
191 {
192   switch(theState) {
193   case SUPERV_Waiting:
194     setStatus("Waiting");
195     setStatusColor(QColor(35, 192, 255));
196     break;
197
198   case SUPERV_Running:
199   case SUPERV::ReadyState:
200     setStatus("Running");
201     setStatusColor(QColor(32,210,32));
202     break;
203
204   case SUPERV_Suspend:
205   case SUPERV::SuspendReadyState:
206     setStatus("Suspended");
207     setStatusColor(QColor(255,180, 0));
208     break;
209
210   case SUPERV_Done:
211     setStatus("Finished");
212     setStatusColor(QColor(255, 158, 255));
213     break;
214
215   case SUPERV_Error: 
216     setStatus("Aborted");
217     setStatusColor(Qt::red);
218     break;
219
220   case SUPERV_Kill:
221     setStatus("Killed");
222     setStatusColor(Qt::red);
223     break;
224
225   case SUPERV::LoadingState:
226     setStatus("Loading");
227     setStatusColor(QColor(56,255,56));
228     break;
229
230   default:
231     setStatus("No Status");
232     setStatusColor(MAIN_BACK);
233     break;
234   }
235
236   cout<<"=================>>> setState from CELL!"<<endl;
237   canvas()->setChanged(getStatusRect());
238   cout<<"=================>>> before canvas()->update()!"<<endl;
239   canvas()->update();
240   cout<<"=================>>> after canvas()->update()!"<<endl;
241 }