summaryrefslogtreecommitdiffstats
path: root/src/app/volumeAction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/volumeAction.cpp')
-rw-r--r--src/app/volumeAction.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/app/volumeAction.cpp b/src/app/volumeAction.cpp
new file mode 100644
index 0000000..4215640
--- /dev/null
+++ b/src/app/volumeAction.cpp
@@ -0,0 +1,114 @@
+// (C) 2005 Max Howell (max.howell@methylblue.com)
+// See COPYING file for licensing information
+
+#include <klocale.h>
+#include <ktoolbar.h>
+#include <qevent.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qslider.h>
+
+#include "debug.h"
+#include "volumeAction.h"
+#include "volumeAction.moc"
+#include "xineEngine.h"
+
+
+class VolumeSlider : public QFrame
+{
+public:
+ VolumeSlider( QWidget *parent )
+ : QFrame( parent )
+ {
+ slider = new QSlider( Qt::Vertical, this, "volume" );
+ label = new QLabel( this );
+
+ QBoxLayout *lay = new QVBoxLayout( this );
+ lay->addWidget( slider, 0, Qt::AlignHCenter );
+ lay->addWidget( label, 0, Qt::AlignHCenter );
+ lay->setMargin( 4 );
+
+ slider->setRange( 0, 100 );
+
+ setFrameStyle( QFrame::Plain | QFrame::Box );
+ setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
+
+ hide();
+ }
+
+ QLabel *label;
+ QSlider *slider;
+};
+
+
+VolumeAction::VolumeAction( KToolBar *bar, KActionCollection *ac )
+ : KToggleAction( i18n("Volume"), "volume", Qt::Key_1, 0, 0, ac, "volume" )
+ , m_anchor( 0 )
+{
+ m_widget = new VolumeSlider( bar->topLevelWidget() );
+
+ connect( this, SIGNAL(toggled( bool )), SLOT(toggled( bool )) );
+ connect( m_widget->slider, SIGNAL(sliderMoved( int )), SLOT(sliderMoved( int )) );
+ connect( m_widget->slider, SIGNAL(sliderMoved( int )), Codeine::engine(), SLOT(setStreamParameter( int )) );
+ connect( m_widget->slider, SIGNAL(sliderReleased()), SLOT(sliderReleased()) );
+}
+
+int
+VolumeAction::plug( QWidget *bar, int index )
+{
+ DEBUG_BLOCK
+
+ int const id = KAction::plug( bar, index );
+
+ m_anchor = (QWidget*)bar->child( "toolbutton_volume" ); //KAction creates it with this name
+ m_anchor->installEventFilter( this ); //so we can keep m_widget anchored
+
+ return id;
+}
+
+void
+VolumeAction::toggled( bool const b )
+{
+ DEBUG_BLOCK
+
+ m_widget->raise();
+ m_widget->setShown( b );
+}
+
+void
+VolumeAction::sliderMoved( int v )
+{
+ v = 100 - v; //Qt sliders are wrong way round when vertical
+
+ QString const t = QString::number( v ) + '%';
+
+ setToolTip( i18n( "Volume: %1" ).arg( t ) );
+ m_widget->label->setText( t );
+}
+
+bool
+VolumeAction::eventFilter( QObject *o, QEvent *e )
+{
+ switch (e->type()) {
+ case QEvent::Move:
+ case QEvent::Resize: {
+ QWidget const * const &a = m_anchor;
+
+ m_widget->move( a->mapTo( m_widget->parentWidget(), QPoint( 0, a->height() ) ) );
+ m_widget->resize( a->width(), m_widget->sizeHint().height() );
+ return false;
+ }
+
+ //TODO one click method, flawed currently in fullscreen mode by palette change in mainwindow.cpp
+/* case QEvent::MouseButtonPress:
+ m_widget->show();
+ break;
+
+ case QEvent::MouseButtonRelease:
+ m_widget->hide();
+ break;*/
+
+ default:
+ return false;
+ }
+}