X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fdialogs%2Fprefs_dialog.cpp;h=67ed860724beeb7f3368696f62f65b8a54bfa907;hb=897144d1e6d04da5f454fee57f8947aeae1523ae;hp=69eff47c1e332ef679bc56c099bc8ddcf89f9601;hpb=61b7f84a13801112c00baa717fd0bf639f75fdae;p=vlc diff --git a/modules/gui/qt4/dialogs/prefs_dialog.cpp b/modules/gui/qt4/dialogs/prefs_dialog.cpp index 69eff47c1e..67ed860724 100644 --- a/modules/gui/qt4/dialogs/prefs_dialog.cpp +++ b/modules/gui/qt4/dialogs/prefs_dialog.cpp @@ -25,6 +25,7 @@ #include "util/qvlcframe.hpp" #include "components/preferences.hpp" +#include "components/simple_preferences.hpp" #include "qt4.hpp" #include @@ -33,109 +34,132 @@ #include #include #include + PrefsDialog *PrefsDialog::instance = NULL; PrefsDialog::PrefsDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf ) { - layout = new QHBoxLayout(); - QVBoxLayout * main_layout = new QVBoxLayout(); + QGridLayout *main_layout = new QGridLayout(this); setWindowTitle( qtr("Preferences" ) ); resize( 800, 450 ); - advanced_tree = NULL; - simple_tree = NULL; - simple_panel = NULL; - advanced_panel = NULL; - - vertical = new QVBoxLayout(); + tree_panel = new QWidget(0); + tree_panel_l = new QHBoxLayout; + tree_panel->setLayout( tree_panel_l ); + main_panel = new QWidget(0); + main_panel_l = new QHBoxLayout; + main_panel->setLayout( main_panel_l ); // Choice for types types = new QGroupBox( "Show settings" ); - QHBoxLayout *tl = new QHBoxLayout(); + QHBoxLayout *tl = new QHBoxLayout(0); tl->setSpacing( 3 ); tl->setMargin( 3 ); - small = new QRadioButton( "Basic", types ); - all = new QRadioButton( "All", types ); - tl->addWidget( small ); - tl->addWidget( all ); - types->setLayout(tl ); + small = new QRadioButton( "Basic", types ); tl->addWidget( small ); + all = new QRadioButton( "All", types ); tl->addWidget( all ); + types->setLayout(tl); + small->setChecked( true ); - layout->addLayout( vertical, 1 ); + advanced_tree = NULL; + simple_tree = NULL; + simple_panel = NULL; + advanced_panel = NULL; - all->setChecked( true ); + main_layout->addWidget( types, 0,0,1,1 ); + main_layout->addWidget( tree_panel, 1,0,1,1 ); + main_layout->addWidget( main_panel, 0, 1, 2, 1 ); - main_layout->addLayout( layout ); - adv_chk = new QCheckBox("Advanced options"); - main_layout->addWidget( adv_chk ); + main_layout->setColumnMinimumWidth( 0, 200 ); + main_layout->setColumnStretch( 0, 1 ); + main_layout->setColumnStretch( 1,3 ); - setAll(); + setSmall(); - connect( adv_chk, SIGNAL( toggled(bool) ), - this, SLOT( setAdvanced( bool ) ) ); + QPushButton *save, *cancel; + QHBoxLayout *buttonsLayout = QVLCFrame::doButtons( this, NULL, + &save, _("Save"), + &cancel, _("Cancel"), + NULL, NULL ); + main_layout->addLayout( buttonsLayout, 2,0, 1 ,3 ); setLayout( main_layout ); - connect( small, SIGNAL( clicked() ), this, SLOT( setSmall()) ); - connect( all, SIGNAL( clicked() ), this, SLOT( setAll()) ); -} + CONNECT( save, clicked(), this, save() ); + CONNECT( cancel, clicked(), this, cancel() ); + CONNECT( small, clicked(), this, setSmall() ); + CONNECT( all, clicked(), this, setAll() ); -void PrefsDialog::setAdvanced( bool advanced ) -{ - if( advanced_panel ) - advanced_panel->setAdvanced( advanced ); + for( int i = 0; i < SPrefsMax ; i++ ) simple_panels[i] = NULL; } void PrefsDialog::setAll() { - while( (vertical->takeAt(0)) != 0 ) {} if( simple_tree ) + { + tree_panel_l->removeWidget( simple_tree ); simple_tree->hide(); + } if( !advanced_tree ) { - advanced_tree = new PrefsTree( p_intf, this ); + advanced_tree = new PrefsTree( p_intf, tree_panel ); connect( advanced_tree, SIGNAL( currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem *) ), this, SLOT( changePanel( QTreeWidgetItem * ) ) ); } + tree_panel_l->addWidget( advanced_tree ); advanced_tree->show(); - setAdvanced( adv_chk->isChecked() ); - vertical->addWidget( types ); - vertical->addWidget( advanced_tree ); - - if( layout->count() == 2 ) - layout->takeAt(1); - if( !advanced_panel ) - advanced_panel = new PrefsPanel( this ); - layout->addWidget( advanced_panel, 3 ) ; + if( simple_panel ) + { + main_panel_l->removeWidget( simple_panel ); + simple_panel->hide(); + } + if( !advanced_panel ) + advanced_panel = new PrefsPanel( main_panel ); + main_panel_l->addWidget( advanced_panel ); + advanced_panel->show(); } void PrefsDialog::setSmall() { - while( (vertical->takeAt(0)) != 0 ) {} if( advanced_tree ) + { + tree_panel_l->removeWidget( advanced_tree ); advanced_tree->hide(); - + } if( !simple_tree ) - simple_tree = new QTreeWidget(); + { + simple_tree = new SPrefsCatList( p_intf, tree_panel ); + CONNECT( simple_tree, + currentItemChanged( QListWidgetItem *, QListWidgetItem *), + this, changeSimplePanel( QListWidgetItem * ) ); + } + tree_panel_l->addWidget( simple_tree ); simple_tree->show(); - vertical->addWidget( types ); - vertical->addWidget( simple_tree ); - - if( layout->count() == 2 ) - layout->takeAt(1); + if( advanced_panel ) + { + main_panel_l->removeWidget( advanced_panel ); + advanced_panel->hide(); + } if( !simple_panel ) - simple_panel = new QWidget(); - layout->addWidget( simple_panel, 3 ) ; -} - - -void PrefsDialog::init() -{ + simple_panel = new SPrefsPanel( p_intf, main_panel, SPrefsDefaultCat ); + main_panel_l->addWidget( simple_panel ); + simple_panel->show(); } -PrefsDialog::~PrefsDialog() +void PrefsDialog::changeSimplePanel( QListWidgetItem *item ) { + int number = item->data( Qt::UserRole ).toInt(); + if( simple_panel ) + { + main_panel_l->removeWidget( simple_panel ); + simple_panel->hide(); + } + if( !simple_panels[number] ) + simple_panel = new SPrefsPanel( p_intf, main_panel, number ); + simple_panels[number] = simple_panel; + main_panel_l->addWidget( simple_panel ); + simple_panel->show(); } void PrefsDialog::changePanel( QTreeWidgetItem *item ) @@ -144,16 +168,41 @@ void PrefsDialog::changePanel( QTreeWidgetItem *item ) if( advanced_panel ) { - layout->removeWidget( advanced_panel ); + main_panel_l->removeWidget( advanced_panel ); advanced_panel->hide(); } if( !data->panel ) - { - data->panel = new PrefsPanel( p_intf, this, data ); - } + data->panel = new PrefsPanel( p_intf, main_panel , data ); + advanced_panel = data->panel; + main_panel_l->addWidget( advanced_panel ); advanced_panel->show(); - setAdvanced( adv_chk->isChecked() ); - layout->addWidget( advanced_panel, 3 ); +} + +void PrefsDialog::save() +{ + if( small->isChecked() && simple_tree ) + { + for( int i = 0 ; i< SPrefsMax; i++ ) + if( simple_panels[i] ) simple_panels[i]->apply(); + } + else if( all->isChecked() && advanced_tree ) + advanced_tree->applyAll(); + config_SaveConfigFile( p_intf, NULL ); + hide(); +} +void PrefsDialog::cancel() +{ + if( small->isChecked() && simple_tree ) + { + for( int i = 0 ; i< SPrefsMax; i++ ) + if( simple_panels[i] ) simple_panels[i]->clean(); + } + else if( all->isChecked() && advanced_tree ) + { + advanced_tree->cleanAll(); + advanced_panel = NULL; + } + hide(); }