From 4b98d19d401c3ada2dae4919dee59360dc5d6c99 Mon Sep 17 00:00:00 2001 From: Dirk Wilden Date: Mon, 15 Sep 2008 09:18:49 +0000 Subject: [PATCH] extended FileInterface it is now possible to provide a special loadWidget/saveWidget for every nameFilter git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@2776 383ad7c9-94d9-4d36-a494-682f7c89f535 --- BasePlugin/FileInterface.hh | 14 +----- Core/Core.hh | 2 - Core/PluginLoader.cc | 8 ---- widgets/loadWidget/loadWidget.cc | 80 ++++++++++++-------------------- widgets/loadWidget/loadWidget.hh | 5 +- 5 files changed, 34 insertions(+), 75 deletions(-) diff --git a/BasePlugin/FileInterface.hh b/BasePlugin/FileInterface.hh index 92633394..aaad711f 100644 --- a/BasePlugin/FileInterface.hh +++ b/BasePlugin/FileInterface.hh @@ -80,13 +80,8 @@ class FileInterface { /// Get the Qt Filters for Filedialogs when saving files virtual QString getSaveFilters() = 0; - - /** You can provide a special widget showing options for saving your file types - * Return 0 when you dont need one - */ - virtual QWidget* saveOptionsWidget() = 0; - /** You can also provide a special widget showing options for saving your file types + /** You can provide a special widget showing options for saving your file types * depending on the current filter * * _currentFilter: one filter from saveFilters @@ -94,13 +89,8 @@ class FileInterface { * Return 0 when you dont need one, OpenFlipper then uses saveOptionsWidget() if available */ virtual QWidget* saveOptionsWidget(QString _currentFilter) = 0; - - /** You can provide a special widget showing options for loading your file types - * Return 0 when you dont need one - */ - virtual QWidget* loadOptionsWidget() = 0; - /** You can also provide a special widget showing options for loading your file types + /** You can provide a special widget showing options for loading your file types * depending on the current filter * * _currentFilter: one filter from loadFilters diff --git a/Core/Core.hh b/Core/Core.hh index 855c0f45..cb0578a9 100644 --- a/Core/Core.hh +++ b/Core/Core.hh @@ -96,8 +96,6 @@ struct fileTypes { QString loadFilters; QString saveFilters; FileInterface* plugin; - QWidget* loadWidget; - QWidget* saveWidget; }; /** Core Widget of the Application diff --git a/Core/PluginLoader.cc b/Core/PluginLoader.cc index 51cdb213..67fa0e6c 100644 --- a/Core/PluginLoader.cc +++ b/Core/PluginLoader.cc @@ -429,14 +429,6 @@ void Core::loadPlugin(QString filename, bool silent){ ft.saveFilters = filePlugin->getSaveFilters(); ft.plugin = filePlugin; - if ( OpenFlipper::Options::gui() ) { - ft.loadWidget = filePlugin->loadOptionsWidget(); - ft.saveWidget = filePlugin->saveOptionsWidget(); - } else { - ft.loadWidget = 0; - ft.saveWidget = 0; - } - supportedTypes_.push_back(ft); filePlugin->setObjectRoot( objectRoot_ ); } diff --git a/widgets/loadWidget/loadWidget.cc b/widgets/loadWidget/loadWidget.cc index 9d5c0fcb..1ca4055e 100644 --- a/widgets/loadWidget/loadWidget.cc +++ b/widgets/loadWidget/loadWidget.cc @@ -49,7 +49,6 @@ LoadWidget::LoadWidget(std::vector& _supportedTypes , QWidget *parent : QFileDialog(parent), loadMode_(true), supportedTypes_(_supportedTypes) - { // Get our layout @@ -100,16 +99,12 @@ LoadWidget::LoadWidget(std::vector& _supportedTypes , QWidget *parent /// adjust the loadWidget / saveWidget when the selected nameFilter changed void LoadWidget::currentFilterChanged(QString _currentFilter){ - for (int i=0; i < (int)supportedTypes_.size(); i++){ - if (supportedTypes_[i].loadWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].loadWidget); - supportedTypes_[i].loadWidget->setParent(0); - } - if (supportedTypes_[i].saveWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].saveWidget); - supportedTypes_[i].saveWidget->setParent(0); - } - } + for (int i=0; i < boxWidgets_.size(); i++){ + boxLayout_->removeWidget( boxWidgets_[i] ); + boxWidgets_[i]->setParent(0); + } + + boxWidgets_.clear(); const DataType type = (DataType) typeBox_->itemData( typeBox_->currentIndex() ).toInt(); @@ -122,10 +117,7 @@ void LoadWidget::currentFilterChanged(QString _currentFilter){ if (nuWidget != 0){ boxLayout_->addWidget( nuWidget ); - box_->show(); - }else - if ( supportedTypes_[i].loadWidget != 0 ) { - boxLayout_->addWidget(supportedTypes_[i].loadWidget); + boxWidgets_.push_back( nuWidget ); box_->show(); } } @@ -138,10 +130,7 @@ void LoadWidget::currentFilterChanged(QString _currentFilter){ if (nuWidget != 0){ boxLayout_->addWidget( nuWidget ); - box_->show(); - }else - if ( supportedTypes_[i].saveWidget != 0 ) { - boxLayout_->addWidget(supportedTypes_[i].saveWidget); + boxWidgets_.push_back( nuWidget ); box_->show(); } } @@ -152,17 +141,12 @@ void LoadWidget::currentFilterChanged(QString _currentFilter){ void LoadWidget::slotSetLoadFilters(int _typeIndex){ box_->setTitle("Load Options"); - for (int i=0; i < (int)supportedTypes_.size(); i++){ - if (supportedTypes_[i].loadWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].loadWidget); - supportedTypes_[i].loadWidget->setParent(0); - } - if (supportedTypes_[i].saveWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].saveWidget); - supportedTypes_[i].saveWidget->setParent(0); - } + for (int i=0; i < boxWidgets_.size(); i++){ + boxLayout_->removeWidget( boxWidgets_[i] ); + boxWidgets_[i]->setParent(0); } + boxWidgets_.clear(); const DataType type = (DataType) typeBox_->itemData(_typeIndex).toInt(); for (int i=0; i < (int)supportedTypes_.size(); i++) @@ -173,12 +157,14 @@ void LoadWidget::slotSetLoadFilters(int _typeIndex){ setNameFilters(filters); //add Widget for new Filter - if ( supportedTypes_[i].loadWidget != 0 ) { - boxLayout_->addWidget(supportedTypes_[i].loadWidget); -// boxLayout_->removeWidget(supportedTypes_[i].saveWidget); + QWidget* nuWidget = 0; + nuWidget = supportedTypes_[i].plugin->loadOptionsWidget(""); + + if ( nuWidget != 0 ) { + boxLayout_->addWidget( nuWidget ); + boxWidgets_.push_back( nuWidget ); box_->show(); } - } if (box_->children().count() == 1) //only the layout is left @@ -189,17 +175,13 @@ void LoadWidget::slotSetLoadFilters(int _typeIndex){ void LoadWidget::slotSetSaveFilters(int _typeIndex){ box_->setTitle("Save Options"); - for (int i=0; i < (int)supportedTypes_.size(); i++){ - if (supportedTypes_[i].loadWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].loadWidget); - supportedTypes_[i].loadWidget->setParent(0); - } - if (supportedTypes_[i].saveWidget != 0){ - boxLayout_->removeWidget(supportedTypes_[i].saveWidget); - supportedTypes_[i].saveWidget->setParent(0); - } + for (int i=0; i < boxWidgets_.size(); i++){ + boxLayout_->removeWidget( boxWidgets_[i] ); + boxWidgets_[i]->setParent(0); } + boxWidgets_.clear(); + const DataType type = (DataType) typeBox_->itemData(_typeIndex).toInt(); for (int i=0; i < (int)supportedTypes_.size(); i++) if (supportedTypes_[i].type == type){ @@ -209,19 +191,15 @@ void LoadWidget::slotSetSaveFilters(int _typeIndex){ setNameFilters(filters); //add Widget for new Filter - if ( supportedTypes_[i].saveWidget != 0 ) { - boxLayout_->addWidget(supportedTypes_[i].saveWidget); -// boxLayout_->removeWidget(supportedTypes_[i].saveWidget); + QWidget* nuWidget = 0; + nuWidget = supportedTypes_[i].plugin->saveOptionsWidget(""); + + if ( nuWidget != 0 ) { + boxLayout_->addWidget( nuWidget ); + boxWidgets_.push_back( nuWidget ); box_->show(); } - } - //remove Widget from last Filter -// if ( supportedTypes_[i].loadWidget != 0 ) { -// boxLayout_->removeWidget(supportedTypes_[i].loadWidget); -// boxLayout_->removeWidget(supportedTypes_[i].saveWidget); -// supportedTypes_[i].saveWidget->setParent(0); -// } if (box_->children().count() == 1) //only the layout is left box_->hide(); diff --git a/widgets/loadWidget/loadWidget.hh b/widgets/loadWidget/loadWidget.hh index 5715ad8c..498ae791 100644 --- a/widgets/loadWidget/loadWidget.hh +++ b/widgets/loadWidget/loadWidget.hh @@ -75,8 +75,9 @@ class LoadWidget : public QFileDialog QComboBox* typeBox_; /// QFrame on the right - QGroupBox* box_; - QHBoxLayout* boxLayout_; + QGroupBox* box_; + QHBoxLayout* boxLayout_; + QVector< QWidget* > boxWidgets_; bool step_; -- GitLab