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