1 // SUPERV SUPERVGUI : GUI for Supervisor component
3 // Copyright (C) 2003 OPEN CASCADE
5 // File : SUPERVGUI_CanvasCellNodePrs.cxx
9 #include "SUPERVGUI_CanvasCellNodePrs.h"
10 #include "SUPERVGUI_Canvas.h"
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)
23 MESSAGE("SUPERVGUI_CanvasCellNodePrs::SUPERVGUI_CanvasCellNodePrs");
26 myPortVisible = false;
28 QCanvasItemList anIL2 = canvas()->allItems();
29 cout<<" ===> 1 conatructor CellPrs : CanvasArray has "<<anIL2.count()<<" children!"<<endl;
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);
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);
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");
55 void drawCellText(QPainter& thePainter, const QString& theText,
56 const QRect& theRect, int theHAlign = Qt::AlignAuto)
58 int flags = theHAlign | Qt::AlignVCenter;
59 QRect r(theRect.x() + TEXT_MARGIN, theRect.y(),
60 theRect.width() - 2*TEXT_MARGIN, theRect.height());
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();
68 if (f.pointSize() == -1) {
69 f.setPixelSize((int)(f.pixelSize()*aMat.m11()));
72 f.setPointSize((int)(f.pointSize()*aMat.m11()));
76 thePainter.setWorldMatrix(m);
77 thePainter.setFont(f);
78 thePainter.drawText(r1, flags, theText);
79 thePainter.setFont(saved);
83 thePainter.drawText(r, flags, theText);
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()
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());
97 QBrush br(MAIN_TITLE);
98 thePainter.setBrush(br);
100 drawTitleShape(thePainter);
101 thePainter.setBrush(saved);
103 drawCellText(thePainter, getNode()->getEngine()->Name(), getTitleRect(), Qt::AlignLeft);
104 MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawTitle end");
107 void SUPERVGUI_CanvasCellNodePrs::drawLabel(QPainter& thePainter)
109 MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawLabel begin");
110 QRect r = getLabelRect();
112 QPen saved = thePainter.pen();
113 thePainter.setPen(NoPen);
114 thePainter.drawRect(r);
115 thePainter.setPen(saved);
117 drawCellText(thePainter, getNode()->getLabelText(), r, Qt::AlignLeft);
118 MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawLabel end");
121 void SUPERVGUI_CanvasCellNodePrs::drawStatus(QPainter& thePainter)
123 MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawStatus begin");
124 QRect r = getStatusRect();
126 QBrush savedB = thePainter.brush();
127 thePainter.setBrush(getStatusColor());
128 drawStatusShape(thePainter);
129 thePainter.setBrush(savedB);
131 drawCellText(thePainter, getStatus(), r, Qt::AlignHCenter);
132 MESSAGE("SUPERVGUI_CanvasCellNodePrs::drawStatus end");
135 QRect SUPERVGUI_CanvasCellNodePrs::getTitleRect() const
137 MESSAGE("SUPERVGUI_CanvasCellNodePrs::getTitleRect()!!!");
138 cout<<" xT = "<<(int)x()
140 <<" wT = "<<getTitleWidth()
141 <<" hT = "<<getTitleHeight()<<endl;
142 return QRect((int)x(), (int)y(), getTitleWidth(), getTitleHeight());
145 QRect SUPERVGUI_CanvasCellNodePrs::getLabelRect() const
147 MESSAGE("SUPERVGUI_CanvasCellNodePrs::getLabelRect()!!!");
148 cout<<" xL = "<<((int)x())+getTitleWidth()
150 <<" wL = "<<getLabelWidth()
151 <<" hL = "<<getLabelHeight()<<endl;
152 return QRect(((int)x())+getTitleWidth(), (int)y(), getLabelWidth(), getLabelHeight());
155 QRect SUPERVGUI_CanvasCellNodePrs::getStatusRect() const
157 MESSAGE("SUPERVGUI_CanvasCellNodePrs::getStatusRect()!!!");
158 cout<<" xS = "<<((int)x())+getTitleWidth()+getLabelWidth()
160 <<" wS = "<<getStatusWidth()
161 <<" hS = "<<getStatusHeight()<<endl;
162 return QRect(((int)x())+getTitleWidth()+getLabelWidth(), (int)y(),
163 getStatusWidth(), getStatusHeight());
166 int SUPERVGUI_CanvasCellNodePrs::getTitleWidth() const {
170 int SUPERVGUI_CanvasCellNodePrs::getLabelWidth() const {
174 int SUPERVGUI_CanvasCellNodePrs::getStatusWidth() const {
175 return myStatusWidth;
178 int SUPERVGUI_CanvasCellNodePrs::width() const
180 MESSAGE("SUPERVGUI_CanvasCellNodePrs::width() begin");
181 return myTitleWidth + myLabelWidth + myStatusWidth;
184 int SUPERVGUI_CanvasCellNodePrs::height() const
186 MESSAGE("SUPERVGUI_CanvasCellNodePrs::height() begin");
187 return getTitleHeight();
190 void SUPERVGUI_CanvasCellNodePrs::setState(SUPERV::GraphState theState)
194 setStatus("Waiting");
195 setStatusColor(QColor(35, 192, 255));
199 case SUPERV::ReadyState:
200 setStatus("Running");
201 setStatusColor(QColor(32,210,32));
205 case SUPERV::SuspendReadyState:
206 setStatus("Suspended");
207 setStatusColor(QColor(255,180, 0));
211 setStatus("Finished");
212 setStatusColor(QColor(255, 158, 255));
216 setStatus("Aborted");
217 setStatusColor(Qt::red);
222 setStatusColor(Qt::red);
225 case SUPERV::LoadingState:
226 setStatus("Loading");
227 setStatusColor(QColor(56,255,56));
231 setStatus("No Status");
232 setStatusColor(MAIN_BACK);
236 cout<<"=================>>> setState from CELL!"<<endl;
237 canvas()->setChanged(getStatusRect());
238 cout<<"=================>>> before canvas()->update()!"<<endl;
240 cout<<"=================>>> after canvas()->update()!"<<endl;