From cb85bfc9062ba45ece027d4ee031b010f5fe3ec1 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 26 Aug 2009 00:45:50 +0200 Subject: [PATCH] EffectSelectDialog: rewritten using Designer All of the GUI code of EffectSelectDialog has been replaced by an according UI file. Also merged EffectListWidget class into EffectSelectDialog to further simplify logic. --- include/EffectSelectDialog.h | 43 +---- src/gui/EffectSelectDialog.cpp | 247 ++++++++-------------------- src/gui/Forms/EffectSelectDialog.ui | 111 +++++++++++++ 3 files changed, 189 insertions(+), 212 deletions(-) create mode 100644 src/gui/Forms/EffectSelectDialog.ui diff --git a/include/EffectSelectDialog.h b/include/EffectSelectDialog.h index 506e86f16..c11501fd4 100644 --- a/include/EffectSelectDialog.h +++ b/include/EffectSelectDialog.h @@ -33,9 +33,7 @@ #include "Effect.h" -class QLineEdit; -class QListView; -class QScrollArea; +namespace Ui { class EffectSelectDialog; } class EffectSelectDialog : public QDialog @@ -48,54 +46,25 @@ public: Effect * instantiateSelectedPlugin( EffectChain * _parent ); -public slots: - void setSelection( const EffectKey & _selection ); - void selectPlugin(); - -private: - EffectKey m_currentSelection; - -} ; - - - -class EffectListWidget : public QWidget -{ - Q_OBJECT -public: - EffectListWidget( QWidget * _parent ); - - virtual ~EffectListWidget(); - - inline EffectKey getSelected() - { - return( m_currentSelection ); - } - - -signals: - void highlighted( const EffectKey & _key ); - void doubleClicked( const EffectKey & _key ); - - protected slots: + void acceptSelection(); void rowChanged( const QModelIndex &, const QModelIndex & ); - void onDoubleClicked( const QModelIndex & ); void updateSelection(); private: + Ui::EffectSelectDialog * ui; + QVector m_pluginDescriptors; EffectKeyList m_effectKeys; EffectKey m_currentSelection; - QLineEdit * m_filterEdit; - QListView * m_pluginList; QStandardItemModel m_sourceModel; QSortFilterProxyModel m_model; - QScrollArea * m_scrollArea; QWidget * m_descriptionWidget; } ; + + #endif diff --git a/src/gui/EffectSelectDialog.cpp b/src/gui/EffectSelectDialog.cpp index 07e42095f..e456310b2 100644 --- a/src/gui/EffectSelectDialog.cpp +++ b/src/gui/EffectSelectDialog.cpp @@ -22,129 +22,30 @@ * */ -#include -#include -#include -#include -#include -#include - #include "EffectSelectDialog.h" +#include "ui_EffectSelectDialog.h" + #include "gui_templates.h" #include "embed.h" EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : - QDialog( _parent ) -{ - setWindowIcon( embed::getIconPixmap( "setup_audio" ) ); - setWindowTitle( tr( "Effects Selector" ) ); - setModal( true ); - - QVBoxLayout * vlayout = new QVBoxLayout( this ); - vlayout->setSpacing( 10 ); - vlayout->setMargin( 10 ); - - EffectListWidget * elist = new EffectListWidget( this ); - elist->setMinimumSize( 540, 400 ); - connect( elist, SIGNAL( doubleClicked( const effectKey & ) ), - this, SLOT( selectPlugin() ) ); - connect( elist, SIGNAL( highlighted( const effectKey & ) ), - this, SLOT( setSelection( const effectKey & ) ) ); - m_currentSelection = elist->getSelected(); - - QWidget * buttons = new QWidget( this ); - QHBoxLayout * btn_layout = new QHBoxLayout( buttons ); - btn_layout->setSpacing( 0 ); - btn_layout->setMargin( 0 ); - - - QPushButton * select_btn = new QPushButton( - embed::getIconPixmap( "add" ), - tr( "Add" ), buttons ); - connect( select_btn, SIGNAL( clicked() ), - this, SLOT( selectPlugin() ) ); - - QPushButton * cancel_btn = new QPushButton( - embed::getIconPixmap( "cancel" ), - tr( "Cancel" ), buttons ); - connect( cancel_btn, SIGNAL( clicked() ), - this, SLOT( reject() ) ); - - btn_layout->addStretch(); - btn_layout->addSpacing( 10 ); - btn_layout->addWidget( select_btn ); - btn_layout->addSpacing( 10 ); - btn_layout->addWidget( cancel_btn ); - btn_layout->addSpacing( 10 ); - - vlayout->addWidget( elist ); - vlayout->addSpacing( 10 ); - vlayout->addWidget( buttons ); - vlayout->addSpacing( 10 ); - //vlayout->addStretch(); - - show(); -} - - - - -EffectSelectDialog::~EffectSelectDialog() -{ -} - - - - -Effect * EffectSelectDialog::instantiateSelectedPlugin( EffectChain * _parent ) -{ - if( !m_currentSelection.name.isEmpty() && m_currentSelection.desc ) - { - return Effect::instantiate( m_currentSelection.desc->name, - _parent, - &m_currentSelection ); - } - return( NULL ); -} - - - - -void EffectSelectDialog::setSelection( const EffectKey & _selection ) -{ - m_currentSelection = _selection; -} - - - - -void EffectSelectDialog::selectPlugin() -{ - if( m_currentSelection.isValid() ) - { - accept(); - } -} - - - - - - - -EffectListWidget::EffectListWidget( QWidget * _parent ) : - QWidget( _parent ), + QDialog( _parent ), + ui( new Ui::EffectSelectDialog ), m_sourceModel(), m_model(), m_descriptionWidget( NULL ) { + ui->setupUi( this ); + + setWindowIcon( embed::getIconPixmap( "setup_audio" ) ); + + // query effects Plugin::getDescriptorsOfAvailPlugins( m_pluginDescriptors ); - for( QVector::iterator it = - m_pluginDescriptors.begin(); - it != m_pluginDescriptors.end(); ++it ) + for( QVector::Iterator it = m_pluginDescriptors.begin(); + it != m_pluginDescriptors.end(); ++it ) { if( it->type != Plugin::Effect ) { @@ -168,82 +69,90 @@ EffectListWidget::EffectListWidget( QWidget * _parent ) : } } - QStringList plugin_names; + // and fill our source model + QStringList pluginNames; for( EffectKeyList::ConstIterator it = m_effectKeys.begin(); - it != m_effectKeys.end(); ++it ) + it != m_effectKeys.end(); ++it ) { - plugin_names += QString( ( *it ).desc->displayName ) + + pluginNames += QString( ( *it ).desc->displayName ) + ( ( ( *it ).desc->sub_plugin_features != NULL ) ? ": " + ( *it ).name : "" ); } - int row = 0; - for( QStringList::iterator it = plugin_names.begin(); - it != plugin_names.end(); ++it ) + for( QStringList::ConstIterator it = pluginNames.begin(); + it != pluginNames.end(); ++it ) { m_sourceModel.setItem( row, 0, new QStandardItem( *it ) ); ++row; } + // setup filtering m_model.setSourceModel( &m_sourceModel ); m_model.setFilterCaseSensitivity( Qt::CaseInsensitive ); - m_filterEdit = new QLineEdit( this ); - connect( m_filterEdit, SIGNAL( textChanged( const QString & ) ), - &m_model, SLOT( setFilterRegExp( const QString & ) ) ); - connect( m_filterEdit, SIGNAL( textChanged( const QString & ) ), + connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), + &m_model, SLOT( setFilterRegExp( const QString & ) ) ); + connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateSelection() ) ); - m_pluginList = new QListView( this ); - m_pluginList->setModel( &m_model ); - QItemSelectionModel * sm = new QItemSelectionModel( &m_model ); - m_pluginList->setSelectionModel( sm ); - m_pluginList->setSelectionBehavior( QAbstractItemView::SelectRows ); - m_pluginList->setSelectionMode( QAbstractItemView::SingleSelection ); - m_pluginList->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - connect( sm, SIGNAL( currentRowChanged( const QModelIndex &, - const QModelIndex & ) ), - SLOT( rowChanged( const QModelIndex &, - const QModelIndex & ) ) ); - connect( m_pluginList, SIGNAL( doubleClicked( const QModelIndex & ) ), - SLOT( onDoubleClicked( const QModelIndex & ) ) ); + ui->pluginList->setModel( &m_model ); - QGroupBox * groupbox = new QGroupBox( tr( "Description" ), this ); - groupbox->setFixedHeight( 200 ); - - QVBoxLayout * gbl = new QVBoxLayout( groupbox ); - gbl->setMargin( 0 ); - gbl->setSpacing( 10 ); - - m_scrollArea = new QScrollArea( groupbox ); - m_scrollArea->setFrameStyle( 0 ); - - gbl->addWidget( m_scrollArea ); - - QVBoxLayout * vboxl = new QVBoxLayout( this ); - vboxl->setMargin( 0 ); - vboxl->setSpacing( 10 ); - vboxl->addWidget( m_filterEdit ); - vboxl->addWidget( m_pluginList ); - vboxl->addWidget( groupbox ); + // setup selection model + QItemSelectionModel * selectionModel = new QItemSelectionModel( &m_model ); + ui->pluginList->setSelectionModel( selectionModel ); + connect( selectionModel, SIGNAL( currentRowChanged( const QModelIndex &, + const QModelIndex & ) ), + SLOT( rowChanged( const QModelIndex &, const QModelIndex & ) ) ); + connect( ui->pluginList, SIGNAL( doubleClicked( const QModelIndex & ) ), + SLOT( acceptSelection() ) ); + // try to accept current selection when pressing "OK" + connect( ui->buttonBox, SIGNAL( accepted() ), + this, SLOT( acceptSelection() ) ); + updateSelection(); + show(); } -EffectListWidget::~EffectListWidget() +EffectSelectDialog::~EffectSelectDialog() { } -void EffectListWidget::rowChanged( const QModelIndex & _idx, const QModelIndex & ) +Effect * EffectSelectDialog::instantiateSelectedPlugin( EffectChain * _parent ) +{ + if( !m_currentSelection.name.isEmpty() && m_currentSelection.desc ) + { + return Effect::instantiate( m_currentSelection.desc->name, + _parent, &m_currentSelection ); + } + return NULL; +} + + + + +void EffectSelectDialog::acceptSelection() +{ + if( m_currentSelection.isValid() ) + { + accept(); + } +} + + + + +void EffectSelectDialog::rowChanged( const QModelIndex & _idx, + const QModelIndex & ) { delete m_descriptionWidget; m_descriptionWidget = NULL; @@ -251,13 +160,11 @@ void EffectListWidget::rowChanged( const QModelIndex & _idx, const QModelIndex & if( m_model.mapToSource( _idx ).row() < 0 ) { // invalidate current selection - m_currentSelection = - Plugin::Descriptor::SubPluginFeatures::Key(); + m_currentSelection = Plugin::Descriptor::SubPluginFeatures::Key(); } else { - m_currentSelection = - m_effectKeys[m_model.mapToSource( _idx ).row()]; + m_currentSelection = m_effectKeys[m_model.mapToSource( _idx ).row()]; } if( m_currentSelection.desc && m_currentSelection.desc->sub_plugin_features ) @@ -267,13 +174,11 @@ void EffectListWidget::rowChanged( const QModelIndex & _idx, const QModelIndex & l->setMargin( 4 ); l->setSpacing( 0 ); - m_scrollArea->setWidget( m_descriptionWidget ); + ui->scrollArea->setWidget( m_descriptionWidget ); m_currentSelection.desc->sub_plugin_features-> - fillDescriptionWidget( m_descriptionWidget, - &m_currentSelection ); - foreach( QWidget * w, - m_descriptionWidget->findChildren() ) + fillDescriptionWidget( m_descriptionWidget, &m_currentSelection ); + foreach( QWidget * w, m_descriptionWidget->findChildren() ) { if( w->parent() == m_descriptionWidget ) { @@ -283,32 +188,24 @@ void EffectListWidget::rowChanged( const QModelIndex & _idx, const QModelIndex & l->setSizeConstraint( QLayout::SetFixedSize ); m_descriptionWidget->show(); } - emit highlighted( m_currentSelection ); } -void EffectListWidget::onDoubleClicked( const QModelIndex & ) -{ - emit doubleClicked( m_currentSelection ); -} - - - - -void EffectListWidget::updateSelection() +void EffectSelectDialog::updateSelection() { // no valid selection anymore due to changed filter? - if( m_pluginList->selectionModel()->selection().size() <= 0 ) + if( ui->pluginList->selectionModel()->selection().size() <= 0 ) { // then select our first item - m_pluginList->selectionModel()->select( m_model.index( 0, 0 ), - QItemSelectionModel::ClearAndSelect ); + ui->pluginList->selectionModel()->select( m_model.index( 0, 0 ), + QItemSelectionModel::ClearAndSelect ); rowChanged( m_model.index( 0, 0 ), QModelIndex() ); } } + #include "moc_EffectSelectDialog.cxx" diff --git a/src/gui/Forms/EffectSelectDialog.ui b/src/gui/Forms/EffectSelectDialog.ui new file mode 100644 index 000000000..a58cd6c8c --- /dev/null +++ b/src/gui/Forms/EffectSelectDialog.ui @@ -0,0 +1,111 @@ + + + EffectSelectDialog + + + + 0 + 0 + 585 + 547 + + + + Add effect + + + true + + + + 10 + + + + + + + + + 500 + 250 + + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::SelectRows + + + + + + + + 0 + 200 + + + + + 16777215 + 210 + + + + Plugin description + + + + + + QFrame::NoFrame + + + + + 0 + 0 + 497 + 109 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + rejected() + EffectSelectDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +