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 myPortVisible = false;
26 SUPERVGUI_CanvasCellNodePrs::~SUPERVGUI_CanvasCellNodePrs()
30 void SUPERVGUI_CanvasCellNodePrs::moveBy(double dx, double dy) {
31 //Trace("SUPERVGUI_CanvasCellNodePrs::moveBy");
32 int aX = (int) (x()+dx);
33 int aY = (int) (y()+dy);
35 int w = aX + width() + GRAPH_MARGIN;
36 int h = aY + height() + GRAPH_MARGIN;
37 if (canvas()->width() > w) w = canvas()->width();
38 if (canvas()->height() > h) h = canvas()->height();
39 if (canvas()->width() < w || canvas()->height() < h)
40 canvas()->resize(w, h);
41 QCanvasPolygonalItem::moveBy(dx, dy);
44 void SUPERVGUI_CanvasCellNodePrs::drawShape(QPainter& thePainter) {
45 drawTitle(thePainter);
46 drawLabel(thePainter);
47 drawStatus(thePainter);
48 drawFrame(thePainter);
51 void drawCellText(QPainter& thePainter, const QString& theText,
52 const QRect& theRect, int theHAlign = Qt::AlignAuto)
54 int flags = theHAlign | Qt::AlignVCenter;
55 QRect r(theRect.x() + TEXT_MARGIN, theRect.y(),
56 theRect.width() - 2*TEXT_MARGIN, theRect.height());
58 QWMatrix aMat = thePainter.worldMatrix();
59 if (aMat.m11() != 1.0) {
60 // for scaled picture only
61 QRect r1 = aMat.mapRect(r);
62 QFont saved = thePainter.font();
64 if (f.pointSize() == -1) {
65 f.setPixelSize((int)(f.pixelSize()*aMat.m11()));
68 f.setPointSize((int)(f.pointSize()*aMat.m11()));
72 thePainter.setWorldMatrix(m);
73 thePainter.setFont(f);
74 thePainter.drawText(r1, flags, theText);
75 thePainter.setFont(saved);
79 thePainter.drawText(r, flags, theText);
83 void SUPERVGUI_CanvasCellNodePrs::drawTitle(QPainter& thePainter) {
84 QBrush saved = thePainter.brush();
85 if (getNode()->getEngine()->IsLoop() || getNode()->getEngine()->IsEndLoop()
87 getNode()->getEngine()->IsSwitch() || getNode()->getEngine()->IsEndSwitch())
88 thePainter.setBrush(Qt::red.light());
89 else if (getNode()->getEngine()->IsGOTO())
90 thePainter.setBrush(Qt::green.light());
92 QBrush br(MAIN_TITLE);
93 thePainter.setBrush(br);
95 drawTitleShape(thePainter);
96 thePainter.setBrush(saved);
98 drawCellText(thePainter, getNode()->getEngine()->Name(), getTitleRect(), Qt::AlignLeft);
101 void SUPERVGUI_CanvasCellNodePrs::drawLabel(QPainter& thePainter)
103 QRect r = getLabelRect();
105 QPen saved = thePainter.pen();
106 thePainter.setPen(NoPen);
107 thePainter.drawRect(r);
108 thePainter.setPen(saved);
110 drawCellText(thePainter, getNode()->getLabelText(), r, Qt::AlignLeft);
113 void SUPERVGUI_CanvasCellNodePrs::drawStatus(QPainter& thePainter)
115 QRect r = getStatusRect();
117 QBrush savedB = thePainter.brush();
118 thePainter.setBrush(getStatusColor());
119 drawStatusShape(thePainter);
120 thePainter.setBrush(savedB);
122 drawCellText(thePainter, getStatus(), r, Qt::AlignHCenter);
125 QRect SUPERVGUI_CanvasCellNodePrs::getTitleRect() const
127 return QRect((int)x(), (int)y(), getTitleWidth(), getTitleHeight());
130 QRect SUPERVGUI_CanvasCellNodePrs::getLabelRect() const
132 return QRect(((int)x())+getTitleWidth(), (int)y(), getLabelWidth(), getLabelHeight());
135 QRect SUPERVGUI_CanvasCellNodePrs::getStatusRect() const
137 return QRect(((int)x())+getTitleWidth()+getLabelWidth(), (int)y(),
138 getStatusWidth(), getStatusHeight());
141 int SUPERVGUI_CanvasCellNodePrs::getTitleWidth() const {
145 int SUPERVGUI_CanvasCellNodePrs::getLabelWidth() const {
149 int SUPERVGUI_CanvasCellNodePrs::getStatusWidth() const {
150 return myStatusWidth;
153 int SUPERVGUI_CanvasCellNodePrs::width() const
155 return myTitleWidth + myLabelWidth + myStatusWidth;
158 int SUPERVGUI_CanvasCellNodePrs::height() const
160 return getTitleHeight();
163 void SUPERVGUI_CanvasCellNodePrs::setState(SUPERV::GraphState theState)
167 setStatus("Waiting");
168 setStatusColor(QColor(35, 192, 255));
172 case SUPERV::ReadyState:
173 setStatus("Running");
174 setStatusColor(QColor(32,210,32));
178 case SUPERV::SuspendReadyState:
179 setStatus("Suspended");
180 setStatusColor(QColor(255,180, 0));
184 setStatus("Finished");
185 setStatusColor(QColor(255, 158, 255));
189 setStatus("Aborted");
190 setStatusColor(Qt::red);
195 setStatusColor(Qt::red);
198 case SUPERV::LoadingState:
199 setStatus("Loading");
200 setStatusColor(QColor(56,255,56));
204 setStatus("No Status");
205 setStatusColor(MAIN_BACK);
209 canvas()->setChanged(getStatusRect());