summaryrefslogtreecommitdiff
path: root/noncore/tools/clock/clock.cpp
Side-by-side diff
Diffstat (limited to 'noncore/tools/clock/clock.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/tools/clock/clock.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp
index ef93e11..d5d77bc 100644
--- a/noncore/tools/clock/clock.cpp
+++ b/noncore/tools/clock/clock.cpp
@@ -16,26 +16,35 @@
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "clock.h"
+#include "setAlarm.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 <qlayout.h>
#include <qtimer.h>
#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qbuttongroup.h>
#include <qpainter.h>
+#include <qmessagebox.h>
+#include <qdatetime.h>
#include <math.h>
const double deg2rad = 0.017453292519943295769; // pi/180
const int sw_prec = 2;
@@ -52,12 +61,15 @@ Clock::Clock( QWidget * parent, const char * name, WFlags f )
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 );
@@ -95,37 +107,70 @@ Clock::Clock( QWidget * parent, const char * name, WFlags f )
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 );
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" ) );
+
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)) );
+ 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") {
+ alarmOffBtn->setText( tr( "Alarm On" ) );
+ alarmBool=TRUE;
+ snoozeBtn->show();
+ } else {
+ alarmOffBtn->setText( tr( "Alarm Off" ) );
+ alarmBool=FALSE;
+ snoozeBtn->hide();
+ }
+
QTimer::singleShot( 0, this, SLOT(updateClock()) );
modeSelect(0);
}
Clock::~Clock()
{
@@ -232,12 +277,124 @@ void Clock::modeSelect( int m )
reset->setEnabled( FALSE );
t->start(1000);
}
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) {
+ Config config( "qpe" );
+ config.setGroup("Time");
+ QString tmp;
+ hour = setAlarmDlg->Hour_Slider->value();
+ minute = setAlarmDlg->Minute_Slider->value();
+ snoozeTime=setAlarmDlg->SnoozeSlider->value();
+ if(ampm) {
+ if(setAlarmDlg->Pm_RadioButton->isChecked() && hour < 12 )
+ hour+=12;
+ }
+ config.writeEntry("clockAlarmHour", tmp.setNum( hour ),10);
+ config.writeEntry("clockAlarmMinute",tmp.setNum( minute ),10);
+ config.writeEntry("clockAlarmSnooze",tmp.setNum( snoozeTime ),10);
+ config.write();
+ }
+}
+
+void Clock::slotSnooze()
+{
+ bSound=FALSE;
+ int warn;
+ QTime t = QTime::currentTime();
+ QDateTime whenl( when.date(), t.addSecs( snoozeTime*60));
+ 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) {
+ config.writeEntry("clockAlarmSet","FALSE");
+ alarmOffBtn->setText( tr( "Alarm Off" ) );
+ snoozeBtn->hide();
+ alarmBool=FALSE;
+ alarmOff();
+ } else {
+ config.writeEntry("clockAlarmSet","TRUE");
+ alarmOffBtn->setText( tr( "Alarm On" ) );
+ snoozeBtn->show();
+ alarmBool=TRUE;
+ alarmOn();
+ }
+ config.write();
+}
+
+void Clock::alarmOn()
+{
+ QDate d = QDate::currentDate();
+ QTime tm((int)hour,(int)minute,0);
+ qDebug("Time set "+tm.toString());
+ QTime t = QTime::currentTime();
+ if( t > tm)
+ d = d.addDays(1);
+ int warn;
+ QDateTime whenl(d,tm);
+ when=whenl;
+ AlarmServer::addAlarm( when,
+ "QPE/Application/clock",
+ "alarm(QDateTime,int)", warn );
+ QMessageBox::message("Note","Alarm is set for:\n"+ whenl.toString());
+}
+
+void Clock::alarmOff()
+{
+ int warn;
+ bSound=FALSE;
+ AlarmServer::deleteAlarm( when,
+ "QPE/Application/clock",
+ "alarm(QDateTime,int)", warn );
+ qDebug("Alarm Off "+ when.toString());
+
+}
+
+void Clock::appMessage(const QCString& msg, const QByteArray& data)
+{
+ int stopTimer = 0;
+ int timerStay = 5000;
+ bSound=TRUE;
+ if ( msg == "alarm(QDateTime,int)" ) {
+ Sound::soundAlarm();
+ stopTimer = startTimer( timerStay);
+ }
+}
+
+void Clock::timerEvent( QTimerEvent *e )
+{
+ static int stop = 0;
+ if ( stop < 10 && bSound) {
+ Sound::soundAlarm();
+ stop++;
+ } else {
+ stop = 0;
+ killTimer( e->timerId() );
+ }
+}
+
+
QSizePolicy AnalogClock::sizePolicy() const
{
return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
}
void AnalogClock::drawContents( QPainter *p )