summaryrefslogtreecommitdiffabout
path: root/kalarmd/alarmdialog.cpp
Unidiff
Diffstat (limited to 'kalarmd/alarmdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kalarmd/alarmdialog.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/kalarmd/alarmdialog.cpp b/kalarmd/alarmdialog.cpp
index 794c8ae..d6feedc 100644
--- a/kalarmd/alarmdialog.cpp
+++ b/kalarmd/alarmdialog.cpp
@@ -1,277 +1,278 @@
1/* 1/*
2 This file is part of the KDE alarm daemon. 2 This file is part of the KDE alarm daemon.
3 Copyright (c) 2000 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24// $Id$ 24// $Id$
25 25
26#include <qhbox.h> 26#include <qhbox.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qapp.h> 28#include <qapp.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qlayout.h> 30#include <qlayout.h>
31#include <qfile.h> 31#include <qfile.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qsound.h> 33#include <qsound.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#define protected public 35#define protected public
36#include <qspinbox.h> 36#include <qspinbox.h>
37#undef protected 37#undef protected
38#include <stdlib.h> 38#include <stdlib.h>
39#ifndef _WIN32_ 39#ifndef _WIN32_
40#include <unistd.h> 40#include <unistd.h>
41#include <sys/ioctl.h> 41#include <sys/ioctl.h>
42#endif 42#endif
43#include <stdio.h> 43#include <stdio.h>
44#include <fcntl.h> 44#include <fcntl.h>
45 45
46#ifndef DESKTOP_VERSION 46#ifndef DESKTOP_VERSION
47#include <qtopia/alarmserver.h> 47#include <qtopia/alarmserver.h>
48#include <qpe/resource.h> 48#include <qpe/resource.h>
49#include <qtopia/sound.h> 49#include <qtopia/sound.h>
50#endif 50#endif
51 51
52#include "alarmdialog.h" 52#include "alarmdialog.h"
53 53
54 54
55AlarmDialog::AlarmDialog(QWidget *parent,const char *name) 55AlarmDialog::AlarmDialog(QWidget *parent,const char *name)
56 : QDialog (parent, name, true, Qt::WStyle_StaysOnTop ) 56 : QDialog (parent, name, true, Qt::WStyle_StaysOnTop )
57{ 57{
58 setCaption( "KO/Pi Alarm!" ); 58 setCaption( "KO/Pi Alarm!" );
59 QVBoxLayout* layout = new QVBoxLayout( this); 59 QVBoxLayout* layout = new QVBoxLayout( this);
60 QLabel* l = new QLabel("The following event triggered alarm:",this); 60 QLabel* l = new QLabel("The following event triggered alarm:",this);
61 layout->addWidget ( l ); 61 layout->addWidget ( l );
62 l->setAlignment( AlignCenter); 62 l->setAlignment( AlignCenter);
63 mMessage = new QLabel ( " ", this ); 63 mMessage = new QLabel ( " ", this );
64 int fs = 18; 64 int fs = 18;
65 int fs2 = 12; 65 int fs2 = 12;
66 if ( QApplication::desktop()->width() < 480 ) { 66 if ( QApplication::desktop()->width() < 480 ) {
67 setMaximumSize(220, 260); 67 setMaximumSize(220, 260);
68 fs2 = 10; 68 fs2 = 10;
69 } 69 }
70 else { 70 else {
71 setMaximumSize(440, 440); 71 setMaximumSize(440, 440);
72 } 72 }
73 layout->setSpacing( 3 ); 73 layout->setSpacing( 3 );
74 layout->setMargin( 3 ); 74 layout->setMargin( 3 );
75 QFont fo = QApplication::font(); 75 QFont fo = QApplication::font();
76 fo.setBold( true ); 76 fo.setBold( true );
77 fo.setPointSize( fs2 ); 77 fo.setPointSize( fs2 );
78 l->setFont( fo ); 78 l->setFont( fo );
79 fo.setPointSize( fs ); 79 fo.setPointSize( fs );
80 mMessage->setFont(fo ); 80 mMessage->setFont(fo );
81 mMessage->setAlignment( AlignCenter); 81 mMessage->setAlignment( AlignCenter);
82 l = new QLabel("Missed Alarms:",this);
83 l->setAlignment( AlignCenter);
84 layout->addWidget ( mMessage ); 82 layout->addWidget ( mMessage );
85 layout->addWidget ( l ); 83 mMissedAlarms= new QLabel ( "(No missed Alarms)", this );
86 mMissedAlarms= new QLabel ( "", this );
87 mMissedAlarms->setAlignment( AlignCenter); 84 mMissedAlarms->setAlignment( AlignCenter);
88 85
89 playSoundTimer = new QTimer( this ); 86 playSoundTimer = new QTimer( this );
90 connect ( playSoundTimer, SIGNAL( timeout() ), this, SLOT (playSound() ) ); 87 connect ( playSoundTimer, SIGNAL( timeout() ), this, SLOT (playSound() ) );
91 88
92 playSoundTimer->stop(); 89 playSoundTimer->stop();
93 90
94 layout->addWidget ( mMissedAlarms ); 91 layout->addWidget ( mMissedAlarms );
92 mMissedAlarmsCombo = new QComboBox ( this );
93 layout->addWidget ( mMissedAlarmsCombo );
95 QVBox *suspendBox = new QVBox( this ); 94 QVBox *suspendBox = new QVBox( this );
96 suspendBox->setSpacing(3); 95 suspendBox->setSpacing(3);
97 layout->addWidget ( suspendBox ); 96 layout->addWidget ( suspendBox );
98 QLabel* labb = new QLabel("Suspend duration (minutes):",suspendBox); 97 QLabel* labb = new QLabel("Suspend duration (minutes):",suspendBox);
99 labb->setAlignment(AlignCenter); 98 labb->setAlignment(AlignCenter);
100 fo = font(); 99 fo = font();
101 fo.setPointSize( 36 ); 100 fo.setPointSize( 36 );
102 mSuspendSpin = new QSpinBox(1,1440,1,suspendBox); 101 mSuspendSpin = new QSpinBox(1,1440,1,suspendBox);
103 mSuspendSpin->setFont( fo ); 102 mSuspendSpin->setFont( fo );
104 mSuspendSpin->setValue(7); // default suspend duration 103 mSuspendSpin->setValue(7); // default suspend duration
105 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); 104 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus );
106 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); 105 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus );
107 mSuspendSpin->upButton ()->setFixedSize( QSize( 48, 30 )); 106 mSuspendSpin->upButton ()->setFixedSize( QSize( 48, 30 ));
108 mSuspendSpin->downButton ()->setFixedSize( QSize( 48, 30 )); 107 mSuspendSpin->downButton ()->setFixedSize( QSize( 48, 30 ));
109 mSuspendSpin->setFixedSize( 100,62 ); 108 mSuspendSpin->setFixedSize( 100,62 );
110 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); 109 mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus );
111 110
112 QVBox * bbox = new QVBox ( this ); 111 QVBox * bbox = new QVBox ( this );
113 layout->addWidget ( bbox ); 112 layout->addWidget ( bbox );
114 bbox->layout()->setSpacing( 2 ); 113 bbox->layout()->setSpacing( 2 );
115 QPushButton* suspend = new QPushButton( "Suspend", bbox); 114 mSuspendButton = new QPushButton( "Suspend", bbox);
116 QPushButton* silen = new QPushButton( " Stop sound ", bbox); 115 QPushButton* silen = new QPushButton( " Stop sound ", bbox);
117 QPushButton* okbut = new QPushButton( "Ok", bbox); 116 QPushButton* okbut = new QPushButton( "Ok", bbox);
118 suspend->setFont( fo ); 117 mSuspendButton->setFont( fo );
119 silen->setFont( fo ); 118 silen->setFont( fo );
120 okbut->setFont( fo ); 119 okbut->setFont( fo );
120 okbut->setDefault( true );
121 connect (silen , SIGNAL( clicked() ), this, SLOT (silent() ) ); 121 connect (silen , SIGNAL( clicked() ), this, SLOT (silent() ) );
122 connect (suspend , SIGNAL( clicked() ), this, SLOT (slotSuspend() ) ); 122 connect (mSuspendButton, SIGNAL( clicked() ), this, SLOT (slotSuspend() ) );
123 connect (okbut , SIGNAL( clicked() ), this, SLOT (slotOk() ) ); 123 connect (okbut , SIGNAL( clicked() ), this, SLOT (slotOk() ) );
124#ifndef _WIN32_ 124#ifndef _WIN32_
125 if ( QFile::exists ( "/dev/sharp_led" ) ) 125 if ( QFile::exists ( "/dev/sharp_led" ) )
126 fd_led = open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 126 fd_led = open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
127 else 127 else
128#endif 128#endif
129 fd_led = 0; 129 fd_led = 0;
130 statusLED.which = SHARP_LED_SALARM; 130 statusLED.which = SHARP_LED_SALARM;
131 mSilent = false; 131 mSilent = false;
132 mSuspendCounter = 0; 132 mSuspendCounter = 0;
133 setServerNotification( true ); 133 setServerNotification( true );
134} 134}
135void AlarmDialog::reject () 135void AlarmDialog::reject ()
136{ 136{
137 QTimer::singleShot ( 3000, this, SLOT (suspend()) ); 137 QTimer::singleShot ( 3000, this, SLOT (suspend()) );
138 slotSuspend(); 138 slotSuspend();
139} 139}
140AlarmDialog::~AlarmDialog() 140AlarmDialog::~AlarmDialog()
141{ 141{
142} 142}
143void AlarmDialog::silent () 143void AlarmDialog::silent ()
144{ 144{
145 mSilent = true; 145 mSilent = true;
146} 146}
147void AlarmDialog::accept() 147void AlarmDialog::accept()
148{ 148{
149 slotOk(); 149 slotOk();
150} 150}
151 151
152void AlarmDialog::suspend() 152void AlarmDialog::suspend()
153{ 153{
154#ifdef DESKTOP_VERSION 154#ifdef DESKTOP_VERSION
155 155
156#else 156#else
157 Sound::soundAlarm (); 157 Sound::soundAlarm ();
158#endif 158#endif
159} 159}
160void AlarmDialog::slotOk() 160void AlarmDialog::slotOk()
161{ 161{
162 mStopAlarm = true; 162 mStopAlarm = true;
163 mMissedAlarms->setText(""); 163 mMissedAlarms->setText("(No missed Alarms)");
164 mMessage->setText(""); 164 mMessage->setText("");
165 mMissedAlarmsCombo->clear();
165#ifndef _WIN32_ 166#ifndef _WIN32_
166 if ( fd_led > 0 ) { 167 if ( fd_led > 0 ) {
167 statusLED.status = LED_SALARM_OFF ; 168 statusLED.status = LED_SALARM_OFF ;
168 ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); 169 ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED);
169 } 170 }
170#endif 171#endif
171 QDialog::accept(); 172 QDialog::accept();
172} 173}
173 174
174void AlarmDialog::slotSuspend() 175void AlarmDialog::slotSuspend()
175{ 176{
176 //qDebug("AlarmDialog::suspend() "); // emit suspendSignal(mSuspendSpin->value()); 177 //qDebug("AlarmDialog::suspend() "); // emit suspendSignal(mSuspendSpin->value());
177 mStopAlarm = true; 178 mStopAlarm = true;
178 QDateTime nextA = QDateTime::currentDateTime().addSecs( mSuspendSpin->value() * 60 ); 179 QDateTime nextA = QDateTime::currentDateTime().addSecs( mSuspendSpin->value() * 60 );
179 QString mess = "suspend_alarm" +mFileName+"+++" ; 180 QString mess = "suspend_alarm" +mFileName+"+++" ;
180 if ( mMessage->text().left( 10 ) !="Suspended:" ) 181 if ( mMessage->text().left( 10 ) !="Suspended:" )
181 mess += "Suspended:\n"; 182 mess += "Suspended:\n";
182 mess +=mMessage->text(); 183 mess +=mMessage->text();
183#ifndef DESKTOP_VERSION 184#ifndef DESKTOP_VERSION
184 if ( mServerNotification ) 185 if ( mServerNotification )
185 AlarmServer::addAlarm ( nextA,"koalarm",mess.latin1()); 186 AlarmServer::addAlarm ( nextA,"koalarm",mess.latin1());
186#endif 187#endif
187 emit addAlarm( nextA , mess ); 188 emit addAlarm( nextA , mess );
188 slotOk(); 189 slotOk();
189} 190}
190 191
191void AlarmDialog::setServerNotification( bool b ) 192void AlarmDialog::setServerNotification( bool b )
192{ 193{
193 mServerNotification = b; 194 mServerNotification = b;
194} 195}
195int AlarmDialog::getSuspendTime( ) 196int AlarmDialog::getSuspendTime( )
196{ 197{
197 return mSuspendSpin->value(); 198 return mSuspendSpin->value();
198 199
199} 200}
200void AlarmDialog::setSuspendTime( int val ) 201void AlarmDialog::setSuspendTime( int val )
201{ 202{
202 mSuspendSpin->setValue( val ); 203 mSuspendSpin->setValue( val );
203} 204}
204bool AlarmDialog::eventNotification( QString mess, int replay , QString fn, bool playwav, int pause , int suspendtimes) 205bool AlarmDialog::eventNotification( QString mess, int replay , QString fn, bool playwav, int pause , int suspendtimes)
205{ 206{
206 if ( mess.left( 9) != "Suspended" ) 207 if ( mess.left( 9) != "Suspended" )
207 mSuspendCounter = suspendtimes; 208 mSuspendCounter = suspendtimes;
208 mPauseCount = pause; 209 mPauseCount = pause;
209 mFileName = fn; 210 mFileName = fn;
210 mPlayWav = playwav; 211 mPlayWav = playwav;
211 if ( !QFile::exists( fn ) ) 212 if ( !QFile::exists( fn ) )
212 mFileName = ""; 213 mFileName = "";
213 alarmCounter = 0 ; 214 alarmCounter = 0 ;
214 maxAlarmReplay = replay ; 215 maxAlarmReplay = replay ;
215 mStopAlarm = false; 216 mStopAlarm = false;
216 mSilent = false; 217 mSilent = false;
217 if ( mMissedAlarms->text() == "" ) 218 if ( !mMessage->text().stripWhiteSpace().isEmpty() ) {
218 mMissedAlarms->setText( mMessage->text()); 219 mMissedAlarmsCombo->show();
219 else 220 mMissedAlarmsCombo->insertItem( mMessage->text().stripWhiteSpace() );
220 mMissedAlarms->setText( mMessage->text()+ "\n" + mMissedAlarms->text() ); 221 mMissedAlarms->setText( "Missed alarms:");
221 if ( mMissedAlarms->text().length() > 180 ) 222 } else
222 mMissedAlarms->setText(mMissedAlarms->text().left ( 180 )); 223 mMissedAlarmsCombo->hide();
223 mMessage->setText(mess); 224 mMessage->setText(mess);
224 int w =sizeHint().width() ; 225 int w =sizeHint().width() ;
225 int h = sizeHint().height() ; 226 int h = sizeHint().height() ;
226 int dw = QApplication::desktop()->width(); 227 int dw = QApplication::desktop()->width();
227 int dh = QApplication::desktop()->height(); 228 int dh = QApplication::desktop()->height();
228 setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 229 setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
229 show(); 230 show();
230 raise(); 231 raise();
231 qApp->processEvents(); 232 qApp->processEvents();
232 repaint(); 233 repaint();
233 qApp->processEvents(); 234 qApp->processEvents();
234 235
235#ifndef _WIN32_ 236#ifndef _WIN32_
236 if ( fd_led > 0 ) { 237 if ( fd_led > 0 ) {
237 statusLED.status = LED_SALARM_ON ; 238 statusLED.status = LED_SALARM_ON ;
238 ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); 239 ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED);
239 } 240 }
240#endif 241#endif
241 playSoundTimer->start( 1000, true ); 242 playSoundTimer->start( 1000, true );
242 return true; 243 return true;
243 244
244} 245}
245 246
246 247
247void AlarmDialog::playSound () 248void AlarmDialog::playSound ()
248{ 249{
249 if (mStopAlarm ) 250 if (mStopAlarm )
250 return; 251 return;
251 showNormal(); 252 showNormal();
252 setActiveWindow(); 253 setActiveWindow();
253 setFocus(); 254 mSuspendSpin->setFocus();
254 raise(); 255 raise();
255 256
256 qApp->processEvents(); 257 qApp->processEvents();
257 if ( alarmCounter < maxAlarmReplay && ! mSilent) { 258 if ( alarmCounter < maxAlarmReplay && ! mSilent) {
258 ++alarmCounter; 259 ++alarmCounter;
259 if ( !mPlayWav || mFileName.length() < 2 ) { 260 if ( !mPlayWav || mFileName.length() < 2 ) {
260 261
261#ifndef DESKTOP_VERSION 262#ifndef DESKTOP_VERSION
262 Sound::soundAlarm (); 263 Sound::soundAlarm ();
263#endif 264#endif
264 } else { 265 } else {
265 QSound::play ( mFileName ); 266 QSound::play ( mFileName );
266 //qDebug("BEEP!"); 267 //qDebug("BEEP!");
267 } 268 }
268 } else { 269 } else {
269 if ( ! mSilent && mSuspendCounter > 0 ) { 270 if ( ! mSilent && mSuspendCounter > 0 ) {
270 --mSuspendCounter; 271 --mSuspendCounter;
271 reject (); 272 reject ();
272 hide(); 273 hide();
273 return; 274 return;
274 } 275 }
275 } 276 }
276 playSoundTimer->start( mPauseCount * 1000, true ); 277 playSoundTimer->start( mPauseCount * 1000, true );
277} 278}