-rw-r--r-- | noncore/tools/clock/clock.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp index e681650..0ad69d9 100644 --- a/noncore/tools/clock/clock.cpp +++ b/noncore/tools/clock/clock.cpp @@ -17,170 +17,172 @@ ** not clear to you. ** **********************************************************************/ // changes added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002 // changes added and Copyright (C) by Holger Freyther 2004 #include "clock.h" #include "analogclock.h" #include <qtabwidget.h> #include <opie2/ofiledialog.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/config.h> #include <qpe/timestring.h> #include <qpe/alarmserver.h> #include <qpe/sound.h> #include <qpe/resource.h> #include <qsound.h> #include <qtimer.h> #include <qlcdnumber.h> #include <qslider.h> #include <qlabel.h> #include <qtimer.h> #include <qpushbutton.h> #include <qtoolbutton.h> #include <qpainter.h> #include <qmessagebox.h> #include <qdatetime.h> #include <qspinbox.h> #include <qcombobox.h> #include <qcheckbox.h> #include <qgroupbox.h> #include <qlayout.h> #include <qhbox.h> #include <qlineedit.h> static const int sw_prec = 2; static const int magic_daily = 2292922; static const int magic_countdown = 2292923; static const int magic_snooze = 2292924; static const int magic_playmp = 2292925; +static const char ALARM_CLOCK_CHANNEL [] = "QPE/Application/clock"; +static const char ALARM_CLOCK_MESSAGE [] = "alarm(QDateTime,int)"; #include <math.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> static void toggleScreenSaver( bool on ) { QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" ); e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend ); } static void startPlayer() { Config config( "qpe" ); config.setGroup( "Time" ); sleep(15); QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" ); e << config.readEntry( "mp3File", "" ); } class MySpinBox : public QSpinBox { public: QLineEdit *lineEdit() const { return editor(); } }; // // // AlarmDlg::AlarmDlg(QWidget *parent, const char *name, bool modal, const QString &txt) : AlarmDlgBase(parent, name, modal) { setCaption( tr("Clock") ); pixmap->setPixmap( Resource::loadPixmap("clock/alarmbell") ); alarmDlgLabel->setText(txt); connect(snoozeTime, SIGNAL(valueChanged(int)), this, SLOT(changePrompt(int))); connect(cmdOk, SIGNAL(clicked()), this, SLOT(checkSnooze())); } // // // void AlarmDlg::setText(const QString &txt) { alarmDlgLabel->setText(txt); } // // // void AlarmDlg::checkSnooze(void) { // // Ensure we have only one snooze alarm. // - AlarmServer::deleteAlarm(QDateTime(), "QPE/Application/clock", - "alarm(QDateTime,int)", magic_snooze); + AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, magic_snooze); if (snoozeTime->value() > 0) { QDateTime wake = QDateTime::currentDateTime(); wake = wake.addSecs(snoozeTime->value() * 60); // snoozeTime in minutes - AlarmServer::addAlarm(wake, "QPE/Application/clock", - "alarm(QDateTime,int)", magic_snooze); + AlarmServer::addAlarm(wake, ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, magic_snooze); } accept(); } void AlarmDlg::changePrompt(int mins) { cmdOk->setText(mins > 0 ? tr("Snooze") : tr("Close") ); } Clock::Clock( QWidget * parent, const char *, WFlags f ) : ClockBase( parent, "clock", f ), swatch_splitms(99), init(FALSE) // No tr { alarmDlg = 0; swLayout = 0; dayBtn = new QToolButton * [7]; Config config( "qpe" ); config.setGroup("Time"); ampm = config.readBoolEntry( "AMPM", TRUE ); onMonday = config.readBoolEntry( "MONDAY" ); connect( tabs, SIGNAL(currentChanged(QWidget*)), this, SLOT(tabChanged(QWidget*)) ); analogStopwatch = new AnalogClock( swFrame ); stopwatchLcd = new QLCDNumber( swFrame ); stopwatchLcd->setFrameStyle( QFrame::NoFrame ); stopwatchLcd->setSegmentStyle( QLCDNumber::Flat ); stopwatchLcd->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred) ); analogClock->display( QTime::currentTime() ); clockLcd->setNumDigits( 5 ); clockLcd->setFixedWidth( clockLcd->sizeHint().width() ); date->setText( TimeString::dateString( QDate::currentDate(), TimeString::currentDateFormat() ) ); if ( qApp->desktop()->width() < 200 ) date->setFont( QFont(date->font().family(), 14, QFont::Bold) ); if ( qApp->desktop()->height() > 240 ) { clockLcd->setFixedHeight( 30 ); stopwatchLcd->setFixedHeight( 30 ); } connect( stopStart, SIGNAL(pressed()), SLOT(stopStartStopWatch()) ); connect( reset, SIGNAL(pressed()), SLOT(resetStopWatch()) ); @@ -526,97 +528,97 @@ bool Clock::eventFilter( QObject *o, QEvent *e ) swLayout = new QVBoxLayout( swFrame ); swLayout->addWidget( analogStopwatch ); swLayout->addWidget( stopwatchLcd ); swLayout->activate(); } return FALSE; } void Clock::tabChanged( QWidget * ) { if ( tabs->currentPageIndex() == 0 ) { t->start(1000); } else if ( tabs->currentPageIndex() == 1 ) { if ( !swatch_running ) t->stop(); stopStart->setAccel( Key_Return ); } else if ( tabs->currentPageIndex() == 2 ) { t->start(1000); } updateClock(); } void Clock::setDailyAmPm(int) { scheduleApplyDailyAlarm(); } void Clock::setDailyMinute( int m ) { dailyMinute->setPrefix( m <= 9 ? "0" : "" ); } void Clock::dailyEdited() { if ( spinBoxValid(dailyMinute) && spinBoxValid(dailyHour) ) scheduleApplyDailyAlarm(); else applyAlarmTimer->stop(); } void Clock::enableDaily( bool ) { scheduleApplyDailyAlarm(); } void Clock::appMessage( const QCString &msg, const QByteArray &data ) { - if ( msg == "alarm(QDateTime,int)" ) { + if ( msg == ALARM_CLOCK_MESSAGE ) { QDataStream ds(data,IO_ReadOnly); QDateTime when; int t; ds >> when >> t; QTime theTime( when.time() ); if ( t == magic_daily || t == magic_snooze || t == magic_playmp ) { QString msg = tr("<b>Daily Alarm:</b><p>"); QString ts; if ( ampm ) { bool pm = FALSE; int h = theTime.hour(); if (h > 12) { h -= 12; pm = TRUE; } if (h == 0) h = 12; ts.sprintf( "%02d:%02d %s", h, theTime.minute(), pm?"PM":"AM" ); } else { ts.sprintf( "%02d:%02d", theTime.hour(), theTime.minute() ); } msg += ts; if (t == magic_playmp ) { pthread_t thread; pthread_create(&thread,NULL, (void * (*) (void *))startPlayer, NULL/* &*/ ); }else { Sound::soundAlarm(); alarmCount = 0; alarmt->start( 5000 ); } if ( !alarmDlg ) { alarmDlg = new AlarmDlg(this); } alarmDlg->setText(msg); // Set for tomorrow, so user wakes up every day, even if they // don't confirm the dialog. Don't set it again when snoozing. if (t != magic_snooze) { applyDailyAlarm(); } if ( !alarmDlg->isVisible() ) { QPEApplication::execDialog(alarmDlg); alarmt->stop(); } } else if ( t == magic_countdown ) { @@ -671,122 +673,125 @@ QDateTime Clock::nextAlarm( int h, int m ) int count = 0; int dow = when.date().dayOfWeek(); while ( when < now || !dayBtn[dayBtnIdx(dow)]->isOn() ) { when = when.addDays( 1 ); dow = when.date().dayOfWeek(); if ( ++count > 7 ) return QDateTime(); } return when; } int Clock::dayBtnIdx( int d ) const { if ( onMonday ) return d-1; else if ( d == 7 ) return 0; else return d; } void Clock::scheduleApplyDailyAlarm() { applyAlarmTimer->start( 5000, TRUE ); } void Clock::applyDailyAlarm() { if ( !init ) return; applyAlarmTimer->stop(); int minute = dailyMinute->value(); int hour = dailyHour->value(); if ( ampm ) { if (hour == 12) hour = 0; if (dailyAmPm->currentItem() == 1 ) hour += 12; } Config config( "Clock" ); config.setGroup( "Daily Alarm" ); config.writeEntry( "Hour", hour ); config.writeEntry( "Minute", minute ); bool enableDaily = dailyEnabled->isChecked(); - bool wasSound = config.readEntry( "SoundEnabled" ); bool isSound = sndCheck->isChecked(); - int oldMagic = wasSound ? magic_playmp : magic_daily; int isMagic = isSound ? magic_playmp : magic_daily; config.writeEntry( "Enabled", enableDaily ); config.writeEntry( "SoundEnabled", isSound ); QString exclDays; int exclCount = 0; for ( int i = 1; i <= 7; i++ ) { if ( !dayBtn[dayBtnIdx(i)]->isOn() ) { if ( !exclDays.isEmpty() ) exclDays += ","; exclDays += QString::number( i ); exclCount++; } } config.writeEntry( "ExcludeDays", exclDays ); - /* try to delete both */ - AlarmServer::deleteAlarm(QDateTime(), "QPE/Application/clock", - "alarm(QDateTime,int)", oldMagic); + /* try to delete all */ + AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, magic_daily); + AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, magic_playmp ); + AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, magic_snooze); + if ( enableDaily && exclCount < 7 ) { QDateTime when = nextAlarm( hour, minute ); - AlarmServer::addAlarm(when, "QPE/Application/clock", - "alarm(QDateTime,int)", isMagic); + AlarmServer::addAlarm(when, ALARM_CLOCK_CHANNEL, + ALARM_CLOCK_MESSAGE, isMagic); } } bool Clock::validDaysSelected(void) { for ( int i = 1; i <= 7; i++ ) { if ( dayBtn[dayBtnIdx(i)]->isOn() ) { return TRUE; } } return FALSE; } void Clock::closeEvent( QCloseEvent *e ) { if (dailyEnabled->isChecked()) { if (!validDaysSelected()) { QMessageBox::warning(this, tr("Select Day"), tr("Daily alarm requires at least\none day to be selected.")); return; } } applyDailyAlarm(); ClockBase::closeEvent(e); } bool Clock::spinBoxValid( QSpinBox *sb ) { bool valid = TRUE; QString tv = sb->text(); for ( uint i = 0; i < tv.length(); i++ ) { if ( !tv[0].isDigit() ) valid = FALSE; } bool ok = FALSE; int v = tv.toInt( &ok ); if ( !ok ) valid = FALSE; if ( v < sb->minValue() || v > sb->maxValue() ) valid = FALSE; return valid; } void Clock::slotBrowseMp3File() { Config config( "qpe" ); config.setGroup("Time"); |