-rw-r--r-- | noncore/tools/clock/clock.cpp | 171 | ||||
-rw-r--r-- | noncore/tools/clock/clock.h | 15 |
2 files changed, 121 insertions, 65 deletions
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp index 0937362..9898332 100644 --- a/noncore/tools/clock/clock.cpp +++ b/noncore/tools/clock/clock.cpp @@ -69,28 +69,24 @@ void startPlayer() static void toggleScreenSaver( bool on ) { QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" ); e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend ); } Clock::Clock( QWidget * parent, const char * name, WFlags f ) : QVBox( parent, name , f ) { setSpacing( 4 ); setMargin( 1 ); - Config config( "qpe" ); - config.setGroup( "Time" ); - ampm = config.readBoolEntry( "AMPM", TRUE ); - snoozeBtn = new QPushButton ( this ); snoozeBtn->setText( tr( "Snooze" ) ); aclock = new AnalogClock( this ); aclock->display( QTime::currentTime() ); aclock->setLineWidth( 2 ); QHBox *hb = new QHBox( this ); hb->setMargin( 0 ); QWidget *space = new QWidget( hb ); lcd = new QLCDNumber( hb ); @@ -119,130 +115,137 @@ Clock::Clock( QWidget * parent, const char * name, WFlags f ) clockRB = new QRadioButton ( tr( "Clock" ), controls ); gl->addWidget( clockRB, 0, 0 ); grp->insert( clockRB ); swatchRB = new QRadioButton ( tr( "Stopwatch" ), controls ); gl->addWidget( swatchRB, 1, 0 ); grp->insert( swatchRB ); connect( grp, SIGNAL( clicked( int ) ), this, SLOT( modeSelect( int ) ) ); grp->setButton( 0 ); - set - = new QPushButton ( controls ); - set - ->setMaximumSize( 50, 30 ); - gl->addWidget( set - , 0, 1 ); - set - ->setText( tr( "Start" ) ); - set - ->setEnabled( FALSE ); - grp->insert( set - ); + set = new QPushButton ( controls ); + set->setMaximumSize( 50, 30 ); + gl->addWidget( set , 0, 1 ); + set->setText( tr( "Start" ) ); + set->setEnabled( FALSE ); + grp->insert( set ); reset = new QPushButton ( controls ); gl->addWidget( reset, 1, 1 ); reset->setText( tr( "Reset" ) ); reset->setEnabled( FALSE ); grp->insert( reset ); alarmOffBtn = new QPushButton ( controls ); - // alarmOffBtn->setMaximumSize(60,30); gl->addWidget( alarmOffBtn, 0, 2 ); alarmBtn = new QPushButton ( controls ); - // alarmBtn->setMaximumSize(60,30); gl->addWidget( alarmBtn, 1, 2 ); + alarmBtn->setText( tr( "Set Alarm" ) ); OClickableLabel *click = new OClickableLabel( controls, "label" ); click->setText( tr( "Set date and time." ) ); gl->addMultiCellWidget( click, 3, 3, 0, 2, AlignHCenter ); connect( click, SIGNAL( clicked() ), this, SLOT( slotAdjustTime() ) ); - connect( set - , SIGNAL( pressed() ), SLOT( slotSet() ) ); + connect( set , SIGNAL( pressed() ), SLOT( slotSet() ) ); connect( reset, SIGNAL( clicked() ), SLOT( slotReset() ) ); connect( alarmBtn, SIGNAL( clicked() ), SLOT( slotSetAlarm() ) ); connect( snoozeBtn, SIGNAL( clicked() ), SLOT( slotSnooze() ) ); connect( alarmOffBtn, SIGNAL( clicked() ), SLOT( slotToggleAlarm() ) ); connect( qApp, SIGNAL( appMessage( const QCString&, const QByteArray& ) ), this, SLOT( appMessage( const QCString&, const QByteArray& ) ) ); t = new QTimer( this ); connect( t, SIGNAL( timeout() ), SLOT( updateClock() ) ); t->start( 1000 ); connect( qApp, SIGNAL( timeChanged() ), SLOT( updateClock() ) ); swatch_running = FALSE; swatch_totalms = 0; connect( qApp, SIGNAL( clockChanged( bool ) ), this, SLOT( changeClock( bool ) ) ); + + Config config( "qpe" ); + config.setGroup( "Time" ); + ampm = config.readBoolEntry( "AMPM", TRUE ); + QString tmp = config.readEntry( "clockAlarmHour", "" ); bool ok; hour = tmp.toInt( &ok, 10 ); tmp = config.readEntry( "clockAlarmMinute", "" ); minute = tmp.toInt( &ok, 10 ); - if ( config.readEntry( "clockAlarmSet", "FALSE" ) == "TRUE" ) { + if ( config.readEntry( "clockAlarmSet", "FALSE" ) == "TRUE" ) + { alarmOffBtn->setText( tr( "Alarm Is On" ) ); alarmBool = TRUE; snoozeBtn->show(); } - else { + else + { alarmOffBtn->setText( tr( "Alarm Is Off" ) ); alarmBool = FALSE; snoozeBtn->hide(); } QTimer::singleShot( 0, this, SLOT( updateClock() ) ); - modeSelect( 0 ); + + Config cfg( "Clock" ); + cfg.setGroup( "Mode" ); + int mode = cfg.readBoolEntry( "clockMode");setSwatchMode( mode); + modeSelect( mode); } Clock::~Clock() { toggleScreenSaver( true ); } void Clock::updateClock() { - if ( clockRB->isChecked() ) { + if ( clockRB->isChecked() ) + { QTime tm = QDateTime::currentDateTime().time(); QString s; - if ( ampm ) { + if ( ampm ) + { int hour = tm.hour(); if ( hour == 0 ) hour = 12; if ( hour > 12 ) hour -= 12; s.sprintf( "%2d%c%02d", hour, ':', tm.minute() ); ampmLabel->setText( ( tm.hour() >= 12 ) ? "PM" : "AM" ); ampmLabel->show(); } - else { + else + { s.sprintf( "%2d%c%02d", tm.hour(), ':', tm.minute() ); ampmLabel->hide(); } lcd->display( s ); lcd->repaint( FALSE ); aclock->display( QTime::currentTime() ); date->setText( TimeString::longDateString( QDate::currentDate() ) ); } - else { + else + { QTime swatch_time; QString lcdtext; int totalms = swatch_totalms; if ( swatch_running ) totalms += swatch_start.elapsed(); swatch_time = QTime( 0, 0, 0 ).addMSecs( totalms ); QString d = swatch_running ? QString( " " ) : QString::number( totalms % 1000 + 1000 ); lcdtext = swatch_time.toString() + "." + d.right( 3 ).left( sw_prec ); lcd->display( lcdtext ); lcd->repaint( FALSE ); aclock->display( swatch_time ); @@ -255,77 +258,82 @@ void Clock::changeClock( bool a ) ampm = a; updateClock(); } void Clock::clearClock( void ) { lcd->display( QTime( 0, 0, 0 ).toString() ); aclock->display( QTime( 0, 0, 0 ) ); } void Clock::slotSet() { - if ( t->isActive() ) { + if ( t->isActive() ) + { swatch_totalms += swatch_start.elapsed(); - set - ->setText( tr( "Start" ) ); + set->setText( tr( "Start" ) ); t->stop(); swatch_running = FALSE; toggleScreenSaver( TRUE ); updateClock(); } - else { + else + { swatch_start.start(); - set - ->setText( tr( "Stop" ) ); + set->setText( tr( "Stop" ) ); t->start( 1000 ); swatch_running = TRUE; // disable screensaver while stop watch is running toggleScreenSaver( FALSE ); } } void Clock::slotReset() { t->stop(); swatch_start.start(); swatch_totalms = 0; if ( swatch_running ) t->start( 1000 ); updateClock(); } void Clock::modeSelect( int m ) { - if ( m ) { + qDebug("Clock::modeSelect( %d) ", m); + if ( m ) + { lcd->setNumDigits( 8 + 1 + sw_prec ); lcd->setMinimumWidth( lcd->sizeHint().width() ); - set - ->setEnabled( TRUE ); + set->setEnabled( TRUE ); reset->setEnabled( TRUE ); ampmLabel->hide(); if ( !swatch_running ) t->stop(); } - else { + else + { lcd->setNumDigits( 5 ); lcd->setMinimumWidth( lcd->sizeHint().width() ); - set - ->setEnabled( FALSE ); + set->setEnabled( FALSE ); reset->setEnabled( FALSE ); t->start( 1000 ); } + + Config config( "Clock" ); + config.setGroup( "Mode" ); + config.writeEntry( "clockMode", m ); updateClock(); } //this sets the alarm time void Clock::slotSetAlarm() { if ( !snoozeBtn->isHidden() ) slotToggleAlarm(); Set_Alarm *setAlarmDlg; setAlarmDlg = new Set_Alarm( this, "SetAlarm", TRUE ); int result = setAlarmDlg->exec(); if ( result == 1 ) { @@ -358,32 +366,34 @@ void Clock::slotSnooze() when = whenl; AlarmServer::addAlarm( when, "QPE/Application/clock", "alarm(QDateTime,int)", warn ); } //toggles alarm on/off void Clock::slotToggleAlarm() { Config config( "qpe" ); config.setGroup( "Time" ); - if ( alarmBool ) { + if ( alarmBool ) + { config.writeEntry( "clockAlarmSet", "FALSE" ); alarmOffBtn->setText( tr( "Alarm Is Off" ) ); snoozeBtn->hide(); alarmBool = FALSE; alarmOff(); } - else { + else + { config.writeEntry( "clockAlarmSet", "TRUE" ); alarmOffBtn->setText( tr( "Alarm Is On" ) ); snoozeBtn->show(); alarmBool = TRUE; alarmOn(); } config.write(); } void Clock::alarmOn() { QDate d = QDate::currentDate(); @@ -417,70 +427,72 @@ void Clock::clearTimer() alarmOffBtn->setText( tr( "Alarm Is Off" ) ); alarmBool = FALSE; snoozeBtn->hide(); setCaption( "Clock" ); } void Clock::appMessage( const QCString& msg, const QByteArray& /*data*/ ) { int stopTimer = 0; int timerStay = 5000; bSound = TRUE; qDebug( "Message received in clock" ); - if ( msg == "alarm(QDateTime,int)" ) { + if ( msg == "alarm(QDateTime,int)" ) + { Config config( "qpe" ); config.setGroup( "Time" ); if ( config.readBoolEntry( "mp3Alarm", 0 ) ) { clearTimer(); -// pid_t pid; -// switch(pid = fork()) -// { -// case -1: -// {//failed -// } -// break; -// case 0: -// {//child -// QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" ); -// e << config.readEntry( "mp3File", "" ); pthread_t thread; pthread_create(&thread, NULL, (void * (*) (void *))startPlayer, NULL/* &*/); -// startPlayer(); -// } -// break; -// }; } else { Sound::soundAlarm(); stopTimer = startTimer( timerStay ); } } + + if ( msg == "timerStart()" ) + { + slotStartTimer(); + } + if ( msg == "timerStop()" ) + { + slotStopTimer(); + } + if ( msg == "timerReset()" ) + { + slotResetTimer(); + } + show(); raise(); QPEApplication::setKeepRunning(); setActiveWindow(); } void Clock::timerEvent( QTimerEvent *e ) { static int stop = 0; - if ( stop < 120 && bSound ) { + if ( stop < 120 && bSound ) + { Sound::soundAlarm(); stop++; } - else { + else + { stop = 0; killTimer( e->timerId() ); clearTimer(); setCaption( tr( "Clock: Alarm was missed." ) ); } } QSizePolicy AnalogClock::sizePolicy() const { return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); } @@ -492,37 +504,39 @@ void AnalogClock::drawContents( QPainter *p ) if ( r. width ( ) > r. height ( )) fr. setRect (( r. width ( ) - r. height ( )) / 2, r. y ( ), r. height ( ), r. height ( )); else fr. setRect ( r. x ( ), ( r. height ( ) - r. width ( )) / 2, r. width ( ), r. width ( )); QPoint center = fr. center ( ); // ( fr.x() + fr.width() / 2, fr.y() + fr.height() / 2 ); QPoint l1 ( center. x ( ), fr. y ( ) + 2 ); QPoint l2 ( center. x ( ), fr. y ( ) + 8 ); - if ( clear ) { + if ( clear ) + { erase ( r ); p-> setPen ( NoPen ); p-> setBrush ( colorGroup ( ). color ( QColorGroup::Base )); p-> drawEllipse ( fr ); p-> setBrush ( NoBrush ); // draw ticks p->setPen( QPen( colorGroup ( ). color ( QColorGroup::Text ), 1 ) ); for ( int i = 0; i < 12; i++ ) p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) ); } - else { + else + { drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Base ), prevTime, &currTime ); } drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Text ), currTime ); prevTime = currTime; } void AnalogClock::drawPointers ( QPainter *p, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 ) { QPoint center = r. center ( ); @@ -575,12 +589,47 @@ QPoint AnalogClock::rotate( QPoint c, QPoint p, int a ) double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) - ( p.y() - c.y() ) * sin( angle ); double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) + ( p.x() - c.x() ) * sin( angle ); return QPoint( nx, ny ); } void Clock::slotAdjustTime() { QCopEnvelope e( "QPE/System", "execute(QString)" ); e << QString( "systemtime" ); } + +void Clock::slotStartTimer() +{ + Config cfg( "Clock" ); + cfg.setGroup( "Mode" ); + int mode = cfg.readBoolEntry( "clockMode"); + if ( clockRB->isChecked() ) + setSwatchMode( 1); + slotSet(); +} + +void Clock::slotStopTimer() +{ + Config cfg( "Clock" ); + cfg.setGroup( "Mode" ); + int mode = cfg.readBoolEntry( "clockMode"); + if ( clockRB->isChecked() ) + setSwatchMode( 1); +slotSet(); +} + +void Clock::slotResetTimer() +{ + if ( clockRB->isChecked() ) + setSwatchMode( 1); +slotReset(); +} + +void Clock::setSwatchMode(int mode) +{ + qDebug("Clock::setSwatchMode( %d)"), mode; + swatchRB->setChecked( mode); + clearClock( ); + modeSelect( mode ); +} diff --git a/noncore/tools/clock/clock.h b/noncore/tools/clock/clock.h index 23cc143..9b00e28 100644 --- a/noncore/tools/clock/clock.h +++ b/noncore/tools/clock/clock.h @@ -37,30 +37,32 @@ class AnalogClock : public QFrame public: AnalogClock( QWidget * parent = 0, const char * name = 0 ) : QFrame( parent, name ), clear(true) {} QSizePolicy sizePolicy() const; void display( const QTime& time ); protected: void drawContents( QPainter *p ); private: - QPoint rotate( QPoint center, QPoint p, int angle ); - void drawPointers ( QPainter *, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 = 0 ); QTime currTime; QTime prevTime; bool clear; + + QPoint rotate( QPoint center, QPoint p, int angle ); + void drawPointers ( QPainter *, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 = 0 ); + }; class Clock : public QVBox { Q_OBJECT public: Clock( QWidget * parent = 0, const char * name = 0, WFlags f=0 ); ~Clock(); QDateTime when; bool bSound; int hour, minute, snoozeTime; @@ -69,31 +71,36 @@ private slots: void slotReset(); void modeSelect(int); void updateClock(); void changeClock( bool ); void slotSetAlarm(); void slotSnooze(); void slotToggleAlarm(); void alarmOn(); void alarmOff(); void appMessage(const QCString& msg, const QByteArray& data); void timerEvent( QTimerEvent *e ); void slotAdjustTime(); + + void slotStartTimer(); + void slotStopTimer(); + void slotResetTimer(); + void setSwatchMode( int ); private: - void clearClock(); - void clearTimer(); bool alarmBool; QTimer *t; QLCDNumber *lcd; QLabel *date; QLabel *ampmLabel; QPushButton *set, *reset, *alarmBtn, *snoozeBtn, *alarmOffBtn; QRadioButton *clockRB, *swatchRB; AnalogClock *aclock; QTime swatch_start; int swatch_totalms; bool swatch_running; bool ampm; + void clearClock(); + void clearTimer(); }; #endif |