Developer Documentation
MenuBar.cc
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openflipper.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenFlipper. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41 
42 
43 
44 
45 
46 //=============================================================================
47 //
48 // CLASS CoreWidget - IMPLEMENTATION
49 //
50 //=============================================================================
51 
52 
53 //== INCLUDES =================================================================
54 
55 #include "CoreWidget.hh"
56 
57 //== IMPLEMENTATION ==========================================================
58 
59 
60 
61 void CoreWidget::slotAddMenubarAction( QAction* _action , QString _name ) {
62 
63  if (!menus_.contains(_name))
64  return;
65 
66  if (_name == FILEMENU) {
67  fileMenu_->insertSeparator(fileMenuEnd_);
68  fileMenu_->insertAction(fileMenuEnd_, _action);
69  } else if (_name == ALGORITHMMENU) {
70 
71  // We insert the algorithms menu if it is not available yet
72  if ( menuBar()->actions().contains(helpMenu_->menuAction()) )
73  menuBar()->insertMenu(helpMenu_->menuAction(), algorithmMenu_);
74 
75  menus_[_name]->addAction(_action);
76  } else {
77  menus_[_name]->addAction(_action);
78  }
79 
80 }
81 
82 void CoreWidget::slotAddMenubarActions( std::vector<QAction*> _actions , QString _name ) {
83 
84  if (!menus_.contains(_name))
85  return;
86 
87  if (_name == FILEMENU) {
88  fileMenu_->insertSeparator(fileMenuEnd_);
89  for (std::vector<QAction*>::iterator it = _actions.begin(); it != _actions.end(); ++it )
90  fileMenu_->insertAction(fileMenuEnd_, *it);
91  } else if (_name == ALGORITHMMENU) {
92 
93  // We insert the algorithms menu if it is not available yet
94  if ( menuBar()->actions().contains(helpMenu_->menuAction()) )
95  menuBar()->insertMenu(helpMenu_->menuAction(), algorithmMenu_);
96 
97  for (std::vector<QAction*>::iterator it = _actions.begin(); it != _actions.end(); ++it )
98  menus_[_name]->addAction(*it);
99  } else {
100  for (std::vector<QAction*>::iterator it = _actions.begin(); it != _actions.end(); ++it )
101  menus_[_name]->addAction(*it);
102  }
103 
104 }
105 
106 //=============================================================================
107 
108 void CoreWidget::slotGetMenubarMenu (QString _name, QMenu *& _menu, bool _create)
109 {
110  //if menu already exists, return it
111  if (menus_.contains (_name))
112  _menu = menus_[_name];
113  //otherwise create a new one
114  else if (_create)
115  {
116  _menu = new QMenu(_name);
117  menus_[_name] = _menu;
118  //we have to install an event filter to get event information (e.g. what this)
119  _menu->installEventFilter(this);
120  //guarantee that helpMenu_ is always at the end of all menus
121  menuBar()->insertAction(helpMenu_->menuAction() ,_menu->menuAction ());
122  }
123  //otherwise no menu was found
124  else
125  _menu = NULL;
126 }
127 
128 
129 //=============================================================================
130 
131 bool CoreWidget::eventFilter(QObject *_obj, QEvent *_event)
132 {
133  //WhatsThisClicked event for hyperlinks in 'whats this' boxes
134  if( _event->type() == QEvent::WhatsThisClicked )
135  {
136  QWhatsThisClickedEvent *wtcEvent = static_cast<QWhatsThisClickedEvent*>(_event);
137  QWhatsThis::hideText();
138  this->showHelpBrowser(wtcEvent->href());
139  return true;
140  }
141 
142  return _obj->event(_event);
143 }
144 
145 //=============================================================================
146 
147 void CoreWidget::showReducedMenuBar(bool reduced) {
148  for (std::vector<QAction*>::iterator it = extended_actions.begin(); it != extended_actions.end(); ++it) {
149  (*it)->setVisible(!reduced);
150  }
151 }
152 
154 {
155 
156  // ======================================================================
157  // File Menu
158  // ======================================================================
159  fileMenu_ = new QMenu( FILEMENU );
160  menuBar()->addMenu( fileMenu_ );
161  menus_[tr("File")] = fileMenu_;
162 
163  //Clear all
164  QAction* AC_clear_all = new QAction(tr("Clear All"), this);;
165  AC_clear_all->setStatusTip(tr("Clear all Objects"));
166  AC_clear_all->setWhatsThis(tr("Close all open Objects"));
167  AC_clear_all->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-clear.png"));
168  connect(AC_clear_all, SIGNAL(triggered()), this, SIGNAL(clearAll()));
169  fileMenu_->addAction(AC_clear_all);
170 
171  fileMenu_->addSeparator();
172 
173  //Load object
174  QAction* AC_Load = new QAction(tr("Load Object"), this);
175  AC_Load->setStatusTip(tr("Load an object"));
176  AC_Load->setWhatsThis(tr("Load a new object"));
177  AC_Load->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"document-open.png"));
178  connect(AC_Load, SIGNAL(triggered()), this, SIGNAL(loadMenu()));
179  fileMenu_->addAction(AC_Load);
180 
181  //Add empty object
182  QAction* AC_AddEmpty = new QAction(tr("Add Empty Object"), this);
183  AC_AddEmpty->setStatusTip(tr("Add an empty object"));
184  AC_AddEmpty->setWhatsThis(tr("Creates a new empty object of a given type"));
185  AC_AddEmpty->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"add-empty-object.png"));
186  connect(AC_AddEmpty, SIGNAL(triggered()), this, SIGNAL(addEmptyObjectMenu()));
187  fileMenu_->addAction(AC_AddEmpty);
188  extended_actions.push_back(AC_AddEmpty);
189  extended_actions.push_back(fileMenu_->addSeparator());
190 
191  //Save object
192  QAction* AC_Save = new QAction(tr("Save Objects"), this);
193 // AC_Save->setShortcut (Qt::CTRL + Qt::Key_S);
194  AC_Save->setStatusTip(tr("Save current objects"));
195  AC_Save->setWhatsThis(tr("Save current objects"));
196  AC_Save->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"document-save.png"));
197  connect(AC_Save, SIGNAL(triggered()), this, SIGNAL(saveMenu()));
198  fileMenu_->addAction(AC_Save);
199  extended_actions.push_back(AC_Save);
200 
201  //Save object to
202  QAction* AC_Save_to = new QAction(tr("Save Objects to"), this);
203  AC_Save_to->setStatusTip(tr("Save current Object(s) to"));
204  AC_Save_to->setWhatsThis(tr("Save current Object(s) under a new name"));
205  AC_Save_to->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"document-save-as.png"));
206  connect(AC_Save_to, SIGNAL(triggered()), this, SIGNAL(saveToMenu()));
207  fileMenu_->addAction(AC_Save_to);
208 
209  extended_actions.push_back(fileMenu_->addSeparator());
210 
211  //Load ini
212  QAction* AC_load_ini = new QAction(tr("Load Settings"), this);
213  AC_load_ini->setStatusTip(tr("Load Settings from INI file"));
214  AC_load_ini->setWhatsThis(tr("Load a previous settings from file (objects,colors,...)"));
215  AC_load_ini->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"load-settings.png"));
216  connect(AC_load_ini, SIGNAL(triggered()), this, SIGNAL(loadIniMenu()));
217  fileMenu_->addAction(AC_load_ini);
218  extended_actions.push_back(AC_load_ini);
219 
220  //Save ini
221  QAction* AC_save_ini = new QAction(tr("Save Settings"), this);
222  AC_save_ini->setStatusTip(tr("Save current settings to INI file"));
223  AC_save_ini->setWhatsThis(tr("Save settings to file (objects,colors,...)"));
224  AC_save_ini->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"save-settings.png"));
225  connect(AC_save_ini, SIGNAL(triggered()), this, SIGNAL(saveIniMenu()));
226  fileMenu_->addAction(AC_save_ini);
227  extended_actions.push_back(AC_save_ini);
228 
229  extended_actions.push_back(fileMenu_->addSeparator());
230 
231  //Options
232  QAction* AC_Options = new QAction(tr("Options"), this);
233  AC_Options->setStatusTip(tr("Edit OpenFlipper Options"));
234  AC_Options->setWhatsThis(tr("Edit OpenFlipper Options"));
235  AC_Options->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"options.png"));
236  connect(AC_Options, SIGNAL(triggered()), this, SLOT(showOptionsWidget()));
237  fileMenu_->addAction(AC_Options);
238 
239  //Remember entry of menu (required for adding File Menu entries from plugins)
240  fileMenuEnd_ = fileMenu_->addSeparator();
241 
242  //Recent files
243  recentFilesMenu_ = new QMenu(tr("Recent Files"));
244  recentFilesMenu_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"document-open-recent.png"));
245  recentFilesMenu_->setWhatsThis(tr("Open recent files"));
246  connect(recentFilesMenu_,SIGNAL(triggered(QAction*)),this,SIGNAL(recentOpen(QAction*)));
247  fileMenu_->addMenu(recentFilesMenu_);
248 
249  fileMenu_->addSeparator();
250 
251  //Main Application exit menu entry
252  QAction* AC_exit = new QAction(tr("Exit"), this);;
253  AC_exit->setShortcut (Qt::CTRL + Qt::Key_Q);
254  AC_exit->setStatusTip(tr("Exit Application"));
255  recentFilesMenu_->setWhatsThis(tr("Close OpenFlipper"));
256  AC_exit->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"application-exit.png"));
257  connect(AC_exit, SIGNAL(triggered()), this, SIGNAL(exit()));
258  fileMenu_->addAction(AC_exit);
259 
260  // ======================================================================
261  // View Menu
262  // ======================================================================
263  viewMenu_ = new QMenu( VIEWMENU );
264  menuBar()->addMenu(viewMenu_ );
265  menus_[tr("View")] = viewMenu_;
266 
268  extended_actions.push_back(
269  viewMenu_->addMenu(globalDrawMenu_));
270 
271  //============================================================================================================
272  // Rendering options Menu
273  //============================================================================================================
274 
275  QMenu* renderingOptionsMenu = new QMenu(tr("Global Rendering Options"),viewMenu_);
276  renderingOptionsMenu->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"core_renderingOptions.png") );
277  extended_actions.push_back(
278  viewMenu_->addMenu(renderingOptionsMenu));
279 
280  orthogonalProjectionAction_ = new QAction( tr("Switch Viewers to Orthogonal Projection"), renderingOptionsMenu );;
281  orthogonalProjectionAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"orthogonal.png") );
282  orthogonalProjectionAction_->setCheckable( false );
283  orthogonalProjectionAction_->setToolTip( tr("Switch to orthogonal projection mode."));
284  orthogonalProjectionAction_->setWhatsThis( tr("Switch projection mode<br><br>"
285  "Switch to <b>orthogonal</b> projection mode."));
286  connect( orthogonalProjectionAction_,SIGNAL( triggered() ), this, SLOT( slotGlobalOrthographicProjection() ) );
287  renderingOptionsMenu->addAction( orthogonalProjectionAction_);
288 
289  perspectiveProjectionAction_ = new QAction( tr("Switch Viewers to Perspective Projection"), viewMenu_ );;
290  perspectiveProjectionAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"perspective.png") );
291  perspectiveProjectionAction_->setCheckable( false );
292  perspectiveProjectionAction_->setStatusTip( tr("Switch to perspective projection mode."));
293  perspectiveProjectionAction_->setWhatsThis( tr("Switch projection mode<br><br>"
294  "Switch to <b>perspective</b> projection mode."));
295  connect( perspectiveProjectionAction_,SIGNAL( triggered() ), this, SLOT( slotGlobalPerspectiveProjection() ) );
296  renderingOptionsMenu->addAction( perspectiveProjectionAction_);
297 
298  // =====================
299 
300  globalAnimationAction_ = renderingOptionsMenu->addAction(tr("Global Animation"));
301  globalAnimationAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"animation.png") );
302  connect(globalAnimationAction_, SIGNAL(triggered(bool)), this , SLOT( slotGlobalToggleAnimation() ) );
303 
304  //======================
305 
306  globalBackfaceCullingAction_ = renderingOptionsMenu->addAction(tr("Global Backface Culling"));
307  globalBackfaceCullingAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"backFaceCulling.png") );
308  connect(globalBackfaceCullingAction_, SIGNAL(triggered(bool)), this , SLOT( slotGlobalToggleBackFaceCulling() ) );
309 
310  //======================
311 
312  globalTwosidedLightingAction_ = renderingOptionsMenu->addAction(tr("Global Two-sided Lighting"));
313  globalTwosidedLightingAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"twosidedLighting.png") );
314  connect(globalTwosidedLightingAction_, SIGNAL(triggered(bool)), this , SLOT( slotGlobalToggleTwoSidedLighting() ) );
315 
316  //======================
317 
318  globalMultisamplingAction_ = renderingOptionsMenu->addAction(tr("Global Multisampling"));
319  globalMultisamplingAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"multisampling.png") );
320  connect(globalMultisamplingAction_, SIGNAL(triggered(bool)), this , SLOT( slotGlobalToggleMultisampling()) );
321  //======================
322 
323  globalMipmappingAction_ = renderingOptionsMenu->addAction(tr("Global Mipmapping"));
324  globalMipmappingAction_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"mipmapping.png") );
325  connect(globalMipmappingAction_, SIGNAL(triggered(bool)), this , SLOT( slotGlobalToggleMipmapping()) );
326 
327 
328  //============================================================================================================
329  // Global renderer menu
330  //============================================================================================================
331 
333 
334  //============================================================================================================
335  // Other toplevel actions
336  //============================================================================================================
337 
338  viewMenu_->addSeparator();
339 
340  //============================================================================================================
341  // Post processor Manager
342  //============================================================================================================
343 
344  QString iconPath = OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator();
345  QAction* showPostProcessorDialog = new QAction(tr("Show post processor manager"),this);
346  showPostProcessorDialog->setIcon(QIcon(iconPath+"postprocessors.png"));
347  connect(showPostProcessorDialog,SIGNAL(triggered()),this,SLOT(slotShowPostProcessorManager()));
348  viewMenu_->addAction(showPostProcessorDialog);
349 
350  viewMenu_->addSeparator();
351 
352  //====================================================================================================
353 
354 
355  QAction* navigationSwitchAction = new QAction( tr("First-person Navigation"), viewMenu_ );
356  navigationSwitchAction->setCheckable( true );
357  navigationSwitchAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"core_firstPersonMode.png") );
358  navigationSwitchAction->setStatusTip( tr("Switch between normal and first-person navigation mode."));
359  navigationSwitchAction->setWhatsThis( tr("Switch between normal and first-person navigation mode."));
360  navigationSwitchAction->setChecked( false );
361 
362  connect( navigationSwitchAction, SIGNAL( toggled(bool) ), this, SLOT( slotSwitchNavigation(bool) ) );
363  viewMenu_->addAction( navigationSwitchAction);
364  extended_actions.push_back(navigationSwitchAction);
365 
366  viewMenu_->addSeparator();
367 
368  connect( viewMenu_,SIGNAL( aboutToShow() ), this, SLOT( slotViewMenuAboutToShow() ) );
369 
370  QAction* homeAction = new QAction(tr("Restore Home View"),viewMenu_);
371  homeAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"go-home.png") );
372  homeAction->setCheckable( false );
373  homeAction->setStatusTip( tr("Restore <b>home</b> view."));
374  homeAction->setWhatsThis( tr("Restore home view<br><br>"
375  "Resets the view to the home view"));
376  viewMenu_->addAction( homeAction );
377  connect( homeAction,SIGNAL( triggered() ), this, SLOT( slotGlobalHomeView() ) );
378 
379 
380  QAction* setHomeAction = new QAction( tr("Set Home View") , viewMenu_ );
381  setHomeAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"set-home.png") );
382  setHomeAction->setCheckable( false );
383  setHomeAction->setStatusTip( tr("Set <b>home</b> view"));
384  setHomeAction->setWhatsThis( tr("Store home view<br><br>"
385  "Stores the current view as the home view"));
386  viewMenu_->addAction( setHomeAction);
387  connect( setHomeAction,SIGNAL( triggered() ), this, SLOT( slotGlobalSetHomeView() ) );
388 
389  QAction* viewAllAction = new QAction( tr("View all"), viewMenu_ );
390  viewAllAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"viewall.png") );
391  viewAllAction->setCheckable( false );
392  viewAllAction->setStatusTip( tr("View all.") );
393  viewAllAction->setWhatsThis( tr("View all<br><br>"
394  "Move the objects in the scene so that"
395  " the whole scene is visible."));
396  connect( viewAllAction,SIGNAL( triggered() ), this, SLOT( slotGlobalViewAll() ) );
397  viewMenu_->addAction( viewAllAction);
398 
399  viewMenu_->addSeparator();
400 
401  QAction* snapShotAction = new QAction( tr("Viewer Snapshot"), viewMenu_ );
402  snapShotAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"viewerSnapshot.png") );
403  snapShotAction->setCheckable( false );
404  snapShotAction->setStatusTip( tr("Take a snapshot from all viewers."));
405  snapShotAction->setWhatsThis( tr("Viewer Snapshot<br><br>"
406  "Take a snapshot of all viewers at once."));
407  snapShotAction->setShortcut (Qt::Key_F2);
408  connect( snapShotAction,SIGNAL( triggered() ), this, SLOT( viewerSnapshotDialog() ) );
409  viewMenu_->addAction( snapShotAction);
410 
411  QAction* appSnapShotAction = new QAction( tr("Application Snapshot"), viewMenu_ );
412  appSnapShotAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"snapshot.png") );
413  appSnapShotAction->setCheckable( false );
414  appSnapShotAction->setStatusTip( tr("Take a snapshot from OpenFlipper."));
415  appSnapShotAction->setWhatsThis( tr("Snapshot<br><br>"
416  "Take a snapshot from OpenFlipper."));
417  connect( appSnapShotAction,SIGNAL( triggered() ), this, SLOT( applicationSnapshotDialog() ) );
418  viewMenu_->addAction( appSnapShotAction);
419 
420  viewMenu_->addSeparator();
421 
422  QAction* wheelSwitchAction = new QAction( tr("Show / hide wheels"), viewMenu_ );
423  wheelSwitchAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"core_wheels.png") );
424  wheelSwitchAction->setCheckable( true );
425  wheelSwitchAction->setStatusTip( tr("Show / hide navigation wheels in viewer widget."));
426  wheelSwitchAction->setWhatsThis( tr("Show / hide navigation wheels in viewer widget.<br><br>"
427  " These wheels appear in the corners of the viewports. "
428  " Use wheels to rotate and scale scene."));
429 
430  if(OpenFlipperSettings().value("Core/Gui/glViewer/showControlWheels").toBool() )
431  wheelSwitchAction->setChecked(true);
432 
433  connect( wheelSwitchAction,SIGNAL( toggled(bool) ), this, SLOT( slotSwitchWheels(bool) ) );
434  viewMenu_->addAction( wheelSwitchAction);
435 
436  QAction* coordSys = viewMenu_->addAction(tr("Coordinate Systems"));
437  coordSys->setCheckable(true);
438  coordSys->setChecked(true);
439  coordSys->setStatusTip(tr("Toggle visibility of the coordinate systems"));
440  coordSys->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"coordsys.png") );
441  connect(coordSys, SIGNAL(triggered(bool)), this, SLOT( slotCoordSysVisibility(bool) ) );
442 
443  viewMenu_->addSeparator();
444 
445  QAction* setGlobalBackgroundColor = new QAction(tr("Set Background Color"), this);;
446  setGlobalBackgroundColor->setToolTip(tr("Set Background Color for all viewers"));
447  setGlobalBackgroundColor->setStatusTip(tr("Set Background Color for all viewers"));
448  setGlobalBackgroundColor->setWhatsThis(tr("Set Background Color for all viewers"));
449  setGlobalBackgroundColor->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"BackgroundColor.png") );
450  connect(setGlobalBackgroundColor, SIGNAL(triggered()), this, SLOT(slotSetGlobalBackgroundColor()));
451  viewMenu_->addAction(setGlobalBackgroundColor);
452 
453  //===========================================================================================================================
454  // Tools Menu
455  //===========================================================================================================================
456 
457  toolsMenu_ = new QMenu( TOOLSMENU );
458  menuBar()->addMenu(toolsMenu_ );
459  menus_[tr("Tools")] = toolsMenu_;
460 
461  QAction* sceneGraphAction = new QAction( tr("Show SceneGraph ") ,toolsMenu_ );
462  sceneGraphAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"scenegraph.png") );
463  sceneGraphAction->setCheckable( false );
464  sceneGraphAction->setToolTip( tr("Show scene graph viewer.") );
465  sceneGraphAction->setWhatsThis( tr("Toggle scene graph viewer<br><br>"
466  "The scene graph viewer enables you to examine the "
467  "displayed scene graph and to modify certain nodes.<br><br>" ) );
468  QObject::connect( sceneGraphAction, SIGNAL( triggered() ),
469  this, SLOT( slotShowSceneGraphDialog() ) );
470  toolsMenu_->addAction( sceneGraphAction);
471  extended_actions.push_back(sceneGraphAction);
472 
473  toolsMenu_->addSeparator();
474 
475  QAction* startVideoCaptureAction = new QAction( tr("Start Video Capture ") ,toolsMenu_ );
476  startVideoCaptureAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"video-start.png") );
477  startVideoCaptureAction->setCheckable( false );
478  startVideoCaptureAction->setToolTip( tr("Start video capturing.") );
479  startVideoCaptureAction->setWhatsThis( tr("Start to capture a video sequence of the user actions")) ;
480  toolsMenu_->addAction( startVideoCaptureAction );
481  connect(startVideoCaptureAction, SIGNAL(triggered()), this, SLOT(startVideoCaptureDialog()) );
482 
483  QAction* stopVideoCaptureAction = new QAction( tr("Stop Video Capture ") ,toolsMenu_ );
484  stopVideoCaptureAction->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"video-stop.png") );
485  stopVideoCaptureAction->setCheckable( false );
486  stopVideoCaptureAction->setToolTip( tr("Stop video capturing." ));
487  stopVideoCaptureAction->setWhatsThis( tr("Stop Video capturing" ));
488 
489  toolsMenu_->addAction( stopVideoCaptureAction);
490  connect(stopVideoCaptureAction, SIGNAL(triggered()), this, SIGNAL(stopVideoCapture()) );
491 
492  extended_actions.push_back(startVideoCaptureAction);
493  extended_actions.push_back(stopVideoCaptureAction);
494 
495  toolsMenu_->addSeparator();
496 
497  //show plugins
498  QAction* AC_Plugins = new QAction(tr("Plugins"), this);
499  AC_Plugins->setStatusTip(tr("Show loaded plugins"));
500  AC_Plugins->setWhatsThis(tr("Show loaded plugins"));
501  AC_Plugins->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"network-connect.png"));
502  connect(AC_Plugins, SIGNAL(triggered()), this, SIGNAL(showPlugins()));
503  toolsMenu_->addAction(AC_Plugins);
504 
505  // ======================================================================
506  // Window Menu
507  // ======================================================================
508  windowMenu_ = new QMenu(tr("Windows"));
509  menuBar()->addMenu(windowMenu_);
510  menus_[tr("Windows")] = windowMenu_;
511 
512 
513  // Show or Hide the View Mode Controls
514  AC_ShowViewModeControls_ = new QAction(tr("Show View Mode Controls"), this);
515  AC_ShowViewModeControls_->setStatusTip(tr("Show or Hide View Mode Control Widget"));
516  // AC_HelpBrowser->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-browser.png"));
517  AC_ShowViewModeControls_->setWhatsThis(tr("Show or Hide View Mode Control Widget"));
518  AC_ShowViewModeControls_->setCheckable(true);
519  AC_ShowViewModeControls_->setChecked( ! OpenFlipperSettings().value("Core/Gui/TaskSwitcher/Hide",false).toBool() );
520  connect(AC_ShowViewModeControls_, SIGNAL(toggled( bool )), this, SLOT(showViewModeControls(bool)));
523 
524  // Show or Hide the View Mode Controls
525  QAction* AC_ShowToolbox = new QAction(tr("Show Toolboxes"), this);
526  AC_ShowToolbox->setStatusTip(tr("Show or Hide the Toolbox Widget"));
527  // AC_HelpBrowser->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-browser.png"));
528  AC_ShowToolbox->setWhatsThis(tr("Show or Hide the Toolbox Widget"));
529  AC_ShowToolbox->setCheckable(true);
530  AC_ShowToolbox->setChecked( ! OpenFlipperSettings().value("Core/Gui/ToolBoxes/hidden",false).toBool() );
531  connect(AC_ShowToolbox, SIGNAL( triggered()), this, SLOT(toggleToolbox()));
532  connect(this,SIGNAL(toolBoxVisChanged(bool)),AC_ShowToolbox,SLOT(setChecked(bool)));
533  windowMenu_->addAction(AC_ShowToolbox);
534 
535  // Show or Hide the Status bar
536  QAction* AC_ShowStatusBar = new QAction(tr("Show Statusbar"), this);
537  AC_ShowStatusBar->setStatusTip(tr("Show or Hide the Statusbar"));
538  AC_ShowStatusBar->setWhatsThis(tr("Show or Hide the Statusbar"));
539  AC_ShowStatusBar->setCheckable(true);
540  AC_ShowStatusBar->setChecked( !OpenFlipperSettings().value("Core/Gui/StatusBar/hidden",false).toBool());
541  connect(AC_ShowStatusBar,SIGNAL(triggered()),this,SLOT(toggleStatusBar()));
542  connect(this,SIGNAL(statusBarVisChanged(bool)),AC_ShowStatusBar,SLOT(setChecked(bool)));
543  windowMenu_->addAction(AC_ShowStatusBar);
544 
545  // Show or Hide the Menu bar
546  QAction* AC_ShowMenuBar = new QAction(tr("Show Menubar"), this);
547  AC_ShowMenuBar->setStatusTip(tr("Show or Hide the Menubar"));
548  AC_ShowMenuBar->setWhatsThis(tr("Show or Hide the Menubar"));
549  AC_ShowMenuBar->setCheckable(true);
550  AC_ShowMenuBar->setChecked( !OpenFlipperSettings().value("Core/Gui/MenuBar/hidden",false).toBool());
551  connect(AC_ShowMenuBar,SIGNAL(triggered()),this,SLOT(toggleMenuBar()));
552  connect(this,SIGNAL(menuBarVisChanged(bool)),AC_ShowMenuBar,SLOT(setChecked(bool)));
553  windowMenu_->addAction(AC_ShowMenuBar);
554  extended_actions.push_back(AC_ShowMenuBar);
555 
556  // Show or Hide the Tool bar
557  QAction* AC_ShowToolBar = new QAction(tr("Show Toolbar"), this);
558  AC_ShowToolBar->setStatusTip(tr("Show or Hide the Toolbar"));
559  AC_ShowToolBar->setWhatsThis(tr("Show or Hide the Toolbar"));
560  AC_ShowToolBar->setCheckable(true);
561  AC_ShowToolBar->setChecked( !OpenFlipperSettings().value("Core/Gui/ToolBar/hidden",false).toBool());
562  connect(AC_ShowToolBar,SIGNAL(triggered()),this,SLOT(toggleToolBar()));
563  connect(this,SIGNAL(toolBarVisChanged(bool)),AC_ShowToolBar,SLOT(setChecked(bool)));
564  windowMenu_->addAction(AC_ShowToolBar);
565 
566  // Enable or Disable Fullscreen Mode
567  QAction* AC_Fullscreen = new QAction(tr("Fullscreen"), this);
568  AC_Fullscreen->setStatusTip(tr("Enable or Disable the Fullscreen"));
569  AC_Fullscreen->setWhatsThis(tr("Enable or Disable the Fullscreen"));
570  AC_Fullscreen->setCheckable(true);
571  AC_Fullscreen->setChecked( OpenFlipperSettings().value("Core/Gui/fullscreen", false ).toBool() );
572  connect(AC_Fullscreen,SIGNAL(triggered()),this,SLOT(toggleFullscreen()));
573  connect(this,SIGNAL(fullScreenChanged(bool)),AC_Fullscreen,SLOT(setChecked(bool)));
574  windowMenu_->addAction(AC_Fullscreen);
575 
576  // ======================================================================
577  // Algorithms Menu
578  // ======================================================================
579  algorithmMenu_ = new QMenu( ALGORITHMMENU );
580  menus_[tr("Algorithms")] = algorithmMenu_;
581 
582  // ======================================================================
583  // Python Menu
584  // ======================================================================
585 #ifdef PYTHON_ENABLED
586  pythonMenu_ = new QMenu( PYTHONMENU );
587  menuBar()->addMenu(pythonMenu_ );
588  menus_[tr("Python")] = pythonMenu_;
589 
590  //Open Python Widget
591  QAction* AC_PythonWidget = new QAction(tr("Python Script"), this);
592  AC_PythonWidget->setStatusTip(tr("Open Python Script Interpreter"));
593  AC_PythonWidget->setWhatsThis(tr("Open the <b>Python Script Interpreter</b>"));
594  connect(AC_PythonWidget, SIGNAL(triggered()), this, SLOT(showPythonScriptInterpreter()));
595  pythonMenu_->addAction(AC_PythonWidget);
596 #endif
597 
598  // ======================================================================
599  // help Menu
600  // ======================================================================
601  helpMenu_ = new QMenu(tr("Help"));
602  menuBar()->addMenu(helpMenu_);
603  menus_[tr("Help")] = helpMenu_;
604 
605  //Open Help Browser
606  QAction* AC_HelpBrowser = new QAction(tr("Help"), this);
607  AC_HelpBrowser->setStatusTip(tr("Open Help Browser with Documentation"));
608  AC_HelpBrowser->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-browser.png"));
609  AC_HelpBrowser->setWhatsThis(tr("Open the <b>Help Browser</b>"));
610  connect(AC_HelpBrowser, SIGNAL(triggered()), this, SLOT(showHelpBrowser()));
611  helpMenu_->addAction(AC_HelpBrowser);
612 
613  //Switch to whats this mode
614  QAction* AC_Whats_this = QWhatsThis::createAction ( this );
615  AC_Whats_this->setStatusTip(tr("Enter What's this Mode"));
616  AC_Whats_this->setWhatsThis(tr("Get information about a specific Button/Widget/..."));
617  helpMenu_->addAction(AC_Whats_this);
618 
619  helpMenu_->addSeparator();
620 
621  //About Action
622  QAction* AC_About = new QAction(tr("About"), this);
623  AC_About->setStatusTip(tr("About OpenFlipper"));
624  AC_About->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-about.png"));
625  AC_About->setWhatsThis(tr("This entry shows information about <b>OpenFlipper</b>"));
626  connect(AC_About, SIGNAL(triggered()), this, SLOT(showAboutWidget()));
627  helpMenu_->addAction(AC_About);
628 
629  // Add Menu entries to the main Toolbar
630  mainToolbar_->addAction(AC_Load);
631  mainToolbar_->addAction(AC_AddEmpty);
632  mainToolbar_->addSeparator();
633  mainToolbar_->addAction(AC_Save);
634  mainToolbar_->addAction(AC_Save_to);
635  mainToolbar_->addSeparator();
636  mainToolbar_->addAction(AC_load_ini);
637  mainToolbar_->addAction(AC_save_ini);
638 
639 
640  // install event filters for what is this event
641  // todo: why doesn't go any event through CoreWidget::event from menus? i don't get it
642  fileMenu_->installEventFilter(this);
643  viewMenu_->installEventFilter(this);
644  toolsMenu_->installEventFilter(this);
645  windowMenu_->installEventFilter(this);
646  algorithmMenu_->installEventFilter(this);
647  helpMenu_->installEventFilter(this);
648 
649 
650 
651 
652 }
653 
654 
656 
657  uint enabledCount = 0;
658 
659  for ( int i = 0 ; i< PluginFunctions::viewers(); ++i ) {
661  enabledCount++;
662  }
663 
664  if ( enabledCount != 0 ) {
665  globalAnimationAction_->setToolTip(tr("Disable animation for all viewers"));
666  globalAnimationAction_->setStatusTip(tr("Disable animation for all viewers"));
667  globalAnimationAction_->setText(tr("Disable animation"));
668  } else {
669  globalAnimationAction_->setToolTip(tr("Enable animation for all viewers"));
670  globalAnimationAction_->setStatusTip(tr("Enable animation for all viewers"));
671  globalAnimationAction_->setText(tr("Enable animation"));
672  }
673 
674  //=============================================================================================================================
675 
676  enabledCount = 0;
677 
678  for ( int i = 0 ; i< PluginFunctions::viewers(); ++i ) {
680  enabledCount++;
681  }
682 
683  if ( enabledCount != 0 ) {
684  globalBackfaceCullingAction_->setToolTip(tr("Disable backface culling for all viewers"));
685  globalBackfaceCullingAction_->setStatusTip(tr("Disable backface culling for all viewers"));
686  globalBackfaceCullingAction_->setText(tr("Disable backface culling"));
687  } else {
688  globalBackfaceCullingAction_->setToolTip(tr("Enable backface culling for all viewers"));
689  globalBackfaceCullingAction_->setStatusTip(tr("Enable backface culling for all viewers"));
690  globalBackfaceCullingAction_->setText(tr("Enable backface culling"));
691  }
692 
693  //=============================================================================================================================
694 
695  enabledCount = 0;
696 
697  for ( int i = 0 ; i< PluginFunctions::viewers(); ++i ) {
699  enabledCount++;
700  }
701 
702  if ( enabledCount != 0 ) {
703  globalTwosidedLightingAction_->setToolTip(tr("Disable two-sided lighting for all viewers"));
704  globalTwosidedLightingAction_->setStatusTip(tr("Disable two-sided lighting for all viewers"));
705  globalTwosidedLightingAction_->setText(tr("Disable two-sided lighting"));
706  } else {
707  globalTwosidedLightingAction_->setToolTip(tr("Enable two-sided lighting for all viewers"));
708  globalTwosidedLightingAction_->setStatusTip(tr("Enable two-sided lighting for all viewers"));
709  globalTwosidedLightingAction_->setText(tr("Enable two-sided lighting"));
710  }
711 
712  //=============================================================================================================================
713 
714  enabledCount = 0;
715 
716  for ( int i = 0 ; i< PluginFunctions::viewers(); ++i ) {
718  enabledCount++;
719  }
720 
721  if ( enabledCount != 0 ) {
722  globalMultisamplingAction_->setToolTip(tr("Disable multisampling for all viewers"));
723  globalMultisamplingAction_->setStatusTip(tr("Disable multisampling for all viewers"));
724  globalMultisamplingAction_->setText(tr("Disable multisampling"));
725  } else {
726  globalMultisamplingAction_->setToolTip(tr("Enable multisampling for all viewers"));
727  globalMultisamplingAction_->setStatusTip(tr("Enable multisampling for all viewers"));
728  globalMultisamplingAction_->setText(tr("Enable multisampling"));
729  }
730 
731  //=============================================================================================================================
732 
733  enabledCount = 0;
734 
735  for ( int i = 0 ; i< PluginFunctions::viewers(); ++i ) {
737  enabledCount++;
738  }
739 
740  if ( enabledCount != 0 ) {
741  globalMipmappingAction_->setToolTip(tr("Disable mipmapping for all viewers"));
742  globalMipmappingAction_->setStatusTip(tr("Disable mipmapping for all viewers"));
743  globalMipmappingAction_->setText(tr("Disable mipmapping"));
744  } else {
745  globalMipmappingAction_->setToolTip(tr("Enable mipmapping for all viewers"));
746  globalMipmappingAction_->setStatusTip(tr("Enable mipmapping for all viewers"));
747  globalMipmappingAction_->setText(tr("Enable mipmapping"));
748  }
749 
750  //=============================================================================================================================
751 
752  int perspectiveCount = 0;
753  int orthogonalCount = 0;
754 
755  for ( int i = 0 ; i < PluginFunctions::viewers() ; ++i ) {
756  if ( examiner_widgets_[ i ]->projectionMode() == glViewer::PERSPECTIVE_PROJECTION )
757  perspectiveCount++;
758  else
759  orthogonalCount++;
760  }
761 
762  if ( perspectiveCount == PluginFunctions::viewers() )
763  perspectiveProjectionAction_->setVisible(false);
764  else
765  perspectiveProjectionAction_->setVisible(true);
766 
767  if ( orthogonalCount == PluginFunctions::viewers() )
768  orthogonalProjectionAction_->setVisible(false);
769  else
770  orthogonalProjectionAction_->setVisible(true);
771 
772 }
773 
775 
776  // Add the menu if it does not exist yet
777  if ( rendererMenu_ == 0 ) {
778 
779  QString iconPath = OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator();
780 
781  rendererMenu_ = new QMenu(tr("Global Renderer"),viewMenu_);
782  rendererMenu_->setIcon(QIcon(iconPath+"renderers.png"));
783  extended_actions.push_back(viewMenu_->addMenu(rendererMenu_));
784 
785 
786  connect(rendererMenu_,SIGNAL(aboutToShow () ) , this, SLOT(slotUpdateRendererMenu() ) );
787  }
788 
789  // delete the old renerer group if it exists
790  if ( rendererGroup_ ) {
791 
792  disconnect( rendererGroup_ , SIGNAL( triggered( QAction * ) ),
793  this , SLOT( slotGlobalRendererMenu( QAction * ) ) );
794 
795  delete( rendererGroup_ );
796  rendererGroup_ = 0;
797 
798  }
799 
800  // Recreate actionGroup
801  rendererGroup_ = new QActionGroup( this );
802  rendererGroup_->setExclusive( true );
803 
804 // // Add the options for all active renderers
805 // for ( int i = 0 ; i < PluginFunctions::viewers() ; ++i) {
806 //
807 // //Get the options action for the currently active renderer
808 // if( renderManager()[ renderManager().activeId( i )]->optionsAction != 0 ) {
809 // rendererMenu_->addAction(renderManager()[ renderManager().activeId(i) ]->optionsAction );
810 // }
811 // }
812 
813 // rendererMenu_->addSeparator();
814 
815  // Add the renderers
816  for ( unsigned int i = 0 ; i < renderManager().available() ; ++i) {
817 
818  // Add a new Action with the renderer name
819  QAction * action = new QAction( renderManager()[i]->name, rendererGroup_ );
820  action->setCheckable( true );
821 
822  // Check if this processor is currently active
823  if ( renderManager().activeId(PluginFunctions::activeExaminer() ) == i )
824  action->setChecked(true);
825 
826  // Remember the id for the processor
827  action->setData(QVariant(i));
828  }
829 
830  // Remove old data
831  rendererMenu_->clear();
832 
833  // Add render objects action
834  QAction* showRendererObjectWidget = new QAction(tr("Show render objects"), this);
835  connect(showRendererObjectWidget, SIGNAL(triggered()), this, SLOT(slotShowRenderObjectWidget()));
836  rendererMenu_->addAction(showRendererObjectWidget);
837 
838  rendererMenu_->addSeparator();
839 
840  // Add all new actions from the group to the menu
841  rendererMenu_->addActions( rendererGroup_->actions() );
842 
843  // Connect signal of group to our managing slot
844  connect( rendererGroup_ , SIGNAL( triggered( QAction * ) ),
845  this , SLOT( slotGlobalRendererMenu( QAction * ) ) );
846 
847 
848 }
849 
851  if ( drawGroup_ ) {
852 
853  disconnect( drawGroup_ , SIGNAL( triggered( QAction * ) ),
854  this , SLOT( slotGlobalDrawMenu( QAction * ) ) );
855  delete( drawGroup_ );
856  drawGroup_ = 0;
857 
858  }
859 
860  // Recreate drawGroup
861  drawGroup_ = new QActionGroup( this );
862  drawGroup_->setExclusive( false );
863 
864  connect( drawGroup_ , SIGNAL( triggered( QAction * ) ),
865  this , SLOT( slotGlobalDrawMenu( QAction * ) ) );
866 
867  if ( !globalDrawMenu_ ) {
868 
869  QIcon icon;
870  icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"drawModes.png");
871  globalDrawMenu_ = new QMenu(tr("Set Global DrawMode"));
872  globalDrawMenu_->setTearOffEnabled(true);
873  globalDrawMenu_->setIcon(icon);
874 
875  connect(globalDrawMenu_,SIGNAL(aboutToShow () ) , this, SLOT(slotUpdateGlobalDrawMenu() ) );
876  }
877 
878  // Collect available draw Modes
879  // Single pass action, draw modes independent from multipass rendering
882  availableGlobalDrawModes_ = actionAvailable.drawModes();
883 
884  // Get currently active drawModes
886  for ( int i = 1 ; i < PluginFunctions::viewers(); ++i )
888 
889  // Convert to ids
890  std::vector< ACG::SceneGraph::DrawModes::DrawMode > availDrawModeIds;
891  availDrawModeIds = availableGlobalDrawModes_.getAtomicDrawModes() ;
892 
893  globalDrawMenu_->clear();
894 
895  for ( unsigned int i = 0; i < availDrawModeIds.size(); ++i )
896  {
897  ACG::SceneGraph::DrawModes::DrawMode id = availDrawModeIds[i];
898  std::string descr = id.description();
899 
900  QAction * action = new QAction( descr.c_str(), drawGroup_ );
901  action->setCheckable( true );
902  action->setChecked( activeDrawModes_.containsAtomicDrawMode(id) );
903  }
904 
905  globalDrawMenu_->addActions( drawGroup_->actions() );
906 
907 }
908 
909 void CoreWidget::slotGlobalRendererMenu(QAction * _action) {
910 
911  unsigned int mode = _action->data().toUInt();
912 
913  QString defaultRendererName = renderManager()[mode]->name;
914 
915  // Set renderer for all viewers
916  for ( int i = 0 ; i < PluginFunctions::viewers() ; ++i)
917  {
918  renderManager().setActive(mode,i);
919  QString defaultRendererKey = "Viewer" + QString::number(i)+"/DefaultRenderer";
920  OpenFlipperSettings().setValue(defaultRendererKey,defaultRendererName);
921  }
922 
923 }
924 
926 
927  unsigned int mode = _action->data().toUInt();
928 
929  // Set postprocessor for all viewers
930  for ( int i = 0 ; i < PluginFunctions::viewers() ; ++i)
931  postProcessorManager().setActive(mode,i);
932 
933 }
934 
935 void CoreWidget::slotGlobalDrawMenu(QAction * _action) {
936 
937  //======================================================================================
938  // Get the mode toggled
939  //======================================================================================
941  std::vector< ACG::SceneGraph::DrawModes::DrawMode > availDrawModeIds;
942  availDrawModeIds = availableGlobalDrawModes_.getAtomicDrawModes();
943  for ( unsigned int i = 0; i < availDrawModeIds.size(); ++i )
944  {
945  QString descr = QString( ( availDrawModeIds[i].description() ).c_str() );
946 
947  if ( descr == _action->text() ) {
948  mode = availDrawModeIds[i];
949  break;
950  }
951  }
952 
953  if ( qApp->keyboardModifiers() & Qt::ShiftModifier )
955  else
956  activeDrawModes_ = mode ;
957 
959 }
960 
961 
962 //=============================================================================
QAction * globalMipmappingAction_
Action to globally set mipmapping.
Definition: CoreWidget.hh:896
size_t available()
number of available renderers
DLLEXPORT OpenFlipperQSettings & OpenFlipperSettings()
QSettings object containing all program settings of OpenFlipper.
void slotGlobalDrawMenu(QAction *_action)
Called when the global drawMode is selected.
Definition: MenuBar.cc:935
QMenu * helpMenu_
Help Menu.
Definition: CoreWidget.hh:698
void slotShowRenderObjectWidget()
Shows the widget containing the current render objects.
QMap< QString, QMenu * > menus_
All available menus.
Definition: CoreWidget.hh:812
#define PYTHONMENU
The Menu will be added inside the Python Menu.
void toggleFullscreen()
Set application to Fullscreen and back.
Definition: CoreWidget.cc:670
void slotGlobalToggleTwoSidedLighting()
If two-sided lighting is disabled in all viewers, enable it in all viewers. Otherwise disable it...
void toolBoxVisChanged(bool _state)
will be emitted if the visibility of the toolbox is changed
void viewerSnapshotDialog()
Create a snapshot of the whole app with fileDialog.
void slotGlobalToggleMultisampling()
If multisampling is disabled in all viewers, enable it in all viewers. Otherwise disable it...
void showAboutWidget()
Display the about widget.
Definition: About.cc:87
void showViewModeControls(bool _show)
Hide or show the View Mode controls.
Definition: CoreWidget.cc:700
void stopVideoCapture()
Stop video capturing.
Definition: Video.cc:104
void toggleStatusBar()
Change visibility of the Status Bar.
Definition: StatusBar.cc:144
QAction * globalMultisamplingAction_
Action to globally set multisampling.
Definition: CoreWidget.hh:893
unsigned int activeExaminer()
Get the id of the examiner which got the last mouse events.
void showOptionsWidget()
Display the Options Browser.
Definition: CoreWidget.cc:911
void slotGlobalToggleAnimation()
If animation is disabled in all viewers, enable it in all viewers. Otherwise disable it...
void slotUpdateGlobalDrawMenu()
Setup and update the global draw menu.
Definition: MenuBar.cc:850
QAction * globalAnimationAction_
Action to globally set animation.
Definition: CoreWidget.hh:884
void toggleToolBar()
Hide or show current toolbar.
Definition: CoreWidget.cc:811
void twoSidedLighting(bool _state)
set 2-sided lighting on/off
void showHelpBrowser(const QString &page=homePage_)
Display the help Browser.
Definition: Help.cc:65
void slotShowSceneGraphDialog()
Definition: CoreWidget.cc:1009
void slotAddMenubarAction(QAction *_action, QString _name)
File Menu.
Definition: MenuBar.cc:61
void showReducedMenuBar(bool reduced)
typedefs
Definition: MenuBar.cc:147
DrawModes::DrawMode drawModes() const
Get the collected draw modes.
Definition: SceneGraph.hh:582
void setValue(const QString &key, const QVariant &value)
Wrapper function which makes it possible to enable Debugging output with -DOPENFLIPPER_SETTINGS_DEBUG...
void animation(bool _state)
set 2-sided lighting on/off
int viewers()
Get the number of viewers.
void multisampling(bool _state)
set multisampling on/off
void slotUpdateRendererMenu()
Setup and update the global renderer menu.
Definition: MenuBar.cc:774
QMenu * recentFilesMenu_
QMenu containing the recently opened files.
Definition: CoreWidget.hh:692
void setDrawMode(const ACG::SceneGraph::DrawModes::DrawMode &_mode, int _viewer)
Set the draw Mode of a Viewer. .
QAction * orthogonalProjectionAction_
This variable holds the global draw menu.
Definition: CoreWidget.hh:881
void setActive(unsigned int _active, int _viewerId)
set the active post processor for viewer
QMenu * algorithmMenu_
Algorithms Menu.
Definition: CoreWidget.hh:695
QAction * AC_ShowViewModeControls_
Action for View Mode Widget Conrol in Menu.
Definition: CoreWidget.hh:704
void slotGetMenubarMenu(QString _name, QMenu *&_menu, bool _create)
File Menu.
Definition: MenuBar.cc:108
void menuBarVisChanged(bool _state)
will be emitted if the visibility of the menubar is changed
ACG::SceneGraph::BaseNode * getRootNode()
Get the root node for data objects.
QActionGroup * rendererGroup_
Group for all renderers.
Definition: CoreWidget.hh:875
void slotSwitchNavigation(bool _egomode)
Switch navigation mode.
void clearAll()
Clear all data objects.
Definition: Core.cc:998
QMenu * toolsMenu_
Tools Menu.
Definition: CoreWidget.hh:806
QMenu * rendererMenu_
This variable holds the global renderer menu.
Definition: CoreWidget.hh:870
Viewer::ViewerProperties & viewerProperties(int _id)
Get the viewer properties Use this functions to get basic viewer properties such as backgroundcolor o...
void slotGlobalPerspectiveProjection()
Toggle projection mode of all viewers to perspective projection.
void slotGlobalHomeView()
Set the viewer to home position.
void applicationSnapshotDialog()
Create a snapshot of the whole app with fileDialog.
void slotAddMenubarActions(std::vector< QAction *> _actions, QString _name)
File Menu.
Definition: MenuBar.cc:82
void slotSetGlobalBackgroundColor()
Set Background Color for all viewers at once.
DrawMode NONE
not a valid draw mode
Definition: DrawModes.cc:71
void slotCoordSysVisibility(bool _visible)
Hide coordinate systems in all viewers.
void statusBarVisChanged(bool _state)
will be emitted if the visibility of the statusbar is changed
void mipmapping(bool _state)
set mipmapping on/off
std::vector< DrawMode > getAtomicDrawModes() const
Separates this drawMode into a list of all separate atomic draw modes.
Definition: DrawModes.cc:495
#define TOOLSMENU
The Menu will be added inside the Tools Menu.
QActionGroup * drawGroup_
This variable holds the global draw menu.
Definition: CoreWidget.hh:872
ACG::SceneGraph::DrawModes::DrawMode drawMode(int _viewer)
Get the current draw Mode of a Viewer.
QToolBar * mainToolbar_
Called by Plugins to add a Toolbar.
Definition: CoreWidget.hh:1260
void setActive(unsigned int _active, int _id)
set the active renderer
bool backFaceCulling()
Get current state of backface culling.
#define VIEWMENU
The Menu will be added inside the View Menu.
void slotSwitchWheels(bool _state)
Show / hide wheels.
#define ALGORITHMMENU
The Menu will be added inside the Algorithms Menu.
QMenu * globalDrawMenu_
This variable holds the global draw menu.
Definition: CoreWidget.hh:867
QAction * globalBackfaceCullingAction_
Action to globally set backface culling.
Definition: CoreWidget.hh:887
std::vector< QAction * > extended_actions
Definition: CoreWidget.hh:1589
void slotViewMenuAboutToShow()
Called before the view Menu is shown.
Definition: MenuBar.cc:655
QMenu * fileMenu_
File Menu.
Definition: CoreWidget.hh:797
void fullScreenChanged(bool _state)
will be emitted if the fullscreen state is changed (_state = true => in fullscreen) ...
void traverse(BaseNode *_node, Action &_action)
Definition: SceneGraph.hh:137
QAction * fileMenuEnd_
First entry after all relevant parts of the File Menu.
Definition: CoreWidget.hh:809
std::vector< glViewer *> examiner_widgets_
Examiner Widget.
Definition: CoreWidget.hh:677
QMenu * pythonMenu_
Python Menu.
Definition: CoreWidget.hh:803
#define FILEMENU
The Menu will be added inside the File Menu.
QMenu * windowMenu_
Window Menu.
Definition: CoreWidget.hh:701
ACG::SceneGraph::DrawModes::DrawMode availableGlobalDrawModes_
This variable holds the global draw menu.
Definition: CoreWidget.hh:900
void toggleToolbox()
Hide or show toolbox area.
Definition: CoreWidget.cc:729
void showPythonScriptInterpreter()
Pointer to the OptionsWidget.
Definition: Python.cc:3
ACG::SceneGraph::DrawModes::DrawMode activeDrawModes_
This variable holds the global draw menu.
Definition: CoreWidget.hh:898
void slotGlobalSetHomeView()
Set the home position for all viewers.
void slotGlobalToggleBackFaceCulling()
If backface culling is disabled in all viewers, enable it in all viewers. Otherwise disable it...
void toggleMenuBar()
Hide or show menu bar.
Definition: CoreWidget.cc:803
void slotGlobalViewAll()
Change view on all viewers to view complete scene.
void slotGlobalOrthographicProjection()
Toggle projection mode of all viewers to orthographic projection.
bool eventFilter(QObject *_obj, QEvent *_event)
typedefs
Definition: MenuBar.cc:131
bool containsAtomicDrawMode(const DrawMode &_atomicDrawMode) const
Check whether an Atomic DrawMode is active in this draw Mode.
Definition: DrawModes.cc:520
void setupMenuBar()
Setup the main menubar.
Definition: MenuBar.cc:153
void toolBarVisChanged(bool _state)
will be emitted if the visibility of the toolbar is changed
QMenu * viewMenu_
View Menu.
Definition: CoreWidget.hh:800
void slotGlobalRendererMenu(QAction *_action)
Called when the global renderer is selected.
Definition: MenuBar.cc:909
QAction * globalTwosidedLightingAction_
Action to globally set two-sided lighting.
Definition: CoreWidget.hh:890
QAction * perspectiveProjectionAction_
This variable holds the global draw menu.
Definition: CoreWidget.hh:880
void slotGlobalToggleMipmapping()
If mipmapping is disabled in all viewers, enable it in all viewers. Otherwise disable it...
void slotGlobalPostProcessorMenu(QAction *_action)
Called when the global postprocessor is selected.
Definition: MenuBar.cc:925