summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/applets/volumeapplet/volume.cpp210
-rw-r--r--core/applets/volumeapplet/volume.h40
2 files changed, 81 insertions, 169 deletions
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
index 445cc8b..ee9eab3 100644
--- a/core/applets/volumeapplet/volume.cpp
+++ b/core/applets/volumeapplet/volume.cpp
@@ -1,7 +1,7 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the 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
@@ -33,78 +33,66 @@
#include <qlayout.h>
#include <qframe.h>
#include <qpixmap.h>
-#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qtimer.h>
-VolumeControl::VolumeControl( bool showMic, QWidget *parent, const char *name )
+#define RATE_TIMER_INTERVAL 100
+// Ten times per second is fine (RATE_TIMER_INTERVAL 100). A shorter time
+// results in "hanging" buttons on the iPAQ due to quite high CPU consumption.
+
+VolumeControl::VolumeControl( 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;
+ QVBoxLayout *vboxButtons = new QVBoxLayout;
+ upButton = new QPushButton( this );
+ upButton->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
+ upButton->setPixmap( Resource::loadPixmap( "up" ) );
+ downButton = new QPushButton( this );
+ downButton->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
+ downButton->setPixmap( Resource::loadPixmap( "down" ) );
+ vboxButtons->setSpacing( 2 );
+ vboxButtons->addWidget( upButton );
+ vboxButtons->addWidget( downButton );
+
+ QHBoxLayout *hbox = new QHBoxLayout;
slider = new QSlider( 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);
- }
+ hbox->setSpacing( 4 );
+ hbox->addWidget( slider );
+ hbox->addLayout( vboxButtons );
+ QVBoxLayout *vbox = new QVBoxLayout( this );
+ QFrame *separator = new QFrame( this );
+ separator->setFrameStyle( QFrame::HLine | QFrame::Sunken );
muteBox = new QCheckBox( tr("Mute"), this );
muteBox->setFocusPolicy( QWidget::NoFocus );
-
- vbox->setMargin( 3 );
- vbox->setSpacing( 0 );
- if (showMic == TRUE)
- vbox->addLayout( hbox, 1 );
- else
- vbox->addLayout( sbox, 1);
+ vbox->setSpacing( 4 );
+ vbox->setMargin( 6 );
+ vbox->addLayout( hbox );
+ vbox->addWidget( separator );
vbox->addWidget( muteBox, 0, Qt::AlignVCenter | Qt::AlignHCenter );
- setFixedHeight( 120 );
+ setFixedHeight( 100 );
setFixedWidth( sizeHint().width() );
setFocusPolicy(QWidget::NoFocus);
+
+ connect( upButton, SIGNAL( pressed() ), this, SLOT( ButtonChanged() ) );
+ connect( upButton, SIGNAL( released() ), this, SLOT( ButtonChanged() ) );
+ connect( downButton, SIGNAL( pressed() ), this, SLOT( ButtonChanged() ) );
+ connect( downButton, SIGNAL( released() ), this, SLOT( ButtonChanged() ) );
+
+ rateTimer = new QTimer(this);
+ connect( rateTimer, SIGNAL( timeout() ), this, SLOT( rateTimerDone() ) );
}
void VolumeControl::keyPressEvent( QKeyEvent *e)
{
- switch(e->key())
- {
+ switch(e->key()) {
case Key_Up:
slider->subtractStep();
break;
@@ -120,83 +108,56 @@ void VolumeControl::keyPressEvent( QKeyEvent *e)
}
}
+void VolumeControl::ButtonChanged()
+{
+ if ( upButton->isDown() || downButton->isDown() )
+ {
+ rateTimerDone(); // Call it one time manually, otherwise it wont get
+ // called at all when a button is pressed for a time
+ // shorter than RATE_TIMER_INTERVAL.
+ rateTimer->start( RATE_TIMER_INTERVAL, false );
+ }
+ else
+ rateTimer->stop();
+}
+
+void VolumeControl::rateTimerDone()
+{
+ if ( upButton->isDown() )
+ slider->setValue( slider->value() - 2 );
+ else // downButton->isDown()
+ slider->setValue( slider->value() + 2 );
+}
+
//===========================================================================
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
- micMuted = FALSE; // ### read from pref
-
- advancedTimer = new QTimer(this);
-
+ volumePercent = 50; // ### read from pref
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(showMic);
+ VolumeControl *vc = new VolumeControl;
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() - 120 );
+ vc->move( curPos.x()-(vc->sizeHint().width()-width())/2, curPos.y() - 100 );
vc->show();
-
- advancedTimer->stop();
}
void VolumeApplet::volumeChanged( bool nowMuted )
@@ -218,33 +179,19 @@ void VolumeApplet::volumeChanged( bool nowMuted )
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");
@@ -252,13 +199,6 @@ void VolumeApplet::readSystemVolume()
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
@@ -268,13 +208,6 @@ void VolumeApplet::setVolume( int percent )
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()
{
{
@@ -288,19 +221,6 @@ void VolumeApplet::writeSystemVolume()
#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);
diff --git a/core/applets/volumeapplet/volume.h b/core/applets/volumeapplet/volume.h
index cb0be72..a982f53 100644
--- a/core/applets/volumeapplet/volume.h
+++ b/core/applets/volumeapplet/volume.h
@@ -1,7 +1,7 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the 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
@@ -25,25 +25,33 @@
#include <qframe.h>
#include <qpixmap.h>
#include <qguardedptr.h>
-#include <qtimer.h>
class QSlider;
class QCheckBox;
+class QPushButton;
+class QTimer;
class VolumeControl : public QFrame
{
Q_OBJECT
public:
- VolumeControl( bool showMic=FALSE, QWidget *parent=0, const char *name=0 );
+ VolumeControl( QWidget *parent=0, const char *name=0 );
public:
QSlider *slider;
- QSlider *mic;
QCheckBox *muteBox;
private:
void keyPressEvent( QKeyEvent * );
- void createView(bool showMic = FALSE);
+
+private slots:
+ void ButtonChanged();
+ void rateTimerDone();
+
+private:
+ QPushButton *upButton;
+ QPushButton *downButton;
+ QTimer *rateTimer;
};
class VolumeApplet : public QWidget
@@ -57,37 +65,21 @@ public:
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, micPercent;
- bool muted, micMuted;
+ int volumePercent;
+ bool muted;
QPixmap volumePixmap;
- QTimer *advancedTimer;
};
#endif // __VOLUME_APPLET_H__
-