CoreWidget.cc 31.4 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
183
184
  // gl widget as parent to make sure that the CursorPainter will be deleted before
  cursorPainter_ = new CursorPainter (glWidget_);
  cursorPainter_->setEnabled (OpenFlipper::Options::glMouse ());
  glScene_->setCursorPainter (cursorPainter_);
185

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

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

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

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

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

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

235

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

  connect( moveButton_,SIGNAL( clicked() ), this, SLOT( setExamineMode() ) );
348
/*
349
  connect( this, SIGNAL( actionModeChanged( Viewer::ActionMode ) ),
350
            this, SLOT(   slotActionModeChanged(Viewer::ActionMode) ) );*/
351

Jan Möbius's avatar
Jan Möbius committed
352
  viewerToolbar_->addWidget( moveButton_ )->setText(tr("Move"));
353
354
355
356
357
358
359
  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
360
361
  lightButton_->setToolTip(tr("Switch to <b>light</b> mode."));
  lightButton_->setWhatsThis(tr(
362
                  "Switch to <b>light</b> mode.<br>"
Jan Möbius's avatar
Jan Möbius committed
363
                  "Rotate lights using left mouse button."));
364
365

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


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


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

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

411
412
413
  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"), "");
414

415
  viewerLayoutBox_->setIconSize(QSize(22,22));
416

417
  connect( viewerLayoutBox_,SIGNAL( activated(int) ), this, SLOT( setViewerLayout(int) ) );
418

419
  viewerToolbar_->addWidget( viewerLayoutBox_ );
420

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


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

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

Jan Möbius's avatar
 
Jan Möbius committed
448
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
449
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
450
  // ======================================================================
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
451
452
453

  toolBoxArea_ = new QWidget (toolSplitter_);

Jan Möbius's avatar
Jan Möbius committed
454
  QGroupBox *gb = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
455
456
457

  QHBoxLayout *hLayout = new QHBoxLayout;

Jan Möbius's avatar
Jan Möbius committed
458
  QPushButton* vmButton = new QPushButton(tr("Change View Mode"));
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
  hLayout->addWidget (vmButton);
  gb->setLayout (hLayout);

  connect(vmButton, SIGNAL(clicked()), this, SLOT(slotViewModeDialog()));

  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
482
483
484
485
486
  // ======================================================================
  // Create pick ToolBar
  // ======================================================================

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

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

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

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

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

Jan Möbius's avatar
 
Jan Möbius committed
502
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
503

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

506
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
507

508
  setExamineMode();
509
510
511

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

Jan Möbius's avatar
 
Jan Möbius committed
512
513
514
515
516
517
518
}


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


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

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

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

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

529
530
531
532
  setWindowState( windowState() ^  Qt::WindowFullScreen);

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

Jan Möbius's avatar
 
Jan Möbius committed
533
534
535
536
537
  show();
}

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

538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
/** 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
556
557
558
559
/** Hide or show logger
  */
void
CoreWidget::toggleLogger() {
Jan Möbius's avatar
Jan Möbius committed
560
561
562
563
564
565
566
567
568
569
570
571
572

  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
573

574
  // Hide/Show Logger
Jan Möbius's avatar
Jan Möbius committed
575
  showLogger( OpenFlipper::Options::loggerState() );
576
577
578
579
580
}

/** Hide or show logger
  */
void
Jan Möbius's avatar
Jan Möbius committed
581
CoreWidget::showLogger(OpenFlipper::Options::LoggerState _state) {
Jan Möbius's avatar
 
Jan Möbius committed
582
  //Hide Logger
Jan Möbius's avatar
Jan Möbius committed
583
584
585
  if (_state == loggerState_)
    return;

586
587
588
  qreal left, top, right, bottom;
  baseLayout_->getContentsMargins (&left, &top, &right, &bottom);

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

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

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

Jan Möbius's avatar
 
Jan Möbius committed
659
660
    // Remember old size
    originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
661

662
663
664
    int height = logWidget_->height ();

    splitter_->insertWidget (1, tempLogWidget);
Jan Möbius's avatar
 
Jan Möbius committed
665
666
667
    wsizes[0] = wsizes[0]+wsizes[1];
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
    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
684
  } else {
Jan Möbius's avatar
Jan Möbius committed
685

686
687
688
689
690
691
692
693
694
695
    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
696
  }
Jan Möbius's avatar
Jan Möbius committed
697
  */
Jan Möbius's avatar
 
Jan Möbius committed
698
699
700
701
702
703
704
705
}

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

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

Jan Möbius's avatar
 
Jan Möbius committed
707
  //toggle
708
709
710
711
712
713
714
715
716
717
718
719
  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
720

Jan Möbius's avatar
Jan Möbius committed
721
  if ( OpenFlipper::Options::hideToolbox() ){
Jan Möbius's avatar
 
Jan Möbius committed
722
723

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
724
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
725
726
727
728
729
730
731

  }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
732
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
733
734
  }
}
Jan Möbius's avatar
Jan Möbius committed
735

Jan Möbius's avatar
 
Jan Möbius committed
736
737
//=============================================================================

Jan Möbius's avatar
Jan Möbius committed
738
739
void
CoreWidget::addRecent(QString _filename, DataType _type)
Jan Möbius's avatar
 
Jan Möbius committed
740
{
741
742
  //dont add objects to recentMenu while loadind Settings
  if ( OpenFlipper::Options::loadingSettings() ) return;
Jan Möbius's avatar
Jan Möbius committed
743

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

Jan Möbius's avatar
 
Jan Möbius committed
746
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
747
748
749
750
751
752
753

}

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

void
CoreWidget::updateRecent()
Jan Möbius's avatar
 
Jan Möbius committed
754
755
756
{
  if ( recentFilesMenu_ == NULL)
    return;
Jan Möbius's avatar
Jan Möbius committed
757

Jan Möbius's avatar
 
Jan Möbius committed
758
759
760
761
762
  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();
763
764
765
766
767
768
769
    
    QFileInfo fi(recentFiles[i].filename); 

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

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

Jan Möbius's avatar
Jan Möbius committed
774
775
776
}

void
Jan Möbius's avatar
 
Jan Möbius committed
777
778
779
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
780
781

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

783
784
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
785

786
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
787
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
788
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
789
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
790
791
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
792
793

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

Jan Möbius's avatar
Jan Möbius committed
796
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
797
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
798
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
799
800
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
801
802
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
803

804
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
805

806
}
Jan Möbius's avatar
Jan Möbius committed
807

808
void CoreWidget::nextViewerLayout() {
809
810
811
812
813

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

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

			// Update combo box in the toolbar
818
			viewerLayoutBox_->setCurrentIndex(1);
819
820
			break;
		case QtMultiViewLayout::Grid:
821
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
822
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
823
824

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

			// Update combo box in the toolbar
832
			viewerLayoutBox_->setCurrentIndex(0);
833
834
835
836
837
838
839
			break;
		}
	}
}


void
840
CoreWidget::setViewerLayout(int _idx) {
841
842
843
844
845

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

		switch (_idx) {
		case 0:
846
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
847
848
849
			baseLayout_->setMode(QtMultiViewLayout::SingleView);
			break;
		case 1:
850
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
851
852
853
			baseLayout_->setMode(QtMultiViewLayout::Grid);
			break;
		case 2:
854
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
855
856
857
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
			break;
		}
858
859

    viewerLayoutBox_->setCurrentIndex(_idx);
860
861
	}
}
Jan Möbius's avatar
 
Jan Möbius committed
862

863
864
865
866
867
868
869
870
871
872
873
874
875
876
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*)),
877
                examiner_widgets_[i], SLOT(updateGL()));
878
879
880
881
882
883
884
885
      }

    }

    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
   
Jan Möbius committed
886
887
888
889
890
891
//-----------------------------------------------------------------------------

void
CoreWidget::sceneRectChanged(const QRectF &rect)
{
  centerWidget_->setGeometry (rect);
892
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
893
  pickToolbar_->updateGeometry ();
Jan Möbius's avatar
   
Jan Möbius committed
894
895
}

Dirk Wilden's avatar
Dirk Wilden committed
896
897
898
899
900
901
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
902
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
903
904

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
905
906
907
  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
908
909
  dialog->show();
}
Jan Möbius's avatar
   
Jan Möbius committed
910

911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
//-----------------------------------------------------------------------------

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

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
930
931
932
933
934
935
936
//-----------------------------------------------------------------------------

/// Use native or gl painted cursor
void CoreWidget::setGlCursor ( bool _state )
{
  cursorPainter_->setEnabled (_state);
}
937

Jan Möbius's avatar
 
Jan Möbius committed
938
//=============================================================================
939