//=============================================================================
//
// OpenFlipper
// Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
// www.openflipper.org
//
//-----------------------------------------------------------------------------
//
// License
//
// 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.
//
// 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 Lesser General Public License
// along with OpenFlipper. If not, see .
//
//-----------------------------------------------------------------------------
//
// $Revision$
// $Author$
// $Date$
//
//=============================================================================
//=============================================================================
//
// CLASS MViewWidget - IMPLEMENTATION
//
//=============================================================================
//== INCLUDES =================================================================
// -------------------- mview
#include "CoreWidget.hh"
// -------------------- OpenFlipper Includes
#include
#include
#include
#include
#include
#include
#define WIDGET_HEIGHT 800
#define WIDGET_WIDTH 800
//== IMPLEMENTATION ==========================================================
/** \brief Constuctor for the Core Widget
*
*/
CoreWidget::
CoreWidget( QVector& _viewModes,
std::vector& _plugins,
QList< SlotInfo >& _coreSlots ) :
QMainWindow(),
coreSlots_(_coreSlots),
shiftPressed_(false),
viewModes_(_viewModes),
viewModeButton_(0),
viewModeMenu_(0),
splitter_(0),
logWidget_(0),
recentFilesMenu_(0),
helpMenu_(0),
sceneGraphDialog_(0),
fileMenu_(0),
viewMenu_(0),
fileMenuEnd_(0),
stereoButton_(0),
projectionButton_(0),
moveButton_(0),
lightButton_(0),
pickButton_(0),
questionButton_(0),
globalDrawMenu_(0),
drawGroup_(0),
viewGroup_(0),
activeDrawModes_(0),
availableGlobalDrawModes_(0),
contextMenu_(0),
functionMenu_(0),
contextSelectionMenu_(0),
stackMenu_(0),
helpBrowserDeveloper_(0),
helpBrowserUser_(0),
aboutWidget_(0),
optionsWidget_(0),
plugins_(_plugins),
stereoActive_(false)
{
setupStatusBar();
toolSplitter_ = new QSplitter(Qt::Horizontal,this);
setCentralWidget(toolSplitter_);
splitter_ = new QSplitter(Qt::Vertical,toolSplitter_);
stackedWidget_ = new QStackedWidget(splitter_);
QGLFormat format;
QGLFormat::setDefaultFormat(format);
format.setStereo( OpenFlipper::Options::stereo() );
format.setAlpha(true);
// Construct GL context & widget
baseLayout_ = new QtMultiViewLayout;
baseLayout_->setContentsMargins(0,0,0,0);
glWidget_ = new QGLWidget(format);
glView_ = new QtGLGraphicsView(stackedWidget_);
glScene_ = new QtGLGraphicsScene (&examiner_widgets_, baseLayout_);
// is stereo possible, use it?
if (format.stereo()) {
std::cerr << "Stereo buffer requested: " << (glWidget_->format().stereo() ? "ok\n" : "failed\n");
OpenFlipper::Options::stereo(glWidget_->format().stereo());
}
glView_->setViewport(glWidget_);
glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
glView_->setScene(glScene_);
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_ ) );
// ======================================================================
// Set up the logging window
// ======================================================================
slidingLogger_ = new QtSlideWindow ("Log Viewer", centerWidget_);
tempLogWidget = new QWidget;
logWidget_ = new LoggerWidget(splitter_);
logWidget_->setReadOnly(true);
logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
logWidget_->resize( splitter_->width() ,240);
logWidget_->setLineWrapMode( QTextEdit::NoWrap );
originalLoggerSize_ = 0;
loggerState_ = OpenFlipper::Options::Normal;
QList wsizes( splitter_->sizes() );
if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::InScene) {
slidingLogger_->attachWidget (logWidget_);
splitter_->insertWidget (1, tempLogWidget);
wsizes[0] = 1;
wsizes[1] = 0;
splitter_->setSizes(wsizes);
loggerState_ = OpenFlipper::Options::InScene;
baseLayout_->setContentsMargins (0, 0, 0, 16);
} 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);
}
// ======================================================================
// Create examiner
// ======================================================================
if ( !OpenFlipper::Options::multiView() ) {
glViewer* examinerWidget = new glViewer(glScene_,
glWidget_,
PluginFunctions::viewerProperties(0),
centerWidget_,
"Examiner Widget",
statusBar_);
examiner_widgets_.push_back(examinerWidget);
examinerWidget->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
baseLayout_->addItem(examinerWidget, 0);
} else {
// Create examiners
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
glViewer* newWidget = new glViewer(glScene_,
glWidget_,
PluginFunctions::viewerProperties(i),
centerWidget_,
"Examiner Widget",
statusBar_);
examiner_widgets_.push_back(newWidget);
}
// Initialize all examiners
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
examiner_widgets_[i]->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
}
baseLayout_->addItem(examiner_widgets_[0],0);
baseLayout_->addItem(examiner_widgets_[1],1);
baseLayout_->addItem(examiner_widgets_[2],2);
baseLayout_->addItem(examiner_widgets_[3],3);
}
// Make examiner available to the plugins ( defined in PluginFunctions.hh)
PluginFunctions::setViewers( examiner_widgets_ );
centerWidget_->setLayout(baseLayout_);
// ======================================================================
// Setup dragging for examiner widget
// ======================================================================
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* )));
}
// ======================================================================
// Create main Toolbar
// ======================================================================
mainToolbar_ = new QToolBar("Main Toolbar");
mainToolbar_->setWindowTitle("Main Toolbar");
mainToolbar_->setObjectName("MainToolbar");
slotAddToolbar(mainToolbar_);
// ======================================================================
// Get Toolbar from examiner and integrate it into main window
// ======================================================================
// Create the toolbar
viewerToolbar_ = new QToolBar( "Viewer Toolbar", this );
viewerToolbar_->setOrientation(Qt::Vertical);
viewerToolbar_->setAllowedAreas(Qt::AllToolBarAreas);
viewerToolbar_->setIconSize(QSize(20,20));
viewerToolbar_->setObjectName("ViewerToolbar");
moveButton_ = new QToolButton( viewerToolbar_ );
moveButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"transform-move.png") );
moveButton_->setMinimumSize( 16, 16 );
moveButton_->setMaximumSize( 32, 32 );
moveButton_->setToolTip( "Switch to move mode." );
moveButton_->setWhatsThis(
"Switch to move mode.
"
"- Rotate using left mouse button.
"
"- Translate using middle mouse button.
"
"- Zoom using left+middle mouse buttons.
" );
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
connect( moveButton_,SIGNAL( clicked() ), &PluginFunctions::viewerProperties(i), SLOT( setExamineMode() ) );
connect( &PluginFunctions::viewerProperties(i) , SIGNAL( actionModeChanged( Viewer::ActionMode ) ),
this , SLOT( slotActionModeChanged(Viewer::ActionMode) ) );
}
viewerToolbar_->addWidget( moveButton_ )->setText("Move");
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 );
lightButton_->setToolTip("Switch to light mode.");
lightButton_->setWhatsThis(
"Switch to light mode.
"
"Rotate lights using left mouse button.");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( lightButton_,SIGNAL( clicked() ), &PluginFunctions::viewerProperties(i), SLOT( setLightMode() ) );
viewerToolbar_->addWidget( lightButton_)->setText("Light");
pickButton_ = new QToolButton( viewerToolbar_ );
pickButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"pick.png") );
pickButton_->setMinimumSize( 16, 16 );
pickButton_->setMaximumSize( 32, 32 );
pickButton_->setToolTip("Switch to picking mode.");
pickButton_->setWhatsThis(
"Switch to picking mode.
"
"Use picking functions like flipping edges.
"
"To change the mode use the right click
"
"context menu in the viewer.");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( pickButton_,SIGNAL( clicked() ), &PluginFunctions::viewerProperties(i), SLOT( setPickingMode() ) );
viewerToolbar_->addWidget( pickButton_)->setText("Pick");
questionButton_ = new QToolButton( viewerToolbar_ );
questionButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"help-about.png") );
questionButton_->setMinimumSize( 16, 16 );
questionButton_->setMaximumSize( 32, 32 );
questionButton_->setToolTip("Switch to identification mode.");
questionButton_->setWhatsThis(
"Switch to identification mode.
"
"Use identification mode to get information "
"about objects. Click on an object and see "
"the log output for information about the "
"object.");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( questionButton_,SIGNAL( clicked() ), &PluginFunctions::viewerProperties(i), SLOT( setQuestionMode() ) );
viewerToolbar_->addWidget( questionButton_)->setText("Question");
viewerToolbar_->addSeparator();
QToolButton* homeButton = new QToolButton( viewerToolbar_ );
homeButton->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"go-home.png") );
homeButton->setMinimumSize( 16, 16 );
homeButton->setMaximumSize( 32, 32 );
homeButton->setCheckable( false );
homeButton->setToolTip("Restore home view.");
homeButton->setWhatsThis(
"Restore home view
"
"Resets the view to the home view");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( homeButton,SIGNAL( clicked() ), examiner_widgets_[i], SLOT( home() ) );
viewerToolbar_->addWidget( homeButton)->setText("Home");
QToolButton* setHomeButton = new QToolButton( viewerToolbar_ );
setHomeButton->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"set-home.png") );
setHomeButton->setMinimumSize( 16, 16 );
setHomeButton->setMaximumSize( 32, 32 );
setHomeButton->setCheckable( false );
setHomeButton->setToolTip("Set home view");
setHomeButton->setWhatsThis(
"Store home view
"
"Stores the current view as the home view");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( setHomeButton,SIGNAL( clicked() ), examiner_widgets_[i], SLOT( setHome() ) );
viewerToolbar_->addWidget( setHomeButton)->setText("Set Home");
QToolButton* viewAllButton = new QToolButton( viewerToolbar_ );
viewAllButton->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"viewall.png") );
viewAllButton->setMinimumSize( 16, 16 );
viewAllButton->setMaximumSize( 32, 32 );
viewAllButton->setCheckable( false );
viewAllButton->setToolTip("View all.");
viewAllButton->setWhatsThis(
"View all
"
"Move the objects in the scene so that"
" the whole scene is visible.");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
connect( viewAllButton,SIGNAL( clicked() ), examiner_widgets_[i], SLOT( viewAll() ) );
viewerToolbar_->addWidget( viewAllButton)->setText("View all");
projectionButton_ = new QToolButton( viewerToolbar_ );
projectionButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"perspective.png") );
projectionButton_->setMinimumSize( 16, 16 );
projectionButton_->setMaximumSize( 32, 32 );
projectionButton_->setCheckable( false );
projectionButton_->setToolTip(
"Switch between perspective and "
"parrallel projection mode.");
projectionButton_->setWhatsThis(
"Switch projection modes
"
"Switch between perspective and "
"parrallel projection mode.");
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
connect( projectionButton_,SIGNAL( clicked() ), examiner_widgets_[i], SLOT( toggleProjectionMode() ) );
connect( examiner_widgets_[i],SIGNAL( projectionModeChanged( bool ) ), this , SLOT( slotProjectionModeChanged( bool ) ) );
}
viewerToolbar_->addWidget( projectionButton_)->setText( "Projection" );
viewerToolbar_->addSeparator();
QToolButton* sceneGraphButton = new QToolButton( viewerToolbar_ );
sceneGraphButton->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"scenegraph.png") );
sceneGraphButton->setMinimumSize( 16, 16 );
sceneGraphButton->setMaximumSize( 32, 32 );
sceneGraphButton->setCheckable( false );
sceneGraphButton->setToolTip("Toggle scene graph viewer.");
sceneGraphButton->setWhatsThis(
"Toggle scene graph viewer
"
"The scene graph viewer enables you to examine the "
"displayed scene graph and to modify certain nodes.
"
"There are three modi for the scene graph viewer:"
"- hidden
"
"- split: share space
"
"- dialog: own dialog window
"
"This button toggles between these modi.");
QObject::connect( sceneGraphButton, SIGNAL( clicked() ),
this, SLOT( slotShowSceneGraphDialog() ) );
viewerToolbar_->addWidget( sceneGraphButton)->setText( "SceneGraph" );
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 );
stereoButton_->setToolTip( "Toggle stereo viewing");
stereoButton_->setWhatsThis(
"Toggle stereo mode
"
"Use this button to switch between stereo "
"and mono view. To use this feature you need "
"a stereo capable graphics card and a stereo "
"display/projection system.");
connect( stereoButton_,SIGNAL( clicked() ), this , SLOT( slotToggleStereoMode() ) );
viewerToolbar_->addWidget( stereoButton_ )->setText( "Stereo");
}
addToolBar(Qt::TopToolBarArea,viewerToolbar_);
// Remember logger size
wsizes = splitter_->sizes();
originalLoggerSize_ = wsizes[1];
// ======================================================================
// Create ToolBox area
// ======================================================================
toolBoxArea_ = new QWidget (toolSplitter_);
QGroupBox *gb = new QGroupBox ("ViewMode");
QHBoxLayout *hLayout = new QHBoxLayout;
QPushButton* vmButton = new QPushButton("Change View Mode");
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);
// ======================================================================
// Context menu setup
// ======================================================================
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
connect( examiner_widgets_[i] , SIGNAL(signalCustomContextMenuRequested( const QPoint&) ) ,
this , SLOT( slotCustomContextMenu( const QPoint&) ) );
}
contextMenu_ = new QMenu(this);
contextSelectionMenu_ = new QMenu("Selection",0);
setupMenuBar();
updateRecent();
statusBar_->showMessage("Ready", 5000);
registerCoreKeys();
setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
}
//-----------------------------------------------------------------------------
CoreWidget::~CoreWidget() {
}
//-----------------------------------------------------------------------------
/** Set viewer to Fullscreen Mode and back
*/
void
CoreWidget::toggleFullscreen() {
setWindowState( windowState() ^ Qt::WindowFullScreen);
OpenFlipper::Options::fullScreen( bool( windowState() & Qt::WindowFullScreen) );
show();
}
//-----------------------------------------------------------------------------
/** 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();
}
//-----------------------------------------------------------------------------
/** Hide or show logger
*/
void
CoreWidget::toggleLogger() {
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;
}
// Hide/Show Logger
showLogger( OpenFlipper::Options::loggerState() );
}
/** Hide or show logger
*/
void
CoreWidget::showLogger(OpenFlipper::Options::LoggerState _state) {
//Hide Logger
if (_state == loggerState_)
return;
qreal left, top, right, bottom;
baseLayout_->getContentsMargins (&left, &top, &right, &bottom);
switch (_state)
{
case OpenFlipper::Options::InScene:
{
QList 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_);
baseLayout_->setContentsMargins (left, top, right, 16);
}
break;
case OpenFlipper::Options::Normal:
{
if ( originalLoggerSize_ == 0)
originalLoggerSize_ = 240;
QList wsizes( splitter_->sizes() );
if (loggerState_ == OpenFlipper::Options::InScene)
originalLoggerSize_ = logWidget_->height ();
slidingLogger_->detachWidget ();
splitter_->insertWidget (1, logWidget_);
logWidget_->show ();
wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
wsizes[1] = originalLoggerSize_;
splitter_->setSizes(wsizes);
baseLayout_->setContentsMargins (left, top, right, 0);
}
break;
case OpenFlipper::Options::Hidden:
{
QList 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);
baseLayout_->setContentsMargins (left, top, right, 0);
}
break;
}
loggerState_ = _state;
/*
if ( !_state ) {
QList wsizes( splitter_->sizes() );
// Remember old size
originalLoggerSize_ = wsizes[1];
int height = logWidget_->height ();
splitter_->insertWidget (1, tempLogWidget);
wsizes[0] = wsizes[0]+wsizes[1];
wsizes[1] = 0;
splitter_->setSizes(wsizes);
logWidget_->resize (logWidget_->width (), height);
slidingLogger_->attachWidget (logWidget_);
} else if (splitter_->widget (1) == logWidget_) {
if ( originalLoggerSize_ == 0)
originalLoggerSize_ = 240;
QList wsizes( splitter_->sizes() );
if (wsizes[0] == 0)
wsizes[0] = height();
wsizes[0] = wsizes[0]+wsizes[1] - originalLoggerSize_;
wsizes[1] = originalLoggerSize_;
splitter_->setSizes(wsizes);
} else {
QList 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);
}
*/
}
//-----------------------------------------------------------------------------
/** Hide or show toolbox
*/
void
CoreWidget::toggleToolbox() {
//toggle
showToolbox( OpenFlipper::Options::hideToolbox() );
}
//-----------------------------------------------------------------------------
/** Hide or show toolbox
*/
void
CoreWidget::showToolbox( bool _state ) {
//toggle
OpenFlipper::Options::hideToolbox( !_state );
if ( OpenFlipper::Options::hideToolbox() ){
//hide ViewMode Selection Widget
toolBoxArea_->setVisible(false);
}else{
//reset last ViewMode
if (OpenFlipper::Options::defaultToolboxMode().trimmed() == "")
setViewMode("All");
else
setViewMode( OpenFlipper::Options::defaultToolboxMode() );
toolBoxArea_->setVisible(true);
}
}
//=============================================================================
void
CoreWidget::addRecent(QString _filename, DataType _type)
{
//dont add objects to recentMenu while loadind Settings
if ( OpenFlipper::Options::loadingSettings() ) return;
OpenFlipper::Options::addRecentFile(_filename, _type);
updateRecent();
}
//=============================================================================
void
CoreWidget::updateRecent()
{
if ( recentFilesMenu_ == NULL)
return;
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();
path += typeIcon( recentFiles[i].type );
recentFilesMenu_->addAction(QIcon(path), recentFiles[i].filename);
}
}
void
CoreWidget::closeEvent ( QCloseEvent * /* event */ ) {
emit exit();
}
void CoreWidget::showOptionsWidget() {
if ( OpenFlipper::Options::nogui() )
return;
if ( optionsWidget_ == 0 ) {
optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
this, SLOT(slotAddKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)));
optionsWidget_->setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
}
//show the optionsWidget centered
QPoint center;
center.setX( x() + width() / 2 );
center.setY( y() + height() / 2 );
optionsWidget_->setGeometry(center.x() - optionsWidget_->width() / 2,
center.y() - optionsWidget_->height()/ 2, optionsWidget_->width(), optionsWidget_->height());
optionsWidget_->show();
}
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*)),
examiner_widgets_[i], SLOT(updateGL()));
}
}
sceneGraphDialog_->show();
}
}
//-----------------------------------------------------------------------------
void
CoreWidget::sceneRectChanged(const QRectF &rect)
{
centerWidget_->setGeometry (rect);
slidingLogger_->updateGeometry ();
}
//=============================================================================