+/**********************************************************************
+ * 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 );
+}
+