00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include <qhbox.h>
00026
#include <qvbox.h>
00027
#include <qlabel.h>
00028
#include <qfile.h>
00029
#include <qspinbox.h>
00030
#include <qlayout.h>
00031
00032
#include <klocale.h>
00033
#include <kprocess.h>
00034
#include <kaudioplayer.h>
00035
#include <kdebug.h>
00036
#include <knotifyclient.h>
00037
00038
#include <libkcal/event.h>
00039
00040
#include "koeventviewer.h"
00041
00042
#include "alarmdialog.h"
00043
#include "alarmdialog.moc"
00044
00045 AlarmDialog::AlarmDialog( QWidget *parent,
const char *name )
00046 : KDialogBase( Plain, WType_TopLevel | WStyle_Customize | WStyle_StaysOnTop |
00047 WStyle_DialogBorder,
00048 parent, name, false, i18n("Alarm"), Ok | User1 | User2, User2,
00049 false, i18n("Suspend") )
00050 {
00051 QWidget *topBox = plainPage();
00052
00053 QBoxLayout *topLayout =
new QVBoxLayout( topBox );
00054 topLayout->setSpacing( spacingHint() );
00055
00056 QLabel *label =
new QLabel( i18n(
"The following events triggered alarms:"),
00057 topBox );
00058 topLayout->addWidget( label );
00059
00060 mIncidences.setAutoDelete(
true );
00061
00062 mEventViewer =
new KOEventViewer( topBox );
00063 topLayout->addWidget( mEventViewer );
00064
00065 QHBox *suspendBox =
new QHBox( topBox );
00066 suspendBox->setSpacing( spacingHint() );
00067 topLayout->addWidget( suspendBox );
00068
00069
new QLabel( i18n(
"Suspend duration (minutes):"), suspendBox );
00070 mSuspendSpin =
new QSpinBox( 1, 9999, 1, suspendBox );
00071 mSuspendSpin->setValue( 5 );
00072
00073 showButton( User2,
false );
00074
00075 setMinimumSize( 300, 200 );
00076 }
00077
00078 AlarmDialog::~AlarmDialog()
00079 {
00080 }
00081
00082
void AlarmDialog::appendEvent(Event *event)
00083 {
00084 mEventViewer->appendEvent(event);
00085 mIncidences.append(event->clone());
00086 }
00087
00088
void AlarmDialog::appendTodo(Todo *todo)
00089 {
00090 mEventViewer->appendTodo(todo);
00091 mIncidences.append(todo->clone());
00092 }
00093
00094
void AlarmDialog::clearEvents()
00095 {
00096 mEventViewer->clearEvents();
00097
00098 mIncidences.clear();
00099 }
00100
00101
void AlarmDialog::slotOk()
00102 {
00103 clearEvents();
00104 accept();
00105 }
00106
00107
void AlarmDialog::slotUser1()
00108 {
00109 emit suspendSignal(mSuspendSpin->value());
00110 accept();
00111 }
00112
00113
void AlarmDialog::eventNotification()
00114 {
00115
bool beeped =
false;
00116
00117 Incidence *in;
00118
for (in = mIncidences.first(); in; in = mIncidences.next()) {
00119 Alarm::List alarms = in->alarms();
00120 Alarm::List::ConstIterator it;
00121
for ( it = alarms.begin(); it != alarms.end(); ++it ) {
00122 Alarm *alarm = *it;
00123
00124
if (alarm->type() == Alarm::Procedure) {
00125 kdDebug(5890) <<
"Starting program: '" << alarm->programFile() <<
"'" << endl;
00126 KProcess proc;
00127 proc << QFile::encodeName(alarm->programFile());
00128 proc.start(KProcess::DontCare);
00129 }
00130
else if (alarm->type() == Alarm::Audio) {
00131 beeped =
true;
00132 KAudioPlayer::play(QFile::encodeName(alarm->audioFile()));
00133 }
00134 }
00135 }
00136
00137
if ( !beeped ) {
00138 KNotifyClient::beep();
00139 }
00140 }