1 // Copyright (C) 2006-2013 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "QtGuiContext.hxx"
22 #include "guiObservers.hxx"
23 #include "DataPort.hxx"
24 #include "DataNode.hxx"
25 #include "ServiceNode.hxx"
26 #include "InlineNode.hxx"
31 #include "YacsTrace.hxx"
34 using namespace YACS::HMI;
35 using namespace YACS::ENGINE;
37 //=======================================================================================
39 MenusBase::MenusBase()
41 _dummyAct = new QAction(tr("Elapse Time Statistics"), this);
42 // _dummyAct->setShortcut(tr("Ctrl+y"));
43 _dummyAct->setStatusTip(tr("Elapse Time Statistics"));
44 _dummyAct->setToolTip(tr("Elapse Time Statistics"));
45 connect(_dummyAct, SIGNAL(triggered()), this, SLOT(dummyAction()));
48 MenusBase::~MenusBase()
52 void MenusBase::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
54 QMenu menu(m, caller);
55 menu.addAction(_dummyAct);
59 void MenusBase::dummyAction()
61 DEBTRACE("MenusBase::dummyAction");
62 QtGuiContext::_counters->stats();
65 void MenusBase::foreachAction(QAction* act)
67 DEBTRACE(act->text().toStdString());
68 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
69 gmain->createForEachLoop(act->text().toStdString());
72 void MenusBase::putGraphInForeachAction(QAction* act)
74 DEBTRACE(act->text().toStdString());
75 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
76 gmain->putGraphInForeachLoop(act->text().toStdString());
79 void MenusBase::addHeader(QMenu &m, const QString &h)
81 m.addAction(_dummyAct);
82 _dummyAct->setText(h);
83 QFont f = _dummyAct->font();
85 _dummyAct->setFont(f);
89 void MenusBase::buildForEachMenu(QMenu *m, QActionGroup* actgroup)
92 pixmap.load("icons:new_foreach_loop_node.png");
94 QMenu *ForEachMenu=m->addMenu(QIcon(pixmap),"ForEach Loop");
96 Proc* proc = GuiContext::getCurrent()->getProc();
97 std::map<std::string, TypeCode*>::const_iterator it = proc->typeMap.begin();
99 for (; it != proc->typeMap.end(); ++it)
101 act=actgroup->addAction((*it).first.c_str());
102 ForEachMenu->addAction(act);
106 void MenusBase::addForEachMenu(QMenu *m, QActionGroup* actgroup)
108 buildForEachMenu(m, actgroup);
109 connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(foreachAction(QAction*)));
112 void MenusBase::addForEachMenuToPutGraph(QMenu *m, QActionGroup* actgroup)
114 buildForEachMenu(m, actgroup);
115 connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(putGraphInForeachAction(QAction*)));
118 //=======================================================================================
120 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
124 ComposedNodeMenu::~ComposedNodeMenu()
128 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
130 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
131 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
132 QMenu menu(m, caller);
133 QActionGroup actgroup(this);
137 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
138 CNmenu->addAction(gmain->_nodeFromCatalogAct);
139 // CNmenu->addSeparator();
140 // CNmenu->addAction(gmain->_cppNodeAct);
141 // CNmenu->addAction(gmain->_XMLNodeAct);
142 CNmenu->addSeparator();
143 CNmenu->addAction(gmain->_inlineScriptNodeAct);
144 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
145 CNmenu->addSeparator();
146 CNmenu->addAction(gmain->_inDataNodeAct);
147 CNmenu->addAction(gmain->_outDataNodeAct);
148 CNmenu->addAction(gmain->_inStudyNodeAct);
149 CNmenu->addAction(gmain->_outStudyNodeAct);
150 CNmenu->addSeparator();
151 CNmenu->addAction(gmain->_blockNodeAct);
152 CNmenu->addSeparator();
153 CNmenu->addAction(gmain->_FORNodeAct);
154 addForEachMenu(CNmenu,&actgroup);
155 CNmenu->addAction(gmain->_WHILENodeAct);
156 CNmenu->addAction(gmain->_SWITCHNodeAct);
157 CNmenu->addAction(gmain->_OptimizerLoopAct);
160 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
161 menu.addAction(gmain->_arrangeLocalNodesAct);
162 menu.addAction(gmain->_arrangeRecurseNodesAct);
164 menu.addAction(gmain->_showOnlyCtrlLinksAct);
165 menu.addAction(gmain->_showCtrlLinksAct);
166 menu.addAction(gmain->_hideCtrlLinksAct);
167 menu.addAction(gmain->_emphasisPortLinksAct);
168 menu.addAction(gmain->_deEmphasizeAllAct);
170 menu.addAction(gmain->_zoomToBlocAct);
171 menu.addAction(gmain->_centerOnNodeAct);
172 menu.addAction(gmain->_shrinkExpand);
173 menu.addAction(gmain->_computeLinkAct);
174 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
175 // menu.addAction(gmain->_toggleSimplifyLinkAct);
176 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
177 // menu.addAction(gmain->_toggleAddRowColsAct);
181 menu.addAction(gmain->_deleteItemAct);
182 menu.addAction(gmain->_cutItemAct);
183 menu.addAction(gmain->_copyItemAct);
184 menu.addAction(gmain->_pasteItemAct);
185 menu.addAction(gmain->_putInBlocAct);
187 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
188 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
189 if(sin && !sin->isValid())
192 menu.addAction(gmain->_getErrorReportAct);
193 menu.addAction(gmain->_getErrorDetailsAct);
198 menu.addAction(gmain->_getErrorReportAct);
199 menu.addAction(gmain->_getErrorDetailsAct);
201 menu.exec(globalPos);
204 //=======================================================================================
206 ProcMenu::ProcMenu() : MenusBase()
210 ProcMenu::~ProcMenu()
214 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
216 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
217 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
218 QMenu menu(m, caller);
220 QActionGroup actgroup(this);
221 QActionGroup actgroup2(this);
224 menu.addAction(gmain->_runLoadedSchemaAct);
226 menu.addAction(gmain->_importDataTypeAct);
227 menu.addAction(gmain->_newContainerAct);
228 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
229 CNmenu->addAction(gmain->_nodeFromCatalogAct);
230 // CNmenu->addSeparator();
231 // CNmenu->addAction(gmain->_cppNodeAct);
232 // CNmenu->addAction(gmain->_XMLNodeAct);
233 CNmenu->addSeparator();
234 CNmenu->addAction(gmain->_inlineScriptNodeAct);
235 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
236 CNmenu->addSeparator();
237 CNmenu->addAction(gmain->_inDataNodeAct);
238 CNmenu->addAction(gmain->_outDataNodeAct);
239 CNmenu->addAction(gmain->_inStudyNodeAct);
240 CNmenu->addAction(gmain->_outStudyNodeAct);
241 CNmenu->addSeparator();
242 CNmenu->addAction(gmain->_blockNodeAct);
243 CNmenu->addSeparator();
244 CNmenu->addAction(gmain->_FORNodeAct);
245 addForEachMenu(CNmenu,&actgroup);
246 CNmenu->addAction(gmain->_WHILENodeAct);
247 CNmenu->addAction(gmain->_SWITCHNodeAct);
248 CNmenu->addAction(gmain->_OptimizerLoopAct);
250 menu.addAction(gmain->_pasteItemAct);
252 QMenu *PINmenu = menu.addMenu(tr("Put Graph Content in Node"));
253 PINmenu->addAction(gmain->_putGraphInBlocAct);
254 PINmenu->addSeparator();
255 PINmenu->addAction(gmain->_putGraphInForLoopAct);
256 addForEachMenuToPutGraph(PINmenu,&actgroup2);
257 PINmenu->addAction(gmain->_putGraphInWhileLoopAct);
258 PINmenu->addAction(gmain->_putGraphInOptimizerLoopAct);
262 menu.addAction(gmain->_getYacsContainerLogAct);
264 menu.addAction(gmain->_showAllLinksAct);
265 menu.addAction(gmain->_hideAllLinksAct);
266 menu.addAction(gmain->_deEmphasizeAllAct);
268 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
269 menu.addAction(gmain->_arrangeLocalNodesAct);
270 menu.addAction(gmain->_arrangeRecurseNodesAct);
272 menu.addAction(gmain->_zoomToBlocAct);
273 menu.addAction(gmain->_centerOnNodeAct);
274 menu.addAction(gmain->_computeLinkAct);
275 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
276 // menu.addAction(gmain->_toggleSimplifyLinkAct);
277 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
278 // menu.addAction(gmain->_toggleAddRowColsAct);
281 menu.addAction(gmain->_getErrorReportAct);
282 menu.addAction(gmain->_getErrorDetailsAct);
283 menu.addAction(gmain->_shutdownProcAct);
285 menu.exec(globalPos);
288 //=======================================================================================
290 NodeMenu::NodeMenu() : MenusBase()
294 NodeMenu::~NodeMenu()
298 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
300 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
301 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
302 QMenu menu(m, caller);
306 menu.addAction(gmain->_deleteItemAct);
307 menu.addAction(gmain->_cutItemAct);
308 menu.addAction(gmain->_copyItemAct);
309 menu.addAction(gmain->_pasteItemAct);
312 menu.addAction(gmain->_showOnlyCtrlLinksAct);
313 menu.addAction(gmain->_showCtrlLinksAct);
314 menu.addAction(gmain->_hideCtrlLinksAct);
315 menu.addAction(gmain->_emphasisPortLinksAct);
316 menu.addAction(gmain->_deEmphasizeAllAct);
318 menu.addAction(gmain->_zoomToBlocAct);
319 menu.addAction(gmain->_centerOnNodeAct);
320 menu.exec(globalPos);
323 //=======================================================================================
325 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
329 HeaderNodeMenu::~HeaderNodeMenu()
333 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
335 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
336 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
337 QMenu menu(m, caller);
341 menu.addAction(gmain->_deleteItemAct);
343 menu.exec(globalPos);
346 //=======================================================================================
348 LinkMenu::LinkMenu() : MenusBase()
352 LinkMenu::~LinkMenu()
356 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
358 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
359 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
360 QMenu menu(m, caller);
362 menu.addAction(gmain->_showOnlyLinkAct);
363 menu.addAction(gmain->_showLinkAct);
364 menu.addAction(gmain->_hideLinkAct);
365 menu.addAction(gmain->_emphasisLinkAct);
366 menu.addAction(gmain->_deEmphasizeAllAct);
370 menu.addAction(gmain->_deleteItemAct);
372 menu.exec(globalPos);
375 //=======================================================================================
377 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
381 ElementaryNodeMenu::~ElementaryNodeMenu()
385 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
387 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
388 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
389 QMenu menu(m, caller);
393 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
394 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
397 // menu.addAction(gmain->_newContainerAct);
398 // menu.addSeparator();
400 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
401 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
402 if(sin && !sin->isValid())
404 menu.addAction(gmain->_getErrorReportAct);
407 menu.addAction(gmain->_deleteItemAct);
408 menu.addAction(gmain->_cutItemAct);
409 menu.addAction(gmain->_copyItemAct);
410 menu.addAction(gmain->_pasteItemAct);
411 menu.addAction(gmain->_putInBlocAct);
415 menu.addAction(gmain->_getErrorReportAct);
416 menu.addAction(gmain->_getErrorDetailsAct);
417 menu.addAction(gmain->_getContainerLogAct);
420 menu.addAction(gmain->_showOnlyCtrlLinksAct);
421 menu.addAction(gmain->_showCtrlLinksAct);
422 menu.addAction(gmain->_hideCtrlLinksAct);
423 menu.addAction(gmain->_emphasisPortLinksAct);
424 menu.addAction(gmain->_deEmphasizeAllAct);
426 menu.addAction(gmain->_zoomToBlocAct);
427 menu.addAction(gmain->_centerOnNodeAct);
428 menu.addAction(gmain->_shrinkExpand);
429 // menu.addSeparator();
430 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
431 menu.exec(globalPos);
434 //=======================================================================================
436 InPortMenu::InPortMenu() : MenusBase()
440 InPortMenu::~InPortMenu()
444 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
446 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
447 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
448 QMenu menu(m, caller);
450 menu.addAction(gmain->_showOnlyPortLinksAct);
451 menu.addAction(gmain->_showPortLinksAct);
452 menu.addAction(gmain->_hidePortLinksAct);
453 menu.addAction(gmain->_emphasisPortLinksAct);
454 menu.addAction(gmain->_deEmphasizeAllAct);
457 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
458 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
460 if (sdp) parent = sdp->getPort()->getNode();
462 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
465 menu.addAction(gmain->_deleteItemAct);
468 menu.exec(globalPos);
471 //=======================================================================================
473 OutPortMenu::OutPortMenu() : MenusBase()
477 OutPortMenu::~OutPortMenu()
481 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
483 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
484 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
485 QMenu menu(m, caller);
487 menu.addAction(gmain->_showOnlyPortLinksAct);
488 menu.addAction(gmain->_showPortLinksAct);
489 menu.addAction(gmain->_hidePortLinksAct);
490 menu.addAction(gmain->_emphasisPortLinksAct);
491 menu.addAction(gmain->_deEmphasizeAllAct);
494 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
495 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
497 if (sdp) parent = sdp->getPort()->getNode();
499 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
502 menu.addAction(gmain->_deleteItemAct);
505 menu.exec(globalPos);
508 //=======================================================================================
510 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
514 CtrlInPortMenu::~CtrlInPortMenu()
518 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
520 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
521 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
522 QMenu menu(m, caller);
524 menu.addAction(gmain->_showOnlyCtrlLinksAct);
525 menu.addAction(gmain->_showCtrlLinksAct);
526 menu.addAction(gmain->_hideCtrlLinksAct);
527 menu.addAction(gmain->_emphasisCtrlLinksAct);
528 menu.addAction(gmain->_deEmphasizeAllAct);
531 //menu.addSeparator();
532 //menu.addAction(gmain->_deleteItemAct);
534 menu.exec(globalPos);
537 //=======================================================================================
539 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
543 CtrlOutPortMenu::~CtrlOutPortMenu()
547 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
549 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
550 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
551 QMenu menu(m, caller);
553 menu.addAction(gmain->_showOnlyCtrlLinksAct);
554 menu.addAction(gmain->_showCtrlLinksAct);
555 menu.addAction(gmain->_hideCtrlLinksAct);
556 menu.addAction(gmain->_emphasisCtrlLinksAct);
557 menu.addAction(gmain->_deEmphasizeAllAct);
560 //menu.addSeparator();
561 //menu.addAction(gmain->_deleteItemAct);
563 menu.exec(globalPos);
566 //=======================================================================================
568 ReferenceMenu::ReferenceMenu() : MenusBase()
572 ReferenceMenu::~ReferenceMenu()
576 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
578 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
579 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
580 QMenu menu(m, caller);
582 menu.addAction(gmain->_selectReferenceAct);
583 menu.exec(globalPos);
586 //=======================================================================================
588 ContainerDirMenu::ContainerDirMenu() : MenusBase()
592 ContainerDirMenu::~ContainerDirMenu()
596 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
598 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
599 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
600 QMenu menu(m, caller);
604 menu.addAction(gmain->_newContainerAct);
606 menu.exec(globalPos);
609 //=======================================================================================
611 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
615 ComponentInstanceMenu::~ComponentInstanceMenu()
619 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
621 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
622 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
623 QMenu menu(m, caller);
627 menu.addAction(gmain->_selectComponentInstanceAct);
628 menu.addAction(gmain->_newSalomeComponentAct);
630 menu.exec(globalPos);
633 //=======================================================================================
635 ContainerMenu::ContainerMenu() : MenusBase()
639 ContainerMenu::~ContainerMenu()
643 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
645 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
646 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
647 QMenu menu(m, caller);
651 menu.addAction(gmain->_deleteItemAct);
653 menu.exec(globalPos);