From 723b9879d0fee61c9b80fca1b287de6e76fe68af Mon Sep 17 00:00:00 2001 From: Antoine Cellerier Date: Sun, 27 Aug 2006 20:35:11 +0000 Subject: [PATCH] Some more prefs fun: * preferences_widgets.cpp: implement string and int with choice list * other: simple prefs subtitles dialog --- .../qt4/components/preferences_widgets.cpp | 121 +++++++++++++++++- .../qt4/components/preferences_widgets.hpp | 35 +++++ .../gui/qt4/components/simple_preferences.cpp | 86 ++++++------- modules/gui/qt4/ui/sprefs_subtitles.ui | 19 +-- 4 files changed, 196 insertions(+), 65 deletions(-) diff --git a/modules/gui/qt4/components/preferences_widgets.cpp b/modules/gui/qt4/components/preferences_widgets.cpp index 0c6d0ecea2..2417856432 100644 --- a/modules/gui/qt4/components/preferences_widgets.cpp +++ b/modules/gui/qt4/components/preferences_widgets.cpp @@ -5,6 +5,7 @@ * $Id$ * * Authors: Clément Stenac + * Antoine Cellerier * * 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 @@ -70,11 +71,13 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this, p_control = new StringConfigControl( p_this, p_item, parent, l, line, false ); else - fprintf(stderr, "TODO\n" ); + p_control = new StringListConfigControl( p_this, p_item, + parent, false, l, line ); break; case CONFIG_ITEM_INTEGER: if( p_item->i_list ) - fprintf( stderr, "Todo\n" ); + p_control = new IntegerListConfigControl( p_this, p_item, + parent, false, l, line ); else if( p_item->i_min || p_item->i_max ) fprintf( stderr, "Todo\n" ); else @@ -128,7 +131,62 @@ void StringConfigControl::finish() { text->setText( qfu(p_item->psz_value) ); text->setToolTip( qfu(p_item->psz_longtext) ); - label->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, + QGridLayout *l, int line) : + VStringConfigControl( _p_this, _p_item, _parent ) +{ + label = new QLabel( qfu(p_item->psz_text) ); + combo = new QComboBox(); + finish( bycat ); + if( !l ) + { + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget( label ); layout->addWidget( combo ); + widget->setLayout( layout ); + } + else + { + l->addWidget( label, line, 0 ); + l->addWidget( combo, line, 1, Qt::AlignRight ); + } +} +StringListConfigControl::StringListConfigControl( 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 ); +} + +void StringListConfigControl::finish( bool bycat ) +{ + combo->setEditable( false ); + + for( int i_index = 0; i_index < p_item->i_list; i_index++ ) + { + combo->addItem( qfu(p_item->ppsz_list_text ? + p_item->ppsz_list_text[i_index] : + p_item->ppsz_list[i_index] ), + QVariant( p_item->ppsz_list[i_index] ) ); + if( p_item->psz_value && !strcmp( p_item->psz_value, + p_item->ppsz_list[i_index] ) ) + combo->setCurrentIndex( combo->count() - 1 ); + } + combo->setToolTip( qfu(p_item->psz_longtext) ); + if( label ) + label->setToolTip( qfu(p_item->psz_longtext) ); +} + +QString StringListConfigControl::getValue() +{ + return combo->itemData( combo->currentIndex() ).toString(); } /********* Module **********/ @@ -203,7 +261,8 @@ void ModuleConfigControl::finish( bool bycat ) } vlc_list_release( p_list ); combo->setToolTip( qfu(p_item->psz_longtext) ); - label->setToolTip( qfu(p_item->psz_longtext) ); + if( label ) + label->setToolTip( qfu(p_item->psz_longtext) ); } QString ModuleConfigControl::getValue() @@ -254,10 +313,62 @@ void IntegerConfigControl::finish() spin->setMaximum( 2000000000 ); spin->setValue( p_item->i_value ); spin->setToolTip( qfu(p_item->psz_longtext) ); - label->setToolTip( qfu(p_item->psz_longtext) ); + if( label ) + label->setToolTip( qfu(p_item->psz_longtext) ); } int IntegerConfigControl::getValue() { return spin->value(); } + +/********* Integer / choice list **********/ +IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *_p_this, + module_config_t *_p_item, QWidget *_parent, bool bycat, + QGridLayout *l, int line) : + VIntConfigControl( _p_this, _p_item, _parent ) +{ + label = new QLabel( qfu(p_item->psz_text) ); + combo = new QComboBox(); + finish( bycat ); + if( !l ) + { + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget( label ); layout->addWidget( combo ); + widget->setLayout( layout ); + } + else + { + l->addWidget( label, line, 0 ); + l->addWidget( combo, line, 1, Qt::AlignRight ); + } +} +IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *_p_this, + module_config_t *_p_item, QLabel *_label, QComboBox *_combo, + bool bycat ) : VIntConfigControl( _p_this, _p_item ) +{ + combo = _combo; + label = _label; + finish( bycat ); +} + +void IntegerListConfigControl::finish( bool bycat ) +{ + combo->setEditable( false ); + + for( int i_index = 0; i_index < p_item->i_list; i_index++ ) + { + combo->addItem( qfu(p_item->ppsz_list_text[i_index] ), + QVariant( p_item->pi_list[i_index] ) ); + if( p_item->i_value == p_item->pi_list[i_index] ) + combo->setCurrentIndex( combo->count() - 1 ); + } + combo->setToolTip( qfu(p_item->psz_longtext) ); + if( label ) + label->setToolTip( qfu(p_item->psz_longtext) ); +} + +int IntegerListConfigControl::getValue() +{ + return combo->itemData( combo->currentIndex() ).toInt(); +} diff --git a/modules/gui/qt4/components/preferences_widgets.hpp b/modules/gui/qt4/components/preferences_widgets.hpp index 92d29ac957..5e0c59fb90 100644 --- a/modules/gui/qt4/components/preferences_widgets.hpp +++ b/modules/gui/qt4/components/preferences_widgets.hpp @@ -5,6 +5,7 @@ * $Id$ * * Authors: Clément Stenac + * Antoine Cellerier * * 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 @@ -104,6 +105,23 @@ 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; +}; + #if 0 class BoolConfigControl : public VIntConfigControl { @@ -190,6 +208,23 @@ private: QLabel *label; QComboBox *combo; }; + +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 struct ModuleCheckBox { QCheckBox *checkbox; diff --git a/modules/gui/qt4/components/simple_preferences.cpp b/modules/gui/qt4/components/simple_preferences.cpp index 98da2b18bc..a857e53a63 100644 --- a/modules/gui/qt4/components/simple_preferences.cpp +++ b/modules/gui/qt4/components/simple_preferences.cpp @@ -107,58 +107,56 @@ void SPrefsCatList::DoAll( bool doclean ) SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, int number ) : QWidget( _parent ), p_intf( _p_intf ) { - switch( number ) - { - case SPrefsVideo: - { - Ui::SPrefsVideo ui; - ui.setupUi( this ); - break; - } + module_config_t *p_config; + ConfigControl *control; + +#define CONFIG_GENERIC( option, type, label, qcontrol ) \ + p_config = config_FindConfig( VLC_OBJECT(p_intf), option ); \ + if( p_config ) \ + { \ + control = new type ## ConfigControl( VLC_OBJECT(p_intf), \ + p_config, label, ui.qcontrol, false ); \ + controls.append( control ); \ + } - case SPrefsAudio: - { - Ui::SPrefsAudio ui; +#define START_SPREFS_CAT( name ) \ + case SPrefs ## name: \ + { \ + Ui::SPrefs ## name ui; \ ui.setupUi( this ); - break; - } - case SPrefsInputAndCodecs: - { - break; +#define END_SPREFS_CAT \ + break; \ } - case SPrefsPlaylist: - { - Ui::SPrefsPlaylist ui; - ui.setupUi( this ); - break; - } - case SPrefsInterface: - { - break; - } + switch( number ) + { + START_SPREFS_CAT( Video ); + END_SPREFS_CAT; - case SPrefsSubtitles: - { - Ui::SPrefsSubtitles ui; - ui.setupUi( this ); - break; - } + START_SPREFS_CAT( Audio ); + END_SPREFS_CAT; - case SPrefsAdvanced: - { - Ui::SPrefsTrivial ui; - ui.setupUi( this ); - module_config_t *p_config = - config_FindConfig( VLC_OBJECT(p_intf), "memcpy" ); - ConfigControl *control = - new ModuleConfigControl( VLC_OBJECT(p_intf), - p_config, ui.memcpyLabel, ui.memcpyCombo, false ); - controls.append( control ); - break; - } + case SPrefsInputAndCodecs: break; + + START_SPREFS_CAT( Playlist ); + END_SPREFS_CAT; + + case SPrefsInterface: break; + + START_SPREFS_CAT( Subtitles ); + + CONFIG_GENERIC( "subsdec-encoding", StringList, NULL, encoding ); + CONFIG_GENERIC( "sub-language", String, NULL, preferedLanguage ); + CONFIG_GENERIC( "freetype-font", String, NULL, font ); + CONFIG_GENERIC( "freetype-color", IntegerList, NULL, fontColor ); + CONFIG_GENERIC( "freetype-rel-fontsize", IntegerList, NULL, + fontSize ); + + END_SPREFS_CAT; + + case SPrefsAdvanced: break; } } diff --git a/modules/gui/qt4/ui/sprefs_subtitles.ui b/modules/gui/qt4/ui/sprefs_subtitles.ui index 625ad484a1..f511c01d4d 100644 --- a/modules/gui/qt4/ui/sprefs_subtitles.ui +++ b/modules/gui/qt4/ui/sprefs_subtitles.ui @@ -22,6 +22,9 @@ 6 + + + @@ -88,25 +91,9 @@ - - - - - - - Qt::Vertical - - - - 501 - 40 - - - - -- 2.39.2