Diffstat (limited to 'kalarmd/simplealarmdaemonimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kalarmd/simplealarmdaemonimpl.cpp | 552 |
1 files changed, 552 insertions, 0 deletions
diff --git a/kalarmd/simplealarmdaemonimpl.cpp b/kalarmd/simplealarmdaemonimpl.cpp new file mode 100644 index 0000000..2bc6643 --- a/dev/null +++ b/kalarmd/simplealarmdaemonimpl.cpp @@ -0,0 +1,552 @@ +/* + This file is part of the KOrganizer alarm daemon. + Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "simplealarmdaemonimpl.h" + +#include "alarmdialog.h" +#include <qpopupmenu.h> +#include <qapp.h> +#include <qdir.h> +#include <qfile.h> +#include <qhbox.h> +#include <qtimer.h> +#include <qfile.h> +#include <qlayout.h> +#include <qlineedit.h> +#include <qdialog.h> +#include <qspinbox.h> +#include <qtextstream.h> +#include <qtopia/qcopenvelope_qws.h> +#include <qtopia/alarmserver.h> + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + + +SimpleAlarmDaemonImpl::SimpleAlarmDaemonImpl( QWidget *parent ) + : QLabel( parent ) +{ + mAlarmDialog = new AlarmDialog( 0 ); + mPopUp = new QPopupMenu( 0 ); + mPopUp->insertItem( "Addresses", this, SLOT ( showAdd() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Multi Sync", this, SLOT ( ringSync() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "What's Next?", this, SLOT ( showWN() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "What's Todo?", this, SLOT ( showTodo() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Next Days!", this, SLOT ( showKO() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Edit Journal", this, SLOT ( writeJournal() ) ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "New Event", this, SLOT ( newEvent() ) ); + mPopUp->insertItem( "New Todo", this, SLOT ( newTodo() ) ); + mTimerPopUp = new QPopupMenu( mPopUp ); + + mBeepPopUp = new QPopupMenu( mPopUp ); + mSoundPopUp = new QPopupMenu( mBeepPopUp ); + mPausePopUp = new QPopupMenu( mBeepPopUp ); + QPopupMenu* savePopUp = new QPopupMenu( mBeepPopUp ); + savePopUp->insertItem( "Save", 0 ); + savePopUp->insertItem( "Load", 1 ); + mSoundPopUp->insertItem( "Buzzer", 0 ); + mSoundPopUp->insertItem( "Wav file", 1 ); + mPausePopUp->insertItem( " 1 sec", 1 ); + mPausePopUp->insertItem( " 2 sec", 2 ); + mPausePopUp->insertItem( " 3 sec", 3 ); + mPausePopUp->insertItem( " 5 sec", 5 ); + mPausePopUp->insertItem( "10 sec", 10 ); + mPausePopUp->insertItem( "30 sec", 30 ); + mPausePopUp->insertItem( " 1 min", 60 ); + mPausePopUp->insertItem( " 5 min", 300 ); + mPausePopUp->insertItem( "10 min", 600 ); + mSuspendPopUp = new QPopupMenu( mBeepPopUp ); + mSuspendPopUp->insertItem( "Off", 0 ); + mSuspendPopUp->insertItem( " 1x", 1 ); + mSuspendPopUp->insertItem( " 2x", 2 ); + mSuspendPopUp->insertItem( " 3x", 3 ); + mSuspendPopUp->insertItem( " 5x", 5 ); + mSuspendPopUp->insertItem( "10x", 10 ); + mSuspendPopUp->insertItem( "20x", 20 ); + mSuspendPopUp->insertItem( "30x", 30 ); + mBeepPopUp->insertItem( "Auto suspend",mSuspendPopUp ); + mBeepPopUp->insertItem( "Beep interval",mPausePopUp ); + mBeepPopUp->insertItem( "Replay",mSoundPopUp ); + mBeepPopUp->insertItem( "Config",savePopUp ); + mBeepPopUp->insertItem( "300", 300 ); + mBeepPopUp->insertItem( "180", 180 ); + mBeepPopUp->insertItem( "60", 60 ); + mBeepPopUp->insertItem( "30", 30 ); + mBeepPopUp->insertItem( "10", 10 ); + mBeepPopUp->insertItem( "3", 3 ); + mBeepPopUp->insertItem( "1", 1 ); + mBeepPopUp->insertItem( "Off", 0 ); + mBeepPopUp->setCheckable( true ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Play beeps", mBeepPopUp ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Timer", mTimerPopUp ); + mPopUp->insertSeparator(); + mPopUp->insertItem( "Simulate", this, SLOT ( simulate() ) ); + + mPopUp->resize( mPopUp->sizeHint() ); + mPlayBeeps = 60; + mBeepPopUp->setItemChecked ( mPlayBeeps, true ); + connect ( mBeepPopUp, SIGNAL( activated ( int ) ), this, SLOT (slotPlayBeep( int ) ) ); + connect ( mTimerPopUp, SIGNAL( activated ( int ) ), this, SLOT (confTimer( int ) ) ); + connect ( mTimerPopUp, SIGNAL(aboutToShow() ), this, SLOT ( showTimer( ) ) ); + connect ( mSoundPopUp, SIGNAL( activated ( int ) ), this, SLOT (confSound( int ) ) ); + connect ( mPausePopUp, SIGNAL( activated ( int ) ), this, SLOT (confPause( int ) ) ); + connect ( mSuspendPopUp, SIGNAL( activated ( int ) ), this, SLOT (confSuspend( int ) ) ); + connect ( savePopUp, SIGNAL( activated ( int ) ), this, SLOT (saveSlot( int ) ) ); + mTimerTime = 0; + mCustomText = "Custom Text"; + mCustomMinutes = 7; + mTimerPopupConf = 1; + fillTimerPopUp(); + mPausePlay = 0; + confPause( 1 ); + mSuspend = 0; + confSuspend( 0 ); + if ( QApplication::desktop()->width() < 480 ) { + wavAlarm = false; + mSoundPopUp->setItemChecked ( 0, true ); + } + else { + wavAlarm = true; + mSoundPopUp->setItemChecked ( 1, true ); + } + saveSlot( 1 ); +} + +SimpleAlarmDaemonImpl::~SimpleAlarmDaemonImpl() +{ + delete mPopUp; + delete mAlarmDialog; +} +void SimpleAlarmDaemonImpl::saveSlot( int load ) +{ + QString fileName = QDir::homeDirPath() +"/.kopialarmrc"; + //qDebug("save %d ", load ); + QFile file( fileName ); + if ( load ) { + if( !QFile::exists( fileName) ) + return; + if (!file.open( IO_ReadOnly ) ) { + return ; + } + QString line; + bool ok; + int val; + int len; + while ( file.readLine( line, 1024 ) > 0 ) { + //qDebug("read %s ", line.latin1()); + len = line.length(); + if ( line.left(4 ) == "PPAU" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) { + confPause( val ); + } + } + if ( line.left(4 ) == "SUCO" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) + confSuspend ( val ); + } + if ( line.left(4 ) == "WAAL" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) + confSound( val ); + + } + if ( line.left(4 ) == "PLBE" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) + slotPlayBeep( val ); + + } + if ( line.left(4 ) == "CUTE" ) { + mCustomText = line.mid( 5,len-6); + // qDebug("text ***%s*** ",mCustomText.latin1() ); + + } + if ( line.left(4 ) == "CUMI" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) + mCustomMinutes = val; + + } + if ( line.left(4 ) == "SUTI" ) { + val = line.mid( 4,len-5).toInt( &ok ); + if ( ok ) + mAlarmDialog->setSuspendTime( val );; + + } + } + file.close(); + } else { + if (!file.open( IO_WriteOnly ) ) { + return; + } + QString configString ; + configString += "PPAU " + QString::number( mPausePlay ) + "\n"; + configString += "SUCO " + QString::number( mSuspend ) + "\n"; + configString += "WAAL " + QString::number( wavAlarm ) + "\n"; + configString += "PLBE " + QString::number( mPlayBeeps ) + "\n"; + configString += "CUTE " + mCustomText + "\n"; + configString += "CUMI " + QString::number( mCustomMinutes ) + "\n"; + configString += "SUTI " + QString::number( mAlarmDialog->getSuspendTime( )) + "\n"; + QTextStream ts( &file ); + ts << configString ; + file.close(); + } + +} +void SimpleAlarmDaemonImpl::confSuspend( int num ) +{ + mSuspendPopUp->setItemChecked ( mSuspend,false ); + mSuspend = num; + mSuspendPopUp->setItemChecked ( mSuspend,true ); +} +void SimpleAlarmDaemonImpl::confPause( int num ) +{ + mPausePopUp->setItemChecked ( mPausePlay,false ); + mPausePlay = num; + mPausePopUp->setItemChecked ( mPausePlay,true ); +} +void SimpleAlarmDaemonImpl::confSound( int num ) +{ + if ( num == 0 ) { + wavAlarm = false; + mSoundPopUp->setItemChecked ( 0, true ); + mSoundPopUp->setItemChecked ( 1, false ); + } else { + wavAlarm = true; + mSoundPopUp->setItemChecked ( 0, false ); + mSoundPopUp->setItemChecked ( 1, true ); + } +} +void SimpleAlarmDaemonImpl::slotPlayBeep( int num ) +{ + mBeepPopUp->setItemChecked ( mPlayBeeps,false ); + mPlayBeeps = num; + mBeepPopUp->setItemChecked ( mPlayBeeps, true ); +} + +void SimpleAlarmDaemonImpl::recieve( const QCString& msg, const QByteArray& ) +{ + //qDebug("SimpleAlarmDaemonImpl::ALARM RECEIVED! %s", msg.data()); + QString mess = msg; + mAlarmMessage = mess.mid( 9 ); + QString filename = getenv("QPEDIR") ; + filename += "/pics/kdepim/korganizer/koalarm.wav"; + QString tempfilename; + if ( mess.left( 13 ) == "suspend_alarm") { + bool error = false; + int len = mess.mid( 13 ).find("+++"); + if ( len < 2 ) + error = true; + else { + tempfilename = mess.mid( 13, len ); + if ( !QFile::exists( tempfilename ) ) + error = true; + } + if ( ! error ) { + filename = tempfilename; + } + mAlarmMessage = mess.mid( 13+len+3 ); + //qDebug("suspend file %s ",tempfilename.latin1() ); + startAlarm( mAlarmMessage, filename); + return; + } + if ( mess.left( 11 ) == "timer_alarm") { + mTimerTime = 0; + startAlarm( mess.mid( 11 ), filename ); + return; + } + if ( mess.left( 10 ) == "proc_alarm") { + bool error = false; + int len = mess.mid( 10 ).find("+++"); + if ( len < 2 ) + error = true; + else { + tempfilename = mess.mid( 10, len ); + if ( !QFile::exists( tempfilename ) ) + error = true; + } + if ( error ) { + mAlarmMessage = "Procedure Alarm\nError - File not found\n"; + mAlarmMessage += mess.mid( 10+len+3+9 ); + } else { + QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); + //qDebug("-----system command %s ",tempfilename.latin1() ); + if ( vfork () == 0 ) { + execl ( tempfilename.latin1(), 0 ); + return; + } + return; + } + + //qDebug("+++++++system command %s ",tempfilename.latin1() ); + } + if ( mess.left( 11 ) == "audio_alarm") { + bool error = false; + int len = mess.mid( 11 ).find("+++"); + if ( len < 2 ) + error = true; + else { + tempfilename = mess.mid( 11, len ); + if ( !QFile::exists( tempfilename ) ) + error = true; + } + if ( ! error ) { + filename = tempfilename; + } + mAlarmMessage = mess.mid( 11+len+3+9 ); + //qDebug("audio file command %s ",tempfilename.latin1() ); + } + if ( mess.left( 9 ) == "cal_alarm") { + mAlarmMessage = mess.mid( 9 ) ; + } + + writeFile(); + startAlarm( mAlarmMessage, filename ); + +} + +int SimpleAlarmDaemonImpl::getFileNameLen( QString mess ) +{ + return 0; +} +void SimpleAlarmDaemonImpl::startAlarm( QString mess, QString filename ) +{ + //mAlarmDialog->show(); + //mAlarmDialog->raise(); + mAlarmDialog->eventNotification( mess, mPlayBeeps, filename, wavAlarm,mPausePlay ,mSuspend ); +} + + +void SimpleAlarmDaemonImpl::fillTimerPopUp() +{ + + // qDebug(" timer %d %d ",mTimerPopupConf, mTimerTime ); + if ( mTimerPopupConf == mTimerTime ) { + if ( mTimerTime ) { + int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer ); + QTime t ( secs/3600, (secs/60)%60, secs%60 ); + mTimerPopUp->changeItem ( 1 , t.toString()); + } + else { + QString text = mCustomText.stripWhiteSpace (); + int in = text.find( " " ); + text = text.left ( in ); + mTimerPopUp->changeItem ( 3, text ); + } + return; + } + mTimerPopupConf = mTimerTime; + mTimerPopUp->clear(); + if ( mTimerTime ) { + int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer ); + QTime t ( secs/3600, (secs/60)%60, secs%60 ); + mTimerPopUp->insertItem( "Stop", 0 ); + mTimerPopUp->insertItem( t.toString(),1); + } else { + mTimerPopUp->insertItem( "24 h", 1440 ); + // mTimerPopUp->insertItem( i18n("12 h"), 720 ); + mTimerPopUp->insertItem( " 8 h", 480 ); + mTimerPopUp->insertItem( " 5 h", 300 ); + // mTimerPopUp->insertItem( i18n(" 2 h"), 120 ); + mTimerPopUp->insertItem( " 1 h", 60 ); + mTimerPopUp->insertItem( "30 min", 30 ); + mTimerPopUp->insertItem( "15 min", 15 ); + mTimerPopUp->insertItem( "10 min", 10 ); + //mTimerPopUp->insertItem( " 5 min", 5 ); + mTimerPopUp->insertSeparator(); + mTimerPopUp->insertItem( "Pizza", 22 ); + mTimerPopUp->insertItem( "Nap", 45 ); + mTimerPopUp->insertItem( "Tea", 5 ); + QString text = mCustomText.stripWhiteSpace (); + int in = text.find( " " ); + text = text.left ( in ); + mTimerPopUp->insertItem( text, 3 ); + mTimerPopUp->insertSeparator(); + mTimerPopUp->insertItem( "Customize", 2 ); + } + +} + +void SimpleAlarmDaemonImpl::showTimer() +{ + fillTimerPopUp(); +} + +void SimpleAlarmDaemonImpl::confTimer( int time ) +{ + //qDebug("impleAlarmDaemonImpl::confTimer() %d ", time ); + int minutes = time; + if ( minutes == 0 ) { + if ( ! mTimerTime ) + return; + + QDialog dia ( 0, ("Stop Timer" ), true ); + QLabel lab (("Really stop the timer?"), &dia ); + dia.setCaption(("KO/Pi Timer Stop" )); + QVBoxLayout lay( &dia ); + lay.setMargin(5); + lay.setSpacing(5); + lay.addWidget( &lab); + dia.resize( 200, dia.sizeHint().height() ); + + if ( !dia.exec() ) + return; + + AlarmServer::deleteAlarm ( mRunningTimer,"koalarm" , timerMesssage.latin1() ); + mTimerTime = 0; + return; + } + if ( mTimerTime ) + return; + if ( minutes == 1 ) { + return; + } + QString mess = "timer_alarm"; + mess += ("Timer Alarm!\n"); + if ( minutes == 22 ) + mess += ( "Pizza is ready"); + else if ( minutes == 45 ) + mess += ( "Please wake up!"); + else if ( minutes == 5 ) + mess += ( "Tea is ready"); + else if ( minutes == 3 ) { + mess += mCustomText; + minutes = mCustomMinutes ; + } + else { + if ( minutes == 2 ) { + // ask time + QDialog dia ( 0, ("Customize Timer" ), true ); + QLabel lab (("Message Text:"), &dia ); + dia.setCaption(("KO/Pi Timer" )); + QVBoxLayout lay( &dia ); + lay.setMargin(5); + lay.setSpacing(5); + lay.addWidget( &lab); + QLineEdit lEdit( mCustomText, &dia ); + lay.addWidget( &lEdit); + QLabel lab2 (("Countdown time (1 min - 24 h):"), &dia ); + lay.addWidget( &lab2); + QHBox hbox ( &dia ); + QLabel lab3 (("h:"), &hbox ); + QSpinBox spinh( 0, 24, 1,& hbox ); + QLabel lab4 ((" min:"), &hbox ); + QSpinBox spinm( 0, 59, 1,&hbox ); + spinh.setValue( mCustomMinutes/60 ); + spinm.setValue( mCustomMinutes%60 ); + lay.addWidget( &hbox); + dia.resize( dia.sizeHint().width(), dia.sizeHint().height() ); + if ( !dia.exec() ) + return; + mCustomText = lEdit.text(); + mCustomMinutes = spinh.value()*60+spinm.value(); + if ( mCustomMinutes == 0 ) + mCustomMinutes = 1; + if ( mCustomMinutes > 1440 ) + mCustomMinutes = 1440; + mess += mCustomText; + minutes = mCustomMinutes; + } + else + mess+= QString::number ( minutes ) + ( " minutes are past!"); + } + //minutes = 1; + mRunningTimer = QDateTime::currentDateTime().addSecs( minutes * 60 ); + timerMesssage = mess; + AlarmServer::addAlarm ( mRunningTimer,"koalarm",timerMesssage.latin1()); + mTimerTime = 1; +} + +void SimpleAlarmDaemonImpl::writeFile() +{ + QCopEnvelope e("QPE/Application/kopi", "-writeFile"); +} +void SimpleAlarmDaemonImpl::showWN() +{ + QCopEnvelope e("QPE/Application/kopi", "-showWN"); +} +void SimpleAlarmDaemonImpl::newTodo() +{ + QCopEnvelope e("QPE/Application/kopi", "-newTodo"); +} + +void SimpleAlarmDaemonImpl::newEvent() +{ + QCopEnvelope e("QPE/Application/kopi", "-newEvent"); + +} + +void SimpleAlarmDaemonImpl::showAdd() +{ + QCopEnvelope e("QPE/Application/kapi", " "); +} +void SimpleAlarmDaemonImpl::ringSync() +{ + QCopEnvelope e("QPE/Application/kopi", "-ringSync"); + +} +void SimpleAlarmDaemonImpl::newCountdown() +{ + //recieve("cal_alarm", 10 ); +} +void SimpleAlarmDaemonImpl::simulate() +{ + writeFile(); + QString filename = getenv("QPEDIR") ; + filename += "/pics/kdepim/korganizer/koalarm.wav"; + startAlarm("Alarm simulation", filename ); +} +void SimpleAlarmDaemonImpl::showKO() +{ + QCopEnvelope e("QPE/Application/kopi", "-showKO"); + +} +void SimpleAlarmDaemonImpl::showTodo() +{ + QCopEnvelope e("QPE/Application/kopi", "-showTodo"); + +} +void SimpleAlarmDaemonImpl::writeJournal() +{ + QCopEnvelope e("QPE/Application/kopi", "-showJournal"); + +} + +void SimpleAlarmDaemonImpl::mousePressEvent( QMouseEvent * ) +{ + + mPopUp->popup(mapToGlobal(QPoint (0, -mPopUp->height() ))); + +} + |