Diffstat (limited to 'core/applets/volumeapplet/volume.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/applets/volumeapplet/volume.cpp | 154 |
1 files changed, 140 insertions, 14 deletions
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 @@ -35,5 +35,5 @@ #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 ) @@ -41,6 +41,14 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name ) 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 ); @@ -49,8 +57,44 @@ VolumeControl::VolumeControl( QWidget *parent, const char *name ) 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() ); @@ -61,3 +105,4 @@ void VolumeControl::keyPressEvent( QKeyEvent *e) { - switch(e->key()) { + switch(e->key()) + { case Key_Up: @@ -82,9 +127,23 @@ VolumeApplet::VolumeApplet( QWidget *parent, const char *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(); } @@ -95,7 +154,39 @@ 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 ); @@ -104,4 +195,6 @@ void VolumeApplet::mousePressEvent( QMouseEvent *) 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(); } @@ -127,2 +220,8 @@ void VolumeApplet::volumeChanged( bool nowMuted ) +void VolumeApplet::micChanged( bool nowMuted ) +{ + if (!nowMuted) + readSystemMic(); + micMuted = nowMuted; +} @@ -131,2 +230,3 @@ void VolumeApplet::mute( bool toggled ) muted = toggled; + // clear if removing mute @@ -142,2 +242,6 @@ void VolumeApplet::sliderMoved( int percent ) +void VolumeApplet::micMoved( int percent ) +{ + setMic( 100 - percent ); +} @@ -150,2 +254,8 @@ void VolumeApplet::readSystemVolume() +void VolumeApplet::readSystemMic() +{ + Config cfg("Sound"); + cfg.setGroup("System"); + micPercent = cfg.readNumEntry("Mic"); +} @@ -160,2 +270,8 @@ 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(); +} @@ -174,2 +290,14 @@ void VolumeApplet::writeSystemVolume() +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 +} @@ -197,3 +325 @@ void VolumeApplet::paintEvent( QPaintEvent* ) } - - |