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::addHeader(QMenu &m, const QString &h)
74 m.addAction(_dummyAct);
75 _dummyAct->setText(h);
76 QFont f = _dummyAct->font();
78 _dummyAct->setFont(f);
82 void MenusBase::addForEachMenu(QMenu *m, QActionGroup* actgroup)
85 pixmap.load("icons:new_foreach_loop_node.png");
87 QMenu *ForEachMenu=m->addMenu(QIcon(pixmap),"ForEachLoop");
89 Proc* proc = GuiContext::getCurrent()->getProc();
90 std::map<std::string, TypeCode*>::const_iterator it = proc->typeMap.begin();
92 for (; it != proc->typeMap.end(); ++it)
94 act=actgroup->addAction((*it).first.c_str());
95 ForEachMenu->addAction(act);
98 connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(foreachAction(QAction*)));
102 //=======================================================================================
104 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
108 ComposedNodeMenu::~ComposedNodeMenu()
112 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
114 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
115 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
116 QMenu menu(m, caller);
117 QActionGroup actgroup(this);
121 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
122 CNmenu->addAction(gmain->_nodeFromCatalogAct);
123 // CNmenu->addSeparator();
124 // CNmenu->addAction(gmain->_cppNodeAct);
125 // CNmenu->addAction(gmain->_XMLNodeAct);
126 CNmenu->addSeparator();
127 CNmenu->addAction(gmain->_inlineScriptNodeAct);
128 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
129 CNmenu->addSeparator();
130 CNmenu->addAction(gmain->_inDataNodeAct);
131 CNmenu->addAction(gmain->_outDataNodeAct);
132 CNmenu->addAction(gmain->_inStudyNodeAct);
133 CNmenu->addAction(gmain->_outStudyNodeAct);
134 CNmenu->addSeparator();
135 CNmenu->addAction(gmain->_blockNodeAct);
136 CNmenu->addSeparator();
137 CNmenu->addAction(gmain->_FORNodeAct);
138 addForEachMenu(CNmenu,&actgroup);
139 CNmenu->addAction(gmain->_WHILENodeAct);
140 CNmenu->addAction(gmain->_SWITCHNodeAct);
141 CNmenu->addAction(gmain->_OptimizerLoopAct);
144 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
145 menu.addAction(gmain->_arrangeLocalNodesAct);
146 menu.addAction(gmain->_arrangeRecurseNodesAct);
148 menu.addAction(gmain->_showOnlyCtrlLinksAct);
149 menu.addAction(gmain->_showCtrlLinksAct);
150 menu.addAction(gmain->_hideCtrlLinksAct);
151 menu.addAction(gmain->_emphasisPortLinksAct);
152 menu.addAction(gmain->_deEmphasizeAllAct);
154 menu.addAction(gmain->_zoomToBlocAct);
155 menu.addAction(gmain->_centerOnNodeAct);
156 menu.addAction(gmain->_shrinkExpand);
157 menu.addAction(gmain->_computeLinkAct);
158 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
159 // menu.addAction(gmain->_toggleSimplifyLinkAct);
160 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
161 // menu.addAction(gmain->_toggleAddRowColsAct);
165 menu.addAction(gmain->_deleteItemAct);
166 menu.addAction(gmain->_cutItemAct);
167 menu.addAction(gmain->_copyItemAct);
168 menu.addAction(gmain->_pasteItemAct);
169 menu.addAction(gmain->_putInBlocAct);
171 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
172 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
173 if(sin && !sin->isValid())
176 menu.addAction(gmain->_getErrorReportAct);
177 menu.addAction(gmain->_getErrorDetailsAct);
182 menu.addAction(gmain->_getErrorReportAct);
183 menu.addAction(gmain->_getErrorDetailsAct);
185 menu.exec(globalPos);
188 //=======================================================================================
190 ProcMenu::ProcMenu() : MenusBase()
194 ProcMenu::~ProcMenu()
198 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
200 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
201 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
202 QMenu menu(m, caller);
204 QActionGroup actgroup(this);
207 menu.addAction(gmain->_runLoadedSchemaAct);
209 menu.addAction(gmain->_importDataTypeAct);
210 menu.addAction(gmain->_newContainerAct);
211 QMenu *CNmenu = menu.addMenu(tr("Create Node"));
212 CNmenu->addAction(gmain->_nodeFromCatalogAct);
213 // CNmenu->addSeparator();
214 // CNmenu->addAction(gmain->_cppNodeAct);
215 // CNmenu->addAction(gmain->_XMLNodeAct);
216 CNmenu->addSeparator();
217 CNmenu->addAction(gmain->_inlineScriptNodeAct);
218 CNmenu->addAction(gmain->_inlineFunctionNodeAct);
219 CNmenu->addSeparator();
220 CNmenu->addAction(gmain->_inDataNodeAct);
221 CNmenu->addAction(gmain->_outDataNodeAct);
222 CNmenu->addAction(gmain->_inStudyNodeAct);
223 CNmenu->addAction(gmain->_outStudyNodeAct);
224 CNmenu->addSeparator();
225 CNmenu->addAction(gmain->_blockNodeAct);
226 CNmenu->addSeparator();
227 CNmenu->addAction(gmain->_FORNodeAct);
228 addForEachMenu(CNmenu,&actgroup);
229 CNmenu->addAction(gmain->_WHILENodeAct);
230 CNmenu->addAction(gmain->_SWITCHNodeAct);
231 CNmenu->addAction(gmain->_OptimizerLoopAct);
233 menu.addAction(gmain->_pasteItemAct);
236 menu.addAction(gmain->_getYacsContainerLogAct);
238 menu.addAction(gmain->_showAllLinksAct);
239 menu.addAction(gmain->_hideAllLinksAct);
240 menu.addAction(gmain->_deEmphasizeAllAct);
242 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
243 menu.addAction(gmain->_arrangeLocalNodesAct);
244 menu.addAction(gmain->_arrangeRecurseNodesAct);
246 menu.addAction(gmain->_zoomToBlocAct);
247 menu.addAction(gmain->_centerOnNodeAct);
248 menu.addAction(gmain->_computeLinkAct);
249 // menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
250 // menu.addAction(gmain->_toggleSimplifyLinkAct);
251 // menu.addAction(gmain->_toggleForce2NodesLinkAct);
252 // menu.addAction(gmain->_toggleAddRowColsAct);
255 menu.addAction(gmain->_getErrorReportAct);
256 menu.addAction(gmain->_getErrorDetailsAct);
257 menu.addAction(gmain->_shutdownProcAct);
259 menu.exec(globalPos);
262 //=======================================================================================
264 NodeMenu::NodeMenu() : MenusBase()
268 NodeMenu::~NodeMenu()
272 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
274 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
275 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
276 QMenu menu(m, caller);
280 menu.addAction(gmain->_deleteItemAct);
281 menu.addAction(gmain->_cutItemAct);
282 menu.addAction(gmain->_copyItemAct);
283 menu.addAction(gmain->_pasteItemAct);
286 menu.addAction(gmain->_showOnlyCtrlLinksAct);
287 menu.addAction(gmain->_showCtrlLinksAct);
288 menu.addAction(gmain->_hideCtrlLinksAct);
289 menu.addAction(gmain->_emphasisPortLinksAct);
290 menu.addAction(gmain->_deEmphasizeAllAct);
292 menu.addAction(gmain->_zoomToBlocAct);
293 menu.addAction(gmain->_centerOnNodeAct);
294 menu.exec(globalPos);
297 //=======================================================================================
299 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
303 HeaderNodeMenu::~HeaderNodeMenu()
307 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
309 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
310 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
311 QMenu menu(m, caller);
315 menu.addAction(gmain->_deleteItemAct);
317 menu.exec(globalPos);
320 //=======================================================================================
322 LinkMenu::LinkMenu() : MenusBase()
326 LinkMenu::~LinkMenu()
330 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
332 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
333 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
334 QMenu menu(m, caller);
336 menu.addAction(gmain->_showOnlyLinkAct);
337 menu.addAction(gmain->_showLinkAct);
338 menu.addAction(gmain->_hideLinkAct);
339 menu.addAction(gmain->_emphasisLinkAct);
340 menu.addAction(gmain->_deEmphasizeAllAct);
344 menu.addAction(gmain->_deleteItemAct);
346 menu.exec(globalPos);
349 //=======================================================================================
351 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
355 ElementaryNodeMenu::~ElementaryNodeMenu()
359 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
361 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
362 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
363 QMenu menu(m, caller);
367 // Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
368 // SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
371 // menu.addAction(gmain->_newContainerAct);
372 // menu.addSeparator();
374 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
375 SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
376 if(sin && !sin->isValid())
378 menu.addAction(gmain->_getErrorReportAct);
381 menu.addAction(gmain->_deleteItemAct);
382 menu.addAction(gmain->_cutItemAct);
383 menu.addAction(gmain->_copyItemAct);
384 menu.addAction(gmain->_pasteItemAct);
385 menu.addAction(gmain->_putInBlocAct);
389 menu.addAction(gmain->_getErrorReportAct);
390 menu.addAction(gmain->_getErrorDetailsAct);
391 menu.addAction(gmain->_getContainerLogAct);
394 menu.addAction(gmain->_showOnlyCtrlLinksAct);
395 menu.addAction(gmain->_showCtrlLinksAct);
396 menu.addAction(gmain->_hideCtrlLinksAct);
397 menu.addAction(gmain->_emphasisPortLinksAct);
398 menu.addAction(gmain->_deEmphasizeAllAct);
400 menu.addAction(gmain->_zoomToBlocAct);
401 menu.addAction(gmain->_centerOnNodeAct);
402 menu.addAction(gmain->_shrinkExpand);
403 // menu.addSeparator();
404 // menu.addAction(gmain->_toggleSceneItemVisibleAct);
405 menu.exec(globalPos);
408 //=======================================================================================
410 InPortMenu::InPortMenu() : MenusBase()
414 InPortMenu::~InPortMenu()
418 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
420 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
421 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
422 QMenu menu(m, caller);
424 menu.addAction(gmain->_showOnlyPortLinksAct);
425 menu.addAction(gmain->_showPortLinksAct);
426 menu.addAction(gmain->_hidePortLinksAct);
427 menu.addAction(gmain->_emphasisPortLinksAct);
428 menu.addAction(gmain->_deEmphasizeAllAct);
431 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
432 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
434 if (sdp) parent = sdp->getPort()->getNode();
436 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
439 menu.addAction(gmain->_deleteItemAct);
442 menu.exec(globalPos);
445 //=======================================================================================
447 OutPortMenu::OutPortMenu() : MenusBase()
451 OutPortMenu::~OutPortMenu()
455 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
457 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
458 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
459 QMenu menu(m, caller);
461 menu.addAction(gmain->_showOnlyPortLinksAct);
462 menu.addAction(gmain->_showPortLinksAct);
463 menu.addAction(gmain->_hidePortLinksAct);
464 menu.addAction(gmain->_emphasisPortLinksAct);
465 menu.addAction(gmain->_deEmphasizeAllAct);
468 Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
469 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
471 if (sdp) parent = sdp->getPort()->getNode();
473 if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
476 menu.addAction(gmain->_deleteItemAct);
479 menu.exec(globalPos);
482 //=======================================================================================
484 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
488 CtrlInPortMenu::~CtrlInPortMenu()
492 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
494 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
495 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
496 QMenu menu(m, caller);
498 menu.addAction(gmain->_showOnlyCtrlLinksAct);
499 menu.addAction(gmain->_showCtrlLinksAct);
500 menu.addAction(gmain->_hideCtrlLinksAct);
501 menu.addAction(gmain->_emphasisCtrlLinksAct);
502 menu.addAction(gmain->_deEmphasizeAllAct);
505 //menu.addSeparator();
506 //menu.addAction(gmain->_deleteItemAct);
508 menu.exec(globalPos);
511 //=======================================================================================
513 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
517 CtrlOutPortMenu::~CtrlOutPortMenu()
521 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
523 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
524 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
525 QMenu menu(m, caller);
527 menu.addAction(gmain->_showOnlyCtrlLinksAct);
528 menu.addAction(gmain->_showCtrlLinksAct);
529 menu.addAction(gmain->_hideCtrlLinksAct);
530 menu.addAction(gmain->_emphasisCtrlLinksAct);
531 menu.addAction(gmain->_deEmphasizeAllAct);
534 //menu.addSeparator();
535 //menu.addAction(gmain->_deleteItemAct);
537 menu.exec(globalPos);
540 //=======================================================================================
542 ReferenceMenu::ReferenceMenu() : MenusBase()
546 ReferenceMenu::~ReferenceMenu()
550 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
552 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
553 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
554 QMenu menu(m, caller);
556 menu.addAction(gmain->_selectReferenceAct);
557 menu.exec(globalPos);
560 //=======================================================================================
562 ContainerDirMenu::ContainerDirMenu() : MenusBase()
566 ContainerDirMenu::~ContainerDirMenu()
570 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
572 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
573 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
574 QMenu menu(m, caller);
578 menu.addAction(gmain->_newContainerAct);
580 menu.exec(globalPos);
583 //=======================================================================================
585 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
589 ComponentInstanceMenu::~ComponentInstanceMenu()
593 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
595 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
596 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
597 QMenu menu(m, caller);
601 menu.addAction(gmain->_selectComponentInstanceAct);
602 menu.addAction(gmain->_newSalomeComponentAct);
604 menu.exec(globalPos);
607 //=======================================================================================
609 ContainerMenu::ContainerMenu() : MenusBase()
613 ContainerMenu::~ContainerMenu()
617 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
619 GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
620 bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
621 QMenu menu(m, caller);
625 menu.addAction(gmain->_deleteItemAct);
627 menu.exec(globalPos);