Add mute checkbox to volume slider

Part of https://mirror.git.trinitydesktop.org/gitea/TDE/codeine/issues/5
Signed-off-by: mio <stigma@disroot.org>
pull/33/head
mio 3 months ago
parent 6a71a1b414
commit d9afd6ce2b

@ -66,6 +66,7 @@ MainWindow::engineStateChanged( Engine::State state )
//FIXME bad design to do this way //FIXME bad design to do this way
m_volumeAction->setVolume(engine()->volume()); m_volumeAction->setVolume(engine()->volume());
m_volumeAction->setMuted(engine()->isMuted());
} }

@ -1,12 +1,15 @@
// (C) 2005 Max Howell (max.howell@methylblue.com) // (C) 2005 Max Howell (max.howell@methylblue.com)
// See COPYING file for licensing information // See COPYING file for licensing information
#include <kiconloader.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <tdetoolbar.h> #include <tdetoolbar.h>
#include <tqevent.h> #include <tqevent.h>
#include <tqlabel.h> #include <tqlabel.h>
#include <tqlayout.h> #include <tqlayout.h>
#include <tqslider.h> #include <tqslider.h>
#include <tqtoolbutton.h>
#include <tqtooltip.h>
#include "../debug.h" #include "../debug.h"
#include "volumeAction.h" #include "volumeAction.h"
@ -20,19 +23,45 @@ public:
VolumeSlider( TQWidget *parent ) VolumeSlider( TQWidget *parent )
: TQFrame( parent ) : TQFrame( parent )
{ {
slider = new TQSlider( TQt::Vertical, this, "volume" ); slider = new TQSlider(TQt::Vertical, this, "volume");
label = new TQLabel( this ); label = new TQLabel(this);
TQBoxLayout *lay = new TQVBoxLayout( this ); mute = new TQToolButton(this, "volume_slider_mute");
lay->addWidget( slider, 0, TQt::AlignHCenter ); mute->setAutoRaise(true);
lay->addWidget( label, 0, TQt::AlignHCenter ); mute->setToggleButton(true);
lay->setMargin( 4 ); TQToolTip::add(mute, i18n("Toggle Mute"));
TQBoxLayout *lay = new TQVBoxLayout(this);
lay->addWidget(slider, 0, TQt::AlignHCenter);
lay->addWidget(label, 0, TQt::AlignHCenter);
lay->addWidget(mute, 0, TQt::AlignHCenter);
lay->setMargin(4);
slider->setRange( 0, 100 ); slider->setRange( 0, 100 );
setFrameStyle( TQFrame::Plain | TQFrame::Box ); setFrameStyle( TQFrame::Plain | TQFrame::Box );
setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ); setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred );
// Test for icon support
const char* mutedIcons[] = { "audio-volume-muted", "player_mute", "mute" };
bool iconFound = false;
for (size_t i = 0; i < (sizeof(mutedIcons) / sizeof(*mutedIcons)); ++i)
{
if (!TDEGlobal::iconLoader()->iconPath(mutedIcons[i], TDEIcon::Toolbar, true).isNull())
{
mute->setIconSet(TDEGlobal::iconLoader()->loadIconSet(mutedIcons[i], TDEIcon::Toolbar));
iconFound = true;
break;
}
}
if (!iconFound)
{
mute->setAutoRaise(false);
mute->setText(i18n("Mute"));
}
// Calculate width required for max label size // Calculate width required for max label size
label->setText( "100%" ); label->setText( "100%" );
adjustSize(); adjustSize();
@ -41,9 +70,16 @@ public:
hide(); hide();
} }
TQToolButton *mute;
TQLabel *label; TQLabel *label;
TQSlider *slider; TQSlider *slider;
int requiredWidth; int requiredWidth;
void setMuted(bool muted)
{
// Behave correctly when VolumeAction's "setMuted" slot is invoked.
mute->setDown(muted);
}
}; };
@ -53,7 +89,9 @@ VolumeAction::VolumeAction( TDEToolBar *bar, TDEActionCollection *ac )
{ {
m_widget = new VolumeSlider( bar->topLevelWidget() ); m_widget = new VolumeSlider( bar->topLevelWidget() );
connect( this, TQ_SIGNAL(toggled( bool )), TQ_SLOT(toggled( bool )) ); connect(this, TQ_SIGNAL(toggled(bool)), TQ_SLOT(toggled(bool)));
connect(m_widget->mute, TQ_SIGNAL(toggled(bool)), Codeine::engine(), TQ_SLOT(setMuted(bool)));
connect(m_widget->mute, TQ_SIGNAL(toggled(bool)), TQ_SLOT(setMuted(bool)));
connect(m_widget->slider, TQ_SIGNAL(valueChanged(int)), Codeine::engine(), TQ_SLOT(setStreamParameter(int))); connect(m_widget->slider, TQ_SIGNAL(valueChanged(int)), Codeine::engine(), TQ_SLOT(setStreamParameter(int)));
connect(m_widget->slider, TQ_SIGNAL(valueChanged(int)), TQ_SLOT(sliderMoved(int))); connect(m_widget->slider, TQ_SIGNAL(valueChanged(int)), TQ_SLOT(sliderMoved(int)));
} }
@ -90,10 +128,14 @@ VolumeAction::sliderMoved(int v)
} }
void void
VolumeAction::setVolume(int volume) VolumeAction::setMuted(bool mute)
{ {
TQString vol = TQString("%1%").arg(volume); m_widget->setMuted(mute);
}
void
VolumeAction::setVolume(int volume)
{
// TQt sliders are the wrong way round when vertical. // TQt sliders are the wrong way round when vertical.
m_widget->slider->setValue(100 - volume); m_widget->slider->setValue(100 - volume);
} }

@ -18,6 +18,7 @@ class VolumeAction : public TDEToggleAction
virtual int plug( TQWidget*, int ); virtual int plug( TQWidget*, int );
public slots: public slots:
void setMuted(bool mute);
// Update Slider and Label to \a volume // Update Slider and Label to \a volume
void setVolume(int volume); void setVolume(int volume);

@ -455,6 +455,12 @@ VideoWindow::posTimeLength( PosTimeLength type ) const
return 0; //--warning return 0; //--warning
} }
bool
VideoWindow::isMuted() const
{
return xine_get_param(m_stream, XINE_PARAM_AUDIO_AMP_MUTE);
}
uint uint
VideoWindow::volume() const VideoWindow::volume() const
{ {
@ -595,6 +601,12 @@ VideoWindow::setStreamParameter( int value )
xine_set_param( m_stream, parameter, value ); xine_set_param( m_stream, parameter, value );
} }
void
VideoWindow::setMuted(bool mute)
{
xine_set_param(m_stream, XINE_PARAM_AUDIO_AMP_MUTE, mute);
}
const Engine::Scope& const Engine::Scope&
VideoWindow::scope() VideoWindow::scope()
{ {

@ -62,6 +62,7 @@ namespace Codeine
uint time() const { return posTimeLength( Time ); } uint time() const { return posTimeLength( Time ); }
uint length() const { return posTimeLength( Length ); } uint length() const { return posTimeLength( Length ); }
bool isMuted() const;
uint volume() const; uint volume() const;
const Engine::Scope &scope(); const Engine::Scope &scope();
@ -78,6 +79,7 @@ namespace Codeine
///special slot, see implementation to facilitate understanding ///special slot, see implementation to facilitate understanding
void setStreamParameter( int ); void setStreamParameter( int );
void setMuted(bool);
signals: signals:
void stateChanged( Engine::State ); void stateChanged( Engine::State );

Loading…
Cancel
Save