summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/volumeapplet/volume.cpp234
-rw-r--r--core/applets/volumeapplet/volume.h10
2 files changed, 200 insertions, 44 deletions
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
index 06eec58..e066a83 100644
--- a/core/applets/volumeapplet/volume.cpp
+++ b/core/applets/volumeapplet/volume.cpp
@@ -26,37 +26,38 @@
#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 <qvbox.h>
#include <qlabel.h>
#include <qtoolbutton.h>
#include <qpushbutton.h>
#include <qtimer.h>
#include <opie/odevice.h>
#include "oledbox.h"
using namespace Opie;
-#define RATE_TIMER_INTERVAL 100
+#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.
/* XPM */
static const char * vol_xpm[] = {
"20 20 3 1",
" c None",
". c #0000FF",
"+ c #000000",
" ",
" . ",
@@ -114,24 +115,81 @@ static const char * mic_xpm[] = {
" .+..]^,.. ",
" .+....... ",
" .%... ",
" .=... ",
" .+... ",
" .+... ",
" .... ",
" .... ",
" .. ",
" . ",
". "};
+
+static const char * bass_xpm[] = {
+"20 20 3 1",
+" c None",
+". c #000000",
+"+ c #0000FF",
+" ",
+" ",
+" ",
+"..... +++ ......",
+" +++++++ ",
+" ++ ++ ",
+"... ++ ... ++ ++ .",
+" +++ ++ ++ ",
+" ++++ ++ ",
+"... ++++ .. ++ .....",
+" ++ ++ ",
+" ++ ++ ",
+"..........++ ++ .",
+" ++ ",
+" ++ ",
+"...... ++ .........",
+" + ",
+" ",
+" ",
+" "};
+
+
+static const char * treble_xpm[] = {
+"20 20 3 1",
+" c None",
+". c #0000FF",
+"+ c #000000",
+" .. ",
+" . .. ",
+" . .. ",
+"++++++++ . .. ++++++",
+" . . ",
+" ... ",
+"++++++++ . +++++++",
+" .. ",
+" .. . ",
+"+++ .. ... +++++++",
+" .. .. .. ",
+" .. . . .. ",
+"+++ .. . . + . +++++",
+" .. . .. ",
+" .. . .. ",
+"++++ ...... +++++++",
+" . ",
+" .. . ",
+" .. . ",
+" .. "};
+
+
+
+
/* 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",
@@ -175,186 +233,234 @@ static const char * alarm_xpm[] = {
" 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 )
{
m_icon = icon;
-
+
bool has_wav_alarm = true;
-
+ bool has_bass = true;
+ bool has_treble = true;
+
switch ( ODevice::inst ( )-> model ( )) { // we need to add other devices eventually
case Model_Zaurus_SL5000:
has_wav_alarm = false; //poor guys probably feeling left out...
break;
default:
break;
}
-
+
+ if ( !ODevice::series == Model_iPAQ ) {
+ has_bass = false;
+ has_treble = false;
+ }
+
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" ));
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 );
-
+ volLed-> setFixedSize ( 16, 16 );
+
grid-> addWidget ( volLed, 2, 1, AlignCenter );
+ QVBox *basstrebleBox = new QVBox( this );
+
+ trebleSlider = new QSlider ( basstrebleBox );
+ trebleSlider-> setRange ( 0, 100 );
+ trebleSlider-> setTickmarks ( QSlider::Both );
+ trebleSlider-> setTickInterval ( 20 );
+ trebleSlider->setMaximumHeight( 40 );
+ trebleSlider-> setFocusPolicy ( QWidget::NoFocus );
+
+ bassSlider = new QSlider ( basstrebleBox );
+ bassSlider-> setRange ( 0, 100 );
+ bassSlider-> setTickmarks ( QSlider::Both );
+ bassSlider-> setTickInterval ( 20 );
+ bassSlider->setMaximumHeight( 40 );
+ bassSlider-> setFocusPolicy ( QWidget::NoFocus );
+
+ QLabel *bassLabel = new QLabel ( this );
+ bassLabel-> setPixmap ( QPixmap ( bass_xpm ));
+
+ QLabel *trebleLabel = new QLabel( this );
+ trebleLabel->setPixmap( QPixmap ( treble_xpm ) );
+
+ grid->addWidget( trebleLabel, 0, 4, AlignCenter );
+ grid->addWidget( basstrebleBox, 1, 4, AlignCenter );
+ grid-> addWidget ( bassLabel, 2, 4, AlignCenter );
+
+ if ( !has_bass ) {
+ bassSlider->hide();
+ bassLabel->hide();
+ }
+
+ if ( !has_treble ) {
+ trebleSlider->hide();
+ trebleLabel->hide();
+ }
+
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 );
+
+ grid-> addWidget ( new QLabel ( tr( "Enable Sounds for:" ), this ), 0, 6, AlignVCenter | AlignLeft );
vbox = new QVBoxLayout ( );
vbox-> setSpacing ( 4 );
- grid-> addMultiCellLayout ( vbox, 1, 2, 4, 4 );
-
+ grid-> addMultiCellLayout ( vbox, 1, 2, 6, 6 );
+
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 );
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 ( bassSlider, SIGNAL( valueChanged ( int )), this, SLOT( bassMoved( int )));
+ connect ( trebleSlider, SIGNAL( valueChanged ( int )), this, SLOT( trebleMoved( 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 ( "BassPercent", m_vol_percent, UPD_None );
+ writeConfigEntry ( "TreblePercent", 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 );
}
bool VolumeControl::volMuted ( ) const
{
return m_vol_muted;
}
int VolumeControl::volPercent ( ) const
{
return m_vol_percent;
@@ -394,79 +500,88 @@ void VolumeControl::rateTimerDone ( )
{
if ( upButton-> isDown ( ))
volSlider-> setValue ( volSlider-> value ( ) - 2 );
else // if ( downButton-> isDown ( ))
volSlider-> setValue ( volSlider-> value ( ) + 2 );
}
void VolumeControl::show ( bool /*showMic*/ )
{
readConfig ( );
QPoint curPos = m_icon-> mapToGlobal ( QPoint ( 0, 0 ));
-
+
int w = sizeHint ( ). width ( );
int x = curPos.x ( ) - ( w / 2 );
-
+
if (( x + w ) > QPEApplication::desktop ( )-> width ( ))
x = QPEApplication::desktop ( )-> width ( ) - w;
-
+
move ( x, curPos. y ( ) - sizeHint ( ). height ( ));
QFrame::show ( );
}
void VolumeControl::readConfig ( bool force )
{
Config cfg ( "qpe" );
cfg. setGroup ( "Volume" );
int old_vp = m_vol_percent;
int old_mp = m_mic_percent;
+ int old_bass = m_bass_percent;
+ int old_treble = m_treble_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_bass_percent = cfg. readNumEntry ( "BassPercent", 50 );
+ m_treble_percent = cfg. readNumEntry ( "TreblePercent", 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 ))
+ 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 ))
+ if ( force || ( m_alarm_percent != old_ap ))
alarmSlider-> setValue ( 100 - m_alarm_percent );
-
+ if ( force || ( m_bass_percent != old_bass ))
+ bassSlider-> setValue ( 100 - m_bass_percent );
+ if ( force || ( m_treble_percent != old_treble ))
+ trebleSlider-> setValue ( 100 - m_treble_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 );
+ alarmBox-> setChecked ( m_snd_alarm );
}
void VolumeControl::volumeChanged ( bool /*nowMuted*/ )
{
int prevVol = m_vol_percent;
bool prevMute = m_vol_muted;
readConfig ( );
// Handle case where muting it toggled
if ( m_vol_muted != prevMute )
@@ -494,88 +609,121 @@ void VolumeControl::keyClickToggled ( bool b )
writeConfigEntry ( "KeySound", m_snd_key, UPD_Vol );
}
void VolumeControl::alarmSoundToggled ( bool b )
{
m_snd_alarm = b;
writeConfigEntry ( "AlarmSound", m_snd_alarm, UPD_Vol );
}
void VolumeControl::volMuteToggled ( bool b )
{
m_vol_muted = !b;
-
+
m_icon-> redraw ( true );
-
+
writeConfigEntry ( "Mute", m_vol_muted, UPD_Vol );
}
void VolumeControl::micMuteToggled ( bool b )
{
- m_mic_muted = !b;
+ m_mic_muted = !b;
writeConfigEntry ( "MicMute", m_mic_muted, UPD_Mic );
}
void VolumeControl::volMoved ( int percent )
{
m_vol_percent = 100 - percent;
// clamp volume percent to be between 0 and 100
m_vol_percent = ( m_vol_percent < 0 ) ? 0 : (( m_vol_percent > 100 ) ? 100 : m_vol_percent );
// repaint just the little volume rectangle
m_icon-> redraw ( false );
-
+
writeConfigEntry ( "VolumePercent", m_vol_percent, UPD_Vol );
}
void VolumeControl::micMoved ( int percent )
{
m_mic_percent = 100 - percent;
// clamp volume percent to be between 0 and 100
m_mic_percent = ( m_mic_percent < 0 ) ? 0 : (( m_mic_percent > 100 ) ? 100 : m_mic_percent );
writeConfigEntry ( "Mic", m_mic_percent, UPD_Mic );
}
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::bassMoved ( int percent )
+{
+ m_bass_percent = 100 - percent;
+
+ // clamp bass percent to be between 0 and 100
+ m_bass_percent = ( m_bass_percent < 0 ) ? 0 : (( m_bass_percent > 100 ) ? 100 : m_bass_percent );
+
+ writeConfigEntry ( "BassPercent", m_bass_percent, UPD_Bass );
+}
+
+
+
+void VolumeControl::trebleMoved ( int percent )
+{
+ m_treble_percent = 100 - percent;
+
+ // clamp treble percent to be between 0 and 100
+ m_treble_percent = ( m_treble_percent < 0 ) ? 0 : (( m_treble_percent > 100 ) ? 100 : m_treble_percent );
+
+ writeConfigEntry ( "TreblePercent", m_treble_percent, UPD_Treble );
+}
+
+
+
void VolumeControl::writeConfigEntry ( const char *entry, int val, eUpdate upd )
{
Config cfg ( "qpe" );
cfg. setGroup ( "Volume" );
cfg. writeEntry ( entry, val );
// cfg. write ( );
-
+
#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
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:
+ case UPD_Bass: {
+ QCopEnvelope ( "QPE/System", "bassChange(bool)" ) << true;
+ break;
+ }
+ case UPD_Treble: {
+ QCopEnvelope ( "QPE/System", "trebleChange(bool)" ) << true;
+ break;
+ }
+
+ case UPD_None:
break;
}
#endif
}
//===========================================================================
VolumeApplet::VolumeApplet( QWidget *parent, const char *name )
: QWidget( parent, name )
{
setFixedHeight ( 18 );
setFixedWidth ( 14 );
diff --git a/core/applets/volumeapplet/volume.h b/core/applets/volumeapplet/volume.h
index 4d988ac..d2345b5 100644
--- a/core/applets/volumeapplet/volume.h
+++ b/core/applets/volumeapplet/volume.h
@@ -46,63 +46,71 @@ public:
protected:
virtual void keyPressEvent ( QKeyEvent * e );
protected slots:
void volumeChanged ( bool muted );
void micChanged ( bool muted );
private slots:
void volMoved ( int percent );
void micMoved ( int percent );
void alarmMoved ( int percent );
+ void bassMoved( int percent );
+ void trebleMoved( int percent );
void volMuteToggled ( bool );
void micMuteToggled ( bool );
void alarmSoundToggled ( bool );
void keyClickToggled ( bool );
void screenTapToggled ( bool );
void buttonChanged ( );
void rateTimerDone ( );
private:
void readConfig ( bool force = false );
enum eUpdate {
UPD_None,
UPD_Vol,
- UPD_Mic
+ UPD_Mic,
+ UPD_Bass,
+ UPD_Treble
};
void writeConfigEntry ( const char *entry, int val, eUpdate upd );
private:
QSlider *volSlider;
+ QSlider *bassSlider;
+ QSlider *trebleSlider;
QSlider *micSlider;
QSlider *alarmSlider;
OLedBox *volLed;
OLedBox *micLed;
OLedBox *alarmLed;
QCheckBox *alarmBox;
QCheckBox *tapBox;
QCheckBox *keyBox;
QPushButton *upButton;
QPushButton *downButton;
QTimer *rateTimer;
int m_vol_percent;
int m_mic_percent;
int m_alarm_percent;
+ int m_bass_percent;
+ int m_treble_percent;
bool m_vol_muted;
bool m_mic_muted;
bool m_snd_alarm;
bool m_snd_touch;
bool m_snd_key;
VolumeApplet *m_icon;
};
class VolumeApplet : public QWidget {
Q_OBJECT