summaryrefslogtreecommitdiff
authorjeremy <jeremy>2002-02-10 13:20:54 (UTC)
committer jeremy <jeremy>2002-02-10 13:20:54 (UTC)
commitd0d626304ffb0de247e22760bc342e72406e301a (patch) (side-by-side diff)
treef547ac0cfc33f1d55da1f0743df72f2f7498efa1
parent16db9b9928f9111f384c202c43a95fac88279b3d (diff)
downloadopie-d0d626304ffb0de247e22760bc342e72406e301a.zip
opie-d0d626304ffb0de247e22760bc342e72406e301a.tar.gz
opie-d0d626304ffb0de247e22760bc342e72406e301a.tar.bz2
Added support for the new setMic and micChange messages in opie-base.
Alos modified the volume control and mic control to read the last set position (as recorded in Sound.conf) instead of always defaulting the sound to 50% as before the change.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/applets/volumeapplet/opie-volumeapplet.control2
-rw-r--r--core/applets/volumeapplet/volume.cpp154
-rw-r--r--core/applets/volumeapplet/volume.h24
3 files changed, 162 insertions, 18 deletions
diff --git a/core/applets/volumeapplet/opie-volumeapplet.control b/core/applets/volumeapplet/opie-volumeapplet.control
index a65cf6d..a2c0363 100644
--- a/core/applets/volumeapplet/opie-volumeapplet.control
+++ b/core/applets/volumeapplet/opie-volumeapplet.control
@@ -1,9 +1,9 @@
Files: plugins/applets/libvolumeapplet.so*
Priority: optional
Section: opie/taskbar
Maintainer: Warwick Allison <warwick@trolltech.com>
Architecture: arm
-Version: $QPE_VERSION-$SUB_VERSION
+Version: $QPE_VERSION-$SUB_VERSION.1
Depends: opie-base ($QPE_VERSION)
Description: Volume applet
Volume applet for the Opie environment taskbar.
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
index 35dbf22..445cc8b 100644
--- a/core/applets/volumeapplet/volume.cpp
+++ b/core/applets/volumeapplet/volume.cpp
@@ -1,199 +1,325 @@
/**********************************************************************
** 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>
+#include <qlabel.h>
-
-VolumeControl::VolumeControl( QWidget *parent, const char *name )
+VolumeControl::VolumeControl( bool showMic, QWidget *parent, const char *name )
: QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup )
{
setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+ createView(showMic);
+}
+
+void VolumeControl::createView(bool showMic)
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
QVBoxLayout *vbox = new QVBoxLayout( this );
+ QHBoxLayout *hbox = NULL;
+
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 );
+ slider->setValue(cfg.readNumEntry("Volume"));
+
+ QVBoxLayout *sbox = new QVBoxLayout(this);
+ sbox->setMargin( 3 );
+ sbox->setSpacing( 3 );
+ sbox->addWidget( new QLabel("Vol", this) , 0, Qt::AlignVCenter | Qt::AlignHCenter );
+ sbox->addWidget( slider, 0, Qt::AlignVCenter | Qt::AlignHCenter );
+
+ if (showMic == TRUE)
+ {
+ mic = new QSlider(this);
+ mic->setRange( 0, 100 );
+ mic->setTickmarks( QSlider::Both );
+ mic->setTickInterval( 20 );
+ mic->setFocusPolicy( QWidget::NoFocus );
+ mic->setValue(cfg.readNumEntry("Mic"));
+
+ QVBoxLayout *mbox = new QVBoxLayout(this);
+ mbox->setMargin( 3 );
+ mbox->setSpacing( 3 );
+ mbox->addWidget( new QLabel("Mic", this) , 0, Qt::AlignVCenter | Qt::AlignHCenter );
+ mbox->addWidget( mic, 0, Qt::AlignVCenter | Qt::AlignHCenter );
+
+ hbox = new QHBoxLayout( this );
+ hbox->setMargin( 3 );
+ hbox->setSpacing( 3 );
+ hbox->addLayout( sbox, 1);
+ hbox->addLayout( mbox, 1);
+ }
+
+ muteBox = new QCheckBox( tr("Mute"), this );
muteBox->setFocusPolicy( QWidget::NoFocus );
- vbox->setMargin( 6 );
- vbox->setSpacing( 3 );
- vbox->addWidget( slider, 0, Qt::AlignVCenter | Qt::AlignHCenter );
- vbox->addWidget( muteBox );
- setFixedHeight( 100 );
+
+ vbox->setMargin( 3 );
+ vbox->setSpacing( 0 );
+ if (showMic == TRUE)
+ vbox->addLayout( hbox, 1 );
+ else
+ vbox->addLayout( sbox, 1);
+ vbox->addWidget( muteBox, 0, Qt::AlignVCenter | Qt::AlignHCenter );
+
+ setFixedHeight( 120 );
setFixedWidth( sizeHint().width() );
setFocusPolicy(QWidget::NoFocus);
}
void VolumeControl::keyPressEvent( QKeyEvent *e)
{
- switch(e->key()) {
+ 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 )
{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+
setFixedHeight( 18 );
setFixedWidth( 14 );
+
volumePixmap = Resource::loadPixmap( "volume" );
+
+ volumePercent = cfg.readNumEntry("Volume",50);
+ micPercent = cfg.readNumEntry("Mic", 50);
muted = FALSE; // ### read from pref
- volumePercent = 50; // ### read from pref
+ micMuted = FALSE; // ### read from pref
+
+ advancedTimer = new QTimer(this);
+
connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
+ connect( qApp, SIGNAL( micChanged(bool) ), this, SLOT ( micChanged(bool) ) );
+ connect( advancedTimer, SIGNAL( timeout() ),this, SLOT( advVolControl()) );
+
writeSystemVolume();
+ writeSystemMic();
}
VolumeApplet::~VolumeApplet()
{
}
+void VolumeApplet::keyPressEvent ( QKeyEvent * e )
+{
+ QString s;
+ s.setNum(e->key());
+ qWarning(s);
+}
void VolumeApplet::mousePressEvent( QMouseEvent *)
{
+ advancedTimer->start( 750, TRUE );
+}
+
+void VolumeApplet::mouseReleaseEvent( QMouseEvent * )
+{
+ showVolControl(FALSE);
+}
+
+void VolumeApplet::advVolControl()
+{
+ showVolControl(TRUE);
+}
+
+void VolumeApplet::showVolControl(bool showMic)
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ volumePercent = cfg.readNumEntry("Volume",50);
+ micPercent = cfg.readNumEntry("Mic", 50);
+
// Create a small volume control window to adjust the volume with
- VolumeControl *vc = new VolumeControl;
+ VolumeControl *vc = new VolumeControl(showMic);
vc->slider->setValue( 100 - volumePercent );
+ if (showMic)
+ {
+ vc->mic->setValue( 100 - micPercent );
+ connect( vc->mic, SIGNAL( valueChanged( int ) ), this, SLOT( micMoved( int ) ) );
+ }
+
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->move( curPos.x()-(vc->sizeHint().width()-width())/2, curPos.y() - 120 );
vc->show();
+
+ advancedTimer->stop();
}
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::micChanged( bool nowMuted )
+{
+ if (!nowMuted)
+ readSystemMic();
+ micMuted = nowMuted;
+}
void VolumeApplet::mute( bool toggled )
{
muted = toggled;
+
// clear if removing mute
repaint( !toggled );
writeSystemVolume();
}
void VolumeApplet::sliderMoved( int percent )
{
setVolume( 100 - percent );
}
+void VolumeApplet::micMoved( int percent )
+{
+ setMic( 100 - percent );
+}
void VolumeApplet::readSystemVolume()
{
Config cfg("Sound");
cfg.setGroup("System");
volumePercent = cfg.readNumEntry("Volume");
}
+void VolumeApplet::readSystemMic()
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ micPercent = cfg.readNumEntry("Mic");
+}
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::setMic( int percent )
+{
+ // clamp volume percent to be between 0 and 100
+ micPercent = (percent < 0) ? 0 : ((percent > 100) ? 100 : percent);
+ writeSystemMic();
+}
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::writeSystemMic()
+{
+ {
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ cfg.writeEntry("Mic",micPercent);
+ }
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+ // Send notification that the volume has changed
+ QCopEnvelope( "QPE/System", "micChange(bool)" ) << micMuted;
+#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
index 5704cad..cb0be72 100644
--- a/core/applets/volumeapplet/volume.h
+++ b/core/applets/volumeapplet/volume.h
@@ -1,75 +1,93 @@
/**********************************************************************
** 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>
+#include <qtimer.h>
class QSlider;
class QCheckBox;
class VolumeControl : public QFrame
{
Q_OBJECT
public:
- VolumeControl( QWidget *parent=0, const char *name=0 );
+ VolumeControl( bool showMic=FALSE, QWidget *parent=0, const char *name=0 );
public:
QSlider *slider;
+ QSlider *mic;
QCheckBox *muteBox;
private:
void keyPressEvent( QKeyEvent * );
+ void createView(bool showMic = FALSE);
};
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 micChanged( bool muted );
+
void setVolume( int percent );
+ void setMic( int percent );
+
void sliderMoved( int percent );
+ void micMoved( int percent );
void mute( bool );
+ void showVolControl(bool showMic = FALSE);
+ void advVolControl();
+
private:
void readSystemVolume();
+ void readSystemMic();
+
void writeSystemVolume();
+ void writeSystemMic();
+
+ void keyPressEvent ( QKeyEvent * e );
void mousePressEvent( QMouseEvent * );
+ void mouseReleaseEvent( QMouseEvent *);
void paintEvent( QPaintEvent* );
private:
- int volumePercent;
- bool muted;
+ int volumePercent, micPercent;
+ bool muted, micMuted;
QPixmap volumePixmap;
+ QTimer *advancedTimer;
};
#endif // __VOLUME_APPLET_H__