preferences_widgets.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:15k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * preferences_widgets.hpp : Widgets for preferences panels
  3.  ****************************************************************************
  4.  * Copyright (C) 2006-2007 the VideoLAN team
  5.  * $Id: 3a0f5e116318a8e13bca8f61f93133d0f1d27bf6 $
  6.  *
  7.  * Authors: Clément Stenac <zorglub@videolan.org>
  8.  *          Antoine Cellerier <dionoea@videolan.org>
  9.  *          Jean-Baptiste Kempf <jb@videolan.org>
  10.  *
  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.
  15.  *
  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.
  20.  *
  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.  *****************************************************************************/
  25. #ifndef _PREFERENCESWIDGETS_H_
  26. #define _PREFERENCESWIDGETS_H_
  27. #ifdef HAVE_CONFIG_H
  28. # include "config.h"
  29. #endif
  30. #include "qt4.hpp"
  31. #include <assert.h>
  32. #include <QWidget>
  33. #include <QCheckBox>
  34. #include <QComboBox>
  35. #include <QLineEdit>
  36. #include <QTreeWidget>
  37. #include <QSpinBox>
  38. #include <QLabel>
  39. #include <QDoubleSpinBox>
  40. #include <QPushButton>
  41. #include <QVector>
  42. #include <QDialog>
  43. class QTreeWidget;
  44. class QTreeWidgetItem;
  45. class QGroupBox;
  46. class QGridLayout;
  47. class QDialogButtonBox;
  48. class QVBoxLayout;
  49. class ConfigControl : public QObject
  50. {
  51.     Q_OBJECT
  52. public:
  53.     ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf,
  54.                    QWidget *p ) : p_this( _p_this ), p_item( _p_conf )
  55.     {
  56.         widget = new QWidget( p );
  57.     }
  58.     ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf ) :
  59.                             p_this (_p_this ), p_item( _p_conf )
  60.     {
  61.         widget = NULL;
  62.     }
  63.     virtual ~ConfigControl() {};
  64.     virtual int getType() = 0;
  65.     const char * getName() { return  p_item->psz_name; }
  66.     QWidget *getWidget() { assert( widget ); return widget; }
  67.     bool isAdvanced() { return p_item->b_advanced; }
  68.     virtual void hide() { getWidget()->hide(); };
  69.     virtual void show() { getWidget()->show(); };
  70.     static ConfigControl * createControl( vlc_object_t*,
  71.                                           module_config_t*,QWidget* );
  72.     static ConfigControl * createControl( vlc_object_t*,
  73.                                           module_config_t*,QWidget*,
  74.                                           QGridLayout *, int& );
  75.     void doApply( intf_thread_t *);
  76. protected:
  77.     vlc_object_t *p_this;
  78.     module_config_t *p_item;
  79.     QString _name;
  80.     QWidget *widget;
  81.     bool _advanced;
  82. #if 0
  83. /* You shouldn't use that now..*/
  84. signals:
  85.     void Updated();
  86. #endif
  87. };
  88. /*******************************************************
  89.  * Integer-based controls
  90.  *******************************************************/
  91. class VIntConfigControl : public ConfigControl
  92. {
  93. Q_OBJECT
  94. public:
  95.     VIntConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
  96.             ConfigControl(a,b,c) {};
  97.     VIntConfigControl( vlc_object_t *a, module_config_t *b ) :
  98.                 ConfigControl(a,b) {};
  99.     virtual ~VIntConfigControl() {};
  100.     virtual int getValue() = 0;
  101.     virtual int getType() { return CONFIG_ITEM_INTEGER; }
  102. };
  103. class IntegerConfigControl : public VIntConfigControl
  104. {
  105. Q_OBJECT
  106. public:
  107.     IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  108.                           QGridLayout *, int& );
  109.     IntegerConfigControl( vlc_object_t *, module_config_t *,
  110.                           QLabel*, QSpinBox* );
  111.     IntegerConfigControl( vlc_object_t *, module_config_t *,
  112.                           QLabel*, QSlider* );
  113.     virtual ~IntegerConfigControl() {};
  114.     virtual int getValue();
  115.     virtual void show() { spin->show(); if( label ) label->show(); }
  116.     virtual void hide() { spin->hide(); if( label ) label->hide(); }
  117. protected:
  118.     QSpinBox *spin;
  119. private:
  120.     QLabel *label;
  121.     void finish();
  122. };
  123. class IntegerRangeConfigControl : public IntegerConfigControl
  124. {
  125. public:
  126.     IntegerRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  127.                                QGridLayout *, int& );
  128.     IntegerRangeConfigControl( vlc_object_t *, module_config_t *,
  129.                                QLabel*, QSpinBox* );
  130. private:
  131.     void finish();
  132. };
  133. class IntegerRangeSliderConfigControl : public VIntConfigControl
  134. {
  135. public:
  136.     IntegerRangeSliderConfigControl( vlc_object_t *, module_config_t *,
  137.                                 QLabel *, QSlider * );
  138.     virtual ~IntegerRangeSliderConfigControl() {};
  139.     virtual int getValue();
  140. protected:
  141.          QSlider *slider;
  142. private:
  143.          QLabel *label;
  144.          void finish();
  145. };
  146. class IntegerListConfigControl : public VIntConfigControl
  147. {
  148. Q_OBJECT
  149. public:
  150.     IntegerListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  151.                               bool, QGridLayout*, int& );
  152.     IntegerListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  153.                               QComboBox*, bool );
  154.     virtual ~IntegerListConfigControl() {};
  155.     virtual int getValue();
  156.     virtual void hide() { combo->hide(); if( label ) label->hide(); }
  157.     virtual void show() { combo->show(); if( label ) label->show(); }
  158. private:
  159.     void finish(module_config_t *, bool );
  160.     QLabel *label;
  161.     QComboBox *combo;
  162. private slots:
  163.     void actionRequested( int );
  164. };
  165. class BoolConfigControl : public VIntConfigControl
  166. {
  167. public:
  168.     BoolConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  169.                        QGridLayout *, int& );
  170.     BoolConfigControl( vlc_object_t *, module_config_t *,
  171.                        QLabel *, QCheckBox*, bool );
  172.     virtual ~BoolConfigControl() {};
  173.     virtual int getValue();
  174.     virtual void show() { checkbox->show(); }
  175.     virtual void hide() { checkbox->hide(); }
  176.     virtual int getType() { return CONFIG_ITEM_BOOL; }
  177. private:
  178.     QCheckBox *checkbox;
  179.     void finish();
  180. };
  181. /*******************************************************
  182.  * Float-based controls
  183.  *******************************************************/
  184. class VFloatConfigControl : public ConfigControl
  185. {
  186.     Q_OBJECT
  187. public:
  188.     VFloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
  189.                 ConfigControl(a,b,c) {};
  190.     VFloatConfigControl( vlc_object_t *a, module_config_t *b ) :
  191.                 ConfigControl(a,b) {};
  192.     virtual ~VFloatConfigControl() {};
  193.     virtual float getValue() = 0;
  194.     virtual int getType() { return CONFIG_ITEM_FLOAT; }
  195. };
  196. class FloatConfigControl : public VFloatConfigControl
  197. {
  198.     Q_OBJECT
  199. public:
  200.     FloatConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  201.                         QGridLayout *, int& );
  202.     FloatConfigControl( vlc_object_t *, module_config_t *,
  203.                         QLabel*, QDoubleSpinBox* );
  204.     virtual ~FloatConfigControl() {};
  205.     virtual float getValue();
  206.     virtual void show() { spin->show(); if( label ) label->show(); }
  207.     virtual void hide() { spin->hide(); if( label ) label->hide(); }
  208. protected:
  209.     QDoubleSpinBox *spin;
  210. private:
  211.     QLabel *label;
  212.     void finish();
  213. };
  214. class FloatRangeConfigControl : public FloatConfigControl
  215. {
  216.     Q_OBJECT
  217. public:
  218.     FloatRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  219.                              QGridLayout *, int& );
  220.     FloatRangeConfigControl( vlc_object_t *, module_config_t *,
  221.                              QLabel*, QDoubleSpinBox* );
  222. private:
  223.     void finish();
  224. };
  225. /*******************************************************
  226.  * String-based controls
  227.  *******************************************************/
  228. class VStringConfigControl : public ConfigControl
  229. {
  230.     Q_OBJECT
  231. public:
  232.     VStringConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
  233.                 ConfigControl(a,b,c) {};
  234.     VStringConfigControl( vlc_object_t *a, module_config_t *b ) :
  235.                 ConfigControl(a,b) {};
  236.     virtual ~VStringConfigControl() {};
  237.     virtual QString getValue() = 0;
  238.     virtual int getType() { return CONFIG_ITEM_STRING; }
  239. };
  240. class StringConfigControl : public VStringConfigControl
  241. {
  242.     Q_OBJECT
  243. public:
  244.     StringConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  245.                          QGridLayout *, int&,  bool pwd );
  246.     StringConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  247.                          QLineEdit*,  bool pwd );
  248.     virtual ~StringConfigControl() {};
  249.     virtual QString getValue() { return text->text(); };
  250.     virtual void show() { text->show(); if( label ) label->show(); }
  251.     virtual void hide() { text->hide(); if( label ) label->hide(); }
  252. private:
  253.     void finish();
  254.     QLineEdit *text;
  255.     QLabel *label;
  256. };
  257. class FileConfigControl : public VStringConfigControl
  258. {
  259.     Q_OBJECT;
  260. public:
  261.     FileConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  262.                        QGridLayout *, int& );
  263.     FileConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  264.                        QLineEdit *, QPushButton * );
  265.     virtual ~FileConfigControl() {};
  266.     virtual QString getValue() { return text->text(); };
  267.     virtual void show() { text->show(); if( label ) label->show(); browse->show(); }
  268.     virtual void hide() { text->hide(); if( label ) label->hide(); browse->hide(); }
  269. public slots:
  270.     virtual void updateField();
  271. protected:
  272.     void finish();
  273.     QLineEdit *text;
  274.     QLabel *label;
  275.     QPushButton *browse;
  276. };
  277. class DirectoryConfigControl : public FileConfigControl
  278. {
  279.     Q_OBJECT;
  280. public:
  281.     DirectoryConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  282.                             QGridLayout *, int& );
  283.     DirectoryConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  284.                             QLineEdit *, QPushButton * );
  285.     virtual ~DirectoryConfigControl() {};
  286. public slots:
  287.     virtual void updateField();
  288. };
  289. #if 0
  290. class FontConfigControl : public FileConfigControl
  291. {
  292.     Q_OBJECT;
  293. public:
  294.     FontConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  295.                        QGridLayout *, int&, bool pwd );
  296.     FontConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  297.                        QLineEdit *, QPushButton *, bool pwd );
  298.     virtual ~FontConfigControl() {};
  299. public slots:
  300.     virtual void updateField();
  301. };
  302. #endif
  303. class ModuleConfigControl : public VStringConfigControl
  304. {
  305. public:
  306.     ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool,
  307.                          QGridLayout*, int& );
  308.     ModuleConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  309.                          QComboBox*, bool );
  310.     virtual ~ModuleConfigControl() {};
  311.     virtual QString getValue();
  312.     virtual void hide() { combo->hide(); if( label ) label->hide(); }
  313.     virtual void show() { combo->show(); if( label ) label->show(); }
  314. private:
  315.     void finish( bool );
  316.     QLabel *label;
  317.     QComboBox *combo;
  318. };
  319. struct checkBoxListItem {
  320.     QCheckBox *checkBox;
  321.     char *psz_module;
  322. };
  323. class ModuleListConfigControl : public VStringConfigControl
  324. {
  325.     Q_OBJECT;
  326.     friend class ConfigControl;
  327. public:
  328.     ModuleListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  329.                              bool, QGridLayout*, int& );
  330. //    ModuleListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  331. //                         QComboBox*, bool );
  332.     virtual ~ModuleListConfigControl();
  333.     virtual QString getValue();
  334.     virtual void hide();
  335.     virtual void show();
  336. public slots:
  337.     void onUpdate();
  338. private:
  339.     void finish( bool );
  340.     QVector<checkBoxListItem*> modules;
  341.     QGroupBox *groupBox;
  342.     QLineEdit *text;
  343. };
  344. class StringListConfigControl : public VStringConfigControl
  345. {
  346.     Q_OBJECT;
  347. public:
  348.     StringListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
  349.                              bool, QGridLayout*, int& );
  350.     StringListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
  351.                              QComboBox*, bool );
  352.     virtual ~StringListConfigControl() {};
  353.     virtual QString getValue();
  354.     virtual void hide() { combo->hide(); if( label ) label->hide(); }
  355.     virtual void show() { combo->show(); if( label ) label->show(); }
  356.     QComboBox *combo;
  357. private:
  358.     void finish(module_config_t *, bool );
  359.     QLabel *label;
  360. private slots:
  361.     void actionRequested( int );
  362. };
  363. void setfillVLCConfigCombo(const char *configname, intf_thread_t *p_intf,
  364.                         QComboBox *combo );
  365. #if 0
  366. struct ModuleCheckBox {
  367.     QCheckBox *checkbox;
  368.     QString module;
  369. };
  370. class ModuleListConfigControl : public ConfigControl
  371. {
  372. public:
  373.     StringConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool
  374.                          bycat );
  375.     virtual ~StringConfigControl();
  376.     virtual QString getValue();
  377. private:
  378.     std::vector<ModuleCheckBox> checkboxes;
  379.     QLineEdit *text;
  380. private slot:
  381.     void OnUpdate();
  382. };
  383. #endif
  384. /**********************************************************************
  385.  * Key selector widget
  386.  **********************************************************************/
  387. class KeyShortcutEdit: public QLineEdit
  388. {
  389.     Q_OBJECT;
  390. public:
  391.     void setValue( int _value ){ value = _value; }
  392.     int getValue() const { return value; }
  393.     void setGlobal( bool _value ) { b_global = _value; }
  394.     bool getGlobal()  const { return b_global; }
  395. public slots:
  396.     virtual void clear(void) { value = 0; QLineEdit::clear(); b_global = false;}
  397. private:
  398.     int value;
  399.     bool b_global;
  400.     virtual void mousePressEvent( QMouseEvent *event );
  401. signals:
  402.     void pressed();
  403. };
  404. class SearchLineEdit;
  405. class KeySelectorControl : public ConfigControl
  406. {
  407.     Q_OBJECT;
  408. public:
  409.     KeySelectorControl( vlc_object_t *, module_config_t *, QWidget *,
  410.                         QGridLayout*, int& );
  411.     virtual int getType() { return CONFIG_ITEM_KEY; }
  412.     virtual ~KeySelectorControl() {};
  413.     virtual void hide() { table->hide(); if( label ) label->hide(); }
  414.     virtual void show() { table->show(); if( label ) label->show(); }
  415.     void doApply();
  416. private:
  417.     void finish();
  418.     QLabel *label;
  419.     QTreeWidget *table;
  420.     KeyShortcutEdit *shortcutValue;
  421.     QList<module_config_t *> values;
  422.     SearchLineEdit *actionSearch;
  423. private slots:
  424.     void setTheKey();
  425.     void selectKey( QTreeWidgetItem * = NULL, int column = 1 );
  426.     void select1Key();
  427.     void filter( const QString & );
  428. };
  429. class KeyInputDialog : public QDialog
  430. {
  431. public:
  432.     KeyInputDialog( QTreeWidget *, const QString&, QWidget *, bool b_global = false);
  433.     int keyValue;
  434.     bool conflicts;
  435. private:
  436.     QTreeWidget *table;
  437.     void checkForConflicts( int i_vlckey );
  438.     void keyPressEvent( QKeyEvent *);
  439.     void wheelEvent( QWheelEvent *);
  440.     QLabel *selected, *warning;
  441.     QVBoxLayout *vLayout;
  442.     QDialogButtonBox *buttonBox;
  443.     bool b_global;
  444. };
  445. #endif