summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/clock/clock.cpp29
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
@@ -1,330 +1,332 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the 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// changes added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002 20// changes added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002
21// changes added and Copyright (C) by Holger Freyther 2004 21// changes added and Copyright (C) by Holger Freyther 2004
22 22
23#include "clock.h" 23#include "clock.h"
24 24
25#include "analogclock.h" 25#include "analogclock.h"
26 26
27#include <qtabwidget.h> 27#include <qtabwidget.h>
28 28
29#include <opie2/ofiledialog.h> 29#include <opie2/ofiledialog.h>
30 30
31#include <qpe/qpeapplication.h> 31#include <qpe/qpeapplication.h>
32#include <qpe/qcopenvelope_qws.h> 32#include <qpe/qcopenvelope_qws.h>
33#include <qpe/config.h> 33#include <qpe/config.h>
34#include <qpe/timestring.h> 34#include <qpe/timestring.h>
35#include <qpe/alarmserver.h> 35#include <qpe/alarmserver.h>
36#include <qpe/sound.h> 36#include <qpe/sound.h>
37#include <qpe/resource.h> 37#include <qpe/resource.h>
38#include <qsound.h> 38#include <qsound.h>
39#include <qtimer.h> 39#include <qtimer.h>
40 40
41 41
42 42
43#include <qlcdnumber.h> 43#include <qlcdnumber.h>
44#include <qslider.h> 44#include <qslider.h>
45#include <qlabel.h> 45#include <qlabel.h>
46#include <qtimer.h> 46#include <qtimer.h>
47#include <qpushbutton.h> 47#include <qpushbutton.h>
48#include <qtoolbutton.h> 48#include <qtoolbutton.h>
49#include <qpainter.h> 49#include <qpainter.h>
50#include <qmessagebox.h> 50#include <qmessagebox.h>
51#include <qdatetime.h> 51#include <qdatetime.h>
52#include <qspinbox.h> 52#include <qspinbox.h>
53#include <qcombobox.h> 53#include <qcombobox.h>
54#include <qcheckbox.h> 54#include <qcheckbox.h>
55#include <qgroupbox.h> 55#include <qgroupbox.h>
56#include <qlayout.h> 56#include <qlayout.h>
57#include <qhbox.h> 57#include <qhbox.h>
58#include <qlineedit.h> 58#include <qlineedit.h>
59 59
60static const int sw_prec = 2; 60static const int sw_prec = 2;
61static const int magic_daily = 2292922; 61static const int magic_daily = 2292922;
62static const int magic_countdown = 2292923; 62static const int magic_countdown = 2292923;
63static const int magic_snooze = 2292924; 63static const int magic_snooze = 2292924;
64static const int magic_playmp = 2292925; 64static const int magic_playmp = 2292925;
65static const char ALARM_CLOCK_CHANNEL [] = "QPE/Application/clock";
66static const char ALARM_CLOCK_MESSAGE [] = "alarm(QDateTime,int)";
65 67
66#include <math.h> 68#include <math.h>
67#include <unistd.h> 69#include <unistd.h>
68#include <sys/types.h> 70#include <sys/types.h>
69 71
70#include <pthread.h> 72#include <pthread.h>
71 73
72 74
73static void toggleScreenSaver( bool on ) 75static void toggleScreenSaver( bool on )
74{ 76{
75 QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" ); 77 QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" );
76 e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend ); 78 e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend );
77} 79}
78 80
79static void startPlayer() 81static void startPlayer()
80{ 82{
81 Config config( "qpe" ); 83 Config config( "qpe" );
82 config.setGroup( "Time" ); 84 config.setGroup( "Time" );
83 sleep(15); 85 sleep(15);
84 QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" ); 86 QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" );
85 e << config.readEntry( "mp3File", "" ); 87 e << config.readEntry( "mp3File", "" );
86} 88}
87 89
88class MySpinBox : public QSpinBox 90class MySpinBox : public QSpinBox
89{ 91{
90public: 92public:
91 QLineEdit *lineEdit() const { 93 QLineEdit *lineEdit() const {
92 return editor(); 94 return editor();
93 } 95 }
94}; 96};
95 97
96// 98//
97// 99//
98// 100//
99AlarmDlg::AlarmDlg(QWidget *parent, const char *name, bool modal, 101AlarmDlg::AlarmDlg(QWidget *parent, const char *name, bool modal,
100 const QString &txt) : 102 const QString &txt) :
101 AlarmDlgBase(parent, name, modal) 103 AlarmDlgBase(parent, name, modal)
102{ 104{
103 setCaption( tr("Clock") ); 105 setCaption( tr("Clock") );
104 pixmap->setPixmap( Resource::loadPixmap("clock/alarmbell") ); 106 pixmap->setPixmap( Resource::loadPixmap("clock/alarmbell") );
105 alarmDlgLabel->setText(txt); 107 alarmDlgLabel->setText(txt);
106 108
107 connect(snoozeTime, SIGNAL(valueChanged(int)), this, 109 connect(snoozeTime, SIGNAL(valueChanged(int)), this,
108 SLOT(changePrompt(int))); 110 SLOT(changePrompt(int)));
109 connect(cmdOk, SIGNAL(clicked()), this, SLOT(checkSnooze())); 111 connect(cmdOk, SIGNAL(clicked()), this, SLOT(checkSnooze()));
110} 112}
111 113
112// 114//
113// 115//
114// 116//
115void 117void
116AlarmDlg::setText(const QString &txt) 118AlarmDlg::setText(const QString &txt)
117{ 119{
118 alarmDlgLabel->setText(txt); 120 alarmDlgLabel->setText(txt);
119} 121}
120 122
121// 123//
122// 124//
123// 125//
124void 126void
125AlarmDlg::checkSnooze(void) 127AlarmDlg::checkSnooze(void)
126{ 128{
127 // 129 //
128 // Ensure we have only one snooze alarm. 130 // Ensure we have only one snooze alarm.
129 // 131 //
130 AlarmServer::deleteAlarm(QDateTime(), "QPE/Application/clock", 132 AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
131 "alarm(QDateTime,int)", magic_snooze); 133 ALARM_CLOCK_MESSAGE, magic_snooze);
132 134
133 if (snoozeTime->value() > 0) { 135 if (snoozeTime->value() > 0) {
134 QDateTime wake = QDateTime::currentDateTime(); 136 QDateTime wake = QDateTime::currentDateTime();
135 wake = wake.addSecs(snoozeTime->value() * 60); // snoozeTime in minutes 137 wake = wake.addSecs(snoozeTime->value() * 60); // snoozeTime in minutes
136 138
137 AlarmServer::addAlarm(wake, "QPE/Application/clock", 139 AlarmServer::addAlarm(wake, ALARM_CLOCK_CHANNEL,
138 "alarm(QDateTime,int)", magic_snooze); 140 ALARM_CLOCK_MESSAGE, magic_snooze);
139 } 141 }
140 accept(); 142 accept();
141} 143}
142 144
143 145
144 146
145void 147void
146AlarmDlg::changePrompt(int mins) 148AlarmDlg::changePrompt(int mins)
147{ 149{
148 cmdOk->setText(mins > 0 ? tr("Snooze") : tr("Close") ); 150 cmdOk->setText(mins > 0 ? tr("Snooze") : tr("Close") );
149} 151}
150 152
151 153
152 154
153Clock::Clock( QWidget * parent, const char *, WFlags f ) 155Clock::Clock( QWidget * parent, const char *, WFlags f )
154 : ClockBase( parent, "clock", f ), swatch_splitms(99), init(FALSE) // No tr 156 : ClockBase( parent, "clock", f ), swatch_splitms(99), init(FALSE) // No tr
155{ 157{
156 alarmDlg = 0; 158 alarmDlg = 0;
157 swLayout = 0; 159 swLayout = 0;
158 dayBtn = new QToolButton * [7]; 160 dayBtn = new QToolButton * [7];
159 161
160 Config config( "qpe" ); 162 Config config( "qpe" );
161 config.setGroup("Time"); 163 config.setGroup("Time");
162 ampm = config.readBoolEntry( "AMPM", TRUE ); 164 ampm = config.readBoolEntry( "AMPM", TRUE );
163 onMonday = config.readBoolEntry( "MONDAY" ); 165 onMonday = config.readBoolEntry( "MONDAY" );
164 166
165 connect( tabs, SIGNAL(currentChanged(QWidget*)), 167 connect( tabs, SIGNAL(currentChanged(QWidget*)),
166 this, SLOT(tabChanged(QWidget*)) ); 168 this, SLOT(tabChanged(QWidget*)) );
167 169
168 analogStopwatch = new AnalogClock( swFrame ); 170 analogStopwatch = new AnalogClock( swFrame );
169 stopwatchLcd = new QLCDNumber( swFrame ); 171 stopwatchLcd = new QLCDNumber( swFrame );
170 stopwatchLcd->setFrameStyle( QFrame::NoFrame ); 172 stopwatchLcd->setFrameStyle( QFrame::NoFrame );
171 stopwatchLcd->setSegmentStyle( QLCDNumber::Flat ); 173 stopwatchLcd->setSegmentStyle( QLCDNumber::Flat );
172 stopwatchLcd->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred) ); 174 stopwatchLcd->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred) );
173 175
174 analogClock->display( QTime::currentTime() ); 176 analogClock->display( QTime::currentTime() );
175 clockLcd->setNumDigits( 5 ); 177 clockLcd->setNumDigits( 5 );
176 clockLcd->setFixedWidth( clockLcd->sizeHint().width() ); 178 clockLcd->setFixedWidth( clockLcd->sizeHint().width() );
177 date->setText( TimeString::dateString( QDate::currentDate(), TimeString::currentDateFormat() ) ); 179 date->setText( TimeString::dateString( QDate::currentDate(), TimeString::currentDateFormat() ) );
178 if ( qApp->desktop()->width() < 200 ) 180 if ( qApp->desktop()->width() < 200 )
179 date->setFont( QFont(date->font().family(), 14, QFont::Bold) ); 181 date->setFont( QFont(date->font().family(), 14, QFont::Bold) );
180 if ( qApp->desktop()->height() > 240 ) { 182 if ( qApp->desktop()->height() > 240 ) {
181 clockLcd->setFixedHeight( 30 ); 183 clockLcd->setFixedHeight( 30 );
182 stopwatchLcd->setFixedHeight( 30 ); 184 stopwatchLcd->setFixedHeight( 30 );
183 } 185 }
184 186
185 connect( stopStart, SIGNAL(pressed()), SLOT(stopStartStopWatch()) ); 187 connect( stopStart, SIGNAL(pressed()), SLOT(stopStartStopWatch()) );
186 connect( reset, SIGNAL(pressed()), SLOT(resetStopWatch()) ); 188 connect( reset, SIGNAL(pressed()), SLOT(resetStopWatch()) );
187 189
188 t = new QTimer( this ); 190 t = new QTimer( this );
189 connect( t, SIGNAL(timeout()), SLOT(updateClock()) ); 191 connect( t, SIGNAL(timeout()), SLOT(updateClock()) );
190 t->start( 1000 ); 192 t->start( 1000 );
191 193
192 applyAlarmTimer = new QTimer( this ); 194 applyAlarmTimer = new QTimer( this );
193 connect( applyAlarmTimer, SIGNAL(timeout()), 195 connect( applyAlarmTimer, SIGNAL(timeout()),
194 this, SLOT(applyDailyAlarm()) ); 196 this, SLOT(applyDailyAlarm()) );
195 197
196 alarmt = new QTimer( this ); 198 alarmt = new QTimer( this );
197 connect( alarmt, SIGNAL(timeout()), SLOT(alarmTimeout()) ); 199 connect( alarmt, SIGNAL(timeout()), SLOT(alarmTimeout()) );
198 200
199 connect( qApp, SIGNAL(timeChanged()), SLOT(updateClock()) ); 201 connect( qApp, SIGNAL(timeChanged()), SLOT(updateClock()) );
200 connect( qApp, SIGNAL(timeChanged()), SLOT(applyDailyAlarm()) ); 202 connect( qApp, SIGNAL(timeChanged()), SLOT(applyDailyAlarm()) );
201 203
202 swatch_running = FALSE; 204 swatch_running = FALSE;
203 swatch_totalms = 0; 205 swatch_totalms = 0;
204 swatch_currLap = 0; 206 swatch_currLap = 0;
205 swatch_dispLap = 0; 207 swatch_dispLap = 0;
206 stopwatchLcd->setNumDigits( 8+1+sw_prec ); 208 stopwatchLcd->setNumDigits( 8+1+sw_prec );
207 stopwatchLcd->display( "00:00:00.00" ); 209 stopwatchLcd->display( "00:00:00.00" );
208 210
209 QVBoxLayout *lvb = new QVBoxLayout( lapFrame ); 211 QVBoxLayout *lvb = new QVBoxLayout( lapFrame );
210 nextLapBtn = new QToolButton( UpArrow, lapFrame ); 212 nextLapBtn = new QToolButton( UpArrow, lapFrame );
211 connect( nextLapBtn, SIGNAL(clicked()), this, SLOT(nextLap()) ); 213 connect( nextLapBtn, SIGNAL(clicked()), this, SLOT(nextLap()) );
212 nextLapBtn->setAccel( Key_Up ); 214 nextLapBtn->setAccel( Key_Up );
213 lvb->addWidget( nextLapBtn ); 215 lvb->addWidget( nextLapBtn );
214 prevLapBtn = new QToolButton( DownArrow, lapFrame ); 216 prevLapBtn = new QToolButton( DownArrow, lapFrame );
215 connect( prevLapBtn, SIGNAL(clicked()), this, SLOT(prevLap()) ); 217 connect( prevLapBtn, SIGNAL(clicked()), this, SLOT(prevLap()) );
216 prevLapBtn->setAccel( Key_Down ); 218 prevLapBtn->setAccel( Key_Down );
217 prevLapBtn->setMinimumWidth( 15 ); 219 prevLapBtn->setMinimumWidth( 15 );
218 lvb->addWidget( prevLapBtn ); 220 lvb->addWidget( prevLapBtn );
219 prevLapBtn->setEnabled( FALSE ); 221 prevLapBtn->setEnabled( FALSE );
220 nextLapBtn->setEnabled( FALSE ); 222 nextLapBtn->setEnabled( FALSE );
221 223
222 reset->setEnabled( FALSE ); 224 reset->setEnabled( FALSE );
223 225
224 lapLcd->setNumDigits( 8+1+sw_prec ); 226 lapLcd->setNumDigits( 8+1+sw_prec );
225 lapLcd->display( "00:00:00.00" ); 227 lapLcd->display( "00:00:00.00" );
226 228
227 splitLcd->setNumDigits( 8+1+sw_prec ); 229 splitLcd->setNumDigits( 8+1+sw_prec );
228 splitLcd->display( "00:00:00.00" ); 230 splitLcd->display( "00:00:00.00" );
229 231
230 lapNumLcd->display( 1 ); 232 lapNumLcd->display( 1 );
231 233
232 lapTimer = new QTimer( this ); 234 lapTimer = new QTimer( this );
233 connect( lapTimer, SIGNAL(timeout()), this, SLOT(lapTimeout()) ); 235 connect( lapTimer, SIGNAL(timeout()), this, SLOT(lapTimeout()) );
234 236
235 for (uint s = 0; s < swatch_splitms.count(); s++ ) 237 for (uint s = 0; s < swatch_splitms.count(); s++ )
236 swatch_splitms[(int)s] = 0; 238 swatch_splitms[(int)s] = 0;
237 239
238 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) ); 240 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
239 241
240 cdGroup->hide(); // XXX implement countdown timer. 242 cdGroup->hide(); // XXX implement countdown timer.
241 243
242 connect( dailyHour, SIGNAL(valueChanged(int)), this, SLOT(scheduleApplyDailyAlarm()) ); 244 connect( dailyHour, SIGNAL(valueChanged(int)), this, SLOT(scheduleApplyDailyAlarm()) );
243 connect( dailyMinute, SIGNAL(valueChanged(int)), this, SLOT(setDailyMinute(int)) ); 245 connect( dailyMinute, SIGNAL(valueChanged(int)), this, SLOT(setDailyMinute(int)) );
244 connect( dailyAmPm, SIGNAL(activated(int)), this, SLOT(setDailyAmPm(int)) ); 246 connect( dailyAmPm, SIGNAL(activated(int)), this, SLOT(setDailyAmPm(int)) );
245 connect( dailyEnabled, SIGNAL(toggled(bool)), this, SLOT(enableDaily(bool)) ); 247 connect( dailyEnabled, SIGNAL(toggled(bool)), this, SLOT(enableDaily(bool)) );
246 cdLcd->display( "00:00" ); 248 cdLcd->display( "00:00" );
247 249
248 dailyMinute->setValidator(0); 250 dailyMinute->setValidator(0);
249 251
250 Config cConfig( "Clock" ); // No tr 252 Config cConfig( "Clock" ); // No tr
251 cConfig.setGroup( "Daily Alarm" ); 253 cConfig.setGroup( "Daily Alarm" );
252 254
253 QStringList days; 255 QStringList days;
254 days.append( tr("Mon", "Monday") ); 256 days.append( tr("Mon", "Monday") );
255 days.append( tr("Tue", "Tuesday") ); 257 days.append( tr("Tue", "Tuesday") );
256 days.append( tr("Wed", "Wednesday") ); 258 days.append( tr("Wed", "Wednesday") );
257 days.append( tr("Thu", "Thursday") ); 259 days.append( tr("Thu", "Thursday") );
258 days.append( tr("Fri", "Friday") ); 260 days.append( tr("Fri", "Friday") );
259 days.append( tr("Sat", "Saturday") ); 261 days.append( tr("Sat", "Saturday") );
260 days.append( tr("Sun", "Sunday") ); 262 days.append( tr("Sun", "Sunday") );
261 263
262 int i; 264 int i;
263 QHBoxLayout *hb = new QHBoxLayout( daysFrame ); 265 QHBoxLayout *hb = new QHBoxLayout( daysFrame );
264 for ( i = 0; i < 7; i++ ) { 266 for ( i = 0; i < 7; i++ ) {
265 dayBtn[i] = new QToolButton( daysFrame ); 267 dayBtn[i] = new QToolButton( daysFrame );
266 hb->addWidget( dayBtn[i] ); 268 hb->addWidget( dayBtn[i] );
267 dayBtn[i]->setToggleButton( TRUE ); 269 dayBtn[i]->setToggleButton( TRUE );
268 dayBtn[i]->setOn( TRUE ); 270 dayBtn[i]->setOn( TRUE );
269 dayBtn[i]->setFocusPolicy( StrongFocus ); 271 dayBtn[i]->setFocusPolicy( StrongFocus );
270 connect( dayBtn[i], SIGNAL(toggled(bool)), this, SLOT(scheduleApplyDailyAlarm()) ); 272 connect( dayBtn[i], SIGNAL(toggled(bool)), this, SLOT(scheduleApplyDailyAlarm()) );
271 } 273 }
272 274
273 for ( i = 0; i < 7; i++ ) 275 for ( i = 0; i < 7; i++ )
274 dayBtn[dayBtnIdx(i+1)]->setText( days[i] ); 276 dayBtn[dayBtnIdx(i+1)]->setText( days[i] );
275 277
276 QStringList exclDays = cConfig.readListEntry( "ExcludeDays", ',' ); 278 QStringList exclDays = cConfig.readListEntry( "ExcludeDays", ',' );
277 QStringList::Iterator it; 279 QStringList::Iterator it;
278 for ( it = exclDays.begin(); it != exclDays.end(); ++it ) { 280 for ( it = exclDays.begin(); it != exclDays.end(); ++it ) {
279 int d = (*it).toInt(); 281 int d = (*it).toInt();
280 if ( d >= 1 && d <= 7 ) 282 if ( d >= 1 && d <= 7 )
281 dayBtn[dayBtnIdx(d)]->setOn( FALSE ); 283 dayBtn[dayBtnIdx(d)]->setOn( FALSE );
282 } 284 }
283 285
284 bool alarm = cConfig.readBoolEntry("Enabled", FALSE); 286 bool alarm = cConfig.readBoolEntry("Enabled", FALSE);
285 bool sound = cConfig.readBoolEntry("SoundEnabled", FALSE ); 287 bool sound = cConfig.readBoolEntry("SoundEnabled", FALSE );
286 dailyEnabled->setChecked( alarm ); 288 dailyEnabled->setChecked( alarm );
287 sndGroup->setEnabled( alarm ); 289 sndGroup->setEnabled( alarm );
288 sndCheck->setChecked( sound ); 290 sndCheck->setChecked( sound );
289 sndChoose->setEnabled( sound ); 291 sndChoose->setEnabled( sound );
290 sndFileName->setEnabled( sound ); 292 sndFileName->setEnabled( sound );
291 293
292 // FIXME ODP migrate to own config class.. merge config options 294 // FIXME ODP migrate to own config class.. merge config options
293 Config cfg_qpe( "qpe" ); 295 Config cfg_qpe( "qpe" );
294 cfg_qpe.setGroup( "Time" ); 296 cfg_qpe.setGroup( "Time" );
295 sndFileName->setText( cfg_qpe.readEntry( "mp3File" ) ); 297 sndFileName->setText( cfg_qpe.readEntry( "mp3File" ) );
296 // 298 //
297 299
298 int m = cConfig.readNumEntry( "Minute", 0 ); 300 int m = cConfig.readNumEntry( "Minute", 0 );
299 dailyMinute->setValue( m ); 301 dailyMinute->setValue( m );
300// dailyMinute->setPrefix( m <= 9 ? "0" : "" ); 302// dailyMinute->setPrefix( m <= 9 ? "0" : "" );
301 int h = cConfig.readNumEntry( "Hour", 7 ); 303 int h = cConfig.readNumEntry( "Hour", 7 );
302 if ( ampm ) { 304 if ( ampm ) {
303 if (h > 12) { 305 if (h > 12) {
304 h -= 12; 306 h -= 12;
305 dailyAmPm->setCurrentItem( 1 ); 307 dailyAmPm->setCurrentItem( 1 );
306 } 308 }
307 if (h == 0) h = 12; 309 if (h == 0) h = 12;
308 dailyHour->setMinValue( 1 ); 310 dailyHour->setMinValue( 1 );
309 dailyHour->setMaxValue( 12 ); 311 dailyHour->setMaxValue( 12 );
310 } else { 312 } else {
311 dailyAmPm->hide(); 313 dailyAmPm->hide();
312 } 314 }
313 dailyHour->setValue( h ); 315 dailyHour->setValue( h );
314 316
315 connect( ((MySpinBox*)dailyHour)->lineEdit(), SIGNAL(textChanged(const QString&)), 317 connect( ((MySpinBox*)dailyHour)->lineEdit(), SIGNAL(textChanged(const QString&)),
316 this, SLOT(dailyEdited()) ); 318 this, SLOT(dailyEdited()) );
317 connect( ((MySpinBox*)dailyMinute)->lineEdit(), SIGNAL(textChanged(const QString&)), 319 connect( ((MySpinBox*)dailyMinute)->lineEdit(), SIGNAL(textChanged(const QString&)),
318 this, SLOT(dailyEdited()) ); 320 this, SLOT(dailyEdited()) );
319 321
320#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 322#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
321 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), 323 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)),
322 this, SLOT(appMessage(const QCString&,const QByteArray&)) ); 324 this, SLOT(appMessage(const QCString&,const QByteArray&)) );
323#endif 325#endif
324 326
325 QTimer::singleShot( 0, this, SLOT(updateClock()) ); 327 QTimer::singleShot( 0, this, SLOT(updateClock()) );
326 swFrame->installEventFilter( this ); 328 swFrame->installEventFilter( this );
327 329
328 init = TRUE; 330 init = TRUE;
329} 331}
330 332
@@ -382,425 +384,428 @@ void Clock::changeClock( bool a )
382 if ( ampm ) { 384 if ( ampm ) {
383 if (hour == 12) 385 if (hour == 12)
384 hour = 0; 386 hour = 0;
385 if (dailyAmPm->currentItem() == 1 ) 387 if (dailyAmPm->currentItem() == 1 )
386 hour += 12; 388 hour += 12;
387 dailyHour->setMinValue( 0 ); 389 dailyHour->setMinValue( 0 );
388 dailyHour->setMaxValue( 23 ); 390 dailyHour->setMaxValue( 23 );
389 dailyAmPm->hide(); 391 dailyAmPm->hide();
390 } else { 392 } else {
391 if (hour > 12) { 393 if (hour > 12) {
392 hour -= 12; 394 hour -= 12;
393 dailyAmPm->setCurrentItem( 1 ); 395 dailyAmPm->setCurrentItem( 1 );
394 } 396 }
395 if (hour == 0) hour = 12; 397 if (hour == 0) hour = 12;
396 dailyHour->setMinValue( 1 ); 398 dailyHour->setMinValue( 1 );
397 dailyHour->setMaxValue( 12 ); 399 dailyHour->setMaxValue( 12 );
398 dailyAmPm->show(); 400 dailyAmPm->show();
399 } 401 }
400 dailyMinute->setValue( minute ); 402 dailyMinute->setValue( minute );
401 dailyHour->setValue( hour ); 403 dailyHour->setValue( hour );
402 } 404 }
403 ampm = a; 405 ampm = a;
404 updateClock(); 406 updateClock();
405} 407}
406 408
407void Clock::stopStartStopWatch() 409void Clock::stopStartStopWatch()
408{ 410{
409 if ( swatch_running ) { 411 if ( swatch_running ) {
410 swatch_totalms += swatch_start.elapsed(); 412 swatch_totalms += swatch_start.elapsed();
411 swatch_splitms[swatch_currLap] = swatch_totalms; 413 swatch_splitms[swatch_currLap] = swatch_totalms;
412 stopStart->setText( tr("Start") ); 414 stopStart->setText( tr("Start") );
413 reset->setText( tr("Reset") ); 415 reset->setText( tr("Reset") );
414 reset->setEnabled( TRUE ); 416 reset->setEnabled( TRUE );
415 t->stop(); 417 t->stop();
416 swatch_running = FALSE; 418 swatch_running = FALSE;
417 toggleScreenSaver( TRUE ); 419 toggleScreenSaver( TRUE );
418 updateClock(); 420 updateClock();
419 } else { 421 } else {
420 swatch_start.start(); 422 swatch_start.start();
421 stopStart->setText( tr("Stop") ); 423 stopStart->setText( tr("Stop") );
422 reset->setText( tr("Lap/Split") ); 424 reset->setText( tr("Lap/Split") );
423 reset->setEnabled( swatch_currLap < 98 ); 425 reset->setEnabled( swatch_currLap < 98 );
424 t->start( 1000 ); 426 t->start( 1000 );
425 swatch_running = TRUE; 427 swatch_running = TRUE;
426 // disable screensaver while stop watch is running 428 // disable screensaver while stop watch is running
427 toggleScreenSaver( FALSE ); 429 toggleScreenSaver( FALSE );
428 } 430 }
429 swatch_dispLap = swatch_currLap; 431 swatch_dispLap = swatch_currLap;
430 updateLap(); 432 updateLap();
431 prevLapBtn->setEnabled( swatch_dispLap ); 433 prevLapBtn->setEnabled( swatch_dispLap );
432 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap ); 434 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );
433 stopStart->setAccel( Key_Return ); 435 stopStart->setAccel( Key_Return );
434} 436}
435 437
436void Clock::resetStopWatch() 438void Clock::resetStopWatch()
437{ 439{
438 if ( swatch_running ) { 440 if ( swatch_running ) {
439 swatch_splitms[swatch_currLap] = swatch_totalms+swatch_start.elapsed(); 441 swatch_splitms[swatch_currLap] = swatch_totalms+swatch_start.elapsed();
440 swatch_dispLap = swatch_currLap; 442 swatch_dispLap = swatch_currLap;
441 if ( swatch_currLap < 98 ) // allow up to 99 laps 443 if ( swatch_currLap < 98 ) // allow up to 99 laps
442 swatch_currLap++; 444 swatch_currLap++;
443 reset->setEnabled( swatch_currLap < 98 ); 445 reset->setEnabled( swatch_currLap < 98 );
444 updateLap(); 446 updateLap();
445 lapTimer->start( 2000, TRUE ); 447 lapTimer->start( 2000, TRUE );
446 } else { 448 } else {
447 swatch_start.start(); 449 swatch_start.start();
448 swatch_totalms = 0; 450 swatch_totalms = 0;
449 swatch_currLap = 0; 451 swatch_currLap = 0;
450 swatch_dispLap = 0; 452 swatch_dispLap = 0;
451 for ( uint i = 0; i < swatch_splitms.count(); i++ ) 453 for ( uint i = 0; i < swatch_splitms.count(); i++ )
452 swatch_splitms[(int)i] = 0; 454 swatch_splitms[(int)i] = 0;
453 updateLap(); 455 updateLap();
454 updateClock(); 456 updateClock();
455 reset->setText( tr("Lap/Split") ); 457 reset->setText( tr("Lap/Split") );
456 reset->setEnabled( FALSE ); 458 reset->setEnabled( FALSE );
457 } 459 }
458 prevLapBtn->setEnabled( swatch_dispLap ); 460 prevLapBtn->setEnabled( swatch_dispLap );
459 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap ); 461 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );
460} 462}
461 463
462void Clock::prevLap() 464void Clock::prevLap()
463{ 465{
464 if ( swatch_dispLap > 0 ) { 466 if ( swatch_dispLap > 0 ) {
465 swatch_dispLap--; 467 swatch_dispLap--;
466 updateLap(); 468 updateLap();
467 prevLapBtn->setEnabled( swatch_dispLap ); 469 prevLapBtn->setEnabled( swatch_dispLap );
468 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap ); 470 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );
469 } 471 }
470} 472}
471 473
472void Clock::nextLap() 474void Clock::nextLap()
473{ 475{
474 if ( swatch_dispLap < swatch_currLap ) { 476 if ( swatch_dispLap < swatch_currLap ) {
475 swatch_dispLap++; 477 swatch_dispLap++;
476 updateLap(); 478 updateLap();
477 prevLapBtn->setEnabled( swatch_dispLap ); 479 prevLapBtn->setEnabled( swatch_dispLap );
478 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap ); 480 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );
479 } 481 }
480} 482}
481 483
482void Clock::lapTimeout() 484void Clock::lapTimeout()
483{ 485{
484 swatch_dispLap = swatch_currLap; 486 swatch_dispLap = swatch_currLap;
485 updateLap(); 487 updateLap();
486 prevLapBtn->setEnabled( swatch_dispLap ); 488 prevLapBtn->setEnabled( swatch_dispLap );
487 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap ); 489 nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );
488} 490}
489 491
490void Clock::updateLap() 492void Clock::updateLap()
491{ 493{
492 if ( swatch_running && swatch_currLap == swatch_dispLap ) { 494 if ( swatch_running && swatch_currLap == swatch_dispLap ) {
493 swatch_splitms[swatch_currLap] = swatch_totalms; 495 swatch_splitms[swatch_currLap] = swatch_totalms;
494 swatch_splitms[swatch_currLap] += swatch_start.elapsed(); 496 swatch_splitms[swatch_currLap] += swatch_start.elapsed();
495 } 497 }
496 int split = swatch_splitms[swatch_dispLap]; 498 int split = swatch_splitms[swatch_dispLap];
497 int lap; 499 int lap;
498 if ( swatch_dispLap > 0 ) 500 if ( swatch_dispLap > 0 )
499 lap = swatch_splitms[swatch_dispLap] - swatch_splitms[swatch_dispLap-1]; 501 lap = swatch_splitms[swatch_dispLap] - swatch_splitms[swatch_dispLap-1];
500 else 502 else
501 lap = swatch_splitms[swatch_dispLap]; 503 lap = swatch_splitms[swatch_dispLap];
502 504
503 lapNumLcd->display( swatch_dispLap+1 ); 505 lapNumLcd->display( swatch_dispLap+1 );
504 bool showMs = !swatch_running || swatch_dispLap!=swatch_currLap; 506 bool showMs = !swatch_running || swatch_dispLap!=swatch_currLap;
505 setSwatchLcd( lapLcd, lap, showMs ); 507 setSwatchLcd( lapLcd, lap, showMs );
506 setSwatchLcd( splitLcd, split, showMs ); 508 setSwatchLcd( splitLcd, split, showMs );
507} 509}
508 510
509void Clock::setSwatchLcd( QLCDNumber *lcd, int ms, bool showMs ) 511void Clock::setSwatchLcd( QLCDNumber *lcd, int ms, bool showMs )
510{ 512{
511 QTime swatch_time = QTime(0,0,0).addMSecs(ms); 513 QTime swatch_time = QTime(0,0,0).addMSecs(ms);
512 QString d = showMs ? QString::number(ms%1000+1000) : QString(" "); 514 QString d = showMs ? QString::number(ms%1000+1000) : QString(" ");
513 QString lcdtext = swatch_time.toString() + "." + d.right(3).left(sw_prec); 515 QString lcdtext = swatch_time.toString() + "." + d.right(3).left(sw_prec);
514 lcd->display( lcdtext ); 516 lcd->display( lcdtext );
515 lcd->repaint( FALSE ); 517 lcd->repaint( FALSE );
516} 518}
517 519
518bool Clock::eventFilter( QObject *o, QEvent *e ) 520bool Clock::eventFilter( QObject *o, QEvent *e )
519{ 521{
520 if ( o == swFrame && e->type() == QEvent::Resize ) { 522 if ( o == swFrame && e->type() == QEvent::Resize ) {
521 QResizeEvent *re = (QResizeEvent *)e; 523 QResizeEvent *re = (QResizeEvent *)e;
522 delete swLayout; 524 delete swLayout;
523 if ( re->size().height() < 80 || re->size().height()*3 < re->size().width() ) 525 if ( re->size().height() < 80 || re->size().height()*3 < re->size().width() )
524 swLayout = new QHBoxLayout( swFrame ); 526 swLayout = new QHBoxLayout( swFrame );
525 else 527 else
526 swLayout = new QVBoxLayout( swFrame ); 528 swLayout = new QVBoxLayout( swFrame );
527 swLayout->addWidget( analogStopwatch ); 529 swLayout->addWidget( analogStopwatch );
528 swLayout->addWidget( stopwatchLcd ); 530 swLayout->addWidget( stopwatchLcd );
529 swLayout->activate(); 531 swLayout->activate();
530 } 532 }
531 533
532 return FALSE; 534 return FALSE;
533} 535}
534 536
535void Clock::tabChanged( QWidget * ) 537void Clock::tabChanged( QWidget * )
536{ 538{
537 if ( tabs->currentPageIndex() == 0 ) { 539 if ( tabs->currentPageIndex() == 0 ) {
538 t->start(1000); 540 t->start(1000);
539 } else if ( tabs->currentPageIndex() == 1 ) { 541 } else if ( tabs->currentPageIndex() == 1 ) {
540 if ( !swatch_running ) 542 if ( !swatch_running )
541 t->stop(); 543 t->stop();
542 stopStart->setAccel( Key_Return ); 544 stopStart->setAccel( Key_Return );
543 } else if ( tabs->currentPageIndex() == 2 ) { 545 } else if ( tabs->currentPageIndex() == 2 ) {
544 t->start(1000); 546 t->start(1000);
545 } 547 }
546 updateClock(); 548 updateClock();
547} 549}
548 550
549void Clock::setDailyAmPm(int) 551void Clock::setDailyAmPm(int)
550{ 552{
551 scheduleApplyDailyAlarm(); 553 scheduleApplyDailyAlarm();
552} 554}
553 555
554void Clock::setDailyMinute( int m ) 556void Clock::setDailyMinute( int m )
555{ 557{
556 dailyMinute->setPrefix( m <= 9 ? "0" : "" ); 558 dailyMinute->setPrefix( m <= 9 ? "0" : "" );
557} 559}
558 560
559void Clock::dailyEdited() 561void Clock::dailyEdited()
560{ 562{
561 if ( spinBoxValid(dailyMinute) && spinBoxValid(dailyHour) ) 563 if ( spinBoxValid(dailyMinute) && spinBoxValid(dailyHour) )
562 scheduleApplyDailyAlarm(); 564 scheduleApplyDailyAlarm();
563 else 565 else
564 applyAlarmTimer->stop(); 566 applyAlarmTimer->stop();
565} 567}
566 568
567void Clock::enableDaily( bool ) 569void Clock::enableDaily( bool )
568{ 570{
569 scheduleApplyDailyAlarm(); 571 scheduleApplyDailyAlarm();
570} 572}
571 573
572void Clock::appMessage( const QCString &msg, const QByteArray &data ) 574void Clock::appMessage( const QCString &msg, const QByteArray &data )
573{ 575{
574 if ( msg == "alarm(QDateTime,int)" ) { 576 if ( msg == ALARM_CLOCK_MESSAGE ) {
575 QDataStream ds(data,IO_ReadOnly); 577 QDataStream ds(data,IO_ReadOnly);
576 QDateTime when; 578 QDateTime when;
577 int t; 579 int t;
578 ds >> when >> t; 580 ds >> when >> t;
579 QTime theTime( when.time() ); 581 QTime theTime( when.time() );
580 if ( t == magic_daily || t == magic_snooze || 582 if ( t == magic_daily || t == magic_snooze ||
581 t == magic_playmp ) { 583 t == magic_playmp ) {
582 QString msg = tr("<b>Daily Alarm:</b><p>"); 584 QString msg = tr("<b>Daily Alarm:</b><p>");
583 QString ts; 585 QString ts;
584 if ( ampm ) { 586 if ( ampm ) {
585 bool pm = FALSE; 587 bool pm = FALSE;
586 int h = theTime.hour(); 588 int h = theTime.hour();
587 if (h > 12) { 589 if (h > 12) {
588 h -= 12; 590 h -= 12;
589 pm = TRUE; 591 pm = TRUE;
590 } 592 }
591 if (h == 0) h = 12; 593 if (h == 0) h = 12;
592 ts.sprintf( "%02d:%02d %s", h, theTime.minute(), pm?"PM":"AM" ); 594 ts.sprintf( "%02d:%02d %s", h, theTime.minute(), pm?"PM":"AM" );
593 } else { 595 } else {
594 ts.sprintf( "%02d:%02d", theTime.hour(), theTime.minute() ); 596 ts.sprintf( "%02d:%02d", theTime.hour(), theTime.minute() );
595 } 597 }
596 msg += ts; 598 msg += ts;
597 599
598 if (t == magic_playmp ) { 600 if (t == magic_playmp ) {
599 pthread_t thread; 601 pthread_t thread;
600 pthread_create(&thread,NULL, (void * (*) (void *))startPlayer, NULL/* &*/ ); 602 pthread_create(&thread,NULL, (void * (*) (void *))startPlayer, NULL/* &*/ );
601 }else { 603 }else {
602 Sound::soundAlarm(); 604 Sound::soundAlarm();
603 alarmCount = 0; 605 alarmCount = 0;
604 alarmt->start( 5000 ); 606 alarmt->start( 5000 );
605 } 607 }
606 if ( !alarmDlg ) { 608 if ( !alarmDlg ) {
607 alarmDlg = new AlarmDlg(this); 609 alarmDlg = new AlarmDlg(this);
608 } 610 }
609 alarmDlg->setText(msg); 611 alarmDlg->setText(msg);
610 612
611 // Set for tomorrow, so user wakes up every day, even if they 613 // Set for tomorrow, so user wakes up every day, even if they
612 // don't confirm the dialog. Don't set it again when snoozing. 614 // don't confirm the dialog. Don't set it again when snoozing.
613 if (t != magic_snooze) { 615 if (t != magic_snooze) {
614 applyDailyAlarm(); 616 applyDailyAlarm();
615 } 617 }
616 618
617 619
618 if ( !alarmDlg->isVisible() ) { 620 if ( !alarmDlg->isVisible() ) {
619 QPEApplication::execDialog(alarmDlg); 621 QPEApplication::execDialog(alarmDlg);
620 alarmt->stop(); 622 alarmt->stop();
621 } 623 }
622 } else if ( t == magic_countdown ) { 624 } else if ( t == magic_countdown ) {
623 // countdown 625 // countdown
624 Sound::soundAlarm(); 626 Sound::soundAlarm();
625 } 627 }
626 } else if ( msg == "setDailyEnabled(int)" ) { 628 } else if ( msg == "setDailyEnabled(int)" ) {
627 QDataStream ds(data,IO_ReadOnly); 629 QDataStream ds(data,IO_ReadOnly);
628 int enableDaily; 630 int enableDaily;
629 ds >> enableDaily; 631 ds >> enableDaily;
630 dailyEnabled->setChecked( enableDaily ); 632 dailyEnabled->setChecked( enableDaily );
631 applyDailyAlarm(); 633 applyDailyAlarm();
632 } else if ( msg == "editDailyAlarm()" ) { 634 } else if ( msg == "editDailyAlarm()" ) {
633 tabs->setCurrentPage(2); 635 tabs->setCurrentPage(2);
634 QPEApplication::setKeepRunning(); 636 QPEApplication::setKeepRunning();
635 } else if (msg == "showClock()") { 637 } else if (msg == "showClock()") {
636 tabs->setCurrentPage(0); 638 tabs->setCurrentPage(0);
637 QPEApplication::setKeepRunning(); 639 QPEApplication::setKeepRunning();
638 } else if (msg == "timerStart()" ) { 640 } else if (msg == "timerStart()" ) {
639 if ( !swatch_running ) 641 if ( !swatch_running )
640 stopStartStopWatch(); 642 stopStartStopWatch();
641 tabs->setCurrentPage(1); 643 tabs->setCurrentPage(1);
642 QPEApplication::setKeepRunning(); 644 QPEApplication::setKeepRunning();
643 } else if (msg == "timerStop()" ) { 645 } else if (msg == "timerStop()" ) {
644 if ( swatch_running ) 646 if ( swatch_running )
645 stopStartStopWatch(); 647 stopStartStopWatch();
646 tabs->setCurrentPage(1); 648 tabs->setCurrentPage(1);
647 QPEApplication::setKeepRunning(); 649 QPEApplication::setKeepRunning();
648 } else if (msg == "timerReset()" ) { 650 } else if (msg == "timerReset()" ) {
649 resetStopWatch(); 651 resetStopWatch();
650 tabs->setCurrentPage(1); 652 tabs->setCurrentPage(1);
651 QPEApplication::setKeepRunning(); 653 QPEApplication::setKeepRunning();
652 } 654 }
653} 655}
654 656
655void Clock::alarmTimeout() 657void Clock::alarmTimeout()
656{ 658{
657 if ( alarmCount < 10 ) { 659 if ( alarmCount < 10 ) {
658 Sound::soundAlarm(); 660 Sound::soundAlarm();
659 alarmCount++; 661 alarmCount++;
660 } else { 662 } else {
661 alarmCount = 0; 663 alarmCount = 0;
662 alarmt->stop(); 664 alarmt->stop();
663 } 665 }
664} 666}
665 667
666QDateTime Clock::nextAlarm( int h, int m ) 668QDateTime Clock::nextAlarm( int h, int m )
667{ 669{
668 QDateTime now = QDateTime::currentDateTime(); 670 QDateTime now = QDateTime::currentDateTime();
669 QTime at( h, m ); 671 QTime at( h, m );
670 QDateTime when( now.date(), at ); 672 QDateTime when( now.date(), at );
671 int count = 0; 673 int count = 0;
672 int dow = when.date().dayOfWeek(); 674 int dow = when.date().dayOfWeek();
673 while ( when < now || !dayBtn[dayBtnIdx(dow)]->isOn() ) { 675 while ( when < now || !dayBtn[dayBtnIdx(dow)]->isOn() ) {
674 when = when.addDays( 1 ); 676 when = when.addDays( 1 );
675 dow = when.date().dayOfWeek(); 677 dow = when.date().dayOfWeek();
676 if ( ++count > 7 ) 678 if ( ++count > 7 )
677 return QDateTime(); 679 return QDateTime();
678 } 680 }
679 681
680 return when; 682 return when;
681} 683}
682 684
683int Clock::dayBtnIdx( int d ) const 685int Clock::dayBtnIdx( int d ) const
684{ 686{
685 if ( onMonday ) 687 if ( onMonday )
686 return d-1; 688 return d-1;
687 else if ( d == 7 ) 689 else if ( d == 7 )
688 return 0; 690 return 0;
689 else 691 else
690 return d; 692 return d;
691} 693}
692 694
693void Clock::scheduleApplyDailyAlarm() 695void Clock::scheduleApplyDailyAlarm()
694{ 696{
695 applyAlarmTimer->start( 5000, TRUE ); 697 applyAlarmTimer->start( 5000, TRUE );
696} 698}
697 699
698void Clock::applyDailyAlarm() 700void Clock::applyDailyAlarm()
699{ 701{
700 if ( !init ) 702 if ( !init )
701 return; 703 return;
702 704
703 applyAlarmTimer->stop(); 705 applyAlarmTimer->stop();
704 int minute = dailyMinute->value(); 706 int minute = dailyMinute->value();
705 int hour = dailyHour->value(); 707 int hour = dailyHour->value();
706 if ( ampm ) { 708 if ( ampm ) {
707 if (hour == 12) 709 if (hour == 12)
708 hour = 0; 710 hour = 0;
709 if (dailyAmPm->currentItem() == 1 ) 711 if (dailyAmPm->currentItem() == 1 )
710 hour += 12; 712 hour += 12;
711 } 713 }
712 714
713 Config config( "Clock" ); 715 Config config( "Clock" );
714 config.setGroup( "Daily Alarm" ); 716 config.setGroup( "Daily Alarm" );
715 config.writeEntry( "Hour", hour ); 717 config.writeEntry( "Hour", hour );
716 config.writeEntry( "Minute", minute ); 718 config.writeEntry( "Minute", minute );
717 719
718 bool enableDaily = dailyEnabled->isChecked(); 720 bool enableDaily = dailyEnabled->isChecked();
719 bool wasSound = config.readEntry( "SoundEnabled" );
720 bool isSound = sndCheck->isChecked(); 721 bool isSound = sndCheck->isChecked();
721 int oldMagic = wasSound ? magic_playmp : magic_daily;
722 int isMagic = isSound ? magic_playmp : magic_daily; 722 int isMagic = isSound ? magic_playmp : magic_daily;
723 config.writeEntry( "Enabled", enableDaily ); 723 config.writeEntry( "Enabled", enableDaily );
724 config.writeEntry( "SoundEnabled", isSound ); 724 config.writeEntry( "SoundEnabled", isSound );
725 725
726 QString exclDays; 726 QString exclDays;
727 int exclCount = 0; 727 int exclCount = 0;
728 for ( int i = 1; i <= 7; i++ ) { 728 for ( int i = 1; i <= 7; i++ ) {
729 if ( !dayBtn[dayBtnIdx(i)]->isOn() ) { 729 if ( !dayBtn[dayBtnIdx(i)]->isOn() ) {
730 if ( !exclDays.isEmpty() ) 730 if ( !exclDays.isEmpty() )
731 exclDays += ","; 731 exclDays += ",";
732 exclDays += QString::number( i ); 732 exclDays += QString::number( i );
733 exclCount++; 733 exclCount++;
734 } 734 }
735 } 735 }
736 config.writeEntry( "ExcludeDays", exclDays ); 736 config.writeEntry( "ExcludeDays", exclDays );
737 737
738 /* try to delete both */ 738 /* try to delete all */
739 AlarmServer::deleteAlarm(QDateTime(), "QPE/Application/clock", 739 AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
740 "alarm(QDateTime,int)", oldMagic); 740 ALARM_CLOCK_MESSAGE, magic_daily);
741 AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
742 ALARM_CLOCK_MESSAGE, magic_playmp );
743 AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
744 ALARM_CLOCK_MESSAGE, magic_snooze);
745
741 if ( enableDaily && exclCount < 7 ) { 746 if ( enableDaily && exclCount < 7 ) {
742 QDateTime when = nextAlarm( hour, minute ); 747 QDateTime when = nextAlarm( hour, minute );
743 AlarmServer::addAlarm(when, "QPE/Application/clock", 748 AlarmServer::addAlarm(when, ALARM_CLOCK_CHANNEL,
744 "alarm(QDateTime,int)", isMagic); 749 ALARM_CLOCK_MESSAGE, isMagic);
745 } 750 }
746} 751}
747 752
748bool Clock::validDaysSelected(void) 753bool Clock::validDaysSelected(void)
749{ 754{
750 for ( int i = 1; i <= 7; i++ ) { 755 for ( int i = 1; i <= 7; i++ ) {
751 if ( dayBtn[dayBtnIdx(i)]->isOn() ) { 756 if ( dayBtn[dayBtnIdx(i)]->isOn() ) {
752 return TRUE; 757 return TRUE;
753 } 758 }
754 } 759 }
755 return FALSE; 760 return FALSE;
756} 761}
757 762
758void Clock::closeEvent( QCloseEvent *e ) 763void Clock::closeEvent( QCloseEvent *e )
759{ 764{
760 if (dailyEnabled->isChecked()) { 765 if (dailyEnabled->isChecked()) {
761 if (!validDaysSelected()) { 766 if (!validDaysSelected()) {
762 QMessageBox::warning(this, tr("Select Day"), 767 QMessageBox::warning(this, tr("Select Day"),
763 tr("Daily alarm requires at least\none day to be selected.")); 768 tr("Daily alarm requires at least\none day to be selected."));
764 return; 769 return;
765 } 770 }
766 } 771 }
767 772
768 applyDailyAlarm(); 773 applyDailyAlarm();
769 ClockBase::closeEvent(e); 774 ClockBase::closeEvent(e);
770} 775}
771 776
772bool Clock::spinBoxValid( QSpinBox *sb ) 777bool Clock::spinBoxValid( QSpinBox *sb )
773{ 778{
774 bool valid = TRUE; 779 bool valid = TRUE;
775 QString tv = sb->text(); 780 QString tv = sb->text();
776 for ( uint i = 0; i < tv.length(); i++ ) { 781 for ( uint i = 0; i < tv.length(); i++ ) {
777 if ( !tv[0].isDigit() ) 782 if ( !tv[0].isDigit() )
778 valid = FALSE; 783 valid = FALSE;
779 } 784 }
780 bool ok = FALSE; 785 bool ok = FALSE;
781 int v = tv.toInt( &ok ); 786 int v = tv.toInt( &ok );
782 if ( !ok ) 787 if ( !ok )
783 valid = FALSE; 788 valid = FALSE;
784 if ( v < sb->minValue() || v > sb->maxValue() ) 789 if ( v < sb->minValue() || v > sb->maxValue() )
785 valid = FALSE; 790 valid = FALSE;
786 791
787 return valid; 792 return valid;
788} 793}
789 794
790void Clock::slotBrowseMp3File() { 795void Clock::slotBrowseMp3File() {
791 Config config( "qpe" ); 796 Config config( "qpe" );
792 config.setGroup("Time"); 797 config.setGroup("Time");
793 798
794 QMap<QString, QStringList> map; 799 QMap<QString, QStringList> map;
795 map.insert(tr("All"), QStringList() ); 800 map.insert(tr("All"), QStringList() );
796 QStringList text; 801 QStringList text;
797 text << "audio/*"; 802 text << "audio/*";
798 map.insert(tr("Audio"), text ); 803 map.insert(tr("Audio"), text );
799 QString str = Opie::Ui::OFileDialog::getOpenFileName( 2,"/", QString::null, map); 804 QString str = Opie::Ui::OFileDialog::getOpenFileName( 2,"/", QString::null, map);
800 if(!str.isEmpty() ) { 805 if(!str.isEmpty() ) {
801 config.writeEntry("mp3Alarm",1); 806 config.writeEntry("mp3Alarm",1);
802 config.writeEntry("mp3File",str); 807 config.writeEntry("mp3File",str);
803 sndFileName->setText( str ); 808 sndFileName->setText( str );
804 scheduleApplyDailyAlarm(); 809 scheduleApplyDailyAlarm();
805 } 810 }
806} 811}