author | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
commit | 15318cad33835e4e2dc620d033e43cd930676cdd (patch) (side-by-side diff) | |
tree | c2fa0399a2c47fda8e2cd0092c73a809d17f68eb /core/applets/volumeapplet | |
download | opie-15318cad33835e4e2dc620d033e43cd930676cdd.zip opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2 |
Initial revision
-rw-r--r-- | core/applets/volumeapplet/.cvsignore | 3 | ||||
-rw-r--r-- | core/applets/volumeapplet/Makefile.in | 115 | ||||
-rw-r--r-- | core/applets/volumeapplet/qpe-volumeapplet.control | 9 | ||||
-rwxr-xr-x | core/applets/volumeapplet/qpe-volumeapplet.postinst | 2 | ||||
-rwxr-xr-x | core/applets/volumeapplet/qpe-volumeapplet.postrm | 2 | ||||
-rw-r--r-- | core/applets/volumeapplet/volume.cpp | 199 | ||||
-rw-r--r-- | core/applets/volumeapplet/volume.h | 75 | ||||
-rw-r--r-- | core/applets/volumeapplet/volumeapplet.pro | 12 | ||||
-rw-r--r-- | core/applets/volumeapplet/volumeappletimpl.cpp | 64 | ||||
-rw-r--r-- | core/applets/volumeapplet/volumeappletimpl.h | 44 |
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 |