#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 )
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();
}