+ CONNECT( volumeSlider, valueChanged( int ), this, refreshLabels( void ) );
+ CONNECT( volumeSlider, sliderMoved( int ), this, userUpdateVolume( int ) );
+ CONNECT( THEMIM, volumeChanged( void ), this, libUpdateVolume( void ) );
+ CONNECT( THEMIM, soundMuteChanged( void ), this, updateMuteStatus( void ) );
+}
+
+SoundWidget::~SoundWidget()
+{
+ delete volumeSlider;
+ delete volumeControlWidget;
+}
+
+void SoundWidget::refreshLabels()
+{
+ int i_sliderVolume = volumeSlider->value();
+
+ if( b_is_muted )
+ {
+ volMuteLabel->setPixmap( QPixmap(":/toolbar/volume-muted" ) );
+ volMuteLabel->setToolTip(qfu(vlc_pgettext("Tooltip|Unmute", "Unmute")));
+ return;
+ }
+
+ if( i_sliderVolume < VOLUME_MAX / 3 )
+ volMuteLabel->setPixmap( QPixmap( ":/toolbar/volume-low" ) );
+ else if( i_sliderVolume > (VOLUME_MAX * 2 / 3 ) )
+ volMuteLabel->setPixmap( QPixmap( ":/toolbar/volume-high" ) );
+ else volMuteLabel->setPixmap( QPixmap( ":/toolbar/volume-medium" ) );
+ volMuteLabel->setToolTip( qfu(vlc_pgettext("Tooltip|Mute", "Mute")) );
+}
+
+/* volumeSlider changed value event slot */
+void SoundWidget::userUpdateVolume( int i_sliderVolume )
+{
+ /* Only if volume is set by user action on slider */
+ setMuted( false );
+ playlist_t *p_playlist = pl_Get( p_intf );
+ int i_res = i_sliderVolume * (AOUT_VOLUME_MAX / 2) / VOLUME_MAX;
+ aout_VolumeSet( p_playlist, i_res );
+}
+
+/* libvlc changed value event slot */
+void SoundWidget::libUpdateVolume()
+{
+ /* Audio part */
+ audio_volume_t i_volume;
+ playlist_t *p_playlist = pl_Get( p_intf );
+
+ aout_VolumeGet( p_playlist, &i_volume );
+ i_volume = ( ( i_volume + 1 ) * VOLUME_MAX )/ (AOUT_VOLUME_MAX/2);
+ int i_gauge = volumeSlider->value();
+ if ( !b_is_muted && /* do not show mute effect on volume (set to 0) */
+ ( i_volume - i_gauge > 1 || i_gauge - i_volume > 1 )
+ )
+ {
+ volumeSlider->setValue( i_volume );
+ }
+}
+
+/* libvlc mute/unmute event slot */
+void SoundWidget::updateMuteStatus()
+{
+ playlist_t *p_playlist = pl_Get( p_intf );
+ b_is_muted = aout_IsMuted( VLC_OBJECT(p_playlist) );
+
+ SoundSlider *soundSlider = qobject_cast<SoundSlider *>(volumeSlider);
+ if( soundSlider )
+ soundSlider->setMuted( b_is_muted );
+ refreshLabels();