1 // SUPERV SUPERVGUI : GUI for Supervisor component
3 // Copyright (C) 2003 OPEN CASCADE
5 // File : SUPERVGUI_CanvasControlNode.cxx
6 // Author : Natalia KOPNOVA
10 #include "SUPERVGUI_CanvasControlNode.h"
11 #include "SUPERVGUI_CanvasControlNodePrs.h"
12 #include "SUPERVGUI_Main.h"
13 #include "SUPERVGUI_Canvas.h"
14 #include "SUPERVGUI_ControlNode.h" // access to SelectInlineDlg
16 #include "QAD_FileDlg.h"
17 #include "QAD_Application.h"
19 //=====================================================================
21 //=====================================================================
22 SUPERVGUI_CanvasComputeNode::SUPERVGUI_CanvasComputeNode(QObject* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode):
23 SUPERVGUI_CanvasNode(theParent, theMain, theNode)
25 Trace("SUPERVGUI_CanvasComputeNode::SUPERVGUI_CanvasComputeNode");
28 QPopupMenu* SUPERVGUI_CanvasComputeNode::getPopupMenu(QWidget* theParent)
30 QPopupMenu* popup = SUPERVGUI_CanvasNode::getPopupMenu(theParent);
32 QPopupMenu* aShowPopup = new QPopupMenu(theParent);
34 anItem = aShowPopup->insertItem(tr("POP_SHOWTITLES"), this, SLOT(switchLabel()));
35 aShowPopup->setItemChecked(anItem, getPrs()->isLabelVisible());
36 anItem = aShowPopup->insertItem(tr("POP_SHOWPORTS"), this, SLOT(switchPorts()));
37 aShowPopup->setItemChecked(anItem, getPrs()->isPortVisible());
39 popup->insertSeparator();
40 popup->insertItem(tr("POP_SHOW"), aShowPopup);
46 //=====================================================================
48 //=====================================================================
49 SUPERVGUI_CanvasStartNode::SUPERVGUI_CanvasStartNode(QObject* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode):
50 SUPERVGUI_CanvasNode(theParent, theMain, theNode),
53 Trace("SUPERVGUI_CanvasStartNode::SUPERVGUI_CanvasStartNode");
56 SUPERVGUI_CanvasNodePrs* SUPERVGUI_CanvasStartNode::createPrs() const
58 return new SUPERVGUI_CanvasStartNodePrs(getMain()->getCanvas(),
59 (SUPERVGUI_CanvasStartNode*)this);
62 bool SUPERVGUI_CanvasStartNode::setNodeName(QString aName)
64 bool result = SUPERVGUI_CanvasNode::setNodeName(aName);
65 if (result && myCoupled) {
66 myCoupled->setNodeName(QString(tr("ENDNODE_PREFIX"))+aName);
71 QPopupMenu* SUPERVGUI_CanvasStartNode::getPopupMenu(QWidget* theParent)
73 QPopupMenu* popup = SUPERVGUI_CanvasNode::getPopupMenu(theParent);
75 popup->insertSeparator();
76 int anItem = popup->insertItem(tr("POP_HIDEPORTS"), this, SLOT(switchPorts()));
77 popup->setItemChecked(anItem, !getPrs()->isPortVisible());
82 void SUPERVGUI_CanvasStartNode::remove()
84 SUPERVGUI_Canvas* aCanvas = getMain()->getCanvas();
87 if (myCoupled) myCoupled->setDestroyed();
89 getEngine()->destroy();
91 if (myCoupled) delete myCoupled;
97 void SUPERVGUI_CanvasStartNode::onDestroyed(QObject* theObject)
100 SUPERVGUI_CanvasNode::onDestroyed(theObject);
101 if (getEngine()->IsLoop()) merge();
102 if (myCoupled) myCoupled->merge();
106 void SUPERVGUI_CanvasStartNode::addInputPort()
108 SUPERVGUI_CanvasNode::addInputPort();
109 if (getEngine()->IsLoop()) merge();
110 if (myCoupled) myCoupled->merge();
113 void SUPERVGUI_CanvasStartNode::addOutputPort()
115 SUPERVGUI_CanvasNode::addOutputPort();
116 if (myCoupled) myCoupled->merge();
119 //=====================================================================
121 //=====================================================================
122 SUPERVGUI_CanvasEndNode::SUPERVGUI_CanvasEndNode(QObject* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode,
123 SUPERVGUI_CanvasStartNode* theStart):
124 SUPERVGUI_CanvasNode(theParent, theMain, theNode),
127 Trace("SUPERVGUI_CanvasEndNode::SUPERVGUI_CanvasEndNode");
128 myCoupled->setCoupled(this);
131 SUPERVGUI_CanvasNodePrs* SUPERVGUI_CanvasEndNode::createPrs() const
133 return new SUPERVGUI_CanvasEndNodePrs(getMain()->getCanvas(),
134 (SUPERVGUI_CanvasEndNode*)this);
137 QPopupMenu* SUPERVGUI_CanvasEndNode::getPopupMenu(QWidget* theParent)
139 QPopupMenu* popup = SUPERVGUI_CanvasNode::getPopupMenu(theParent);
141 popup->insertSeparator();
142 int anItem = popup->insertItem(tr("POP_HIDEPORTS"), this, SLOT(switchPorts()));
143 popup->setItemChecked(anItem, !getPrs()->isPortVisible());
148 void SUPERVGUI_CanvasEndNode::addInputPort()
150 SUPERVGUI_CanvasNode::addInputPort();
151 if (getEngine()->IsEndSwitch()) merge();
155 //=====================================================================
157 //=====================================================================
158 SUPERVGUI_CanvasGotoNode::SUPERVGUI_CanvasGotoNode(QObject* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode):
159 SUPERVGUI_CanvasNode(theParent, theMain, theNode)
161 Trace("SUPERVGUI_CanvasGotoNode::SUPERVGUI_CanvasGotoNode");
164 SUPERVGUI_CanvasNodePrs* SUPERVGUI_CanvasGotoNode::createPrs() const
166 return new SUPERVGUI_CanvasGotoNodePrs(getMain()->getCanvas(),
167 (SUPERVGUI_CanvasGotoNode*)this);
170 QPopupMenu* SUPERVGUI_CanvasGotoNode::getPopupMenu(QWidget* theParent)
172 QPopupMenu* popup = SUPERVGUI_CanvasNode::getPopupMenu(theParent);
174 popup->insertSeparator();
175 popup->insertItem("Link to Node...", this, SLOT(linkToNode()));
177 popup->insertSeparator();
178 int anItem = popup->insertItem(tr("POP_HIDEPORTS"), this, SLOT(switchPorts()));
179 popup->setItemChecked(anItem, !getPrs()->isPortVisible());
184 void SUPERVGUI_CanvasGotoNode::linkToNode() {
185 SUPERVGUI_SelectInlineDlg* aDlg = new SUPERVGUI_SelectInlineDlg(getMain());
187 QString aNodeName = aDlg->getName();
188 getGotoNode()->SetCoupled(aNodeName.latin1());
189 getMain()->getCanvas()->sync();
194 //=====================================================================
196 //=====================================================================
197 SUPERVGUI_CanvasMacroNode::SUPERVGUI_CanvasMacroNode(QObject* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode):
198 SUPERVGUI_CanvasComputeNode(theParent, theMain, theNode)
200 Trace("SUPERVGUI_CanvasMacroNode::SUPERVGUI_CanvasMacroNode");
203 SUPERVGUI_CanvasNodePrs* SUPERVGUI_CanvasMacroNode::createPrs() const
205 return new SUPERVGUI_CanvasMacroNodePrs(getMain()->getCanvas(),
206 (SUPERVGUI_CanvasMacroNode*)this);
209 QPopupMenu* SUPERVGUI_CanvasMacroNode::getPopupMenu(QWidget* theParent)
211 QPopupMenu* popup = SUPERVGUI_CanvasComputeNode::getPopupMenu(theParent);
213 popup->insertSeparator(0);
214 popup->insertItem(tr("MSG_EXPORT"), this, SLOT(exportDataflow()), 0, -1, 0);
215 popup->insertItem("Open SubGraph", this, SLOT(openSubGraph()), 0, -1, 0);
220 void SUPERVGUI_CanvasMacroNode::openSubGraph()
222 getMain()->openSubGraph(getEngine());
225 void SUPERVGUI_CanvasMacroNode::exportDataflow()
228 if (getEngine()->IsMacro()) {
229 SUPERV_Graph aMacro = getMacroNode();
230 if (aMacro->IsStreamMacro())
231 aGraph = aMacro->StreamObjRef();
233 aGraph = aMacro->FlowObjRef();
235 if (SUPERV_isNull(aGraph)) {
236 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
240 QString aFileName = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
243 tr("TTL_EXPORT_DATAFLOW"),
245 if (!aFileName.isEmpty()) {
246 if (!aGraph->Export(aFileName.latin1())) {
247 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_WRITING"));