]> git.sesse.net Git - vlc/blob - modules/gui/qt4/dialogs/prefs_dialog.cpp
1d5789583c504dacb91273475816378bba1bd0c3
[vlc] / modules / gui / qt4 / dialogs / prefs_dialog.cpp
1 /*****************************************************************************
2  * prefs_dialog.cpp : Preferences
3  ****************************************************************************
4  * Copyright (C) 2006 the VideoLAN team
5  * $Id$
6  *
7  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/
22
23 #include "dialogs/prefs_dialog.hpp"
24 #include "dialogs_provider.hpp"
25 #include "util/qvlcframe.hpp"
26
27 #include "components/preferences.hpp"
28 #include "qt4.hpp"
29
30 #include <QHBoxLayout>
31 #include <QGroupBox>
32 #include <QRadioButton>
33 #include <QVBoxLayout>
34 #include <QPushButton>
35 #include <QCheckBox>
36 PrefsDialog *PrefsDialog::instance = NULL;
37
38 PrefsDialog::PrefsDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
39 {
40      QGridLayout *main_layout = new QGridLayout(this);
41      setWindowTitle( qtr("Preferences" ) );
42      resize( 800, 450 );
43
44      tree_panel = new QWidget(0);
45      tree_panel_l = new QHBoxLayout;
46      tree_panel->setLayout( tree_panel_l );
47      main_panel = new QWidget(0);
48      main_panel_l = new QHBoxLayout;
49      main_panel->setLayout( main_panel_l );
50
51      // Choice for types
52      types = new QGroupBox( "Show settings" );
53      QHBoxLayout *tl = new QHBoxLayout(0);
54      tl->setSpacing( 3 ); tl->setMargin( 3 );
55      small = new QRadioButton( "Basic", types ); tl->addWidget( small );
56      all = new QRadioButton( "All", types ); tl->addWidget( all );
57      types->setLayout(tl);
58      all->setChecked( true );
59
60      adv_chk = new QCheckBox("Advanced options");
61
62      advanced_tree = NULL;
63      simple_tree = NULL;
64      simple_panel = NULL;
65      advanced_panel = NULL;
66
67      main_layout->addWidget( types, 0,0,1,1 );
68      main_layout->addWidget( tree_panel, 1,0,1,1 );
69      main_layout->addWidget( adv_chk , 2,0,1,1 );
70      main_layout->addWidget( main_panel, 0, 1, 3, 1 );
71
72      main_layout->setColumnMinimumWidth( 0, 200 );
73      main_layout->setColumnStretch( 0, 1 );
74      main_layout->setColumnStretch( 1,3 );
75
76      setAll();
77
78      connect( adv_chk, SIGNAL( toggled(bool) ),
79               this, SLOT( setAdvanced( bool ) ) );
80      setLayout( main_layout );
81
82      connect( small, SIGNAL( clicked() ), this, SLOT( setSmall()) );
83      connect( all, SIGNAL( clicked() ), this, SLOT( setAll()) );
84 }
85
86 void PrefsDialog::setAdvanced( bool advanced )
87 {
88     if( advanced_panel )
89         advanced_panel->setAdvanced( advanced );
90 }
91
92 void PrefsDialog::setAll()
93 {
94     if( simple_tree )
95     {
96         tree_panel_l->removeWidget( simple_tree );
97         simple_tree->hide();
98     }
99
100     if( !advanced_tree )
101     {
102          advanced_tree = new PrefsTree( p_intf, tree_panel );
103          connect( advanced_tree,
104           SIGNAL( currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem *) ),
105           this, SLOT( changePanel( QTreeWidgetItem * ) ) );
106     }
107     tree_panel_l->addWidget( advanced_tree );
108     advanced_tree->show();
109
110     if( simple_panel )
111     {
112         main_panel_l->removeWidget( simple_panel );
113         simple_panel->hide();
114     }
115     if( !advanced_panel )
116          advanced_panel = new PrefsPanel( main_panel );
117     main_panel_l->addWidget( advanced_panel );
118     advanced_panel->show();
119 }
120
121 void PrefsDialog::setSmall()
122 {
123     if( advanced_tree )
124     {
125         tree_panel_l->removeWidget( advanced_tree );
126         advanced_tree->hide();
127     }
128     if( !simple_tree )
129          simple_tree = new QTreeWidget();
130     tree_panel_l->addWidget( simple_tree );
131     simple_tree->show();
132
133     if( advanced_panel )
134     {
135         main_panel_l->removeWidget( advanced_panel );
136         advanced_panel->hide();
137     }
138     if( !simple_panel )
139         simple_panel = new QWidget();
140     main_panel_l->addWidget( simple_panel );
141     simple_panel->show();
142 }
143
144 PrefsDialog::~PrefsDialog()
145 {
146 }
147
148 void PrefsDialog::changePanel( QTreeWidgetItem *item )
149 {
150     PrefsItemData *data = item->data( 0, Qt::UserRole ).value<PrefsItemData*>();
151
152     if( advanced_panel )
153     {
154         main_panel_l->removeWidget( advanced_panel );
155         advanced_panel->hide();
156     }
157     if( !data->panel )
158     {
159         data->panel = new PrefsPanel( p_intf, main_panel , data,
160                                       adv_chk->isChecked() );
161     }
162     advanced_panel = data->panel;
163     main_panel_l->addWidget( advanced_panel );
164     advanced_panel->show();
165     setAdvanced( adv_chk->isChecked() );
166 }