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->_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->_shrinkExpand);
275 menu.addAction(gmain->_computeLinkAct);
276 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
277 // menu.addAction(gmain->_toggleSimplifyLinkAct);
278 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
279 // menu.addAction(gmain->_toggleAddRowColsAct);
282 menu.addAction(gmain->_getErrorReportAct);
283 menu.addAction(gmain->_getErrorDetailsAct);
284 menu.addAction(gmain->_shutdownProcAct);
286 menu.exec(globalPos);
289 //=======================================================================================
291 NodeMenu::NodeMenu() : MenusBase()
295 NodeMenu::~NodeMenu()
299 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
301 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
302 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
303 QMenu menu(m, caller);
307 menu.addAction(gmain->_deleteItemAct);
308 menu.addAction(gmain->_cutItemAct);
309 menu.addAction(gmain->_copyItemAct);
310 menu.addAction(gmain->_pasteItemAct);
313 menu.addAction(gmain->_showOnlyCtrlLinksAct);
314 menu.addAction(gmain->_showCtrlLinksAct);
315 menu.addAction(gmain->_hideCtrlLinksAct);
316 menu.addAction(gmain->_emphasisPortLinksAct);
317 menu.addAction(gmain->_deEmphasizeAllAct);
319 menu.addAction(gmain->_zoomToBlocAct);
320 menu.addAction(gmain->_centerOnNodeAct);
321 menu.exec(globalPos);
324 //=======================================================================================
326 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
330 HeaderNodeMenu::~HeaderNodeMenu()
334 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
336 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
337 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
338 QMenu menu(m, caller);
342 menu.addAction(gmain->_deleteItemAct);
344 menu.exec(globalPos);
347 //=======================================================================================
349 LinkMenu::LinkMenu() : MenusBase()
353 LinkMenu::~LinkMenu()
357 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
359 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
360 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
361 QMenu menu(m, caller);
363 menu.addAction(gmain->_showOnlyLinkAct);
364 menu.addAction(gmain->_showLinkAct);
365 menu.addAction(gmain->_hideLinkAct);
366 menu.addAction(gmain->_emphasisLinkAct);
367 menu.addAction(gmain->_deEmphasizeAllAct);
371 menu.addAction(gmain->_deleteItemAct);
373 menu.exec(globalPos);
376 //=======================================================================================
378 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
382 ElementaryNodeMenu::~ElementaryNodeMenu()
386 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
388 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
389 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
390 QMenu menu(m, caller);
394 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
395 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
398 // menu.addAction(gmain->_newContainerAct);
399 // menu.addSeparator();
401 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
402 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
403 if(sin && !sin->isValid())
405 menu.addAction(gmain->_getErrorReportAct);
408 menu.addAction(gmain->_deleteItemAct);
409 menu.addAction(gmain->_cutItemAct);
410 menu.addAction(gmain->_copyItemAct);
411 menu.addAction(gmain->_pasteItemAct);
412 menu.addAction(gmain->_putInBlocAct);
416 menu.addAction(gmain->_getErrorReportAct);
417 menu.addAction(gmain->_getErrorDetailsAct);
418 menu.addAction(gmain->_getContainerLogAct);
421 menu.addAction(gmain->_showOnlyCtrlLinksAct);
422 menu.addAction(gmain->_showCtrlLinksAct);
423 menu.addAction(gmain->_hideCtrlLinksAct);
424 menu.addAction(gmain->_emphasisPortLinksAct);
425 menu.addAction(gmain->_deEmphasizeAllAct);
427 menu.addAction(gmain->_zoomToBlocAct);
428 menu.addAction(gmain->_centerOnNodeAct);
429 menu.addAction(gmain->_shrinkExpand);
430 // menu.addSeparator();
431 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
432 menu.exec(globalPos);
435 //=======================================================================================
437 InPortMenu::InPortMenu() : MenusBase()
441 InPortMenu::~InPortMenu()
445 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
447 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
448 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
449 QMenu menu(m, caller);
451 menu.addAction(gmain->_showOnlyPortLinksAct);
452 menu.addAction(gmain->_showPortLinksAct);
453 menu.addAction(gmain->_hidePortLinksAct);
454 menu.addAction(gmain->_emphasisPortLinksAct);
455 menu.addAction(gmain->_deEmphasizeAllAct);
458 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
459 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
461 if (sdp) parent = sdp->getPort()->getNode();
463 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
466 menu.addAction(gmain->_deleteItemAct);
469 menu.exec(globalPos);
472 //=======================================================================================
474 OutPortMenu::OutPortMenu() : MenusBase()
478 OutPortMenu::~OutPortMenu()
482 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
484 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
485 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
486 QMenu menu(m, caller);
488 menu.addAction(gmain->_showOnlyPortLinksAct);
489 menu.addAction(gmain->_showPortLinksAct);
490 menu.addAction(gmain->_hidePortLinksAct);
491 menu.addAction(gmain->_emphasisPortLinksAct);
492 menu.addAction(gmain->_deEmphasizeAllAct);
495 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
496 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
498 if (sdp) parent = sdp->getPort()->getNode();
500 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
503 menu.addAction(gmain->_deleteItemAct);
506 menu.exec(globalPos);
509 //=======================================================================================
511 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
515 CtrlInPortMenu::~CtrlInPortMenu()
519 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
521 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
522 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
523 QMenu menu(m, caller);
525 menu.addAction(gmain->_showOnlyCtrlLinksAct);
526 menu.addAction(gmain->_showCtrlLinksAct);
527 menu.addAction(gmain->_hideCtrlLinksAct);
528 menu.addAction(gmain->_emphasisCtrlLinksAct);
529 menu.addAction(gmain->_deEmphasizeAllAct);
532 //menu.addSeparator();
533 //menu.addAction(gmain->_deleteItemAct);
535 menu.exec(globalPos);
538 //=======================================================================================
540 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
544 CtrlOutPortMenu::~CtrlOutPortMenu()
548 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
550 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
551 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
552 QMenu menu(m, caller);
554 menu.addAction(gmain->_showOnlyCtrlLinksAct);
555 menu.addAction(gmain->_showCtrlLinksAct);
556 menu.addAction(gmain->_hideCtrlLinksAct);
557 menu.addAction(gmain->_emphasisCtrlLinksAct);
558 menu.addAction(gmain->_deEmphasizeAllAct);
561 //menu.addSeparator();
562 //menu.addAction(gmain->_deleteItemAct);
564 menu.exec(globalPos);
567 //=======================================================================================
569 ReferenceMenu::ReferenceMenu() : MenusBase()
573 ReferenceMenu::~ReferenceMenu()
577 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
579 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
580 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
581 QMenu menu(m, caller);
583 menu.addAction(gmain->_selectReferenceAct);
584 menu.exec(globalPos);
587 //=======================================================================================
589 ContainerDirMenu::ContainerDirMenu() : MenusBase()
593 ContainerDirMenu::~ContainerDirMenu()
597 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
599 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
600 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
601 QMenu menu(m, caller);
605 menu.addAction(gmain->_newContainerAct);
607 menu.exec(globalPos);
610 //=======================================================================================
612 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
616 ComponentInstanceMenu::~ComponentInstanceMenu()
620 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
622 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
623 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
624 QMenu menu(m, caller);
628 menu.addAction(gmain->_selectComponentInstanceAct);
629 menu.addAction(gmain->_newSalomeComponentAct);
631 menu.exec(globalPos);
634 //=======================================================================================
636 ContainerMenu::ContainerMenu() : MenusBase()
640 ContainerMenu::~ContainerMenu()
644 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
646 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
647 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
648 QMenu menu(m, caller);
652 menu.addAction(gmain->_deleteItemAct);
654 menu.exec(globalPos);