/*===========================================================================*\
* *
* 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 . *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $Author$ *
* $Date$ *
* *
\*===========================================================================*/
#include "CoreWidget.hh"
#include
#include "OpenFlipper/common/GlobalOptions.hh"
//=============================================================================
/// init ViewModes that were loaded via ini-file
void CoreWidget::initViewModes(){
//init viewMode subMenu
if (!viewModeMenu_){
viewModeMenu_ = new QMenu(tr("View Modes"));
viewMenu_->addMenu(viewModeMenu_);
viewGroup_ = new QActionGroup(0);
viewGroup_->setExclusive(true);
connect( viewGroup_, SIGNAL( triggered( QAction* ) ), this, SLOT( slotSetViewMode( QAction* ) ) );
}
viewModeMenu_->clear();
bool seenCustom = false;
for (int i=0; i < viewModes_.size(); i++){
//Add Separator above the custom widgets
if (viewModes_[i]->custom && !seenCustom){
viewModeMenu_->addSeparator();
seenCustom = true;
}
//add Action to viewMenu
QAction* acViewMode = new QAction(viewModes_[i]->name, this);
acViewMode->setStatusTip(tr("Change ViewMode"));
viewGroup_->addAction(acViewMode);
viewModeMenu_->addAction(acViewMode);
//add Separator after viewMode 'all'
if (viewModes_[i]->name == "All")
viewModeMenu_->addSeparator();
}
}
/// Add a new viewMode (non-custom)
void CoreWidget::slotAddViewModeToolboxes(QString _mode, QStringList _usedWidgets){
slotAddViewModeToolboxes(_mode, false, _usedWidgets);
}
/// Add a new viewMode
void CoreWidget::slotAddViewModeToolboxes(QString _mode, bool _custom, QStringList _usedWidgets){
ViewMode* vm = new ViewMode();
vm->name = _mode;
vm->custom = _custom;
vm->visibleToolboxes = _usedWidgets;
if (_custom)
viewModes_.push_back(vm);
else{
//insert before custom viewModes
int i = viewModes_.size();
for (int k=0; k < viewModes_.size(); k++)
if (viewModes_[k]->custom == true){
i = k;
break;
}
viewModes_.insert(i,vm);
}
initViewModes();
}
/// Remove a viewMode
void CoreWidget::slotRemoveViewMode(QString _name){
for (int i=0; i < viewModes_.size(); i++)
if (viewModes_[i]->name == _name && viewModes_[i]->custom == true){ //remove only userdefined viewModes
viewModes_.remove(i);
//remove action from menu
for (int a=0; a < viewModeMenu_->actions().size(); a++)
if (viewModeMenu_->actions()[a]->text() == _name){
QAction* action = viewModeMenu_->actions()[a];
viewModeMenu_->removeAction(action);
viewGroup_->removeAction(action);
delete action;
}
break;
}
}
/// Slot for setting the viewMode from menu
void CoreWidget::slotSetViewMode( QAction* action){
setViewMode( action->text() );
}
/// Slot for setting the viewMode from menu
void CoreWidget::setViewMode( QString _mode ){
slotChangeView(_mode, QStringList());
}
/// show dialog for changing ViewMode
void CoreWidget::slotViewModeDialog(){
//init widget
static viewModeWidget* widget = 0;
if ( !widget ){
widget = new viewModeWidget(viewModes_);
widget->setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
connect(widget, SIGNAL(changeView(QString, QStringList)), this, SLOT(slotChangeView(QString, QStringList)) );
connect(widget, SIGNAL(saveMode(QString, bool, QStringList)), this, SLOT(slotAddViewModeToolboxes(QString, bool, QStringList)) );
connect(widget, SIGNAL(removeMode(QString)), this, SLOT(slotRemoveViewMode(QString)) );
}
widget->show( OpenFlipper::Options::defaultToolboxMode() );
}
/// Slot for Changing visible toolWidgets
void CoreWidget::slotChangeView(QString _mode, QStringList _toolWidgets){
//try to find Widgets if they aren't given
if (_mode != "" && _toolWidgets.size() == 0)
for (int i=0; i < viewModes_.size(); i++)
if (viewModes_[i]->name == _mode)
_toolWidgets = viewModes_[i]->visibleToolboxes;
// remove all toolbox entries
toolBox_->clear ();
//find all widgets that should be visible
for (int i=0; i < _toolWidgets.size(); i++)
for (uint p=0; p < plugins_.size(); p++){
for ( uint j = 0 ; j < plugins_[p].widgets.size(); ++j )
if (_toolWidgets[i] == plugins_[p].widgets[j].first )
toolBox_->addItem (plugins_[p].widgets[j].second, plugins_[p].widgets[j].first);
}
if (_mode != "")
OpenFlipper::Options::defaultToolboxMode(_mode);
}