CoreWidget.hh 45.2 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>
97
#include <OpenFlipper/widgets/postProcessorWidget/postProcessorWidget.hh>
Jan Möbius's avatar
Jan Möbius committed
98
#include <OpenFlipper/widgets/rendererWidget/rendererWidget.hh>
Jan Möbius's avatar
Jan Möbius committed
99
#include <OpenFlipper/widgets/rendererWidget/rendererObjectWidget.hh>
Jan Möbius's avatar
 
Jan Möbius committed
100

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

103
104
#include <ACG/QtWidgets/QtSceneGraphWidget.hh>

Jan Möbius's avatar
Jan Möbius committed
105
#include <ACG/Scenegraph/DrawModes.hh>
106
#include <ACG/Scenegraph/CoordsysNode.hh>
Jan Möbius's avatar
Jan Möbius committed
107

108
#include <OpenFlipper/INIFile/INIFile.hh>
109
#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
Jan Möbius's avatar
Jan Möbius committed
110

Jan Möbius's avatar
Jan Möbius committed
111
112
113
114
/** \brief ViewMode struct
* This struct contains a ViewMode and its status information such as used widgets,toolbars or context menus
*
*/
Marcel Campen's avatar
Marcel Campen committed
115
116
117
118
119





Jan Möbius's avatar
 
Jan Möbius committed
120
struct ViewMode{
121

Jan Möbius's avatar
Jan Möbius committed
122
123
  /// Name of the View Mode
  QString name;
124

125
126
127
  /// Icon of the View Mode
  /// TODO Specify size for Icons
  QString icon;
128

Jan Möbius's avatar
Jan Möbius committed
129
130
  /// Is this a user defined custom view mode or a plugin generated one
  bool custom;
131

Jan Möbius's avatar
Jan Möbius committed
132
133
  /// List of Visible Toolboxes in this view mode
  QStringList visibleToolboxes;
134

Jan Möbius's avatar
Jan Möbius committed
135
136
  /// List of Toolbars in this view mode
  QStringList visibleToolbars;
137

Jan Möbius's avatar
Jan Möbius committed
138
139
  /// List of context Menus in this view mode
  QStringList visibleContextMenus;
Jan Möbius's avatar
 
Jan Möbius committed
140
141
142
143
144
145
146
147
148
149
150
151
152
};

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

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

/** Info struct containing information about custom context menus
 */
153
154
155
class MenuInfo {
  public:
    MenuInfo():
Jan Möbius's avatar
Jan Möbius committed
156
157
      action(0),
      type(CONTEXTBACKGROUNDMENU)
158
159
160
161
    {}

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

163
164
    /// Type of objects for which the context Menu should be visible
    DataType        contextType;
Jan Möbius's avatar
 
Jan Möbius committed
165

166
    /// Type of the context Menu ( Context for what type .. Background,Object,Node)
Jan Möbius's avatar
Jan Möbius committed
167
    ContextMenuType type;
Jan Möbius's avatar
 
Jan Möbius committed
168
169
};

Jan Möbius's avatar
Jan Möbius committed
170
171
172
173
/** \brief Struct containing information about pickModes
 *
 * This is an internal DataStructure! Don't use it. It's used to
 * manage the pickmode information internally.
174
175
176
177
178
179
180
*/
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
181
    /// Destructor
182
183
184
    ~PickMode() {};


Jan Möbius's avatar
Jan Möbius committed
185
186
187
188
    /** \brief PickMode visible
     *
     * @param _visible Should this be a visible or a hidden pick mode?
     */
189
190
    void visible(const bool _visible);

Jan Möbius's avatar
Jan Möbius committed
191
192
193
194
    /** \brief PickMode visible
     *
     * Visible or hidden pick mode
     */
195
196
    bool visible() const;

Jan Möbius's avatar
Jan Möbius committed
197
198
199
200
    /** \brief PickMode Name
    *
    * Name of the pick mode
    */
201
202
    std::string name() const;

Jan Möbius's avatar
Jan Möbius committed
203
204
205
206
207
208
209
    /** \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
     */
210
    void tracking(const bool _tracking);
Jan Möbius's avatar
Jan Möbius committed
211
212
213
214
215
216

    /** \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.
    */
217
218
    bool tracking() const;

Jan Möbius's avatar
Jan Möbius committed
219
220
221
222
223
    /** \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.
    */
224
225
    QCursor cursor() const;

226
227
228
229
230
231
232
233
234
    /** \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
235
236
237
238
239
240
241
    /** \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
    */
242
    void toolbar(QToolBar* _toolbar);
Jan Möbius's avatar
Jan Möbius committed
243
244
245
246
247
248

    /** \brief PickMode toolbar
    *
    * Each pickmode can have a toolbar that will be visible at the top of the screen.
    * This toolbar is stored here.
    */
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
    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
273
274
275
276
277
278
279
280
/** Core Widget of the Application
 */
class CoreWidget : public QMainWindow
{
  Q_OBJECT

public:

281
282
  friend class Core;

Jan Möbius's avatar
 
Jan Möbius committed
283
  /// constructor
Dirk Wilden's avatar
Dirk Wilden committed
284
  CoreWidget( QVector<ViewMode*>& _viewModes, std::vector<PluginInfo>& _plugins, QList< SlotInfo >& _coreSlots );
Jan Möbius's avatar
 
Jan Möbius committed
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300

  /// 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
301
    void showPlugins();
Jan Möbius's avatar
 
Jan Möbius committed
302
303
304
305
306
307

  private slots:

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

Dirk Wilden's avatar
Dirk Wilden committed
308
309
310
311
312
313
314
315
316
317
318
   //===========================================================================
  /** @name Logger
  * @{ */
  //===========================================================================

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

   /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
319
320
321
322
323
324
325
326
327
328
329
   //===========================================================================
  /** @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
330
331
332
    // Filter alt key events under windows
    //bool eventFilter(QObject *obj, QEvent *ev);

333
334
  private:
    //event handling
335
336
    bool event( QEvent *event );

337
338
    bool eventFilter(QObject *_obj, QEvent *_event);

Jan Möbius's avatar
 
Jan Möbius committed
339
340
  signals :

341
342
343
344
345
346
347
348
349
350
351
352
353
    /** 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
354

Dirk Wilden's avatar
Dirk Wilden committed
355
356
    ///call a scripting function
    void call( QString _expression , bool& _success  );
Dirk Wilden's avatar
Dirk Wilden committed
357
358

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

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

364
365
366
367
368
369
370
371
    /** \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
     */
372
373
    void coreKeyPressEvent();

Dirk Wilden's avatar
Dirk Wilden committed
374
375
376
377
378
    /// 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
379
    QString    getRPCName(QObject* _plugin );
Dirk Wilden's avatar
Dirk Wilden committed
380
381

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

Dirk Wilden's avatar
Dirk Wilden committed
384
385
386
387
388
389
    ///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
390
391
392
    ///list of scripting slots from core
    QList< SlotInfo >& coreSlots_;

Dirk Wilden's avatar
Dirk Wilden committed
393
  private slots:
394
395
396
397
398
     /** \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
399
400
401
402
    void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description,
                         bool _multiUse = false);

  public slots:
403
404
405
406
     /** \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
407
    void slotAddKeyMapping(int _key, Qt::KeyboardModifiers _modifiers, QObject* _plugin, int _keyBindingID);
Dirk Wilden's avatar
Dirk Wilden committed
408

409
410
411
412
413
     /** \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
414
415
    void slotRegisterSlotKeyBindings();

416
417
418
419
420
421
422
  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);

Jan Möbius's avatar
Jan Möbius committed
423
424
    void showReducedMenuBar(bool reduced);

Dirk Wilden's avatar
Dirk Wilden committed
425
426
427
428
  private:
    /// Store the state of the shift key
    bool shiftPressed_;

Jan Möbius's avatar
 
Jan Möbius committed
429
430
431
432
433
434
435
436
437
   /** @} */

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

  public:

438
439
    /// Setup the main menubar
    void setupMenuBar();
440

Dirk Wilden's avatar
Dirk Wilden committed
441
442
443
444
445
446
447
448
449
450
   /** @} */

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

  signals:
    void startVideoCapture(QString _baseName, int _fps, bool _captureViewers);
    void stopVideoCapture();
451
452
453
454

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

Dirk Wilden's avatar
Dirk Wilden committed
455
456
  private slots:
    void startVideoCaptureDialog();
457

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

Jan Möbius's avatar
Jan Möbius committed
460
461
462
463
  //===========================================================================
  /** @name Recent File Menu handling
   * @{ */
  //===========================================================================
464

Dirk Wilden's avatar
Dirk Wilden committed
465
466
  public:

Jan Möbius's avatar
 
Jan Möbius committed
467
468
469
470
471
472
473
  /// 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
474

Jan Möbius's avatar
 
Jan Möbius committed
475
476
477
478
  //===========================================================================
  /** @name GUI Controls
  * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
479

Jan Möbius's avatar
 
Jan Möbius committed
480
  public :
481
482
483
484
485
486
487
488
489
490
491
492
493
494

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

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

    /// Use native or gl painted cursor
    void setForceNativeCursor ( bool _state );

    QSize defaultIconSize();

  public slots:

Jan Möbius's avatar
 
Jan Möbius committed
495
496
    /// Set application to Fullscreen and back
    void toggleFullscreen();
Jan Möbius's avatar
Jan Möbius committed
497

498
499
500
    /// Enable or disable fullscreen mode
    void setFullscreen(bool _state );

Jan Möbius's avatar
 
Jan Möbius committed
501
502
    /// Hide or show logging area
    void toggleLogger();
503
504

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

Jan Möbius's avatar
 
Jan Möbius committed
507
508
    /// Hide or show toolbox area
    void toggleToolbox();
509
510
511
    
    /// Show or hide toolbox
    void showToolbox( bool _state );
512

513
514
515
    /// Change visibility of the Status Bar
    void toggleStatusBar();

516
517
    /// Show or hide status bar
    void showStatusBar( bool _state );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
518

519
520
    /// Show or hide menubar
    void showMenuBar( bool _state );
521

522
523
    /// Hide or show menu bar
    void toggleMenuBar();
Dirk Wilden's avatar
Dirk Wilden committed
524

525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
    /// Hide or show current toolbar
    void toggleToolBar();

    /// Show or hide toolbar, emits toolBarToggled( bool _state )
    void showToolBar( bool _state );
  signals:
    /// will be emitted if the visibility of the toolbar is changed
    void toolBarVisChanged( bool _state );

    /// will be emitted if the visibility of the toolbox is changed
    void toolBoxVisChanged( bool _state );

    /// will be emitted if the visibility of the statusbar is changed
    void statusBarVisChanged( bool _state );

    /// will be emitted if the visibility of the menubar is changed
    void menuBarVisChanged( bool _state );
542

543
544
545
    /// will be emitted if the fullscreen state is changed (_state = true => in fullscreen)
    void fullScreenChanged( bool _state );

Jan Möbius's avatar
Jan Möbius committed
546
547
  private:
    OpenFlipper::Options::LoggerState loggerState_;
Dirk Wilden's avatar
Dirk Wilden committed
548
549
    
    QSize defaultIconSize_;
550

Jan Möbius's avatar
 
Jan Möbius committed
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
  /** @} */

  //===========================================================================
    /** @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:

Jan Möbius's avatar
Jan Möbius committed
568
      QAction* viewModeButton_;
Jan Möbius's avatar
 
Jan Möbius committed
569
570
571
572
573
574
575
576
577

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

    public slots:

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

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

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

584
      /// Add or change Toolbars for a ViewMode (non-userdefined viewMode)
585
586
      void slotAddViewModeToolbars(QString _mode, QStringList _usedToolbars);

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

Jan Möbius's avatar
Marlin:    
Jan Möbius committed
590
591
592
593
594
595
596
597
      /// 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);
598

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

Jan Möbius's avatar
Jan Möbius committed
602
603
      /// 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
604
605

      /// Slot for Changing visible toolWidgets
606
      void slotChangeView(QString _mode, QStringList _toolboxWidgets, QStringList _toolbars, QStringList _contextmenus, bool _expandAll = false);
607
608
      
      /// Set orientation of tool box (either on the right or the left side of the screen)
609
      void setToolBoxOrientationOnTheRight(bool _toolBoxRight);
610
611
612
      
      /// Hide or show the View Mode controls
      void showViewModeControls(bool _show);
Jan Möbius's avatar
 
Jan Möbius committed
613

Marcel Campen's avatar
Marcel Campen committed
614
615
616
      /// Hide the context menu
      void slotHideContextMenu();

Jan Möbius's avatar
 
Jan Möbius committed
617
618
619
620
621
622
623
    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
624
      /// Show a dialog in which the viewMode can be edited
Jan Möbius's avatar
 
Jan Möbius committed
625
      void slotViewModeDialog();
626

Jan Möbius's avatar
Jan Möbius committed
627
628
      /// Show a dialog in which the viewMode can be changed
      void slotViewChangeDialog();
Jan Möbius's avatar
 
Jan Möbius committed
629
630

    public slots :
631
632
      
      /// Set the view Mode to the given Mode
633
      void setViewMode( QString _mode, bool _expandAll = false );
634
635
      
      /// Move a specific toolbox widget to the top of the side area
636
      void moveToolBoxToTop(QString _name);
637
638
      
      /// Move a specific toolbox widget to the bottom of the side area
639
      void moveToolBoxToBottom(QString _name);
Jan Möbius's avatar
 
Jan Möbius committed
640
641
642
643
644
645
646
647
648
649

   /** @} */



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

650
  private:
Jan Möbius's avatar
 
Jan Möbius committed
651
652

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

Jan Möbius's avatar
 
Jan Möbius committed
655
656
    ///Spliter between toplevel objects and the textedit at the bottom
    QSplitter* splitter_;
Jan Möbius's avatar
Jan Möbius committed
657

658
659
660
    /// Group box containing Task Switcher Controls
    QGroupBox *viewModeControlBox_;
    
Jan Möbius's avatar
 
Jan Möbius committed
661
    /// Textedit at the bottom for log messages
662
    LoggerWidget* logWidget_;
Jan Möbius's avatar
Jan Möbius committed
663

Jan Möbius's avatar
 
Jan Möbius committed
664
665
666
667
668
669
    /// Size of the logging window ( defaults to 240 )
    int originalLoggerSize_;

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

670
671
672
    /// Algorithms Menu
    QMenu* algorithmMenu_;

Jan Möbius's avatar
 
Jan Möbius committed
673
674
    /// Help Menu
    QMenu* helpMenu_;
675
676
677
678
679
680
681
    
    /// Window Menu
    QMenu* windowMenu_;
    
    /// Action for View Mode Widget Conrol in Menu
    QAction* AC_ShowViewModeControls_;
    
Jan Möbius's avatar
   
Jan Möbius committed
682
683
684
685
686
687
688
689
690
691
692
693
694
    /// 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
695
    QtMultiViewLayout* baseLayout_;
Jan Möbius's avatar
   
Jan Möbius committed
696

697
698
699
    /// Class that holds the animated log widget
    QtSlideWindow* slidingLogger_;

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
700
701
    /// Widget for toolBox
    QWidget* toolBoxArea_;
702

Jan Möbius's avatar
Jan Möbius committed
703
704
    /// Button to change viewModes
    QPushButton* vmChangeButton_;
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
705
706
707
708
709
710
711
712
713
714

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

    /// Toolbox
    SideArea* toolBox_;

    /// Toolbox scroll area
    QScrollArea* toolBoxScroll_;

715
    /// Handle to picking toolbar
Jan Möbius's avatar
Jan Möbius committed
716
    typedef std::map<QToolBar*,QGraphicsProxyWidget*> PickToolBarMap;
717
    PickToolBarMap curPickingToolbarItems_;
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
718

719
720
721
    /// Extra toolbar not in scene for picking
    QToolBar* pickToolBarExternal_;

722
723
724
    /// Store all toolbars that once have been registered
    std::set<QToolBar*> registeredToolbars_;

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
725
726
727
    /// Cursor handling
    CursorPainter* cursorPainter_;

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

729
730
731
    // widget showing the scenegraph
    ACG::QtWidgets::QtSceneGraphDialog* sceneGraphDialog_;

Jan Möbius's avatar
 
Jan Möbius committed
732
733
734
  /** @} */

  private slots:
735
736
737
738
739
740

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


741
742
743
744
745
   /** Makes the sender examiner active
    */
   void slotActivateExaminer ();


Jan Möbius's avatar
 
Jan Möbius committed
746
747
748
749
750
751
   /** 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
752
753
   /** Updates the size of the main graphics widget in the scene
     */
754
   void sceneRectChanged(const QRectF &rect);
Jan Möbius's avatar
   
Jan Möbius committed
755

Jan Möbius's avatar
 
Jan Möbius committed
756
757
758
759
760
761
  //===========================================================================
    /** @name Menubar controls
      * @{ */
  //===========================================================================
  private slots :

Jan Möbius's avatar
Jan Möbius committed
762
763
    void slotAddMenubarAction( QAction* _action , QString _name );
    void slotGetMenubarMenu (QString _name, QMenu *& _menu, bool _create);
Jan Möbius's avatar
 
Jan Möbius committed
764
765
766
767
768
769
770
771

  private:

    /// File Menu
    QMenu *fileMenu_;

    /// View Menu
    QMenu *viewMenu_;
772

773
774
    /// Tools Menu
    QMenu *toolsMenu_;
Jan Möbius's avatar
 
Jan Möbius committed
775
776
777
778

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

Jan Möbius's avatar
Jan Möbius committed
779
780
781
    /// All available menus
    QMap<QString, QMenu *> menus_;

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

Jan Möbius's avatar
 
Jan Möbius committed
784
785
786
787
  //===========================================================================
    /** @name ToolBar controls
      * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
788
  private:
Jan Möbius's avatar
 
Jan Möbius committed
789
    QToolBar* viewerToolbar_;
Dirk Wilden's avatar
Dirk Wilden committed
790
791

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

793
794
795
796
797
    QToolButton* stereoButton_;
    QToolButton* moveButton_;
    QToolButton* pickButton_;
    QToolButton* questionButton_;

798
    QComboBox* viewerLayoutBox_;
799

Jan Möbius's avatar
 
Jan Möbius committed
800
801
802
  /** @} */

  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
803
    /** @name View Menu
Jan Möbius's avatar
 
Jan Möbius committed
804
805
      * @{ */
  //===========================================================================
806

Jan Möbius's avatar
Jan Möbius committed
807
808
809
  public slots:
    /// Setup and update the global draw menu
    void slotUpdateGlobalDrawMenu();
810

811
812
813
814
815
    /// Setup and update the global renderer menu
    void slotUpdateRendererMenu();

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

817
818
    /// Change viewer layout that was selected in the combo box
    void setViewerLayout(int _idx);
819

820
821
  private slots:
    /// Switches over to the next view mode
822
    void nextViewerLayout();
823

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

827
828
    /// Called before the view Menu is shown
    void slotViewMenuAboutToShow();
829

830
831
832
833
834
835
    /// 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
836
837
838
  private:
    /// This variable holds the global draw menu
    QMenu* globalDrawMenu_;
839

840
841
842
843
844
845
    /// This variable holds the global renderer menu
    QMenu* rendererMenu_;

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

846
847
    QActionGroup * drawGroup_;

848
849
850
851
852
853
    /// Group for all renderers
    QActionGroup * rendererGroup_;

    /// Group for all postprocessors
    QActionGroup *  postProcessorGroup_;

Jan Möbius's avatar
Jan Möbius committed
854
855
    /// Group for all menu items
    QActionGroup* viewGroup_;
856

857
858
    QAction* perspectiveProjectionAction_;
    QAction* orthogonalProjectionAction_;
859

860
    /// Action to globally set animation
861
    QAction* globalAnimationAction_;
862

863
864
    /// Action to globally set backface culling
    QAction* globalBackfaceCullingAction_;
865

866
    /// Action to globally set two-sided lighting
867
868
    QAction* globalTwosidedLightingAction_;

869
    /// Action to globally set multisampling
870
    QAction* globalMultisamplingAction_;
871
872
873
    
    /// Action to globally set mipmapping
    QAction* globalMipmappingAction_;
874

Jan Möbius's avatar
Jan Möbius committed
875
    ACG::SceneGraph::DrawModes::DrawMode activeDrawModes_;
876

Jan Möbius's avatar
Jan Möbius committed
877
    ACG::SceneGraph::DrawModes::DrawMode availableGlobalDrawModes_;
878

Jan Möbius's avatar
Jan Möbius committed
879
880
881
882
883
884
  /** @} */

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

Jan Möbius's avatar
 
Jan Möbius committed
886
  signals :
887
888
889
890
891
892
893
894
895
    /// 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
896
897
898
899
900

  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
901
902
    /// 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
903

Jan Möbius's avatar
   
Jan Möbius committed
904
905
    /// 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
906
907
908
    
    /// called by slotAddContextItem to add the item to the view mode
    void slotAddContextItemToViewMode( QAction* _entry );
Jan Möbius's avatar
 
Jan Möbius committed
909

910
911
912
    /// Paste the view to the last active examiner
    void slotPasteView( );

913
914
915
    /// Paste the view, the window and toolbox size to the last active examiner
    void slotPasteViewAndWindow( );

916
917
918
    /// Set the supplied serialized view
    void slotSetView( QString view );

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

922
923
    /// Called when a coordsys drawMode has been changed
    void slotViewerDrawMenu( QAction * _action );
924

925
926
927
    /// Called when a different post processor has been chosen
    void slotPostProcessorMenu( QAction * _action);

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

931
932
    /// Creates a draw Menu for the currently active Viewer
    void slotUpdateViewerDrawMenu();
933

Dirk Wilden's avatar
Dirk Wilden committed
934
    /// Create a snapshot of the last active examiner
935
    void slotExaminerSnapshot();
Dirk Wilden's avatar
Dirk Wilden committed
936

937
938
939
    /// Show / hide wheels
    void slotSwitchWheels(bool _state);

940
941
942
    /// Switch navigation mode
    void slotSwitchNavigation(bool _egomode);

Dirk Wilden's avatar
Dirk Wilden committed
943
944
945
    /// Set the snapShot name for all examiners
    void slotSnapshotName();

Dirk Wilden's avatar
Dirk Wilden committed
946
947
948
    /// Hide coordinate systems in all viewers
    void slotCoordSysVisibility(bool _visible);

Jan Möbius's avatar
 
Jan Möbius committed
949
  private :
Jan Möbius's avatar
Jan Möbius committed
950
951
952
953
    /** Update the contextmenu for the given position inside an examiner widget
     *
     * @param _point      Picking position in coordinates of the viewer
     */
954
955
    void updatePopupMenu(const QPoint& _point);

956
957
    void updatePopupMenuCoordsysNode(QMenu* _menu , const int _part);
    void updatePopupMenuObject(QMenu* _menu , BaseObjectData* _object );
Jan Möbius's avatar
Jan Möbius committed
958
    void updatePopupMenuBackground(QMenu* _menu , const QPoint& _point);
959
960
961
    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
962
963
964
965
966
967
968
969
970
971

  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_;
972

973
974
    /// DrawGroup for per Viewer Draw Modes
    QActionGroup* drawGroupViewer_;
975

976
977
    /// Draw Menu for per Viewer Draw Modes
    QMenu* viewerDrawMenu_;
Jan Möbius's avatar
 
Jan Möbius committed
978

979
980
981
982
    /// Menu which holds the context menu entries for
    /// the coordsys node if invisible
    QMenu* coordSysMenu_;

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

Dirk Wilden's avatar
Dirk Wilden committed
985
986
987
988
989
990
991
992
993
994
995
996
997
  //===========================================================================
    /** @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
998
    void viewerSnapshotDialog();
Dirk Wilden's avatar
Dirk Wilden committed
999
1000

    /// Create a snapshot of the whole app
Dirk Wilden's avatar
Dirk Wilden committed
1001
    void viewerSnapshot();
Dirk Wilden's avatar
Dirk Wilden committed
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014

    /// 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);


  /** @} */

1015
1016
1017
1018
1019
1020
1021
  //===========================================================================
    /** @name Thread-safe functions using QFuture
    * @{ */
  //===========================================================================

  public:

1022
    void writeImageAsynchronously(QImage* _image, const QString _name);
1023
1024
1025
1026
1027
1028

  private:

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

1029
1030
1031
    // Mutex for operations on map
    QMutex map_mutex_;

1032
1033
1034
1035
1036
1037
  private slots:

    void delete_garbage();

  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
  //===========================================================================
    /** @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_;

1059
  public :
Jan Möbius's avatar
 
Jan Möbius committed
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
    /// Container widget for holding multiple views
    QStackedWidget* stackedWidget_;

  /** @} */

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

1070
1071
1072
  private:
    static const QString homePage_;

Jan Möbius's avatar
 
Jan Möbius committed
1073
1074
  public slots:
    /// Display the help Browser
1075
    void showHelpBrowser(const QString &page = homePage_);
1076
1077
1078

  signals:
   void changeHelpSite(QUrl);
Jan Möbius's avatar
 
Jan Möbius committed
1079
1080
1081

  private:
    /// Pointer to the help Browser
1082
    HelpWidget* helpWidget_;
Jan Möbius's avatar
 
Jan Möbius committed
1083
1084

  /** @} */
1085

1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
  //===========================================================================
  /** @name PostProcessor dialog
   * @{ */
  //===========================================================================


  public slots:

    void slotShowPostProcessorManager();

  private:
    PostProcessorDialog* postProcessorDialog_;

  /** @} */

Jan Möbius's avatar
Jan Möbius committed
1101
1102
1103
1104
1105
1106
1107
1108
  //===========================================================================
  /** @name Renderer dialog
   * @{ */
    //===========================================================================


    public slots:

Jan Möbius's avatar
Jan Möbius committed
1109
      /// shows the widget for the rendermanager
Jan Möbius's avatar
Jan Möbius committed
1110
1111
      void slotShowRenderManager();

Jan Möbius's avatar
Jan Möbius committed
1112
1113
1114
      /// Shows the widget containing the current render objects
      void slotShowRenderObjectWidget();

Jan Möbius's avatar
Jan Möbius committed
1115
    private:
Jan Möbius's avatar
Jan Möbius committed
1116
1117
      RendererDialog*       rendererDialog_;
      RendererObjectWidget* rendererObjectWidget_;
Jan Möbius's avatar
Jan Möbius committed
1118
1119
1120

    /** @} */

1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
  //===========================================================================
  /** @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
1131
1132
1133
    /// 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);
1134
1135
1136
1137
1138
1139
1140
1141


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

  /** @} */

Jan Möbius's avatar
Jan Möbius committed
1142
1143
1144
1145
1146
1147
1148
1149
1150
  //===========================================================================
  /** @name About System
  * @{ */
  //===========================================================================

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

Jan Möbius's avatar
Jan Möbius committed
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
    /** \brief Adds an entry to the about dialog
     *
     * @param _text     Content of the tab
     * @param _tabName  Header of the tab
     */
    void addAboutInfo(QString _text, QString _tabName );

  private:
    /** \brief Add license information about core parts
     *
     * Adds the license information to the about dialog for used libraries.
     */
    void addCoreLicenseInfo();

Jan Möbius's avatar
Jan Möbius committed
1165
1166
1167
1168
  private:
    /// Pointer to the about widget
    AboutWidget* aboutWidget_;

Jan Möbius's avatar
Jan Möbius committed
1169
1170
1171
    /// Additional tab information, that could be provided by plugins
    QMap<QString,QString> additionalAboutTabs_;

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

1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
  //===========================================================================
  /** @name Options System
  * @{ */
  //===========================================================================

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

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

1187
1188
1189
1190
1191
  private:

    /// Pointer to the OptionsWidget
    OptionsWidget* optionsWidget_;

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

Jan Möbius's avatar
 
Jan Möbius committed
1194
1195
1196
1197
  //===========================================================================
  /** @name ToolBar controls
  * @{ */
  //===========================================================================
Jan Möbius's avatar
Jan Möbius committed
1198
  private slots:
Jan Möbius's avatar
 
Jan Möbius committed
1199
1200
    /// Called by Plugins to add a Toolbar
    void slotAddToolbar(QToolBar* _toolbar);
Jan Möbius's avatar
Jan Möbius committed
1201

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

Jan Möbius's avatar
Jan Möbius committed
1205
1206
1207
    /// 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
1208
1209
  private :
    QToolBar* mainToolbar_;
Jan Möbius's avatar
Jan Möbius committed
1210

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

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

Jan Möbius's avatar
 
Jan Möbius committed
1215
1216
1217
1218
1219
1220
  //===========================================================================
  /** @name StatusBar controls
   * @{ */
  //===========================================================================
  public slots:
    void statusMessage(QString _message, int _timeout = 0);
Jan Möbius's avatar
Jan Möbius committed
1221

Jan Möbius's avatar
 
Jan Möbius committed
1222
    void clearStatusMessage();
Jan Möbius's avatar
Jan Möbius committed
1223

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

Dirk Wilden's avatar
Dirk Wilden committed
1226
1227
    void addWidgetToStatusbar(QWidget* _widget);
    
Jan Möbius's avatar
 
Jan Möbius committed
1228
1229
  private:
    void setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
1230

Jan Möbius's avatar
 
Jan Möbius committed
1231
  private :
Dirk Wilden's avatar
Dirk Wilden committed
1232
    ColorStatusBar* statusBar_;
Jan Möbius's avatar
Jan Möbius committed
1233

Jan Möbius's avatar
 
Jan Möbius committed
1234
    QLabel* statusIcon_;
Jan Möbius's avatar
Jan Möbius committed
1235
1236
1237

  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1238
1239
1240
1241
  //===========================================================================
  /** @name Drag and Drop
   * @{ */
  //===========================================================================
1242
1243
1244
1245
  
  signals:
    void dragOpenFile(QString _filename);
  
Jan Möbius's avatar
 
Jan Möbius committed
1246
1247
  private slots:
    void startDrag( QMouseEvent* _event );
Jan Möbius's avatar
Jan Möbius committed
1248

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

Jan Möbius's avatar
 
Jan Möbius committed
1251
    void dropEvent( QDropEvent* _event );
1252
    
Jan Möbius's avatar
Jan Möbius committed
1253
1254
  /** @} */

Jan Möbius's avatar
 
Jan Möbius committed
1255
1256
  private :

Dirk Wilden's avatar
Dirk Wilden committed
1257
  std::vector<PluginInfo>& plugins_;
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269


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

  private slots:

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

Jan Möbius's avatar
Jan Möbius committed
1270
1271
    /// Set Background Color for all viewers at once.
    void slotSetGlobalBackgroundColor();
1272

Jan Möbius's avatar
Jan Möbius committed
1273
    /// Set Background Color for one viewer.
1274
    void slotSetContextBackgroundColor();
1275
1276
1277



1278
1279
    /// Set the active viewer to home position
    void slotContextHomeView();
1280

1281
1282
    /// Set the viewer to home position
    void slotGlobalHomeView();
1283
1284
1285



1286
1287
    /// Set the active viewers home position
    void slotContextSetHomeView();
1288
1289

    /// Set the home position for all viewers
1290
    void slotGlobalSetHomeView();
1291
1292
1293



1294
1295
1296
1297
1298
    /// Change view on active viewer to view complete scene
    void slotContextViewAll();

    /// Change view on all viewers to view complete scene
    void slotGlobalViewAll();
1299
1300


1301
    /// Toggle projection mode of the active viewer.
1302
    void slotContextSwitchProjection();
1303
1304
1305
1306
1307
1308
    
    /// Toggle coordsys projection mode of the active viewer.
    ACG::SceneGraph::CoordsysNode::ProjectionMode getCoordsysProjection();
    
    /// Toggle coordsys projection mode of the active viewer.
    void slotContextSwitchCoordsysProjection();
Jan Möbius's avatar