1 // Copyright (C) 2006-2014 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, or (at your option) any later version.
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->_shrinkExpandChildren);
174 menu.addAction(gmain->_shrinkExpandElementaryRecursively);
175 menu.addAction(gmain->_computeLinkAct);
176 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
177 // menu.addAction(gmain->_toggleSimplifyLinkAct);
178 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
179 // menu.addAction(gmain->_toggleAddRowColsAct);
183 menu.addAction(gmain->_deleteItemAct);
184 menu.addAction(gmain->_cutItemAct);
185 menu.addAction(gmain->_copyItemAct);
186 menu.addAction(gmain->_pasteItemAct);
187 menu.addAction(gmain->_putInBlocAct);
189 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
190 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
191 if(sin && !sin->isValid())
194 menu.addAction(gmain->_getErrorReportAct);
195 menu.addAction(gmain->_getErrorDetailsAct);
200 menu.addAction(gmain->_getErrorReportAct);
201 menu.addAction(gmain->_getErrorDetailsAct);
203 menu.exec(globalPos);
206 //=======================================================================================
208 ProcMenu::ProcMenu() : MenusBase()
212 ProcMenu::~ProcMenu()
216 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
218 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
219 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
220 QMenu menu(m, caller);
222 QActionGroup actgroup(this);
223 QActionGroup actgroup2(this);
226 menu.addAction(gmain->_runLoadedSchemaAct);
228 menu.addAction(gmain->_importDataTypeAct);
229 menu.addAction(gmain->_newContainerAct);
230 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
231 CNmenu->addAction(gmain->_nodeFromCatalogAct);
232 // CNmenu->addSeparator();
233 // CNmenu->addAction(gmain->_cppNodeAct);
234 // CNmenu->addAction(gmain->_XMLNodeAct);
235 CNmenu->addSeparator();
236 CNmenu->addAction(gmain->_inlineScriptNodeAct);
237 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
238 CNmenu->addSeparator();
239 CNmenu->addAction(gmain->_inDataNodeAct);
240 CNmenu->addAction(gmain->_outDataNodeAct);
241 CNmenu->addAction(gmain->_inStudyNodeAct);
242 CNmenu->addAction(gmain->_outStudyNodeAct);
243 CNmenu->addSeparator();
244 CNmenu->addAction(gmain->_blockNodeAct);
245 CNmenu->addSeparator();
246 CNmenu->addAction(gmain->_FORNodeAct);
247 addForEachMenu(CNmenu,&actgroup);
248 CNmenu->addAction(gmain->_WHILENodeAct);
249 CNmenu->addAction(gmain->_SWITCHNodeAct);
250 CNmenu->addAction(gmain->_OptimizerLoopAct);
252 menu.addAction(gmain->_pasteItemAct);
254 QMenu *PINmenu = menu.addMenu(tr("Put Graph Content in Node"));
255 PINmenu->addAction(gmain->_putGraphInBlocAct);
256 PINmenu->addSeparator();
257 PINmenu->addAction(gmain->_putGraphInForLoopAct);
258 addForEachMenuToPutGraph(PINmenu,&actgroup2);
259 PINmenu->addAction(gmain->_putGraphInWhileLoopAct);
260 PINmenu->addAction(gmain->_putGraphInOptimizerLoopAct);
264 menu.addAction(gmain->_getYacsContainerLogAct);
266 menu.addAction(gmain->_showAllLinksAct);
267 menu.addAction(gmain->_hideAllLinksAct);
268 menu.addAction(gmain->_deEmphasizeAllAct);
270 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
271 menu.addAction(gmain->_arrangeLocalNodesAct);
272 menu.addAction(gmain->_arrangeRecurseNodesAct);
274 menu.addAction(gmain->_zoomToBlocAct);
275 menu.addAction(gmain->_centerOnNodeAct);
276 menu.addAction(gmain->_shrinkExpand);
277 menu.addAction(gmain->_shrinkExpandChildren);
278 menu.addAction(gmain->_shrinkExpandElementaryRecursively);
279 menu.addAction(gmain->_computeLinkAct);
280 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
281 // menu.addAction(gmain->_toggleSimplifyLinkAct);
282 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
283 // menu.addAction(gmain->_toggleAddRowColsAct);
286 menu.addAction(gmain->_getErrorReportAct);
287 menu.addAction(gmain->_getErrorDetailsAct);
288 menu.addAction(gmain->_shutdownProcAct);
290 menu.exec(globalPos);
293 //=======================================================================================
295 NodeMenu::NodeMenu() : MenusBase()
299 NodeMenu::~NodeMenu()
303 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
305 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
306 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
307 QMenu menu(m, caller);
311 menu.addAction(gmain->_deleteItemAct);
312 menu.addAction(gmain->_cutItemAct);
313 menu.addAction(gmain->_copyItemAct);
314 menu.addAction(gmain->_pasteItemAct);
317 menu.addAction(gmain->_showOnlyCtrlLinksAct);
318 menu.addAction(gmain->_showCtrlLinksAct);
319 menu.addAction(gmain->_hideCtrlLinksAct);
320 menu.addAction(gmain->_emphasisPortLinksAct);
321 menu.addAction(gmain->_deEmphasizeAllAct);
323 menu.addAction(gmain->_zoomToBlocAct);
324 menu.addAction(gmain->_centerOnNodeAct);
325 menu.exec(globalPos);
328 //=======================================================================================
330 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
334 HeaderNodeMenu::~HeaderNodeMenu()
338 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
340 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
341 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
342 QMenu menu(m, caller);
346 menu.addAction(gmain->_deleteItemAct);
348 menu.exec(globalPos);
351 //=======================================================================================
353 LinkMenu::LinkMenu() : MenusBase()
357 LinkMenu::~LinkMenu()
361 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
363 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
364 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
365 QMenu menu(m, caller);
367 menu.addAction(gmain->_showOnlyLinkAct);
368 menu.addAction(gmain->_showLinkAct);
369 menu.addAction(gmain->_hideLinkAct);
370 menu.addAction(gmain->_emphasisLinkAct);
371 menu.addAction(gmain->_deEmphasizeAllAct);
375 menu.addAction(gmain->_deleteItemAct);
377 menu.exec(globalPos);
380 //=======================================================================================
382 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
386 ElementaryNodeMenu::~ElementaryNodeMenu()
390 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
392 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
393 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
394 QMenu menu(m, caller);
398 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
399 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
402 // menu.addAction(gmain->_newContainerAct);
403 // menu.addSeparator();
405 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
406 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
407 if(sin && !sin->isValid())
409 menu.addAction(gmain->_getErrorReportAct);
412 menu.addAction(gmain->_deleteItemAct);
413 menu.addAction(gmain->_cutItemAct);
414 menu.addAction(gmain->_copyItemAct);
415 menu.addAction(gmain->_pasteItemAct);
416 menu.addAction(gmain->_putInBlocAct);
420 menu.addAction(gmain->_getErrorReportAct);
421 menu.addAction(gmain->_getErrorDetailsAct);
422 menu.addAction(gmain->_getContainerLogAct);
425 menu.addAction(gmain->_showOnlyCtrlLinksAct);
426 menu.addAction(gmain->_showCtrlLinksAct);
427 menu.addAction(gmain->_hideCtrlLinksAct);
428 menu.addAction(gmain->_emphasisPortLinksAct);
429 menu.addAction(gmain->_deEmphasizeAllAct);
431 menu.addAction(gmain->_zoomToBlocAct);
432 menu.addAction(gmain->_centerOnNodeAct);
433 menu.addAction(gmain->_shrinkExpand);
434 // menu.addSeparator();
435 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
436 menu.exec(globalPos);
439 //=======================================================================================
441 InPortMenu::InPortMenu() : MenusBase()
445 InPortMenu::~InPortMenu()
449 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
451 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
452 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
453 QMenu menu(m, caller);
455 menu.addAction(gmain->_showOnlyPortLinksAct);
456 menu.addAction(gmain->_showPortLinksAct);
457 menu.addAction(gmain->_hidePortLinksAct);
458 menu.addAction(gmain->_emphasisPortLinksAct);
459 menu.addAction(gmain->_deEmphasizeAllAct);
462 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
463 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
465 if (sdp) parent = sdp->getPort()->getNode();
467 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
470 menu.addAction(gmain->_deleteItemAct);
473 menu.exec(globalPos);
476 //=======================================================================================
478 OutPortMenu::OutPortMenu() : MenusBase()
482 OutPortMenu::~OutPortMenu()
486 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
488 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
489 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
490 QMenu menu(m, caller);
492 menu.addAction(gmain->_showOnlyPortLinksAct);
493 menu.addAction(gmain->_showPortLinksAct);
494 menu.addAction(gmain->_hidePortLinksAct);
495 menu.addAction(gmain->_emphasisPortLinksAct);
496 menu.addAction(gmain->_deEmphasizeAllAct);
499 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
500 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
502 if (sdp) parent = sdp->getPort()->getNode();
504 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
507 menu.addAction(gmain->_deleteItemAct);
510 menu.exec(globalPos);
513 //=======================================================================================
515 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
519 CtrlInPortMenu::~CtrlInPortMenu()
523 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
525 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
526 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
527 QMenu menu(m, caller);
529 menu.addAction(gmain->_showOnlyCtrlLinksAct);
530 menu.addAction(gmain->_showCtrlLinksAct);
531 menu.addAction(gmain->_hideCtrlLinksAct);
532 menu.addAction(gmain->_emphasisCtrlLinksAct);
533 menu.addAction(gmain->_deEmphasizeAllAct);
536 //menu.addSeparator();
537 //menu.addAction(gmain->_deleteItemAct);
539 menu.exec(globalPos);
542 //=======================================================================================
544 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
548 CtrlOutPortMenu::~CtrlOutPortMenu()
552 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
554 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
555 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
556 QMenu menu(m, caller);
558 menu.addAction(gmain->_showOnlyCtrlLinksAct);
559 menu.addAction(gmain->_showCtrlLinksAct);
560 menu.addAction(gmain->_hideCtrlLinksAct);
561 menu.addAction(gmain->_emphasisCtrlLinksAct);
562 menu.addAction(gmain->_deEmphasizeAllAct);
565 //menu.addSeparator();
566 //menu.addAction(gmain->_deleteItemAct);
568 menu.exec(globalPos);
571 //=======================================================================================
573 ReferenceMenu::ReferenceMenu() : MenusBase()
577 ReferenceMenu::~ReferenceMenu()
581 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
583 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
584 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
585 QMenu menu(m, caller);
587 menu.addAction(gmain->_selectReferenceAct);
588 menu.exec(globalPos);
591 //=======================================================================================
593 ContainerDirMenu::ContainerDirMenu() : MenusBase()
597 ContainerDirMenu::~ContainerDirMenu()
601 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
603 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
604 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
605 QMenu menu(m, caller);
609 menu.addAction(gmain->_newContainerAct);
611 menu.exec(globalPos);
614 //=======================================================================================
616 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
620 ComponentInstanceMenu::~ComponentInstanceMenu()
624 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
626 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
627 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
628 QMenu menu(m, caller);
632 menu.addAction(gmain->_selectComponentInstanceAct);
633 menu.addAction(gmain->_newSalomeComponentAct);
635 menu.exec(globalPos);
638 //=======================================================================================
640 ContainerMenu::ContainerMenu() : MenusBase()
644 ContainerMenu::~ContainerMenu()
648 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
650 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
651 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
652 QMenu menu(m, caller);
656 menu.addAction(gmain->_deleteItemAct);
658 menu.exec(globalPos);