alarmdialog.cpp
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 #include <qpushbutton.h>
00032 #include <qcstring.h>
00033 #include <qdatastream.h>
00034
00035 #include <kapplication.h>
00036 #include <dcopclient.h>
00037 #include <klocale.h>
00038 #include <kprocess.h>
00039 #include <kaudioplayer.h>
00040 #include <kdebug.h>
00041 #include <kmessagebox.h>
00042 #include <knotifyclient.h>
00043 #include <kcombobox.h>
00044 #include <kwin.h>
00045
00046 #include <libkcal/event.h>
00047
00048 #include "koeventviewer.h"
00049
00050 #include "alarmdialog.h"
00051 #include "alarmdialog.moc"
00052
00053 AlarmDialog::AlarmDialog( QWidget *parent, const char *name )
00054 : KDialogBase( Plain, WType_TopLevel | WStyle_Customize | WStyle_StaysOnTop |
00055 WStyle_DialogBorder,
00056 parent, name, false, i18n("Alarm"), Ok | User1 | User2, Ok,
00057 false, i18n("Suspend"), i18n("Edit...") )
00058 {
00059 QWidget *topBox = plainPage();
00060
00061 QBoxLayout *topLayout = new QVBoxLayout( topBox );
00062 topLayout->setSpacing( spacingHint() );
00063
00064 QLabel *label = new QLabel( i18n("The following events triggered alarms:"),
00065 topBox );
00066 topLayout->addWidget( label );
00067
00068 mIncidences.setAutoDelete( true );
00069
00070 mEventViewer = new KOEventViewer( topBox );
00071 topLayout->addWidget( mEventViewer );
00072
00073 QHBox *suspendBox = new QHBox( topBox );
00074 suspendBox->setSpacing( spacingHint() );
00075 topLayout->addWidget( suspendBox );
00076
00077 new QLabel( i18n("Suspend duration:"), suspendBox );
00078 mSuspendSpin = new QSpinBox( 1, 9999, 1, suspendBox );
00079 mSuspendSpin->setValue( 5 );
00080
00081 mSuspendUnit = new KComboBox( suspendBox );
00082 mSuspendUnit->insertItem( i18n("minute(s)") );
00083 mSuspendUnit->insertItem( i18n("hour(s)") );
00084 mSuspendUnit->insertItem( i18n("day(s)") );
00085 mSuspendUnit->insertItem( i18n("week(s)") );
00086
00087 connect( mSuspendSpin, SIGNAL( valueChanged(int) ), actionButton(User1), SLOT( setFocus() ) );
00088 connect( mSuspendUnit, SIGNAL( activated(int) ), actionButton(User1), SLOT( setFocus() ) );
00089 connect( mSuspendUnit, SIGNAL( activated(int) ), actionButton(User2), SLOT( setFocus() ) );
00090
00091
00092
00093 setMinimumSize( 300, 200 );
00094 }
00095
00096 AlarmDialog::~AlarmDialog()
00097 {
00098 }
00099
00100 void AlarmDialog::appendEvent(Event *event)
00101 {
00102 mEventViewer->appendEvent(event);
00103 mIncidences.append(event->clone());
00104 }
00105
00106 void AlarmDialog::appendTodo(Todo *todo)
00107 {
00108 mEventViewer->appendTodo(todo);
00109 mIncidences.append(todo->clone());
00110 }
00111
00112 void AlarmDialog::clearEvents()
00113 {
00114 mEventViewer->clearEvents();
00115
00116 mIncidences.clear();
00117 }
00118
00119 void AlarmDialog::slotOk()
00120 {
00121 clearEvents();
00122 accept();
00123 }
00124
00125 void AlarmDialog::slotUser1()
00126 {
00127 int unit=1;
00128 switch (mSuspendUnit->currentItem()) {
00129 case 3:
00130 unit *= 7;
00131 case 2:
00132 unit *= 24;
00133 case 1:
00134 unit *= 60;
00135 case 0:
00136 unit *= 60;
00137 default:
00138 break;
00139 }
00140
00141 emit suspendSignal( unit * mSuspendSpin->value() );
00142 accept();
00143 }
00144
00145 void AlarmDialog::slotUser2()
00146 {
00147 if ( !kapp->dcopClient()->isApplicationRegistered( "korganizer" ) ) {
00148 if ( kapp->startServiceByDesktopName( "korganizer", QString::null ) )
00149 KMessageBox::error( 0, i18n("Could not start KOrganizer.") );
00150 }
00151
00152 kapp->dcopClient()->send( "korganizer", "KOrganizerIface",
00153 "editIncidence(QString)",
00154 mIncidences.first()->uid() );
00155
00156
00157 QByteArray replyData;
00158 QCString object, replyType;
00159 object = kapp->dcopClient()->isApplicationRegistered( "kontact" ) ?
00160 "kontact-mainwindow#1" : "KOrganizer MainWindow";
00161 if (!kapp->dcopClient()->call( "korganizer", object,
00162 "getWinID()", 0, replyType, replyData, true, -1 ) ) {
00163 }
00164
00165 if ( replyType == "int" ) {
00166 int desktop, window;
00167 QDataStream ds( replyData, IO_ReadOnly );
00168 ds >> window;
00169 desktop = KWin::windowInfo( window ).desktop();
00170
00171 if ( KWin::currentDesktop() == desktop ) {
00172 KWin::iconifyWindow( winId(), false );
00173 }
00174 else
00175 KWin::setCurrentDesktop( desktop );
00176
00177 KWin::activateWindow( KWin::transientFor( window ) );
00178 }
00179
00180 }
00181
00182 void AlarmDialog::eventNotification()
00183 {
00184 bool beeped = false;
00185
00186 Incidence *in;
00187 for (in = mIncidences.first(); in; in = mIncidences.next()) {
00188 Alarm::List alarms = in->alarms();
00189 Alarm::List::ConstIterator it;
00190 for ( it = alarms.begin(); it != alarms.end(); ++it ) {
00191 Alarm *alarm = *it;
00192
00193 if (alarm->type() == Alarm::Procedure) {
00194 kdDebug(5890) << "Starting program: '" << alarm->programFile() << "'" << endl;
00195 KProcess proc;
00196 proc << QFile::encodeName(alarm->programFile());
00197 proc.start(KProcess::DontCare);
00198 }
00199 else if (alarm->type() == Alarm::Audio) {
00200 beeped = true;
00201 KAudioPlayer::play(QFile::encodeName(alarm->audioFile()));
00202 }
00203 }
00204 }
00205
00206 if ( !beeped ) {
00207 KNotifyClient::beep();
00208 }
00209 }
This file is part of the documentation for korganizer Library Version 3.3.2.