CoreWidget.cc 31.7 KB
Newer Older
1
2
3
4
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
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
 *      Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen      *
 *                           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),
Jan Möbius's avatar
 
Jan Möbius committed
84
85
  viewModes_(_viewModes),
  viewModeButton_(0),
86
  viewModeMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
87
  splitter_(0),
88
  logWidget_(0),
Jan Möbius's avatar
 
Jan Möbius committed
89
  recentFilesMenu_(0),
90
  helpMenu_(0),
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
91
  cursorPainter_(0),
92
  sceneGraphDialog_(0),
93
94
95
  fileMenu_(0),
  viewMenu_(0),
  toolsMenu_(0),
Jan Möbius's avatar
 
Jan Möbius committed
96
  fileMenuEnd_(0),
97
98
99
100
  stereoButton_(0),
  moveButton_(0),
  lightButton_(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),
Dirk Wilden's avatar
Dirk Wilden committed
113
114
  snapshotName_("snap.png"),
  snapshotCounter_(0),
Jan Möbius's avatar
 
Jan Möbius committed
115
  stackMenu_(0),
116
  helpWidget_(0),
Jan Möbius's avatar
Jan Möbius committed
117
  aboutWidget_(0),
118
  optionsWidget_(0),
119
  plugins_(_plugins),
120
121
122
123
124
125
  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
126
127
{
  setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
128

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
129
130
131
132
133
  toolSplitter_ = new QSplitter(Qt::Horizontal,this);

  setCentralWidget(toolSplitter_);

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

136
137
  QGLFormat format = QGLFormat::defaultFormat();

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

  // Construct GL context & widget
149
150
151
  baseLayout_ = new QtMultiViewLayout;
  baseLayout_->setContentsMargins(0,0,0,0);

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
  // ===============================================================================
  // 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);
169
  PluginFunctions::shareGLWidget (glWidget_);
170

Jan Möbius's avatar
   
Jan Möbius committed
171
  glView_ = new QtGLGraphicsView(stackedWidget_);
172
  glScene_ = new QtGLGraphicsScene (&examiner_widgets_, baseLayout_);
Jan Möbius's avatar
   
Jan Möbius committed
173

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

Jan Möbius's avatar
   
Jan Möbius committed
177
178
179
180
  glView_->setViewport(glWidget_);
  glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
  glView_->setScene(glScene_);

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
181
182
  // gl widget as parent to make sure that the CursorPainter will be deleted before
  cursorPainter_ = new CursorPainter (glWidget_);
183
184
  cursorPainter_->setForceNative (!OpenFlipper::Options::glMouse ());
  cursorPainter_->setEnabled (stereoActive_);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
185
  glScene_->setCursorPainter (cursorPainter_);
186

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

201
  slidingLogger_ = new QtSlideWindow (tr("Log Viewer"), centerWidget_);
202
203
  tempLogWidget = new QWidget;

204
205
206
  logWidget_ = new LoggerWidget(splitter_);
  logWidget_->setReadOnly(true);
  logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
207
  logWidget_->resize( splitter_->width() ,240);
208
  logWidget_->setLineWrapMode( QTextEdit::NoWrap );
Jan Möbius's avatar
Jan Möbius committed
209

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

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

Jan Möbius's avatar
Jan Möbius committed
215
  if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::InScene) {
216
217
    slidingLogger_->attachWidget (logWidget_);
    splitter_->insertWidget (1, tempLogWidget);
218
    wsizes[0] = 1;
Jan Möbius's avatar
 
Jan Möbius committed
219
220
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
Jan Möbius's avatar
Jan Möbius committed
221
    loggerState_ = OpenFlipper::Options::InScene;
222
    baseLayout_->setContentsMargins (0, 0, 0, 16);
Jan Möbius's avatar
Jan Möbius committed
223
224
225
226
227
228
229
230
231
232
233
  } 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
234
  }
Jan Möbius's avatar
Jan Möbius committed
235

236

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

  if ( !OpenFlipper::Options::multiView() ) {

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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


  lightButton_ = new QToolButton( viewerToolbar_ );
  lightButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"light-mode.png") );
  lightButton_->setMinimumSize( 16, 16 );
  lightButton_->setMaximumSize( 32, 32 );
Jan Möbius's avatar
Jan Möbius committed
363
364
  lightButton_->setToolTip(tr("Switch to <b>light</b> mode."));
  lightButton_->setWhatsThis(tr(
365
                  "Switch to <b>light</b> mode.<br>"
Jan Möbius's avatar
Jan Möbius committed
366
                  "Rotate lights using left mouse button."));
367
368

  connect( lightButton_,SIGNAL( clicked() ), this, SLOT( setLightMode() ) );
Jan Möbius's avatar
Jan Möbius committed
369
  viewerToolbar_->addWidget( lightButton_)->setText(tr("Light"));
370
371
372
373
374
375


  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
376
377
  pickButton_->setToolTip(tr("Switch to <b>picking</b> mode."));
  pickButton_->setWhatsThis(tr(
378
379
380
                  "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
381
                  "context menu in the viewer."));
382
  connect( pickButton_,SIGNAL( clicked() ), this, SLOT( setPickingMode() ) );
Jan Möbius's avatar
Jan Möbius committed
383
  viewerToolbar_->addWidget( pickButton_)->setText(tr("Pick"));
384
385
386
387
388
389


  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
390
391
  questionButton_->setToolTip(tr("Switch to <b>identification</b> mode."));
  questionButton_->setWhatsThis(tr(
392
393
394
395
                  "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
396
                  "object."));
397
  connect( questionButton_,SIGNAL( clicked() ), this, SLOT( setQuestionMode() ) );
Jan Möbius's avatar
Jan Möbius committed
398
  viewerToolbar_->addWidget( questionButton_)->setText(tr("Question"));
399

400
401
402
403
404
405
406
407
  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: "
408
                  "<ul> "
409
410
411
				  "<li>Single viewer</li>"
				  "<li>Multiple viewers (grid)</li>"
				  "<li>Multiple viewers (hsplit)</li>"
Jan Möbius's avatar
Jan Möbius committed
412
				  "</ul>"));
413

414
415
416
  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"), "");
417

418
  viewerLayoutBox_->setIconSize(QSize(22,22));
419

420
  connect( viewerLayoutBox_,SIGNAL( activated(int) ), this, SLOT( setViewerLayout(int) ) );
421

422
  viewerToolbar_->addWidget( viewerLayoutBox_ );
423

424
425
426
427
428
429
430
431
432
  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
433
434
    stereoButton_->setToolTip(tr( "Toggle stereo viewing"));
    stereoButton_->setWhatsThis(tr(
435
436
437
438
                  "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
439
                  "display/projection system."));
440
    connect( stereoButton_,SIGNAL( clicked() ), this , SLOT( slotToggleStereoMode() ) );
Jan Möbius's avatar
Jan Möbius committed
441
    viewerToolbar_->addWidget( stereoButton_ )->setText( tr("Stereo"));
442
  }
443
444


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

Jan Möbius's avatar
 
Jan Möbius committed
447
448
449
  // Remember logger size
  wsizes = splitter_->sizes();
  originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
450

Jan Möbius's avatar
 
Jan Möbius committed
451
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
452
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
453
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
454
455
456

  toolBoxArea_ = new QWidget (toolSplitter_);

Jan Möbius's avatar
Jan Möbius committed
457
  QGroupBox *gb = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
458
459
460

  QHBoxLayout *hLayout = new QHBoxLayout;

Jan Möbius's avatar
Jan Möbius committed
461
462
463
464
465
  vmChangeButton_ = new QPushButton(tr("Change View Mode"));
  QPushButton* vmEditButton   = new QPushButton(tr("Edit View Modes"));
  
  hLayout->addWidget(vmChangeButton_);
  hLayout->addWidget(vmEditButton);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
466
467
  gb->setLayout (hLayout);

Jan Möbius's avatar
Jan Möbius committed
468
469
  connect(vmChangeButton_, SIGNAL(clicked()), this, SLOT(slotViewChangeDialog()));
  connect(vmEditButton, SIGNAL(clicked()), this, SLOT(slotViewModeDialog()));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488

  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
489
490
491
492
493
  // ======================================================================
  // Create pick ToolBar
  // ======================================================================

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

Jan Möbius's avatar
 
Jan Möbius committed
495
496
497
  // ======================================================================
  // Context menu setup
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
498

Jan Möbius's avatar
Jan Möbius committed
499
500
501
502
  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
503

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

Jan Möbius's avatar
 
Jan Möbius committed
507
  setupMenuBar();
Jan Möbius's avatar
Jan Möbius committed
508

Jan Möbius's avatar
 
Jan Möbius committed
509
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
510

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

513
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
514

515
  setExamineMode();
516
517
518

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

Jan Möbius's avatar
 
Jan Möbius committed
519
520
521
522
523
524
525
}


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


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

Jan Möbius's avatar
 
Jan Möbius committed
527
528
529
530
531
532
533
534
}

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

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

536
537
538
539
  setWindowState( windowState() ^  Qt::WindowFullScreen);

  OpenFlipper::Options::fullScreen( bool( windowState() & Qt::WindowFullScreen) );

Jan Möbius's avatar
 
Jan Möbius committed
540
541
542
543
544
  show();
}

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

545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
/** 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);
  }

  OpenFlipper::Options::fullScreen( bool( windowState() & Qt::WindowFullScreen) );

  show();
}

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

Jan Möbius's avatar
 
Jan Möbius committed
563
564
565
566
/** Hide or show logger
  */
void
CoreWidget::toggleLogger() {
Jan Möbius's avatar
Jan Möbius committed
567
568
569
570
571
572
573
574
575
576
577
578
579

  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
580

581
  // Hide/Show Logger
Jan Möbius's avatar
Jan Möbius committed
582
  showLogger( OpenFlipper::Options::loggerState() );
583
584
585
586
587
}

/** Hide or show logger
  */
void
Jan Möbius's avatar
Jan Möbius committed
588
CoreWidget::showLogger(OpenFlipper::Options::LoggerState _state) {
Jan Möbius's avatar
 
Jan Möbius committed
589
  //Hide Logger
Jan Möbius's avatar
Jan Möbius committed
590
591
592
  if (_state == loggerState_)
    return;

593
594
595
  qreal left, top, right, bottom;
  baseLayout_->getContentsMargins (&left, &top, &right, &bottom);

Jan Möbius's avatar
Jan Möbius committed
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
  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_);
615
        baseLayout_->setContentsMargins (left, top, right, 16);
Jan Möbius's avatar
Jan Möbius committed
616
617
618
619
620
621
622
623
624
625
626
627
628
629
      }
      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_);
630
        logWidget_->show ();
Jan Möbius's avatar
Jan Möbius committed
631
632
633
634

        wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
        wsizes[1] = originalLoggerSize_;
        splitter_->setSizes(wsizes);
635
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
      }
      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);
656
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
657
658
659
660
661
662
      }
      break;
  }
  loggerState_ = _state;

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

Jan Möbius's avatar
 
Jan Möbius committed
666
667
    // Remember old size
    originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
668

669
670
671
    int height = logWidget_->height ();

    splitter_->insertWidget (1, tempLogWidget);
Jan Möbius's avatar
 
Jan Möbius committed
672
673
674
    wsizes[0] = wsizes[0]+wsizes[1];
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
    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
691
  } else {
Jan Möbius's avatar
Jan Möbius committed
692

693
694
695
696
697
698
699
700
701
702
    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
703
  }
Jan Möbius's avatar
Jan Möbius committed
704
  */
Jan Möbius's avatar
 
Jan Möbius committed
705
706
707
708
709
710
711
712
}

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

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

Jan Möbius's avatar
 
Jan Möbius committed
714
  //toggle
715
716
717
718
719
720
721
722
723
724
725
726
  showToolbox( OpenFlipper::Options::hideToolbox() );
}

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

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

  //toggle
  OpenFlipper::Options::hideToolbox( !_state );
Jan Möbius's avatar
 
Jan Möbius committed
727

Jan Möbius's avatar
Jan Möbius committed
728
  if ( OpenFlipper::Options::hideToolbox() ){
Jan Möbius's avatar
 
Jan Möbius committed
729
730

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
731
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
732
733
734
735
736
737
738

  }else{
    //reset last ViewMode
    if (OpenFlipper::Options::defaultToolboxMode().trimmed() == "")
      setViewMode("All");
    else
      setViewMode( OpenFlipper::Options::defaultToolboxMode() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
739
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
740
741
  }
}
Jan Möbius's avatar
Jan Möbius committed
742

Jan Möbius's avatar
 
Jan Möbius committed
743
744
//=============================================================================

Jan Möbius's avatar
Jan Möbius committed
745
746
void
CoreWidget::addRecent(QString _filename, DataType _type)
Jan Möbius's avatar
 
Jan Möbius committed
747
{
748
749
  //dont add objects to recentMenu while loadind Settings
  if ( OpenFlipper::Options::loadingSettings() ) return;
Jan Möbius's avatar
Jan Möbius committed
750

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

Jan Möbius's avatar
 
Jan Möbius committed
753
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
754
755
756
757
758
759
760

}

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

void
CoreWidget::updateRecent()
Jan Möbius's avatar
 
Jan Möbius committed
761
762
763
{
  if ( recentFilesMenu_ == NULL)
    return;
Jan Möbius's avatar
Jan Möbius committed
764

Jan Möbius's avatar
 
Jan Möbius committed
765
766
767
768
769
  recentFilesMenu_->clear();

  QVector< OpenFlipper::Options::RecentFile > recentFiles = OpenFlipper::Options::recentFiles();
  for (int i = 0 ; i < recentFiles.size() ; ++i ) {
    QString path = OpenFlipper::Options::iconDirStr() + OpenFlipper::Options::dirSeparator();
770
771
772
773
774
775
776
    
    QFileInfo fi(recentFiles[i].filename); 

    if (fi.suffix() == "ini")
      path += "Settings-Icon.png";
    else
      path += typeIcon( recentFiles[i].type );
777

Jan Möbius's avatar
Jan Möbius committed
778
    recentFilesMenu_->addAction(QIcon(path), recentFiles[i].filename);
Jan Möbius's avatar
 
Jan Möbius committed
779
780
  }

Jan Möbius's avatar
Jan Möbius committed
781
782
783
}

void
Jan Möbius's avatar
 
Jan Möbius committed
784
785
786
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
787
788

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

790
791
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
792

793
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
794
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
795
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
796
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
797
798
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
799
800

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

Jan Möbius's avatar
Jan Möbius committed
803
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
804
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
805
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
806
807
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
808
809
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
810

811
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
812

813
}
Jan Möbius's avatar
Jan Möbius committed
814

815
void CoreWidget::nextViewerLayout() {
816
817
818
819
820

	if (OpenFlipper::Options::multiView()) {

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

			// Update combo box in the toolbar
825
			viewerLayoutBox_->setCurrentIndex(1);
826
827
			break;
		case QtMultiViewLayout::Grid:
828
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
829
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
830
831

			// Update combo box in the toolbar
832
			viewerLayoutBox_->setCurrentIndex(2);
833
834
			break;
		case QtMultiViewLayout::HSplit:
835
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
836
			baseLayout_->setMode(QtMultiViewLayout::SingleView);
837
838

			// Update combo box in the toolbar
839
			viewerLayoutBox_->setCurrentIndex(0);
840
841
842
843
844
845
846
			break;
		}
	}
}


void
847
CoreWidget::setViewerLayout(int _idx) {
848
849
850
851
852

	if (OpenFlipper::Options::multiView()) {

		switch (_idx) {
		case 0:
853
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
854
855
856
			baseLayout_->setMode(QtMultiViewLayout::SingleView);
			break;
		case 1:
857
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
858
859
860
			baseLayout_->setMode(QtMultiViewLayout::Grid);
			break;
		case 2:
861
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
862
863
864
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
			break;
		}
865
866

    viewerLayoutBox_->setCurrentIndex(_idx);
867
868
	}
}
Jan Möbius's avatar
 
Jan Möbius committed
869

870
871
872
873
874
875
876
877
878
879
880
881
882
883
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*)),
884
                examiner_widgets_[i], SLOT(updateGL()));
885
886
887
888
889
890
891
892
      }

    }

    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
   
Jan Möbius committed
893
894
895
896
897
898
//-----------------------------------------------------------------------------

void
CoreWidget::sceneRectChanged(const QRectF &rect)
{
  centerWidget_->setGeometry (rect);
899
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
900
  pickToolbar_->updateGeometry ();
Jan Möbius's avatar
   
Jan Möbius committed
901
902
}

Dirk Wilden's avatar
Dirk Wilden committed
903
904
905
906
907
908
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
909
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
910
911

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
912
913
914
  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
915
916
  dialog->show();
}
Jan Möbius's avatar
   
Jan Möbius committed
917

918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
//-----------------------------------------------------------------------------

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

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
937
938
939
940
941
//-----------------------------------------------------------------------------

/// Use native or gl painted cursor
void CoreWidget::setGlCursor ( bool _state )
{
942
  cursorPainter_->setForceNative (!_state);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
943
}
944

Jan Möbius's avatar
 
Jan Möbius committed
945
//=============================================================================
946