]> SALOME platform Git repositories - modules/yacs.git/blob - src/genericgui/Menus.cxx
Salome HOME
48509553a787257ef06d6975d4bf25bd2f267550
[modules/yacs.git] / src / genericgui / Menus.cxx
1 // Copyright (C) 2006-2012  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.
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::addHeader(QMenu &m, const QString &h)
73 {
74   m.addAction(_dummyAct);
75   _dummyAct->setText(h);
76   QFont f = _dummyAct->font();
77   f.setBold(true);
78   _dummyAct->setFont(f);
79   m.addSeparator();
80 }
81
82 void MenusBase::addForEachMenu(QMenu *m, QActionGroup* actgroup)
83 {
84   QPixmap pixmap;
85   pixmap.load("icons:new_foreach_loop_node.png");
86
87   QMenu *ForEachMenu=m->addMenu(QIcon(pixmap),"ForEachLoop");
88
89   Proc* proc = GuiContext::getCurrent()->getProc();
90   std::map<std::string, TypeCode*>::const_iterator it = proc->typeMap.begin();
91   QAction* act;
92   for (; it != proc->typeMap.end(); ++it)
93     {
94       act=actgroup->addAction((*it).first.c_str());
95       ForEachMenu->addAction(act);
96     }
97
98   connect(actgroup, SIGNAL(triggered(QAction*)), this, SLOT(foreachAction(QAction*)));
99
100 }
101
102 //=======================================================================================
103
104 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
105 {
106 }
107
108 ComposedNodeMenu::~ComposedNodeMenu()
109 {
110 }
111
112 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
113 {
114   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
115   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
116   QMenu menu(m, caller);
117   QActionGroup actgroup(this);
118   addHeader(menu, m);
119   if (isEdition)
120     {
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);
142       menu.addSeparator();
143     }
144 //   menu.addAction(gmain->_toggleSceneItemVisibleAct);
145   menu.addAction(gmain->_arrangeLocalNodesAct);
146   menu.addAction(gmain->_arrangeRecurseNodesAct);
147   menu.addSeparator();
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);
153   menu.addSeparator();
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);
162   if (isEdition)
163     {
164       menu.addSeparator();
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);
170
171       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
172       SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
173       if(sin && !sin->isValid())
174         {
175           menu.addSeparator();
176           menu.addAction(gmain->_getErrorReportAct);
177           menu.addAction(gmain->_getErrorDetailsAct);
178         }
179     }
180   else
181     {
182       menu.addAction(gmain->_getErrorReportAct);
183       menu.addAction(gmain->_getErrorDetailsAct);
184     }
185   menu.exec(globalPos);
186 }
187
188 //=======================================================================================
189
190 ProcMenu::ProcMenu() : MenusBase()
191 {
192 }
193
194 ProcMenu::~ProcMenu()
195 {
196 }
197
198 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
199 {
200   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
201   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
202   QMenu menu(m, caller);
203   addHeader(menu, m);
204   QActionGroup actgroup(this);
205   if (isEdition)
206     {
207       menu.addAction(gmain->_runLoadedSchemaAct);
208       menu.addSeparator();
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);
232       menu.addSeparator();
233       menu.addAction(gmain->_pasteItemAct);
234       menu.addSeparator();
235     }
236   menu.addAction(gmain->_getYacsContainerLogAct);
237   menu.addSeparator();
238   menu.addAction(gmain->_showAllLinksAct);
239   menu.addAction(gmain->_hideAllLinksAct);
240   menu.addAction(gmain->_deEmphasizeAllAct);
241   menu.addSeparator();
242 //   menu.addAction(gmain->_toggleSceneItemVisibleAct);
243   menu.addAction(gmain->_arrangeLocalNodesAct);
244   menu.addAction(gmain->_arrangeRecurseNodesAct);
245   menu.addSeparator();
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);
253   if (!isEdition)
254     {
255       menu.addAction(gmain->_getErrorReportAct);
256       menu.addAction(gmain->_getErrorDetailsAct);
257       menu.addAction(gmain->_shutdownProcAct);
258     }
259   menu.exec(globalPos);
260 }
261
262 //=======================================================================================
263
264 NodeMenu::NodeMenu() : MenusBase()
265 {
266 }
267
268 NodeMenu::~NodeMenu()
269 {
270 }
271
272 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
273 {
274   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
275   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
276   QMenu menu(m, caller);
277   addHeader(menu, m);
278   if (isEdition)
279     {
280       menu.addAction(gmain->_deleteItemAct);
281       menu.addAction(gmain->_cutItemAct);
282       menu.addAction(gmain->_copyItemAct);
283       menu.addAction(gmain->_pasteItemAct);
284     }
285   menu.addSeparator();
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);
291   menu.addSeparator();
292   menu.addAction(gmain->_zoomToBlocAct);
293   menu.addAction(gmain->_centerOnNodeAct);
294   menu.exec(globalPos);
295 }
296
297 //=======================================================================================
298
299 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
300 {
301 }
302
303 HeaderNodeMenu::~HeaderNodeMenu()
304 {
305 }
306
307 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
308 {
309   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
310   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
311   QMenu menu(m, caller);
312   addHeader(menu, m);
313   if (isEdition)
314     {
315       menu.addAction(gmain->_deleteItemAct);
316     }
317   menu.exec(globalPos);
318 }
319
320 //=======================================================================================
321
322 LinkMenu::LinkMenu() : MenusBase()
323 {
324 }
325
326 LinkMenu::~LinkMenu()
327 {
328 }
329
330 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
331 {
332   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
333   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
334   QMenu menu(m, caller);
335   addHeader(menu, m);
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);
341   if (isEdition)
342     {
343       menu.addSeparator();
344       menu.addAction(gmain->_deleteItemAct);
345     }
346   menu.exec(globalPos);
347 }
348
349 //=======================================================================================
350
351 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
352 {
353 }
354
355 ElementaryNodeMenu::~ElementaryNodeMenu()
356 {
357 }
358
359 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
360 {
361   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
362   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
363   QMenu menu(m, caller);
364   addHeader(menu, m);
365   if (isEdition)
366     {
367 //       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
368 //       SubjectServiceNode *ssn = dynamic_cast<SubjectServiceNode*>(sub);
369 //       if (ssn)
370 //         {
371 //           menu.addAction(gmain->_newContainerAct);
372 //           menu.addSeparator();
373 //         }
374       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
375       SubjectNode *sin = dynamic_cast<SubjectNode*>(sub);
376       if(sin && !sin->isValid())
377         {
378           menu.addAction(gmain->_getErrorReportAct);
379           menu.addSeparator();
380         }
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);
386     }
387   else
388     {
389       menu.addAction(gmain->_getErrorReportAct);
390       menu.addAction(gmain->_getErrorDetailsAct);
391       menu.addAction(gmain->_getContainerLogAct);
392     }
393   menu.addSeparator();
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);
399   menu.addSeparator();
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);
406 }
407
408 //=======================================================================================
409
410 InPortMenu::InPortMenu() : MenusBase()
411 {
412 }
413
414 InPortMenu::~InPortMenu()
415 {
416 }
417
418 void InPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
419 {
420   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
421   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
422   QMenu menu(m, caller);
423   addHeader(menu, m);
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);
429   if (isEdition)
430     {
431       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
432       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
433       Node *parent = 0;
434       if (sdp) parent = sdp->getPort()->getNode();
435       if (parent)
436         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
437           {
438             menu.addSeparator();
439             menu.addAction(gmain->_deleteItemAct);
440           }
441     }
442   menu.exec(globalPos);
443 }
444
445 //=======================================================================================
446
447 OutPortMenu::OutPortMenu() : MenusBase()
448 {
449 }
450
451 OutPortMenu::~OutPortMenu()
452 {
453 }
454
455 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
456 {
457   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
458   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
459   QMenu menu(m, caller);
460   addHeader(menu, m);
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);
466   if (isEdition)
467     {
468       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
469       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
470       Node *parent = 0;
471       if (sdp) parent = sdp->getPort()->getNode();
472       if (parent)
473         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
474           {
475             menu.addSeparator();
476             menu.addAction(gmain->_deleteItemAct);
477           }
478     }
479   menu.exec(globalPos);
480 }
481
482 //=======================================================================================
483
484 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
485 {
486 }
487
488 CtrlInPortMenu::~CtrlInPortMenu()
489 {
490 }
491
492 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
493 {
494   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
495   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
496   QMenu menu(m, caller);
497   addHeader(menu, m);
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);
503   if (isEdition)
504     {
505       //menu.addSeparator();
506       //menu.addAction(gmain->_deleteItemAct);
507     }
508   menu.exec(globalPos);
509 }
510
511 //=======================================================================================
512
513 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
514 {
515 }
516
517 CtrlOutPortMenu::~CtrlOutPortMenu()
518 {
519 }
520
521 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
522 {
523   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
524   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
525   QMenu menu(m, caller);
526   addHeader(menu, m);
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);
532   if (isEdition)
533     {
534       //menu.addSeparator();
535       //menu.addAction(gmain->_deleteItemAct);
536     }
537   menu.exec(globalPos);
538 }
539
540 //=======================================================================================
541
542 ReferenceMenu::ReferenceMenu() : MenusBase()
543 {
544 }
545
546 ReferenceMenu::~ReferenceMenu()
547 {
548 }
549
550 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
551 {
552   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
553   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
554   QMenu menu(m, caller);
555   addHeader(menu, m);
556   menu.addAction(gmain->_selectReferenceAct);
557   menu.exec(globalPos);
558 }
559
560 //=======================================================================================
561
562 ContainerDirMenu::ContainerDirMenu() : MenusBase()
563 {
564 }
565
566 ContainerDirMenu::~ContainerDirMenu()
567 {
568 }
569
570 void ContainerDirMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
571 {
572   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
573   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
574   QMenu menu(m, caller);
575   addHeader(menu, m);
576   if (isEdition)
577     {
578       menu.addAction(gmain->_newContainerAct);
579     }
580   menu.exec(globalPos);
581 }
582
583 //=======================================================================================
584
585 ComponentInstanceMenu::ComponentInstanceMenu() : MenusBase()
586 {
587 }
588
589 ComponentInstanceMenu::~ComponentInstanceMenu()
590 {
591 }
592
593 void ComponentInstanceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
594 {
595   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
596   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
597   QMenu menu(m, caller);
598   addHeader(menu, m);
599   if (isEdition)
600     {
601       menu.addAction(gmain->_selectComponentInstanceAct);
602       menu.addAction(gmain->_newSalomeComponentAct);
603     }
604   menu.exec(globalPos);
605 }
606
607 //=======================================================================================
608
609 ContainerMenu::ContainerMenu() : MenusBase()
610 {
611 }
612
613 ContainerMenu::~ContainerMenu()
614 {
615 }
616
617 void ContainerMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
618 {
619   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
620   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
621   QMenu menu(m, caller);
622   addHeader(menu, m);
623   if (isEdition)
624     {
625       menu.addAction(gmain->_deleteItemAct);
626     }
627   menu.exec(globalPos);
628 }
629