summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/volumeapplet/volume.cpp296
-rw-r--r--core/applets/volumeapplet/volume.h47
2 files changed, 246 insertions, 97 deletions
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
index ee9eab3..344f86f 100644
--- a/core/applets/volumeapplet/volume.cpp
+++ b/core/applets/volumeapplet/volume.cpp
@@ -1,5 +1,5 @@
/**********************************************************************
-** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
-** This file is part of the Qtopia Environment.
+** This file is part of Qtopia Environment.
**
@@ -20,2 +20,3 @@
+
#include "volume.h"
@@ -35,2 +36,4 @@
#include <qpixmap.h>
+#include <qlabel.h>
+
#include <qpushbutton.h>
@@ -42,8 +45,19 @@
-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 );
+ setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+ createView(showMic);
+}
+
+void VolumeControl::createView(bool showMic)
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+//showMic = TRUE;
+ QHBoxLayout *hboxLayout = new QHBoxLayout(this);
+ hboxLayout->setMargin( 3 );
+ hboxLayout->setSpacing( 0);
- QVBoxLayout *vboxButtons = new QVBoxLayout;
+ QVBoxLayout *vboxButtons = new QVBoxLayout(this);
upButton = new QPushButton( this );
@@ -55,2 +69,3 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name )
vboxButtons->setSpacing( 2 );
+
vboxButtons->addWidget( upButton );
@@ -58,3 +73,5 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name )
- QHBoxLayout *hbox = new QHBoxLayout;
+ QVBoxLayout *vbox = new QVBoxLayout( this );
+ QHBoxLayout *hbox = NULL;
+
slider = new QSlider( this );
@@ -64,21 +81,48 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name )
slider->setFocusPolicy( QWidget::NoFocus );
- hbox->setSpacing( 4 );
- hbox->addWidget( slider );
- hbox->addLayout( vboxButtons );
+ slider->setValue(cfg.readNumEntry("Volume"));
- QVBoxLayout *vbox = new QVBoxLayout( this );
- QFrame *separator = new QFrame( this );
- separator->setFrameStyle( QFrame::HLine | QFrame::Sunken );
+ 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->setSpacing( 4 );
- vbox->setMargin( 6 );
- vbox->addLayout( hbox );
- vbox->addWidget( separator );
+
+ 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( 100 );
+ hboxLayout->addLayout( vboxButtons );
+ hboxLayout->addLayout(vbox);
+
+ setFixedHeight( 120 );
setFixedWidth( sizeHint().width() );
setFocusPolicy(QWidget::NoFocus);
-
connect( upButton, SIGNAL( pressed() ), this, SLOT( ButtonChanged() ) );
@@ -92,18 +136,19 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name )
-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;
- }
+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;
+ }
}
@@ -136,9 +181,23 @@ VolumeApplet::VolumeApplet( QWidget *parent, const char *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();
+ 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);
+
+ 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();
}
@@ -149,13 +208,47 @@ VolumeApplet::~VolumeApplet()
-void VolumeApplet::mousePressEvent( QMouseEvent *)
+void VolumeApplet::keyPressEvent ( QKeyEvent * e )
{
- // 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();
+ 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);
+ 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->show();
+
+ advancedTimer->stop();
}
@@ -171,5 +264,5 @@ void VolumeApplet::volumeChanged( bool nowMuted )
if ( muted != nowMuted ) {
- muted = nowMuted;
- repaint( TRUE );
- return;
+ muted = nowMuted;
+ repaint( TRUE );
+ return;
}
@@ -178,3 +271,10 @@ void VolumeApplet::volumeChanged( bool nowMuted )
if ( previousVolume != volumePercent )
- repaint( 2, height() - 3, width() - 4, 2, FALSE );
+ repaint( 2, height() - 3, width() - 4, 2, FALSE );
+}
+
+void VolumeApplet::micChanged( bool nowMuted )
+{
+ if (!nowMuted)
+ readSystemMic();
+ micMuted = nowMuted;
}
@@ -184,2 +284,3 @@ void VolumeApplet::mute( bool toggled )
muted = toggled;
+
// clear if removing mute
@@ -189,2 +290,3 @@ void VolumeApplet::mute( bool toggled )
+
void VolumeApplet::sliderMoved( int percent )
@@ -194,2 +296,7 @@ void VolumeApplet::sliderMoved( int percent )
+void VolumeApplet::micMoved( int percent )
+{
+ setMic( 100 - percent );
+}
+
void VolumeApplet::readSystemVolume()
@@ -201,2 +308,9 @@ void VolumeApplet::readSystemVolume()
+void VolumeApplet::readSystemMic()
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ micPercent = cfg.readNumEntry("Mic");
+}
+
void VolumeApplet::setVolume( int percent )
@@ -210,12 +324,19 @@ void VolumeApplet::setVolume( int percent )
+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);
- }
+ {
+ 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;
+ // Send notification that the volume has changed
+ QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted;
#endif
@@ -223,23 +344,36 @@ void VolumeApplet::writeSystemVolume()
-void VolumeApplet::paintEvent( QPaintEvent* )
+void VolumeApplet::writeSystemMic()
{
- 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 );
+ {
+ 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
+}
- 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 );
- }
+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 a982f53..9fc12d8 100644
--- a/core/applets/volumeapplet/volume.h
+++ b/core/applets/volumeapplet/volume.h
@@ -1,5 +1,5 @@
/**********************************************************************
-** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
-** This file is part of the Qtopia Environment.
+** This file is part of Qtopia Environment.
**
@@ -19,2 +19,3 @@
**********************************************************************/
+
#ifndef __VOLUME_APPLET_H__
@@ -27,2 +28,3 @@
#include <qguardedptr.h>
+#include <qtimer.h>
@@ -30,4 +32,2 @@ class QSlider;
class QCheckBox;
-class QPushButton;
-class QTimer;
@@ -37,3 +37,3 @@ class VolumeControl : public QFrame
public:
- VolumeControl( QWidget *parent=0, const char *name=0 );
+ VolumeControl( bool showMic=FALSE, QWidget *parent=0, const char *name=0 );
@@ -41,2 +41,3 @@ public:
QSlider *slider;
+ QSlider *mic;
QCheckBox *muteBox;
@@ -44,4 +45,8 @@ public:
private:
+ QPushButton *upButton;
+ QPushButton *downButton;
+ QTimer *rateTimer;
+
void keyPressEvent( QKeyEvent * );
-
+ void createView(bool showMic = FALSE);
private slots:
@@ -49,7 +54,3 @@ private slots:
void rateTimerDone();
-
-private:
- QPushButton *upButton;
- QPushButton *downButton;
- QTimer *rateTimer;
+
};
@@ -67,3 +68,3 @@ public slots:
void volumeChanged( bool muted );
- void setVolume( int percent );
+ void micChanged( bool muted );
void sliderMoved( int percent );
@@ -71,3 +72,15 @@ public slots:
+ void micMoved( int percent );
+ void setVolume( int percent );
+ void setMic( int percent );
+
+ void showVolControl(bool showMic = FALSE);
+ void advVolControl();
+
private:
+ int volumePercent, micPercent;
+ bool muted, micMuted;
+ QPixmap volumePixmap;
+ QTimer *advancedTimer;
+
void readSystemVolume();
@@ -77,6 +90,7 @@ private:
-private:
- int volumePercent;
- bool muted;
- QPixmap volumePixmap;
+ void readSystemMic();
+ void keyPressEvent ( QKeyEvent * e );
+ void mouseReleaseEvent( QMouseEvent *);
+ void writeSystemMic();
+
};
@@ -85 +99,2 @@ private:
#endif // __VOLUME_APPLET_H__
+