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
61void 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
82void 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
108void 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
131bool 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
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
909void 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
935void CoreWidget::slotGlobalDrawMenu(QAction * _action) {
936
937 //======================================================================================
938 // Get the mode toggled
939 //======================================================================================
941 std::vector< ACG::SceneGraph::DrawModes::DrawMode > availDrawModeIds;
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//=============================================================================
DLLEXPORT OpenFlipperQSettings & OpenFlipperSettings()
QSettings object containing all program settings of OpenFlipper.
#define VIEWMENU
The Menu will be added inside the View Menu.
#define TOOLSMENU
The Menu will be added inside the Tools Menu.
#define ALGORITHMMENU
The Menu will be added inside the Algorithms Menu.
#define FILEMENU
The Menu will be added inside the File Menu.
#define PYTHONMENU
The Menu will be added inside the Python Menu.
DrawModes::DrawMode drawModes() const
Get the collected draw modes.
Definition: SceneGraph.hh:582
std::vector< DrawMode > getAtomicDrawModes() const
Separates this drawMode into a list of all separate atomic draw modes.
Definition: DrawModes.cc:485
bool containsAtomicDrawMode(const DrawMode &_atomicDrawMode) const
Check whether an Atomic DrawMode is active in this draw Mode.
Definition: DrawModes.cc:510
QAction * fileMenuEnd_
First entry after all relevant parts of the File Menu.
Definition: CoreWidget.hh:816
QMenu * windowMenu_
Window Menu.
Definition: CoreWidget.hh:708
QAction * AC_ShowViewModeControls_
Action for View Mode Widget Conrol in Menu.
Definition: CoreWidget.hh:711
void toolBoxVisChanged(bool _state)
will be emitted if the visibility of the toolbox is changed
void toggleFullscreen()
Set application to Fullscreen and back.
Definition: CoreWidget.cc:688
void slotShowSceneGraphDialog()
Definition: CoreWidget.cc:1027
std::vector< QAction * > extended_actions
Definition: CoreWidget.hh:1596
void showPythonScriptInterpreter()
Pointer to the OptionsWidget.
Definition: Python.cc:3
QActionGroup * drawGroup_
This variable holds the global draw menu.
Definition: CoreWidget.hh:879
QMenu * pythonMenu_
Python Menu.
Definition: CoreWidget.hh:810
QMenu * rendererMenu_
This variable holds the global renderer menu.
Definition: CoreWidget.hh:877
void statusBarVisChanged(bool _state)
will be emitted if the visibility of the statusbar is changed
QMap< QString, QMenu * > menus_
All available menus.
Definition: CoreWidget.hh:819
void slotGlobalToggleBackFaceCulling()
If backface culling is disabled in all viewers, enable it in all viewers. Otherwise disable it.
void slotGlobalToggleMultisampling()
If multisampling is disabled in all viewers, enable it in all viewers. Otherwise disable it.
std::vector< glViewer * > examiner_widgets_
Examiner Widget.
Definition: CoreWidget.hh:684
QAction * globalTwosidedLightingAction_
Action to globally set two-sided lighting.
Definition: CoreWidget.hh:897
void toggleToolbox()
Hide or show toolbox area.
Definition: CoreWidget.cc:747
void menuBarVisChanged(bool _state)
will be emitted if the visibility of the menubar is changed
void slotGetMenubarMenu(QString _name, QMenu *&_menu, bool _create)
File Menu.
Definition: MenuBar.cc:108
void showViewModeControls(bool _show)
Hide or show the View Mode controls.
Definition: CoreWidget.cc:718
QActionGroup * rendererGroup_
Group for all renderers.
Definition: CoreWidget.hh:882
void slotViewMenuAboutToShow()
Called before the view Menu is shown.
Definition: MenuBar.cc:655
void slotGlobalToggleTwoSidedLighting()
If two-sided lighting is disabled in all viewers, enable it in all viewers. Otherwise disable it.
void slotGlobalPerspectiveProjection()
Toggle projection mode of all viewers to perspective projection.
void slotSwitchNavigation(bool _egomode)
Switch navigation mode.
QMenu * recentFilesMenu_
QMenu containing the recently opened files.
Definition: CoreWidget.hh:699
void slotGlobalRendererMenu(QAction *_action)
Called when the global renderer is selected.
Definition: MenuBar.cc:909
QMenu * viewMenu_
View Menu.
Definition: CoreWidget.hh:807
void slotGlobalDrawMenu(QAction *_action)
Called when the global drawMode is selected.
Definition: MenuBar.cc:935
void toggleToolBar()
Hide or show current toolbar.
Definition: CoreWidget.cc:829
void slotGlobalToggleAnimation()
If animation is disabled in all viewers, enable it in all viewers. Otherwise disable it.
void viewerSnapshotDialog()
Create a snapshot of the whole app with fileDialog.
void slotShowRenderObjectWidget()
Shows the widget containing the current render objects.
void slotCoordSysVisibility(bool _visible)
Hide coordinate systems in all viewers.
void slotGlobalToggleMipmapping()
If mipmapping is disabled in all viewers, enable it in all viewers. Otherwise disable it.
void fullScreenChanged(bool _state)
will be emitted if the fullscreen state is changed (_state = true => in fullscreen)
void applicationSnapshotDialog()
Create a snapshot of the whole app with fileDialog.
void slotGlobalPostProcessorMenu(QAction *_action)
Called when the global postprocessor is selected.
Definition: MenuBar.cc:925
void showAboutWidget()
Display the about widget.
Definition: About.cc:87
void slotSetGlobalBackgroundColor()
Set Background Color for all viewers at once.
QMenu * fileMenu_
File Menu.
Definition: CoreWidget.hh:804
QMenu * algorithmMenu_
Algorithms Menu.
Definition: CoreWidget.hh:702
void slotUpdateRendererMenu()
Setup and update the global renderer menu.
Definition: MenuBar.cc:774
ACG::SceneGraph::DrawModes::DrawMode availableGlobalDrawModes_
This variable holds the global draw menu.
Definition: CoreWidget.hh:907
QAction * globalMipmappingAction_
Action to globally set mipmapping.
Definition: CoreWidget.hh:903
void showHelpBrowser(const QString &page=homePage_)
Display the help Browser.
Definition: Help.cc:65
void slotSwitchWheels(bool _state)
Show / hide wheels.
void slotGlobalViewAll()
Change view on all viewers to view complete scene.
QAction * globalAnimationAction_
Action to globally set animation.
Definition: CoreWidget.hh:891
QAction * globalBackfaceCullingAction_
Action to globally set backface culling.
Definition: CoreWidget.hh:894
QAction * globalMultisamplingAction_
Action to globally set multisampling.
Definition: CoreWidget.hh:900
bool eventFilter(QObject *_obj, QEvent *_event)
typedefs
Definition: MenuBar.cc:131
void setupMenuBar()
Setup the main menubar.
Definition: MenuBar.cc:153
QAction * orthogonalProjectionAction_
This variable holds the global draw menu.
Definition: CoreWidget.hh:888
ACG::SceneGraph::DrawModes::DrawMode activeDrawModes_
This variable holds the global draw menu.
Definition: CoreWidget.hh:905
void slotGlobalHomeView()
Set the viewer to home position.
QMenu * toolsMenu_
Tools Menu.
Definition: CoreWidget.hh:813
void slotGlobalSetHomeView()
Set the home position for all viewers.
void slotAddMenubarActions(std::vector< QAction * > _actions, QString _name)
File Menu.
Definition: MenuBar.cc:82
void showOptionsWidget()
Display the Options Browser.
Definition: CoreWidget.cc:929
void toggleStatusBar()
Change visibility of the Status Bar.
Definition: StatusBar.cc:144
void toolBarVisChanged(bool _state)
will be emitted if the visibility of the toolbar is changed
void slotAddMenubarAction(QAction *_action, QString _name)
File Menu.
Definition: MenuBar.cc:61
QMenu * helpMenu_
Help Menu.
Definition: CoreWidget.hh:705
void slotUpdateGlobalDrawMenu()
Setup and update the global draw menu.
Definition: MenuBar.cc:850
void toggleMenuBar()
Hide or show menu bar.
Definition: CoreWidget.cc:821
void slotGlobalOrthographicProjection()
Toggle projection mode of all viewers to orthographic projection.
void showReducedMenuBar(bool reduced)
typedefs
Definition: MenuBar.cc:147
QAction * perspectiveProjectionAction_
This variable holds the global draw menu.
Definition: CoreWidget.hh:887
QToolBar * mainToolbar_
Called by Plugins to add a Toolbar.
Definition: CoreWidget.hh:1267
QMenu * globalDrawMenu_
This variable holds the global draw menu.
Definition: CoreWidget.hh:874
void setValue(const QString &key, const QVariant &value)
Wrapper function which makes it possible to enable Debugging output with -DOPENFLIPPER_SETTINGS_DEBUG...
void setActive(unsigned int _active, int _viewerId)
set the active post processor for viewer
void setActive(unsigned int _active, int _id)
set the active renderer
size_t available()
number of available renderers
void animation(bool _state)
set 2-sided lighting on/off
void twoSidedLighting(bool _state)
set 2-sided lighting on/off
void mipmapping(bool _state)
set mipmapping on/off
bool backFaceCulling()
Get current state of backface culling.
void multisampling(bool _state)
set multisampling on/off
@ PERSPECTIVE_PROJECTION
perspective
DrawMode NONE
not a valid draw mode
Definition: DrawModes.cc:71
void traverse(BaseNode *_node, Action &_action)
Definition: SceneGraph.hh:137
Viewer::ViewerProperties & viewerProperties(int _id)
Get the viewer properties Use this functions to get basic viewer properties such as backgroundcolor o...
ACG::SceneGraph::BaseNode * getRootNode()
Get the root node for data objects.
int viewers()
Get the number of viewers.
ACG::SceneGraph::DrawModes::DrawMode drawMode(int _viewer)
Get the current draw Mode of a Viewer.
void setDrawMode(const ACG::SceneGraph::DrawModes::DrawMode &_mode, int _viewer)
Set the draw Mode of a Viewer. .
unsigned int activeExaminer()
Get the id of the examiner which got the last mouse events.