00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "volume.h"
00022
00023
00024 #include <opie2/oledbox.h>
00025 #include <opie2/odevice.h>
00026 #include <opie2/otaskbarapplet.h>
00027 #include <opie2/oresource.h>
00028 #include <qpe/applnk.h>
00029 #include <qpe/config.h>
00030 #include <qpe/qcopenvelope_qws.h>
00031 using namespace Opie::Core;
00032 using namespace Opie::Ui;
00033
00034
00035 #include <qpainter.h>
00036 #include <qcheckbox.h>
00037 #include <qslider.h>
00038 #include <qlayout.h>
00039 #include <qvbox.h>
00040 #include <qlabel.h>
00041 #include <qpushbutton.h>
00042 #include <qtimer.h>
00043
00044
00045 #include <stdio.h>
00046
00047 #define RATE_TIMER_INTERVAL 100
00048
00049
00050
00051
00052
00053 using namespace Opie::Ui;
00054 static const char * vol_xpm[] = {
00055 "20 20 3 1",
00056 " c None",
00057 ". c #0000FF",
00058 "+ c #000000",
00059 " ",
00060 " . ",
00061 " . . . . ",
00062 " . . . . . . ",
00063 " . . . . . . . ",
00064 " . . ..... . . ",
00065 " . ... ..... ... ",
00066 " ........... .... ",
00067 " ................. ",
00068 "++++++++++++++++++++",
00069 " .................. ",
00070 " . ............. . ",
00071 " . ..... ....... ",
00072 " . ... ..... . ",
00073 " . ... ..... . ",
00074 " . ... ..... ",
00075 " . . . . . ",
00076 " . . . ",
00077 " . . . ",
00078 " "};
00079
00080 static const char * mic_xpm[] = {
00081 "20 20 21 1",
00082 " c None",
00083 ". c #000000",
00084 "+ c #EEEEEE",
00085 "@ c #B4B6B4",
00086 "# c #8B8D8B",
00087 "$ c #D5D6D5",
00088 "% c #E6E6E6",
00089 "& c #9C9D9C",
00090 "* c #6A696A",
00091 "= c #E6E2E6",
00092 "- c #F6F2F6",
00093 "; c #CDC6CD",
00094 "> c #737573",
00095 ", c #4A484A",
00096 "' c #DEDEDE",
00097 ") c #F6EEF6",
00098 "! c #414041",
00099 "~ c #202020",
00100 "{ c #ACAEAC",
00101 "] c #838583",
00102 "^ c #6A656A",
00103 " ",
00104 " .... ",
00105 " .+@+#. ",
00106 " ..$%&%*. ",
00107 " .=-.;=>=,. ",
00108 " .'+).&+!+. ",
00109 " .+;+;.~+~. ",
00110 " ..%{%,.... ",
00111 " ..&=>=~.. ",
00112 " .+..]^,.. ",
00113 " .+....... ",
00114 " .%... ",
00115 " .=... ",
00116 " .+... ",
00117 " .+... ",
00118 " .... ",
00119 " .... ",
00120 " .. ",
00121 " . ",
00122 ". "};
00123
00124
00125 static const char * bass_xpm[] = {
00126 "20 20 3 1",
00127 " c None",
00128 ". c #000000",
00129 "+ c #0000FF",
00130 " ",
00131 " ",
00132 " ",
00133 "..... +++ ......",
00134 " +++++++ ",
00135 " ++ ++ ",
00136 "... ++ ... ++ ++ .",
00137 " +++ ++ ++ ",
00138 " ++++ ++ ",
00139 "... ++++ .. ++ .....",
00140 " ++ ++ ",
00141 " ++ ++ ",
00142 "..........++ ++ .",
00143 " ++ ",
00144 " ++ ",
00145 "...... ++ .........",
00146 " + ",
00147 " ",
00148 " ",
00149 " "};
00150
00151
00152 static const char * treble_xpm[] = {
00153 "20 20 3 1",
00154 " c None",
00155 ". c #0000FF",
00156 "+ c #000000",
00157 " .. ",
00158 " . .. ",
00159 " . .. ",
00160 "++++++++ . .. ++++++",
00161 " . . ",
00162 " ... ",
00163 "++++++++ . +++++++",
00164 " .. ",
00165 " .. . ",
00166 "+++ .. ... +++++++",
00167 " .. .. .. ",
00168 " .. . . .. ",
00169 "+++ .. . . + . +++++",
00170 " .. . .. ",
00171 " .. . .. ",
00172 "++++ ...... +++++++",
00173 " . ",
00174 " .. . ",
00175 " .. . ",
00176 " .. "};
00177
00178
00179
00180
00181
00182 static const char * alarm_xpm[] = {
00183 "20 20 33 1",
00184 " c None",
00185 ". c #080602",
00186 "+ c #AAA602",
00187 "@ c #252002",
00188 "# c #434202",
00189 "$ c #795602",
00190 "% c #C3C20D",
00191 "& c #DADAC2",
00192 "* c #826002",
00193 "= c #740502",
00194 "- c #D6D602",
00195 "; c #322E02",
00196 "> c #826A02",
00197 ", c #F1F195",
00198 "' c #959215",
00199 ") c #423602",
00200 "! c #4B0302",
00201 "~ c #844315",
00202 "{ c #AAAA2A",
00203 "] c #E2DE42",
00204 "^ c #BA7E04",
00205 "/ c #7F7502",
00206 "( c #828276",
00207 "_ c #FEFE4E",
00208 ": c #7D1902",
00209 "< c #989656",
00210 "[ c #260B02",
00211 "} c #F7F7D8",
00212 "| c #DCDA5A",
00213 "1 c #823102",
00214 "2 c #B1AC6B",
00215 "3 c #F7F710",
00216 "4 c #838204",
00217 " ",
00218 " ",
00219 " 4'4/ ",
00220 " /-^= ",
00221 " 42{4>4 ",
00222 " '2|+*$44 ",
00223 " +2&3+$1*44 ",
00224 " (%_}_+/$:>/4 ",
00225 " 4%_}3+#;>:*4 ",
00226 " 4%_}&+#[1$/4 ",
00227 " 4%_,2')[~~>4 ",
00228 " 4%33'4#@~1>4 ",
00229 " 4%3344#[:>/4 ",
00230 " 42&_3'4#@>:*44 ",
00231 " 42|}}3'4#[;$)$44 ",
00232 "444{]]2^~~:!!#.@##/ ",
00233 "4444-%*:==!!=...../ ",
00234 " /:[.. ",
00235 " /@. ",
00236 " "};
00237
00238 VolumeControl::VolumeControl ( VolumeApplet *icon, bool , QWidget *parent, const char *name )
00239 : QFrame ( parent, name, WStyle_StaysOnTop | WType_Popup )
00240 {
00241 m_icon = icon;
00242
00243 bool has_wav_alarm = true;
00244 bool has_bass = true;
00245 bool has_treble = true;
00246
00247 switch ( ODevice::inst ( )-> model ( )) {
00248 case Model_Zaurus_SL5000:
00249 has_wav_alarm = false;
00250 break;
00251 default:
00252 break;
00253 }
00254
00255 if ( !ODevice::inst()->modelString().contains( "Model_iPAQ" )) {
00256 has_bass = false;
00257 has_treble = false;
00258 }
00259
00260 setFrameStyle ( QFrame::PopupPanel | QFrame::Raised );
00261
00262 QGridLayout *grid = new QGridLayout ( this, 1, 1, 6, 4 );
00263 grid-> setSpacing ( 4 );
00264 grid-> setMargin ( 6 );
00265
00266 QVBoxLayout *vbox;
00267 QLabel *l;
00268
00269 vbox = new QVBoxLayout ( );
00270 vbox-> setSpacing ( 4 );
00271 grid-> addLayout ( vbox, 1, 0 );
00272
00273 upButton = new QPushButton ( this );
00274 upButton-> setSizePolicy ( QSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding ));
00275 upButton-> setPixmap ( Opie::Core::OResource::loadPixmap( "up", Opie::Core::OResource::SmallIcon ) );
00276 upButton-> setFocusPolicy ( QWidget::NoFocus );
00277
00278 vbox-> addWidget ( upButton );
00279
00280 downButton = new QPushButton ( this );
00281 downButton-> setSizePolicy ( QSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding ));
00282 downButton-> setPixmap ( Opie::Core::OResource::loadPixmap( "down", Opie::Core::OResource::SmallIcon ) );
00283 downButton-> setFocusPolicy ( QWidget::NoFocus );
00284
00285 vbox-> addWidget ( downButton );
00286
00287 volSlider = new QSlider ( this );
00288 volSlider-> setRange ( 0, 100 );
00289 volSlider-> setTickmarks ( QSlider::Both );
00290 volSlider-> setTickInterval ( 20 );
00291 volSlider-> setFocusPolicy ( QWidget::NoFocus );
00292
00293 l = new QLabel ( this );
00294 l-> setPixmap ( QPixmap ( vol_xpm ));
00295
00296 grid-> addWidget ( l, 0, 1, AlignCenter );
00297 grid-> addWidget ( volSlider, 1, 1, AlignCenter );
00298
00299 volLed = new OLedBox ( green, this );
00300 volLed-> setFocusPolicy ( QWidget::NoFocus );
00301 volLed-> setFixedSize ( 16, 16 );
00302
00303 grid-> addWidget ( volLed, 2, 1, AlignCenter );
00304
00305 QVBox *basstrebleBox = new QVBox( this );
00306
00307 trebleSlider = new QSlider ( basstrebleBox );
00308 trebleSlider-> setRange ( 0, 100 );
00309 trebleSlider-> setTickmarks ( QSlider::Both );
00310 trebleSlider-> setTickInterval ( 20 );
00311 trebleSlider->setMaximumHeight( 40 );
00312 trebleSlider-> setFocusPolicy ( QWidget::NoFocus );
00313
00314 bassSlider = new QSlider ( basstrebleBox );
00315 bassSlider-> setRange ( 0, 100 );
00316 bassSlider-> setTickmarks ( QSlider::Both );
00317 bassSlider-> setTickInterval ( 20 );
00318 bassSlider->setMaximumHeight( 40 );
00319 bassSlider-> setFocusPolicy ( QWidget::NoFocus );
00320
00321 QLabel *bassLabel = new QLabel ( this );
00322 bassLabel-> setPixmap ( QPixmap ( bass_xpm ));
00323
00324 QLabel *trebleLabel = new QLabel( this );
00325 trebleLabel->setPixmap( QPixmap ( treble_xpm ) );
00326
00327 grid->addWidget( trebleLabel, 0, 4, AlignCenter );
00328 grid->addWidget( basstrebleBox, 1, 4, AlignCenter );
00329 grid-> addWidget ( bassLabel, 2, 4, AlignCenter );
00330
00331 if ( !has_bass ) {
00332 bassSlider->hide();
00333 bassLabel->hide();
00334 }
00335
00336 if ( !has_treble ) {
00337 trebleSlider->hide();
00338 trebleLabel->hide();
00339 }
00340
00341 micSlider = new QSlider ( this );
00342 micSlider-> setRange ( 0, 100 );
00343 micSlider-> setTickmarks ( QSlider::Both );
00344 micSlider-> setTickInterval ( 20 );
00345 micSlider-> setFocusPolicy ( QWidget::NoFocus );
00346
00347 l = new QLabel ( this );
00348 l-> setPixmap ( QPixmap ( mic_xpm ));
00349
00350 grid-> addWidget ( l, 0, 2, AlignCenter );
00351 grid-> addWidget ( micSlider, 1, 2, AlignCenter );
00352
00353 micLed = new OLedBox ( red, this );
00354 micLed-> setFocusPolicy ( QWidget::NoFocus );
00355 micLed-> setFixedSize ( 16, 16 );
00356
00357 grid-> addWidget ( micLed, 2, 2, AlignCenter );
00358
00359 alarmSlider = new QSlider ( this );
00360 alarmSlider-> setRange ( 0, 100 );
00361 alarmSlider-> setTickmarks ( QSlider::Both );
00362 alarmSlider-> setTickInterval ( 20 );
00363 alarmSlider-> setFocusPolicy ( QWidget::NoFocus );
00364
00365 QLabel *alarmLabel = new QLabel ( this );
00366 alarmLabel-> setPixmap ( QPixmap ( alarm_xpm ));
00367
00368 grid-> addWidget ( alarmLabel, 0, 3, AlignCenter );
00369 grid-> addWidget ( alarmSlider, 1, 3, AlignCenter );
00370
00371 alarmLed = new OLedBox ( yellow, this );
00372 alarmLed-> setFocusPolicy ( QWidget::NoFocus );
00373 alarmLed-> setFixedSize ( 16, 16 );
00374
00375 grid-> addWidget ( alarmLed, 2, 3, AlignCenter );
00376
00377 if ( !has_wav_alarm ) {
00378 alarmSlider-> hide ( );
00379 alarmLabel-> hide ( );
00380 alarmLed-> hide ( );
00381 }
00382
00383 grid-> addWidget ( new QLabel ( tr( "Enable Sounds for:" ), this ), 0, 6, AlignVCenter | AlignLeft );
00384
00385 vbox = new QVBoxLayout ( );
00386 vbox-> setSpacing ( 4 );
00387 grid-> addMultiCellLayout ( vbox, 1, 2, 6, 6 );
00388
00389 tapBox = new QCheckBox ( tr( "Screen Taps" ), this );
00390 tapBox-> setFocusPolicy ( QWidget::NoFocus );
00391
00392 vbox-> addWidget ( tapBox, AlignVCenter | AlignLeft );
00393
00394 keyBox = new QCheckBox ( tr( "Key Clicks" ), this );
00395 keyBox-> setFocusPolicy ( QWidget::NoFocus );
00396
00397 vbox-> addWidget ( keyBox, AlignVCenter | AlignLeft );
00398
00399 alarmBox = new QCheckBox ( tr( "Alarm Sound" ), this );
00400 alarmBox-> setFocusPolicy ( QWidget::NoFocus );
00401
00402 vbox-> addWidget ( alarmBox, AlignVCenter | AlignLeft );
00403
00404 if ( has_wav_alarm ) {
00405 alarmBox-> hide ( );
00406 }
00407
00408 vbox-> addStretch ( 100 );
00409
00410 setFixedSize ( sizeHint ( ));
00411 setFocusPolicy ( QWidget::NoFocus );
00412
00413 rateTimer = new QTimer( this );
00414 connect ( rateTimer, SIGNAL( timeout()), this, SLOT( rateTimerDone()));
00415
00416 connect ( upButton, SIGNAL( pressed()), this, SLOT( buttonChanged()));
00417 connect ( upButton, SIGNAL( released()), this, SLOT( buttonChanged()));
00418 connect ( downButton, SIGNAL( pressed()), this, SLOT( buttonChanged()));
00419 connect ( downButton, SIGNAL( released()), this, SLOT( buttonChanged()));
00420
00421 connect ( micSlider, SIGNAL( valueChanged(int)), this, SLOT( micMoved(int)));
00422 connect ( volSlider, SIGNAL( valueChanged(int)), this, SLOT( volMoved(int)));
00423 connect ( alarmSlider, SIGNAL( valueChanged(int)), this, SLOT( alarmMoved(int)));
00424 connect ( bassSlider, SIGNAL( valueChanged(int)), this, SLOT( bassMoved(int)));
00425 connect ( trebleSlider, SIGNAL( valueChanged(int)), this, SLOT( trebleMoved(int)));
00426
00427
00428 connect ( volLed, SIGNAL( toggled(bool)), this, SLOT( volMuteToggled(bool)));
00429 connect ( micLed, SIGNAL( toggled(bool)), this, SLOT( micMuteToggled(bool)));
00430 connect ( alarmLed, SIGNAL( toggled(bool)), this, SLOT( alarmSoundToggled(bool)));
00431
00432 connect ( alarmBox, SIGNAL( toggled(bool)), this, SLOT( alarmSoundToggled(bool)));
00433 connect ( keyBox, SIGNAL( toggled(bool)), this, SLOT( keyClickToggled(bool)));
00434 connect ( tapBox, SIGNAL( toggled(bool)), this, SLOT( screenTapToggled(bool)));
00435
00436
00437
00438 readConfig ( true );
00439
00440
00441
00442 writeConfigEntry ( "VolumePercent", m_vol_percent, UPD_None );
00443 writeConfigEntry ( "BassPercent", m_vol_percent, UPD_None );
00444 writeConfigEntry ( "TreblePercent", m_vol_percent, UPD_None );
00445 writeConfigEntry ( "Mute", m_vol_muted, UPD_None );
00446 writeConfigEntry ( "AlarmPercent", m_alarm_percent, UPD_None );
00447 writeConfigEntry ( "TouchSound", m_snd_touch, UPD_None );
00448 writeConfigEntry ( "KeySound", m_snd_key, UPD_None );
00449 writeConfigEntry ( "AlarmSound", m_snd_alarm, UPD_Vol );
00450
00451 writeConfigEntry ( "Mic", m_mic_percent, UPD_None );
00452 writeConfigEntry ( "MicMute", m_mic_muted, UPD_Mic );
00453 }
00454
00455 bool VolumeControl::volMuted ( ) const
00456 {
00457 return m_vol_muted;
00458 }
00459
00460 int VolumeControl::volPercent ( ) const
00461 {
00462 return m_vol_percent;
00463 }
00464
00465 void VolumeControl::keyPressEvent ( QKeyEvent *e )
00466 {
00467 switch ( e-> key ( )) {
00468 case Key_Up:
00469 volSlider-> subtractStep ( );
00470 break;
00471 case Key_Down:
00472 volSlider-> addStep ( );
00473 break;
00474 case Key_Space:
00475 volLed-> toggle ( );
00476 break;
00477 case Key_Escape:
00478 hide ( );
00479 break;
00480 }
00481 }
00482
00483 void VolumeControl::buttonChanged ( )
00484 {
00485 if ( upButton-> isDown ( ) || downButton->isDown ( )) {
00486 rateTimerDone ( );
00487
00488
00489 rateTimer-> start ( RATE_TIMER_INTERVAL, false );
00490 }
00491 else
00492 rateTimer-> stop ( );
00493 }
00494
00495 void VolumeControl::rateTimerDone ( )
00496 {
00497 if ( upButton-> isDown ( ))
00498 volSlider-> setValue ( volSlider-> value ( ) - 2 );
00499 else
00500 volSlider-> setValue ( volSlider-> value ( ) + 2 );
00501 }
00502
00503 void VolumeControl::show ( bool )
00504 {
00505 readConfig ( );
00506
00507 QPoint curPos = m_icon-> mapToGlobal ( QPoint ( 0, 0 ));
00508
00509 int w = sizeHint ( ). width ( );
00510 int x = curPos.x ( ) - ( w / 2 );
00511
00512 if (( x + w ) > QPEApplication::desktop ( )-> width ( ))
00513 x = QPEApplication::desktop ( )-> width ( ) - w;
00514
00515 move ( QMAX(x,0), curPos. y ( ) - sizeHint ( ). height ( ));
00516 QFrame::show ( );
00517
00518 }
00519
00520 void VolumeControl::readConfig ( bool force )
00521 {
00522 Config cfg ( "qpe" );
00523 cfg. setGroup ( "Volume" );
00524
00525 int old_vp = m_vol_percent;
00526 int old_mp = m_mic_percent;
00527 int old_bass = m_bass_percent;
00528 int old_treble = m_treble_percent;
00529 bool old_vm = m_vol_muted;
00530 bool old_mm = m_mic_muted;
00531 bool old_sk = m_snd_key;
00532 bool old_st = m_snd_touch;
00533 bool old_sa = m_snd_alarm;
00534 int old_ap = m_alarm_percent;
00535
00536 m_vol_percent = cfg. readNumEntry ( "VolumePercent", 50 );
00537 m_mic_percent = cfg. readNumEntry ( "Mic", 50 );
00538 m_bass_percent = cfg. readNumEntry ( "BassPercent", 50 );
00539 m_treble_percent = cfg. readNumEntry ( "TreblePercent", 50 );
00540 m_vol_muted = cfg. readBoolEntry ( "Mute", 0 );
00541 m_mic_muted = cfg. readBoolEntry ( "MicMute", 0 );
00542 m_snd_key = cfg. readBoolEntry ( "KeySound", 0 );
00543 m_snd_touch = cfg. readBoolEntry ( "TouchSound", 0 );
00544 m_snd_alarm = cfg. readBoolEntry ( "AlarmSound", 1 );
00545 m_alarm_percent = cfg. readNumEntry ( "AlarmPercent", 65 );
00546
00547 if ( force || ( m_vol_percent != old_vp ))
00548 volSlider-> setValue ( 100 - m_vol_percent );
00549 if ( force || ( m_mic_percent != old_mp ))
00550 micSlider-> setValue ( 100 - m_mic_percent );
00551 if ( force || ( m_alarm_percent != old_ap ))
00552 alarmSlider-> setValue ( 100 - m_alarm_percent );
00553 if ( force || ( m_bass_percent != old_bass ))
00554 bassSlider-> setValue ( 100 - m_bass_percent );
00555 if ( force || ( m_treble_percent != old_treble ))
00556 trebleSlider-> setValue ( 100 - m_treble_percent );
00557
00558
00559 if ( force || ( m_vol_muted != old_vm ))
00560 volLed-> setOn ( !m_vol_muted );
00561 if ( force || ( m_mic_muted != old_mm ))
00562 micLed-> setOn ( !m_mic_muted );
00563 if ( force || ( m_snd_alarm != old_sa ))
00564 alarmLed-> setOn ( m_snd_alarm );
00565
00566 if ( force || ( m_snd_key != old_sk ))
00567 keyBox-> setChecked ( m_snd_key );
00568 if ( force || ( m_snd_touch != old_st ))
00569 tapBox-> setChecked ( m_snd_touch );
00570 if ( force || ( m_snd_alarm != old_sa ))
00571 alarmBox-> setChecked ( m_snd_alarm );
00572 }
00573
00574
00575 void VolumeControl::volumeChanged ( bool )
00576 {
00577 int prevVol = m_vol_percent;
00578 bool prevMute = m_vol_muted;
00579
00580 readConfig ( );
00581
00582
00583 if ( m_vol_muted != prevMute )
00584 m_icon-> redraw ( true );
00585 else if ( prevVol != m_vol_percent )
00586 m_icon-> redraw ( false );
00587 }
00588
00589 void VolumeControl::micChanged ( bool nowMuted )
00590 {
00591 if ( !nowMuted )
00592 readConfig ( );
00593 m_mic_muted = nowMuted;
00594 }
00595
00596 void VolumeControl::screenTapToggled ( bool b )
00597 {
00598 m_snd_touch = b;
00599 writeConfigEntry ( "TouchSound", m_snd_touch, UPD_Vol );
00600 }
00601
00602 void VolumeControl::keyClickToggled ( bool b )
00603 {
00604 m_snd_key = b;
00605 writeConfigEntry ( "KeySound", m_snd_key, UPD_Vol );
00606 }
00607
00608 void VolumeControl::alarmSoundToggled ( bool b )
00609 {
00610 m_snd_alarm = b;
00611 writeConfigEntry ( "AlarmSound", m_snd_alarm, UPD_Vol );
00612 }
00613
00614 void VolumeControl::volMuteToggled ( bool b )
00615 {
00616 m_vol_muted = !b;
00617
00618 m_icon-> redraw ( true );
00619
00620 writeConfigEntry ( "Mute", m_vol_muted, UPD_Vol );
00621 }
00622
00623 void VolumeControl::micMuteToggled ( bool b )
00624 {
00625 m_mic_muted = !b;
00626 writeConfigEntry ( "MicMute", m_mic_muted, UPD_Mic );
00627 }
00628
00629
00630 void VolumeControl::volMoved ( int percent )
00631 {
00632 m_vol_percent = 100 - percent;
00633
00634
00635 m_vol_percent = ( m_vol_percent < 0 ) ? 0 : (( m_vol_percent > 100 ) ? 100 : m_vol_percent );
00636
00637 m_icon-> redraw ( false );
00638
00639 writeConfigEntry ( "VolumePercent", m_vol_percent, UPD_Vol );
00640 }
00641
00642 void VolumeControl::micMoved ( int percent )
00643 {
00644 m_mic_percent = 100 - percent;
00645
00646
00647 m_mic_percent = ( m_mic_percent < 0 ) ? 0 : (( m_mic_percent > 100 ) ? 100 : m_mic_percent );
00648
00649 writeConfigEntry ( "Mic", m_mic_percent, UPD_Mic );
00650 }
00651
00652 void VolumeControl::alarmMoved ( int percent )
00653 {
00654 m_alarm_percent = 100 - percent;
00655
00656
00657 m_alarm_percent = ( m_alarm_percent < 0 ) ? 0 : (( m_alarm_percent > 100 ) ? 100 : m_alarm_percent );
00658
00659 writeConfigEntry ( "AlarmPercent", m_alarm_percent, UPD_None );
00660 }
00661
00662
00663 void VolumeControl::bassMoved ( int percent )
00664 {
00665 m_bass_percent = 100 - percent;
00666
00667
00668 m_bass_percent = ( m_bass_percent < 0 ) ? 0 : (( m_bass_percent > 100 ) ? 100 : m_bass_percent );
00669
00670 writeConfigEntry ( "BassPercent", m_bass_percent, UPD_Bass );
00671 }
00672
00673
00674
00675 void VolumeControl::trebleMoved ( int percent )
00676 {
00677 m_treble_percent = 100 - percent;
00678
00679
00680 m_treble_percent = ( m_treble_percent < 0 ) ? 0 : (( m_treble_percent > 100 ) ? 100 : m_treble_percent );
00681
00682 writeConfigEntry ( "TreblePercent", m_treble_percent, UPD_Treble );
00683 }
00684
00685
00686
00687 void VolumeControl::writeConfigEntry ( const char *entry, int val, eUpdate upd )
00688 {
00689 Config cfg ( "qpe" );
00690 cfg. setGroup ( "Volume" );
00691 cfg. writeEntry ( entry, val );
00692
00693
00694 #if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
00695 switch ( upd ) {
00696 case UPD_Vol: {
00697 QCopEnvelope ( "QPE/System", "volumeChange(bool)" ) << m_vol_muted;
00698 break;
00699 }
00700 case UPD_Mic: {
00701 QCopEnvelope ( "QPE/System", "micChange(bool)" ) << m_mic_muted;
00702 break;
00703 }
00704 case UPD_Bass: {
00705 QCopEnvelope ( "QPE/System", "bassChange(bool)" ) << true;
00706 break;
00707 }
00708 case UPD_Treble: {
00709 QCopEnvelope ( "QPE/System", "trebleChange(bool)" ) << true;
00710 break;
00711 }
00712
00713 case UPD_None:
00714 break;
00715 }
00716 #endif
00717 }
00718
00719
00720
00721 VolumeApplet::VolumeApplet( QWidget *parent, const char *name )
00722 : QWidget( parent, name )
00723 {
00724 setFixedWidth ( AppLnk::smallIconSize() );
00725 setFixedHeight ( AppLnk::smallIconSize()+4 );
00726
00727 m_pixmap = new QPixmap ( Opie::Core::OResource::loadPixmap( "volume", Opie::Core::OResource::SmallIcon ) );
00728 m_dialog = new VolumeControl ( this, true, this, "volumecontrol" );
00729
00730 connect ( qApp, SIGNAL( volumeChanged(bool)), m_dialog, SLOT( volumeChanged(bool)));
00731 connect ( qApp, SIGNAL( micChanged(bool)), m_dialog, SLOT ( micChanged(bool)));
00732 }
00733
00734 VolumeApplet::~VolumeApplet()
00735 {
00736 delete m_pixmap;
00737 }
00738
00739 int VolumeApplet::position()
00740 {
00741 return 6;
00742 }
00743
00744 void VolumeApplet::mousePressEvent ( QMouseEvent * )
00745 {
00746 if ( m_dialog-> isVisible ( ))
00747 m_dialog-> hide ( );
00748 else
00749 m_dialog-> show ( true );
00750 }
00751
00752 void VolumeApplet::redraw ( bool all )
00753 {
00754 if ( all )
00755 repaint ( true );
00756 else
00757 repaint ( 2, height ( ) - 3, width ( ) - 4, 2, false );
00758 }
00759
00760
00761 void VolumeApplet::paintEvent ( QPaintEvent * )
00762 {
00763 QPainter p ( this );
00764
00765 p. drawPixmap ( (width()- m_pixmap->width())/2, QMAX( (height()-4-m_pixmap->height() )/2, 1), *m_pixmap );
00766 p. setPen ( darkGray );
00767 p. drawRect ( 1, height() - 4, width() - 2, 4 );
00768
00769 int pixelsWide = m_dialog-> volPercent ( ) * ( width() - 4 ) / 100;
00770 p. fillRect ( 2, height() - 3, pixelsWide, 2, red );
00771 p. fillRect ( pixelsWide + 2, height() - 3, width() - 4 - pixelsWide, 2, lightGray );
00772
00773 if ( m_dialog-> volMuted ( )) {
00774 p. setPen ( red );
00775 p. drawLine ( 1, 2, width() - 2, height() - 5 );
00776 p. drawLine ( 1, 3, width() - 2, height() - 4 );
00777 p. drawLine ( width() - 2, 2, 1, height() - 5 );
00778 p. drawLine ( width() - 2, 3, 1, height() - 4 );
00779 }
00780 }
00781
00782
00783 EXPORT_OPIE_APPLET_v1( VolumeApplet )