-rw-r--r-- | core/applets/volumeapplet/volume.cpp | 296 | ||||
-rw-r--r-- | core/applets/volumeapplet/volume.h | 47 |
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__ + |