CoreWidget.cc 34.9 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),
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 101
  stereoButton_(0),
  moveButton_(0),
  lightButton_(0),
  pickButton_(0),
Dirk Wilden's avatar
Dirk Wilden committed
102
  questionButton_(0),
103 104 105
  globalDrawMenu_(0),
  drawGroup_(0),
  viewGroup_(0),
106
  perspectiveProjectionAction_(0),
107 108
  activeDrawModes_(0),
  availableGlobalDrawModes_(0),
Jan Möbius's avatar
 
Jan Möbius committed
109
  contextMenu_(0),
Jan Möbius's avatar
Jan Möbius committed
110
  contextSelectionMenu_(0),
111 112
  drawGroupViewer_(0),
  viewerDrawMenu_(0),
113
  coordSysMenu_(0),
Dirk Wilden's avatar
Dirk Wilden committed
114 115
  snapshotName_("snap.png"),
  snapshotCounter_(0),
Jan Möbius's avatar
 
Jan Möbius committed
116
  stackMenu_(0),
117
  helpWidget_(0),
118
  stereoSettingsWidget_(0),
Jan Möbius's avatar
Jan Möbius committed
119
  aboutWidget_(0),
120
  optionsWidget_(0),
121
  plugins_(_plugins),
122 123 124 125 126 127
  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
128 129
{
  setupStatusBar();
Jan Möbius's avatar
Jan Möbius committed
130

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

  setCentralWidget(toolSplitter_);

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

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

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

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

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

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

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

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

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

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

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

206 207
  logWidget_ = new LoggerWidget(splitter_);
  logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
208
  logWidget_->resize( splitter_->width() ,240);
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"));
336

Jan Möbius's avatar
Jan Möbius committed
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
    stereoButton_->setToolTip(tr( "Toggle stereo viewing"));
434 435
    // We want a custom context menu
    stereoButton_->setContextMenuPolicy(Qt::CustomContextMenu);
Jan Möbius's avatar
Jan Möbius committed
436
    stereoButton_->setWhatsThis(tr(
437 438 439 440
                  "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
441
                  "display/projection system."));
442 443 444
    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
445
    viewerToolbar_->addWidget( stereoButton_ )->setText( tr("Stereo"));
446
  }
447 448


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

Jan Möbius's avatar
 
Jan Möbius committed
451 452 453
  // Remember logger size
  wsizes = splitter_->sizes();
  originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
454

Jan Möbius's avatar
 
Jan Möbius committed
455
  // ======================================================================
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
456
  // Create ToolBox area
Jan Möbius's avatar
Jan Möbius committed
457
  // ======================================================================
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
458 459 460

  toolBoxArea_ = new QWidget (toolSplitter_);

Jan Möbius's avatar
Jan Möbius committed
461
  QGroupBox *gb = new QGroupBox (tr("ViewMode"));
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
462 463 464

  QHBoxLayout *hLayout = new QHBoxLayout;

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

Jan Möbius's avatar
Jan Möbius committed
468 469
  hLayout->addWidget(vmChangeButton_);
  hLayout->addWidget(vmEditButton);
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
470 471
  gb->setLayout (hLayout);

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

  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
493 494 495 496 497
  // ======================================================================
  // Create pick ToolBar
  // ======================================================================

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

Jan Möbius's avatar
 
Jan Möbius committed
499 500 501
  // ======================================================================
  // Context menu setup
  // ======================================================================
Jan Möbius's avatar
Jan Möbius committed
502

Jan Möbius's avatar
Jan Möbius committed
503 504 505 506
  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
507

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

Jan Möbius's avatar
 
Jan Möbius committed
511
  setupMenuBar();
Jan Möbius's avatar
Jan Möbius committed
512

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

515
  registerCoreKeys();
Dirk Wilden's avatar
Dirk Wilden committed
516

517
  setExamineMode();
518 519 520

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

521 522 523 524
  // Create stereo settings widget
  stereoSettingsWidget_ = new StereoSettingsWidget(this);
  // Make it look like a dialog
  stereoSettingsWidget_->setWindowFlags(Qt::Popup);
525 526
  // Connect combo boxes and sliders to local slots
  connect(stereoSettingsWidget_->stereoOpengl, SIGNAL(clicked()),
527
          this, SLOT(slotApplyStereoSettings()));
528 529 530 531 532 533 534
  connect(stereoSettingsWidget_->stereoAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoCustomAnaglyph, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->stereoPhilips, SIGNAL(clicked()),
          this, SLOT(slotApplyStereoSettings()));

535 536
  connect(stereoSettingsWidget_->focalDistance, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
537 538 539 540 541
  connect(stereoSettingsWidget_->eyeDistance, SIGNAL(editingFinished()),
          this, SLOT(slotApplyStereoSettings()));

  connect(stereoSettingsWidget_->headerContentType, SIGNAL(currentIndexChanged(int)),
          this, SLOT(slotApplyStereoSettings(int)));
542 543 544 545
  connect(stereoSettingsWidget_->headerFactor, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
  connect(stereoSettingsWidget_->headerOffsetCC, SIGNAL(sliderReleased()),
          this, SLOT(slotApplyStereoSettings()));
546 547 548 549 550 551
  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
552 553 554 555 556 557 558
}


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


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

Jan Möbius's avatar
 
Jan Möbius committed
560 561 562 563 564 565 566 567
}

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

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

Dirk Wilden's avatar
Dirk Wilden committed
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 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
  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
      setViewMode( OpenFlipper::Options::defaultToolboxMode() );

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

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

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

  fullscreenState_ = (fullscreenState_ + 1) % 3;
623 624 625

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

Jan Möbius's avatar
 
Jan Möbius committed
626 627 628 629 630
  show();
}

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

631 632 633 634 635 636 637 638 639 640 641
/** 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
642 643
  fullscreenState_ = (uint) _state;

644 645 646 647 648 649 650
  OpenFlipper::Options::fullScreen( bool( windowState() & Qt::WindowFullScreen) );

  show();
}

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

Jan Möbius's avatar
 
Jan Möbius committed
651 652 653 654
/** Hide or show logger
  */
void
CoreWidget::toggleLogger() {
Jan Möbius's avatar
Jan Möbius committed
655 656 657 658 659 660 661 662 663 664 665 666 667

  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
668

669
  // Hide/Show Logger
Jan Möbius's avatar
Jan Möbius committed
670
  showLogger( OpenFlipper::Options::loggerState() );
671 672 673 674 675
}

/** Hide or show logger
  */
void
Jan Möbius's avatar
Jan Möbius committed
676
CoreWidget::showLogger(OpenFlipper::Options::LoggerState _state) {
Jan Möbius's avatar
 
Jan Möbius committed
677
  //Hide Logger
Jan Möbius's avatar
Jan Möbius committed
678 679 680
  if (_state == loggerState_)
    return;

681 682 683
  qreal left, top, right, bottom;
  baseLayout_->getContentsMargins (&left, &top, &right, &bottom);

Jan Möbius's avatar
Jan Möbius committed
684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702
  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_);
703
        baseLayout_->setContentsMargins (left, top, right, 16);
Jan Möbius's avatar
Jan Möbius committed
704 705 706 707 708 709 710 711 712 713 714 715 716 717
      }
      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_);
718
        logWidget_->show ();
Jan Möbius's avatar
Jan Möbius committed
719 720 721 722

        wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
        wsizes[1] = originalLoggerSize_;
        splitter_->setSizes(wsizes);
723
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
      }
      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);
744
        baseLayout_->setContentsMargins (left, top, right, 0);
Jan Möbius's avatar
Jan Möbius committed
745 746 747 748 749 750
      }
      break;
  }
  loggerState_ = _state;

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

Jan Möbius's avatar
 
Jan Möbius committed
754 755
    // Remember old size
    originalLoggerSize_  = wsizes[1];
Jan Möbius's avatar
Jan Möbius committed
756

757 758 759
    int height = logWidget_->height ();

    splitter_->insertWidget (1, tempLogWidget);
Jan Möbius's avatar
 
Jan Möbius committed
760 761 762
    wsizes[0] = wsizes[0]+wsizes[1];
    wsizes[1] = 0;
    splitter_->setSizes(wsizes);
763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778
    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
779
  } else {
Jan Möbius's avatar
Jan Möbius committed
780

781 782 783 784 785 786 787 788 789 790
    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
791
  }
Jan Möbius's avatar
Jan Möbius committed
792
  */
Jan Möbius's avatar
 
Jan Möbius committed
793 794 795 796 797 798 799 800
}

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

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

Jan Möbius's avatar
 
Jan Möbius committed
802
  //toggle
803 804 805 806 807 808 809 810 811 812 813 814
  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
815

Jan Möbius's avatar
Jan Möbius committed
816
  if ( OpenFlipper::Options::hideToolbox() ){
Jan Möbius's avatar
 
Jan Möbius committed
817 818

    //hide ViewMode Selection Widget
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
819
    toolBoxArea_->setVisible(false);
Jan Möbius's avatar
 
Jan Möbius committed
820 821 822 823 824 825 826

  }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
827
    toolBoxArea_->setVisible(true);
Jan Möbius's avatar
 
Jan Möbius committed
828 829
  }
}
Jan Möbius's avatar
Jan Möbius committed
830

Jan Möbius's avatar
 
Jan Möbius committed
831 832
//=============================================================================

Jan Möbius's avatar
Jan Möbius committed
833 834
void
CoreWidget::addRecent(QString _filename, DataType _type)
Jan Möbius's avatar
 
Jan Möbius committed
835
{
836 837
  //dont add objects to recentMenu while loadind Settings
  if ( OpenFlipper::Options::loadingSettings() ) return;
Jan Möbius's avatar
Jan Möbius committed
838

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

Jan Möbius's avatar
 
Jan Möbius committed
841
  updateRecent();
Jan Möbius's avatar
Jan Möbius committed
842 843 844 845 846 847 848

}

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

void
CoreWidget::updateRecent()
Jan Möbius's avatar
 
Jan Möbius committed
849 850 851
{
  if ( recentFilesMenu_ == NULL)
    return;
Jan Möbius's avatar
Jan Möbius committed
852

Jan Möbius's avatar
 
Jan Möbius committed
853 854
  recentFilesMenu_->clear();

855 856 857
  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
858
  for (int i = 0 ; i < recentFiles.size() ; ++i ) {
859

860
    QFileInfo fi(recentFiles[i]);
861 862

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

Jan Möbius's avatar
 
Jan Möbius committed
867 868
  }

Jan Möbius's avatar
Jan Möbius committed
869 870 871
}

void
Jan Möbius's avatar
 
Jan Möbius committed
872 873 874
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
  emit exit();
}
875 876

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

878 879
  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
880

881
  if ( optionsWidget_ == 0 ) {
Dirk Wilden's avatar
Dirk Wilden committed
882
    optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
883
    connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
884
    connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
Dirk Wilden's avatar
Dirk Wilden committed
885 886
    connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
            this,          SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
887 888

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

Jan Möbius's avatar
Jan Möbius committed
891
  //show the optionsWidget centered
Dirk Wilden's avatar
Dirk Wilden committed
892
  QPoint center;
Jan Möbius's avatar
Jan Möbius committed
893
  center.setX( x() + width() / 2 );
Dirk Wilden's avatar
Dirk Wilden committed
894 895
  center.setY( y() + height() / 2 );

Dirk Wilden's avatar
Dirk Wilden committed
896 897
  optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
                              center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
Dirk Wilden's avatar
Dirk Wilden committed
898

899
  optionsWidget_->show();
Jan Möbius's avatar
Jan Möbius committed
900

901
}
Jan Möbius's avatar
Jan Möbius committed
902

903
void CoreWidget::nextViewerLayout() {
904 905 906 907 908

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

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

			// Update combo box in the toolbar
913
			viewerLayoutBox_->setCurrentIndex(1);
914 915
			break;
		case QtMultiViewLayout::Grid:
916
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
917
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
918 919

			// Update combo box in the toolbar
920
			viewerLayoutBox_->setCurrentIndex(2);
921 922
			break;
		case QtMultiViewLayout::HSplit:
923
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
924
			baseLayout_->setMode(QtMultiViewLayout::SingleView);
925 926

			// Update combo box in the toolbar
927
			viewerLayoutBox_->setCurrentIndex(0);
928 929 930 931 932 933 934
			break;
		}
	}
}


void
935
CoreWidget::setViewerLayout(int _idx) {
936 937 938 939 940

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

		switch (_idx) {
		case 0:
941
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
942 943 944
			baseLayout_->setMode(QtMultiViewLayout::SingleView);
			break;
		case 1:
945
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
946 947 948
			baseLayout_->setMode(QtMultiViewLayout::Grid);
			break;
		case 2:
949
                        baseLayout_->setPrimary (PluginFunctions::activeExaminer ());
950 951 952
			baseLayout_->setMode(QtMultiViewLayout::HSplit);
			break;
		}
953 954

    viewerLayoutBox_->setCurrentIndex(_idx);
955 956
	}
}
Jan Möbius's avatar
 
Jan Möbius committed
957

958 959 960 961 962 963 964 965 966 967 968 969 970 971
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*)),
972
                examiner_widgets_[i], SLOT(updateGL()));
973 974 975 976 977 978 979 980
      }

    }

    sceneGraphDialog_->show();
  }
}

Jan Möbius's avatar
 
Jan Möbius committed
981 982 983 984 985 986
//-----------------------------------------------------------------------------

void
CoreWidget::sceneRectChanged(const QRectF &rect)
{
  centerWidget_->setGeometry (rect);
987
  slidingLogger_->updateGeometry ();
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
988
  pickToolbar_->updateGeometry ();
Jan Möbius's avatar
 
Jan Möbius committed
989 990
}

Dirk Wilden's avatar
Dirk Wilden committed
991 992 993 994 995 996
//-----------------------------------------------------------------------------

void
CoreWidget::startVideoCaptureDialog(){

  VideoCaptureDialog* dialog = new VideoCaptureDialog();
997
  dialog->setModal(false);
Dirk Wilden's avatar
Dirk Wilden committed
998 999

  connect(dialog, SIGNAL(startVideoCapture(QString,int,bool)), this, SIGNAL(startVideoCapture(QString,int,bool)) );
1000 1001 1002
  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
1003 1004
  dialog->show();
}
Jan Möbius's avatar
 
Jan Möbius committed
1005

1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023
//-----------------------------------------------------------------------------

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