1 // Copyright (C) 2006-2012 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),"ForEachLoop");
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 addForEachMenuToPutGraph(PINmenu,&actgroup2);
254 PINmenu->addAction(gmain->_putGraphInOptimizerLoopAct);
258 menu.addAction(gmain->_getYacsContainerLogAct);
260 menu.addAction(gmain->_showAllLinksAct);
261 menu.addAction(gmain->_hideAllLinksAct);
262 menu.addAction(gmain->_deEmphasizeAllAct);
264 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
265 menu.addAction(gmain->_arrangeLocalNodesAct);
266 menu.addAction(gmain->_arrangeRecurseNodesAct);
268 menu.addAction(gmain->_zoomToBlocAct);
269 menu.addAction(gmain->_centerOnNodeAct);
270 menu.addAction(gmain->_computeLinkAct);
271 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
272 // menu.addAction(gmain->_toggleSimplifyLinkAct);
273 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
274 // menu.addAction(gmain->_toggleAddRowColsAct);
277 menu.addAction(gmain->_getErrorReportAct);
278 menu.addAction(gmain->_getErrorDetailsAct);
279 menu.addAction(gmain->_shutdownProcAct);
281 menu.exec(globalPos);
284 //=======================================================================================
286 NodeMenu::NodeMenu() : MenusBase()
290 NodeMenu::~NodeMenu()
294 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
296 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
297 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
298 QMenu menu(m, caller);
302 menu.addAction(gmain->_deleteItemAct);
303 menu.addAction(gmain->_cutItemAct);
304 menu.addAction(gmain->_copyItemAct);
305 menu.addAction(gmain->_pasteItemAct);
308 menu.addAction(gmain->_showOnlyCtrlLinksAct);
309 menu.addAction(gmain->_showCtrlLinksAct);
310 menu.addAction(gmain->_hideCtrlLinksAct);
311 menu.addAction(gmain->_emphasisPortLinksAct);
312 menu.addAction(gmain->_deEmphasizeAllAct);
314 menu.addAction(gmain->_zoomToBlocAct);
315 menu.addAction(gmain->_centerOnNodeAct);
316 menu.exec(globalPos);
319 //=======================================================================================
321 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
325 HeaderNodeMenu::~HeaderNodeMenu()
329 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
331 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
332 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
333 QMenu menu(m, caller);
337 menu.addAction(gmain->_deleteItemAct);
339 menu.exec(globalPos);
342 //=======================================================================================
344 LinkMenu::LinkMenu() : MenusBase()
348 LinkMenu::~LinkMenu()
352 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
354 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
355 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
356 QMenu menu(m, caller);
358 menu.addAction(gmain->_showOnlyLinkAct);
359 menu.addAction(gmain->_showLinkAct);
360 menu.addAction(gmain->_hideLinkAct);
361 menu.addAction(gmain->_emphasisLinkAct);
362 menu.addAction(gmain->_deEmphasizeAllAct);
366 menu.addAction(gmain->_deleteItemAct);
368 menu.exec(globalPos);
371 //=======================================================================================
373 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
377 ElementaryNodeMenu::~ElementaryNodeMenu()
381 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
383 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
384 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
385 QMenu menu(m, caller);
389 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
390 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
393 // menu.addAction(gmain->_newContainerAct);
394 // menu.addSeparator();
396 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
397 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
398 if(sin && !sin->isValid())
400 menu.addAction(gmain->_getErrorReportAct);
403 menu.addAction(gmain->_deleteItemAct);
404 menu.addAction(gmain->_cutItemAct);
405 menu.addAction(gmain->_copyItemAct);
406 menu.addAction(gmain->_pasteItemAct);
407 menu.addAction(gmain->_putInBlocAct);
411 menu.addAction(gmain->_getErrorReportAct);
412 menu.addAction(gmain->_getErrorDetailsAct);
413 menu.addAction(gmain->_getContainerLogAct);
416 menu.addAction(gmain->_showOnlyCtrlLinksAct);
417 menu.addAction(gmain->_showCtrlLinksAct);
418 menu.addAction(gmain->_hideCtrlLinksAct);
419 menu.addAction(gmain->_emphasisPortLinksAct);
420 menu.addAction(gmain->_deEmphasizeAllAct);
422 menu.addAction(gmain->_zoomToBlocAct);
423 menu.addAction(gmain->_centerOnNodeAct);
424 menu.addAction(gmain->_shrinkExpand);
425 // menu.addSeparator();
426 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
427 menu.exec(globalPos);
430 //=======================================================================================
432 InPortMenu::InPortMenu() : MenusBase()
436 InPortMenu::~InPortMenu()
440 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
442 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
443 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
444 QMenu menu(m, caller);
446 menu.addAction(gmain->_showOnlyPortLinksAct);
447 menu.addAction(gmain->_showPortLinksAct);
448 menu.addAction(gmain->_hidePortLinksAct);
449 menu.addAction(gmain->_emphasisPortLinksAct);
450 menu.addAction(gmain->_deEmphasizeAllAct);
453 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
454 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
456 if (sdp) parent = sdp->getPort()->getNode();
458 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
461 menu.addAction(gmain->_deleteItemAct);
464 menu.exec(globalPos);
467 //=======================================================================================
469 OutPortMenu::OutPortMenu() : MenusBase()
473 OutPortMenu::~OutPortMenu()
477 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
479 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
480 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
481 QMenu menu(m, caller);
483 menu.addAction(gmain->_showOnlyPortLinksAct);
484 menu.addAction(gmain->_showPortLinksAct);
485 menu.addAction(gmain->_hidePortLinksAct);
486 menu.addAction(gmain->_emphasisPortLinksAct);
487 menu.addAction(gmain->_deEmphasizeAllAct);
490 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
491 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
493 if (sdp) parent = sdp->getPort()->getNode();
495 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
498 menu.addAction(gmain->_deleteItemAct);
501 menu.exec(globalPos);
504 //=======================================================================================
506 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
510 CtrlInPortMenu::~CtrlInPortMenu()
514 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
516 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
517 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
518 QMenu menu(m, caller);
520 menu.addAction(gmain->_showOnlyCtrlLinksAct);
521 menu.addAction(gmain->_showCtrlLinksAct);
522 menu.addAction(gmain->_hideCtrlLinksAct);
523 menu.addAction(gmain->_emphasisCtrlLinksAct);
524 menu.addAction(gmain->_deEmphasizeAllAct);
527 //menu.addSeparator();
528 //menu.addAction(gmain->_deleteItemAct);
530 menu.exec(globalPos);
533 //=======================================================================================
535 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
539 CtrlOutPortMenu::~CtrlOutPortMenu()
543 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
545 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
546 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
547 QMenu menu(m, caller);
549 menu.addAction(gmain->_showOnlyCtrlLinksAct);
550 menu.addAction(gmain->_showCtrlLinksAct);
551 menu.addAction(gmain->_hideCtrlLinksAct);
552 menu.addAction(gmain->_emphasisCtrlLinksAct);
553 menu.addAction(gmain->_deEmphasizeAllAct);
556 //menu.addSeparator();
557 //menu.addAction(gmain->_deleteItemAct);
559 menu.exec(globalPos);
562 //=======================================================================================
564 ReferenceMenu::ReferenceMenu() : MenusBase()
568 ReferenceMenu::~ReferenceMenu()
572 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
574 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
575 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
576 QMenu menu(m, caller);
578 menu.addAction(gmain->_selectReferenceAct);
579 menu.exec(globalPos);
582 //=======================================================================================
584 ContainerDirMenu::ContainerDirMenu() : MenusBase()
588 ContainerDirMenu::~ContainerDirMenu()
592 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
594 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
595 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
596 QMenu menu(m, caller);
600 menu.addAction(gmain->_newContainerAct);
602 menu.exec(globalPos);
605 //=======================================================================================
607 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
611 ComponentInstanceMenu::~ComponentInstanceMenu()
615 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
617 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
618 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
619 QMenu menu(m, caller);
623 menu.addAction(gmain->_selectComponentInstanceAct);
624 menu.addAction(gmain->_newSalomeComponentAct);
626 menu.exec(globalPos);
629 //=======================================================================================
631 ContainerMenu::ContainerMenu() : MenusBase()
635 ContainerMenu::~ContainerMenu()
639 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
641 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
642 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
643 QMenu menu(m, caller);
647 menu.addAction(gmain->_deleteItemAct);
649 menu.exec(globalPos);