1 // Copyright (C) 2006-2016 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"
35 using namespace YACS::HMI;
36 using namespace YACS::ENGINE;
38 //=======================================================================================
40 MenusBase::MenusBase()
42 _dummyAct = new QAction(tr("Elapse Time Statistics"), this);
43 // _dummyAct->setShortcut(tr("Ctrl+y"));
44 _dummyAct->setStatusTip(tr("Elapse Time Statistics"));
45 _dummyAct->setToolTip(tr("Elapse Time Statistics"));
46 connect(_dummyAct, SIGNAL(triggered()), this, SLOT(dummyAction()));
49 MenusBase::~MenusBase()
53 void MenusBase::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
55 QMenu menu(m, caller);
56 menu.addAction(_dummyAct);
60 void MenusBase::dummyAction()
62 DEBTRACE("MenusBase::dummyAction");
63 QtGuiContext::_counters->stats();
66 void MenusBase::foreachAction(QAction* act)
68 DEBTRACE(act->text().toStdString());
69 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
70 gmain->createForEachLoop(act->text().toStdString());
73 void MenusBase::putGraphInForeachAction(QAction* act)
75 DEBTRACE(act->text().toStdString());
76 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
77 gmain->putGraphInForeachLoop(act->text().toStdString());
80 void MenusBase::addHeader(QMenu &m, const QString &h)
82 m.addAction(_dummyAct);
83 _dummyAct->setText(h);
84 QFont f = _dummyAct->font();
86 _dummyAct->setFont(f);
90 void MenusBase::buildForEachMenu(QMenu *m, QActionGroup* actgroup)
93 pixmap.load("icons:new_foreach_loop_node.png");
95 QMenu *ForEachMenu=m->addMenu(QIcon(pixmap),"ForEach Loop");
97 Proc* proc = GuiContext::getCurrent()->getProc();
98 std::map<std::string, TypeCode*>::const_iterator it = proc->typeMap.begin();
100 for (; it != proc->typeMap.end(); ++it)
102 act=actgroup->addAction((*it).first.c_str());
103 ForEachMenu->addAction(act);
107 void MenusBase::addForEachMenu(QMenu *m, QActionGroup* actgroup)
109 buildForEachMenu(m, actgroup);
110 connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(foreachAction(QAction*)));
113 void MenusBase::addForEachMenuToPutGraph(QMenu *m, QActionGroup* actgroup)
115 buildForEachMenu(m, actgroup);
116 connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(putGraphInForeachAction(QAction*)));
119 //=======================================================================================
121 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
125 ComposedNodeMenu::~ComposedNodeMenu()
129 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
131 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
132 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
133 QMenu menu(m, caller);
134 QActionGroup actgroup(this);
138 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
139 CNmenu->addAction(gmain->_nodeFromCatalogAct);
140 // CNmenu->addSeparator();
141 // CNmenu->addAction(gmain->_cppNodeAct);
142 // CNmenu->addAction(gmain->_XMLNodeAct);
143 CNmenu->addSeparator();
144 CNmenu->addAction(gmain->_inlineScriptNodeAct);
145 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
146 CNmenu->addSeparator();
147 CNmenu->addAction(gmain->_inDataNodeAct);
148 CNmenu->addAction(gmain->_outDataNodeAct);
149 CNmenu->addAction(gmain->_inStudyNodeAct);
150 CNmenu->addAction(gmain->_outStudyNodeAct);
151 CNmenu->addSeparator();
152 CNmenu->addAction(gmain->_blockNodeAct);
153 CNmenu->addSeparator();
154 CNmenu->addAction(gmain->_FORNodeAct);
155 addForEachMenu(CNmenu,&actgroup);
156 CNmenu->addAction(gmain->_WHILENodeAct);
157 CNmenu->addAction(gmain->_SWITCHNodeAct);
158 CNmenu->addAction(gmain->_OptimizerLoopAct);
161 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
162 menu.addAction(gmain->_arrangeLocalNodesAct);
163 menu.addAction(gmain->_arrangeRecurseNodesAct);
165 menu.addAction(gmain->_showOnlyCtrlLinksAct);
166 menu.addAction(gmain->_showCtrlLinksAct);
167 menu.addAction(gmain->_hideCtrlLinksAct);
168 menu.addAction(gmain->_emphasisPortLinksAct);
169 menu.addAction(gmain->_deEmphasizeAllAct);
171 menu.addAction(gmain->_zoomToBlocAct);
172 menu.addAction(gmain->_centerOnNodeAct);
173 menu.addAction(gmain->_shrinkExpand);
174 menu.addAction(gmain->_shrinkExpandChildren);
175 menu.addAction(gmain->_shrinkExpandElementaryRecursively);
176 menu.addAction(gmain->_computeLinkAct);
177 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
178 // menu.addAction(gmain->_toggleSimplifyLinkAct);
179 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
180 // menu.addAction(gmain->_toggleAddRowColsAct);
184 menu.addAction(gmain->_deleteItemAct);
185 menu.addAction(gmain->_cutItemAct);
186 menu.addAction(gmain->_copyItemAct);
187 menu.addAction(gmain->_pasteItemAct);
188 menu.addAction(gmain->_putInBlocAct);
190 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
191 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
192 if(sin && !sin->isValid())
195 menu.addAction(gmain->_getErrorReportAct);
196 menu.addAction(gmain->_getErrorDetailsAct);
201 menu.addAction(gmain->_getErrorReportAct);
202 menu.addAction(gmain->_getErrorDetailsAct);
204 menu.exec(globalPos);
207 //=======================================================================================
209 ProcMenu::ProcMenu() : MenusBase()
213 ProcMenu::~ProcMenu()
217 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
219 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
220 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
221 QMenu menu(m, caller);
223 QActionGroup actgroup(this);
224 QActionGroup actgroup2(this);
227 menu.addAction(gmain->_runLoadedSchemaAct);
229 menu.addAction(gmain->_importDataTypeAct);
230 menu.addAction(gmain->_newContainerAct);
231 menu.addAction(gmain->_newHPContainerAct);
232 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
233 CNmenu->addAction(gmain->_nodeFromCatalogAct);
234 // CNmenu->addSeparator();
235 // CNmenu->addAction(gmain->_cppNodeAct);
236 // CNmenu->addAction(gmain->_XMLNodeAct);
237 CNmenu->addSeparator();
238 CNmenu->addAction(gmain->_inlineScriptNodeAct);
239 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
240 CNmenu->addSeparator();
241 CNmenu->addAction(gmain->_inDataNodeAct);
242 CNmenu->addAction(gmain->_outDataNodeAct);
243 CNmenu->addAction(gmain->_inStudyNodeAct);
244 CNmenu->addAction(gmain->_outStudyNodeAct);
245 CNmenu->addSeparator();
246 CNmenu->addAction(gmain->_blockNodeAct);
247 CNmenu->addSeparator();
248 CNmenu->addAction(gmain->_FORNodeAct);
249 addForEachMenu(CNmenu,&actgroup);
250 CNmenu->addAction(gmain->_WHILENodeAct);
251 CNmenu->addAction(gmain->_SWITCHNodeAct);
252 CNmenu->addAction(gmain->_OptimizerLoopAct);
254 menu.addAction(gmain->_pasteItemAct);
256 QMenu *PINmenu = menu.addMenu(tr("Put Graph Content in Node"));
257 PINmenu->addAction(gmain->_putGraphInBlocAct);
258 PINmenu->addSeparator();
259 PINmenu->addAction(gmain->_putGraphInForLoopAct);
260 addForEachMenuToPutGraph(PINmenu,&actgroup2);
261 PINmenu->addAction(gmain->_putGraphInWhileLoopAct);
262 PINmenu->addAction(gmain->_putGraphInOptimizerLoopAct);
266 menu.addAction(gmain->_getYacsContainerLogAct);
268 menu.addAction(gmain->_showAllLinksAct);
269 menu.addAction(gmain->_hideAllLinksAct);
270 menu.addAction(gmain->_deEmphasizeAllAct);
272 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
273 menu.addAction(gmain->_arrangeLocalNodesAct);
274 menu.addAction(gmain->_arrangeRecurseNodesAct);
276 menu.addAction(gmain->_zoomToBlocAct);
277 menu.addAction(gmain->_centerOnNodeAct);
278 menu.addAction(gmain->_shrinkExpand);
279 menu.addAction(gmain->_shrinkExpandChildren);
280 menu.addAction(gmain->_shrinkExpandElementaryRecursively);
281 menu.addAction(gmain->_computeLinkAct);
282 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
283 // menu.addAction(gmain->_toggleSimplifyLinkAct);
284 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
285 // menu.addAction(gmain->_toggleAddRowColsAct);
288 menu.addAction(gmain->_getErrorReportAct);
289 menu.addAction(gmain->_getErrorDetailsAct);
290 menu.addAction(gmain->_shutdownProcAct);
292 menu.exec(globalPos);
295 //=======================================================================================
297 NodeMenu::NodeMenu() : MenusBase()
301 NodeMenu::~NodeMenu()
305 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
307 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
308 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
309 QMenu menu(m, caller);
313 menu.addAction(gmain->_deleteItemAct);
314 menu.addAction(gmain->_cutItemAct);
315 menu.addAction(gmain->_copyItemAct);
316 menu.addAction(gmain->_pasteItemAct);
319 menu.addAction(gmain->_showOnlyCtrlLinksAct);
320 menu.addAction(gmain->_showCtrlLinksAct);
321 menu.addAction(gmain->_hideCtrlLinksAct);
322 menu.addAction(gmain->_emphasisPortLinksAct);
323 menu.addAction(gmain->_deEmphasizeAllAct);
325 menu.addAction(gmain->_zoomToBlocAct);
326 menu.addAction(gmain->_centerOnNodeAct);
327 menu.exec(globalPos);
330 //=======================================================================================
332 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
336 HeaderNodeMenu::~HeaderNodeMenu()
340 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
342 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
343 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
344 QMenu menu(m, caller);
348 menu.addAction(gmain->_deleteItemAct);
350 menu.exec(globalPos);
353 //=======================================================================================
355 LinkMenu::LinkMenu() : MenusBase()
359 LinkMenu::~LinkMenu()
363 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
365 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
366 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
367 QMenu menu(m, caller);
369 menu.addAction(gmain->_showOnlyLinkAct);
370 menu.addAction(gmain->_showLinkAct);
371 menu.addAction(gmain->_hideLinkAct);
372 menu.addAction(gmain->_emphasisLinkAct);
373 menu.addAction(gmain->_deEmphasizeAllAct);
377 menu.addAction(gmain->_deleteItemAct);
379 menu.exec(globalPos);
382 //=======================================================================================
384 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
388 ElementaryNodeMenu::~ElementaryNodeMenu()
392 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
394 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
395 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
396 QMenu menu(m, caller);
400 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
401 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
404 // menu.addAction(gmain->_newContainerAct);
405 // menu.addSeparator();
407 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
408 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
409 if(sin && !sin->isValid())
411 menu.addAction(gmain->_getErrorReportAct);
414 menu.addAction(gmain->_deleteItemAct);
415 menu.addAction(gmain->_cutItemAct);
416 menu.addAction(gmain->_copyItemAct);
417 menu.addAction(gmain->_pasteItemAct);
418 menu.addAction(gmain->_putInBlocAct);
422 menu.addAction(gmain->_getErrorReportAct);
423 menu.addAction(gmain->_getErrorDetailsAct);
424 menu.addAction(gmain->_getContainerLogAct);
427 menu.addAction(gmain->_showOnlyCtrlLinksAct);
428 menu.addAction(gmain->_showCtrlLinksAct);
429 menu.addAction(gmain->_hideCtrlLinksAct);
430 menu.addAction(gmain->_emphasisPortLinksAct);
431 menu.addAction(gmain->_deEmphasizeAllAct);
433 menu.addAction(gmain->_zoomToBlocAct);
434 menu.addAction(gmain->_centerOnNodeAct);
435 menu.addAction(gmain->_shrinkExpand);
436 // menu.addSeparator();
437 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
438 menu.exec(globalPos);
441 //=======================================================================================
443 InPortMenu::InPortMenu() : MenusBase()
447 InPortMenu::~InPortMenu()
451 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
453 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
454 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
455 QMenu menu(m, caller);
457 menu.addAction(gmain->_showOnlyPortLinksAct);
458 menu.addAction(gmain->_showPortLinksAct);
459 menu.addAction(gmain->_hidePortLinksAct);
460 menu.addAction(gmain->_emphasisPortLinksAct);
461 menu.addAction(gmain->_deEmphasizeAllAct);
464 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
465 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
467 if (sdp) parent = sdp->getPort()->getNode();
469 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
472 menu.addAction(gmain->_deleteItemAct);
475 menu.exec(globalPos);
478 //=======================================================================================
480 OutPortMenu::OutPortMenu() : MenusBase()
484 OutPortMenu::~OutPortMenu()
488 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
490 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
491 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
492 QMenu menu(m, caller);
494 menu.addAction(gmain->_showOnlyPortLinksAct);
495 menu.addAction(gmain->_showPortLinksAct);
496 menu.addAction(gmain->_hidePortLinksAct);
497 menu.addAction(gmain->_emphasisPortLinksAct);
498 menu.addAction(gmain->_deEmphasizeAllAct);
501 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
502 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
504 if (sdp) parent = sdp->getPort()->getNode();
506 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
509 menu.addAction(gmain->_deleteItemAct);
512 menu.exec(globalPos);
515 //=======================================================================================
517 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
521 CtrlInPortMenu::~CtrlInPortMenu()
525 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
527 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
528 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
529 QMenu menu(m, caller);
531 menu.addAction(gmain->_showOnlyCtrlLinksAct);
532 menu.addAction(gmain->_showCtrlLinksAct);
533 menu.addAction(gmain->_hideCtrlLinksAct);
534 menu.addAction(gmain->_emphasisCtrlLinksAct);
535 menu.addAction(gmain->_deEmphasizeAllAct);
538 //menu.addSeparator();
539 //menu.addAction(gmain->_deleteItemAct);
541 menu.exec(globalPos);
544 //=======================================================================================
546 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
550 CtrlOutPortMenu::~CtrlOutPortMenu()
554 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
556 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
557 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
558 QMenu menu(m, caller);
560 menu.addAction(gmain->_showOnlyCtrlLinksAct);
561 menu.addAction(gmain->_showCtrlLinksAct);
562 menu.addAction(gmain->_hideCtrlLinksAct);
563 menu.addAction(gmain->_emphasisCtrlLinksAct);
564 menu.addAction(gmain->_deEmphasizeAllAct);
567 //menu.addSeparator();
568 //menu.addAction(gmain->_deleteItemAct);
570 menu.exec(globalPos);
573 //=======================================================================================
575 ReferenceMenu::ReferenceMenu() : MenusBase()
579 ReferenceMenu::~ReferenceMenu()
583 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
585 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
586 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
587 QMenu menu(m, caller);
589 menu.addAction(gmain->_selectReferenceAct);
590 menu.exec(globalPos);
593 //=======================================================================================
595 ContainerDirMenu::ContainerDirMenu() : MenusBase()
599 ContainerDirMenu::~ContainerDirMenu()
603 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
605 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
606 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
607 QMenu menu(m, caller);
611 menu.addAction(gmain->_newContainerAct);
612 menu.addAction(gmain->_newHPContainerAct);
614 menu.exec(globalPos);
617 //=======================================================================================
619 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
623 ComponentInstanceMenu::~ComponentInstanceMenu()
627 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
629 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
630 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
631 QMenu menu(m, caller);
635 menu.addAction(gmain->_selectComponentInstanceAct);
636 menu.addAction(gmain->_newSalomeComponentAct);
638 menu.exec(globalPos);
641 //=======================================================================================
643 ContainerMenu::ContainerMenu() : MenusBase()
647 ContainerMenu::~ContainerMenu()
651 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
653 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
654 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
655 QMenu menu(m, caller);
659 menu.addAction(gmain->_deleteItemAct);
661 menu.exec(globalPos);