]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs/prefs_dialog.cpp
Preferences
[vlc] / modules / gui / qt4 / dialogs / prefs_dialog.cpp
index 69eff47c1e332ef679bc56c099bc8ddcf89f9601..bb49805e12780703fa96418eadb477c71b88d2da 100644 (file)
@@ -25,6 +25,7 @@
 #include "util/qvlcframe.hpp"
 
 #include "components/preferences.hpp"
+#include "components/simple_preferences.hpp"
 #include "qt4.hpp"
 
 #include <QHBoxLayout>
@@ -37,105 +38,151 @@ 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 );
-
-     layout->addLayout( vertical, 1 );
-
-     all->setChecked( true );
-
-     main_layout->addLayout( layout );
+     small = new QRadioButton( "Basic", types ); tl->addWidget( small );
+     all = new QRadioButton( "All", types ); tl->addWidget( all );
+     types->setLayout(tl);
+     small->setChecked( true );
+#if 0
      adv_chk = new QCheckBox("Advanced options");
-     main_layout->addWidget( adv_chk );
+#endif
+     advanced_tree = NULL;
+     simple_tree = NULL;
+     simple_panel = NULL;
+     advanced_panel = NULL;
 
-     setAll();
+     main_layout->addWidget( types, 0,0,1,1 );
+     main_layout->addWidget( tree_panel, 1,0,1,1 );
+#if 0
+     main_layout->addWidget( adv_chk , 2,0,1,1 );
+#endif
+     main_layout->addWidget( main_panel, 0, 1, 2, 1 );
 
+     main_layout->setColumnMinimumWidth( 0, 200 );
+     main_layout->setColumnStretch( 0, 1 );
+     main_layout->setColumnStretch( 1,3 );
+
+     setSmall();
+#if 0
      connect( adv_chk, SIGNAL( toggled(bool) ),
               this, SLOT( setAdvanced( bool ) ) );
+#endif
+
+     QPushButton *save, *cancel;
+     QHBoxLayout *buttonsLayout =
+         QVLCFrame::doButtons( this, NULL, &save, _("Save"),
+                                           &cancel, _("Cancel"),
+                                                NULL, NULL );
+     connect( save, SIGNAL( clicked() ), this, SLOT( save() ) );
+     connect( cancel, SIGNAL( clicked() ), this, SLOT( cancel() ) );
+     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()) );
 }
-
+#if 0
 void PrefsDialog::setAdvanced( bool advanced )
 {
     if( advanced_panel )
         advanced_panel->setAdvanced( advanced );
 }
-
+#endif
 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();
+#if 0
+    adv_chk->show();
+#endif
 }
 
 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,
+          SIGNAL( currentItemChanged( QListWidgetItem *, QListWidgetItem *) ),
+          this, SLOT( 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 ) ;
+        simple_panel = new SPrefsPanel( p_intf, main_panel, SPrefsDefaultCat );
+    main_panel_l->addWidget( simple_panel );
+    simple_panel->show();
+#if 0
+    adv_chk->hide();
+#endif
 }
 
-
-void PrefsDialog::init()
+PrefsDialog::~PrefsDialog()
 {
 }
 
-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();
+        /* Don't do this once it works, you would loose all changes */
+        delete simple_panel;
+    }
+    simple_panel = new SPrefsPanel( p_intf, main_panel, number );
+    main_panel_l->addWidget( simple_panel );
+    simple_panel->show();
 }
 
 void PrefsDialog::changePanel( QTreeWidgetItem *item )
@@ -144,16 +191,45 @@ 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, true );
+#if 0
+        adv_chk->isChecked() );
+#endif
     }
     advanced_panel = data->panel;
+    main_panel_l->addWidget( advanced_panel );
     advanced_panel->show();
+#if 0
     setAdvanced( adv_chk->isChecked() );
-    layout->addWidget( advanced_panel, 3 );
+#endif
+}
+
+void PrefsDialog::save()
+{
+    if( small->isChecked() && simple_tree )
+        simple_tree->applyAll();
+    else if( all->isChecked() && advanced_tree )
+        advanced_tree->applyAll();
+    config_SaveConfigFile( p_intf, NULL );
+    hide();
+}
 
+void PrefsDialog::cancel()
+{
+    if( small->isChecked() && simple_tree )
+    {
+        simple_tree->cleanAll();
+        simple_panel = NULL;
+    }
+    else if( all->isChecked() && advanced_tree )
+    {
+        advanced_tree->cleanAll();
+        advanced_panel = NULL;
+    }
+    hide();
 }