]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/preferences_widgets.cpp
Qt4 - initial actions support for StringListConfigs in preferences... To be tested...
[vlc] / modules / gui / qt4 / components / preferences_widgets.cpp
index 46682f44c0c933adfed68ec03f511995d69727a8..d6286639ed01172b455d2d1c650fac0f312fc93f 100644 (file)
@@ -44,7 +44,7 @@
 #include <QFontDialog>
 #include <QGroupBox>
 #include <QTreeWidgetItem>
-
+#include <QSignalMapper>
 QString formatTooltip(const QString & tooltip)
 {
     QString formatted =
@@ -364,6 +364,42 @@ StringListConfigControl::StringListConfigControl( vlc_object_t *_p_this,
         l->addWidget( label, line, 0 );
         l->addWidget( combo, line, 1, Qt::AlignRight );
     }
+
+    if( p_item->i_action )
+    {
+        QSignalMapper *signalMapper = new QSignalMapper(this);
+
+        /* Some stringLists like Capture listings have action associated */
+        for( int i = 0; i < p_item->i_action; i++ )
+        {
+            QPushButton *button =
+                new QPushButton( qfu( p_item->ppsz_action_text[i] ));
+            CONNECT( button, clicked(), signalMapper, map() );
+            signalMapper->setMapping( button, i );
+            l->addWidget( button, line, 2 + i, Qt::AlignRight );
+        }
+        CONNECT( signalMapper, mapped( int ),
+                this, actionRequested( int ) );
+    }
+}
+
+void StringListConfigControl::actionRequested( int i_action )
+{
+    /* Supplementary check for boundaries */
+    if( i_action < 0 || i_action >= p_item->i_action ) return;
+
+    vlc_value_t val;
+    val.psz_string = qtu( (combo->itemData( combo->currentIndex() ).toString() ) );
+
+    p_item->ppf_action[i_action]( p_this, getName(), val, val, 0 );
+
+    if( p_item->b_dirty )
+    {
+        combo->clear();
+        finish( true );
+        p_item->b_dirty = VLC_FALSE;
+
+    }
 }
 StringListConfigControl::StringListConfigControl( vlc_object_t *_p_this,
                 module_config_t *_p_item, QLabel *_label, QComboBox *_combo,