Salome HOME
1a43e83103aa154cc45705b7b1188f55f308b709
[modules/yacs.git] / src / genericgui / Menus.cxx
1 // Copyright (C) 2006-2014  CEA/DEN, EDF R&D
2 //
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.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "Menus.hxx"
21 #include "QtGuiContext.hxx"
22 #include "guiObservers.hxx"
23 #include "DataPort.hxx"
24 #include "DataNode.hxx"
25 #include "ServiceNode.hxx"
26 #include "InlineNode.hxx"
27
28 #include <QMenu>
29
30 //#define _DEVDEBUG_
31 #include "YacsTrace.hxx"
32
33 using namespace std;
34 using namespace YACS::HMI;
35 using namespace YACS::ENGINE;
36
37 //=======================================================================================
38
39 MenusBase::MenusBase()
40 {
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()));
46 }
47
48 MenusBase::~MenusBase()
49 {
50 }
51
52 void MenusBase::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
53 {
54   QMenu menu(m, caller);
55   menu.addAction(_dummyAct);
56   menu.exec(globalPos);
57 }
58
59 void MenusBase::dummyAction()
60 {
61   DEBTRACE("MenusBase::dummyAction");
62   QtGuiContext::_counters->stats();
63 }
64
65 void MenusBase::foreachAction(QAction* act)
66 {
67   DEBTRACE(act->text().toStdString());
68   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
69   gmain->createForEachLoop(act->text().toStdString());
70 }
71
72 void MenusBase::putGraphInForeachAction(QAction* act)
73 {
74   DEBTRACE(act->text().toStdString());
75   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
76   gmain->putGraphInForeachLoop(act->text().toStdString());
77 }
78
79 void MenusBase::addHeader(QMenu &m, const QString &h)
80 {
81   m.addAction(_dummyAct);
82   _dummyAct->setText(h);
83   QFont f = _dummyAct->font();
84   f.setBold(true);
85   _dummyAct->setFont(f);
86   m.addSeparator();
87 }
88
89 void MenusBase::buildForEachMenu(QMenu *m, QActionGroup* actgroup)
90 {
91   QPixmap pixmap;
92   pixmap.load("icons:new_foreach_loop_node.png");
93
94   QMenu *ForEachMenu=m->addMenu(QIcon(pixmap),"ForEach Loop");
95
96   Proc* proc = GuiContext::getCurrent()->getProc();
97   std::map<std::string, TypeCode*>::const_iterator it = proc->typeMap.begin();
98   QAction* act;
99   for (; it != proc->typeMap.end(); ++it)
100     {
101       act=actgroup->addAction((*it).first.c_str());
102       ForEachMenu->addAction(act);
103     }
104 }
105
106 void MenusBase::addForEachMenu(QMenu *m, QActionGroup* actgroup)
107 {
108   buildForEachMenu(m, actgroup);
109   connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(foreachAction(QAction*)));
110 }
111
112 void MenusBase::addForEachMenuToPutGraph(QMenu *m, QActionGroup* actgroup)
113 {
114   buildForEachMenu(m, actgroup);
115   connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(putGraphInForeachAction(QAction*)));
116 }
117
118 //=======================================================================================
119
120 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
121 {
122 }
123
124 ComposedNodeMenu::~ComposedNodeMenu()
125 {
126 }
127
128 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
129 {
130   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
131   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
132   QMenu menu(m, caller);
133   QActionGroup actgroup(this);
134   addHeader(menu, m);
135   if (isEdition)
136     {
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);
158       menu.addSeparator();
159     }
160 //   menu.addAction(gmain->_toggleSceneItemVisibleAct);
161   menu.addAction(gmain->_arrangeLocalNodesAct);
162   menu.addAction(gmain->_arrangeRecurseNodesAct);
163   menu.addSeparator();
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);
169   menu.addSeparator();
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);
180   if (isEdition)
181     {
182       menu.addSeparator();
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);
188
189       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
190       SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
191       if(sin && !sin->isValid())
192         {
193           menu.addSeparator();
194           menu.addAction(gmain->_getErrorReportAct);
195           menu.addAction(gmain->_getErrorDetailsAct);
196         }
197     }
198   else
199     {
200       menu.addAction(gmain->_getErrorReportAct);
201       menu.addAction(gmain->_getErrorDetailsAct);
202     }
203   menu.exec(globalPos);
204 }
205
206 //=======================================================================================
207
208 ProcMenu::ProcMenu() : MenusBase()
209 {
210 }
211
212 ProcMenu::~ProcMenu()
213 {
214 }
215
216 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
217 {
218   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
219   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
220   QMenu menu(m, caller);
221   addHeader(menu, m);
222   QActionGroup actgroup(this);
223   QActionGroup actgroup2(this);
224   if (isEdition)
225     {
226       menu.addAction(gmain->_runLoadedSchemaAct);
227       menu.addSeparator();
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);
252       menu.addSeparator();
253       menu.addAction(gmain->_pasteItemAct);
254
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);
262
263       menu.addSeparator();
264     }
265   menu.addAction(gmain->_getYacsContainerLogAct);
266   menu.addSeparator();
267   menu.addAction(gmain->_showAllLinksAct);
268   menu.addAction(gmain->_hideAllLinksAct);
269   menu.addAction(gmain->_deEmphasizeAllAct);
270   menu.addSeparator();
271 //   menu.addAction(gmain->_toggleSceneItemVisibleAct);
272   menu.addAction(gmain->_arrangeLocalNodesAct);
273   menu.addAction(gmain->_arrangeRecurseNodesAct);
274   menu.addSeparator();
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);
285   if (!isEdition)
286     {
287       menu.addAction(gmain->_getErrorReportAct);
288       menu.addAction(gmain->_getErrorDetailsAct);
289       menu.addAction(gmain->_shutdownProcAct);
290     }
291   menu.exec(globalPos);
292 }
293
294 //=======================================================================================
295
296 NodeMenu::NodeMenu() : MenusBase()
297 {
298 }
299
300 NodeMenu::~NodeMenu()
301 {
302 }
303
304 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
305 {
306   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
307   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
308   QMenu menu(m, caller);
309   addHeader(menu, m);
310   if (isEdition)
311     {
312       menu.addAction(gmain->_deleteItemAct);
313       menu.addAction(gmain->_cutItemAct);
314       menu.addAction(gmain->_copyItemAct);
315       menu.addAction(gmain->_pasteItemAct);
316     }
317   menu.addSeparator();
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);
323   menu.addSeparator();
324   menu.addAction(gmain->_zoomToBlocAct);
325   menu.addAction(gmain->_centerOnNodeAct);
326   menu.exec(globalPos);
327 }
328
329 //=======================================================================================
330
331 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
332 {
333 }
334
335 HeaderNodeMenu::~HeaderNodeMenu()
336 {
337 }
338
339 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
340 {
341   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
342   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
343   QMenu menu(m, caller);
344   addHeader(menu, m);
345   if (isEdition)
346     {
347       menu.addAction(gmain->_deleteItemAct);
348     }
349   menu.exec(globalPos);
350 }
351
352 //=======================================================================================
353
354 LinkMenu::LinkMenu() : MenusBase()
355 {
356 }
357
358 LinkMenu::~LinkMenu()
359 {
360 }
361
362 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
363 {
364   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
365   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
366   QMenu menu(m, caller);
367   addHeader(menu, m);
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);
373   if (isEdition)
374     {
375       menu.addSeparator();
376       menu.addAction(gmain->_deleteItemAct);
377     }
378   menu.exec(globalPos);
379 }
380
381 //=======================================================================================
382
383 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
384 {
385 }
386
387 ElementaryNodeMenu::~ElementaryNodeMenu()
388 {
389 }
390
391 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
392 {
393   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
394   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
395   QMenu menu(m, caller);
396   addHeader(menu, m);
397   if (isEdition)
398     {
399 //       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
400 //       SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
401 //       if (ssn)
402 //         {
403 //           menu.addAction(gmain->_newContainerAct);
404 //           menu.addSeparator();
405 //         }
406       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
407       SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
408       if(sin && !sin->isValid())
409         {
410           menu.addAction(gmain->_getErrorReportAct);
411           menu.addSeparator();
412         }
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);
418     }
419   else
420     {
421       menu.addAction(gmain->_getErrorReportAct);
422       menu.addAction(gmain->_getErrorDetailsAct);
423       menu.addAction(gmain->_getContainerLogAct);
424     }
425   menu.addSeparator();
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);
431   menu.addSeparator();
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);
438 }
439
440 //=======================================================================================
441
442 InPortMenu::InPortMenu() : MenusBase()
443 {
444 }
445
446 InPortMenu::~InPortMenu()
447 {
448 }
449
450 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
451 {
452   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
453   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
454   QMenu menu(m, caller);
455   addHeader(menu, m);
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);
461   if (isEdition)
462     {
463       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
464       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
465       Node *parent = 0;
466       if (sdp) parent = sdp->getPort()->getNode();
467       if (parent)
468         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
469           {
470             menu.addSeparator();
471             menu.addAction(gmain->_deleteItemAct);
472           }
473     }
474   menu.exec(globalPos);
475 }
476
477 //=======================================================================================
478
479 OutPortMenu::OutPortMenu() : MenusBase()
480 {
481 }
482
483 OutPortMenu::~OutPortMenu()
484 {
485 }
486
487 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
488 {
489   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
490   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
491   QMenu menu(m, caller);
492   addHeader(menu, m);
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);
498   if (isEdition)
499     {
500       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
501       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
502       Node *parent = 0;
503       if (sdp) parent = sdp->getPort()->getNode();
504       if (parent)
505         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
506           {
507             menu.addSeparator();
508             menu.addAction(gmain->_deleteItemAct);
509           }
510     }
511   menu.exec(globalPos);
512 }
513
514 //=======================================================================================
515
516 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
517 {
518 }
519
520 CtrlInPortMenu::~CtrlInPortMenu()
521 {
522 }
523
524 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
525 {
526   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
527   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
528   QMenu menu(m, caller);
529   addHeader(menu, m);
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);
535   if (isEdition)
536     {
537       //menu.addSeparator();
538       //menu.addAction(gmain->_deleteItemAct);
539     }
540   menu.exec(globalPos);
541 }
542
543 //=======================================================================================
544
545 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
546 {
547 }
548
549 CtrlOutPortMenu::~CtrlOutPortMenu()
550 {
551 }
552
553 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
554 {
555   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
556   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
557   QMenu menu(m, caller);
558   addHeader(menu, m);
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);
564   if (isEdition)
565     {
566       //menu.addSeparator();
567       //menu.addAction(gmain->_deleteItemAct);
568     }
569   menu.exec(globalPos);
570 }
571
572 //=======================================================================================
573
574 ReferenceMenu::ReferenceMenu() : MenusBase()
575 {
576 }
577
578 ReferenceMenu::~ReferenceMenu()
579 {
580 }
581
582 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
583 {
584   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
585   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
586   QMenu menu(m, caller);
587   addHeader(menu, m);
588   menu.addAction(gmain->_selectReferenceAct);
589   menu.exec(globalPos);
590 }
591
592 //=======================================================================================
593
594 ContainerDirMenu::ContainerDirMenu() : MenusBase()
595 {
596 }
597
598 ContainerDirMenu::~ContainerDirMenu()
599 {
600 }
601
602 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
603 {
604   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
605   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
606   QMenu menu(m, caller);
607   addHeader(menu, m);
608   if (isEdition)
609     {
610       menu.addAction(gmain->_newContainerAct);
611       menu.addAction(gmain->_newHPContainerAct);
612     }
613   menu.exec(globalPos);
614 }
615
616 //=======================================================================================
617
618 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
619 {
620 }
621
622 ComponentInstanceMenu::~ComponentInstanceMenu()
623 {
624 }
625
626 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
627 {
628   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
629   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
630   QMenu menu(m, caller);
631   addHeader(menu, m);
632   if (isEdition)
633     {
634       menu.addAction(gmain->_selectComponentInstanceAct);
635       menu.addAction(gmain->_newSalomeComponentAct);
636     }
637   menu.exec(globalPos);
638 }
639
640 //=======================================================================================
641
642 ContainerMenu::ContainerMenu() : MenusBase()
643 {
644 }
645
646 ContainerMenu::~ContainerMenu()
647 {
648 }
649
650 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
651 {
652   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
653   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
654   QMenu menu(m, caller);
655   addHeader(menu, m);
656   if (isEdition)
657     {
658       menu.addAction(gmain->_deleteItemAct);
659     }
660   menu.exec(globalPos);
661 }
662