X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fextended_panels.cpp;h=018a697f0bdd94018434d10c4cb127c06a1471c8;hb=19933fe7a674ee6d1253821a656507a6a712f8d0;hp=7967314aa41110a8b3eb918dccf7c3bf4f07594e;hpb=d15ef2e0b343282c17df257768d899c5840421e2;p=vlc diff --git a/modules/gui/qt4/components/extended_panels.cpp b/modules/gui/qt4/components/extended_panels.cpp index 7967314aa4..018a697f0b 100644 --- a/modules/gui/qt4/components/extended_panels.cpp +++ b/modules/gui/qt4/components/extended_panels.cpp @@ -279,7 +279,10 @@ void ExtVideo::ChangeVFiltersString( char *psz_name, bool b_add ) psz_parser = psz_string; if( asprintf( &psz_string, ( *psz_string ) ? "%s:%s" : "%s%s", psz_string, psz_name ) == -1 ) + { + free( psz_parser ); return; + } free( psz_parser ); } else @@ -805,22 +808,15 @@ Equalizer::Equalizer( intf_thread_t *_p_intf, QWidget *_parent ) : smallFont.setPointSize( smallFont.pointSize() - 3 ); ui.setupUi( this ); - presetsComboBox = ui.presetsCombo; - ui.preampLabel->setFont( smallFont ); - for( int i = 0 ; i < NB_PRESETS ; i ++ ) - { - ui.presetsCombo->addItem( qtr( preset_list_text[i] ), - QVariant( i ) ); - } - CONNECT( ui.presetsCombo, activated( int ), this, setPreset( int ) ); - - BUTTONACT( ui.enableCheck, enable() ); - BUTTONACT( ui.eq2PassCheck, set2Pass() ); - - CONNECT( ui.preampSlider, valueChanged( int ), this, setPreamp() ); + /* Setup of presetsComboBox */ + presetsComboBox = ui.presetsCombo; + CONNECT( presetsComboBox, currentIndexChanged( int ), + this, updateUISliderValues( int ) ); + CONNECT( presetsComboBox, activated( int ), this, setCorePreset( int ) ); + /* Add the sliders for the Bands */ QGridLayout *grid = new QGridLayout( ui.frame ); grid->setMargin( 0 ); for( int i = 0 ; i < BANDS ; i++ ) @@ -828,26 +824,53 @@ Equalizer::Equalizer( intf_thread_t *_p_intf, QWidget *_parent ) : bands[i] = new QSlider( Qt::Vertical ); bands[i]->setMaximum( 400 ); bands[i]->setValue( 200 ); - CONNECT( bands[i], valueChanged( int ), this, setBand() ); + CONNECT( bands[i], valueChanged( int ), this, setCoreBands() ); + band_texts[i] = new QLabel( band_frequencies[i] + "\n0.0dB" ); band_texts[i]->setFont( smallFont ); + grid->addWidget( bands[i], 0, i ); grid->addWidget( band_texts[i], 1, i ); } - /* Write down initial values */ + /* Add the listed presets */ + for( int i = 0 ; i < NB_PRESETS ; i ++ ) + { + presetsComboBox->addItem( qtr( preset_list_text[i] ), + QVariant( preset_list[i] ) ); + } + + /* Connects */ + BUTTONACT( ui.enableCheck, enable() ); + BUTTONACT( ui.eq2PassCheck, set2Pass() ); + CONNECT( ui.preampSlider, valueChanged( int ), this, setPreamp() ); + + /* Do the update from the value of the core */ + updateUIFromCore(); +} + +Equalizer::~Equalizer() +{ +} + +/* Write down initial values */ +void Equalizer::updateUIFromCore() +{ + char *psz_af;//, *psz_bands; Don't use it ? + float f_preamp; + int i_preset; + aout_instance_t *p_aout = ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); - char *psz_af; - char *psz_bands; - float f_preamp; if( p_aout ) { psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); if( var_GetBool( p_aout, "equalizer-2pass" ) ) ui.eq2PassCheck->setChecked( true ); - psz_bands = var_GetNonEmptyString( p_aout, "equalizer-bands" ); +// psz_bands = var_GetNonEmptyString( p_aout, "equalizer-bands" ); f_preamp = var_GetFloat( p_aout, "equalizer-preamp" ); + i_preset = presetsComboBox->findData( QVariant( + var_GetString( p_aout, "equalizer-preset" ) ) ); vlc_object_release( p_aout ); } else @@ -855,21 +878,21 @@ Equalizer::Equalizer( intf_thread_t *_p_intf, QWidget *_parent ) : psz_af = config_GetPsz( p_intf, "audio-filter" ); if( config_GetInt( p_intf, "equalizer-2pass" ) ) ui.eq2PassCheck->setChecked( true ); - psz_bands = config_GetPsz( p_intf, "equalizer-bands" ); +// psz_bands = config_GetPsz( p_intf, "equalizer-bands" ); f_preamp = config_GetFloat( p_intf, "equalizer-preamp" ); + i_preset = presetsComboBox->findData( QVariant( + config_GetPsz( p_intf, "equalizer-preset" ) ) ); } if( psz_af && strstr( psz_af, "equalizer" ) != NULL ) ui.enableCheck->setChecked( true ); - free( psz_af ); enable( ui.enableCheck->isChecked() ); - setValues( psz_bands, f_preamp ); -} + presetsComboBox->setCurrentIndex( i_preset ); -Equalizer::~Equalizer() -{ + free( psz_af ); } +/* Functin called when enableButton is toggled */ void Equalizer::enable() { bool en = ui.enableCheck->isChecked(); @@ -879,13 +902,17 @@ void Equalizer::enable() // en ? true : false ); // aout_EnableFilter( VLC_OBJECT( p_intf ), "vsurround", // en ? true : false ); - enable( en ); + enable( en ); + + if( presetsComboBox->currentIndex() < 0 ) + presetsComboBox->setCurrentIndex( 0 ); + } void Equalizer::enable( bool en ) { ui.eq2PassCheck->setEnabled( en ); - ui.presetsCombo->setEnabled( en ); + presetsComboBox->setEnabled( en ); ui.presetLabel->setEnabled( en ); ui.preampLabel->setEnabled( en ); ui.preampSlider->setEnabled( en ); @@ -895,6 +922,7 @@ void Equalizer::enable( bool en ) } } +/* Function called when the set2Pass button is activated */ void Equalizer::set2Pass() { aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, @@ -915,31 +943,33 @@ void Equalizer::set2Pass() } } +/* Function called when the preamp slider is moved */ void Equalizer::setPreamp() { const float f = ( float )( ui.preampSlider->value() ) /10 - 20; aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); - ui.preampLabel->setText( qtr( "Preamp\n" ) + QString::number( f, 'f', 1 ) + qtr( "dB" ) ); + ui.preampLabel->setText( qtr( "Preamp\n" ) + QString::number( f, 'f', 1 ) + + qtr( "dB" ) ); if( p_aout ) { - delCallbacks( p_aout ); + //delCallbacks( p_aout ); var_SetFloat( p_aout, "equalizer-preamp", f ); - addCallbacks( p_aout ); + //addCallbacks( p_aout ); vlc_object_release( p_aout ); } config_PutFloat( p_intf, "equalizer-preamp", f ); } -void Equalizer::setBand() +void Equalizer::setCoreBands() { /**\todo smoothing */ QString values; for( int i = 0; i < BANDS; i++ ) { - const float f_val = (float)( bands[i]->value() ) / 10 - 20; + const float f_val = (float)( bands[i]->value() ) / 10 - 20; QString val = QString("%1").arg( f_val, 5, 'f', 1 ); band_texts[i]->setText( band_frequencies[i] + "\n" + val + "dB" ); @@ -951,62 +981,82 @@ void Equalizer::setBand() VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_aout ) { - delCallbacks( p_aout ); + //delCallbacks( p_aout ); var_SetString( p_aout, "equalizer-bands", psz_values ); - addCallbacks( p_aout ); + //addCallbacks( p_aout ); vlc_object_release( p_aout ); } } -void Equalizer::setValues( char *psz_bands, float f_preamp ) + +void Equalizer::updateUISliderValues( int i_preset ) { - char *p = psz_bands; + if( i_preset < 0 ) return; + + char *p = createValuesFromPreset( i_preset ); + char *psz = p; + float f_preamp = eqz_preset_10b[i_preset]->f_preamp; + if ( p ) { for( int i = 0; i < BANDS; i++ ) { - const float f = strtof( p, &p ); + const float f = us_strtod(p, &p ); bands[i]->setValue( (int)( ( f + 20 ) * 10 ) ); - band_texts[i]->setText( band_frequencies[i] + "\n" + QString("%1").arg( f, 5, 'f', 1 ) + "dB" ); + band_texts[i]->setText( band_frequencies[i] + "\n" + + QString("%1").arg( f, 5, 'f', 1 ) + "dB" ); if( p == NULL || *p == '\0' ) break; p++; if( *p == '\0' ) break; } + free( psz ); } ui.preampSlider->setValue( (int)( ( f_preamp + 20 ) * 10 ) ); - ui.preampLabel->setText( qtr( "Preamp\n" ) + QString::number( f_preamp, 'f', 1 ) + qtr( "dB" ) ); + ui.preampLabel->setText( qtr( "Preamp\n" ) + + QString::number( f_preamp, 'f', 1 ) + qtr( "dB" ) ); } -void Equalizer::setPreset( int preset ) +char * Equalizer::createValuesFromPreset( int i_preset ) { - aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); - + char *psz_values; QString values; + + /* Create the QString in Qt */ for( int i = 0 ; i< BANDS ;i++ ) - values += QString( " %1" ).arg( eqz_preset_10b[preset]->f_amp[i] ); + values += QString( " %1" ).arg( eqz_preset_10b[i_preset]->f_amp[i] ); - /* XXX Only needed because of setValues */ - char psz_values[256]; - snprintf( psz_values, sizeof(psz_values), "%s", values.toAscii().constData() ); + /* Convert it to char * */ + if( !asprintf( &psz_values, "%s", values.toAscii().constData() ) ) + return NULL; + return psz_values; +} + +void Equalizer::setCorePreset( int i_preset ) +{ + char *psz_values = createValuesFromPreset( i_preset ); + if( !psz_values ) return ; + + aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_aout ) { delCallbacks( p_aout ); + var_SetString( p_aout , "equalizer-preset" , preset_list[i_preset] ); + var_SetString( p_aout, "equalizer-bands", psz_values ); var_SetFloat( p_aout, "equalizer-preamp", - eqz_preset_10b[preset]->f_preamp ); + eqz_preset_10b[i_preset]->f_preamp ); addCallbacks( p_aout ); vlc_object_release( p_aout ); } config_PutPsz( p_intf, "equalizer-bands", psz_values ); + config_PutPsz( p_intf, "equalizer-preset", preset_list[i_preset] ); config_PutFloat( p_intf, "equalizer-preamp", - eqz_preset_10b[preset]->f_preamp ); - - setValues( psz_values, eqz_preset_10b[preset]->f_preamp ); + eqz_preset_10b[i_preset]->f_preamp ); } static int PresetCallback( vlc_object_t *p_this, char const *psz_cmd, @@ -1014,7 +1064,8 @@ static int PresetCallback( vlc_object_t *p_this, char const *psz_cmd, { char *psz_preset = newval.psz_string; Equalizer *eq = ( Equalizer * )p_data; - eq->presetsComboBox->setCurrentIndex( eq->presetsComboBox->findText( qfu( psz_preset ) ) ); + int i_preset = eq->presetsComboBox->findData( QVariant( psz_preset ) ); + eq->presetsComboBox->setCurrentIndex( i_preset ); return VLC_SUCCESS; } @@ -1053,7 +1104,7 @@ Spatializer::Spatializer( intf_thread_t *_p_intf, QWidget *_parent ) : QGridLayout *layout = new QGridLayout( this ); layout->setMargin( 0 ); - enableCheck = new QCheckBox( qfu( "Enable spatializer" ) ); + enableCheck = new QCheckBox( qtr( "Enable spatializer" ) ); layout->addWidget( enableCheck, 0, 0, 1, NUM_SP_CTRL ); for( int i = 0 ; i < NUM_SP_CTRL ; i++ ) @@ -1286,8 +1337,6 @@ SyncControls::SyncControls( intf_thread_t *_p_intf, QWidget *_parent ) : updateButton = new QToolButton; updateButton->setAutoRaise( true ); - updateButton->setText( "u" ); - updateButton->setToolTip( qtr( "Force update of this dialog's values" ) ); mainLayout->addWidget( updateButton, 0, 4, 1, 1 ); @@ -1302,7 +1351,8 @@ SyncControls::SyncControls( intf_thread_t *_p_intf, QWidget *_parent ) : CONNECT( subsSpin, valueChanged ( double ), this, advanceSubs( double ) ) ; CONNECT( subSpeedSpin, valueChanged ( double ), this, adjustSubsSpeed( double ) ); - BUTTONACT( updateButton, update() ); + BUTTON_SET_ACT_I( updateButton, "", update, + qtr( "Force update of this dialog's values" ), update() ); /* Set it */ update();