CoreWidget.cc 34.8 KB
Newer Older
1
2
3
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
Jan Möbius's avatar
Jan Möbius committed
4
 *      Copyright (C) 2001-2010 by Computer Graphics Group, RWTH Aachen      *
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
33
 *                           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/>.                                      *
 *                                                                           *
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
34

35
36
37
38
39
40
41
/*===========================================================================*\
 *                                                                           *
 *   $Revision$                                                         *
 *   $Author$                                                      *
 *   $Date$                   *
 *                                                                           *
\*===========================================================================*/
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

Jan Möbius's avatar
Jan Möbius committed
74
75
/** \brief Constuctor for the Core Widget
 *
Jan Möbius's avatar
 
Jan Möbius committed
76
77
*/
CoreWidget::
Dirk Wilden's avatar
Dirk Wilden committed
78
CoreWidget( QVector<ViewMode*>& _viewModes,
Dirk Wilden's avatar
Dirk Wilden committed
79
80
            std::vector<PluginInfo>& _plugins,
            QList< SlotInfo >& _coreSlots ) :
Jan Möbius's avatar
 
Jan Möbius committed
81
  QMainWindow(),
Dirk Wilden's avatar
Dirk Wilden committed
82
  coreSlots_(_coreSlots),
Dirk Wilden's avatar
Dirk Wilden committed
83
  shiftPressed_(false),
Dirk Wilden's avatar
Dirk Wilden committed
84
  fullscreenState_(0),
Jan Möbius's avatar
 
Jan Möbius committed
85
86
  viewModes_(_viewModes),
  viewModeButton_(0),
87
  viewModeMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
88
  splitter_(0),
89
  logWidget_(0),
Jan Möbius's avatar
 
Jan Möbius committed
90
  recentFilesMenu_(0),
91
  helpMenu_(0),
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
92
  cursorPainter_(0),
93
  sceneGraphDialog_(0),
94
95
96
  fileMenu_(0),
  viewMenu_(0),
  toolsMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
97
  fileMenuEnd_(0),
98
99
100
  stereoButton_(0),
  moveButton_(0),
  pickButton_(0),
Dirk Wilden's avatar
Dirk Wilden committed
101
  questionButton_(0),
102
103
104
  globalDrawMenu_(0),
  drawGroup_(0),
  viewGroup_(0),
105
  perspectiveProjectionAction_(0),
106
107
  activeDrawModes_(0),
  availableGlobalDrawModes_(0),
Jan Möbius's avatar
 
Jan Möbius committed
108
  contextMenu_(0),
Jan Möbius's avatar
Jan Möbius committed
109
  contextSelectionMenu_(0),
110
111
  drawGroupViewer_(0),
  viewerDrawMenu_(0),
112
  coordSysMenu_(0),
113
  snapshotName_(""),
Dirk Wilden's avatar
Dirk Wilden committed
114
  snapshotCounter_(0),
Jan Möbius's avatar
 
Jan Möbius committed
115
  stackMenu_(0),
116
  helpWidget_(0),
117
  stereoSettingsWidget_(0),
Jan Möbius's avatar
Jan Möbius committed
118
  aboutWidget_(0),
119
  optionsWidget_(0),
120
  plugins_(_plugins),
121
122
123
124
125
126
  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
127
128
{
  setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
129

Dirk Wilden's avatar
Dirk Wilden committed
130
131
  defaultIconSize_ = iconSize();

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
132
133
134
135
136
  toolSplitter_ = new QSplitter(Qt::Horizontal,this);

  setCentralWidget(toolSplitter_);

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

139
140
  QGLFormat format = QGLFormat::defaultFormat();

141
142
143
  #ifdef ARCH_DARWIN
  format.setStereo(false);
  #else
Jan Möbius's avatar
   
Jan Möbius committed
144
  format.setStereo( OpenFlipper::Options::stereo() );
145
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
146
  format.setAlpha(true);
147
  format.setStencil(true);
148
149
  format.setSampleBuffers(true);
  QGLFormat::setDefaultFormat(format);
Jan Möbius's avatar
   
Jan Möbius committed
150
151

  // Construct GL context & widget
152
153
154
  baseLayout_ = new QtMultiViewLayout;
  baseLayout_->setContentsMargins(0,0,0,0);

155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
  // ===============================================================================
  // Test context capabilities ...
  // If we get stereo buffers, we use them .. which might disable multisampling
  // If we dont have stereo, we disable it to not interfere with multisampling
  // ===============================================================================
  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);
172
  PluginFunctions::shareGLWidget (glWidget_);
173

Jan Möbius's avatar
   
Jan Möbius committed
174
  glView_ = new QtGLGraphicsView(stackedWidget_);
175
  glScene_ = new QtGLGraphicsScene (&examiner_widgets_, baseLayout_);
Jan Möbius's avatar
   
Jan Möbius committed
176

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

Jan Möbius's avatar
   
Jan Möbius committed
180
181
182
183
  glView_->setViewport(glWidget_);
  glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
  glView_->setScene(glScene_);

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
184
185
  // 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
186
  cursorPainter_->setForceNative (OpenFlipperSettings().value("Core/Gui/glViewer/nativeMouse",false).toBool() );
187
  cursorPainter_->setEnabled (stereoActive_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
188
  glScene_->setCursorPainter (cursorPainter_);
189

Jan Möbius's avatar
   
Jan Möbius committed
190
191
192
193
194
195
196
197
198
199
  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
200
201
202
  // ======================================================================
  // Set up the logging window
  // ======================================================================
203

204
  slidingLogger_ = new QtSlideWindow (tr("Log Viewer"), centerWidget_);
205
206
  tempLogWidget = new QWidget;

207
208
  logWidget_ = new LoggerWidget(splitter_);
  logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
209
  logWidget_->resize( splitter_->width() ,240);
Jan Möbius's avatar
Jan Möbius committed
210

211
  originalLoggerSize_ = 0;
Jan Möbius's avatar
Jan Möbius committed
212
  loggerState_ = OpenFlipper::Options::Normal;
213

Jan Möbius's avatar
 
Jan Möbius committed
214
  QList<int> wsizes( splitter_->sizes() );
215

Jan Möbius's avatar
Jan Möbius committed
216
  if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::InScene) {
217
218
    slidingLogger_->attachWidget (logWidget_);
    splitter_->insertWidget (1, tempLogWidget);
219
    wsizes[0] = 1;
Jan Möbius's avatar
 
Jan Möbius committed
220
221
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
Jan Möbius's avatar
Jan Möbius committed
222
    loggerState_ = OpenFlipper::Options::InScene;
223
    baseLayout_->setContentsMargins (0, 0, 0, 16);
Jan Möbius's avatar
Jan Möbius committed
224
225
226
227
228
229
230
231
232
233
234
  } else if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::Hidden) {
    splitter_->insertWidget (1, tempLogWidget);
    wsizes[0] = 1;
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
    loggerState_ = OpenFlipper::Options::Hidden;
  } else {
    // Set initial values to have a usable state
    wsizes[0] = 480;
    wsizes[1] = 240;
    splitter_->setSizes(wsizes);
Jan Möbius's avatar
 
Jan Möbius committed
235
  }
Jan Möbius's avatar
Jan Möbius committed
236

237

Jan Möbius's avatar
 
Jan Möbius committed
238
239
240
  // ======================================================================
  // Create examiner
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
241

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

Jan Möbius's avatar
   
Jan Möbius committed
244
245
    glViewer* examinerWidget = new glViewer(glScene_,
					    glWidget_,
246
                                            PluginFunctions::viewerProperties(0),
247
					    centerWidget_);
Jan Möbius's avatar
Jan Möbius committed
248

Jan Möbius's avatar
Jan Möbius committed
249
250
251
    examiner_widgets_.push_back(examinerWidget);

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

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

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

Jan Möbius's avatar
Jan Möbius committed
257
258
259
  } else {


Jan Möbius's avatar
   
Jan Möbius committed
260
261
262
263
    // Create examiners
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
      glViewer* newWidget = new glViewer(glScene_,
					 glWidget_,
264
                                         PluginFunctions::viewerProperties(i),
265
					 centerWidget_);
Dirk Wilden's avatar
Dirk Wilden committed
266

Jan Möbius's avatar
Jan Möbius committed
267
      examiner_widgets_.push_back(newWidget);
268
269
270
271
272
273
274
275
276
277

      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
278
279
280
281
282
    }

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

Jan Möbius's avatar
Jan Möbius committed
286
287
288
289
    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
290
291
  }

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

Jan Möbius's avatar
   
Jan Möbius committed
295
  centerWidget_->setLayout(baseLayout_);
296
297


Jan Möbius's avatar
 
Jan Möbius committed
298
299
300
  // ======================================================================
  // Setup dragging for examiner widget
  // ======================================================================
301
302
303
304
305
306
307
308
  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* )));
309
310
    connect (examiner_widgets_[i], SIGNAL(signalMakeActive ()),
             this, SLOT(slotActivateExaminer()));
311
312
313

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


Jan Möbius's avatar
 
Jan Möbius committed
317
318
319
  // ======================================================================
  // Create main Toolbar
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
320

Jan Möbius's avatar
Jan Möbius committed
321
322
323
  mainToolbar_ = new QToolBar(tr("Main Toolbar"));
  mainToolbar_->setWindowTitle(tr("Main Toolbar"));
  mainToolbar_->setObjectName(tr("MainToolbar"));
324
  slotAddToolbar(mainToolbar_);
Jan Möbius's avatar
Jan Möbius committed
325

Jan Möbius's avatar
 
Jan Möbius committed
326
327
328
  // ======================================================================
  // Get Toolbar from examiner and integrate it into main window
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
329

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

331
  // Create the toolbar
Jan Möbius's avatar
Jan Möbius committed
332
  viewerToolbar_ = new QToolBar( tr("Viewer Toolbar" ), this );
333
  viewerToolbar_->setOrientation(Qt::Vertical);
Jan Möbius's avatar
 
Jan Möbius committed
334
335
  viewerToolbar_->setAllowedAreas(Qt::AllToolBarAreas);
  viewerToolbar_->setIconSize(QSize(20,20));
Jan Möbius's avatar
Jan Möbius committed
336
  viewerToolbar_->setObjectName(tr("ViewerToolbar"));
337

Jan Möbius's avatar
Jan Möbius committed
338
  slotAddToolbar(viewerToolbar_);
Jan Möbius's avatar
Jan Möbius committed
339

340
341
342
343
  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
344
345
  moveButton_->setToolTip( tr("Switch to <b>move</b> mode.") );
  moveButton_->setWhatsThis(tr(
346
347
348
                  "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
349
                  "<li><b>Zoom</b> using <b>left+middle</b> mouse buttons.</li></ul>" ));
350
351

  connect( moveButton_,SIGNAL( clicked() ), this, SLOT( setExamineMode() ) );
352
/*
353
  connect( this, SIGNAL( actionModeChanged( Viewer::ActionMode ) ),
354
            this, SLOT(   slotActionModeChanged(Viewer::ActionMode) ) );*/
355

Jan Möbius's avatar
Jan Möbius committed
356
  viewerToolbar_->addWidget( moveButton_ )->setText(tr("Move"));
357
358
  moveButton_->setDown(true);

359
  
360
361
362
363
  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
364
365
  pickButton_->setToolTip(tr("Switch to <b>picking</b> mode."));
  pickButton_->setWhatsThis(tr(
366
367
368
                  "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
369
                  "context menu in the viewer."));
370
  connect( pickButton_,SIGNAL( clicked() ), this, SLOT( setPickingMode() ) );
Jan Möbius's avatar
Jan Möbius committed
371
  viewerToolbar_->addWidget( pickButton_)->setText(tr("Pick"));
372
373
374
375
376
377


  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
378
379
  questionButton_->setToolTip(tr("Switch to <b>identification</b> mode."));
  questionButton_->setWhatsThis(tr(
380
381
382
383
                  "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
384
                  "object."));
385
  connect( questionButton_,SIGNAL( clicked() ), this, SLOT( setQuestionMode() ) );
Jan Möbius's avatar
Jan Möbius committed
386
  viewerToolbar_->addWidget( questionButton_)->setText(tr("Question"));
387

388
389
390
391
392
393
394
395
  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: "
396
                  "<ul> "
397
398
399
				  "<li>Single viewer</li>"
				  "<li>Multiple viewers (grid)</li>"
				  "<li>Multiple viewers (hsplit)</li>"
Jan Möbius's avatar
Jan Möbius committed
400
				  "</ul>"));
401

402
403
404
  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"), "");
405

406
  viewerLayoutBox_->setIconSize(QSize(22,22));
407

408
  connect( viewerLayoutBox_,SIGNAL( activated(int) ), this, SLOT( setViewerLayout(int) ) );
409

410
  viewerToolbar_->addWidget( viewerLayoutBox_ );
411

412
413
414
415
416
417
418
419
420
  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
421
    stereoButton_->setToolTip(tr( "Toggle stereo viewing"));
422
423
    // We want a custom context menu
    stereoButton_->setContextMenuPolicy(Qt::CustomContextMenu);
Jan Möbius's avatar
Jan Möbius committed
424
    stereoButton_->setWhatsThis(tr(
425
426
427
428
                  "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
429
                  "display/projection system."));
430
431
432
    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
433
    viewerToolbar_->addWidget( stereoButton_ )->setText( tr("Stereo"));
434
  }
435
436


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

Jan Möbius's avatar
 
Jan Möbius committed
439
440
441
  // Remember logger size
  wsizes = splitter_->sizes();
  originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
442

Jan Möbius's avatar
 
Jan Möbius committed
443
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
444
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
445
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
446
447
448

  toolBoxArea_ = new QWidget (toolSplitter_);

Jan Möbius's avatar
Jan Möbius committed
449
  QGroupBox *gb = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
450
451
452

  QHBoxLayout *hLayout = new QHBoxLayout;

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

Jan Möbius's avatar
Jan Möbius committed
456
457
  hLayout->addWidget(vmChangeButton_);
  hLayout->addWidget(vmEditButton);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
458
459
  gb->setLayout (hLayout);

Jan Möbius's avatar
Jan Möbius committed
460
461
  connect(vmChangeButton_, SIGNAL(clicked()), this, SLOT(slotViewChangeDialog()));
  connect(vmEditButton, SIGNAL(clicked()), this, SLOT(slotViewModeDialog()));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480

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

  QVBoxLayout *vLayout = new QVBoxLayout;
  vLayout->addWidget(gb);
  vLayout->addWidget(toolBoxScroll_);

  toolBoxArea_->setLayout (vLayout);

  wsizes = toolSplitter_->sizes();

  wsizes[0] = 480;
  wsizes[1] = 240;
  toolSplitter_->setSizes(wsizes);

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
481
482
483
484
485
  // ======================================================================
  // Create pick ToolBar
  // ======================================================================

  pickToolbar_ = new QtPickToolbar (this, centerWidget_);
Jan Möbius's avatar
Jan Möbius committed
486

Jan Möbius's avatar
 
Jan Möbius committed
487
488
489
  // ======================================================================
  // Context menu setup
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
490

Jan Möbius's avatar
Jan Möbius committed
491
492
493
494
  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
495

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

Jan Möbius's avatar
 
Jan Möbius committed
499
  setupMenuBar();
Jan Möbius's avatar
Jan Möbius committed
500

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

503
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
504

505
  setExamineMode();
506
507
508

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

509
510
511
512
  // Create stereo settings widget
  stereoSettingsWidget_ = new StereoSettingsWidget(this);
  // Make it look like a dialog
  stereoSettingsWidget_->setWindowFlags(Qt::Popup);
513
514
  // Connect combo boxes and sliders to local slots
  connect(stereoSettingsWidget_->stereoOpengl, SIGNAL(clicked()),
515
          this, SLOT(slotApplyStereoSettings()));
516
517
518
519
520
521
522
  connect(stereoSettingsWidget_->stereoAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoCustomAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoPhilips, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));

523
524
  connect(stereoSettingsWidget_->focalDistance, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
525
526
527
528
529
  connect(stereoSettingsWidget_->eyeDistance, SIGNAL(editingFinished()),
          this, SLOT(slotApplyStereoSettings()));

  connect(stereoSettingsWidget_->headerContentType, SIGNAL(currentIndexChanged(int)),
          this, SLOT(slotApplyStereoSettings(int)));
530
531
532
533
  connect(stereoSettingsWidget_->headerFactor, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->headerOffsetCC, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
534
535
536
537
538
539
  connect(stereoSettingsWidget_->headerSelect, SIGNAL(currentIndexChanged(int)),
          this, SLOT(slotApplyStereoSettings(int)));

  // Close button
  connect(stereoSettingsWidget_->closeButton, SIGNAL(clicked()),
          stereoSettingsWidget_, SLOT(hide()));
Jan Möbius's avatar
 
Jan Möbius committed
540
541
542
543
544
545
546
}


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


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

Jan Möbius's avatar
 
Jan Möbius committed
548
549
550
551
552
553
554
555
}

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

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

Dirk Wilden's avatar
Dirk Wilden committed
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
  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++)
        for ( uint j = 0 ; j < plugins_[p].toolbars.size(); ++j )
          plugins_[p].toolbars[j].second->hide();

      //hide main toolbar
      mainToolbar_->hide();

      //hide viewer toolbar
      viewerToolbar_->hide();

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

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

      //remove viewer frame
      glView_->setFrameStyle(QFrame::NoFrame);

      break;

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

      //show toolbars
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
598
      setViewMode( OpenFlipper::Options::currentViewMode() );
Dirk Wilden's avatar
Dirk Wilden committed
599
600
601
602
603
604
605
606
607
608
609
610

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

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

      //add viewer frame
      glView_->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
  }

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

Jan Möbius's avatar
 
Jan Möbius committed
614
615
616
617
618
  show();
}

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

619
620
621
622
623
624
625
626
627
628
629
/** 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
630
631
  fullscreenState_ = (uint) _state;

Jan Möbius's avatar
Jan Möbius committed
632
  OpenFlipperSettings().setValue("Core/Gui/fullscreen", bool( windowState() & Qt::WindowFullScreen) );
633
634
635
636
637
638

  show();
}

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

Jan Möbius's avatar
 
Jan Möbius committed
639
640
641
642
/** Hide or show logger
  */
void
CoreWidget::toggleLogger() {
Jan Möbius's avatar
Jan Möbius committed
643
644
645
646
647
648
649
650
651
652
653
654
655

  switch (OpenFlipper::Options::loggerState ())
  {
    case OpenFlipper::Options::InScene:
      OpenFlipper::Options::loggerState(OpenFlipper::Options::Normal);
      break;
    case OpenFlipper::Options::Normal:
      OpenFlipper::Options::loggerState(OpenFlipper::Options::Hidden);
      break;
    case OpenFlipper::Options::Hidden:
      OpenFlipper::Options::loggerState(OpenFlipper::Options::InScene);
      break;
  }
Jan Möbius's avatar
Jan Möbius committed
656

657
  // Hide/Show Logger
Jan Möbius's avatar
Jan Möbius committed
658
  showLogger( OpenFlipper::Options::loggerState() );
659
660
661
662
663
}

/** Hide or show logger
  */
void
Jan Möbius's avatar
Jan Möbius committed
664
CoreWidget::showLogger(OpenFlipper::Options::LoggerState _state) {
Jan Möbius's avatar
 
Jan Möbius committed
665
  //Hide Logger
Jan Möbius's avatar
Jan Möbius committed
666
667
668
  if (_state == loggerState_)
    return;

669
670
671
  qreal left, top, right, bottom;
  baseLayout_->getContentsMargins (&left, &top, &right, &bottom);

Jan Möbius's avatar
Jan Möbius committed
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
  switch (_state)
  {
    case OpenFlipper::Options::InScene:
      {
        QList<int> wsizes( splitter_->sizes() );

        // Remember old size
        if (loggerState_ == OpenFlipper::Options::Normal)
          originalLoggerSize_  = wsizes[1];

	if ( originalLoggerSize_ == 0)
          originalLoggerSize_ = 240;

        splitter_->insertWidget (1, tempLogWidget);
        wsizes[0] = wsizes[0]+wsizes[1];
        wsizes[1] = 0;
        splitter_->setSizes(wsizes);
        logWidget_->resize (logWidget_->width (), originalLoggerSize_);
        slidingLogger_->attachWidget (logWidget_);
691
        baseLayout_->setContentsMargins (left, top, right, 16);
Jan Möbius's avatar
Jan Möbius committed
692
693
694
695
696
697
698
699
700
701
702
703
704
705
      }
      break;
    case OpenFlipper::Options::Normal:
      {
        if ( originalLoggerSize_ == 0)
          originalLoggerSize_ = 240;

        QList<int> wsizes( splitter_->sizes() );

        if (loggerState_ == OpenFlipper::Options::InScene)
          originalLoggerSize_ = logWidget_->height ();

        slidingLogger_->detachWidget ();
        splitter_->insertWidget (1, logWidget_);
706
        logWidget_->show ();
Jan Möbius's avatar
Jan Möbius committed
707
708
709
710

        wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
        wsizes[1] = originalLoggerSize_;
        splitter_->setSizes(wsizes);
711
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
      }
      break;
    case OpenFlipper::Options::Hidden:
      {
        QList<int> wsizes( splitter_->sizes() );

        // Remember old size
        if (loggerState_ == OpenFlipper::Options::Normal)
          originalLoggerSize_  = wsizes[1];

	if (loggerState_ == OpenFlipper::Options::InScene)
	{
	  slidingLogger_->detachWidget ();
	  originalLoggerSize_ = logWidget_->height ();
	}

        splitter_->insertWidget (1, tempLogWidget);
        wsizes[0] = wsizes[0]+wsizes[1];
        wsizes[1] = 0;
        splitter_->setSizes(wsizes);
732
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
733
734
735
736
737
738
      }
      break;
  }
  loggerState_ = _state;

/*
739
  if ( !_state ) {
Jan Möbius's avatar
 
Jan Möbius committed
740
    QList<int> wsizes( splitter_->sizes() );
Jan Möbius's avatar
Jan Möbius committed
741

Jan Möbius's avatar
 
Jan Möbius committed
742
743
    // Remember old size
    originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
744

745
746
747
    int height = logWidget_->height ();

    splitter_->insertWidget (1, tempLogWidget);
Jan Möbius's avatar
 
Jan Möbius committed
748
749
750
    wsizes[0] = wsizes[0]+wsizes[1];
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
    logWidget_->resize (logWidget_->width (), height);
    slidingLogger_->attachWidget (logWidget_);

  } else if (splitter_->widget (1) == logWidget_) {

    if ( originalLoggerSize_ == 0)
        originalLoggerSize_ = 240;

    QList<int> wsizes( splitter_->sizes() );

    if (wsizes[0] == 0)
      wsizes[0] = height();

    wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
    wsizes[1] = originalLoggerSize_;
    splitter_->setSizes(wsizes);
Jan Möbius's avatar
 
Jan Möbius committed
767
  } else {
Jan Möbius's avatar
Jan Möbius committed
768

769
770
771
772
773
774
775
776
777
778
    QList<int> wsizes( splitter_->sizes() );

    int height = logWidget_->height ();

    slidingLogger_->detachWidget ();
    splitter_->insertWidget (1, logWidget_);

    wsizes[0] = wsizes[0]+wsizes[1] - height;
    wsizes[1] = height;
    splitter_->setSizes(wsizes);
Jan Möbius's avatar
 
Jan Möbius committed
779
  }
Jan Möbius's avatar
Jan Möbius committed
780
  */
Jan Möbius's avatar
 
Jan Möbius committed
781
782
783
784
785
786
787
788
}

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

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

Jan Möbius's avatar
 
Jan Möbius committed
790
  //toggle
Jan Möbius's avatar
Jan Möbius committed
791
  showToolbox( OpenFlipperSettings().value("Core/Gui/ToolBoxes/hidden",false).toBool() );
792
793
794
795
796
797
798
799
800
801
}

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

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

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

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

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
807
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
808
809
810

  }else{
    //reset last ViewMode
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
811
    if (OpenFlipper::Options::currentViewMode().trimmed() == "")
Jan Möbius's avatar
 
Jan Möbius committed
812
813
      setViewMode("All");
    else
Jan Möbius's avatar
Marlin:    
Jan Möbius committed
814
      setViewMode( OpenFlipper::Options::currentViewMode() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
815
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
816
817
  }
}
Jan Möbius's avatar
Jan Möbius committed
818

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

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

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

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

}

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

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

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

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

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

848
    QFileInfo fi(recentFiles[i]);
849
850

    if (fi.suffix() == "ini")
851
      recentFilesMenu_->addAction(QIcon(OpenFlipper::Options::iconDirStr() + OpenFlipper::Options::dirSeparator()+"Settings-Icon.png"), recentFiles[i]);
852
    else
853
      recentFilesMenu_->addAction(typeIcon( typeId(recentTypes[i]) ), recentFiles[i]);
854

Jan Möbius's avatar
 
Jan Möbius committed
855
856
  }

Jan Möbius's avatar
Jan Möbius committed
857
858
859
}

void
Jan Möbius's avatar
 
Jan Möbius committed
860
861
862
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
863
864

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

866
867
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
868

869
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
870
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
871
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
872
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
873
874
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
875
876

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

Jan Möbius's avatar
Jan Möbius committed
879
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
880
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
881
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
882
883
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
884
885
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
886

887
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
888

889
}
Jan Möbius's avatar
Jan Möbius committed
890

891
void CoreWidget::nextViewerLayout() {
892

Jan Möbius's avatar
Jan Möbius committed
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
  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;
      }
  }
919
920
921
922
}


void
923
CoreWidget::setViewerLayout(int _idx) {
924

Jan Möbius's avatar
Jan Möbius committed
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
  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;
  }
941
942

    viewerLayoutBox_->setCurrentIndex(_idx);
Jan Möbius's avatar
Jan Möbius committed
943
  }
944
}
Jan Möbius's avatar
 
Jan Möbius committed
945

946
947
948
949
950
951
952
953
954
955
956
957
958
959
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*)),
960
                examiner_widgets_[i], SLOT(updateGL()));
961
962
963
964
      }

    }

965
    sceneGraphDialog_->setGeneratorMap(PluginFunctions::getSceneGraphGeneratorList() );
966
967
968
969
    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
   
Jan Möbius committed
970
971
972
973
974
975
//-----------------------------------------------------------------------------

void
CoreWidget::sceneRectChanged(const QRectF &rect)
{
  centerWidget_->setGeometry (rect);
976
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
977
  pickToolbar_->updateGeometry ();
Jan Möbius's avatar
   
Jan Möbius committed
978
979
}

Dirk Wilden's avatar
Dirk Wilden committed
980
981
982
983
984
985
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
986
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
987
988

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
989
990
991
  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
992
993
  dialog->show();
}
Jan Möbius's avatar
   
Jan Möbius committed
994

995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
//-----------------------------------------------------------------------------

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

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1014
1015
1016
//-----------------------------------------------------------------------------

/// Use native or gl painted cursor
1017
void CoreWidget::setForceNativeCursor ( bool _state )
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1018
{
1019
  cursorPainter_->setForceNative (_state);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
1020
}
1021

Jan Möbius's avatar
 
Jan Möbius committed
1022
//=============================================================================
1023