author | jeremy <jeremy> | 2002-02-10 13:20:54 (UTC) |
---|---|---|
committer | jeremy <jeremy> | 2002-02-10 13:20:54 (UTC) |
commit | d0d626304ffb0de247e22760bc342e72406e301a (patch) (side-by-side diff) | |
tree | f547ac0cfc33f1d55da1f0743df72f2f7498efa1 | |
parent | 16db9b9928f9111f384c202c43a95fac88279b3d (diff) | |
download | opie-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.
-rw-r--r-- | core/applets/volumeapplet/opie-volumeapplet.control | 2 | ||||
-rw-r--r-- | core/applets/volumeapplet/volume.cpp | 154 | ||||
-rw-r--r-- | core/applets/volumeapplet/volume.h | 24 |
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__ |