CoreWidget.cc 35.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
38
39
40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
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 MViewWidget - IMPLEMENTATION
//
//=============================================================================


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

// -------------------- mview
#include "CoreWidget.hh"

// -------------------- OpenFlipper Includes
#include <OpenFlipper/common/GlobalOptions.hh>
#include <OpenFlipper/common/RecentFiles.hh>
#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
Jan Möbius's avatar
   
Jan Möbius committed
61
#include <OpenFlipper/BasePlugin/PluginFunctionsCore.hh>
Dirk Wilden's avatar
Dirk Wilden committed
62
63
#include <OpenFlipper/BasePlugin/KeyInterface.hh>
#include <OpenFlipper/BasePlugin/LoggingInterface.hh>
Jan Möbius's avatar
 
Jan Möbius committed
64

Dirk Wilden's avatar
Dirk Wilden committed
65
66
#include <OpenFlipper/widgets/videoCaptureDialog/VideoCaptureDialog.hh>

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
67
68
#include <OpenFlipper/widgets/glWidget/CursorPainter.hh>

Jan Möbius's avatar
 
Jan Möbius committed
69
70
71
#define WIDGET_HEIGHT 800
#define WIDGET_WIDTH  800

Jan Möbius's avatar
Jan Möbius committed
72
//== IMPLEMENTATION ==========================================================
Jan Möbius's avatar
 
Jan Möbius committed
73

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
PickMode::PickMode(const std::string& _n, const bool _t, const bool _v, QCursor _c, QToolBar *_tb ) :
      name_(_n),
      tracking_(_t),
      visible_(_v),
      cursor_(_c),
      toolbar_(_tb)
{

}

void PickMode::visible(const bool _visible) {
  visible_ = _visible;
}

bool PickMode::visible() const  {
  return visible_;
}

std::string PickMode::name() const {
  return name_;
}

void PickMode::tracking(bool _tracking) {
  tracking_ = _tracking;
}

bool PickMode::tracking() const {
  return tracking_;
}

104
105
106
107
void PickMode::cursor(const QCursor _cursor) {
  cursor_ = _cursor;
}

108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
QCursor PickMode::cursor() const{
  return cursor_;
}

void PickMode::toolbar(QToolBar* _toolbar) {
  toolbar_ = _toolbar;
}

QToolBar * PickMode::toolbar() const {
  return toolbar_;
}









128
/** \brief Constructor for the Core Widget
Jan Möbius's avatar
Jan Möbius committed
129
 *
Jan Möbius's avatar
 
Jan Möbius committed
130
131
*/
CoreWidget::
Dirk Wilden's avatar
Dirk Wilden committed
132
CoreWidget( QVector<ViewMode*>& _viewModes,
Dirk Wilden's avatar
Dirk Wilden committed
133
134
            std::vector<PluginInfo>& _plugins,
            QList< SlotInfo >& _coreSlots ) :
Jan Möbius's avatar
 
Jan Möbius committed
135
  QMainWindow(),
Dirk Wilden's avatar
Dirk Wilden committed
136
  coreSlots_(_coreSlots),
Dirk Wilden's avatar
Dirk Wilden committed
137
  shiftPressed_(false),
Dirk Wilden's avatar
Dirk Wilden committed
138
  fullscreenState_(0),
Jan Möbius's avatar
 
Jan Möbius committed
139
140
  viewModes_(_viewModes),
  viewModeButton_(0),
141
  viewModeMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
142
  splitter_(0),
143
  logWidget_(0),
Jan Möbius's avatar
 
Jan Möbius committed
144
  recentFilesMenu_(0),
145
  helpMenu_(0),
146
147
148
  windowMenu_(0),
  AC_ShowViewModeControls_(0),
  AC_ShowToolbox_(0),
149
  pickToolBarExternal_(0),
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
150
  cursorPainter_(0),
151
  sceneGraphDialog_(0),
152
153
154
  fileMenu_(0),
  viewMenu_(0),
  toolsMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
155
  fileMenuEnd_(0),
156
157
158
  stereoButton_(0),
  moveButton_(0),
  pickButton_(0),
Dirk Wilden's avatar
Dirk Wilden committed
159
  questionButton_(0),
160
  globalDrawMenu_(0),
161
162
  rendererMenu_(0),
  postprocessorMenu_(0),
163
  drawGroup_(0),
164
165
  rendererGroup_(0),
  postProcessorGroup_(0),
166
  viewGroup_(0),
167
  perspectiveProjectionAction_(0),
168
169
  activeDrawModes_(0),
  availableGlobalDrawModes_(0),
Jan Möbius's avatar
 
Jan Möbius committed
170
  contextMenu_(0),
Jan Möbius's avatar
Jan Möbius committed
171
  contextSelectionMenu_(0),
172
173
  drawGroupViewer_(0),
  viewerDrawMenu_(0),
174
  coordSysMenu_(0),
175
  snapshotName_(""),
Dirk Wilden's avatar
Dirk Wilden committed
176
  snapshotCounter_(0),
Jan Möbius's avatar
 
Jan Möbius committed
177
  stackMenu_(0),
178
  helpWidget_(0),
179
  stereoSettingsWidget_(0),
Jan Möbius's avatar
Jan Möbius committed
180
  aboutWidget_(0),
181
  optionsWidget_(0),
182
  plugins_(_plugins),
183
184
185
186
187
188
  stereoActive_(false),
  actionMode_(Viewer::PickingMode),
  lastActionMode_(Viewer::ExamineMode),
  pickMenu_(0),
  pick_mode_name_(""),
  pick_mode_idx_(-1)
Jan Möbius's avatar
 
Jan Möbius committed
189
190
{
  setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
191

Dirk Wilden's avatar
Dirk Wilden committed
192
193
  defaultIconSize_ = iconSize();

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
194
195
196
197
198
  toolSplitter_ = new QSplitter(Qt::Horizontal,this);

  setCentralWidget(toolSplitter_);

  splitter_ = new QSplitter(Qt::Vertical,toolSplitter_);
Jan Möbius's avatar
 
Jan Möbius committed
199
  stackedWidget_ = new QStackedWidget(splitter_);
Jan Möbius's avatar
Jan Möbius committed
200

201
202
  QGLFormat format = QGLFormat::defaultFormat();

203
204
205
  #ifdef ARCH_DARWIN
  format.setStereo(false);
  #else
Jan Möbius's avatar
   
Jan Möbius committed
206
  format.setStereo( OpenFlipper::Options::stereo() );
207
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
208
  format.setAlpha(true);
209
  format.setStencil(true);
210
211
  format.setSampleBuffers(true);
  QGLFormat::setDefaultFormat(format);
Jan Möbius's avatar
   
Jan Möbius committed
212
213

  // Construct GL context & widget
214
215
216
  baseLayout_ = new QtMultiViewLayout;
  baseLayout_->setContentsMargins(0,0,0,0);

217
218
219
  // ===============================================================================
  // Test context capabilities ...
  // If we get stereo buffers, we use them .. which might disable multisampling
220
  // If we don't have stereo, we disable it to not interfere with multisampling
221
222
223
224
225
226
227
228
229
230
231
232
233
  // ===============================================================================
  QGLWidget* test = new QGLWidget(format);
  if ( ! test->format().stereo() ) {
    //     std::cerr << "No stereo ... disabling stereo for real context!" << std::endl;
    format.setStereo(false);
    QGLFormat::setDefaultFormat(format);
  }/* else {
    std::cerr << "Stereo found ok" << std::endl;
  }*/

  delete test;

  glWidget_ = new QGLWidget(format,0);
234
  PluginFunctions::shareGLWidget (glWidget_);
235

Jan Möbius's avatar
   
Jan Möbius committed
236
  glView_ = new QtGLGraphicsView(stackedWidget_);
237
  glScene_ = new QtGLGraphicsScene (&examiner_widgets_, baseLayout_);
Jan Möbius's avatar
   
Jan Möbius committed
238

Jan Möbius's avatar
Jan Möbius committed
239
  // is stereo possible, use it?
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
240
  OpenFlipper::Options::glStereo(glWidget_->format().stereo());
Jan Möbius's avatar
Jan Möbius committed
241

Jan Möbius's avatar
   
Jan Möbius committed
242
243
244
  glView_->setViewport(glWidget_);
  glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
  glView_->setScene(glScene_);
245
  glView_->setFrameStyle(QFrame::NoFrame);
Jan Möbius's avatar
   
Jan Möbius committed
246

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
247
248
  // gl widget as parent to make sure that the CursorPainter will be deleted before
  cursorPainter_ = new CursorPainter (glWidget_);
Jan Möbius's avatar
Jan Möbius committed
249
  cursorPainter_->setForceNative (OpenFlipperSettings().value("Core/Gui/glViewer/nativeMouse",false).toBool() );
250
  cursorPainter_->setEnabled (stereoActive_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
251
  glScene_->setCursorPainter (cursorPainter_);
252

Jan Möbius's avatar
   
Jan Möbius committed
253
254
255
256
257
258
259
260
261
262
  centerWidget_ = new QGraphicsWidget;
  glScene_->addItem(centerWidget_);
  centerWidget_->setGeometry (glScene_->sceneRect ());

  connect ( glView_, SIGNAL( sceneRectChanged( const QRectF & ) ),
            this, SLOT( sceneRectChanged( const QRectF & ) ) );

  stackedWidget_->addWidget(glView_);
  stackWidgetList_.push_back( StackWidgetInfo( false, "3D Examiner Widget", glView_ ) );

Jan Möbius's avatar
 
Jan Möbius committed
263
264
265
  // ======================================================================
  // Set up the logging window
  // ======================================================================
266

267
  slidingLogger_ = new QtSlideWindow (tr("Log Viewer"), centerWidget_);
268

269
270
  logWidget_ = new LoggerWidget(splitter_);
  logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
271
  logWidget_->resize( splitter_->width() ,240);
Jan Möbius's avatar
Jan Möbius committed
272

273
  originalLoggerSize_ = 0;
Jan Möbius's avatar
Jan Möbius committed
274
  loggerState_ = OpenFlipper::Options::Normal;
275

276
277
278
279
280
  QList<int> wsizes(splitter_->sizes());
  // Set initial values to have a usable state
  wsizes[0] = 480;
  wsizes[1] = 240;
  splitter_->setSizes(wsizes);
281

Jan Möbius's avatar
Jan Möbius committed
282
  if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::InScene) {
283

284
    slidingLogger_->attachWidget (logWidget_);
285
    showLoggerInSplitView(false);
Jan Möbius's avatar
Jan Möbius committed
286
    loggerState_ = OpenFlipper::Options::InScene;
287

Jan Möbius's avatar
Jan Möbius committed
288
  } else if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::Hidden) {
289

290
    showLoggerInSplitView(false);
Jan Möbius's avatar
Jan Möbius committed
291
292
    loggerState_ = OpenFlipper::Options::Hidden;
  } else {
293
294

    showLoggerInSplitView(true);
Jan Möbius's avatar
 
Jan Möbius committed
295
  }
Jan Möbius's avatar
Jan Möbius committed
296

297

Jan Möbius's avatar
 
Jan Möbius committed
298
299
300
  // ======================================================================
  // Create examiner
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
301

Jan Möbius's avatar
Jan Möbius committed
302
  if ( !OpenFlipperSettings().value("Core/Gui/glViewer/useMultipleViewers",true).toBool() ) {
Jan Möbius's avatar
Jan Möbius committed
303

Jan Möbius's avatar
   
Jan Möbius committed
304
305
    glViewer* examinerWidget = new glViewer(glScene_,
					    glWidget_,
306
                                            PluginFunctions::viewerProperties(0),
307
					    centerWidget_);
Jan Möbius's avatar
Jan Möbius committed
308

Jan Möbius's avatar
Jan Möbius committed
309
310
311
    examiner_widgets_.push_back(examinerWidget);

    examinerWidget->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
Jan Möbius's avatar
Jan Möbius committed
312

Jan Möbius's avatar
Jan Möbius committed
313
    baseLayout_->addItem(examinerWidget, 0);
Jan Möbius's avatar
Jan Möbius committed
314

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
315
316
    cursorPainter_->registerViewer (examinerWidget);

Jan Möbius's avatar
Jan Möbius committed
317
318
319
  } else {


Jan Möbius's avatar
   
Jan Möbius committed
320
321
322
323
    // Create examiners
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
      glViewer* newWidget = new glViewer(glScene_,
					 glWidget_,
324
                                         PluginFunctions::viewerProperties(i),
325
					 centerWidget_);
Dirk Wilden's avatar
Dirk Wilden committed
326

Jan Möbius's avatar
Jan Möbius committed
327
      examiner_widgets_.push_back(newWidget);
328
329
330
331
332
333
334
335
336
337

      connect (&PluginFunctions::viewerProperties(i), SIGNAL( getPickMode(std::string&) ),
               this,                                   SLOT( getPickMode(std::string&) ),Qt::DirectConnection );
      connect (&PluginFunctions::viewerProperties(i), SIGNAL( setPickMode(const std::string) ),
               this,                                   SLOT( setPickMode(const std::string) ),Qt::DirectConnection );
      connect (&PluginFunctions::viewerProperties(i), SIGNAL( getActionMode(Viewer::ActionMode&) ),
               this,                                   SLOT( getActionMode(Viewer::ActionMode&) ),Qt::DirectConnection );
      connect (&PluginFunctions::viewerProperties(i), SIGNAL( setActionMode(const Viewer::ActionMode) ),
               this,                                   SLOT( setActionMode(const Viewer::ActionMode)), Qt::DirectConnection );

338
      connect (&PluginFunctions::viewerProperties(i), SIGNAL( drawModeChanged(int)), this, SIGNAL(drawModeChanged(int)));
Jan Möbius's avatar
Jan Möbius committed
339
340
341
342
343
    }

    // Initialize all examiners
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
      examiner_widgets_[i]->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
344
      cursorPainter_->registerViewer (examiner_widgets_[i]);
Jan Möbius's avatar
Jan Möbius committed
345
346
    }

Jan Möbius's avatar
Jan Möbius committed
347
348
349
350
    baseLayout_->addItem(examiner_widgets_[0],0);
    baseLayout_->addItem(examiner_widgets_[1],1);
    baseLayout_->addItem(examiner_widgets_[2],2);
    baseLayout_->addItem(examiner_widgets_[3],3);
Jan Möbius's avatar
Jan Möbius committed
351
352
  }

Jan Möbius's avatar
   
Jan Möbius committed
353
354
355
  // Make examiner available to the plugins ( defined in PluginFunctions.hh)
  PluginFunctions::setViewers( examiner_widgets_ );

Jan Möbius's avatar
   
Jan Möbius committed
356
  centerWidget_->setLayout(baseLayout_);
357
358


Jan Möbius's avatar
 
Jan Möbius committed
359
360
361
  // ======================================================================
  // Setup dragging for examiner widget
  // ======================================================================
362
363
364
365
366
367
368
369
  for ( uint i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {

    connect( examiner_widgets_[i], SIGNAL(startDragEvent( QMouseEvent*)),
             this, SLOT(startDrag(QMouseEvent* )));
    connect( examiner_widgets_[i], SIGNAL(dragEnterEvent( QDragEnterEvent*)),
            this, SLOT(dragEnterEvent(QDragEnterEvent* )));
    connect( examiner_widgets_[i], SIGNAL(dropEvent( QDropEvent*)),
            this, SLOT(dropEvent(QDropEvent* )));
370
371
    connect (examiner_widgets_[i], SIGNAL(signalMakeActive ()),
             this, SLOT(slotActivateExaminer()));
372
373
374

    connect (examiner_widgets_[i], SIGNAL(statusMessage(QString, int)),
             statusBar_, SLOT(showMessage(const QString&, int)));
Jan Möbius's avatar
Jan Möbius committed
375
376
377
  }


Jan Möbius's avatar
 
Jan Möbius committed
378
379
380
  // ======================================================================
  // Create main Toolbar
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
381

Jan Möbius's avatar
Jan Möbius committed
382
383
384
  mainToolbar_ = new QToolBar(tr("Main Toolbar"));
  mainToolbar_->setWindowTitle(tr("Main Toolbar"));
  mainToolbar_->setObjectName(tr("MainToolbar"));
385
  slotAddToolbar(mainToolbar_);
Jan Möbius's avatar
Jan Möbius committed
386

Jan Möbius's avatar
 
Jan Möbius committed
387
388
389
  // ======================================================================
  // Get Toolbar from examiner and integrate it into main window
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
390

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

392
  // Create the toolbar
Jan Möbius's avatar
Jan Möbius committed
393
  viewerToolbar_ = new QToolBar( tr("Viewer Toolbar" ), this );
394
  viewerToolbar_->setOrientation(Qt::Vertical);
Jan Möbius's avatar
 
Jan Möbius committed
395
396
  viewerToolbar_->setAllowedAreas(Qt::AllToolBarAreas);
  viewerToolbar_->setIconSize(QSize(20,20));
Jan Möbius's avatar
Jan Möbius committed
397
  viewerToolbar_->setObjectName(tr("ViewerToolbar"));
398

Jan Möbius's avatar
Jan Möbius committed
399
  slotAddToolbar(viewerToolbar_);
Jan Möbius's avatar
Jan Möbius committed
400

401
402
403
404
  moveButton_ = new QToolButton( viewerToolbar_ );
  moveButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"transform-move.png") );
  moveButton_->setMinimumSize( 16, 16 );
  moveButton_->setMaximumSize( 32, 32 );
Jan Möbius's avatar
Jan Möbius committed
405
406
  moveButton_->setToolTip( tr("Switch to <b>move</b> mode.") );
  moveButton_->setWhatsThis(tr(
407
408
409
                  "Switch to <b>move</b> mode.<br>"
                  "<ul><li><b>Rotate</b> using <b>left</b> mouse button.</li>"
                  "<li><b>Translate</b> using <b>middle</b> mouse button.</li>"
Jan Möbius's avatar
Jan Möbius committed
410
                  "<li><b>Zoom</b> using <b>left+middle</b> mouse buttons.</li></ul>" ));
411
412

  connect( moveButton_,SIGNAL( clicked() ), this, SLOT( setExamineMode() ) );
413
/*
414
  connect( this, SIGNAL( actionModeChanged( Viewer::ActionMode ) ),
415
            this, SLOT(   slotActionModeChanged(Viewer::ActionMode) ) );*/
416

Jan Möbius's avatar
Jan Möbius committed
417
  viewerToolbar_->addWidget( moveButton_ )->setText(tr("Move"));
418
419
  moveButton_->setDown(true);

420
  
421
422
423
424
  pickButton_ = new QToolButton( viewerToolbar_ );
  pickButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"pick.png") );
  pickButton_->setMinimumSize( 16, 16 );
  pickButton_->setMaximumSize( 32, 32 );
Jan Möbius's avatar
Jan Möbius committed
425
426
  pickButton_->setToolTip(tr("Switch to <b>picking</b> mode."));
  pickButton_->setWhatsThis(tr(
427
428
429
                  "Switch to <b>picking</b> mode.<br>"
                  "Use picking functions like flipping edges.<br>"
                  "To change the mode use the right click<br>"
Jan Möbius's avatar
Jan Möbius committed
430
                  "context menu in the viewer."));
431
  connect( pickButton_,SIGNAL( clicked() ), this, SLOT( setPickingMode() ) );
Jan Möbius's avatar
Jan Möbius committed
432
  viewerToolbar_->addWidget( pickButton_)->setText(tr("Pick"));
433
434
435
436
437
438


  questionButton_ = new QToolButton( viewerToolbar_ );
  questionButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-about.png") );
  questionButton_->setMinimumSize( 16, 16 );
  questionButton_->setMaximumSize( 32, 32 );
Jan Möbius's avatar
Jan Möbius committed
439
440
  questionButton_->setToolTip(tr("Switch to <b>identification</b> mode."));
  questionButton_->setWhatsThis(tr(
441
442
443
444
                  "Switch to <b>identification</b> mode.<br>"
                  "Use identification mode to get information "
                  "about objects. Click on an object and see "
                  "the log output for information about the "
Jan Möbius's avatar
Jan Möbius committed
445
                  "object."));
446
  connect( questionButton_,SIGNAL( clicked() ), this, SLOT( setQuestionMode() ) );
Jan Möbius's avatar
Jan Möbius committed
447
  viewerToolbar_->addWidget( questionButton_)->setText(tr("Question"));
448

449
450
451
452
453
454
455
456
  viewerLayoutBox_ = new QComboBox( viewerToolbar_ );
  viewerLayoutBox_->setMinimumSize( 32, 16 );
  viewerLayoutBox_->setMaximumSize( 64, 32 );
  viewerLayoutBox_->setToolTip(tr("Switch <b>viewer layout</b>."));
  viewerLayoutBox_->setWhatsThis(tr(
                  "Switch <b>viewer layout</b>.<br>"
                  "Select the desired viewer layout. "
                  "Possible layouts are: "
457
                  "<ul> "
458
				  "<li>Single viewer</li>"
Jan Möbius's avatar
Jan Möbius committed
459
          "<li>Double viewer</li>"
460
461
				  "<li>Multiple viewers (grid)</li>"
				  "<li>Multiple viewers (hsplit)</li>"
Jan Möbius's avatar
Jan Möbius committed
462
				  "</ul>"));
463

464
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"singleviewmode.png"), "");
Jan Möbius's avatar
Jan Möbius committed
465
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"doubleviewmode.png"), "");
466
467
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"multiviewmode1.png"), "");
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"multiviewmode2.png"), "");
468

469
  viewerLayoutBox_->setIconSize(QSize(22,22));
470

471
  connect( viewerLayoutBox_,SIGNAL( activated(int) ), this, SLOT( setViewerLayout(int) ) );
472

473
  viewerToolbar_->addWidget( viewerLayoutBox_ );
474

475
476
477
478
479
480
481
482
483
  viewerToolbar_->addSeparator();

  if (OpenFlipper::Options::stereo())
  {
    stereoButton_ = new QToolButton( viewerToolbar_ );
    stereoButton_->setIcon(  QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"mono.png")  );
    stereoButton_->setMinimumSize( 16, 16 );
    stereoButton_->setMaximumSize( 32, 32 );
    stereoButton_->setCheckable( true );
Jan Möbius's avatar
Jan Möbius committed
484
    stereoButton_->setToolTip(tr( "Toggle stereo viewing"));
485
486
    // We want a custom context menu
    stereoButton_->setContextMenuPolicy(Qt::CustomContextMenu);
Jan Möbius's avatar
Jan Möbius committed
487
    stereoButton_->setWhatsThis(tr(
488
489
490
491
                  "Toggle stereo mode<br><br>"
                  "Use this button to switch between stereo "
                  "and mono view. To use this feature you need "
                  "a stereo capable graphics card and a stereo "
Jan Möbius's avatar
Jan Möbius committed
492
                  "display/projection system."));
493
494
495
    connect( stereoButton_, SIGNAL( clicked() ), this , SLOT( slotToggleStereoMode() ) );
    // Custom context menu
    connect( stereoButton_, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(stereoButtonContextMenu(const QPoint &)));
Jan Möbius's avatar
Jan Möbius committed
496
    viewerToolbar_->addWidget( stereoButton_ )->setText( tr("Stereo"));
497
  }
498
499


500
  addToolBar(Qt::TopToolBarArea,viewerToolbar_);
Jan Möbius's avatar
Jan Möbius committed
501

Jan Möbius's avatar
 
Jan Möbius committed
502
503
  // Remember logger size
  wsizes = splitter_->sizes();
504
505
506
507
508
509

  if(wsizes.size() > 1) {
    originalLoggerSize_  = wsizes[1];
  } else {
    originalLoggerSize_ = 240;
  }
Jan Möbius's avatar
Jan Möbius committed
510

Jan Möbius's avatar
 
Jan Möbius committed
511
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
512
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
513
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
514
515
516

  toolBoxArea_ = new QWidget (toolSplitter_);

517
  viewModeControlBox_ = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
518
519
520

  QHBoxLayout *hLayout = new QHBoxLayout;

Jan Möbius's avatar
Jan Möbius committed
521
522
  vmChangeButton_ = new QPushButton(tr("Change View Mode"));
  QPushButton* vmEditButton   = new QPushButton(tr("Edit View Modes"));
523

Jan Möbius's avatar
Jan Möbius committed
524
525
  hLayout->addWidget(vmChangeButton_);
  hLayout->addWidget(vmEditButton);
526
  viewModeControlBox_->setLayout (hLayout);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
527

Jan Möbius's avatar
Jan Möbius committed
528
529
  connect(vmChangeButton_, SIGNAL(clicked()), this, SLOT(slotViewChangeDialog()));
  connect(vmEditButton, SIGNAL(clicked()), this, SLOT(slotViewModeDialog()));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
530
531
532
533
534
535
536
537

  toolBoxScroll_ = new QScrollArea ();
  toolBox_ = new SideArea ();
  toolBoxScroll_->setWidget (toolBox_);
  toolBoxScroll_->setWidgetResizable (true);
  toolBoxScroll_->setFrameStyle (QFrame::StyledPanel);

  QVBoxLayout *vLayout = new QVBoxLayout;
538
  vLayout->addWidget(viewModeControlBox_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
539
  vLayout->addWidget(toolBoxScroll_);
540
541
542
  
  if ( OpenFlipperSettings().value("Core/Gui/TaskSwitcher/Hide",false).toBool() )
    viewModeControlBox_->hide();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
543
544
545
546
547

  toolBoxArea_->setLayout (vLayout);

  wsizes = toolSplitter_->sizes();

548
  // if the toolbox should be on the right, use the defaults. Otherwise, we have to reorder them.
Jan Möbius's avatar
Jan Möbius committed
549
  if ( OpenFlipperSettings().value("Core/Gui/ToolBoxes/ToolBoxOnTheRight", true).toBool() ) {
550

551
552
553
554
555
    // Set relative sizes of windows
    wsizes[0] = 480;
    wsizes[1] = 240;
    toolSplitter_->setSizes(wsizes);  
  } else {
556

557
558
559
560
561
562
563
564
565
566
    // Show tool box on the left side of the main window
    toolSplitter_->insertWidget(0, toolBoxArea_);
    toolSplitter_->insertWidget(1, splitter_);

    // Default sizes are swaped when toolbox is on the left.
    wsizes[0] = 240;
    wsizes[1] = 480;
    toolSplitter_->setSizes(wsizes);
  }
  
Jan Möbius's avatar
 
Jan Möbius committed
567
568
569
  // ======================================================================
  // Context menu setup
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
570

Jan Möbius's avatar
Jan Möbius committed
571
572
573
574
  for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
    connect( examiner_widgets_[i] , SIGNAL(signalCustomContextMenuRequested( const QPoint&) ) ,
             this                 , SLOT( slotCustomContextMenu( const QPoint&) ) );
  }
Jan Möbius's avatar
Jan Möbius committed
575

Dirk Wilden's avatar
   
Dirk Wilden committed
576
  contextMenu_ = new QMenu(this);
Jan Möbius's avatar
Jan Möbius committed
577
  contextSelectionMenu_ = new QMenu(tr("Selection"),0);
Jan Möbius's avatar
Jan Möbius committed
578

Jan Möbius's avatar
 
Jan Möbius committed
579
  setupMenuBar();
Jan Möbius's avatar
Jan Möbius committed
580

Jan Möbius's avatar
Jan Möbius committed
581
  statusBar_->showMessage(tr("Ready"), 5000);
Dirk Wilden's avatar
Dirk Wilden committed
582

583
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
584

585
  setExamineMode();
586
587
588

  setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );

589
590
591
592
  // Create stereo settings widget
  stereoSettingsWidget_ = new StereoSettingsWidget(this);
  // Make it look like a dialog
  stereoSettingsWidget_->setWindowFlags(Qt::Popup);
593
594
  // Connect combo boxes and sliders to local slots
  connect(stereoSettingsWidget_->stereoOpengl, SIGNAL(clicked()),
595
          this, SLOT(slotApplyStereoSettings()));
596
597
598
599
600
  connect(stereoSettingsWidget_->stereoAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoCustomAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));

601
602
  connect(stereoSettingsWidget_->focalDistance, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
603
604
605
606
607
608
  connect(stereoSettingsWidget_->eyeDistance, SIGNAL(editingFinished()),
          this, SLOT(slotApplyStereoSettings()));

  // Close button
  connect(stereoSettingsWidget_->closeButton, SIGNAL(clicked()),
          stereoSettingsWidget_, SLOT(hide()));
609
610
611
612
613
614
615
616
617
618
619
620


  // ======================================================================
  // Help Browser start up
  // ======================================================================

  if (!OpenFlipper::Options::nogui())
  {
  	helpWidget_ = new HelpWidget(this);
  	connect(this, SIGNAL(changeHelpSite(QUrl)), helpWidget_, SLOT(linkActivated(QUrl)));
  }

Jan Möbius's avatar
 
Jan Möbius committed
621
622
623
624
625
626
627
}


//-----------------------------------------------------------------------------


CoreWidget::~CoreWidget() {
Jan Möbius's avatar
Jan Möbius committed
628

Jan Möbius's avatar
 
Jan Möbius committed
629
630
631
632
633
634
635
636
}

//-----------------------------------------------------------------------------

/** Set viewer to Fullscreen Mode and back
  */
void
CoreWidget::toggleFullscreen() {
Jan Möbius's avatar
Jan Möbius committed
637

Dirk Wilden's avatar
Dirk Wilden committed
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
  switch (fullscreenState_){

    case 0:
      //switch to fullscreen
      setWindowState( windowState() | Qt::WindowFullScreen);
      break;

    case 1:

      //fullscreen without toolbars
      if ( ! (windowState() & Qt::WindowFullScreen) )
        setWindowState( windowState() | Qt::WindowFullScreen);

      //hide plugin toolbars
      for (uint p=0; p < plugins_.size(); p++)
653
654
655
656
        for ( uint j = 0 ; j < plugins_[p].toolbars.size(); ++j ) {
          if ( ! plugins_[p].toolbars[j].second->isFloating() )
            plugins_[p].toolbars[j].second->hide();
        }
Dirk Wilden's avatar
Dirk Wilden committed
657
658

      //hide main toolbar
659
660
      if ( ! mainToolbar_->isFloating() )
        mainToolbar_->hide();
Dirk Wilden's avatar
Dirk Wilden committed
661
662

      //hide viewer toolbar
663
664
      if ( ! viewerToolbar_->isFloating() )
        viewerToolbar_->hide();
Dirk Wilden's avatar
Dirk Wilden committed
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679

      //hide the menubar
      menuBar()->hide();

      //hide the statusbar
      statusBar()->hide();

      break;

    default:
      //disable fullscreen
      if ( windowState() & Qt::WindowFullScreen )
        setWindowState( windowState() ^  Qt::WindowFullScreen);

      //show toolbars
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
680
      setViewMode( OpenFlipper::Options::currentViewMode() );
Dirk Wilden's avatar
Dirk Wilden committed
681
682
683
684
685
686
687

      //show the menubar
      menuBar()->show();

      //show the statusbar
      statusBar()->show();

Jan Möbius's avatar
Jan Möbius committed
688
689
      break;

Dirk Wilden's avatar
Dirk Wilden committed
690
691
692
  }

  fullscreenState_ = (fullscreenState_ + 1) % 3;
Jan Möbius's avatar
Jan Möbius committed
693
694
  
  OpenFlipperSettings().setValue("Core/Gui/fullscreen", bool( windowState() & Qt::WindowFullScreen) );
695

Jan Möbius's avatar
 
Jan Möbius committed
696
697
698
699
700
  show();
}

//-----------------------------------------------------------------------------

701
702
703
704
705
706
707
708
709
710
711
/** Enable or disable Fullscreen Mode
  */
void
CoreWidget::setFullscreen(bool _state ) {
  if ( _state )
    setWindowState( windowState() | Qt::WindowFullScreen);
  else {
    if ( windowState() & Qt::WindowFullScreen )
      setWindowState( windowState() ^  Qt::WindowFullScreen);
  }

Dirk Wilden's avatar
Dirk Wilden committed
712
713
  fullscreenState_ = (uint) _state;

Jan Möbius's avatar
Jan Möbius committed
714
  OpenFlipperSettings().setValue("Core/Gui/fullscreen", bool( windowState() & Qt::WindowFullScreen) );
715
716
717
718

  show();
}

719
720
721
722
723
724
725
726
727
728
//-----------------------------------------------------------------------------

void 
CoreWidget::showViewModeControls(bool _show) {
  // Only change if the actual setting has changed!
  if ( OpenFlipper::Options::gui() && ( !_show != OpenFlipperSettings().value("Core/Gui/TaskSwitcher/Hide",false).toBool() ) ) {
  
    // Update setting in Conf storage
    OpenFlipperSettings().setValue("Core/Gui/TaskSwitcher/Hide",!_show);
    
729
730
731
732
733
    // Update The Checkbox in the Menu
    AC_ShowViewModeControls_->blockSignals(true);
    AC_ShowViewModeControls_->setChecked( _show  );
    AC_ShowViewModeControls_->blockSignals(false);
    
734
735
736
737
738
739
740
741
742
743
    if ( _show ) {
      viewModeControlBox_->show();
    } else {
      viewModeControlBox_->hide();
    }
    
  }
  
}

Jan Möbius's avatar
 
Jan Möbius committed
744
745
746
747
748
749
//-----------------------------------------------------------------------------

/** Hide or show toolbox
  */
void
CoreWidget::toggleToolbox() {
Jan Möbius's avatar
Jan Möbius committed
750

Jan Möbius's avatar
 
Jan Möbius committed
751
  //toggle
Jan Möbius's avatar
Jan Möbius committed
752
  showToolbox( OpenFlipperSettings().value("Core/Gui/ToolBoxes/hidden",false).toBool() );
753
754
755
756
757
758
759
760
761
762
}

//-----------------------------------------------------------------------------

/** Hide or show toolbox
  */
void
CoreWidget::showToolbox( bool _state ) {

  //toggle
Jan Möbius's avatar
Jan Möbius committed
763
  OpenFlipperSettings().setValue("Core/Gui/ToolBoxes/hidden",!_state);
Jan Möbius's avatar
 
Jan Möbius committed
764

Jan Möbius's avatar
Jan Möbius committed
765
  if ( OpenFlipperSettings().value("Core/Gui/ToolBoxes/hidden",false).toBool() ){
Jan Möbius's avatar
 
Jan Möbius committed
766
767

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
768
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
769
770
771

  }else{
    //reset last ViewMode
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
772
    if (OpenFlipper::Options::currentViewMode().trimmed() == "")
Jan Möbius's avatar
 
Jan Möbius committed
773
774
      setViewMode("All");
    else
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
775
      setViewMode( OpenFlipper::Options::currentViewMode() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
776
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
777
778
  }
}
Jan Möbius's avatar
Jan Möbius committed
779

780

781
782
//=============================================================================

783
void CoreWidget::setToolBoxOrientationOnTheRight(bool _toolBoxRight) {
784
  QList<int> wsizes;
Jan Möbius's avatar
Jan Möbius committed
785
  
786
787
  // Is toolbox currently on the right hand side?
  bool currentstate = toolSplitter_->widget(1) == toolBoxArea_;
Jan Möbius's avatar
Jan Möbius committed
788
789
  
  if ( _toolBoxRight != currentstate ) {
790
    
Jan Möbius's avatar
Jan Möbius committed
791
792
793
794
795
796
797
798
799
800
801
    if(_toolBoxRight ) {
      
      // Show tool box on the right side of the main window
      toolSplitter_->insertWidget(0, splitter_);
      toolSplitter_->insertWidget(1, toolBoxArea_);
    } else {
      
      // Show tool box on the left side of the main window
      toolSplitter_->insertWidget(0, toolBoxArea_);
      toolSplitter_->insertWidget(1, splitter_);
    }
802
    
Jan Möbius's avatar
Jan Möbius committed
803
    // Store new setting
Jan Möbius's avatar
Jan Möbius committed
804
    OpenFlipperSettings().setValue("Core/Gui/ToolBoxes/ToolBoxOnTheRight",_toolBoxRight);
805
    
Jan Möbius's avatar
Jan Möbius committed
806
807
    // remove the windowstates definition for the toolboxes, as it changed anyway.
    QSettings windowStates(QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() + ".OpenFlipper" +
808
                            OpenFlipper::Options::dirSeparator() +  "WindowStates.dat", QSettings::IniFormat);
Jan Möbius's avatar
Jan Möbius committed
809
810
    
    windowStates.value("Core/ToolSplitter");
811
812
813
    
  }
  
Jan Möbius's avatar
Jan Möbius committed
814

815
816
817
818
819
    
  toolSplitter_->refresh();
}
      

Jan Möbius's avatar
 
Jan Möbius committed
820
821
//=============================================================================

Jan Möbius's avatar
Jan Möbius committed
822
823
void
CoreWidget::addRecent(QString _filename, DataType _type)
Jan Möbius's avatar
 
Jan Möbius committed
824
{
825
826
  //dont add objects to recentMenu while loadind Settings
  if ( OpenFlipper::Options::loadingSettings() ) return;
Jan Möbius's avatar
Jan Möbius committed
827

Jan Möbius's avatar
 
Jan Möbius committed
828
  OpenFlipper::Options::addRecentFile(_filename, _type);
Jan Möbius's avatar
Jan Möbius committed
829

Jan Möbius's avatar
 
Jan Möbius committed
830
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
831
832
833
834
835
836
837

}

//=============================================================================

void
CoreWidget::updateRecent()
Jan Möbius's avatar
 
Jan Möbius committed
838
839
840
{
  if ( recentFilesMenu_ == NULL)
    return;
Jan Möbius's avatar
Jan Möbius committed
841

Jan Möbius's avatar
 
Jan Möbius committed
842
843
  recentFilesMenu_->clear();

844
845
  QStringList recentFiles = OpenFlipperSettings().value("Core/File/RecentFiles", QStringList()).toStringList();
  QStringList recentTypes = OpenFlipperSettings().value("Core/File/RecentTypes", QStringList()).toStringList();
846

Jan Möbius's avatar
 
Jan Möbius committed
847
  for (int i = 0 ; i < recentFiles.size() ; ++i ) {
848

849
    QFileInfo fi(recentFiles[i]);
850

851
852
853
854
855
856
857
858
859
    QAction* newAction = 0;

    if (fi.suffix() == "ini") {
      newAction = recentFilesMenu_->addAction(QIcon(OpenFlipper::Options::iconDirStr() + OpenFlipper::Options::dirSeparator()+"Settings-Icon.png"), recentFiles[i]);
      newAction->setData( QVariant( QString("ini") ) );
    } else {
      newAction = recentFilesMenu_->addAction(typeIcon( typeId(recentTypes[i]) ), recentFiles[i]);
      newAction->setData( QVariant( recentTypes[i]) );
    }
860

Jan Möbius's avatar
 
Jan Möbius committed
861
862
  }

Jan Möbius's avatar
Jan Möbius committed
863
864
865
}

void
Jan Möbius's avatar
 
Jan Möbius committed
866
867
868
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
869
870

void CoreWidget::showOptionsWidget() {
Jan Möbius's avatar
Jan Möbius committed
871

872
873
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
874

875
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
876
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
877
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
878
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
879
880
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
881
882

    optionsWidget_->setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
883
  }
Dirk Wilden's avatar
Dirk Wilden committed
884

Jan Möbius's avatar
Jan Möbius committed
885
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
886
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
887
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
888
889
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
890
891
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
892

893
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
894

895
}
Jan Möbius's avatar
Jan Möbius committed
896

897
void CoreWidget::nextViewerLayout() {
898

Jan Möbius's avatar
Jan Möbius committed
899
900
901
902
903
  if ( OpenFlipperSettings().value("Core/Gui/glViewer/useMultipleViewers",true).toBool() ) {

    switch (baseLayout_->mode()) {
      case QtMultiViewLayout::SingleView:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
Jan Möbius's avatar
Jan Möbius committed
904
              baseLayout_->setMode(QtMultiViewLayout::DoubleView);
Jan Möbius's avatar
Jan Möbius committed
905
906
907
908

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(1);
              break;
Jan Möbius's avatar
Jan Möbius committed
909
910
911
912
913
914
915
      case QtMultiViewLayout::DoubleView:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::Grid);

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(2);
              break;
Jan Möbius's avatar
Jan Möbius committed
916
917
918
919
920
      case QtMultiViewLayout::Grid:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::HSplit);

              // Update combo box in the toolbar
Jan Möbius's avatar
Jan Möbius committed
921
              viewerLayoutBox_->setCurrentIndex(3);
Jan Möbius's avatar
Jan Möbius committed
922
923
924
925
926
927
928
929
930
931
              break;
      case QtMultiViewLayout::HSplit:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::SingleView);

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(0);
              break;
      }
  }
932
933
934
935
}


void
936
CoreWidget::setViewerLayout(int _idx) {
937

Jan Möbius's avatar
Jan Möbius committed
938
939
940
941
  if ( OpenFlipperSettings().value("Core/Gui/glViewer/useMultipleViewers",true).toBool() ) {

  switch (_idx) {
    case 0:
Jan Möbius's avatar
Jan Möbius committed
942
943
944
      baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
      baseLayout_->setMode(QtMultiViewLayout::SingleView);
      break;
Jan Möbius's avatar
Jan Möbius committed
945
    case 1:
Jan Möbius's avatar
Jan Möbius committed
946
947
948
      baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
      baseLayout_->setMode(QtMultiViewLayout::DoubleView);
      break;
Jan Möbius's avatar
Jan Möbius committed
949
    case 2:
Jan Möbius's avatar
Jan Möbius committed
950
951
952
953
954
955
956
      baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
      baseLayout_->setMode(QtMultiViewLayout::Grid);
      break;
    case 3:
      baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
      baseLayout_->setMode(QtMultiViewLayout::HSplit);
      break;
Jan Möbius's avatar
Jan Möbius committed
957
  }
958
959

    viewerLayoutBox_->setCurrentIndex(_idx);
Jan Möbius's avatar
Jan Möbius committed
960
  }
961
}
Jan Möbius's avatar
 
Jan Möbius committed
962

963
964
965
966
967
968
969
970
971
972
973
974
975
976
void
CoreWidget::slotShowSceneGraphDialog()
{
  if ( PluginFunctions::getSceneGraphRootNode() )
  {
    if (!sceneGraphDialog_)
    {
      sceneGraphDialog_ = new ACG::QtWidgets::QtSceneGraphDialog( this, PluginFunctions::getSceneGraphRootNode() );

      for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
        connect(examiner_widgets_[i], SIGNAL(signalSceneGraphChanged(ACG::SceneGraph::BaseNode*)),
                sceneGraphDialog_,    SLOT(update(ACG::SceneGraph::BaseNode*)));

        connect(sceneGraphDialog_, SIGNAL(signalNodeChanged(ACG::SceneGraph::BaseNode*)),
977
                examiner_widgets_[i], SLOT(updateGL()));
978
979
980
981
      }

    }

982
    sceneGraphDialog_->setGeneratorMap(PluginFunctions::getSceneGraphGeneratorList() );
983
984
985
986
    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
   
Jan Möbius committed
987
988
989
//-----------------------------------------------------------------------------

void
990
CoreWidget::sceneRectChanged(const QRectF &rect)
Jan Möbius's avatar
   
Jan Möbius committed
991
{
992
993
  centerWidget_->setGeometry (rect);
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
   
Jan Möbius committed
994
995
}

Dirk Wilden's avatar
Dirk Wilden committed
996
997
998
999
1000
1001
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
1002
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
1003
1004

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
1005
1006
1007
  connect(dialog, SIGNAL(resizeViewers(int,int)), this, SIGNAL(resizeViewers(int,int)) );
  connect(dialog, SIGNAL(resizeApplication(int,int)), this, SIGNAL(resizeApplication(int,int)) );

Dirk Wilden's avatar
Dirk Wilden committed
1008
1009
  dialog->show();
}
Jan Möbius's avatar
   
Jan Möbius committed
1010

1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
//-----------------------------------------------------------------------------

void CoreWidget::slotActivateExaminer()
{
  glViewer* examiner = dynamic_cast<glViewer*>(QObject::sender());

  if (!examiner)
    return;

  for ( uint i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {

    if (examiner == examiner_widgets_[i])
    {
      PluginFunctions::setActiveExaminer (i);
      break;
    }
  }
}
1029

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1030
1031
1032
//-----------------------------------------------------------------------------

/// Use native or gl painted cursor
1033
void CoreWidget::setForceNativeCursor ( bool _state )
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1034
{
1035
  cursorPainter_->setForceNative (_state);