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 menu.addAction(gmain->_newHPContainerAct);
231 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
232 CNmenu->addAction(gmain->_nodeFromCatalogAct);
233 // CNmenu->addSeparator();
234 // CNmenu->addAction(gmain->_cppNodeAct);
235 // CNmenu->addAction(gmain->_XMLNodeAct);
236 CNmenu->addSeparator();
237 CNmenu->addAction(gmain->_inlineScriptNodeAct);
238 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
239 CNmenu->addSeparator();
240 CNmenu->addAction(gmain->_inDataNodeAct);
241 CNmenu->addAction(gmain->_outDataNodeAct);
242 CNmenu->addAction(gmain->_inStudyNodeAct);
243 CNmenu->addAction(gmain->_outStudyNodeAct);
244 CNmenu->addSeparator();
245 CNmenu->addAction(gmain->_blockNodeAct);
246 CNmenu->addSeparator();
247 CNmenu->addAction(gmain->_FORNodeAct);
248 addForEachMenu(CNmenu,&actgroup);
249 CNmenu->addAction(gmain->_WHILENodeAct);
250 CNmenu->addAction(gmain->_SWITCHNodeAct);
251 CNmenu->addAction(gmain->_OptimizerLoopAct);
253 menu.addAction(gmain->_pasteItemAct);
255 QMenu *PINmenu = menu.addMenu(tr("Put Graph Content in Node"));
256 PINmenu->addAction(gmain->_putGraphInBlocAct);
257 PINmenu->addSeparator();
258 PINmenu->addAction(gmain->_putGraphInForLoopAct);
259 addForEachMenuToPutGraph(PINmenu,&actgroup2);
260 PINmenu->addAction(gmain->_putGraphInWhileLoopAct);
261 PINmenu->addAction(gmain->_putGraphInOptimizerLoopAct);
265 menu.addAction(gmain->_getYacsContainerLogAct);
267 menu.addAction(gmain->_showAllLinksAct);
268 menu.addAction(gmain->_hideAllLinksAct);
269 menu.addAction(gmain->_deEmphasizeAllAct);
271 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
272 menu.addAction(gmain->_arrangeLocalNodesAct);
273 menu.addAction(gmain->_arrangeRecurseNodesAct);
275 menu.addAction(gmain->_zoomToBlocAct);
276 menu.addAction(gmain->_centerOnNodeAct);
277 menu.addAction(gmain->_shrinkExpand);
278 menu.addAction(gmain->_shrinkExpandChildren);
279 menu.addAction(gmain->_shrinkExpandElementaryRecursively);
280 menu.addAction(gmain->_computeLinkAct);
281 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
282 // menu.addAction(gmain->_toggleSimplifyLinkAct);
283 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
284 // menu.addAction(gmain->_toggleAddRowColsAct);
287 menu.addAction(gmain->_getErrorReportAct);
288 menu.addAction(gmain->_getErrorDetailsAct);
289 menu.addAction(gmain->_shutdownProcAct);
291 menu.exec(globalPos);
294 //=======================================================================================
296 NodeMenu::NodeMenu() : MenusBase()
300 NodeMenu::~NodeMenu()
304 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
306 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
307 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
308 QMenu menu(m, caller);
312 menu.addAction(gmain->_deleteItemAct);
313 menu.addAction(gmain->_cutItemAct);
314 menu.addAction(gmain->_copyItemAct);
315 menu.addAction(gmain->_pasteItemAct);
318 menu.addAction(gmain->_showOnlyCtrlLinksAct);
319 menu.addAction(gmain->_showCtrlLinksAct);
320 menu.addAction(gmain->_hideCtrlLinksAct);
321 menu.addAction(gmain->_emphasisPortLinksAct);
322 menu.addAction(gmain->_deEmphasizeAllAct);
324 menu.addAction(gmain->_zoomToBlocAct);
325 menu.addAction(gmain->_centerOnNodeAct);
326 menu.exec(globalPos);
329 //=======================================================================================
331 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
335 HeaderNodeMenu::~HeaderNodeMenu()
339 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
341 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
342 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
343 QMenu menu(m, caller);
347 menu.addAction(gmain->_deleteItemAct);
349 menu.exec(globalPos);
352 //=======================================================================================
354 LinkMenu::LinkMenu() : MenusBase()
358 LinkMenu::~LinkMenu()
362 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
364 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
365 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
366 QMenu menu(m, caller);
368 menu.addAction(gmain->_showOnlyLinkAct);
369 menu.addAction(gmain->_showLinkAct);
370 menu.addAction(gmain->_hideLinkAct);
371 menu.addAction(gmain->_emphasisLinkAct);
372 menu.addAction(gmain->_deEmphasizeAllAct);
376 menu.addAction(gmain->_deleteItemAct);
378 menu.exec(globalPos);
381 //=======================================================================================
383 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
387 ElementaryNodeMenu::~ElementaryNodeMenu()
391 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
393 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
394 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
395 QMenu menu(m, caller);
399 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
400 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
403 // menu.addAction(gmain->_newContainerAct);
404 // menu.addSeparator();
406 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
407 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
408 if(sin && !sin->isValid())
410 menu.addAction(gmain->_getErrorReportAct);
413 menu.addAction(gmain->_deleteItemAct);
414 menu.addAction(gmain->_cutItemAct);
415 menu.addAction(gmain->_copyItemAct);
416 menu.addAction(gmain->_pasteItemAct);
417 menu.addAction(gmain->_putInBlocAct);
421 menu.addAction(gmain->_getErrorReportAct);
422 menu.addAction(gmain->_getErrorDetailsAct);
423 menu.addAction(gmain->_getContainerLogAct);
426 menu.addAction(gmain->_showOnlyCtrlLinksAct);
427 menu.addAction(gmain->_showCtrlLinksAct);
428 menu.addAction(gmain->_hideCtrlLinksAct);
429 menu.addAction(gmain->_emphasisPortLinksAct);
430 menu.addAction(gmain->_deEmphasizeAllAct);
432 menu.addAction(gmain->_zoomToBlocAct);
433 menu.addAction(gmain->_centerOnNodeAct);
434 menu.addAction(gmain->_shrinkExpand);
435 // menu.addSeparator();
436 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
437 menu.exec(globalPos);
440 //=======================================================================================
442 InPortMenu::InPortMenu() : MenusBase()
446 InPortMenu::~InPortMenu()
450 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
452 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
453 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
454 QMenu menu(m, caller);
456 menu.addAction(gmain->_showOnlyPortLinksAct);
457 menu.addAction(gmain->_showPortLinksAct);
458 menu.addAction(gmain->_hidePortLinksAct);
459 menu.addAction(gmain->_emphasisPortLinksAct);
460 menu.addAction(gmain->_deEmphasizeAllAct);
463 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
464 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
466 if (sdp) parent = sdp->getPort()->getNode();
468 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
471 menu.addAction(gmain->_deleteItemAct);
474 menu.exec(globalPos);
477 //=======================================================================================
479 OutPortMenu::OutPortMenu() : MenusBase()
483 OutPortMenu::~OutPortMenu()
487 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
489 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
490 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
491 QMenu menu(m, caller);
493 menu.addAction(gmain->_showOnlyPortLinksAct);
494 menu.addAction(gmain->_showPortLinksAct);
495 menu.addAction(gmain->_hidePortLinksAct);
496 menu.addAction(gmain->_emphasisPortLinksAct);
497 menu.addAction(gmain->_deEmphasizeAllAct);
500 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
501 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
503 if (sdp) parent = sdp->getPort()->getNode();
505 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
508 menu.addAction(gmain->_deleteItemAct);
511 menu.exec(globalPos);
514 //=======================================================================================
516 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
520 CtrlInPortMenu::~CtrlInPortMenu()
524 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
526 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
527 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
528 QMenu menu(m, caller);
530 menu.addAction(gmain->_showOnlyCtrlLinksAct);
531 menu.addAction(gmain->_showCtrlLinksAct);
532 menu.addAction(gmain->_hideCtrlLinksAct);
533 menu.addAction(gmain->_emphasisCtrlLinksAct);
534 menu.addAction(gmain->_deEmphasizeAllAct);
537 //menu.addSeparator();
538 //menu.addAction(gmain->_deleteItemAct);
540 menu.exec(globalPos);
543 //=======================================================================================
545 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
549 CtrlOutPortMenu::~CtrlOutPortMenu()
553 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
555 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
556 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
557 QMenu menu(m, caller);
559 menu.addAction(gmain->_showOnlyCtrlLinksAct);
560 menu.addAction(gmain->_showCtrlLinksAct);
561 menu.addAction(gmain->_hideCtrlLinksAct);
562 menu.addAction(gmain->_emphasisCtrlLinksAct);
563 menu.addAction(gmain->_deEmphasizeAllAct);
566 //menu.addSeparator();
567 //menu.addAction(gmain->_deleteItemAct);
569 menu.exec(globalPos);
572 //=======================================================================================
574 ReferenceMenu::ReferenceMenu() : MenusBase()
578 ReferenceMenu::~ReferenceMenu()
582 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
584 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
585 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
586 QMenu menu(m, caller);
588 menu.addAction(gmain->_selectReferenceAct);
589 menu.exec(globalPos);
592 //=======================================================================================
594 ContainerDirMenu::ContainerDirMenu() : MenusBase()
598 ContainerDirMenu::~ContainerDirMenu()
602 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
604 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
605 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
606 QMenu menu(m, caller);
610 menu.addAction(gmain->_newContainerAct);
611 menu.addAction(gmain->_newHPContainerAct);
613 menu.exec(globalPos);
616 //=======================================================================================
618 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
622 ComponentInstanceMenu::~ComponentInstanceMenu()
626 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
628 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
629 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
630 QMenu menu(m, caller);
634 menu.addAction(gmain->_selectComponentInstanceAct);
635 menu.addAction(gmain->_newSalomeComponentAct);
637 menu.exec(globalPos);
640 //=======================================================================================
642 ContainerMenu::ContainerMenu() : MenusBase()
646 ContainerMenu::~ContainerMenu()
650 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
652 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
653 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
654 QMenu menu(m, caller);
658 menu.addAction(gmain->_deleteItemAct);
660 menu.exec(globalPos);