1 /*****************************************************************************
2 * preferences_widgets.hpp : Widgets for preferences panels
3 ****************************************************************************
4 * Copyright (C) 2006-2007 the VideoLAN team
7 * Authors: Clément Stenac <zorglub@videolan.org>
8 * Antoine Cellerier <dionoea@videolan.org>
9 * Jean-Baptiste Kempf <jb@videolan.org>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
24 *****************************************************************************/
26 #ifndef _PREFERENCESWIDGETS_H_
27 #define _PREFERENCESWIDGETS_H_
41 #include <QTreeWidget>
44 #include <QDoubleSpinBox>
45 #include <QPushButton>
50 class QTreeWidgetItem;
53 class QDialogButtonBox;
56 class ConfigControl : public QObject
60 ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf,
61 QWidget *p ) : p_this( _p_this ), p_item( _p_conf )
63 widget = new QWidget( p );
65 ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf ) :
66 p_this (_p_this ), p_item( _p_conf )
70 virtual ~ConfigControl() {};
71 virtual int getType() = 0;
72 const char * getName() { return p_item->psz_name; }
73 QWidget *getWidget() { assert( widget ); return widget; }
74 bool isAdvanced() { return p_item->b_advanced; }
75 virtual void hide() { getWidget()->hide(); };
76 virtual void show() { getWidget()->show(); };
78 static ConfigControl * createControl( vlc_object_t*,
79 module_config_t*,QWidget* );
80 static ConfigControl * createControl( vlc_object_t*,
81 module_config_t*,QWidget*,
82 QGridLayout *, int& );
83 void doApply( intf_thread_t *);
86 module_config_t *p_item;
91 /* You shouldn't use that now..*/
97 /*******************************************************
98 * Integer-based controls
99 *******************************************************/
100 class VIntConfigControl : public ConfigControl
104 VIntConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
105 ConfigControl(a,b,c) {};
106 VIntConfigControl( vlc_object_t *a, module_config_t *b ) :
107 ConfigControl(a,b) {};
108 virtual ~VIntConfigControl() {};
109 virtual int getValue() = 0;
110 virtual int getType() { return CONFIG_ITEM_INTEGER; }
113 class IntegerConfigControl : public VIntConfigControl
117 IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget *,
118 QGridLayout *, int& );
119 IntegerConfigControl( vlc_object_t *, module_config_t *,
120 QLabel*, QSpinBox* );
121 IntegerConfigControl( vlc_object_t *, module_config_t *,
123 virtual ~IntegerConfigControl() {};
124 virtual int getValue();
125 virtual void show() { spin->show(); if( label ) label->show(); }
126 virtual void hide() { spin->hide(); if( label ) label->hide(); }
135 class IntegerRangeConfigControl : public IntegerConfigControl
138 IntegerRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
139 QGridLayout *, int& );
140 IntegerRangeConfigControl( vlc_object_t *, module_config_t *,
141 QLabel*, QSpinBox* );
146 class IntegerRangeSliderConfigControl : public VIntConfigControl
149 IntegerRangeSliderConfigControl( vlc_object_t *, module_config_t *,
150 QLabel *, QSlider * );
151 virtual ~IntegerRangeSliderConfigControl() {};
152 virtual int getValue();
160 class IntegerListConfigControl : public VIntConfigControl
164 IntegerListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
165 bool, QGridLayout*, int& );
166 IntegerListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
168 virtual ~IntegerListConfigControl() {};
169 virtual int getValue();
170 virtual void hide() { combo->hide(); if( label ) label->hide(); }
171 virtual void show() { combo->show(); if( label ) label->show(); }
173 void finish(module_config_t *, bool );
177 void actionRequested( int );
181 class BoolConfigControl : public VIntConfigControl
184 BoolConfigControl( vlc_object_t *, module_config_t *, QWidget *,
185 QGridLayout *, int& );
186 BoolConfigControl( vlc_object_t *, module_config_t *,
187 QLabel *, QCheckBox*, bool );
188 virtual ~BoolConfigControl() {};
189 virtual int getValue();
190 virtual void show() { checkbox->show(); }
191 virtual void hide() { checkbox->hide(); }
192 virtual int getType() { return CONFIG_ITEM_BOOL; }
199 /*******************************************************
200 * Float-based controls
201 *******************************************************/
202 class VFloatConfigControl : public ConfigControl
206 VFloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
207 ConfigControl(a,b,c) {};
208 VFloatConfigControl( vlc_object_t *a, module_config_t *b ) :
209 ConfigControl(a,b) {};
210 virtual ~VFloatConfigControl() {};
211 virtual float getValue() = 0;
212 virtual int getType() { return CONFIG_ITEM_FLOAT; }
215 class FloatConfigControl : public VFloatConfigControl
219 FloatConfigControl( vlc_object_t *, module_config_t *, QWidget *,
220 QGridLayout *, int& );
221 FloatConfigControl( vlc_object_t *, module_config_t *,
222 QLabel*, QDoubleSpinBox* );
223 virtual ~FloatConfigControl() {};
224 virtual float getValue();
225 virtual void show() { spin->show(); if( label ) label->show(); }
226 virtual void hide() { spin->hide(); if( label ) label->hide(); }
229 QDoubleSpinBox *spin;
236 class FloatRangeConfigControl : public FloatConfigControl
240 FloatRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
241 QGridLayout *, int& );
242 FloatRangeConfigControl( vlc_object_t *, module_config_t *,
243 QLabel*, QDoubleSpinBox* );
248 /*******************************************************
249 * String-based controls
250 *******************************************************/
251 class VStringConfigControl : public ConfigControl
255 VStringConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
256 ConfigControl(a,b,c) {};
257 VStringConfigControl( vlc_object_t *a, module_config_t *b ) :
258 ConfigControl(a,b) {};
259 virtual ~VStringConfigControl() {};
260 virtual QString getValue() = 0;
261 virtual int getType() { return CONFIG_ITEM_STRING; }
264 class StringConfigControl : public VStringConfigControl
268 StringConfigControl( vlc_object_t *, module_config_t *, QWidget *,
269 QGridLayout *, int&, bool pwd );
270 StringConfigControl( vlc_object_t *, module_config_t *, QLabel *,
271 QLineEdit*, bool pwd );
272 virtual ~StringConfigControl() {};
273 virtual QString getValue() { return text->text(); };
274 virtual void show() { text->show(); if( label ) label->show(); }
275 virtual void hide() { text->hide(); if( label ) label->hide(); }
282 class FileConfigControl : public VStringConfigControl
286 FileConfigControl( vlc_object_t *, module_config_t *, QWidget *,
287 QGridLayout *, int& );
288 FileConfigControl( vlc_object_t *, module_config_t *, QLabel *,
289 QLineEdit *, QPushButton * );
290 virtual ~FileConfigControl() {};
291 virtual QString getValue() { return text->text(); };
292 virtual void show() { text->show(); if( label ) label->show(); browse->show(); }
293 virtual void hide() { text->hide(); if( label ) label->hide(); browse->hide(); }
295 virtual void updateField();
303 class DirectoryConfigControl : public FileConfigControl
307 DirectoryConfigControl( vlc_object_t *, module_config_t *, QWidget *,
308 QGridLayout *, int& );
309 DirectoryConfigControl( vlc_object_t *, module_config_t *, QLabel *,
310 QLineEdit *, QPushButton * );
311 virtual ~DirectoryConfigControl() {};
313 virtual void updateField();
317 class FontConfigControl : public FileConfigControl
321 FontConfigControl( vlc_object_t *, module_config_t *, QWidget *,
322 QGridLayout *, int&, bool pwd );
323 FontConfigControl( vlc_object_t *, module_config_t *, QLabel *,
324 QLineEdit *, QPushButton *, bool pwd );
325 virtual ~FontConfigControl() {};
327 virtual void updateField();
331 class ModuleConfigControl : public VStringConfigControl
334 ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool,
335 QGridLayout*, int& );
336 ModuleConfigControl( vlc_object_t *, module_config_t *, QLabel *,
338 virtual ~ModuleConfigControl() {};
339 virtual QString getValue();
340 virtual void hide() { combo->hide(); if( label ) label->hide(); }
341 virtual void show() { combo->show(); if( label ) label->show(); }
348 struct checkBoxListItem {
353 class ModuleListConfigControl : public VStringConfigControl
356 friend class ConfigControl;
358 ModuleListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
359 bool, QGridLayout*, int& );
360 // ModuleListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
361 // QComboBox*, bool );
362 virtual ~ModuleListConfigControl();
363 virtual QString getValue();
370 QVector<checkBoxListItem*> modules;
375 class StringListConfigControl : public VStringConfigControl
379 StringListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
380 bool, QGridLayout*, int& );
381 StringListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
383 virtual ~StringListConfigControl() {};
384 virtual QString getValue();
385 virtual void hide() { combo->hide(); if( label ) label->hide(); }
386 virtual void show() { combo->show(); if( label ) label->show(); }
389 void finish(module_config_t *, bool );
392 void actionRequested( int );
396 void setfillVLCConfigCombo(const char *configname, intf_thread_t *p_intf,
400 struct ModuleCheckBox {
405 class ModuleListConfigControl : public ConfigControl
408 StringConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool
410 virtual ~StringConfigControl();
411 virtual QString getValue();
413 std::vector<ModuleCheckBox> checkboxes;
420 /**********************************************************************
421 * Key selector widget
422 **********************************************************************/
423 class KeyShortcutEdit: public QLineEdit
427 void setValue( int _value ){ value = _value; }
428 int getValue() const { return value; }
430 virtual void clear(void) { value = 0; QLineEdit::clear(); }
433 virtual void mousePressEvent( QMouseEvent *event );
438 class KeySelectorControl : public ConfigControl
442 KeySelectorControl( vlc_object_t *, module_config_t *, QWidget *,
443 QGridLayout*, int& );
444 virtual int getType() { return CONFIG_ITEM_KEY; }
445 virtual ~KeySelectorControl() {};
446 virtual void hide() { table->hide(); if( label ) label->hide(); }
447 virtual void show() { table->show(); if( label ) label->show(); }
453 KeyShortcutEdit *shortcutValue;
454 QList<module_config_t *> values;
457 void selectKey( QTreeWidgetItem * = NULL );
461 class KeyInputDialog : public QDialog
464 KeyInputDialog( QTreeWidget *, QString, QWidget * );
469 void checkForConflicts( int i_vlckey );
470 void keyPressEvent( QKeyEvent *);
471 void wheelEvent( QWheelEvent *);
473 QVBoxLayout *vLayout;
474 QDialogButtonBox *buttonBox;