X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fsimple_preferences.cpp;h=776e0a58d4e2540e33be1bcc644fa99665fa1b42;hb=924bda6286af1120d86a3b70f98aa06e1c7106ae;hp=0d3874e23109806b0c52f1b67fa2bee7bf7d99e1;hpb=6368b52db44d9e1c5dcc1b937df09b9c4e96fa90;p=vlc diff --git a/modules/gui/qt4/components/simple_preferences.cpp b/modules/gui/qt4/components/simple_preferences.cpp index 0d3874e231..776e0a58d4 100644 --- a/modules/gui/qt4/components/simple_preferences.cpp +++ b/modules/gui/qt4/components/simple_preferences.cpp @@ -1,8 +1,8 @@ /***************************************************************************** * simple_preferences.cpp : "Simple preferences" **************************************************************************** - * Copyright (C) 2006-2007 the VideoLAN team - * $Id: preferences.cpp 16348 2006-08-25 21:10:10Z zorglub $ + * Copyright (C) 2006-2008 the VideoLAN team + * $Id$ * * Authors: Clément Stenac * Antoine Cellerier @@ -22,6 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ + #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -59,7 +60,7 @@ SPrefsCatList::SPrefsCatList( intf_thread_t *_p_intf, QWidget *_parent ) : #define ADD_CATEGORY( button, label, icon, numb ) \ QToolButton * button = new QToolButton( this ); \ - button->setIcon( QIcon( ":/pixmaps/" #icon ) ); \ + button->setIcon( QIcon( ":/pixmaps/prefs/" #icon ) ); \ button->setIconSize( QSize( ICON_HEIGHT , ICON_HEIGHT ) ); \ button->setText( label ); \ button->setToolButtonStyle( Qt::ToolButtonTextUnderIcon ); \ @@ -74,9 +75,9 @@ SPrefsCatList::SPrefsCatList( intf_thread_t *_p_intf, QWidget *_parent ) : spref_cone_Interface_64.png, 0 ); ADD_CATEGORY( SPrefsAudio, qtr("Audio"), spref_cone_Audio_64.png, 1 ); ADD_CATEGORY( SPrefsVideo, qtr("Video"), spref_cone_Video_64.png, 2 ); - ADD_CATEGORY( SPrefsSubtitles, qtr("Subtitles"), + ADD_CATEGORY( SPrefsSubtitles, qtr("Subtitles && OSD"), spref_cone_Subtitles_64.png, 3 ); - ADD_CATEGORY( SPrefsInputAndCodecs, qtr("Input and Codecs"), + ADD_CATEGORY( SPrefsInputAndCodecs, qtr("Input && Codecs"), spref_cone_Input_64.png, 4 ); ADD_CATEGORY( SPrefsHotkeys, qtr("Hotkeys"), spref_cone_Hotkeys_64.png, 5 ); @@ -84,7 +85,7 @@ SPrefsCatList::SPrefsCatList( intf_thread_t *_p_intf, QWidget *_parent ) : layout->setMargin( 0 ); layout->setSpacing( 1 ); - this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); + setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); setLayout( layout ); } @@ -113,6 +114,16 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, controls.append( control ); \ } +#define CONFIG_GENERIC2( 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, qcontrol, false ); \ + controls.append( control ); \ + } + + #define CONFIG_GENERIC_NO_BOOL( option, type, label, qcontrol ) \ p_config = config_FindConfig( VLC_OBJECT(p_intf), option ); \ if( p_config ) \ @@ -127,7 +138,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, if( p_config ) \ { \ control = new type ## ConfigControl( VLC_OBJECT(p_intf), \ - p_config, label, ui.qcontrol, ui.qbutton, \ + p_config, label, qcontrol, qbutton, \ false ); \ controls.append( control ); \ } @@ -167,7 +178,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, /****************************** * VIDEO Panel Implementation * ******************************/ - START_SPREFS_CAT( Video , qtr("General video settings") ); + START_SPREFS_CAT( Video , qtr("General Video Settings") ); CONFIG_GENERIC( "video", Bool, NULL, enableVideo ); CONFIG_GENERIC( "fullscreen", Bool, NULL, fullscreen ); @@ -186,7 +197,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, #endif CONFIG_GENERIC_FILE( "snapshot-path", Directory, NULL, - snapshotsDirectory, snapshotsDirectoryBrowse ); + ui.snapshotsDirectory, ui.snapshotsDirectoryBrowse ); CONFIG_GENERIC( "snapshot-prefix", String, NULL, snapshotsPrefix ); CONFIG_GENERIC( "snapshot-sequential", Bool, NULL, snapshotsSequentialNumbering ); @@ -197,22 +208,70 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, /****************************** * AUDIO Panel Implementation * ******************************/ - START_SPREFS_CAT( Audio, qtr("General audio settings") ); + START_SPREFS_CAT( Audio, qtr("General Audio Settings") ); CONFIG_GENERIC( "audio", Bool, NULL, enableAudio ); +#define audioCommon( name ) \ + QWidget * name ## Control = new QWidget( ui.outputAudioBox ); \ + QHBoxLayout * name ## Layout = new QHBoxLayout( name ## Control); \ + name ## Layout->setMargin( 0 ); \ + name ## Layout->setSpacing( 0 ); \ + QLabel * name ## Label = new QLabel( qtr( "Device:" ), name ## Control ); \ + name ## Label->setMinimumSize(QSize(100, 0)); \ + name ## Layout->addWidget( name ## Label ); \ + +#define audioControl( name) \ + audioCommon( name ) \ + QComboBox * name ## Device = new QComboBox( name ## Control ); \ + name ## Layout->addWidget( name ## Device ); \ + name ## Label->setBuddy( name ## Device ); \ + outputAudioLayout->addWidget( name ## Control, outputAudioLayout->rowCount(), 0, 1, -1 ); + +#define audioControl2( name) \ + audioCommon( name ) \ + QLineEdit * name ## Device = new QLineEdit( name ## Control ); \ + name ## Layout->addWidget( name ## Device ); \ + name ## Label->setBuddy( name ## Device ); \ + QPushButton * name ## Browse = new QPushButton( qtr( "Browse..." ), name ## Control); \ + name ## Layout->addWidget( name ## Browse ); \ + outputAudioLayout->addWidget( name ## Control, outputAudioLayout->rowCount(), 0, 1, -1 ); + /* hide if necessary */ -#ifdef WIN32 - ui.OSSControl->hide(); - ui.alsaControl->hide(); -#else - ui.DirectXControl->hide(); -#endif ui.lastfm_user_edit->hide(); ui.lastfm_user_label->hide(); ui.lastfm_pass_edit->hide(); ui.lastfm_pass_label->hide(); + /* Build if necessary */ + QGridLayout * outputAudioLayout = qobject_cast(ui.outputAudioBox->layout()); +#ifdef WIN32 + audioControl( DirectX ); + optionWidgets.append( DirectXControl ); + CONFIG_GENERIC2( "directx-audio-device", IntegerList, + DirectXLabel, DirectXDevice ); +#else + if( module_Exists( p_intf, "alsa" ) ) + { + audioControl( alsa ); + optionWidgets.append( alsaControl ); + + CONFIG_GENERIC2( "alsadev" , StringList , alsaLabel, + alsaDevice ); + } + else + optionWidgets.append( NULL ); + if( module_Exists( p_intf, "oss" ) ) + { + audioControl2( OSS ); + optionWidgets.append( OSSControl ); + CONFIG_GENERIC_FILE( "dspdev" , File , OSSLabel, OSSDevice, + OSSBrowse ); + } + else + optionWidgets.append( NULL ); +#endif + /* General Audio Options */ CONFIG_GENERIC_NO_BOOL( "volume" , IntegerRangeSlider, NULL, defaultVolume ); @@ -223,6 +282,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, preferredAudioLanguage ); CONFIG_GENERIC( "spdif", Bool, NULL, spdifBox ); + CONFIG_GENERIC( "qt-autosave-volume", Bool, NULL, saveVolBox ); CONFIG_GENERIC( "force-dolby-surround" , IntegerList , NULL, detectionDolby ); @@ -238,28 +298,10 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, CONNECT( ui.outputModule, currentIndexChanged( int ), this, updateAudioOptions( int ) ); -#ifdef WIN32 - CONFIG_GENERIC( "directx-audio-device", IntegerList, - ui.DirectXLabel, DirectXDevice ); -#else - if( module_Exists( p_intf, "alsa" ) ) - { - CONFIG_GENERIC( "alsadev" , StringList , ui.alsaLabel, - alsaDevice ); - } - if( module_Exists( p_intf, "oss" ) ) - { - CONFIG_GENERIC_FILE( "dspdev" , File , ui.OSSLabel, OSSDevice, - OSSBrowse ); - } -#endif - // File exists everywhere + /* File output exists on all platforms */ CONFIG_GENERIC_FILE( "audiofile-file" , File , ui.fileLabel, - fileName, fileBrowseButton ); + ui.fileName, ui.fileBrowseButton ); - optionWidgets.append( ui.alsaControl ); - optionWidgets.append( ui.OSSControl ); - optionWidgets.append( ui.DirectXControl ); optionWidgets.append( ui.fileControl ); optionWidgets.append( ui.outputModule ); optionWidgets.append( ui.volNormBox ); @@ -292,7 +334,9 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, CONNECT( ui.volNormBox, toggled( bool ), ui.volNormSpin, setEnabled( bool ) ); - qs_filter = qfu( config_GetPsz( p_intf, "audio-filter" ) ); + char* psz = config_GetPsz( p_intf, "audio-filter" ); + qs_filter = qfu( psz ); + free( psz ); bool b_normalizer = ( qs_filter.contains( "volnorm" ) ); { ui.volNormBox->setChecked( b_normalizer ); @@ -305,16 +349,15 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, END_SPREFS_CAT; /* Input and Codecs Panel Implementation */ - START_SPREFS_CAT( InputAndCodecs, qtr("Input & Codecs settings") ); + START_SPREFS_CAT( InputAndCodecs, qtr("Input & Codecs Settings") ); /* Disk Devices */ { ui.DVDDevice->setToolTip( - //TODO: make this sentence understandable - qtr( "If this property is blank, then you have\n" - "values for DVD, VCD, and CDDA.\n" - "You can define a unique one or set that in" - "the advanced preferences" ) ); + qtr( "If this property is blank, different values\n" + "for DVD, VCD, and CDDA are set.\n" + "You can define a unique one or configure them \n" + "individually in the advanced preferences." ) ); char *psz_dvddiscpath = config_GetPsz( p_intf, "dvd" ); char *psz_vcddiscpath = config_GetPsz( p_intf, "vcd" ); char *psz_cddadiscpath = config_GetPsz( p_intf, "cd-audio" ); @@ -324,8 +367,9 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, { ui.DVDDevice->setText( qfu( psz_dvddiscpath ) ); } - delete psz_cddadiscpath; delete psz_dvddiscpath; - delete psz_vcddiscpath; + free( psz_cddadiscpath ); + free( psz_dvddiscpath ); + free( psz_vcddiscpath ); } CONFIG_GENERIC_NO_BOOL( "server-port", Integer, NULL, UDPPort ); @@ -339,7 +383,9 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, ui.systemCodecBox->hide(); #endif /* Access Filters */ - qs_filter = qfu( config_GetPsz( p_intf, "access-filter" ) ); + char* psz = config_GetPsz( p_intf, "access-filter" ); + qs_filter = qfu( psz ); + free( psz ); ui.timeshiftBox->setChecked( qs_filter.contains( "timeshift" ) ); ui.dumpBox->setChecked( qs_filter.contains( "dump" ) ); ui.recordBox->setChecked( qs_filter.contains( "record" ) ); @@ -406,11 +452,11 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, /******************* * Interface Panel * *******************/ - START_SPREFS_CAT( Interface, qtr("Interface settings") ); + START_SPREFS_CAT( Interface, qtr("Interface Settings") ); ui.defaultLabel->setFont( italicFont ); ui.skinsLabel->setFont( italicFont ); -#if defined( WIN32 ) || defined (__APPLE__) +#if defined( WIN32 ) CONFIG_GENERIC( "language", StringList, NULL, language ); BUTTONACT( ui.assoButton, assoDialog() ); #else @@ -424,22 +470,27 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, char *psz_intf = config_GetPsz( p_intf, "intf" ); if( psz_intf ) { - msg_Dbg( p_intf, "Interface in config file: %s", psz_intf ); if( strstr( psz_intf, "skin" ) ) ui.skins->setChecked( true ); else if( strstr( psz_intf, "qt" ) ) ui.qt4->setChecked( true ); } - delete psz_intf; + free( psz_intf ); optionWidgets.append( ui.skins ); optionWidgets.append( ui.qt4 ); + CONFIG_GENERIC( "qt-display-mode", IntegerList, NULL, + displayModeBox ); + CONFIG_GENERIC( "embedded-video", Bool, NULL, embedVideo ); + CONFIG_GENERIC( "qt-fs-controller", Bool, NULL, fsController ); + CONFIG_GENERIC_FILE( "skins2-last", File, NULL, ui.fileSkin, + ui.skinBrowse ); + CONFIG_GENERIC( "album-art", IntegerList, ui.artFetchLabel, artFetcher ); - CONFIG_GENERIC( "fetch-meta", Bool, NULL, metaFetcher ); - CONFIG_GENERIC( "security-policy", IntegerList, - ui.netPolicyLabel, netPolicyBox ); + + /* UPDATE options */ #ifdef UPDATE_CHECK CONFIG_GENERIC( "qt-updates-notif", Bool, NULL, updatesBox ); CONFIG_GENERIC_NO_BOOL( "qt-updates-days", Integer, NULL, @@ -450,11 +501,8 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, ui.updatesBox->hide(); ui.updatesDays->hide(); #endif - CONFIG_GENERIC( "qt-always-video", Bool, NULL, qtAlwaysVideo ); - CONFIG_GENERIC( "embedded-video", Bool, NULL, embedVideo ); - CONFIG_GENERIC_FILE( "skins2-last", File, NULL, fileSkin, - skinBrowse ); -#if defined( WIN32 ) || defined( HAVE_DBUS_3 ) || defined(__APPLE__) + /* ONE INSTANCE options */ +#if defined( WIN32 ) || defined( HAVE_DBUS ) || defined(__APPLE__) CONFIG_GENERIC( "one-instance", Bool, NULL, OneInterfaceMode ); CONFIG_GENERIC( "playlist-enqueue", Bool, NULL, EnqueueOneInterfaceMode ); @@ -463,13 +511,13 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, #endif END_SPREFS_CAT; - START_SPREFS_CAT( Subtitles, qtr("Subtitles & OSD settings") ); + START_SPREFS_CAT( Subtitles, qtr("Subtitles & On Screen Display Settings") ); CONFIG_GENERIC( "osd", Bool, NULL, OSDBox); CONFIG_GENERIC( "subsdec-encoding", StringList, NULL, encoding ); CONFIG_GENERIC( "sub-language", String, NULL, preferredLanguage ); - CONFIG_GENERIC_FILE( "freetype-font", File, NULL, font, - fontBrowse ); + CONFIG_GENERIC_FILE( "freetype-font", File, NULL, ui.font, + ui.fontBrowse ); CONFIG_GENERIC( "freetype-color", IntegerList, NULL, fontColor ); CONFIG_GENERIC( "freetype-rel-fontsize", IntegerList, NULL, fontSize ); @@ -507,12 +555,15 @@ void SPrefsPanel::updateAudioOptions( int number) { QString value = qobject_cast(optionWidgets[audioOutCoB]) ->itemData( number ).toString(); - #ifdef WIN32 optionWidgets[directxW]->setVisible( ( value == "directx" ) ); #else - optionWidgets[ossW]->setVisible( ( value == "oss" ) ); - optionWidgets[alsaW]->setVisible( ( value == "alsa" ) ); + /* optionWidgets[ossW] can be NULL */ + if( optionWidgets[ossW] ) + optionWidgets[ossW]->setVisible( ( value == "oss" ) ); + /* optionWidgets[alsaW] can be NULL */ + if( optionWidgets[alsaW] ) + optionWidgets[alsaW]->setVisible( ( value == "alsa" ) ); #endif optionWidgets[fileW]->setVisible( ( value == "aout_file" ) ); } @@ -527,8 +578,6 @@ void SPrefsPanel::updateAudioVolume( int volume ) /* Function called from the main Preferences dialog on each SPrefs Panel */ void SPrefsPanel::apply() { - msg_Dbg( p_intf, "Trying to save the %i simple panel", number ); - /* Generic save for ever panel */ QList::Iterator i; for( i = controls.begin() ; i != controls.end() ; i++ ) @@ -576,7 +625,6 @@ void SPrefsPanel::apply() int i_comboValue = cachingCombo->itemData( cachingCombo->currentIndex() ).toInt(); if( i_comboValue ) { - msg_Dbg( p_intf, "Adjusting all cache values at: %i", i_comboValue ); CaC( "udp-caching" ); if (module_Exists (p_intf, "dvdread" )) CaC( "dvdread-caching" );