Salome HOME
c1cdaf93ae36b7660b26f5991e65967c6b87412b
[modules/yacs.git] / src / genericgui / Menus.cxx
1 //  Copyright (C) 2006-2008  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 #include "Menus.hxx"
20 #include "QtGuiContext.hxx"
21 #include "guiObservers.hxx"
22 #include "DataPort.hxx"
23 #include "DataNode.hxx"
24 #include "InlineNode.hxx"
25
26 #include <QMenu>
27
28 //#define _DEVDEBUG_
29 #include "YacsTrace.hxx"
30
31 using namespace std;
32 using namespace YACS::HMI;
33 using namespace YACS::ENGINE;
34
35 //=======================================================================================
36
37 MenusBase::MenusBase()
38 {
39   _dummyAct = new QAction(tr("No Action"), this);
40 //   _dummyAct->setShortcut(tr("Ctrl+y"));
41   _dummyAct->setStatusTip(tr("This is just the title"));
42   _dummyAct->setToolTip(tr("the menu title"));
43   connect(_dummyAct, SIGNAL(triggered()), this, SLOT(dummyAction()));
44 }
45
46 MenusBase::~MenusBase()
47 {
48 }
49
50 void MenusBase::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
51 {
52   QMenu menu(m, caller);
53   menu.addAction(_dummyAct);
54   menu.exec(globalPos);
55 }
56
57 void MenusBase::dummyAction()
58 {
59   DEBTRACE("MenusBase::dummyAction");
60 }
61
62 void MenusBase::addHeader(QMenu &m, const QString &h)
63 {
64   m.addAction(_dummyAct);
65   _dummyAct->setText(h);
66   QFont f = _dummyAct->font();
67   f.setBold(true);
68   _dummyAct->setFont(f);
69   m.addSeparator();
70 }
71
72 //=======================================================================================
73
74 ComposedNodeMenu::ComposedNodeMenu() : MenusBase()
75 {
76 }
77
78 ComposedNodeMenu::~ComposedNodeMenu()
79 {
80 }
81
82 void ComposedNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
83 {
84   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
85   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
86   QMenu menu(m, caller);
87   addHeader(menu, m);
88   if (isEdition)
89     {
90       QMenu *CNmenu = menu.addMenu(tr("Create Node"));
91       CNmenu->addAction(gmain->_nodeFromCatalogAct);
92       //   CNmenu->addSeparator();
93       //   CNmenu->addAction(gmain->_cppNodeAct);
94       //   CNmenu->addAction(gmain->_XMLNodeAct);
95       CNmenu->addSeparator();
96       CNmenu->addAction(gmain->_inlineScriptNodeAct);
97       CNmenu->addAction(gmain->_inlineFunctionNodeAct);
98       CNmenu->addSeparator();
99       CNmenu->addAction(gmain->_inDataNodeAct);
100       CNmenu->addAction(gmain->_outDataNodeAct);
101       CNmenu->addAction(gmain->_inStudyNodeAct);
102       CNmenu->addAction(gmain->_outStudyNodeAct);
103       CNmenu->addSeparator();
104       CNmenu->addAction(gmain->_blockNodeAct);
105       CNmenu->addSeparator();
106       CNmenu->addAction(gmain->_FORNodeAct);
107       CNmenu->addAction(gmain->_FOREACHNodeAct);
108       CNmenu->addAction(gmain->_WHILENodeAct);
109       CNmenu->addAction(gmain->_SWITCHNodeAct);
110       menu.addSeparator();
111     }
112   menu.addAction(gmain->_toggleSceneItemVisibleAct);
113   menu.addAction(gmain->_arrangeLocalNodesAct);
114   menu.addAction(gmain->_arrangeRecurseNodesAct);
115   menu.addSeparator();
116   menu.addAction(gmain->_computeLinkAct);
117   menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
118   menu.addAction(gmain->_toggleSimplifyLinkAct);
119   menu.addAction(gmain->_toggleForce2NodesLinkAct);
120   if (isEdition)
121     {
122       menu.addSeparator();
123       menu.addAction(gmain->_deleteItemAct);
124       menu.addAction(gmain->_cutItemAct);
125       menu.addAction(gmain->_copyItemAct);
126       menu.addAction(gmain->_pasteItemAct);
127     }
128   menu.exec(globalPos);
129 }
130
131 //=======================================================================================
132
133 ProcMenu::ProcMenu() : MenusBase()
134 {
135 }
136
137 ProcMenu::~ProcMenu()
138 {
139 }
140
141 void ProcMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
142 {
143   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
144   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
145   QMenu menu(m, caller);
146   addHeader(menu, m);
147   if (isEdition)
148     {
149       menu.addAction(gmain->_runLoadedSchemaAct);
150       menu.addSeparator();
151       menu.addAction(gmain->_importDataTypeAct);
152       menu.addAction(gmain->_newContainerAct);
153       QMenu *CNmenu = menu.addMenu(tr("Create Node"));
154       CNmenu->addAction(gmain->_nodeFromCatalogAct);
155       //   CNmenu->addSeparator();
156       //   CNmenu->addAction(gmain->_cppNodeAct);
157       //   CNmenu->addAction(gmain->_XMLNodeAct);
158       CNmenu->addSeparator();
159       CNmenu->addAction(gmain->_inlineScriptNodeAct);
160       CNmenu->addAction(gmain->_inlineFunctionNodeAct);
161       CNmenu->addSeparator();
162       CNmenu->addAction(gmain->_inDataNodeAct);
163       CNmenu->addAction(gmain->_outDataNodeAct);
164       CNmenu->addAction(gmain->_inStudyNodeAct);
165       CNmenu->addAction(gmain->_outStudyNodeAct);
166       CNmenu->addSeparator();
167       CNmenu->addAction(gmain->_blockNodeAct);
168       CNmenu->addSeparator();
169       CNmenu->addAction(gmain->_FORNodeAct);
170       CNmenu->addAction(gmain->_FOREACHNodeAct);
171       CNmenu->addAction(gmain->_WHILENodeAct);
172       CNmenu->addAction(gmain->_SWITCHNodeAct);
173       menu.addSeparator();
174       menu.addAction(gmain->_pasteItemAct);
175       menu.addSeparator();
176     }
177   menu.addAction(gmain->_getYacsContainerLogAct);
178   menu.addSeparator();
179   menu.addAction(gmain->_toggleSceneItemVisibleAct);
180   menu.addAction(gmain->_arrangeLocalNodesAct);
181   menu.addAction(gmain->_arrangeRecurseNodesAct);
182   menu.addSeparator();
183   menu.addAction(gmain->_computeLinkAct);
184   menu.addAction(gmain->_toggleAutomaticComputeLinkAct);
185   menu.addAction(gmain->_toggleSimplifyLinkAct);
186   menu.addAction(gmain->_toggleForce2NodesLinkAct);
187   menu.exec(globalPos);
188 }
189
190
191 //=======================================================================================
192
193 NodeMenu::NodeMenu() : MenusBase()
194 {
195 }
196
197 NodeMenu::~NodeMenu()
198 {
199 }
200
201 void NodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
202 {
203   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
204   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
205   QMenu menu(m, caller);
206   addHeader(menu, m);
207   if (isEdition)
208     {
209       menu.addAction(gmain->_deleteItemAct);
210       menu.addAction(gmain->_cutItemAct);
211       menu.addAction(gmain->_copyItemAct);
212       menu.addAction(gmain->_pasteItemAct);
213     }
214   menu.exec(globalPos);
215 }
216
217 //=======================================================================================
218
219 HeaderNodeMenu::HeaderNodeMenu() : MenusBase()
220 {
221 }
222
223 HeaderNodeMenu::~HeaderNodeMenu()
224 {
225 }
226
227 void HeaderNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
228 {
229   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
230   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
231   QMenu menu(m, caller);
232   addHeader(menu, m);
233   if (isEdition)
234     {
235       menu.addAction(gmain->_deleteItemAct);
236     }
237   menu.exec(globalPos);
238 }
239
240 //=======================================================================================
241
242 LinkMenu::LinkMenu() : MenusBase()
243 {
244 }
245
246 LinkMenu::~LinkMenu()
247 {
248 }
249
250 void LinkMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
251 {
252   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
253   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
254   QMenu menu(m, caller);
255   addHeader(menu, m);
256   if (isEdition)
257     {
258       menu.addAction(gmain->_deleteItemAct);
259     }
260   menu.exec(globalPos);
261 }
262
263 //=======================================================================================
264
265 ElementaryNodeMenu::ElementaryNodeMenu() : MenusBase()
266 {
267 }
268
269 ElementaryNodeMenu::~ElementaryNodeMenu()
270 {
271 }
272
273 void ElementaryNodeMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
274 {
275   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
276   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
277   QMenu menu(m, caller);
278   addHeader(menu, m);
279   if (isEdition)
280     {
281       menu.addAction(gmain->_deleteItemAct);
282       menu.addAction(gmain->_cutItemAct);
283       menu.addAction(gmain->_copyItemAct);
284       menu.addAction(gmain->_pasteItemAct);
285     }
286   else
287     {
288       menu.addAction(gmain->_getErrorReportAct);
289       menu.addAction(gmain->_getErrorDetailsAct);
290       menu.addAction(gmain->_getContainerLogAct);
291     }
292   menu.addSeparator();
293   menu.addAction(gmain->_toggleSceneItemVisibleAct);
294   menu.exec(globalPos);
295 }
296
297 //=======================================================================================
298
299 InPortMenu::InPortMenu() : MenusBase()
300 {
301 }
302
303 InPortMenu::~InPortMenu()
304 {
305 }
306
307 void InPortMenu::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       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
316       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
317       Node *parent = 0;
318       if (sdp) parent = sdp->getPort()->getNode();
319       if (parent)
320         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
321           menu.addAction(gmain->_deleteItemAct);
322     }
323   menu.exec(globalPos);
324 }
325
326 //=======================================================================================
327
328 OutPortMenu::OutPortMenu() : MenusBase()
329 {
330 }
331
332 OutPortMenu::~OutPortMenu()
333 {
334 }
335
336 void OutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
337 {
338   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
339   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
340   QMenu menu(m, caller);
341   addHeader(menu, m);
342   if (isEdition)
343     {
344       Subject* sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
345       SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
346       Node *parent = 0;
347       if (sdp) parent = sdp->getPort()->getNode();
348       if (parent)
349         if (dynamic_cast<DataNode*>(parent) || dynamic_cast<InlineNode*>(parent))
350           menu.addAction(gmain->_deleteItemAct);
351     }
352   menu.exec(globalPos);
353 }
354
355 //=======================================================================================
356
357 CtrlInPortMenu::CtrlInPortMenu() : MenusBase()
358 {
359 }
360
361 CtrlInPortMenu::~CtrlInPortMenu()
362 {
363 }
364
365 void CtrlInPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
366 {
367   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
368   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
369   QMenu menu(m, caller);
370   addHeader(menu, m);
371   if (isEdition)
372     {
373       //menu.addAction(gmain->_deleteItemAct);
374     }
375   menu.exec(globalPos);
376 }
377
378 //=======================================================================================
379
380 CtrlOutPortMenu::CtrlOutPortMenu() : MenusBase()
381 {
382 }
383
384 CtrlOutPortMenu::~CtrlOutPortMenu()
385 {
386 }
387
388 void CtrlOutPortMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
389 {
390   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
391   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
392   QMenu menu(m, caller);
393   addHeader(menu, m);
394   if (isEdition)
395     {
396       //menu.addAction(gmain->_deleteItemAct);
397     }
398   menu.exec(globalPos);
399 }
400
401 //=======================================================================================
402
403 ReferenceMenu::ReferenceMenu() : MenusBase()
404 {
405 }
406
407 ReferenceMenu::~ReferenceMenu()
408 {
409 }
410
411 void ReferenceMenu::popupMenu(QWidget *caller, const QPoint &globalPos, const QString& m)
412 {
413   GenericGui *gmain = QtGuiContext::getQtCurrent()->getGMain();
414   bool isEdition = QtGuiContext::getQtCurrent()->isEdition();
415   QMenu menu(m, caller);
416   addHeader(menu, m);
417   menu.addAction(gmain->_selectReferenceAct);
418   menu.exec(globalPos);
419 }
420