summaryrefslogtreecommitdiff
path: root/core/applets/volumeapplet
authorkergoth <kergoth>2002-01-25 22:14:26 (UTC)
committer kergoth <kergoth>2002-01-25 22:14:26 (UTC)
commit15318cad33835e4e2dc620d033e43cd930676cdd (patch) (side-by-side diff)
treec2fa0399a2c47fda8e2cd0092c73a809d17f68eb /core/applets/volumeapplet
downloadopie-15318cad33835e4e2dc620d033e43cd930676cdd.zip
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2
Initial revision
Diffstat (limited to 'core/applets/volumeapplet') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/volumeapplet/.cvsignore3
-rw-r--r--core/applets/volumeapplet/Makefile.in115
-rw-r--r--core/applets/volumeapplet/qpe-volumeapplet.control9
-rwxr-xr-xcore/applets/volumeapplet/qpe-volumeapplet.postinst2
-rwxr-xr-xcore/applets/volumeapplet/qpe-volumeapplet.postrm2
-rw-r--r--core/applets/volumeapplet/volume.cpp199
-rw-r--r--core/applets/volumeapplet/volume.h75
-rw-r--r--core/applets/volumeapplet/volumeapplet.pro12
-rw-r--r--core/applets/volumeapplet/volumeappletimpl.cpp64
-rw-r--r--core/applets/volumeapplet/volumeappletimpl.h44
10 files changed, 525 insertions, 0 deletions
diff --git a/core/applets/volumeapplet/.cvsignore b/core/applets/volumeapplet/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/applets/volumeapplet/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/applets/volumeapplet/Makefile.in b/core/applets/volumeapplet/Makefile.in
new file mode 100644
index 0000000..7020cb7
--- a/dev/null
+++ b/core/applets/volumeapplet/Makefile.in
@@ -0,0 +1,115 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/applets/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = volumeapplet
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = volume.h \
+ volumeappletimpl.h
+SOURCES = volume.cpp \
+ volumeappletimpl.cpp
+OBJECTS = volume.o \
+ volumeappletimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_volume.cpp
+OBJMOC = moc_volume.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake volumeapplet.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+volume.o: volume.cpp \
+ volume.h
+
+volumeappletimpl.o: volumeappletimpl.cpp \
+ volume.h \
+ volumeappletimpl.h
+
+moc_volume.o: moc_volume.cpp \
+ volume.h
+
+moc_volume.cpp: volume.h
+ $(MOC) volume.h -o moc_volume.cpp
+
+
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.control b/core/applets/volumeapplet/qpe-volumeapplet.control
new file mode 100644
index 0000000..a80262a
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.control
@@ -0,0 +1,9 @@
+Files: plugins/applets/libvolumeapplet.so*
+Priority: optional
+Section: qpe/taskbar
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Volume applet
+ Volume applet for the Qtopia environment taskbar.
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.postinst b/core/applets/volumeapplet/qpe-volumeapplet.postinst
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.postrm b/core/applets/volumeapplet/qpe-volumeapplet.postrm
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
new file mode 100644
index 0000000..35dbf22
--- a/dev/null
+++ b/core/applets/volumeapplet/volume.cpp
@@ -0,0 +1,199 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "volume.h"
+
+#include <qpe/resource.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+#include <qpainter.h>
+#include <qcheckbox.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qframe.h>
+#include <qpixmap.h>
+
+
+VolumeControl::VolumeControl( QWidget *parent, const char *name )
+ : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup )
+{
+ setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+
+ QVBoxLayout *vbox = new QVBoxLayout( this );
+ slider = new QSlider( this );
+ muteBox = new QCheckBox( tr("Mute"), this );
+ slider->setRange( 0, 100 );
+ slider->setTickmarks( QSlider::Both );
+ slider->setTickInterval( 20 );
+ slider->setFocusPolicy( QWidget::NoFocus );
+ muteBox->setFocusPolicy( QWidget::NoFocus );
+ vbox->setMargin( 6 );
+ vbox->setSpacing( 3 );
+ vbox->addWidget( slider, 0, Qt::AlignVCenter | Qt::AlignHCenter );
+ vbox->addWidget( muteBox );
+ setFixedHeight( 100 );
+ setFixedWidth( sizeHint().width() );
+ setFocusPolicy(QWidget::NoFocus);
+}
+
+void VolumeControl::keyPressEvent( QKeyEvent *e)
+{
+ switch(e->key()) {
+ case Key_Up:
+ slider->subtractStep();
+ break;
+ case Key_Down:
+ slider->addStep();
+ break;
+ case Key_Space:
+ muteBox->toggle();
+ break;
+ case Key_Escape:
+ close();
+ break;
+ }
+}
+
+//===========================================================================
+
+VolumeApplet::VolumeApplet( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ setFixedHeight( 18 );
+ setFixedWidth( 14 );
+ volumePixmap = Resource::loadPixmap( "volume" );
+ muted = FALSE; // ### read from pref
+ volumePercent = 50; // ### read from pref
+ connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
+ writeSystemVolume();
+}
+
+VolumeApplet::~VolumeApplet()
+{
+}
+
+void VolumeApplet::mousePressEvent( QMouseEvent *)
+{
+ // Create a small volume control window to adjust the volume with
+ VolumeControl *vc = new VolumeControl;
+ vc->slider->setValue( 100 - volumePercent );
+ vc->muteBox->setChecked( muted );
+ connect( vc->slider, SIGNAL( valueChanged( int ) ), this, SLOT( sliderMoved( int ) ) );
+ connect( vc->muteBox, SIGNAL( toggled( bool ) ), this, SLOT( mute( bool ) ) );
+ QPoint curPos = mapToGlobal( rect().topLeft() );
+ vc->move( curPos.x()-(vc->sizeHint().width()-width())/2, curPos.y() - 100 );
+ vc->show();
+}
+
+void VolumeApplet::volumeChanged( bool nowMuted )
+{
+ int previousVolume = volumePercent;
+
+ if ( !nowMuted )
+ readSystemVolume();
+
+ // Handle case where muting it toggled
+ if ( muted != nowMuted ) {
+ muted = nowMuted;
+ repaint( TRUE );
+ return;
+ }
+
+ // Avoid over repainting
+ if ( previousVolume != volumePercent )
+ repaint( 2, height() - 3, width() - 4, 2, FALSE );
+}
+
+
+void VolumeApplet::mute( bool toggled )
+{
+ muted = toggled;
+ // clear if removing mute
+ repaint( !toggled );
+ writeSystemVolume();
+}
+
+
+void VolumeApplet::sliderMoved( int percent )
+{
+ setVolume( 100 - percent );
+}
+
+
+void VolumeApplet::readSystemVolume()
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ volumePercent = cfg.readNumEntry("Volume");
+}
+
+
+void VolumeApplet::setVolume( int percent )
+{
+ // clamp volume percent to be between 0 and 100
+ volumePercent = (percent < 0) ? 0 : ((percent > 100) ? 100 : percent);
+ // repaint just the little volume rectangle
+ repaint( 2, height() - 3, width() - 4, 2, FALSE );
+ writeSystemVolume();
+}
+
+
+void VolumeApplet::writeSystemVolume()
+{
+ {
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ cfg.writeEntry("Volume",volumePercent);
+ }
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+ // Send notification that the volume has changed
+ QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted;
+#endif
+}
+
+
+void VolumeApplet::paintEvent( QPaintEvent* )
+{
+ QPainter p(this);
+
+ if (volumePixmap.isNull())
+ volumePixmap = Resource::loadPixmap( "volume" );
+ p.drawPixmap( 0, 1, volumePixmap );
+ p.setPen( darkGray );
+ p.drawRect( 1, height() - 4, width() - 2, 4 );
+
+ int pixelsWide = volumePercent * (width() - 4) / 100;
+ p.fillRect( 2, height() - 3, pixelsWide, 2, red );
+ p.fillRect( pixelsWide + 2, height() - 3, width() - 4 - pixelsWide, 2, lightGray );
+
+ if ( muted ) {
+ p.setPen( red );
+ p.drawLine( 1, 2, width() - 2, height() - 5 );
+ p.drawLine( 1, 3, width() - 2, height() - 4 );
+ p.drawLine( width() - 2, 2, 1, height() - 5 );
+ p.drawLine( width() - 2, 3, 1, height() - 4 );
+ }
+}
+
+
diff --git a/core/applets/volumeapplet/volume.h b/core/applets/volumeapplet/volume.h
new file mode 100644
index 0000000..5704cad
--- a/dev/null
+++ b/core/applets/volumeapplet/volume.h
@@ -0,0 +1,75 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __VOLUME_APPLET_H__
+#define __VOLUME_APPLET_H__
+
+
+#include <qwidget.h>
+#include <qframe.h>
+#include <qpixmap.h>
+#include <qguardedptr.h>
+
+class QSlider;
+class QCheckBox;
+
+class VolumeControl : public QFrame
+{
+ Q_OBJECT
+public:
+ VolumeControl( QWidget *parent=0, const char *name=0 );
+
+public:
+ QSlider *slider;
+ QCheckBox *muteBox;
+
+private:
+ void keyPressEvent( QKeyEvent * );
+};
+
+class VolumeApplet : public QWidget
+{
+ Q_OBJECT
+public:
+ VolumeApplet( QWidget *parent = 0, const char *name=0 );
+ ~VolumeApplet();
+ bool isMute( ) { return muted; }
+ int percent( ) { return volumePercent; }
+
+public slots:
+ void volumeChanged( bool muted );
+ void setVolume( int percent );
+ void sliderMoved( int percent );
+ void mute( bool );
+
+private:
+ void readSystemVolume();
+ void writeSystemVolume();
+ void mousePressEvent( QMouseEvent * );
+ void paintEvent( QPaintEvent* );
+
+private:
+ int volumePercent;
+ bool muted;
+ QPixmap volumePixmap;
+};
+
+
+#endif // __VOLUME_APPLET_H__
+
diff --git a/core/applets/volumeapplet/volumeapplet.pro b/core/applets/volumeapplet/volumeapplet.pro
new file mode 100644
index 0000000..a33cf81
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeapplet.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = volume.h volumeappletimpl.h
+SOURCES = volume.cpp volumeappletimpl.cpp
+TARGET = volumeapplet
+DESTDIR = ../../plugins/applets
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libvolumeapplet.ts
diff --git a/core/applets/volumeapplet/volumeappletimpl.cpp b/core/applets/volumeapplet/volumeappletimpl.cpp
new file mode 100644
index 0000000..676ab61
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeappletimpl.cpp
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "volume.h"
+#include "volumeappletimpl.h"
+
+
+VolumeAppletImpl::VolumeAppletImpl()
+ : volume(0), ref(0)
+{
+}
+
+VolumeAppletImpl::~VolumeAppletImpl()
+{
+ delete volume;
+}
+
+QWidget *VolumeAppletImpl::applet( QWidget *parent )
+{
+ if ( !volume )
+ volume = new VolumeApplet( parent );
+ return volume;
+}
+
+int VolumeAppletImpl::position() const
+{
+ return 6;
+}
+
+QRESULT VolumeAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( VolumeAppletImpl )
+}
+
+
diff --git a/core/applets/volumeapplet/volumeappletimpl.h b/core/applets/volumeapplet/volumeappletimpl.h
new file mode 100644
index 0000000..9b2952a
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeappletimpl.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef VOLUMEAPPLETIMPL_H
+#define VOLUMEAPPLETIMPL_H
+
+#include <qpe/taskbarappletinterface.h>
+
+class VolumeApplet;
+
+class VolumeAppletImpl : public TaskbarAppletInterface
+{
+public:
+ VolumeAppletImpl();
+ virtual ~VolumeAppletImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ VolumeApplet *volume;
+ ulong ref;
+};
+
+#endif