Diffstat (limited to 'core/applets/volumeapplet/volume.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/applets/volumeapplet/volume.cpp | 744 |
1 files changed, 464 insertions, 280 deletions
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp index d871a35..a000087 100644 --- a/core/applets/volumeapplet/volume.cpp +++ b/core/applets/volumeapplet/volume.cpp @@ -1,451 +1,635 @@ /********************************************************************** ** 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 <stdio.h> #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> +#include <qtoolbutton.h> #include <qpushbutton.h> #include <qtimer.h> +#include <opie/odevice.h> + +#include "oledbox.h" + #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( bool showMic, QWidget *parent, const char *name ) - : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup ) + +/* XPM */ +static const char * vol_xpm[] = { +"20 20 3 1", +" c None", +". c #0000FF", +"+ c #000000", +" ", +" . ", +" . . . . ", +" . . . . . . ", +" . . . . . . . ", +" . . ..... . . ", +" . ... ..... ... ", +" ........... .... ", +" ................. ", +"++++++++++++++++++++", +" .................. ", +" . ............. . ", +" . ..... ....... ", +" . ... ..... . ", +" . ... ..... . ", +" . ... ..... ", +" . . . . . ", +" . . . ", +" . . . ", +" "}; +/* XPM */ +static const char * mic_xpm[] = { +"20 20 21 1", +" c None", +". c #000000", +"+ c #EEEEEE", +"@ c #B4B6B4", +"# c #8B8D8B", +"$ c #D5D6D5", +"% c #E6E6E6", +"& c #9C9D9C", +"* c #6A696A", +"= c #E6E2E6", +"- c #F6F2F6", +"; c #CDC6CD", +"> c #737573", +", c #4A484A", +"' c #DEDEDE", +") c #F6EEF6", +"! c #414041", +"~ c #202020", +"{ c #ACAEAC", +"] c #838583", +"^ c #6A656A", +" ", +" .... ", +" .+@+#. ", +" ..$%&%*. ", +" .=-.;=>=,. ", +" .'+).&+!+. ", +" .+;+;.~+~. ", +" ..%{%,.... ", +" ..&=>=~.. ", +" .+..]^,.. ", +" .+....... ", +" .%... ", +" .=... ", +" .+... ", +" .+... ", +" .... ", +" .... ", +" .. ", +" . ", +". "}; + +/* XPM */ +static const char * alarm_xpm[] = { +"20 20 33 1", +" c None", +". c #080602", +"+ c #AAA602", +"@ c #252002", +"# c #434202", +"$ c #795602", +"% c #C3C20D", +"& c #DADAC2", +"* c #826002", +"= c #740502", +"- c #D6D602", +"; c #322E02", +"> c #826A02", +", c #F1F195", +"' c #959215", +") c #423602", +"! c #4B0302", +"~ c #844315", +"{ c #AAAA2A", +"] c #E2DE42", +"^ c #BA7E04", +"/ c #7F7502", +"( c #828276", +"_ c #FEFE4E", +": c #7D1902", +"< c #989656", +"[ c #260B02", +"} c #F7F7D8", +"| c #DCDA5A", +"1 c #823102", +"2 c #B1AC6B", +"3 c #F7F710", +"4 c #838204", +" ", +" ", +" 4'4/ ", +" /-^= ", +" 42{4>4 ", +" '2|+*$44 ", +" +2&3+$1*44 ", +" (%_}_+/$:>/4 ", +" 4%_}3+#;>:*4 ", +" 4%_}&+#[1$/4 ", +" 4%_,2')[~~>4 ", +" 4%33'4#@~1>4 ", +" 4%3344#[:>/4 ", +" 42&_3'4#@>:*44 ", +" 42|}}3'4#[;$)$44 ", +"444{]]2^~~:!!#.@##/ ", +"4444-%*:==!!=...../ ", +" /:[.. ", +" /@. ", +" "}; + +VolumeControl::VolumeControl ( VolumeApplet *icon, bool /*showMic*/, QWidget *parent, const char *name ) + : QFrame ( parent, name, WStyle_StaysOnTop | WType_Popup ) { - setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); - createView(showMic); + m_icon = icon; + + bool has_wav_alarm = false; + + switch ( ODevice::inst ( )-> model ( )) { + case OMODEL_iPAQ_H31xx: + case OMODEL_iPAQ_H36xx: + case OMODEL_iPAQ_H37xx: + case OMODEL_iPAQ_H38xx: + has_wav_alarm = true; + break; + default: + break; } -void VolumeControl::createView(bool showMic) -{ - Config cfg("qpe"); - cfg.setGroup("Volume"); -//showMic = TRUE; - QHBoxLayout *hboxLayout = new QHBoxLayout(this); - hboxLayout->setMargin( 3 ); - hboxLayout->setSpacing( 0); - QVBoxLayout *vboxButtons = new QVBoxLayout(this); + setFrameStyle ( QFrame::PopupPanel | QFrame::Raised ); + + QGridLayout *grid = new QGridLayout ( this, 1, 1, 6, 4 ); + grid-> setSpacing ( 4 ); + grid-> setMargin ( 6 ); + + QVBoxLayout *vbox; + QLabel *l; + + vbox = new QVBoxLayout ( ); + vbox-> setSpacing ( 4 ); + grid-> addLayout ( vbox, 1, 0 ); + upButton = new QPushButton( this ); upButton->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) ); upButton->setPixmap( Resource::loadPixmap( "up" ) ); + upButton-> setFocusPolicy ( QWidget::NoFocus ); + + vbox-> addWidget ( upButton ); + downButton = new QPushButton( this ); downButton->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) ); downButton->setPixmap( Resource::loadPixmap( "down" ) ); - vboxButtons->setSpacing( 2 ); - - upButton->setFixedHeight(26); - downButton->setFixedHeight(26); - - vboxButtons->addWidget( upButton ); - vboxButtons->addWidget( downButton ); - - QVBoxLayout *vbox = new QVBoxLayout( this ); - QHBoxLayout *hbox = NULL; - - slider = new QSlider( this ); - slider->setRange( 0, 100 ); - slider->setTickmarks( QSlider::Both ); - slider->setTickInterval( 20 ); - slider->setFocusPolicy( QWidget::NoFocus ); - slider->setValue(cfg.readNumEntry("VolumePercent")); - - 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 ); - - QVBoxLayout *klbox = new QVBoxLayout(this); - - QLabel *Label1; - Label1 = new QLabel( this, "Label1" ); - Label1->setText( tr( "Enable Sounds for:" )); - - alarmSound = new QCheckBox( tr("Alarm Sound"), this ); - alarmSound->setFocusPolicy( QWidget::NoFocus ); - - keyclicks = new QCheckBox( tr("Key Clicks"), this ); - keyclicks->setFocusPolicy( QWidget::NoFocus ); - - screentaps = new QCheckBox( tr("Screen taps"), this ); - screentaps->setFocusPolicy( QWidget::NoFocus ); - - - keyclicks->setChecked( cfg.readBoolEntry("KeySound",0)); - screentaps->setChecked( cfg.readBoolEntry("TouchSound",0)); - alarmSound->setChecked( cfg.readBoolEntry("AlarmSound",1)); - - klbox->setMargin( 3 ); - klbox->setSpacing( 0 ); - klbox->addWidget( Label1, 1); - klbox->addWidget( alarmSound, 1); - klbox->addWidget( keyclicks, 1); - klbox->addWidget( screentaps, 1); - 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 ); - - hboxLayout->addLayout( vboxButtons ); - hboxLayout->addLayout( vbox); - hboxLayout->addLayout( klbox); - - - setFixedHeight( 120); -// setFixedWidth( sizeHint().width() ); + downButton-> setFocusPolicy ( QWidget::NoFocus ); + + vbox-> addWidget ( downButton ); + + volSlider = new QSlider ( this ); + volSlider-> setRange ( 0, 100 ); + volSlider-> setTickmarks ( QSlider::Both ); + volSlider-> setTickInterval ( 20 ); + volSlider-> setFocusPolicy ( QWidget::NoFocus ); + + l = new QLabel ( this ); + l-> setPixmap ( QPixmap ( vol_xpm )); + + grid-> addWidget ( l, 0, 1, AlignCenter ); + grid-> addWidget ( volSlider, 1, 1, AlignCenter ); + + volLed = new OLedBox ( green, this ); + volLed-> setFocusPolicy ( QWidget::NoFocus ); + volLed-> setFixedSize ( 16, 16 ); + + grid-> addWidget ( volLed, 2, 1, AlignCenter ); + + micSlider = new QSlider ( this ); + micSlider-> setRange ( 0, 100 ); + micSlider-> setTickmarks ( QSlider::Both ); + micSlider-> setTickInterval ( 20 ); + micSlider-> setFocusPolicy ( QWidget::NoFocus ); + + l = new QLabel ( this ); + l-> setPixmap ( QPixmap ( mic_xpm )); + + grid-> addWidget ( l, 0, 2, AlignCenter ); + grid-> addWidget ( micSlider, 1, 2, AlignCenter ); + + micLed = new OLedBox ( red, this ); + micLed-> setFocusPolicy ( QWidget::NoFocus ); + micLed-> setFixedSize ( 16, 16 ); + + grid-> addWidget ( micLed, 2, 2, AlignCenter ); + + alarmSlider = new QSlider ( this ); + alarmSlider-> setRange ( 0, 100 ); + alarmSlider-> setTickmarks ( QSlider::Both ); + alarmSlider-> setTickInterval ( 20 ); + alarmSlider-> setFocusPolicy ( QWidget::NoFocus ); + + QLabel *alarmLabel = new QLabel ( this ); + alarmLabel-> setPixmap ( QPixmap ( alarm_xpm )); + + grid-> addWidget ( alarmLabel, 0, 3, AlignCenter ); + grid-> addWidget ( alarmSlider, 1, 3, AlignCenter ); + + alarmLed = new OLedBox ( yellow, this ); + alarmLed-> setFocusPolicy ( QWidget::NoFocus ); + alarmLed-> setFixedSize ( 16, 16 ); + + grid-> addWidget ( alarmLed, 2, 3, AlignCenter ); + + if ( !has_wav_alarm ) { + alarmSlider-> hide ( ); + alarmLabel-> hide ( ); + alarmLed-> hide ( ); + } + + grid-> addWidget ( new QLabel ( tr( "Enable Sounds for:" ), this ), 0, 4, AlignVCenter | AlignLeft ); + + vbox = new QVBoxLayout ( ); + vbox-> setSpacing ( 4 ); + grid-> addMultiCellLayout ( vbox, 1, 2, 4, 4 ); + + tapBox = new QCheckBox ( tr( "Screen Taps" ), this ); + tapBox-> setFocusPolicy ( QWidget::NoFocus ); + + vbox-> addWidget ( tapBox, AlignVCenter | AlignLeft ); + + keyBox = new QCheckBox ( tr( "Key Clicks" ), this ); + keyBox-> setFocusPolicy ( QWidget::NoFocus ); + + vbox-> addWidget ( keyBox, AlignVCenter | AlignLeft ); + + alarmBox = new QCheckBox ( tr( "Alarm Sound" ), this ); + alarmBox-> setFocusPolicy ( QWidget::NoFocus ); + + vbox-> addWidget ( alarmBox, AlignVCenter | AlignLeft ); + + if ( has_wav_alarm ) { + alarmBox-> hide ( ); + } + + vbox-> addStretch ( 100 ); + + setFixedSize ( sizeHint ( )); 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() ) ); + + 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 ( ))); + + connect ( micSlider, SIGNAL( valueChanged ( int )), this, SLOT( micMoved( int ))); + connect ( volSlider, SIGNAL( valueChanged ( int )), this, SLOT( volMoved( int ))); + connect ( alarmSlider, SIGNAL( valueChanged ( int )), this, SLOT( alarmMoved( int ))); + + connect ( volLed, SIGNAL( toggled ( bool )), this, SLOT( volMuteToggled ( bool ))); + connect ( micLed, SIGNAL( toggled ( bool )), this, SLOT( micMuteToggled ( bool ))); + connect ( alarmLed, SIGNAL( toggled ( bool )), this, SLOT( alarmSoundToggled ( bool ))); + + connect ( alarmBox, SIGNAL( toggled ( bool )), this, SLOT( alarmSoundToggled ( bool ))); + connect ( keyBox, SIGNAL( toggled ( bool )), this, SLOT( keyClickToggled ( bool ))); + connect ( tapBox, SIGNAL( toggled ( bool )), this, SLOT( screenTapToggled ( bool ))); + + // initialize variables + + readConfig ( true ); + + // initialize the config file, in case some entries are missing + + writeConfigEntry ( "VolumePercent", m_vol_percent, UPD_None ); + writeConfigEntry ( "Mute", m_vol_muted, UPD_None ); + writeConfigEntry ( "AlarmPercent", m_alarm_percent, UPD_None ); + writeConfigEntry ( "TouchSound", m_snd_touch, UPD_None ); + writeConfigEntry ( "KeySound", m_snd_key, UPD_None ); + writeConfigEntry ( "AlarmSound", m_snd_alarm, UPD_Vol ); + + writeConfigEntry ( "Mic", m_mic_percent, UPD_None ); + writeConfigEntry ( "MicMute", m_mic_muted, UPD_Mic ); } -void VolumeControl::keyPressEvent( QKeyEvent *e) +bool VolumeControl::volMuted ( ) const +{ + return m_vol_muted; +} + +int VolumeControl::volPercent ( ) const { - switch(e->key()) + return m_vol_percent; +} + +void VolumeControl::keyPressEvent ( QKeyEvent *e ) { + switch ( e-> key ( )) { case Key_Up: - slider->subtractStep(); + volSlider-> subtractStep ( ); break; case Key_Down: - slider->addStep(); + volSlider-> addStep ( ); break; case Key_Space: - muteBox->toggle(); + volLed-> toggle ( ); break; case Key_Escape: - close(); + hide ( ); break; } } -void VolumeControl::ButtonChanged() -{ - if ( upButton->isDown() || downButton->isDown() ) +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 ); + volSlider-> setValue ( volSlider-> value ( ) - 2 ); + else // if ( downButton-> isDown ( )) + volSlider-> setValue ( volSlider-> value ( ) + 2 ); } -//=========================================================================== - -VolumeApplet::VolumeApplet( QWidget *parent, const char *name ) - : QWidget( parent, name ) +void VolumeControl::show ( bool /*showMic*/ ) { - Config cfg("qpe"); - cfg.setGroup("Volume"); + readConfig ( ); - setFixedHeight( 18 ); - setFixedWidth( 14 ); - - volumePixmap = Resource::loadPixmap( "volume" ); - - volumePercent = cfg.readNumEntry("VolumePercent",50); - micPercent = cfg.readNumEntry("Mic", 50); - muted = FALSE; // ### read from pref - micMuted = FALSE; // ### read from pref - - advancedTimer = new QTimer(this); + QPoint curPos = m_icon-> mapToGlobal ( QPoint ( 0, 0 )); + printf ( "SHOW AT : %d/%d\n", curPos.x(), curPos.y()); + printf ( "SIZEHINT: %d/%d\n", sizeHint().width(),sizeHint().height()); - 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()) ); + int w = sizeHint ( ). width ( ); + int x = curPos.x ( ) - ( w / 2 ); - writeSystemVolume(); - writeSystemMic(); -} - -VolumeApplet::~VolumeApplet() -{ -} + if (( x + w ) > QPEApplication::desktop ( )-> width ( )) + x = QPEApplication::desktop ( )-> width ( ) - w; -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); -} + move ( x, curPos. y ( ) - sizeHint ( ). height ( )); + QFrame::show ( ); -void VolumeApplet::advVolControl() -{ - showVolControl(TRUE); } -void VolumeApplet::showVolControl(bool showMic) +void VolumeControl::readConfig ( bool force ) { Config cfg("qpe"); cfg.setGroup("Volume"); - volumePercent = cfg.readNumEntry("VolumePercent",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 ) ) ); - - Config config("qpe"); - config.setGroup("Volume"); - vc->keyclicks->setChecked( config.readBoolEntry("KeySound",0)); - vc->screentaps->setChecked( config.readBoolEntry("TouchSound",0)); - vc->alarmSound->setChecked( config.readBoolEntry("AlarmSound",1)); - - connect( vc->alarmSound, SIGNAL(toggled(bool)), this, SLOT( alarmSoundCheckToggled(bool))); - connect( vc->keyclicks, SIGNAL(toggled(bool)), this, SLOT( keyclicksCheckToggled(bool))); - connect( vc->screentaps, SIGNAL(toggled(bool)), this, SLOT( screentapsCheckToggled(bool))); - - QPoint curPos = mapToGlobal( rect().topLeft() ); - vc->move( curPos.x()-(vc->sizeHint().width()/2+50), curPos.y() - 120 ); - vc->show(); - - advancedTimer->stop(); -} - -void VolumeApplet::volumeChanged( bool nowMuted ) + int old_vp = m_vol_percent; + int old_mp = m_mic_percent; + bool old_vm = m_vol_muted; + bool old_mm = m_mic_muted; + bool old_sk = m_snd_key; + bool old_st = m_snd_touch; + bool old_sa = m_snd_alarm; + int old_ap = m_alarm_percent; + + m_vol_percent = cfg. readNumEntry ( "VolumePercent", 50 ); + m_mic_percent = cfg. readNumEntry ( "Mic", 50 ); + m_vol_muted = cfg. readBoolEntry ( "Mute", 0 ); + m_mic_muted = cfg. readBoolEntry ( "MicMute", 0 ); + m_snd_key = cfg. readBoolEntry ( "KeySound", 0 ); + m_snd_touch = cfg. readBoolEntry ( "TouchSound", 0 ); + m_snd_alarm = cfg. readBoolEntry ( "AlarmSound", 1 ); + m_alarm_percent = cfg. readNumEntry ( "AlarmPercent", 65 ); + + if ( force || ( m_vol_percent != old_vp )) + volSlider-> setValue ( 100 - m_vol_percent ); + if ( force || ( m_mic_percent != old_mp )) + micSlider-> setValue ( 100 - m_mic_percent ); + if ( force || ( m_alarm_percent != old_ap )) + alarmSlider-> setValue ( 100 - m_alarm_percent ); + + if ( force || ( m_vol_muted != old_vm )) + volLed-> setOn ( !m_vol_muted ); + if ( force || ( m_mic_muted != old_mm )) + micLed-> setOn ( !m_mic_muted ); + if ( force || ( m_snd_alarm != old_sa )) + alarmLed-> setOn ( m_snd_alarm ); + + if ( force || ( m_snd_key != old_sk )) + keyBox-> setChecked ( m_snd_key ); + if ( force || ( m_snd_touch != old_st )) + tapBox-> setChecked ( m_snd_touch ); + if ( force || ( m_snd_alarm != old_sa )) + alarmBox-> setChecked ( m_snd_alarm ); +} + + +void VolumeControl::volumeChanged ( bool nowMuted ) { - int previousVolume = volumePercent; + int previousVolume = m_vol_percent; if ( !nowMuted ) - readSystemVolume(); + readConfig ( ); // Handle case where muting it toggled - if ( muted != nowMuted ) { - muted = nowMuted; - repaint( TRUE ); - return; + if ( m_vol_muted != nowMuted ) { + m_vol_muted = nowMuted; + m_icon-> repaint ( true ); } - + else if ( previousVolume != m_vol_percent ) { // Avoid over repainting - if ( previousVolume != volumePercent ) - repaint( 2, height() - 3, width() - 4, 2, FALSE ); + m_icon-> repaint( 2, height ( ) - 3, width ( ) - 4, 2, false ); + } + } -void VolumeApplet::micChanged( bool nowMuted ) +void VolumeControl::micChanged ( bool nowMuted ) { if (!nowMuted) - readSystemMic(); - micMuted = nowMuted; + readConfig ( ); + m_mic_muted = nowMuted; } -void VolumeApplet::mute( bool toggled ) +void VolumeControl::screenTapToggled ( bool b ) { - muted = toggled; - - // clear if removing mute - repaint( !toggled ); - writeSystemVolume(); - Config cfg("qpe"); - cfg.setGroup("Volume"); - if(muted) - cfg.writeEntry("Mute", "TRUE"); - else - cfg.writeEntry("Mute", "FALSE"); - cfg.write(); + m_snd_touch = b; + writeConfigEntry ( "TouchSound", m_snd_touch, UPD_Vol ); } - -void VolumeApplet::sliderMoved( int percent ) +void VolumeControl::keyClickToggled ( bool b ) { - setVolume( 100 - percent ); + m_snd_key = b; + writeConfigEntry ( "KeySound", m_snd_key, UPD_Vol ); } -void VolumeApplet::micMoved( int percent ) +void VolumeControl::alarmSoundToggled ( bool b ) { - setMic( 100 - percent ); + m_snd_alarm = b; + writeConfigEntry ( "AlarmSound", m_snd_alarm, UPD_Vol ); } -void VolumeApplet::readSystemVolume() +void VolumeControl::volMuteToggled ( bool b ) { - Config cfg("qpe"); - cfg.setGroup("Volume"); - volumePercent = cfg.readNumEntry("VolumePercent"); + m_vol_muted = !b; + + m_icon-> repaint ( !m_vol_muted ); // clear if removing mute + + writeConfigEntry ( "Mute", m_vol_muted, UPD_Vol ); } -void VolumeApplet::readSystemMic() +void VolumeControl::micMuteToggled ( bool b ) { - Config cfg("qpe"); - cfg.setGroup("Volume"); - micPercent = cfg.readNumEntry("Mic"); + m_mic_muted = !b; + writeConfigEntry ( "MicMute", m_mic_muted, UPD_Mic ); } -void VolumeApplet::setVolume( int percent ) + +void VolumeControl::volMoved ( int percent ) { + m_vol_percent = 100 - percent; + // clamp volume percent to be between 0 and 100 - volumePercent = (percent < 0) ? 0 : ((percent > 100) ? 100 : percent); + m_vol_percent = ( m_vol_percent < 0 ) ? 0 : (( m_vol_percent > 100 ) ? 100 : m_vol_percent ); // repaint just the little volume rectangle - repaint( 2, height() - 3, width() - 4, 2, FALSE ); - writeSystemVolume(); + repaint ( 2, height ( ) - 3, width ( ) - 4, 2, false ); + + writeConfigEntry ( "VolumePercent", m_vol_percent, UPD_Vol ); } -void VolumeApplet::setMic( int percent ) +void VolumeControl::micMoved ( int percent ) { + m_mic_percent = 100 - percent; + // clamp volume percent to be between 0 and 100 - micPercent = (percent < 0) ? 0 : ((percent > 100) ? 100 : percent); - writeSystemMic(); + m_mic_percent = ( m_mic_percent < 0 ) ? 0 : (( m_mic_percent > 100 ) ? 100 : m_mic_percent ); + + writeConfigEntry ( "Mic", m_mic_percent, UPD_Mic ); } -void VolumeApplet::writeSystemVolume() +void VolumeControl::alarmMoved ( int percent ) { + m_alarm_percent = 100 - percent; + + // clamp volume percent to be between 0 and 100 + m_alarm_percent = ( m_alarm_percent < 0 ) ? 0 : (( m_alarm_percent > 100 ) ? 100 : m_alarm_percent ); + + writeConfigEntry ( "AlarmPercent", m_alarm_percent, UPD_None ); +} + + +void VolumeControl::writeConfigEntry ( const char *entry, int val, eUpdate upd ) { Config cfg("qpe"); cfg.setGroup("Volume"); - cfg.writeEntry("VolumePercent",volumePercent); - } + cfg. writeEntry ( entry, val ); +// cfg. write ( ); + #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; + switch ( upd ) { + case UPD_Vol: { + QCopEnvelope ( "QPE/System", "volumeChange(bool)" ) << m_vol_muted; + break; + } + case UPD_Mic: { + QCopEnvelope ( "QPE/System", "micChange(bool)" ) << m_mic_muted; + break; + } + case UPD_None: + break; + } #endif } -void VolumeApplet::writeSystemMic() +//=========================================================================== + +VolumeApplet::VolumeApplet( QWidget *parent, const char *name ) + : QWidget( parent, name ) { + setFixedHeight ( 18 ); + setFixedWidth ( 14 ); + + m_pixmap = new QPixmap ( Resource::loadPixmap ( "volume" )); + m_dialog = new VolumeControl ( this ); + + connect ( qApp, SIGNAL( volumeChanged ( bool )), m_dialog, SLOT( volumeChanged( bool ))); + connect ( qApp, SIGNAL( micChanged ( bool )), m_dialog, SLOT ( micChanged( bool ))); +} + +VolumeApplet::~VolumeApplet() { - Config cfg("qpe"); - cfg.setGroup("Volume"); - cfg.writeEntry("Mic",micPercent); + delete m_pixmap; } -#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::mousePressEvent ( QMouseEvent * ) +{ + if ( m_dialog-> isVisible ( )) + m_dialog-> hide ( ); + else + m_dialog-> show ( true ); } + void VolumeApplet::paintEvent( QPaintEvent* ) { QPainter p(this); - if (volumePixmap.isNull()) - volumePixmap = Resource::loadPixmap( "volume" ); - p.drawPixmap( 0, 1, volumePixmap ); + p. drawPixmap ( 0, 1, *m_pixmap ); p.setPen( darkGray ); p.drawRect( 1, height() - 4, width() - 2, 4 ); - int pixelsWide = volumePercent * (width() - 4) / 100; + int pixelsWide = m_dialog-> volPercent ( ) * ( width() - 4 ) / 100; p.fillRect( 2, height() - 3, pixelsWide, 2, red ); p.fillRect( pixelsWide + 2, height() - 3, width() - 4 - pixelsWide, 2, lightGray ); - if ( muted ) { + if ( m_dialog-> volMuted ( )) { 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::screentapsCheckToggled(bool b) { - Config cfg("qpe"); - cfg.setGroup("Volume"); - cfg.writeEntry("TouchSound",b ); - cfg.write(); -} - -void VolumeApplet::keyclicksCheckToggled(bool b) { - Config cfg("qpe"); - cfg.setGroup("Volume"); - cfg.writeEntry("KeySound",b); - cfg.write(); -} - -void VolumeApplet::alarmSoundCheckToggled(bool b) { - Config cfg("qpe"); - cfg.setGroup("Volume"); - cfg.writeEntry("AlarmSound",b); - cfg.write(); -} |