}
}
+/**********************************************************************
+ * Sliders
+ **********************************************************************/
+
+FilterSliderData::FilterSliderData( QObject *parent,
+ intf_thread_t *_p_intf,
+ QSlider *_slider,
+ QLabel *_label, QLabel *_nameLabel,
+ const slider_data_t *_p_data ):
+ QObject( parent ), slider( _slider ), p_intf( _p_intf ),
+ valueLabel( _label ), nameLabel( _nameLabel ), p_data( _p_data )
+{
+ slider->setMinimum( p_data->f_min / p_data->f_resolution );
+ slider->setMaximum( p_data->f_max / p_data->f_resolution );
+ nameLabel->setText( qfu( p_data->psz_descs ) );
+ CONNECT( slider, valueChanged( int ), this, updateText( int ) );
+ setValue( initialValue() );
+ /* In case current == min|max text would not be first updated */
+ if ( slider->value() == slider->maximum() ||
+ slider->value() == slider->minimum() )
+ updateText( slider->value() );
+ CONNECT( slider, valueChanged( int ), this, onValueChanged( int ) );
+}
+
+void FilterSliderData::setValue( float f )
+{
+ slider->setValue( f / p_data->f_resolution );
+}
+
+void FilterSliderData::updateText( int i )
+{
+ float f = ((float) i) * p_data->f_resolution;
+ valueLabel->setText( qfu( p_data->psz_units )
+ .prepend( "%1" )
+ .arg( QString::number( f, 'f', 1 ) ) );
+}
+
+float FilterSliderData::initialValue()
+{
+ vlc_object_t *p_aout = (vlc_object_t *) THEMIM->getAout();
+ float f = p_data->f_value;
+ if( p_aout )
+ {
+ if ( var_Type( p_aout, p_data->psz_name ) == 0 )
+ {
+ vlc_object_release( p_aout );
+ /* Not found, will try in config */
+ }
+ else
+ {
+ f = var_GetFloat( p_aout, p_data->psz_name );
+ vlc_object_release( p_aout );
+ return f;
+ }
+ }
+
+ if ( ! config_FindConfig( VLC_OBJECT(p_intf), p_data->psz_name ) )
+ return f;
+
+ f = config_GetFloat( p_intf, p_data->psz_name );
+ return f;
+}
+
+void FilterSliderData::onValueChanged( int i )
+{
+ float f = ((float) i) * p_data->f_resolution;
+ vlc_object_t *p_aout = (vlc_object_t *) THEMIM->getAout();
+ if ( p_aout )
+ {
+ var_SetFloat( p_aout, p_data->psz_name, f );
+ vlc_object_release( p_aout );
+ }
+ writeToConfig();
+}
+
+void FilterSliderData::writeToConfig()
+{
+ float f = ((float) slider->value()) * p_data->f_resolution;
+ config_PutFloat( p_intf, p_data->psz_name, f );
+}
+
/**********************************************************************
* Equalizer
**********************************************************************/
* Dynamic range compressor
**********************************************************************/
-const Compressor::comp_controls_t Compressor::comp_controls[] =
+const FilterSliderData::slider_data_t Compressor::comp_controls[] =
{
{ "compressor-rms-peak", _("RMS/peak"), "", 0.0f, 1.0f, 0.00f, 0.001f },
{ "compressor-attack", _("Attack"), _(" ms"), 1.5f, 400.0f, 25.00f, 0.100f },
layout->addWidget( compressorBox );
QGridLayout *ctrlLayout = new QGridLayout( compressorBox );
+
for( int i = 0 ; i < NUM_CP_CTRL ; i++ )
{
- const int i_min = (int)( comp_controls[i].f_min
- / comp_controls[i].f_resolution );
- const int i_max = (int)( comp_controls[i].f_max
- / comp_controls[i].f_resolution );
- const int i_val = (int)( comp_controls[i].f_value
- / comp_controls[i].f_resolution );
-
- compCtrl[i] = new QSlider( Qt::Vertical );
- compCtrl[i]->setMinimum( i_min );
- compCtrl[i]->setMaximum( i_max );
- compCtrl[i]->setValue( i_val );
-
- oldControlVars[i] = comp_controls[i].f_value;
-
- ctrl_texts[i] = new QLabel( qtr( comp_controls[i].psz_descs ) + "\n" );
- ctrl_texts[i]->setFont( smallFont );
- ctrl_texts[i]->setAlignment( Qt::AlignHCenter );
-
- ctrl_readout[i] = new QLabel;
- ctrl_readout[i]->setFont( smallFont );
- ctrl_readout[i]->setAlignment( Qt::AlignHCenter );
-
- ctrlLayout->addWidget( compCtrl[i], 0, i, Qt::AlignHCenter );
- ctrlLayout->addWidget( ctrl_readout[i], 1, i, Qt::AlignHCenter );
- ctrlLayout->addWidget( ctrl_texts[i], 2, i, Qt::AlignHCenter );
+ QSlider *slider = new QSlider( Qt::Vertical );
+ QLabel *valueLabel = new QLabel();
+ valueLabel->setFont( smallFont );
+ valueLabel->setAlignment( Qt::AlignHCenter );
+ QLabel *nameLabel = new QLabel();
+ nameLabel->setFont( smallFont );
+ nameLabel->setAlignment( Qt::AlignHCenter );
+ FilterSliderData *filter =
+ new FilterSliderData( this, p_intf,
+ slider, valueLabel, nameLabel, & comp_controls[i] );
+ ctrlLayout->addWidget( slider, 0, i, Qt::AlignHCenter );
+ ctrlLayout->addWidget( valueLabel, 1, i, Qt::AlignHCenter );
+ ctrlLayout->addWidget( nameLabel, 2, i, Qt::AlignHCenter );
}
- for( int i = 0; i < NUM_CP_CTRL; i++ )
- CONNECT( compCtrl[i], valueChanged( int ), this, setValues() );
-
- /* Write down initial values */
vlc_object_t *p_aout = (vlc_object_t *)THEMIM->getAout();
char *psz_af;
-
if( p_aout )
{
psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
- for( int i = 0; i < NUM_CP_CTRL; i++ )
- {
- controlVars[i] = var_GetFloat( p_aout,
- comp_controls[i].psz_name );
- }
vlc_object_release( p_aout );
}
else
- {
psz_af = config_GetPsz( p_intf, "audio-filter" );
- for( int i = 0; i < NUM_CP_CTRL; i++ )
- {
- controlVars[i] = config_GetFloat( p_intf,
- comp_controls[i].psz_name );
- }
- }
if( psz_af && strstr( psz_af, "compressor" ) != NULL )
compressorBox->setChecked( true );
CONNECT( compressorBox, toggled(bool), this, enable() );
free( psz_af );
- updateSliders();
- setValues();
}
void Compressor::enable()
playlist_EnableAudioFilter( THEPL, "compressor", compressorBox->isChecked() );
}
-void Compressor::updateSliders()
-{
- for( int i = 0 ; i < NUM_CP_CTRL ; i++ )
- {
- if( oldControlVars[i] != controlVars[i] )
- {
- compCtrl[i]->setValue(
- (int)( controlVars[i] / comp_controls[i].f_resolution ) );
- }
- }
-}
-
-void Compressor::setValues()
-{
- vlc_object_t *p_aout = (vlc_object_t *)THEMIM->getAout();
-
- for( int i = 0 ; i < NUM_CP_CTRL ; i++ )
- {
- float f = (float)( compCtrl[i]->value() ) * ( comp_controls[i].f_resolution );
- ctrl_readout[i]->setText( QString::number( f, 'f', 1 )
- + qtr( comp_controls[i].psz_units ) );
- if( oldControlVars[i] != f )
- {
- if( p_aout )
- {
- var_SetFloat( p_aout, comp_controls[i].psz_name, f );
- }
- config_PutFloat( p_intf, comp_controls[i].psz_name, f );
- oldControlVars[i] = f;
- }
- }
- if( p_aout )
- {
- vlc_object_release( p_aout );
- }
-}
/**********************************************************************
* Spatializer