]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs/prefs_dialog.cpp
Some cleanup here and there
[vlc] / modules / gui / qt4 / dialogs / prefs_dialog.cpp
index 69eff47c1e332ef679bc56c099bc8ddcf89f9601..67ed860724beeb7f3368696f62f65b8a54bfa907 100644 (file)
@@ -25,6 +25,7 @@
 #include "util/qvlcframe.hpp"
 
 #include "components/preferences.hpp"
+#include "components/simple_preferences.hpp"
 #include "qt4.hpp"
 
 #include <QHBoxLayout>
 #include <QVBoxLayout>
 #include <QPushButton>
 #include <QCheckBox>
+
 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();
 }