summaryrefslogtreecommitdiff
path: root/noncore/tools/clock/clock.cpp
Unidiff
Diffstat (limited to 'noncore/tools/clock/clock.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/tools/clock/clock.cpp25
1 files changed, 9 insertions, 16 deletions
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp
index ea8e8ca..a85cc19 100644
--- a/noncore/tools/clock/clock.cpp
+++ b/noncore/tools/clock/clock.cpp
@@ -1,59 +1,58 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20// code added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002
20 21
21#include "clock.h" 22#include "clock.h"
22#include "setAlarm.h" 23#include "setAlarm.h"
23 24
24#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
25#include <qpe/qcopenvelope_qws.h> 26#include <qpe/qcopenvelope_qws.h>
26#include <qpe/config.h> 27#include <qpe/config.h>
27#include <qpe/timestring.h> 28#include <qpe/timestring.h>
28#include <qpe/alarmserver.h> 29#include <qpe/alarmserver.h>
29#include <qpe/sound.h> 30#include <qpe/sound.h>
30#include <qpe/resource.h> 31#include <qpe/resource.h>
31#include <qsound.h> 32#include <qsound.h>
32#include <qtimer.h> 33#include <qtimer.h>
33 34
34#include <opie/oclickablelabel.h>
35
36#include <qlcdnumber.h> 35#include <qlcdnumber.h>
37#include <qslider.h> 36#include <qslider.h>
38#include <qlabel.h> 37#include <qlabel.h>
39#include <qlayout.h> 38#include <qlayout.h>
40#include <qtimer.h> 39#include <qtimer.h>
41#include <qpushbutton.h> 40#include <qpushbutton.h>
42#include <qradiobutton.h> 41#include <qradiobutton.h>
43#include <qbuttongroup.h> 42#include <qbuttongroup.h>
44#include <qpainter.h> 43#include <qpainter.h>
45#include <qmessagebox.h> 44#include <qmessagebox.h>
46#include <qdatetime.h> 45#include <qdatetime.h>
47 46
48#include <math.h> 47#include <math.h>
49 48
50const double deg2rad = 0.017453292519943295769; // pi/180 49const double deg2rad = 0.017453292519943295769; // pi/180
51const int sw_prec = 2; 50const int sw_prec = 2;
52 51
53static void toggleScreenSaver( bool on ) 52static void toggleScreenSaver( bool on )
54{ 53{
55 QCopEnvelope e("QPE/System", "setScreenSaverMode(int)" ); 54 QCopEnvelope e("QPE/System", "setScreenSaverMode(int)" );
56 e << (on ? QPEApplication::Enable: QPEApplication::DisableSuspend ); 55 e << (on ? QPEApplication::Enable: QPEApplication::DisableSuspend );
57} 56}
58 57
59Clock::Clock( QWidget * parent, const char * name, WFlags f ) 58Clock::Clock( QWidget * parent, const char * name, WFlags f )
@@ -73,92 +72,87 @@ Clock::Clock( QWidget * parent, const char * name, WFlags f )
73 aclock->display( QTime::currentTime() ); 72 aclock->display( QTime::currentTime() );
74 aclock->setLineWidth( 2 ); 73 aclock->setLineWidth( 2 );
75 74
76 QHBox *hb = new QHBox( this ); 75 QHBox *hb = new QHBox( this );
77 hb->setMargin( 0 ); 76 hb->setMargin( 0 );
78 QWidget *space = new QWidget( hb ); 77 QWidget *space = new QWidget( hb );
79 lcd = new QLCDNumber( hb ); 78 lcd = new QLCDNumber( hb );
80 lcd->setSegmentStyle( QLCDNumber::Flat ); 79 lcd->setSegmentStyle( QLCDNumber::Flat );
81 lcd->setFrameStyle( QFrame::NoFrame ); 80 lcd->setFrameStyle( QFrame::NoFrame );
82 lcd->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) ); 81 lcd->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) );
83 lcd->setFixedHeight( 23 ); 82 lcd->setFixedHeight( 23 );
84 83
85 ampmLabel = new QLabel( tr("PM"), hb ); 84 ampmLabel = new QLabel( tr("PM"), hb );
86 ampmLabel->setFont( QFont( "Helvetica", 14, QFont::Bold ) ); 85 ampmLabel->setFont( QFont( "Helvetica", 14, QFont::Bold ) );
87 ampmLabel->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred ) ); 86 ampmLabel->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred ) );
88 ampmLabel->setAlignment( AlignLeft | AlignBottom ); 87 ampmLabel->setAlignment( AlignLeft | AlignBottom );
89 space = new QWidget( hb ); 88 space = new QWidget( hb );
90 89
91 date = new QLabel( this ); 90 date = new QLabel( this );
92 date->setAlignment( AlignHCenter | AlignVCenter ); 91 date->setAlignment( AlignHCenter | AlignVCenter );
93 date->setFont( QFont( "Helvetica", 14, QFont::Bold ) ); 92 date->setFont( QFont( "Helvetica", 14, QFont::Bold ) );
94 date->setText( TimeString::longDateString( QDate::currentDate() ) ); 93 date->setText( TimeString::longDateString( QDate::currentDate() ) );
95 94
96 QWidget *controls = new QWidget( this ); 95 QWidget *controls = new QWidget( this );
97 QGridLayout *gl = new QGridLayout( controls, 3, 2, 6, 4 ); 96 QGridLayout *gl = new QGridLayout( controls, 2, 2, 6, 4 );
98 97
99 QButtonGroup *grp = new QButtonGroup( controls ); 98 QButtonGroup *grp = new QButtonGroup( controls );
100 grp->setRadioButtonExclusive( true ); 99 grp->setRadioButtonExclusive( true );
101 grp->hide(); 100 grp->hide();
102 101
103 clockRB = new QRadioButton ( tr( "Clock" ), controls ); 102 clockRB = new QRadioButton ( tr( "Clock" ), controls );
104 gl->addWidget( clockRB, 0, 0 ); 103 gl->addWidget( clockRB, 0, 0 );
105 grp->insert( clockRB ); 104 grp->insert( clockRB );
106 105
107 swatchRB = new QRadioButton ( tr( "Stopwatch" ), controls ); 106 swatchRB = new QRadioButton ( tr( "Stopwatch" ), controls );
108 gl->addWidget( swatchRB, 1, 0 ); 107 gl->addWidget( swatchRB, 1, 0 );
109 grp->insert( swatchRB ); 108 grp->insert( swatchRB );
110 109
111 connect( grp, SIGNAL(clicked(int)), this, SLOT(modeSelect(int)) ); 110 connect( grp, SIGNAL(clicked(int)), this, SLOT(modeSelect(int)) );
112 grp->setButton( 0 ); 111 grp->setButton( 0 );
113 112
114 set = new QPushButton ( controls ); 113 set = new QPushButton ( controls );
115 set->setMaximumSize(50,30); 114 set->setMaximumSize(50,30);
116 gl->addWidget( set, 0, 1 ); 115 gl->addWidget( set, 0, 1 );
117 set->setText( tr( "Start" ) ); 116 set->setText( tr( "Start" ) );
118 set->setEnabled( FALSE ); 117 set->setEnabled( FALSE );
119 grp->insert( set ); 118 grp->insert( set );
120 119
121 reset = new QPushButton ( controls ); 120 reset = new QPushButton ( controls );
122 gl->addWidget( reset, 1, 1 ); 121 gl->addWidget( reset, 1, 1 );
123 reset->setText( tr( "Reset" ) ); 122 reset->setText( tr( "Reset" ) );
124 reset->setEnabled( FALSE ); 123 reset->setEnabled( FALSE );
125 grp->insert( reset ); 124 grp->insert( reset );
126 125
127 alarmOffBtn = new QPushButton ( controls ); 126 alarmOffBtn = new QPushButton ( controls );
128// alarmOffBtn->setMaximumSize(60,30); 127// alarmOffBtn->setMaximumSize(60,30);
129 gl->addWidget( alarmOffBtn, 0, 2 ); 128 gl->addWidget( alarmOffBtn, 0, 2 );
130 129
131 alarmBtn = new QPushButton ( controls ); 130 alarmBtn = new QPushButton ( controls );
132 // alarmBtn->setMaximumSize(60,30); 131 // alarmBtn->setMaximumSize(60,30);
133 gl->addWidget( alarmBtn, 1, 2 ); 132 gl->addWidget( alarmBtn, 1, 2 );
134 alarmBtn->setText( tr( "Set Alarm" ) ); 133 alarmBtn->setText( tr( "Set Alarm" ) );
135 134
136 OClickableLabel *click = new OClickableLabel(controls, "label" );
137 click->setText(tr("Set date and time." ) );
138 gl->addMultiCellWidget( click, 3, 3, 0, 2, AlignHCenter);
139 connect( click, SIGNAL(clicked() ), this, SLOT(slotAdjustTime() ) );
140
141 connect( set, SIGNAL( pressed() ), SLOT( slotSet() ) ); 135 connect( set, SIGNAL( pressed() ), SLOT( slotSet() ) );
142 connect( reset, SIGNAL( clicked() ), SLOT( slotReset() ) ); 136 connect( reset, SIGNAL( clicked() ), SLOT( slotReset() ) );
143 137
144 connect( alarmBtn, SIGNAL( clicked() ), SLOT( slotSetAlarm() ) ); 138 connect( alarmBtn, SIGNAL( clicked() ), SLOT( slotSetAlarm() ) );
145 connect( snoozeBtn, SIGNAL( clicked() ), SLOT( slotSnooze() ) ); 139 connect( snoozeBtn, SIGNAL( clicked() ), SLOT( slotSnooze() ) );
146 connect( alarmOffBtn, SIGNAL( clicked() ), SLOT( slotToggleAlarm() ) ); 140 connect( alarmOffBtn, SIGNAL( clicked() ), SLOT( slotToggleAlarm() ) );
147 141
148 connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), 142 connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),
149 this, SLOT(appMessage(const QCString&, const QByteArray&)) ); 143 this, SLOT(appMessage(const QCString&, const QByteArray&)) );
150 144
151 t = new QTimer( this ); 145 t = new QTimer( this );
152 connect( t, SIGNAL( timeout() ), SLOT( updateClock() ) ); 146 connect( t, SIGNAL( timeout() ), SLOT( updateClock() ) );
153 t->start( 1000 ); 147 t->start( 1000 );
154 148
155 connect( qApp, SIGNAL( timeChanged() ), SLOT( updateClock() ) ); 149 connect( qApp, SIGNAL( timeChanged() ), SLOT( updateClock() ) );
156 150
157 swatch_running = FALSE; 151 swatch_running = FALSE;
158 swatch_totalms = 0; 152 swatch_totalms = 0;
159 153
160 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) ); 154 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
161 155
162 QString tmp = config.readEntry("clockAlarmHour", ""); 156 QString tmp = config.readEntry("clockAlarmHour", "");
163 bool ok; 157 bool ok;
164 hour = tmp.toInt(&ok,10); 158 hour = tmp.toInt(&ok,10);
@@ -340,82 +334,86 @@ void Clock::slotToggleAlarm()
340 } else { 334 } else {
341 config.writeEntry("clockAlarmSet","TRUE"); 335 config.writeEntry("clockAlarmSet","TRUE");
342 alarmOffBtn->setText( tr( "Alarm Is On" ) ); 336 alarmOffBtn->setText( tr( "Alarm Is On" ) );
343 snoozeBtn->show(); 337 snoozeBtn->show();
344 alarmBool=TRUE; 338 alarmBool=TRUE;
345 alarmOn(); 339 alarmOn();
346 } 340 }
347 config.write(); 341 config.write();
348} 342}
349 343
350void Clock::alarmOn() 344void Clock::alarmOn()
351{ 345{
352 QDate d = QDate::currentDate(); 346 QDate d = QDate::currentDate();
353 QTime tm((int)hour,(int)minute,0); 347 QTime tm((int)hour,(int)minute,0);
354 qDebug("Time set "+tm.toString()); 348 qDebug("Time set "+tm.toString());
355 QTime t = QTime::currentTime(); 349 QTime t = QTime::currentTime();
356 if( t > tm) 350 if( t > tm)
357 d = d.addDays(1); 351 d = d.addDays(1);
358 int warn; 352 int warn;
359 QDateTime whenl(d,tm); 353 QDateTime whenl(d,tm);
360 when=whenl; 354 when=whenl;
361 AlarmServer::addAlarm( when, 355 AlarmServer::addAlarm( when,
362 "QPE/Application/clock", 356 "QPE/Application/clock",
363 "alarm(QDateTime,int)", warn ); 357 "alarm(QDateTime,int)", warn );
364 QMessageBox::message("Note","Alarm is set for:\n"+ whenl.toString()); 358 setCaption("Alarm set: "+ whenl.toString());
365} 359}
366 360
367void Clock::alarmOff() 361void Clock::alarmOff()
368{ 362{
369 int warn; 363 int warn;
370 bSound=FALSE; 364 bSound=FALSE;
371 AlarmServer::deleteAlarm( when, 365 AlarmServer::deleteAlarm( when,
372 "QPE/Application/clock", 366 "QPE/Application/clock",
373 "alarm(QDateTime,int)", warn ); 367 "alarm(QDateTime,int)", warn );
374 qDebug("Alarm Off "+ when.toString()); 368 qDebug("Alarm Off "+ when.toString());
375 369 setCaption("Clock");
376} 370}
377 371
378void Clock::appMessage(const QCString& msg, const QByteArray& data) 372void Clock::appMessage(const QCString& msg, const QByteArray& data)
379{ 373{
380 int stopTimer = 0; 374 int stopTimer = 0;
381 int timerStay = 5000; 375 int timerStay = 5000;
382 bSound=TRUE; 376 bSound=TRUE;
383 if ( msg == "alarm(QDateTime,int)" ) { 377 if ( msg == "alarm(QDateTime,int)" ) {
384 Sound::soundAlarm(); 378 Sound::soundAlarm();
385 stopTimer = startTimer( timerStay); 379 stopTimer = startTimer( timerStay);
386 } 380 }
387} 381}
388 382
389void Clock::timerEvent( QTimerEvent *e ) 383void Clock::timerEvent( QTimerEvent *e )
390{ 384{
391 static int stop = 0; 385 static int stop = 0;
392 if ( stop < 10 && bSound) { 386 if ( stop < 120 && bSound) {
393 Sound::soundAlarm(); 387 Sound::soundAlarm();
394 stop++; 388 stop++;
395 } else { 389 } else {
396 stop = 0; 390 stop = 0;
397 killTimer( e->timerId() ); 391 killTimer( e->timerId() );
392 alarmOffBtn->setText( tr( "Alarm Is Off" ) );
393 alarmBool=FALSE;
394 snoozeBtn->hide();
395 setCaption("Clock: Alarm was missed.");
398 } 396 }
399} 397}
400 398
401 399
402QSizePolicy AnalogClock::sizePolicy() const 400QSizePolicy AnalogClock::sizePolicy() const
403{ 401{
404 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); 402 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
405} 403}
406 404
407void AnalogClock::drawContents( QPainter *p ) 405void AnalogClock::drawContents( QPainter *p )
408{ 406{
409 QRect r = contentsRect(); 407 QRect r = contentsRect();
410 QPoint center( r.x() + r.width() / 2, r.y() + r.height() / 2 ); 408 QPoint center( r.x() + r.width() / 2, r.y() + r.height() / 2 );
411 409
412 QPoint l1( r.x() + r.width() / 2, r.y() + 2 ); 410 QPoint l1( r.x() + r.width() / 2, r.y() + 2 );
413 QPoint l2( r.x() + r.width() / 2, r.y() + 8 ); 411 QPoint l2( r.x() + r.width() / 2, r.y() + 8 );
414 412
415 QPoint h1( r.x() + r.width() / 2, r.y() + r.height() / 4 ); 413 QPoint h1( r.x() + r.width() / 2, r.y() + r.height() / 4 );
416 QPoint h2( r.x() + r.width() / 2, r.y() + r.height() / 2 ); 414 QPoint h2( r.x() + r.width() / 2, r.y() + r.height() / 2 );
417 415
418 QPoint m1( r.x() + r.width() / 2, r.y() + r.height() / 8 ); 416 QPoint m1( r.x() + r.width() / 2, r.y() + r.height() / 8 );
419 QPoint m2( r.x() + r.width() / 2, r.y() + r.height() / 2 ); 417 QPoint m2( r.x() + r.width() / 2, r.y() + r.height() / 2 );
420 418
421 QPoint s1( r.x() + r.width() / 2, r.y() + 8 ); 419 QPoint s1( r.x() + r.width() / 2, r.y() + 8 );
@@ -460,29 +458,24 @@ void AnalogClock::drawContents( QPainter *p )
460 p->drawLine( s1, s2 ); 458 p->drawLine( s1, s2 );
461 459
462 if ( !clear ) 460 if ( !clear )
463 prevTime = currTime; 461 prevTime = currTime;
464} 462}
465 463
466void AnalogClock::display( const QTime& t ) 464void AnalogClock::display( const QTime& t )
467{ 465{
468 currTime = t; 466 currTime = t;
469 clear = true; 467 clear = true;
470 repaint( false ); 468 repaint( false );
471 clear = false; 469 clear = false;
472 repaint( false ); 470 repaint( false );
473} 471}
474 472
475QPoint AnalogClock::rotate( QPoint c, QPoint p, int a ) 473QPoint AnalogClock::rotate( QPoint c, QPoint p, int a )
476{ 474{
477 double angle = deg2rad * ( - a + 180 ); 475 double angle = deg2rad * ( - a + 180 );
478 double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) - 476 double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) -
479 ( p.y() - c.y() ) * sin( angle ); 477 ( p.y() - c.y() ) * sin( angle );
480 double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) + 478 double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) +
481 ( p.x() - c.x() ) * sin( angle ); 479 ( p.x() - c.x() ) * sin( angle );
482 return QPoint( nx, ny ); 480 return QPoint( nx, ny );
483} 481}
484void Clock::slotAdjustTime()
485{
486 QCopEnvelope e("QPE/System", "execute(QString)");
487 e << QString("systemtime");
488}