CoreWidget.hh 42 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2 3
*                                                                            *
*                              OpenFlipper                                   *
Jan Möbius's avatar
Jan Möbius committed
4
*      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
Jan Möbius's avatar
Jan Möbius committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  OpenFlipper is free software: you can redistribute it and/or modify       *
*  it under the terms of the GNU Lesser General Public License as            *
*  published by the Free Software Foundation, either version 3 of            *
*  the License, or (at your option) any later version with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  OpenFlipper is distributed in the hope that it will be useful,            *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of            *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
*  GNU Lesser General Public License for more details.                       *
*                                                                            *
*  You should have received a copy of the GNU LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
33
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
34

35
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36 37
*                                                                            *
*   $Revision$                                                       *
38 39
*   $LastChangedBy$                                                 *
*   $Date$                    *
Jan Möbius's avatar
Jan Möbius committed
40
*                                                                            *
41
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60


//=============================================================================
//
//  CLASS CoreWidget
//
//=============================================================================

/**
 * \file CoreWidget.hh
 * This File contains the header of the frameworks main widget
*/

#ifndef COREWIDGET_HH
#define COREWIDGET_HH


//== INCLUDES =================================================================

61 62
#include <set>

Jan Möbius's avatar
 
Jan Möbius committed
63
#include "OpenFlipper/common/Types.hh"
Jan Möbius's avatar
Jan Möbius committed
64
#include <OpenFlipper/common/GlobalOptions.hh>
Jan Möbius's avatar
 
Jan Möbius committed
65 66 67 68 69 70
#include <OpenFlipper/BasePlugin/ContextMenuInterface.hh>
#include <OpenFlipper/BasePlugin/LoggingInterface.hh>
#include <OpenFlipper/BasePlugin/MenuInterface.hh>
#include <OpenFlipper/BasePlugin/ViewInterface.hh>
#include <OpenFlipper/BasePlugin/StatusbarInterface.hh>

Jan Möbius's avatar
Dennis:  
Jan Möbius committed
71
#include <OpenFlipper/widgets/coreWidget/SideArea.hh>
Dirk Wilden's avatar
Dirk Wilden committed
72
#include <OpenFlipper/widgets/coreWidget/ColorStatusBar.hh>
Jan Möbius's avatar
 
Jan Möbius committed
73

74
#include <OpenFlipper/widgets/glWidget/QtBaseViewer.hh>
Jan Möbius's avatar
 
Jan Möbius committed
75 76
#include <OpenFlipper/widgets/glWidget/QtGLGraphicsScene.hh>
#include <OpenFlipper/widgets/glWidget/QtGLGraphicsView.hh>
Jan Möbius's avatar
Jan Möbius committed
77
#include <OpenFlipper/widgets/glWidget/QtMultiViewLayout.hh>
78
#include <OpenFlipper/widgets/glWidget/QtSlideWindow.hh>
Jan Möbius's avatar
 
Jan Möbius committed
79 80 81 82 83 84 85 86

// QT INCLUDES
#include <QMainWindow>
#include <QStackedWidget>
#include <QTextEdit>
#include <QToolBar>
#include <QStatusBar>

87 88 89
#include <QFuture>
#include <QFutureWatcher>

Jan Möbius's avatar
 
Jan Möbius committed
90 91
#include <QDockWidget>

Jan Möbius's avatar
Jan Möbius committed
92
#include <OpenFlipper/widgets/aboutWidget/aboutWidget.hh>
93
#include <OpenFlipper/widgets/loggerWidget/loggerWidget.hh>
94
#include <OpenFlipper/widgets/optionsWidget/optionsWidget.hh>
95
#include <OpenFlipper/widgets/helpWidget/helpWidget.hh>
96
#include <OpenFlipper/widgets/stereoSettingsWidget/stereoSettingsWidget.hh>
Jan Möbius's avatar
 
Jan Möbius committed
97

Dirk Wilden's avatar
Dirk Wilden committed
98
#include <OpenFlipper/Core/PluginInfo.hh>
Jan Möbius's avatar
 
Jan Möbius committed
99

100 101
#include <ACG/QtWidgets/QtSceneGraphWidget.hh>

Jan Möbius's avatar
Jan Möbius committed
102
#include <ACG/Scenegraph/DrawModes.hh>
103
#include <ACG/Scenegraph/CoordsysNode.hh>
Jan Möbius's avatar
Jan Möbius committed
104

105
#include <OpenFlipper/INIFile/INIFile.hh>
106
#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
Jan Möbius's avatar
Jan Möbius committed
107

Jan Möbius's avatar
Jan Möbius committed
108 109 110 111
/** \brief ViewMode struct
* This struct contains a ViewMode and its status information such as used widgets,toolbars or context menus
*
*/
Jan Möbius's avatar
 
Jan Möbius committed
112
struct ViewMode{
113

Jan Möbius's avatar
Jan Möbius committed
114 115
  /// Name of the View Mode
  QString name;
116

117 118 119
  /// Icon of the View Mode
  /// TODO Specify size for Icons
  QString icon;
120

Jan Möbius's avatar
Jan Möbius committed
121 122
  /// Is this a user defined custom view mode or a plugin generated one
  bool custom;
123

Jan Möbius's avatar
Jan Möbius committed
124 125
  /// List of Visible Toolboxes in this view mode
  QStringList visibleToolboxes;
126

Jan Möbius's avatar
Jan Möbius committed
127 128
  /// List of Toolbars in this view mode
  QStringList visibleToolbars;
129

Jan Möbius's avatar
Jan Möbius committed
130 131
  /// List of context Menus in this view mode
  QStringList visibleContextMenus;
Jan Möbius's avatar
 
Jan Möbius committed
132 133 134 135 136 137 138 139 140 141 142 143 144
};

class StackWidgetInfo {
  public:
    StackWidgetInfo(bool _editable,QString _name,QWidget* _widget);

    bool editable;
    QString name;
    QWidget* widget;
};

/** Info struct containing information about custom context menus
 */
145 146 147
class MenuInfo {
  public:
    MenuInfo():
Jan Möbius's avatar
Jan Möbius committed
148 149
      action(0),
      type(CONTEXTBACKGROUNDMENU)
150 151 152 153
    {}

    /// The context item
    QAction*          action;
Jan Möbius's avatar
 
Jan Möbius committed
154

155 156
    /// Type of objects for which the context Menu should be visible
    DataType        contextType;
Jan Möbius's avatar
 
Jan Möbius committed
157

158
    /// Type of the context Menu ( Context for what type .. Background,Object,Node)
Jan Möbius's avatar
Jan Möbius committed
159
    ContextMenuType type;
Jan Möbius's avatar
 
Jan Möbius committed
160 161
};

Jan Möbius's avatar
Jan Möbius committed
162 163 164 165
/** \brief Struct containing information about pickModes
 *
 * This is an internal DataStructure! Don't use it. It's used to
 * manage the pickmode information internally.
166 167 168 169 170 171 172
*/
class PickMode
{
  public:
    /// Constructor
    PickMode(const std::string& _n, const bool _t, const bool _v, QCursor _c, QToolBar *_tb = 0 );

Jan Möbius's avatar
Jan Möbius committed
173
    /// Destructor
174 175 176
    ~PickMode() {};


Jan Möbius's avatar
Jan Möbius committed
177 178 179 180
    /** \brief PickMode visible
     *
     * @param _visible Should this be a visible or a hidden pick mode?
     */
181 182
    void visible(const bool _visible);

Jan Möbius's avatar
Jan Möbius committed
183 184 185 186
    /** \brief PickMode visible
     *
     * Visible or hidden pick mode
     */
187 188
    bool visible() const;

Jan Möbius's avatar
Jan Möbius committed
189 190 191 192
    /** \brief PickMode Name
    *
    * Name of the pick mode
    */
193 194
    std::string name() const;

Jan Möbius's avatar
Jan Möbius committed
195 196 197 198 199 200 201
    /** \brief PickMode mouse tracking
     *
     * If the pick mode has mouse tracking enabled, it will emit
     * mouse events with every movement and not only on button events.
     *
     * @param _tracking mouse tracking enabled or not
     */
202
    void tracking(const bool _tracking);
Jan Möbius's avatar
Jan Möbius committed
203 204 205 206 207 208

    /** \brief PickMode mouse tracking
    *
    * If the pick mode has mouse tracking enabled, it will emit
    * mouse events with every movement and not only on button events.
    */
209 210
    bool tracking() const;

Jan Möbius's avatar
Jan Möbius committed
211 212 213 214 215
    /** \brief PickMode cursor
    *
    * The cursor associated with this pick mode. You can define a non standard
    * cursor that is visible, if this pick mode is active.
    */
216 217
    QCursor cursor() const;

218 219 220 221 222 223 224 225 226
    /** \brief PickMode cursor
    *
    * The cursor associated with this pick mode. You can define a non standard
    * cursor that is visible, if this pick mode is active.
    *
    * @param _cursor The cursor to be used in this pickmode
    */
    void cursor(const QCursor _cursor);

Jan Möbius's avatar
Jan Möbius committed
227 228 229 230 231 232 233
    /** \brief PickMode toolbar
    *
    * Each pickmode can have a toolbar that will be visible at the top of the screen.
    * This toolbar is stored here.
    *
    * @param _toolbar The used toolbar
    */
234
    void toolbar(QToolBar* _toolbar);
Jan Möbius's avatar
Jan Möbius committed
235 236 237 238 239 240

    /** \brief PickMode toolbar
    *
    * Each pickmode can have a toolbar that will be visible at the top of the screen.
    * This toolbar is stored here.
    */
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
    QToolBar* toolbar() const;

  private:

    /// Name of the pickMode
    std::string  name_;

    /** MouseTracking enabled for this mode?
    */
    bool         tracking_;

    /** Defines if the Mode will be visible in the popup Menu
    */
    bool         visible_;

    /** Cursor used in  this pickMode
    */
    QCursor      cursor_;

    /** Additional toolbar showed in this pickMode
    */
    QToolBar *   toolbar_;
};

Jan Möbius's avatar
 
Jan Möbius committed
265 266 267 268 269 270 271 272
/** Core Widget of the Application
 */
class CoreWidget : public QMainWindow
{
  Q_OBJECT

public:

273 274
  friend class Core;

Jan Möbius's avatar
 
Jan Möbius committed
275
  /// constructor
Dirk Wilden's avatar
Dirk Wilden committed
276
  CoreWidget( QVector<ViewMode*>& _viewModes, std::vector<PluginInfo>& _plugins, QList< SlotInfo >& _coreSlots );
Jan Möbius's avatar
 
Jan Möbius committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292

  /// destructor
  ~CoreWidget();

  signals:
    void clearAll();
    void loadMenu();
    void addEmptyObjectMenu();
    void saveMenu();
    void saveToMenu();
    void loadIniMenu();
    void saveIniMenu();
    void recentOpen(QAction*);
    void exit();

    void loadPlugin();
Dirk Wilden's avatar
Dirk Wilden committed
293
    void showPlugins();
Jan Möbius's avatar
 
Jan Möbius committed
294 295 296 297 298 299

  private slots:

    /// Called on applications close
    void closeEvent ( QCloseEvent * event );

Dirk Wilden's avatar
Dirk Wilden committed
300 301 302 303 304 305 306 307 308 309 310
   //===========================================================================
  /** @name Logger
  * @{ */
  //===========================================================================

  signals :
      void log(Logtype _type, QString _message);
      void log(QString _message);

   /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
311 312 313 314 315 316 317 318 319 320 321
   //===========================================================================
  /** @name Keys
  * @{ */
  //===========================================================================

  protected :

    //! Handle key events
    virtual void keyPressEvent (QKeyEvent* _e);
    virtual void keyReleaseEvent(QKeyEvent* _e);

Jan Möbius's avatar
 
Jan Möbius committed
322 323 324
    // Filter alt key events under windows
    //bool eventFilter(QObject *obj, QEvent *ev);

Jan Möbius's avatar
 
Jan Möbius committed
325 326
  signals :

327 328 329 330 331 332 333 334 335 336 337 338 339
    /** When this Signal is emitted when a Keyevent Event occures
     *  The signal is connected to all Plugins implementing KeyInterface by the pluginLoader
     */
    void PluginKeyEvent(QKeyEvent* );

    /** When this Signal is emitted when a Keyevent Release occures
     *  The signal is connected to all Plugins implementing KeyInterface by the pluginLoader
     */
    void PluginKeyReleaseEvent(QKeyEvent* );

    /// internal signal to register CoreWidget keys
    void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description,
                     bool _multiUse = false);
Jan Möbius's avatar
 
Jan Möbius committed
340

Dirk Wilden's avatar
Dirk Wilden committed
341 342
    ///call a scripting function
    void call( QString _expression , bool& _success  );
Dirk Wilden's avatar
Dirk Wilden committed
343 344

  private:
Dirk Wilden's avatar
Dirk Wilden committed
345 346
    ///typedefs
    typedef std::multimap<  std::pair< int, Qt::KeyboardModifiers >  ,  std::pair< QObject*, int > > KeyMap;
Dirk Wilden's avatar
Dirk Wilden committed
347

Dirk Wilden's avatar
Dirk Wilden committed
348 349
    typedef std::pair< KeyMap::iterator, KeyMap::iterator > KeyRange;

350 351 352 353 354 355 356 357
    /** \brief Register all events related to the core
     */
    void registerCoreKeys();

    /** \brief handle key events for the core
     *
     * This function is called to handle key events which are registered to the core
     */
358 359
    void coreKeyPressEvent();

Dirk Wilden's avatar
Dirk Wilden committed
360 361 362 363 364
    /// Handle core key events
    void coreKeyPressEvent  (QKeyEvent* _e);
    void coreKeyReleaseEvent(QKeyEvent* _e);

    KeyBinding getKeyBinding(QObject* _plugin, int _keyIndex );
Dirk Wilden's avatar
Dirk Wilden committed
365
    QString    getRPCName(QObject* _plugin );
Dirk Wilden's avatar
Dirk Wilden committed
366 367

    ///vector of keys registered to the core
Dirk Wilden's avatar
Dirk Wilden committed
368 369
    std::vector<KeyBinding> coreKeys_;

Dirk Wilden's avatar
Dirk Wilden committed
370 371 372 373 374 375
    ///mapping of all keys to registered keys and the corresponding plugins
    KeyMap keys_;

    ///mapping of all registered keys and the corresponding plugins to currently assigned keys
    InverseKeyMap invKeys_;

Dirk Wilden's avatar
Dirk Wilden committed
376 377 378
    ///list of scripting slots from core
    QList< SlotInfo >& coreSlots_;

Dirk Wilden's avatar
Dirk Wilden committed
379
  private slots:
380 381 382 383 384
     /** \brief key registration
     *
     * internal slot that registers a keyCombination to the sender() who emitted the registerKey() signal
     * only after registering keyCombinations plugins receive keyEvents to the corresponding keyCombinations via KeyInterface.
     */
Dirk Wilden's avatar
Dirk Wilden committed
385 386 387 388
    void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description,
                         bool _multiUse = false);

  public slots:
389 390 391 392
     /** \brief add a new key Mapping
     *
     * internal function that stores a new keyCombination assignment for an existing keyBinding
     */
Dirk Wilden's avatar
Dirk Wilden committed
393
    void slotAddKeyMapping(int _key, Qt::KeyboardModifiers _modifiers, QObject* _plugin, int _keyBindingID);
Dirk Wilden's avatar
Dirk Wilden committed
394

395 396 397 398 399
     /** \brief register scripting slots to allow keyBindings
     *
     * internal function that registers all public slots without parameters of each plugin (or core)
     * to the key management system. This allows the assignment of keyBindings for each of these slots.
     */
Dirk Wilden's avatar
Dirk Wilden committed
400 401
    void slotRegisterSlotKeyBindings();

402 403 404 405 406 407 408
  public:
    ///Load key assignments from a given INI file
    void loadKeyBindings(INIFile& _ini);

    ///Store current key assignments to a given INI file
    void saveKeyBindings(INIFile& _ini);

Dirk Wilden's avatar
Dirk Wilden committed
409 410 411 412
  private:
    /// Store the state of the shift key
    bool shiftPressed_;

Jan Möbius's avatar
 
Jan Möbius committed
413 414 415 416 417 418 419 420 421
   /** @} */

  //===========================================================================
  /** @name GUI creation
  * @{ */
  //===========================================================================

  public:

422 423
    /// Setup the main menubar
    void setupMenuBar();
424

Dirk Wilden's avatar
Dirk Wilden committed
425 426 427 428 429 430 431 432 433 434
   /** @} */

  //===========================================================================
  /** @name Video Capturing
  * @{ */
  //===========================================================================

  signals:
    void startVideoCapture(QString _baseName, int _fps, bool _captureViewers);
    void stopVideoCapture();
435 436 437 438

    void resizeViewers(int _width, int _height);
    void resizeApplication(int _width, int _height);

Dirk Wilden's avatar
Dirk Wilden committed
439 440
  private slots:
    void startVideoCaptureDialog();
441

Jan Möbius's avatar
Jan Möbius committed
442
  /** @} */
443

Jan Möbius's avatar
Jan Möbius committed
444 445 446 447
  //===========================================================================
  /** @name Recent File Menu handling
   * @{ */
  //===========================================================================
448

Dirk Wilden's avatar
Dirk Wilden committed
449 450
  public:

Jan Möbius's avatar
 
Jan Möbius committed
451 452 453 454 455 456 457
  /// Add a recent file and update menu
  void addRecent(QString _filename, DataType _type);

  /// Update the recent files menu
  void updateRecent();

  /** @} */
Jan Möbius's avatar
Jan Möbius committed
458

Jan Möbius's avatar
 
Jan Möbius committed
459 460 461 462
  //===========================================================================
  /** @name GUI Controls
  * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
463

Jan Möbius's avatar
 
Jan Möbius committed
464 465 466
  public :
    /// Set application to Fullscreen and back
    void toggleFullscreen();
Jan Möbius's avatar
Jan Möbius committed
467

468 469 470
    /// Enable or disable fullscreen mode
    void setFullscreen(bool _state );

Jan Möbius's avatar
 
Jan Möbius committed
471 472
    /// Hide or show logging area
    void toggleLogger();
473 474

    /// Change visibility of the logger
Jan Möbius's avatar
Jan Möbius committed
475
    void showLogger(OpenFlipper::Options::LoggerState _state);
Jan Möbius's avatar
Jan Möbius committed
476

477 478 479
    /// Show logger in splitter or not
    void showLoggerInSplitView(bool _show);

480 481 482
    /// Set in-scene logger geometry right
    void updateInSceneLoggerGeometry();

Jan Möbius's avatar
 
Jan Möbius committed
483 484
    /// Hide or show toolbox area
    void toggleToolbox();
Jan Möbius's avatar
Jan Möbius committed
485

486 487 488
    /// Change visibility of the Status Bar
    void toggleStatusBar();

Jan Möbius's avatar
Dennis:  
Jan Möbius committed
489
    /// Use native or gl painted cursor
490
    void setForceNativeCursor ( bool _state );
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
491

Dirk Wilden's avatar
Dirk Wilden committed
492
    QSize defaultIconSize();
493

494 495 496 497
  public slots:
    
    /// Show or hide toolbox
    void showToolbox( bool _state );
Dirk Wilden's avatar
Dirk Wilden committed
498

499 500 501
    /// Show or hide status bar
    void showStatusBar( bool _state );

Jan Möbius's avatar
Jan Möbius committed
502 503 504
  private:
    OpenFlipper::Options::LoggerState loggerState_;

Dirk Wilden's avatar
Dirk Wilden committed
505
    uint fullscreenState_;
Dirk Wilden's avatar
Dirk Wilden committed
506 507
    
    QSize defaultIconSize_;
508

Jan Möbius's avatar
 
Jan Möbius committed
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535
  /** @} */

  //===========================================================================
    /** @name Tool Widgets / View Modes
    * @{ */
  //===========================================================================

    private:
      /// a List of all widgets in the toolbar
      QVector<QWidget*> toolWidgets_;

    public:
      /// List of currently available viewModes
      QVector<ViewMode*>& viewModes_;

    private:

      QPushButton* viewModeButton_;

      /// Submenu holding all ViewMode actions
      QMenu* viewModeMenu_;

    public slots:

      /// init ViewModes that were loaded via ini-file
      void initViewModes(  );

536
      /// Add or change Toolboxes for a ViewMode (non-userdefined viewMode)
Jan Möbius's avatar
Jan Möbius committed
537
      void slotAddViewModeToolboxes(QString _mode, QStringList _usedWidgets);
Jan Möbius's avatar
 
Jan Möbius committed
538

539
      /// Add or change Toolboxes for a ViewMode (_custom == userdefined viewMode)
Jan Möbius's avatar
Jan Möbius committed
540
      void slotAddViewModeToolboxes(QString _mode, bool _custom, QStringList _usedWidgets);
541

542
      /// Add or change Toolbars for a ViewMode (non-userdefined viewMode)
543 544
      void slotAddViewModeToolbars(QString _mode, QStringList _usedToolbars);

545 546
      /// Add or change Toolbars for a ViewMode (_custom == userdefined viewMode)
      void slotAddViewModeToolbars(QString _mode, bool _custom, QStringList _usedToolbars);
547

Jan Möbius's avatar
Marlin:  
Jan Möbius committed
548 549 550 551 552 553 554 555
      /// Add or change Toolbars for a ViewMode (non-userdefined viewMode)
      void slotAddViewModeContextMenus(QString _mode, QStringList _usedToolbars);

      /// Add or change Toolbars for a ViewMode (_custom == userdefined viewMode)
      void slotAddViewModeContextMenus(QString _mode, bool _custom, QStringList _usedToolbars);

      /// Completly configure a view mode ( set toolbars, toolboxes, context menus, ... )
      void slotAddViewModeComplete(QString _mode , bool _custom, QStringList _toolboxes, QStringList _toolbars, QStringList _contextmenus);
556

Jan Möbius's avatar
Jan Möbius committed
557
      /// Sets the Icon for a given View Mode (non-userdefined viewMode)
558
      void slotSetViewModeIcon(QString _mode, QString _iconName);
559

Jan Möbius's avatar
Jan Möbius committed
560 561
      /// Sets the Icon for a given View Mode (_custom == userdefined viewMode)
      void slotSetViewModeIcon(QString _mode, bool _custom, QString _iconName);
Jan Möbius's avatar
 
Jan Möbius committed
562 563

      /// Slot for Changing visible toolWidgets
564
      void slotChangeView(QString _mode, QStringList _toolboxWidgets, QStringList _toolbars, QStringList _contextmenus, bool _expandAll = false);
565 566
      
      /// Set orientation of tool box (either on the right or the left side of the screen)
567
      void setToolBoxOrientationOnTheRight(bool _toolBoxRight);
568 569 570
      
      /// Hide or show the View Mode controls
      void showViewModeControls(bool _show);
Jan Möbius's avatar
 
Jan Möbius committed
571 572 573 574 575 576 577 578

    private slots:
      /// Remove viewMode
      void slotRemoveViewMode(QString _name);

      /// Slot for setting ViewMode from Menu
      void slotSetViewMode( QAction* action);

Jan Möbius's avatar
Jan Möbius committed
579
      /// Show a dialog in which the viewMode can be edited
Jan Möbius's avatar
 
Jan Möbius committed
580
      void slotViewModeDialog();
581

Jan Möbius's avatar
Jan Möbius committed
582 583
      /// Show a dialog in which the viewMode can be changed
      void slotViewChangeDialog();
Jan Möbius's avatar
 
Jan Möbius committed
584 585

    public slots :
586 587
      
      /// Set the view Mode to the given Mode
588
      void setViewMode( QString _mode, bool _expandAll = false );
589 590
      
      /// Move a specific toolbox widget to the top of the side area
591
      void moveToolBoxToTop(QString _name);
592 593
      
      /// Move a specific toolbox widget to the bottom of the side area
594
      void moveToolBoxToBottom(QString _name);
595
      
Jan Möbius's avatar
 
Jan Möbius committed
596 597 598 599 600 601 602 603 604 605

   /** @} */



  //===========================================================================
    /** @name Basic Gui Elements
    * @{ */
  //===========================================================================

606
  private:
Jan Möbius's avatar
 
Jan Möbius committed
607 608

    /// Examiner Widget
Jan Möbius's avatar
 
Jan Möbius committed
609
    std::vector< glViewer* >  examiner_widgets_;
Jan Möbius's avatar
Jan Möbius committed
610

Jan Möbius's avatar
 
Jan Möbius committed
611 612
    ///Spliter between toplevel objects and the textedit at the bottom
    QSplitter* splitter_;
Jan Möbius's avatar
Jan Möbius committed
613

614 615 616
    /// Group box containing Task Switcher Controls
    QGroupBox *viewModeControlBox_;
    
Jan Möbius's avatar
 
Jan Möbius committed
617
    /// Textedit at the bottom for log messages
618
    LoggerWidget* logWidget_;
Jan Möbius's avatar
Jan Möbius committed
619

Jan Möbius's avatar
 
Jan Möbius committed
620 621 622 623 624 625 626 627
    /// Size of the logging window ( defaults to 240 )
    int originalLoggerSize_;

    /// QMenu containing the recently opened files
    QMenu* recentFilesMenu_;

    /// Help Menu
    QMenu* helpMenu_;
628 629 630 631 632 633
    
    /// Window Menu
    QMenu* windowMenu_;
    
    /// Action for View Mode Widget Conrol in Menu
    QAction* AC_ShowViewModeControls_;
Jan Möbius's avatar
 
Jan Möbius committed
634

635 636 637
    /// Action for View Mode Widget Conrol in Menu
    QAction* AC_ShowToolbox_;
    
Jan Möbius's avatar
 
Jan Möbius committed
638 639 640 641 642 643 644 645 646 647 648 649 650
    /// gl widget used as drawing area to paint the graphics scene
    QGLWidget* glWidget_;

    /// graphics scene used to paint gl context and widgets
    QtGLGraphicsScene* glScene_;

    /// graphics view that holds the gl scene
    QtGLGraphicsView* glView_;

    /// center widged
    QGraphicsWidget* centerWidget_;

    /// Base layout that holds gl views
Jan Möbius's avatar
Jan Möbius committed
651
    QtMultiViewLayout* baseLayout_;
Jan Möbius's avatar
 
Jan Möbius committed
652

653 654 655
    /// Class that holds the animated log widget
    QtSlideWindow* slidingLogger_;

Jan Möbius's avatar
Dennis:  
Jan Möbius committed
656 657
    /// Widget for toolBox
    QWidget* toolBoxArea_;
658

Jan Möbius's avatar
Jan Möbius committed
659 660
    /// Button to change viewModes
    QPushButton* vmChangeButton_;
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
661 662 663 664 665 666 667 668 669 670

    /// Spliter between toplevel objects and toolbox
    QSplitter* toolSplitter_;

    /// Toolbox
    SideArea* toolBox_;

    /// Toolbox scroll area
    QScrollArea* toolBoxScroll_;

671
    /// Handle to picking toolbar
Jan Möbius's avatar
Jan Möbius committed
672
    typedef std::map<QToolBar*,QGraphicsProxyWidget*> PickToolBarMap;
673
    PickToolBarMap curPickingToolbarItems_;
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
674

675 676 677
    /// Extra toolbar not in scene for picking
    QToolBar* pickToolBarExternal_;

678 679 680
    /// Store all toolbars that once have been registered
    std::set<QToolBar*> registeredToolbars_;

Jan Möbius's avatar
Dennis:  
Jan Möbius committed
681 682 683
    /// Cursor handling
    CursorPainter* cursorPainter_;

Jan Möbius's avatar
 
Jan Möbius committed
684

685 686 687
    // widget showing the scenegraph
    ACG::QtWidgets::QtSceneGraphDialog* sceneGraphDialog_;

Jan Möbius's avatar
 
Jan Möbius committed
688 689 690
  /** @} */

  private slots:
691 692 693 694 695 696

    /** Creates and shows the Scenegraph Dialog
     */
    void slotShowSceneGraphDialog();


697 698 699 700 701
   /** Makes the sender examiner active
    */
   void slotActivateExaminer ();


Jan Möbius's avatar
 
Jan Möbius committed
702 703 704 705 706 707
   /** Display a log message in the Mainwidget
    * @param _type Type of Message (OUT,WARN,ERR)
    * @param _message The message to be displayed
    */
   void slotLog(Logtype _type, QString _message);

Jan Möbius's avatar
 
Jan Möbius committed
708 709
   /** Updates the size of the main graphics widget in the scene
     */
710
   void sceneRectChanged(const QRectF &rect);
Jan Möbius's avatar
 
Jan Möbius committed
711

Jan Möbius's avatar
 
Jan Möbius committed
712 713 714 715 716 717
  //===========================================================================
    /** @name Menubar controls
      * @{ */
  //===========================================================================
  private slots :

Jan Möbius's avatar
Jan Möbius committed
718 719
    void slotAddMenubarAction( QAction* _action , QString _name );
    void slotGetMenubarMenu (QString _name, QMenu *& _menu, bool _create);
Jan Möbius's avatar
 
Jan Möbius committed
720 721 722 723 724 725 726 727

  private:

    /// File Menu
    QMenu *fileMenu_;

    /// View Menu
    QMenu *viewMenu_;
728

729 730
    /// Tools Menu
    QMenu *toolsMenu_;
Jan Möbius's avatar
 
Jan Möbius committed
731 732 733 734

    /// First entry after all relevant parts of the File Menu
    QAction* fileMenuEnd_;

Jan Möbius's avatar
Jan Möbius committed
735 736 737
    /// All available menus
    QMap<QString, QMenu *> menus_;

Jan Möbius's avatar
 
Jan Möbius committed
738
  /** @} */
Jan Möbius's avatar
Jan Möbius committed
739

Jan Möbius's avatar
 
Jan Möbius committed
740 741 742 743
  //===========================================================================
    /** @name ToolBar controls
      * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
744
  private:
Jan Möbius's avatar
 
Jan Möbius committed
745
    QToolBar* viewerToolbar_;
Dirk Wilden's avatar
Dirk Wilden committed
746 747

    int toolbarCount_;
Jan Möbius's avatar
Jan Möbius committed
748

749 750 751 752 753
    QToolButton* stereoButton_;
    QToolButton* moveButton_;
    QToolButton* pickButton_;
    QToolButton* questionButton_;

754
    QComboBox* viewerLayoutBox_;
755

Jan Möbius's avatar
 
Jan Möbius committed
756 757 758
  /** @} */

  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
759
    /** @name View Menu
Jan Möbius's avatar
 
Jan Möbius committed
760 761
      * @{ */
  //===========================================================================
762

Jan Möbius's avatar
Jan Möbius committed
763 764 765
  public slots:
    /// Setup and update the global draw menu
    void slotUpdateGlobalDrawMenu();
766

767 768 769 770 771
    /// Setup and update the global renderer menu
    void slotUpdateRendererMenu();

    /// Setup and update the global postprocessor menu
    void slotUpdatePostProcessorMenu();
772

773 774
    /// Change viewer layout that was selected in the combo box
    void setViewerLayout(int _idx);
775

776 777
  private slots:
    /// Switches over to the next view mode
778
    void nextViewerLayout();
779

Jan Möbius's avatar
Jan Möbius committed
780 781
    /// Called when the global drawMode is selected
    void slotGlobalDrawMenu(QAction * _action);
782

783 784
    /// Called before the view Menu is shown
    void slotViewMenuAboutToShow();
785

786 787 788 789 790 791
    /// Called when the global renderer is selected
    void slotGlobalRendererMenu(QAction * _action);

    /// Called when the global postprocessor is selected
    void slotGlobalPostProcessorMenu(QAction * _action);

Jan Möbius's avatar
Jan Möbius committed
792 793 794
  private:
    /// This variable holds the global draw menu
    QMenu* globalDrawMenu_;
795

796 797 798 799 800 801
    /// This variable holds the global renderer menu
    QMenu* rendererMenu_;

    /// This variable holds the global postprocessor menu
    QMenu* postprocessorMenu_;

802 803
    QActionGroup * drawGroup_;

804 805 806 807 808 809
    /// Group for all renderers
    QActionGroup * rendererGroup_;

    /// Group for all postprocessors
    QActionGroup *  postProcessorGroup_;

Jan Möbius's avatar
Jan Möbius committed
810 811
    /// Group for all menu items
    QActionGroup* viewGroup_;
812

813 814
    QAction* perspectiveProjectionAction_;
    QAction* orthogonalProjectionAction_;
815

816
    /// Action to globally set animation
817
    QAction* globalAnimationAction_;
818

819 820
    /// Action to globally set backface culling
    QAction* globalBackfaceCullingAction_;
821

822
    /// Action to globally set two-sided lighting
823 824
    QAction* globalTwosidedLightingAction_;

825
    /// Action to globally set multisampling
826
    QAction* globalMultisamplingAction_;
827 828 829
    
    /// Action to globally set mipmapping
    QAction* globalMipmappingAction_;
830

Jan Möbius's avatar
Jan Möbius committed
831
    ACG::SceneGraph::DrawModes::DrawMode activeDrawModes_;
832

Jan Möbius's avatar
Jan Möbius committed
833
    ACG::SceneGraph::DrawModes::DrawMode availableGlobalDrawModes_;
834

Jan Möbius's avatar
Jan Möbius committed
835 836 837 838 839 840
  /** @} */

  //===========================================================================
    /** @name Context Menu
     * @{ */
  //===========================================================================
841

Jan Möbius's avatar
 
Jan Möbius committed
842
  signals :
843 844 845 846 847 848 849 850 851
    /// tells the plugins to update their context menu when an object is picked
    void updateContextMenu(int);

    /// tells the plugins to update their context menu when a node is picked
    void updateContextMenuNode(int);

    /// tells the plugins to update their context menu when the background is picked
    void updateContextMenuBackground();

Jan Möbius's avatar
 
Jan Möbius committed
852 853 854 855 856

  private slots:
    /// This slot is called by the examiner widgets gl area when a context menu is requested
    void slotCustomContextMenu( const QPoint& _point );

Jan Möbius's avatar
 
Jan Möbius committed
857 858
    /// called by plugins to add a new context menu item
    void slotAddContextItem(QAction* _entry, ContextMenuType _type);
Jan Möbius's avatar
 
Jan Möbius committed
859

Jan Möbius's avatar
 
Jan Möbius committed
860 861
    /// called by plugins to add a real context menu item depending on DataType
    void slotAddContextItem( QAction* _entry , DataType _dataType ,ContextMenuType type_);
Jan Möbius's avatar
Marlin:  
Jan Möbius committed
862 863 864
    
    /// called by slotAddContextItem to add the item to the view mode
    void slotAddContextItemToViewMode( QAction* _entry );
Jan Möbius's avatar
 
Jan Möbius committed
865

866 867 868 869 870 871
    /// Paste the view to the last active examiner
    void slotPasteView( );

    /// Copy view from the last active examiner
    void slotCopyView( );

872 873
    /// Called when a coordsys drawMode has been changed
    void slotViewerDrawMenu( QAction * _action );
874

875 876 877
    /// Called when a different post processor has been chosen
    void slotPostProcessorMenu( QAction * _action);

Jan Möbius's avatar
Jan Möbius committed
878 879 880
    /// Called when a different renderer has been chosen
    void slotRenderMenu( QAction * _action);

881 882
    /// Creates a draw Menu for the currently active Viewer
    void slotUpdateViewerDrawMenu();
883

Dirk Wilden's avatar
Dirk Wilden committed
884
    /// Create a snapshot of the last active examiner
885
    void slotExaminerSnapshot();
Dirk Wilden's avatar
Dirk Wilden committed
886

887 888 889
    /// Show / hide wheels
    void slotSwitchWheels(bool _state);

890 891 892
    /// Switch navigation mode
    void slotSwitchNavigation(bool _egomode);

Dirk Wilden's avatar
Dirk Wilden committed
893 894 895
    /// Set the snapShot name for all examiners
    void slotSnapshotName();

Dirk Wilden's avatar
Dirk Wilden committed
896 897 898
    /// Hide coordinate systems in all viewers
    void slotCoordSysVisibility(bool _visible);

Jan Möbius's avatar
 
Jan Möbius committed
899
  private :
Jan Möbius's avatar
Jan Möbius committed
900 901 902 903
    /** Update the contextmenu for the given position inside an examiner widget
     *
     * @param _point      Picking position in coordinates of the viewer
     */
904 905
    void updatePopupMenu(const QPoint& _point);

906 907
    void updatePopupMenuCoordsysNode(QMenu* _menu , const int _part);
    void updatePopupMenuObject(QMenu* _menu , BaseObjectData* _object );
Jan Möbius's avatar
Jan Möbius committed
908
    void updatePopupMenuBackground(QMenu* _menu , const QPoint& _point);
909 910 911
    void updatePopupMenuNode(QMenu* _menu , ACG::SceneGraph::BaseNode* _node);

    bool addContextMenus( QMenu* _menu , ContextMenuType _type, int _id = -1);
Jan Möbius's avatar
 
Jan Möbius committed
912 913 914 915 916 917 918 919 920 921

  private :
    /// context Menu for the gl area
    QMenu*  contextMenu_;

    /// Context Menu containing all selection elements
    QMenu*  contextSelectionMenu_;

    /// All real context menu entries
    std::vector< MenuInfo > contextMenus_;
922

923 924
    /// DrawGroup for per Viewer Draw Modes
    QActionGroup* drawGroupViewer_;
925

926 927
    /// Draw Menu for per Viewer Draw Modes
    QMenu* viewerDrawMenu_;
Jan Möbius's avatar
 
Jan Möbius committed
928

929 930 931 932
    /// Menu which holds the context menu entries for
    /// the coordsys node if invisible
    QMenu* coordSysMenu_;

Jan Möbius's avatar
 
Jan Möbius committed
933 934
  /** @} */

Dirk Wilden's avatar
Dirk Wilden committed
935 936 937 938 939 940 941 942 943 944 945 946 947
  //===========================================================================
    /** @name Snapshots
     * @{ */
  //===========================================================================

  private:

    QString snapshotName_;
    int     snapshotCounter_;

  public slots:

    /// Create a snapshot of the whole app with fileDialog
Dirk Wilden's avatar
Dirk Wilden committed
948
    void viewerSnapshotDialog();
Dirk Wilden's avatar
Dirk Wilden committed
949 950

    /// Create a snapshot of the whole app
Dirk Wilden's avatar
Dirk Wilden committed
951
    void viewerSnapshot();
Dirk Wilden's avatar
Dirk Wilden committed
952 953 954 955 956 957 958 959 960 961 962 963 964

    /// Create a snapshot of the whole app with fileDialog
    void applicationSnapshotDialog();

    /// Create a snapshot of the whole app
    void applicationSnapshot();

    /// Set the snapshot name
    void applicationSnapshotName(QString _name);


  /** @} */

965 966 967 968 969 970 971 972
  //===========================================================================
    /** @name Thread-safe functions using QFuture
    * @{ */
  //===========================================================================

  public:

    void writeImageAsynchronously(QPixmap* _pixmap, const QString _name);
973
    void writeImageAsynchronously(QImage* _image, const QString _name);
974 975 976 977 978 979

  private:

    // Store pointers to QFuture and QFutureWatcher
    std::map<QFutureWatcher<void>*,QFuture<void>*> watcher_garbage_;

980 981 982
    // Mutex for operations on map
    QMutex map_mutex_;

983 984 985 986 987 988
  private slots:

    void delete_garbage();

  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
  //===========================================================================
    /** @name StackWidget controls
    * @{ */
  //===========================================================================

  private slots:
    void slotGetStackWidget( QString _name, QWidget*& _widget );
    void slotAddStackWidget( QString _name, QWidget* _widget );
    void slotUpdateStackWidget( QString _name, QWidget* _widget );

    void slotViewMenuAction( QAction * _action);

    void slotUpdateStackMenu();


  private :
    /// QMenu containing the recently opened files
    QMenu* stackMenu_;

    std::vector< StackWidgetInfo > stackWidgetList_;

1010
  public :
Jan Möbius's avatar
 
Jan Möbius committed
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
    /// Container widget for holding multiple views
    QStackedWidget* stackedWidget_;

  /** @} */

  //===========================================================================
  /** @name Help System
  * @{ */
  //===========================================================================

  public slots:
    /// Display the help Browser
1023
    void showHelpBrowser();
Jan Möbius's avatar
 
Jan Möbius committed
1024 1025 1026

  private:
    /// Pointer to the help Browser
1027
    HelpWidget* helpWidget_;
Jan Möbius's avatar
 
Jan Möbius committed
1028 1029

  /** @} */
1030

1031 1032 1033 1034 1035 1036 1037 1038 1039 1040
  //===========================================================================
  /** @name Stereo View Mode
  * @{ */
  //===========================================================================

  public slots:
      /// Creates custom context menu for stereo viewer settings
    void stereoButtonContextMenu(const QPoint& _pos);

    /// Is called if the user has changed stereo settings
1041 1042 1043
    /// Note: The parameter just makes sure, we can connect
    /// all necessary signals to this slot. It has no use for now.
    void slotApplyStereoSettings(int _tmpParam = 0);
1044 1045 1046 1047 1048 1049 1050 1051


  private:
    /// Widget to change stereo settings
    StereoSettingsWidget* stereoSettingsWidget_;

  /** @} */

Jan Möbius's avatar
Jan Möbius committed
1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066
  //===========================================================================
  /** @name About System
  * @{ */
  //===========================================================================

  public slots:
    /// Display the about widget
    void showAboutWidget();

  private:
    /// Pointer to the about widget
    AboutWidget* aboutWidget_;

  /** @} */

1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077
  //===========================================================================
  /** @name Options System
  * @{ */
  //===========================================================================

  public slots:
    /// Display the Options Browser
    void showOptionsWidget();

  signals:
    void applyOptions();
Dirk Wilden's avatar
Dirk Wilden committed
1078
    void saveOptions();
Jan Möbius's avatar
Jan Möbius committed
1079

1080 1081 1082 1083 1084
  private:

    /// Pointer to the OptionsWidget
    OptionsWidget* optionsWidget_;

Jan Möbius's avatar
Jan Möbius committed
1085 1086
  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1087 1088 1089 1090
  //===========================================================================
  /** @name ToolBar controls
  * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
1091
  private slots:
Jan Möbius's avatar
 
Jan Möbius committed
1092 1093
    /// Called by Plugins to add a Toolbar
    void slotAddToolbar(QToolBar* _toolbar);
Jan Möbius's avatar
Jan Möbius committed
1094

Jan Möbius's avatar
 
Jan Möbius committed
1095 1096 1097
    /// Called by Plugins to remove a Toolbar
    void slotRemoveToolbar(QToolBar* _toolbar);

Jan Möbius's avatar
Jan Möbius committed
1098 1099 1100
    /// Called by Plugins to get access to specific Toolbars by name
    void getToolBar( QString _name, QToolBar*& _toolbar);

Jan Möbius's avatar
 
Jan Möbius committed
1101 1102
  private :
    QToolBar* mainToolbar_;
Jan Möbius's avatar
Jan Möbius committed
1103

Jan Möbius's avatar
Jan Möbius committed
1104 1105
    std::vector< QToolBar* > toolbars_;

Jan Möbius's avatar
Jan Möbius committed
1106 1107
  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1108 1109 1110 1111 1112 1113
  //===========================================================================
  /** @name StatusBar controls
   * @{ */
  //===========================================================================
  public slots:
    void statusMessage(QString _message, int _timeout = 0);
Jan Möbius's avatar
Jan Möbius committed
1114

Jan Möbius's avatar
 
Jan Möbius committed
1115
    void clearStatusMessage();
Jan Möbius's avatar
Jan Möbius committed
1116

Jan Möbius's avatar
 
Jan Möbius committed
1117
    void setStatus( ApplicationStatus::applicationStatus _status);
Jan Möbius's avatar
Jan Möbius committed
1118

Dirk Wilden's avatar
Dirk Wilden committed
1119 1120
    void addWidgetToStatusbar(QWidget* _widget);
    
Jan Möbius's avatar
 
Jan Möbius committed
1121 1122
  private:
    void setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
1123

Jan Möbius's avatar
 
Jan Möbius committed
1124
  private :
Dirk Wilden's avatar
Dirk Wilden committed
1125
    ColorStatusBar* statusBar_;
Jan Möbius's avatar
Jan Möbius committed
1126

Jan Möbius's avatar
 
Jan Möbius committed
1127
    QLabel* statusIcon_;
Jan Möbius's avatar
Jan Möbius committed
1128 1129 1130

  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1131 1132 1133 1134
  //===========================================================================
  /** @name Drag and Drop
   * @{ */
  //===========================================================================
1135 1136 1137 1138
  
  signals:
    void dragOpenFile(QString _filename);
  
Jan Möbius's avatar
 
Jan Möbius committed
1139 1140
  private slots:
    void startDrag( QMouseEvent* _event );
Jan Möbius's avatar
Jan Möbius committed
1141

Jan Möbius's avatar
 
Jan Möbius committed
1142
    void dragEnterEvent(QDragEnterEvent* _event);
Jan Möbius's avatar
Jan Möbius committed
1143

Jan Möbius's avatar
 
Jan Möbius committed
1144
    void dropEvent( QDropEvent* _event );
1145
    
Jan Möbius's avatar
Jan Möbius committed
1146 1147
  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1148 1149
  private :

Dirk Wilden's avatar
Dirk Wilden committed
1150
  std::vector<PluginInfo>& plugins_;
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162


  //===========================================================================
  /** @name Viewer Controls
   * @{ */
  //===========================================================================

  private slots:

    /// Enable or disable Stereo
    void slotToggleStereoMode();

Jan Möbius's avatar
Jan Möbius committed
1163 1164
    /// Set Background Color for all viewers at once.
    void slotSetGlobalBackgroundColor();
1165

Jan Möbius's avatar
Jan Möbius committed
1166
    /// Set Background Color for one viewer.
1167
    void slotSetContextBackgroundColor();
1168 1169 1170



1171 1172
    /// Set the active viewer to home position
    void slotContextHomeView();
1173

1174 1175
    /// Set the viewer to home position
    void slotGlobalHomeView();
1176 1177 1178



1179 1180
    /// Set the active viewers home position
    void slotContextSetHomeView();
1181 1182

    /// Set the home position for all viewers
1183
    void slotGlobalSetHomeView();
1184 1185 1186