X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fsimple_preferences.cpp;h=776e0a58d4e2540e33be1bcc644fa99665fa1b42;hb=924bda6286af1120d86a3b70f98aa06e1c7106ae;hp=03fe699217d2af9ad0afab4de38f1ada1f705116;hpb=2a4b54dd11ebdb088bd79ca5c5436527085c7803;p=vlc diff --git a/modules/gui/qt4/components/simple_preferences.cpp b/modules/gui/qt4/components/simple_preferences.cpp index 03fe699217..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 @@ -39,6 +40,8 @@ #include #include +#include + #define ICON_HEIGHT 64 #define BUTTON_HEIGHT 74 @@ -57,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 ); \ @@ -72,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 ); @@ -82,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 ); } @@ -111,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 ) \ @@ -125,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 ); \ } @@ -165,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 ); @@ -184,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 ); @@ -195,29 +208,81 @@ 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 ); + CONNECT( ui.defaultVolume, valueChanged( int ), + this, updateAudioVolume( int ) ); + CONFIG_GENERIC( "audio-language" , String , NULL, preferredAudioLanguage ); CONFIG_GENERIC( "spdif", Bool, NULL, spdifBox ); + CONFIG_GENERIC( "qt-autosave-volume", Bool, NULL, saveVolBox ); CONFIG_GENERIC( "force-dolby-surround" , IntegerList , NULL, detectionDolby ); @@ -233,31 +298,18 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, CONNECT( ui.outputModule, currentIndexChanged( int ), this, updateAudioOptions( int ) ); -#ifndef WIN32 - 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 ); - } -#else - CONFIG_GENERIC( "directx-audio-device", IntegerList, - ui.DirectXLabel, DirectXDevice ); -#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 ); + /*Little mofification of ui.volumeValue to compile with Qt < 4.3 */ +#if HAS_QT43 + ui.volumeValue->setButtonSymbols(QAbstractSpinBox::NoButtons); +#endif + optionWidgets.append( ui.volumeValue ); updateAudioOptions( ui.outputModule->currentIndex() ); /* LastFM */ @@ -282,26 +334,30 @@ 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 ); ui.volNormSpin->setEnabled( b_normalizer ); } + /* Volume Label */ + updateAudioVolume( ui.defaultVolume->value() ); // First time init + 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" ); @@ -311,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 ); @@ -326,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" ) ); @@ -393,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 @@ -411,27 +470,39 @@ 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( "album-art", IntegerList, ui.artFetchLabel, artFetcher ); - CONFIG_GENERIC( "fetch-meta", Bool, NULL, metaFetcher ); + 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 ); + + /* UPDATE options */ #ifdef UPDATE_CHECK - CONFIG_GENERIC( "qt-updates-notif", Bool, NULL, qtUpdates ); + CONFIG_GENERIC( "qt-updates-notif", Bool, NULL, updatesBox ); + CONFIG_GENERIC_NO_BOOL( "qt-updates-days", Integer, NULL, + updatesDays ); + CONNECT( ui.updatesBox, toggled( bool ), + ui.updatesDays, setEnabled( bool ) ); +#else + ui.updatesBox->hide(); + ui.updatesDays->hide(); #endif - CONFIG_GENERIC( "qt-always-video", Bool, NULL, qtAlwaysVideo ); - CONFIG_GENERIC( "embeded-video", Bool, NULL, embedVideo ); - CONFIG_GENERIC_FILE( "skins2-last", File, NULL, fileSkin, - skinBrowse ); -#if defined( WIN32 ) || defined( HAVE_DBUS_3 ) + /* 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 ); @@ -440,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 ); @@ -484,21 +555,29 @@ void SPrefsPanel::updateAudioOptions( int number) { QString value = qobject_cast(optionWidgets[audioOutCoB]) ->itemData( number ).toString(); - -#ifndef WIN32 - optionWidgets[ossW]->setVisible( ( value == "oss" ) ); - optionWidgets[alsaW]->setVisible( ( value == "alsa" ) ); -#else +#ifdef WIN32 optionWidgets[directxW]->setVisible( ( value == "directx" ) ); +#else + /* 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" ) ); } +void SPrefsPanel::updateAudioVolume( int volume ) +{ + qobject_cast(optionWidgets[volLW]) + ->setValue( volume * 100 / 256 ); +} + + /* 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++ ) @@ -546,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" ); @@ -690,7 +768,7 @@ void SPrefsPanel::assoDialog() aTa( ".m4a" ); aTa( ".m4p" ); aTa( ".mka" ); aTa( ".mod" ); aTa( ".mp1" ); aTa( ".mp2" ); aTa( ".mp3" ); aTa( ".ogg" ); aTa( ".spx" ); aTa( ".wav" ); aTa( ".wma" ); aTa( ".xm" ); - audioType->setCheckState( 0, ( i_temp > 0 ) ? + audioType->setCheckState( 0, ( i_temp > 0 ) ? ( ( i_temp == audioType->childCount() ) ? Qt::Checked : Qt::PartiallyChecked ) : Qt::Unchecked ); @@ -702,7 +780,7 @@ void SPrefsPanel::assoDialog() aTv( ".mpeg1" ); aTv( ".mpeg2" ); aTv( ".mpeg4" ); aTv( ".mpg" ); aTv( ".mxf" ); aTv( ".ogm" ); aTv( ".ps" ); aTv( ".ts" ); aTv( ".vob" ); aTv( ".wmv" ); - videoType->setCheckState( 0, ( i_temp > 0 ) ? + videoType->setCheckState( 0, ( i_temp > 0 ) ? ( ( i_temp == audioType->childCount() ) ? Qt::Checked : Qt::PartiallyChecked ) : Qt::Unchecked ); @@ -710,7 +788,7 @@ void SPrefsPanel::assoDialog() i_temp = 0; aTo( ".asx" ); aTo( ".b4s" ); aTo( ".m3u" ); aTo( ".pls" ); aTo( ".vlc" ); aTo( ".xspf" ); - otherType->setCheckState( 0, ( i_temp > 0 ) ? + otherType->setCheckState( 0, ( i_temp > 0 ) ? ( ( i_temp == audioType->childCount() ) ? Qt::Checked : Qt::PartiallyChecked ) : Qt::Unchecked ); @@ -739,14 +817,14 @@ void addAsso( QVLCRegistry *qvReg, char *psz_ext ) /* Save a backup if already assigned */ char *psz_value = qvReg->ReadRegistryString( psz_ext, "", "" ); - + if( psz_value && strlen( psz_value ) > 0 ) qvReg->WriteRegistryString( psz_ext, "VLC.backup", psz_value ); delete psz_value; - + /* Put a "link" to VLC.EXT as default */ qvReg->WriteRegistryString( psz_ext, "", s_path.c_str() ); - + /* Create the needed Key if they weren't done in the installer */ if( !qvReg->RegistryKeyExists( s_path.c_str() ) ) { @@ -756,15 +834,15 @@ void addAsso( QVLCRegistry *qvReg, char *psz_ext ) /* Get the installer path */ QVLCRegistry *qvReg2 = new QVLCRegistry( HKEY_LOCAL_MACHINE ); - std::string str_temp; str_temp.assign( + std::string str_temp; str_temp.assign( qvReg2->ReadRegistryString( "Software\\VideoLAN\\VLC", "", "" ) ); - + if( str_temp.size() ) { qvReg->WriteRegistryString( s_path.append( "\\Play\\command" ).c_str(), "", str_temp.append(" --started-from-file \"%1\"" ).c_str() ); - qvReg->WriteRegistryString( s_path2.append( "\\DefaultIcon" ).c_str(), + qvReg->WriteRegistryString( s_path2.append( "\\DefaultIcon" ).c_str(), "", str_temp.append(",0").c_str() ); } delete qvReg2;