CoreWidget.cc 33.6 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
161
162
  globalDrawMenu_(0),
  drawGroup_(0),
  viewGroup_(0),
163
  perspectiveProjectionAction_(0),
164
165
  activeDrawModes_(0),
  availableGlobalDrawModes_(0),
Jan Möbius's avatar
 
Jan Möbius committed
166
  contextMenu_(0),
Jan Möbius's avatar
Jan Möbius committed
167
  contextSelectionMenu_(0),
168
169
  drawGroupViewer_(0),
  viewerDrawMenu_(0),
170
  coordSysMenu_(0),
171
  snapshotName_(""),
Dirk Wilden's avatar
Dirk Wilden committed
172
  snapshotCounter_(0),
Jan Möbius's avatar
 
Jan Möbius committed
173
  stackMenu_(0),
174
  helpWidget_(0),
175
  stereoSettingsWidget_(0),
Jan Möbius's avatar
Jan Möbius committed
176
  aboutWidget_(0),
177
  optionsWidget_(0),
178
  plugins_(_plugins),
179
180
181
182
183
184
  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
185
186
{
  setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
187

Dirk Wilden's avatar
Dirk Wilden committed
188
189
  defaultIconSize_ = iconSize();

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
190
191
192
193
194
  toolSplitter_ = new QSplitter(Qt::Horizontal,this);

  setCentralWidget(toolSplitter_);

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

197
198
  QGLFormat format = QGLFormat::defaultFormat();

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

  // Construct GL context & widget
210
211
212
  baseLayout_ = new QtMultiViewLayout;
  baseLayout_->setContentsMargins(0,0,0,0);

213
214
215
  // ===============================================================================
  // Test context capabilities ...
  // If we get stereo buffers, we use them .. which might disable multisampling
216
  // If we don't have stereo, we disable it to not interfere with multisampling
217
218
219
220
221
222
223
224
225
226
227
228
229
  // ===============================================================================
  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);
230
  PluginFunctions::shareGLWidget (glWidget_);
231

Jan Möbius's avatar
   
Jan Möbius committed
232
  glView_ = new QtGLGraphicsView(stackedWidget_);
233
  glScene_ = new QtGLGraphicsScene (&examiner_widgets_, baseLayout_);
Jan Möbius's avatar
   
Jan Möbius committed
234

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

Jan Möbius's avatar
   
Jan Möbius committed
238
239
240
  glView_->setViewport(glWidget_);
  glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
  glView_->setScene(glScene_);
241
  glView_->setFrameStyle(QFrame::NoFrame);
Jan Möbius's avatar
   
Jan Möbius committed
242

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
243
244
  // 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
245
  cursorPainter_->setForceNative (OpenFlipperSettings().value("Core/Gui/glViewer/nativeMouse",false).toBool() );
246
  cursorPainter_->setEnabled (stereoActive_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
247
  glScene_->setCursorPainter (cursorPainter_);
248

Jan Möbius's avatar
   
Jan Möbius committed
249
250
251
252
253
254
255
256
257
258
  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
259
260
261
  // ======================================================================
  // Set up the logging window
  // ======================================================================
262

263
  slidingLogger_ = new QtSlideWindow (tr("Log Viewer"), centerWidget_);
264

265
266
  logWidget_ = new LoggerWidget(splitter_);
  logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
267
  logWidget_->resize( splitter_->width() ,240);
Jan Möbius's avatar
Jan Möbius committed
268

269
  originalLoggerSize_ = 0;
Jan Möbius's avatar
Jan Möbius committed
270
  loggerState_ = OpenFlipper::Options::Normal;
271

272
273
274
275
276
  QList<int> wsizes(splitter_->sizes());
  // Set initial values to have a usable state
  wsizes[0] = 480;
  wsizes[1] = 240;
  splitter_->setSizes(wsizes);
277

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

280
    slidingLogger_->attachWidget (logWidget_);
281
    showLoggerInSplitView(false);
Jan Möbius's avatar
Jan Möbius committed
282
    loggerState_ = OpenFlipper::Options::InScene;
283

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

286
    showLoggerInSplitView(false);
Jan Möbius's avatar
Jan Möbius committed
287
288
    loggerState_ = OpenFlipper::Options::Hidden;
  } else {
289
290

    showLoggerInSplitView(true);
Jan Möbius's avatar
 
Jan Möbius committed
291
  }
Jan Möbius's avatar
Jan Möbius committed
292

293

Jan Möbius's avatar
 
Jan Möbius committed
294
295
296
  // ======================================================================
  // Create examiner
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
297

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

Jan Möbius's avatar
   
Jan Möbius committed
300
301
    glViewer* examinerWidget = new glViewer(glScene_,
					    glWidget_,
302
                                            PluginFunctions::viewerProperties(0),
303
					    centerWidget_);
Jan Möbius's avatar
Jan Möbius committed
304

Jan Möbius's avatar
Jan Möbius committed
305
306
307
    examiner_widgets_.push_back(examinerWidget);

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

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

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

Jan Möbius's avatar
Jan Möbius committed
313
314
315
  } else {


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

Jan Möbius's avatar
Jan Möbius committed
323
      examiner_widgets_.push_back(newWidget);
324
325
326
327
328
329
330
331
332
333

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

Jan Möbius's avatar
Jan Möbius committed
334
335
336
337
338
    }

    // 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
339
      cursorPainter_->registerViewer (examiner_widgets_[i]);
Jan Möbius's avatar
Jan Möbius committed
340
341
    }

Jan Möbius's avatar
Jan Möbius committed
342
343
344
345
    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
346
347
  }

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

Jan Möbius's avatar
   
Jan Möbius committed
351
  centerWidget_->setLayout(baseLayout_);
352
353


Jan Möbius's avatar
 
Jan Möbius committed
354
355
356
  // ======================================================================
  // Setup dragging for examiner widget
  // ======================================================================
357
358
359
360
361
362
363
364
  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* )));
365
366
    connect (examiner_widgets_[i], SIGNAL(signalMakeActive ()),
             this, SLOT(slotActivateExaminer()));
367
368
369

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


Jan Möbius's avatar
 
Jan Möbius committed
373
374
375
  // ======================================================================
  // Create main Toolbar
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
376

Jan Möbius's avatar
Jan Möbius committed
377
378
379
  mainToolbar_ = new QToolBar(tr("Main Toolbar"));
  mainToolbar_->setWindowTitle(tr("Main Toolbar"));
  mainToolbar_->setObjectName(tr("MainToolbar"));
380
  slotAddToolbar(mainToolbar_);
Jan Möbius's avatar
Jan Möbius committed
381

Jan Möbius's avatar
 
Jan Möbius committed
382
383
384
  // ======================================================================
  // Get Toolbar from examiner and integrate it into main window
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
385

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

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

Jan Möbius's avatar
Jan Möbius committed
394
  slotAddToolbar(viewerToolbar_);
Jan Möbius's avatar
Jan Möbius committed
395

396
397
398
399
  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
400
401
  moveButton_->setToolTip( tr("Switch to <b>move</b> mode.") );
  moveButton_->setWhatsThis(tr(
402
403
404
                  "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
405
                  "<li><b>Zoom</b> using <b>left+middle</b> mouse buttons.</li></ul>" ));
406
407

  connect( moveButton_,SIGNAL( clicked() ), this, SLOT( setExamineMode() ) );
408
/*
409
  connect( this, SIGNAL( actionModeChanged( Viewer::ActionMode ) ),
410
            this, SLOT(   slotActionModeChanged(Viewer::ActionMode) ) );*/
411

Jan Möbius's avatar
Jan Möbius committed
412
  viewerToolbar_->addWidget( moveButton_ )->setText(tr("Move"));
413
414
  moveButton_->setDown(true);

415
  
416
417
418
419
  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
420
421
  pickButton_->setToolTip(tr("Switch to <b>picking</b> mode."));
  pickButton_->setWhatsThis(tr(
422
423
424
                  "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
425
                  "context menu in the viewer."));
426
  connect( pickButton_,SIGNAL( clicked() ), this, SLOT( setPickingMode() ) );
Jan Möbius's avatar
Jan Möbius committed
427
  viewerToolbar_->addWidget( pickButton_)->setText(tr("Pick"));
428
429
430
431
432
433


  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
434
435
  questionButton_->setToolTip(tr("Switch to <b>identification</b> mode."));
  questionButton_->setWhatsThis(tr(
436
437
438
439
                  "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
440
                  "object."));
441
  connect( questionButton_,SIGNAL( clicked() ), this, SLOT( setQuestionMode() ) );
Jan Möbius's avatar
Jan Möbius committed
442
  viewerToolbar_->addWidget( questionButton_)->setText(tr("Question"));
443

444
445
446
447
448
449
450
451
  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: "
452
                  "<ul> "
453
454
455
				  "<li>Single viewer</li>"
				  "<li>Multiple viewers (grid)</li>"
				  "<li>Multiple viewers (hsplit)</li>"
Jan Möbius's avatar
Jan Möbius committed
456
				  "</ul>"));
457

458
459
460
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"singleviewmode.png"), "");
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"multiviewmode1.png"), "");
  viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"multiviewmode2.png"), "");
461

462
  viewerLayoutBox_->setIconSize(QSize(22,22));
463

464
  connect( viewerLayoutBox_,SIGNAL( activated(int) ), this, SLOT( setViewerLayout(int) ) );
465

466
  viewerToolbar_->addWidget( viewerLayoutBox_ );
467

468
469
470
471
472
473
474
475
476
  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
477
    stereoButton_->setToolTip(tr( "Toggle stereo viewing"));
478
479
    // We want a custom context menu
    stereoButton_->setContextMenuPolicy(Qt::CustomContextMenu);
Jan Möbius's avatar
Jan Möbius committed
480
    stereoButton_->setWhatsThis(tr(
481
482
483
484
                  "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
485
                  "display/projection system."));
486
487
488
    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
489
    viewerToolbar_->addWidget( stereoButton_ )->setText( tr("Stereo"));
490
  }
491
492


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

Jan Möbius's avatar
 
Jan Möbius committed
495
496
  // Remember logger size
  wsizes = splitter_->sizes();
497
498
499
500
501
502

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

Jan Möbius's avatar
 
Jan Möbius committed
504
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
505
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
506
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
507
508
509

  toolBoxArea_ = new QWidget (toolSplitter_);

510
  viewModeControlBox_ = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
511
512
513

  QHBoxLayout *hLayout = new QHBoxLayout;

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

Jan Möbius's avatar
Jan Möbius committed
517
518
  hLayout->addWidget(vmChangeButton_);
  hLayout->addWidget(vmEditButton);
519
  viewModeControlBox_->setLayout (hLayout);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
520

Jan Möbius's avatar
Jan Möbius committed
521
522
  connect(vmChangeButton_, SIGNAL(clicked()), this, SLOT(slotViewChangeDialog()));
  connect(vmEditButton, SIGNAL(clicked()), this, SLOT(slotViewModeDialog()));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
523
524
525
526
527
528
529
530

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

  QVBoxLayout *vLayout = new QVBoxLayout;
531
  vLayout->addWidget(viewModeControlBox_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
532
  vLayout->addWidget(toolBoxScroll_);
533
534
535
  
  if ( OpenFlipperSettings().value("Core/Gui/TaskSwitcher/Hide",false).toBool() )
    viewModeControlBox_->hide();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
536
537
538
539
540

  toolBoxArea_->setLayout (vLayout);

  wsizes = toolSplitter_->sizes();

541
  // 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
542
  if ( OpenFlipperSettings().value("Core/Gui/ToolBoxes/ToolBoxOnTheRight", true).toBool() ) {
543

544
545
546
547
548
    // Set relative sizes of windows
    wsizes[0] = 480;
    wsizes[1] = 240;
    toolSplitter_->setSizes(wsizes);  
  } else {
549

550
551
552
553
554
555
556
557
558
559
    // 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
560
561
562
  // ======================================================================
  // Context menu setup
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
563

Jan Möbius's avatar
Jan Möbius committed
564
565
566
567
  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
568

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

Jan Möbius's avatar
 
Jan Möbius committed
572
  setupMenuBar();
Jan Möbius's avatar
Jan Möbius committed
573

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

576
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
577

578
  setExamineMode();
579
580
581

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

582
583
584
585
  // Create stereo settings widget
  stereoSettingsWidget_ = new StereoSettingsWidget(this);
  // Make it look like a dialog
  stereoSettingsWidget_->setWindowFlags(Qt::Popup);
586
587
  // Connect combo boxes and sliders to local slots
  connect(stereoSettingsWidget_->stereoOpengl, SIGNAL(clicked()),
588
          this, SLOT(slotApplyStereoSettings()));
589
590
591
592
593
  connect(stereoSettingsWidget_->stereoAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoCustomAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));

594
595
  connect(stereoSettingsWidget_->focalDistance, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
596
597
598
599
600
601
  connect(stereoSettingsWidget_->eyeDistance, SIGNAL(editingFinished()),
          this, SLOT(slotApplyStereoSettings()));

  // Close button
  connect(stereoSettingsWidget_->closeButton, SIGNAL(clicked()),
          stereoSettingsWidget_, SLOT(hide()));
Jan Möbius's avatar
 
Jan Möbius committed
602
603
604
605
606
607
608
}


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


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

Jan Möbius's avatar
 
Jan Möbius committed
610
611
612
613
614
615
616
617
}

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

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

Dirk Wilden's avatar
Dirk Wilden committed
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
  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++)
634
635
636
637
        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
638
639

      //hide main toolbar
640
641
      if ( ! mainToolbar_->isFloating() )
        mainToolbar_->hide();
Dirk Wilden's avatar
Dirk Wilden committed
642
643

      //hide viewer toolbar
644
645
      if ( ! viewerToolbar_->isFloating() )
        viewerToolbar_->hide();
Dirk Wilden's avatar
Dirk Wilden committed
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660

      //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
661
      setViewMode( OpenFlipper::Options::currentViewMode() );
Dirk Wilden's avatar
Dirk Wilden committed
662
663
664
665
666
667
668
669
670
671

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

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

  }

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

Jan Möbius's avatar
 
Jan Möbius committed
675
676
677
678
679
  show();
}

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

680
681
682
683
684
685
686
687
688
689
690
/** 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
691
692
  fullscreenState_ = (uint) _state;

Jan Möbius's avatar
Jan Möbius committed
693
  OpenFlipperSettings().setValue("Core/Gui/fullscreen", bool( windowState() & Qt::WindowFullScreen) );
694
695
696
697

  show();
}

698
699
700
701
702
703
704
705
706
707
//-----------------------------------------------------------------------------

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);
    
708
709
710
711
712
    // Update The Checkbox in the Menu
    AC_ShowViewModeControls_->blockSignals(true);
    AC_ShowViewModeControls_->setChecked( _show  );
    AC_ShowViewModeControls_->blockSignals(false);
    
713
714
715
716
717
718
719
720
721
722
    if ( _show ) {
      viewModeControlBox_->show();
    } else {
      viewModeControlBox_->hide();
    }
    
  }
  
}

Jan Möbius's avatar
 
Jan Möbius committed
723
724
725
726
727
728
//-----------------------------------------------------------------------------

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

Jan Möbius's avatar
 
Jan Möbius committed
730
  //toggle
Jan Möbius's avatar
Jan Möbius committed
731
  showToolbox( OpenFlipperSettings().value("Core/Gui/ToolBoxes/hidden",false).toBool() );
732
733
734
735
736
737
738
739
740
741
}

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

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

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

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

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
747
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
748
749
750

  }else{
    //reset last ViewMode
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
751
    if (OpenFlipper::Options::currentViewMode().trimmed() == "")
Jan Möbius's avatar
 
Jan Möbius committed
752
753
      setViewMode("All");
    else
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
754
      setViewMode( OpenFlipper::Options::currentViewMode() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
755
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
756
757
  }
}
Jan Möbius's avatar
Jan Möbius committed
758

759

760
761
//=============================================================================

762
void CoreWidget::setToolBoxOrientationOnTheRight(bool _toolBoxRight) {
763
  QList<int> wsizes;
Jan Möbius's avatar
Jan Möbius committed
764
  
765
766
  // Is toolbox currently on the right hand side?
  bool currentstate = toolSplitter_->widget(1) == toolBoxArea_;
Jan Möbius's avatar
Jan Möbius committed
767
768
  
  if ( _toolBoxRight != currentstate ) {
769
    
Jan Möbius's avatar
Jan Möbius committed
770
771
772
773
774
775
776
777
778
779
780
    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_);
    }
781
    
Jan Möbius's avatar
Jan Möbius committed
782
    // Store new setting
Jan Möbius's avatar
Jan Möbius committed
783
    OpenFlipperSettings().setValue("Core/Gui/ToolBoxes/ToolBoxOnTheRight",_toolBoxRight);
784
    
Jan Möbius's avatar
Jan Möbius committed
785
786
    // remove the windowstates definition for the toolboxes, as it changed anyway.
    QSettings windowStates(QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() + ".OpenFlipper" +
787
                            OpenFlipper::Options::dirSeparator() +  "WindowStates.dat", QSettings::IniFormat);
Jan Möbius's avatar
Jan Möbius committed
788
789
    
    windowStates.value("Core/ToolSplitter");
790
791
792
    
  }
  
Jan Möbius's avatar
Jan Möbius committed
793

794
795
796
797
798
    
  toolSplitter_->refresh();
}
      

Jan Möbius's avatar
 
Jan Möbius committed
799
800
//=============================================================================

Jan Möbius's avatar
Jan Möbius committed
801
802
void
CoreWidget::addRecent(QString _filename, DataType _type)
Jan Möbius's avatar
 
Jan Möbius committed
803
{
804
805
  //dont add objects to recentMenu while loadind Settings
  if ( OpenFlipper::Options::loadingSettings() ) return;
Jan Möbius's avatar
Jan Möbius committed
806

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

Jan Möbius's avatar
 
Jan Möbius committed
809
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
810
811
812
813
814
815
816

}

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

void
CoreWidget::updateRecent()
Jan Möbius's avatar
 
Jan Möbius committed
817
818
819
{
  if ( recentFilesMenu_ == NULL)
    return;
Jan Möbius's avatar
Jan Möbius committed
820

Jan Möbius's avatar
 
Jan Möbius committed
821
822
  recentFilesMenu_->clear();

823
824
  QStringList recentFiles = OpenFlipperSettings().value("Core/File/RecentFiles", QStringList()).toStringList();
  QStringList recentTypes = OpenFlipperSettings().value("Core/File/RecentTypes", QStringList()).toStringList();
825

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

828
    QFileInfo fi(recentFiles[i]);
829

830
831
832
833
834
835
836
837
838
    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]) );
    }
839

Jan Möbius's avatar
 
Jan Möbius committed
840
841
  }

Jan Möbius's avatar
Jan Möbius committed
842
843
844
}

void
Jan Möbius's avatar
 
Jan Möbius committed
845
846
847
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
848
849

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

851
852
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
853

854
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
855
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
856
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
857
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
858
859
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
860
861

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

Jan Möbius's avatar
Jan Möbius committed
864
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
865
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
866
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
867
868
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
869
870
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
871

872
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
873

874
}
Jan Möbius's avatar
Jan Möbius committed
875

876
void CoreWidget::nextViewerLayout() {
877

Jan Möbius's avatar
Jan Möbius committed
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
  if ( OpenFlipperSettings().value("Core/Gui/glViewer/useMultipleViewers",true).toBool() ) {

    switch (baseLayout_->mode()) {
      case QtMultiViewLayout::SingleView:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::Grid);

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(1);
              break;
      case QtMultiViewLayout::Grid:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::HSplit);

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(2);
              break;
      case QtMultiViewLayout::HSplit:
              baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
              baseLayout_->setMode(QtMultiViewLayout::SingleView);

              // Update combo box in the toolbar
              viewerLayoutBox_->setCurrentIndex(0);
              break;
      }
  }
904
905
906
907
}


void
908
CoreWidget::setViewerLayout(int _idx) {
909

Jan Möbius's avatar
Jan Möbius committed
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
  if ( OpenFlipperSettings().value("Core/Gui/glViewer/useMultipleViewers",true).toBool() ) {

  switch (_idx) {
    case 0:
            baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
            baseLayout_->setMode(QtMultiViewLayout::SingleView);
            break;
    case 1:
            baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
            baseLayout_->setMode(QtMultiViewLayout::Grid);
            break;
    case 2:
            baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
            baseLayout_->setMode(QtMultiViewLayout::HSplit);
            break;
  }
926
927

    viewerLayoutBox_->setCurrentIndex(_idx);
Jan Möbius's avatar
Jan Möbius committed
928
  }
929
}
Jan Möbius's avatar
 
Jan Möbius committed
930

931
932
933
934
935
936
937
938
939
940
941
942
943
944
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*)),
945
                examiner_widgets_[i], SLOT(updateGL()));
946
947
948
949
      }

    }

950
    sceneGraphDialog_->setGeneratorMap(PluginFunctions::getSceneGraphGeneratorList() );
951
952
953
954
    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
   
Jan Möbius committed
955
956
957
//-----------------------------------------------------------------------------

void
958
CoreWidget::sceneRectChanged(const QRectF &rect)
Jan Möbius's avatar
   
Jan Möbius committed
959
{
960
961
  centerWidget_->setGeometry (rect);
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
   
Jan Möbius committed
962
963
}

Dirk Wilden's avatar
Dirk Wilden committed
964
965
966
967
968
969
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
970
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
971
972

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
973
974
975
  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
976
977
  dialog->show();
}
Jan Möbius's avatar
   
Jan Möbius committed
978

979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
//-----------------------------------------------------------------------------

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;
    }
  }
}
997

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
998
999
1000
//-----------------------------------------------------------------------------

/// Use native or gl painted cursor
1001
void CoreWidget::setForceNativeCursor ( bool _state )
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1002
{
1003
  cursorPainter_->setForceNative (_state);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1004
}
1005

Jan Möbius's avatar
 
Jan Möbius committed
1006
//=============================================================================
1007