]> git.sesse.net Git - vlc/commitdiff
Skeleton for modules list widgets in the prefs. I'm not working on it atm so i figure...
authorAntoine Cellerier <dionoea@videolan.org>
Sat, 30 Sep 2006 20:25:36 +0000 (20:25 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 30 Sep 2006 20:25:36 +0000 (20:25 +0000)
modules/gui/qt4/components/preferences_widgets.cpp
modules/gui/qt4/components/preferences_widgets.hpp

index ca5a100236a1438b43a7123a665f1a2409dbb441..7167c853dc4db77a63fd4a5e26b17169a76432bd 100644 (file)
@@ -45,13 +45,14 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
                                              module_config_t *p_item,
                                              QWidget *parent )
 {
-    return createControl( p_this, p_item, parent, NULL, 0 );
+    int i=0;
+    return createControl( p_this, p_item, parent, NULL, i );
 }
 
 ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
                                              module_config_t *p_item,
                                              QWidget *parent,
-                                             QGridLayout *l, int line )
+                                             QGridLayout *l, int &line )
 {
     ConfigControl *p_control = NULL;
     if( p_item->psz_current ) return NULL;
@@ -66,6 +67,14 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
         p_control = new ModuleConfigControl( p_this, p_item, parent, true,
                                              l, line );
         break;
+    case CONFIG_ITEM_MODULE_LIST:
+        p_control = new ModuleListConfigControl( p_this, p_item, parent, false,
+                                             l, line );
+        break;
+    case CONFIG_ITEM_MODULE_LIST_CAT:
+        p_control = new ModuleListConfigControl( p_this, p_item, parent, true,
+                                             l, line );
+        break;
     case CONFIG_ITEM_STRING:
         if( !p_item->i_list )
             p_control = new StringConfigControl( p_this, p_item, parent,
@@ -86,7 +95,10 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
                                                   l, line );
         break;
     case CONFIG_ITEM_FILE:
-        fprintf( stderr, "Todo\n" );
+        fprintf( stderr, "Todo (CONFIG_ITEM_FILE)\n" );
+        break;
+    case CONFIG_ITEM_DIRECTORY:
+        fprintf( stderr, "Todo (CONFIG_ITEM_DIRECTORY)\n" );
         break;
     case CONFIG_ITEM_BOOL:
         p_control = new BoolConfigControl( p_this, p_item, parent, l, line );
@@ -139,7 +151,7 @@ void ConfigControl::doApply( intf_thread_t *p_intf )
 StringConfigControl::StringConfigControl( vlc_object_t *_p_this,
                                           module_config_t *_p_item,
                                           QWidget *_parent, QGridLayout *l,
-                                          int line, bool pwd ) :
+                                          int &line, bool pwd ) :
                            VStringConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -179,7 +191,7 @@ void StringConfigControl::finish()
 /********* String / choice list **********/
 StringListConfigControl::StringListConfigControl( vlc_object_t *_p_this,
                module_config_t *_p_item, QWidget *_parent, bool bycat,
-               QGridLayout *l, int line) :
+               QGridLayout *l, int &line) :
                VStringConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -233,7 +245,7 @@ QString StringListConfigControl::getValue()
 /********* Module **********/
 ModuleConfigControl::ModuleConfigControl( vlc_object_t *_p_this,
                module_config_t *_p_item, QWidget *_parent, bool bycat,
-               QGridLayout *l, int line) :
+               QGridLayout *l, int &line) :
                VStringConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -311,6 +323,135 @@ QString ModuleConfigControl::getValue()
     return combo->itemData( combo->currentIndex() ).toString();
 }
 
+/********* Module list **********/
+ModuleListConfigControl::ModuleListConfigControl( vlc_object_t *_p_this,
+               module_config_t *_p_item, QWidget *_parent, bool bycat,
+               QGridLayout *l, int &line) :
+               VStringConfigControl( _p_this, _p_item, _parent )
+{
+    label = new QLabel( qfu(p_item->psz_text) );
+    text = new QLineEdit();
+    finish( bycat );
+
+    bool pom = false;
+    if( !l )
+    {
+        l = new QGridLayout();
+        line = 0;
+        pom = true;
+    }
+    for( QVector<QCheckBox*>::iterator it = modules.begin();
+         it != modules.end(); it++ )
+    {
+        l->addWidget( *it, line++, 1 );
+    }
+    l->addWidget( label, line, 0 );
+    l->addWidget( text, line, 1 );
+    if( pom )
+        widget->setLayout( l );
+}
+#if 0
+ModuleConfigControl::ModuleConfigControl( vlc_object_t *_p_this,
+                module_config_t *_p_item, QLabel *_label, QComboBox *_combo,
+                bool bycat ) : VStringConfigControl( _p_this, _p_item )
+{
+    combo = _combo;
+    label = _label;
+    finish( bycat );
+}
+#endif
+
+ModuleListConfigControl::~ModuleListConfigControl()
+{
+    for( QVector<QCheckBox*>::iterator it = modules.begin();
+         it != modules.end(); it++ )
+    {
+        delete *it;
+    }
+    delete label;
+    delete text;
+}
+
+void ModuleListConfigControl::finish( bool bycat )
+{
+    vlc_list_t *p_list;
+    module_t *p_parser;
+
+    /* build a list of available modules */
+    p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+    for( int i_index = 0; i_index < p_list->i_count; i_index++ )
+    {
+        p_parser = (module_t *)p_list->p_values[i_index].p_object ;
+
+        if( bycat )
+        {
+            if( !strcmp( p_parser->psz_object_name, "main" ) ) continue;
+
+            module_config_t *p_config = p_parser->p_config;
+            if( p_config ) do
+            {
+                /* Hack: required subcategory is stored in i_min */
+                if( p_config->i_type == CONFIG_SUBCATEGORY &&
+                    p_config->i_value == p_item->i_min )
+                {
+                    QCheckBox *cb =
+                        new QCheckBox( qfu( p_parser->psz_object_name ) );
+                    cb->setToolTip( qfu(p_parser->psz_longname) );
+                    modules.push_back( cb );
+                }
+            } while( p_config->i_type != CONFIG_HINT_END && p_config++ );
+        }
+        else if( !strcmp( p_parser->psz_capability, p_item->psz_type ) )
+        {
+            QCheckBox *cb =
+                new QCheckBox( qfu( p_parser->psz_object_name ) );
+            cb->setToolTip( qfu(p_parser->psz_longname) );
+            modules.push_back( cb );
+        }
+    }
+    vlc_list_release( p_list );
+    text->setToolTip( qfu(p_item->psz_longtext) );
+    if( label )
+        label->setToolTip( qfu(p_item->psz_longtext) );
+}
+
+QString ModuleListConfigControl::getValue()
+{
+    return text->text();
+}
+
+void ModuleListConfigControl::hide()
+{
+    for( QVector<QCheckBox*>::iterator it = modules.begin();
+         it != modules.end(); it++ )
+    {
+        (*it)->hide();
+    }
+    text->hide();
+    label->hide();
+}
+
+void ModuleListConfigControl::show()
+{
+    for( QVector<QCheckBox*>::iterator it = modules.begin();
+         it != modules.end(); it++ )
+    {
+        (*it)->show();
+    }
+    text->show();
+    label->show();
+}
+
+
+void ModuleListConfigControl::wakeUp_TheUserJustClickedOnSomething( int value )
+{
+    text->clear();
+    for( QVector<QCheckBox*>::iterator it = modules.begin();
+         it != modules.end(); it++ )
+    {
+    }
+}
+
 /**************************************************************************
  * Integer-based controls
  *************************************************************************/
@@ -319,7 +460,7 @@ QString ModuleConfigControl::getValue()
 IntegerConfigControl::IntegerConfigControl( vlc_object_t *_p_this,
                                             module_config_t *_p_item,
                                             QWidget *_parent, QGridLayout *l,
-                                            int line ) :
+                                            int &line ) :
                            VIntConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -368,7 +509,7 @@ int IntegerConfigControl::getValue()
 IntegerRangeConfigControl::IntegerRangeConfigControl( vlc_object_t *_p_this,
                                             module_config_t *_p_item,
                                             QWidget *_parent, QGridLayout *l,
-                                            int line ) :
+                                            int &line ) :
             IntegerConfigControl( _p_this, _p_item, _parent, l, line )
 {
     finish();
@@ -391,7 +532,7 @@ void IntegerRangeConfigControl::finish()
 /********* Integer / choice list **********/
 IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *_p_this,
                module_config_t *_p_item, QWidget *_parent, bool bycat,
-               QGridLayout *l, int line) :
+               QGridLayout *l, int &line) :
                VIntConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -443,7 +584,7 @@ int IntegerListConfigControl::getValue()
 BoolConfigControl::BoolConfigControl( vlc_object_t *_p_this,
                                       module_config_t *_p_item,
                                       QWidget *_parent, QGridLayout *l,
-                                      int line ) :
+                                      int &line ) :
                     VIntConfigControl( _p_this, _p_item, _parent )
 {
     checkbox = new QCheckBox( qfu(p_item->psz_text) );
@@ -491,7 +632,7 @@ int BoolConfigControl::getValue()
 FloatConfigControl::FloatConfigControl( vlc_object_t *_p_this,
                                         module_config_t *_p_item,
                                         QWidget *_parent, QGridLayout *l,
-                                        int line ) :
+                                        int &line ) :
                     VFloatConfigControl( _p_this, _p_item, _parent )
 {
     label = new QLabel( qfu(p_item->psz_text) );
@@ -543,7 +684,7 @@ float FloatConfigControl::getValue()
 FloatRangeConfigControl::FloatRangeConfigControl( vlc_object_t *_p_this,
                                         module_config_t *_p_item,
                                         QWidget *_parent, QGridLayout *l,
-                                        int line ) :
+                                        int &line ) :
                 FloatConfigControl( _p_this, _p_item, _parent, l, line )
 {
     finish();
index 12f2d66d59bdc2d8c2069b8e7134648a5d9abc69..52a0b5586e6ab656d0c0fe99960d557136f2c77f 100644 (file)
@@ -31,6 +31,7 @@
 #include <QDoubleSpinBox>
 #include <QComboBox>
 #include <QCheckBox>
+#include <QVector>
 #include "ui/input_stats.h"
 #include "qt4.hpp"
 #include <assert.h>
@@ -61,7 +62,7 @@ public:
                                           module_config_t*,QWidget* );
     static ConfigControl * createControl( vlc_object_t*,
                                           module_config_t*,QWidget*,
-                                          QGridLayout *, int);
+                                          QGridLayout *, int);
     void doApply( intf_thread_t *);
 protected:
     vlc_object_t *p_this;
@@ -92,7 +93,7 @@ class IntegerConfigControl : public VIntConfigControl
 {
 public:
     IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                          QGridLayout *, int );
+                          QGridLayout *, int& );
     IntegerConfigControl( vlc_object_t *, module_config_t *,
                           QLabel*, QSpinBox* );
     virtual ~IntegerConfigControl() {};
@@ -112,7 +113,7 @@ class IntegerRangeConfigControl : public IntegerConfigControl
 {
 public:
     IntegerRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                               QGridLayout *, int );
+                               QGridLayout *, int& );
     IntegerRangeConfigControl( vlc_object_t *, module_config_t *,
                                QLabel*, QSpinBox* );
 private:
@@ -123,7 +124,7 @@ class IntegerListConfigControl : public VIntConfigControl
 {
 public:
     IntegerListConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                              bool, QGridLayout*, int );
+                              bool, QGridLayout*, int& );
     IntegerListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
                               QComboBox*, bool );
     virtual ~IntegerListConfigControl() {};
@@ -140,7 +141,7 @@ class BoolConfigControl : public VIntConfigControl
 {
 public:
     BoolConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                       QGridLayout *, int );
+                       QGridLayout *, int& );
     BoolConfigControl( vlc_object_t *, module_config_t *,
                        QLabel *, QCheckBox*, bool );
     virtual ~BoolConfigControl() {};
@@ -171,7 +172,7 @@ class FloatConfigControl : public VFloatConfigControl
 {
 public:
     FloatConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                        QGridLayout *, int );
+                        QGridLayout *, int& );
     FloatConfigControl( vlc_object_t *, module_config_t *,
                         QLabel*, QDoubleSpinBox* );
     virtual ~FloatConfigControl() {};
@@ -191,7 +192,7 @@ class FloatRangeConfigControl : public FloatConfigControl
 {
 public:
     FloatRangeConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                             QGridLayout *, int );
+                             QGridLayout *, int& );
     FloatRangeConfigControl( vlc_object_t *, module_config_t *,
                              QLabel*, QDoubleSpinBox* );
 private:
@@ -217,7 +218,7 @@ class StringConfigControl : public VStringConfigControl
 {
 public:
     StringConfigControl( vlc_object_t *, module_config_t *, QWidget *,
-                         QGridLayout *, int,  bool pwd );
+                         QGridLayout *, int&,  bool pwd );
     StringConfigControl( vlc_object_t *, module_config_t *, QLabel *,
                          QLineEdit*,  bool pwd );
     virtual ~StringConfigControl() {};
@@ -234,7 +235,7 @@ class ModuleConfigControl : public VStringConfigControl
 {
 public:
     ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool,
-                         QGridLayout*, int );
+                         QGridLayout*, int& );
     ModuleConfigControl( vlc_object_t *, module_config_t *, QLabel *,
                          QComboBox*, bool );
     virtual ~ModuleConfigControl() {};
@@ -247,11 +248,32 @@ private:
     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 );
+                             bool, QGridLayout*, int& );
     StringListConfigControl( vlc_object_t *, module_config_t *, QLabel *,
                              QComboBox*, bool );
     virtual ~StringListConfigControl() {};