Qt4 - Preferences and SPrefs. Add the necessary handler for CONFIG_FILE_ITEMs.
authorJean-Baptiste Kempf <jb@videolan.org>
Tue, 6 Mar 2007 23:39:21 +0000 (23:39 +0000)
committerJean-Baptiste Kempf <jb@videolan.org>
Tue, 6 Mar 2007 23:39:21 +0000 (23:39 +0000)
modules/gui/qt4/components/preferences_widgets.cpp
modules/gui/qt4/components/preferences_widgets.hpp
modules/gui/qt4/components/simple_preferences.cpp

index 0472547..3432696 100644 (file)
@@ -44,6 +44,7 @@
 #include <QGridLayout>
 #include <QPushButton>
 #include <QSlider>
+#include <QFileDialog>
 
 #include <vlc_keys.h>
 
@@ -101,7 +102,8 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
                                                   l, line );
         break;
     case CONFIG_ITEM_FILE:
-        fprintf( stderr, "Todo (CONFIG_ITEM_FILE)\n" );
+        p_control = new FileConfigControl( p_this, p_item, parent, l,
+                                                line, false );
         break;
     case CONFIG_ITEM_DIRECTORY:
         fprintf( stderr, "Todo (CONFIG_ITEM_DIRECTORY)\n" );
@@ -207,6 +209,60 @@ void StringConfigControl::finish()
         label->setToolTip( qfu(p_item->psz_longtext) );
 }
 
+/*********** File **************/
+FileConfigControl::FileConfigControl( vlc_object_t *_p_this,
+                                          module_config_t *_p_item,
+                                          QWidget *_parent, QGridLayout *l,
+                                          int &line, bool pwd ) :
+                           VStringConfigControl( _p_this, _p_item, _parent )
+{
+    label = new QLabel( qfu(p_item->psz_text) );
+    text = new QLineEdit( qfu(p_item->value.psz) );
+    browse = new QPushButton( qtr( "Browse" ) );
+
+    BUTTONACT( browse, updateField() );
+
+    finish();
+
+    if( !l )
+    {
+        QHBoxLayout *layout = new QHBoxLayout();
+        layout->addWidget( label, 0 ); layout->addWidget( text, 1 );
+        layout->addWidget( browse, 2 );
+        widget->setLayout( layout );
+    }
+    else
+    {
+        l->addWidget( label, line, 0 ); l->addWidget( text, line, 1 );
+        l->addWidget( browse, line, 2 );
+    }
+}
+
+
+FileConfigControl::FileConfigControl( vlc_object_t *_p_this,
+                                   module_config_t *_p_item,
+                                   QLabel *_label, QLineEdit *_text, bool pwd ):
+                           VStringConfigControl( _p_this, _p_item )
+{
+    text = _text;
+    label = _label;
+    finish( );
+}
+
+void FileConfigControl::updateField()
+{
+        text->setText( QFileDialog::getOpenFileName( NULL, 
+                qtr( "Select File" ), qfu( p_this->p_libvlc->psz_homedir ) ) );
+}
+
+void FileConfigControl::finish()
+{
+    text->setText( qfu(p_item->value.psz) );
+    text->setToolTip( qfu(p_item->psz_longtext) );
+    if( label )
+        label->setToolTip( qfu(p_item->psz_longtext) );
+}
+
 /********* String / choice list **********/
 StringListConfigControl::StringListConfigControl( vlc_object_t *_p_this,
                module_config_t *_p_item, QWidget *_parent, bool bycat,
index eb2a75c..3017bad 100644 (file)
@@ -35,6 +35,7 @@
 #include <QVector>
 #include <QDialog>
 #include <QLabel>
+#include <QFile>
 
 #include "qt4.hpp"
 #include <assert.h>
@@ -251,6 +252,28 @@ private:
     QLabel *label;
 };
 
+class FileConfigControl : public VStringConfigControl
+{
+    Q_OBJECT;
+public:
+    FileConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                         QGridLayout *, int&, bool pwd );
+    FileConfigControl( vlc_object_t *, module_config_t *, QLabel *,
+                        QLineEdit*, bool pwd );
+    virtual ~FileConfigControl() {};
+    virtual QString getValue() { return text->text(); };
+    virtual void show() { text->show(); label->show(); }
+    virtual void hide() { text->hide(); label->hide(); }
+public slots: 
+    void updateField();
+private:
+    void finish();
+    QLineEdit *text;
+    QLabel *label;
+    QPushButton *browse;
+};
+
+
 class ModuleConfigControl : public VStringConfigControl
 {
 public:
index 11c9dd2..01a918c 100644 (file)
@@ -157,7 +157,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
                     dXdisplayDevice );
 #endif
 
-            CONFIG_GENERIC( "snapshot-path", String, NULL,
+            CONFIG_GENERIC( "snapshot-path", File, NULL,
                     snapshotsDirectory ); /* FIXME -> use file instead of string */
             CONFIG_GENERIC( "snapshot-prefix", String, NULL, snapshotsPrefix );
             CONFIG_GENERIC( "snapshot-sequential", Bool, NULL,
@@ -191,13 +191,13 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
          CONFIG_GENERIC( "aout" , Module , NULL, outputModule );
 #ifndef WIN32
          CONFIG_GENERIC( "alsadev" , StringList , NULL, alsaDevice );
-         CONFIG_GENERIC( "dspdev" , String , NULL, OSSDevice );
+         CONFIG_GENERIC( "dspdev" , File , NULL, OSSDevice );
                 //FIXME File
 #else
          CONFIG_GENERIC( "directx-audio-device" , IntegerList, NULL, 
                  DirectXDevice );
 #endif
-         CONFIG_GENERIC( "audiofile-file" , String , NULL, FileName ); 
+         CONFIG_GENERIC( "audiofile-file" , File , NULL, FileName ); 
                 //Fixme File
 
          CONFIG_GENERIC( "headphone-dolby" , Bool , NULL, headphoneEffect );
@@ -242,7 +242,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
                     ui.skins->setChecked( true );*/
 /*            CONFIG_GENERIC( "intf", Module, NULL, ??? ); */ //FIXME interface choice
             CONFIG_GENERIC( "qt-always-video", Bool, NULL, qtAlwaysVideo );
-            CONFIG_GENERIC( "skins2-last", String, NULL, fileSkin); 
+            CONFIG_GENERIC( "skins2-last", File, NULL, fileSkin); 
                     //FIXME File
 #if defined( WIN32 ) || defined(HAVE_DBUS_3)
             CONFIG_GENERIC( "one-instance", Bool, NULL, OneInterfaceMode );
@@ -257,7 +257,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
             CONFIG_GENERIC( "subsdec-encoding", StringList, NULL, encoding );
             CONFIG_GENERIC( "sub-language", String, NULL, preferredLanguage );
 
-            CONFIG_GENERIC( "freetype-font", String, NULL, font ); 
+            CONFIG_GENERIC( "freetype-font", File, NULL, font ); 
                     /* FIXME -> use file instead of string */
             CONFIG_GENERIC( "freetype-color", IntegerList, NULL, fontColor );
             CONFIG_GENERIC( "freetype-rel-fontsize", IntegerList, NULL,