]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/preferences_widgets.hpp
Skeleton for modules list widgets in the prefs. I'm not working on it atm so i figure...
[vlc] / modules / gui / qt4 / components / preferences_widgets.hpp
index ad5da728501cbba2862d14a6f37789fc86197f82..52a0b5586e6ab656d0c0fe99960d557136f2c77f 100644 (file)
@@ -5,6 +5,7 @@
  * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
+ *          Antoine Cellerier <dionoea@videolan.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #define _INFOPANELS_H_
 #include <vlc/vlc.h>
 #include <QWidget>
+#include <QLineEdit>
+#include <QSpinBox>
+#include <QDoubleSpinBox>
+#include <QComboBox>
+#include <QCheckBox>
+#include <QVector>
 #include "ui/input_stats.h"
+#include "qt4.hpp"
+#include <assert.h>
 
-class QSpinBox;
-class QLineEdit;
-class QString;
-class QComboBox;
-class QCheckBox;
-
-class ConfigControl : public QWidget
+class ConfigControl : public QObject
 {
     Q_OBJECT;
 public:
-    ConfigControl( vlc_object_t *, module_config_t *, QWidget * );
-    virtual ~ConfigControl();
-    QString getName() { return _name; }
-    bool isAdvanced() { return _advanced; }
+    ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf,
+                   QWidget *p ) : p_this( _p_this ), p_item( _p_conf )
+    {
+        widget = new QWidget( p );
+    }
+    ConfigControl( vlc_object_t *_p_this, module_config_t *_p_conf ) :
+                            p_this (_p_this ), p_item( _p_conf )
+    {
+        widget = NULL;
+    }
+    virtual ~ConfigControl() {};
+    virtual int getType() = 0;
+    char * getName() { return  p_item->psz_name; }
+    QWidget *getWidget() { assert( widget ); return widget; }
+    bool isAdvanced() { return p_item->b_advanced; }
+    virtual void hide() { getWidget()->hide(); };
+    virtual void show() { getWidget()->show(); };
 
     static ConfigControl * createControl( vlc_object_t*,
-                                         module_config_t*,QWidget* );
+                                          module_config_t*,QWidget* );
+    static ConfigControl * createControl( vlc_object_t*,
+                                          module_config_t*,QWidget*,
+                                          QGridLayout *, int& );
+    void doApply( intf_thread_t *);
 protected:
     vlc_object_t *p_this;
+    module_config_t *p_item;
     QString _name;
+    QWidget *widget;
     bool _advanced;
 signals:
     void Updated();
@@ -60,31 +82,76 @@ class VIntConfigControl : public ConfigControl
 public:
     VIntConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
             ConfigControl(a,b,c) {};
+    VIntConfigControl( vlc_object_t *a, module_config_t *b ) :
+                ConfigControl(a,b) {};
     virtual ~VIntConfigControl() {};
     virtual int getValue() = 0;
+    virtual int getType() { return 1; }
 };
 
-#if 0
 class IntegerConfigControl : public VIntConfigControl
 {
 public:
-    IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget * );
-    virtual ~IntegerConfigControl();
+    IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                          QGridLayout *, int& );
+    IntegerConfigControl( vlc_object_t *, module_config_t *,
+                          QLabel*, QSpinBox* );
+    virtual ~IntegerConfigControl() {};
     virtual int getValue();
-private:
+    virtual void show() { spin->show(); label->show(); }
+    virtual void hide() { spin->hide(); label->hide(); }
+
+protected:
     QSpinBox *spin;
+
+private:
+    QLabel *label;
+    void finish();
+};
+
+class IntegerRangeConfigControl : public IntegerConfigControl
+{
+public:
+    IntegerRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                               QGridLayout *, int& );
+    IntegerRangeConfigControl( vlc_object_t *, module_config_t *,
+                               QLabel*, QSpinBox* );
+private:
+    void finish();
+};
+
+class IntegerListConfigControl : public VIntConfigControl
+{
+public:
+    IntegerListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                              bool, QGridLayout*, int& );
+    IntegerListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+                              QComboBox*, bool );
+    virtual ~IntegerListConfigControl() {};
+    virtual int getValue();
+    virtual void hide() { combo->hide(); label->hide(); }
+    virtual void show() { combo->show(); label->show(); }
+private:
+    void finish( bool );
+    QLabel *label;
+    QComboBox *combo;
 };
 
 class BoolConfigControl : public VIntConfigControl
 {
 public:
-    IntConfigControl( vlc_object_t *, module_config_t *, QWidget * );
-    virtual ~IntConfigControl();
+    BoolConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                       QGridLayout *, int& );
+    BoolConfigControl( vlc_object_t *, module_config_t *,
+                       QLabel *, QCheckBox*, bool );
+    virtual ~BoolConfigControl() {};
     virtual int getValue();
+    virtual void show() { checkbox->show(); }
+    virtual void hide() { checkbox->hide(); }
 private:
-    wxCheckBox *checkbox;
+    QCheckBox *checkbox;
+    void finish();
 };
-#endif
 
 /*******************************************************
  * Float-based controls
@@ -94,22 +161,43 @@ class VFloatConfigControl : public ConfigControl
 public:
     VFloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
                 ConfigControl(a,b,c) {};
+    VFloatConfigControl( vlc_object_t *a, module_config_t *b ) :
+                ConfigControl(a,b) {};
     virtual ~VFloatConfigControl() {};
     virtual float getValue() = 0;
+    virtual int getType() { return 2; }
 };
 
-#if 0
 class FloatConfigControl : public VFloatConfigControl
 {
 public:
-    FloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
-                ConfigControl(a,b,c) {};
+    FloatConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                        QGridLayout *, int& );
+    FloatConfigControl( vlc_object_t *, module_config_t *,
+                        QLabel*, QDoubleSpinBox* );
     virtual ~FloatConfigControl() {};
     virtual float getValue();
-private:
+    virtual void show() { spin->show(); label->show(); }
+    virtual void hide() { spin->hide(); label->hide(); }
+
+protected:
     QDoubleSpinBox *spin;
+
+private:
+    QLabel *label;
+    void finish();
+};
+
+class FloatRangeConfigControl : public FloatConfigControl
+{
+public:
+    FloatRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                             QGridLayout *, int& );
+    FloatRangeConfigControl( vlc_object_t *, module_config_t *,
+                             QLabel*, QDoubleSpinBox* );
+private:
+    void finish();
 };
-#endif
 
 /*******************************************************
  * String-based controls
@@ -117,31 +205,84 @@ private:
 class VStringConfigControl : public ConfigControl
 {
 public:
-    VStringConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) : 
+    VStringConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) :
                 ConfigControl(a,b,c) {};
+    VStringConfigControl( vlc_object_t *a, module_config_t *b ) :
+                ConfigControl(a,b) {};
     virtual ~VStringConfigControl() {};
     virtual QString getValue() = 0;
+    virtual int getType() { return 3; }
 };
 
 class StringConfigControl : public VStringConfigControl
 {
 public:
     StringConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                         bool pwd );
-    virtual ~StringConfigControl();
-    virtual QString getValue();
+                         QGridLayout *, int&,  bool pwd );
+    StringConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+                         QLineEdit*,  bool pwd );
+    virtual ~StringConfigControl() {};
+    virtual QString getValue() { return text->text(); };
+    virtual void show() { text->show(); label->show(); }
+    virtual void hide() { text->hide(); label->hide(); }
 private:
+    void finish();
     QLineEdit *text;
+    QLabel *label;
 };
 
 class ModuleConfigControl : public VStringConfigControl
 {
 public:
-    ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool
-                         bycat );
-    virtual ~ModuleConfigControl();
+    ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool,
+                         QGridLayout*, int& );
+    ModuleConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+                         QComboBox*, bool );
+    virtual ~ModuleConfigControl() {};
+    virtual QString getValue();
+    virtual void hide() { combo->hide(); label->hide(); }
+    virtual void show() { combo->show(); label->show(); }
+private:
+    void finish( bool );
+    QLabel *label;
+    QComboBox *combo;
+};
+
+class ModuleListConfigControl : public VStringConfigControl
+{
+    Q_OBJECT;
+public:
+    ModuleListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                             bool, QGridLayout*, int& );
+//    ModuleListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+//                         QComboBox*, bool );
+    virtual ~ModuleListConfigControl();
+    virtual QString getValue();
+    virtual void hide();
+    virtual void show();
+public slots:
+    void wakeUp_TheUserJustClickedOnSomething( int value );
+private:
+    void finish( bool );
+    QVector<QCheckBox*> modules;
+    QLabel *label;
+    QLineEdit *text;
+};
+
+class StringListConfigControl : public VStringConfigControl
+{
+public:
+    StringListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                             bool, QGridLayout*, int& );
+    StringListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+                             QComboBox*, bool );
+    virtual ~StringListConfigControl() {};
     virtual QString getValue();
+    virtual void hide() { combo->hide(); label->hide(); }
+    virtual void show() { combo->show(); label->show(); }
 private:
+    void finish( bool );
+    QLabel *label;
     QComboBox *combo;
 };
 #if 0