korganizer Library API Documentation

koeditorgeneral.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 
00019     As a special exception, permission is given to link this program
00020     with any edition of Qt, and distribute the resulting executable,
00021     without including the source code for Qt in the source distribution.
00022 */
00023 
00024 #include <qwidget.h>
00025 #include <qtooltip.h>
00026 #include <qlayout.h>
00027 #include <qvbox.h>
00028 #include <qbuttongroup.h>
00029 #include <qvgroupbox.h>
00030 #include <qwidgetstack.h>
00031 #include <qdatetime.h>
00032 
00033 #include <kglobal.h>
00034 #include <kdebug.h>
00035 #include <klocale.h>
00036 #include <kiconloader.h>
00037 #include <kmessagebox.h>
00038 #include <kfiledialog.h>
00039 #include <ksqueezedtextlabel.h>
00040 #include <kstandarddirs.h>
00041 
00042 #include <libkcal/todo.h>
00043 #include <libkcal/event.h>
00044 
00045 #include <libkdepim/kdateedit.h>
00046 
00047 #include "koprefs.h"
00048 #include "koglobals.h"
00049 
00050 #include "koeditorgeneral.h"
00051 #include "koeditorgeneral.moc"
00052 
00053 KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) :
00054   QObject( parent, name)
00055 {
00056 }
00057 
00058 KOEditorGeneral::~KOEditorGeneral()
00059 {
00060 }
00061 
00062 
00063 FocusLineEdit::FocusLineEdit( QWidget *parent )
00064   : QLineEdit( parent ), mSkipFirst( true )
00065 {
00066 }
00067 
00068 void FocusLineEdit::focusInEvent ( QFocusEvent *e )
00069 {
00070   if ( !mSkipFirst ) {
00071     emit focusReceivedSignal();
00072   } else {
00073     mSkipFirst = false;
00074   }
00075   QLineEdit::focusInEvent( e );
00076 }
00077 
00078 
00079 void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout)
00080 {
00081   QGridLayout *headerLayout = new QGridLayout(topLayout);
00082 
00083 #if 0
00084   mOwnerLabel = new QLabel(i18n("Owner:"),parent);
00085   headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1);
00086 #endif
00087 
00088   QLabel *summaryLabel = new QLabel(i18n("T&itle:"),parent);
00089   QFont f = summaryLabel->font();
00090   f.setBold( true );
00091   summaryLabel->setFont(f);
00092   headerLayout->addWidget(summaryLabel,1,0);
00093 
00094   mSummaryEdit = new FocusLineEdit(parent);
00095   connect( mSummaryEdit, SIGNAL( focusReceivedSignal() ),
00096            SIGNAL( focusReceivedSignal() ) );
00097   headerLayout->addWidget(mSummaryEdit,1,1);
00098   summaryLabel->setBuddy( mSummaryEdit );
00099 
00100   QLabel *locationLabel = new QLabel(i18n("&Location:"),parent);
00101   headerLayout->addWidget(locationLabel,2,0);
00102 
00103   mLocationEdit = new QLineEdit(parent);
00104   headerLayout->addWidget(mLocationEdit,2,1);
00105   locationLabel->setBuddy( mLocationEdit );
00106 }
00107 
00108 void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout)
00109 {
00110   QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout );
00111 
00112   mCategoriesButton = new QPushButton(parent);
00113   mCategoriesButton->setText(i18n("Select Cate&gories..."));
00114   connect(mCategoriesButton,SIGNAL(clicked()),SIGNAL(openCategoryDialog()));
00115   categoriesLayout->addWidget(mCategoriesButton);
00116 
00117   mCategoriesLabel = new KSqueezedTextLabel(parent);
00118   mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
00119   categoriesLayout->addWidget(mCategoriesLabel,1);
00120 }
00121 
00122 void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout)
00123 {
00124   QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout );
00125 
00126   QLabel *secrecyLabel = new QLabel(i18n("Acc&ess:"),parent);
00127   secrecyLayout->addWidget(secrecyLabel);
00128 
00129   mSecrecyCombo = new QComboBox(parent);
00130   mSecrecyCombo->insertStringList(Incidence::secrecyList());
00131   secrecyLayout->addWidget(mSecrecyCombo);
00132   secrecyLabel->setBuddy( mSecrecyCombo );
00133 }
00134 
00135 void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout)
00136 {
00137   mDescriptionEdit = new KTextEdit(parent);
00138   mDescriptionEdit->append("");
00139   mDescriptionEdit->setReadOnly(false);
00140   mDescriptionEdit->setOverwriteMode(false);
00141   mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth );
00142   mDescriptionEdit->setTabChangesFocus( true );;
00143   topLayout->addWidget(mDescriptionEdit);
00144 }
00145 
00146 void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
00147 {
00148   QBoxLayout *alarmLayout = new QHBoxLayout(topLayout);
00149 
00150   mAlarmBell = new QLabel(parent);
00151   mAlarmBell->setPixmap(KOGlobals::self()->smallIcon("bell"));
00152   alarmLayout->addWidget(mAlarmBell);
00153 
00154   mAlarmButton = new QCheckBox(i18n("&Reminder:"),parent);
00155   connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool)));
00156   alarmLayout->addWidget(mAlarmButton);
00157 
00158   mAlarmTimeEdit = new KRestrictedLine(parent, "alarmTimeEdit",
00159                   "1234567890");
00160   mAlarmTimeEdit->setText("");
00161   alarmLayout->addWidget(mAlarmTimeEdit);
00162 
00163   mAlarmIncrCombo = new QComboBox(false, parent);
00164   mAlarmIncrCombo->insertItem(i18n("minute(s)"));
00165   mAlarmIncrCombo->insertItem(i18n("hour(s)"));
00166   mAlarmIncrCombo->insertItem(i18n("day(s)"));
00167 //  mAlarmIncrCombo->setMinimumHeight(20);
00168   alarmLayout->addWidget(mAlarmIncrCombo);
00169 
00170   mAlarmSoundButton = new QPushButton(parent);
00171   mAlarmSoundButton->setPixmap(KOGlobals::self()->smallIcon("playsound"));
00172   mAlarmSoundButton->setToggleButton(true);
00173   QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
00174   connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
00175   alarmLayout->addWidget(mAlarmSoundButton);
00176 
00177   mAlarmProgramButton = new QPushButton(parent);
00178   mAlarmProgramButton->setPixmap(KOGlobals::self()->smallIcon("runprog"));
00179   mAlarmProgramButton->setToggleButton(true);
00180   QToolTip::add(mAlarmProgramButton, i18n("No program set"));
00181   connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
00182   alarmLayout->addWidget(mAlarmProgramButton);
00183 
00184   if ( KOPrefs::instance()->mCompactDialogs ) {
00185     mAlarmSoundButton->hide();
00186     mAlarmProgramButton->hide();
00187   }
00188 }
00189 
00190 void KOEditorGeneral::pickAlarmSound()
00191 {
00192   QString prefix = KGlobal::dirs()->findResourceDir("data", "korganizer/sounds/alert.wav");
00193   if (!mAlarmSoundButton->isOn()) {
00194     mAlarmSound = "";
00195     QToolTip::remove(mAlarmSoundButton);
00196     QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
00197   } else {
00198     QString fileName(KFileDialog::getOpenFileName(prefix,
00199                                                   i18n("*.wav|Wav Files"), 0));
00200     if (!fileName.isEmpty()) {
00201       mAlarmSound = fileName;
00202       QToolTip::remove(mAlarmSoundButton);
00203       QString dispStr = i18n("Playing '%1'").arg(fileName);
00204       QToolTip::add(mAlarmSoundButton, dispStr);
00205       mAlarmProgramButton->setOn(false);
00206     }
00207   }
00208   if (mAlarmSound.isEmpty())
00209     mAlarmSoundButton->setOn(false);
00210 }
00211 
00212 void KOEditorGeneral::pickAlarmProgram()
00213 {
00214   if (!mAlarmProgramButton->isOn()) {
00215     mAlarmProgram = "";
00216     QToolTip::remove(mAlarmProgramButton);
00217     QToolTip::add(mAlarmProgramButton, i18n("No program set"));
00218   } else {
00219     QString fileName(KFileDialog::getOpenFileName(QString::null, QString::null, 0));
00220     if (!fileName.isEmpty()) {
00221       mAlarmProgram = fileName;
00222       QToolTip::remove(mAlarmProgramButton);
00223       QString dispStr = i18n("Running '%1'").arg(fileName);
00224       QToolTip::add(mAlarmProgramButton, dispStr);
00225       mAlarmSoundButton->setOn(false);
00226     }
00227   }
00228   if (mAlarmProgram.isEmpty())
00229     mAlarmProgramButton->setOn(false);
00230 }
00231 
00232 
00233 
00234 void KOEditorGeneral::enableAlarmEdit(bool enable)
00235 {
00236   mAlarmTimeEdit->setEnabled(enable);
00237   mAlarmSoundButton->setEnabled(enable);
00238   mAlarmProgramButton->setEnabled(enable);
00239   mAlarmIncrCombo->setEnabled(enable);
00240 }
00241 
00242 void KOEditorGeneral::disableAlarmEdit(bool disable)
00243 {
00244   enableAlarmEdit( !disable );
00245 }
00246 
00247 void KOEditorGeneral::enableAlarm( bool enable )
00248 {
00249   enableAlarmEdit( enable );
00250 }
00251 
00252 void KOEditorGeneral::alarmDisable(bool disable)
00253 {
00254   if (!disable) {
00255     mAlarmBell->setEnabled(true);
00256     mAlarmButton->setEnabled(true);
00257   } else {
00258     mAlarmBell->setEnabled(false);
00259     mAlarmButton->setEnabled(false);
00260     mAlarmButton->setChecked(false);
00261     mAlarmTimeEdit->setEnabled(false);
00262     mAlarmSoundButton->setEnabled(false);
00263     mAlarmProgramButton->setEnabled(false);
00264     mAlarmIncrCombo->setEnabled(false);
00265   }
00266 }
00267 
00268 void KOEditorGeneral::setCategories(const QString &str)
00269 {
00270   mCategoriesLabel->setText(str);
00271   mCategories = str;
00272 }
00273 
00274 void KOEditorGeneral::setDefaults(bool allDay)
00275 {
00276 #if 0
00277   mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName());
00278 #endif
00279 
00280   enableAlarmEdit( !allDay );
00281 
00282   // TODO: Implement a KPrefsComboItem to solve this in a clean way.
00283   int alarmTime;
00284   int a[] = { 1,5,10,15,30 };
00285   int index = KOPrefs::instance()->mAlarmTime;
00286   if (index < 0 || index > 4) {
00287     alarmTime = 0;
00288   } else {
00289     alarmTime = a[index];
00290   }
00291   mAlarmTimeEdit->setText(QString::number(alarmTime));
00292 
00293   enableAlarmEdit( false );
00294 
00295   mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic);
00296 }
00297 
00298 void KOEditorGeneral::readIncidence(Incidence *event)
00299 {
00300   mSummaryEdit->setText(event->summary());
00301   mLocationEdit->setText(event->location());
00302 
00303   mDescriptionEdit->setText(event->description());
00304 
00305 #if 0
00306   // organizer information
00307   mOwnerLabel->setText(i18n("Owner: ") + event->organizer());
00308 #endif
00309 
00310   enableAlarmEdit( event->isAlarmEnabled() );
00311 
00312   if(!event->isAlarmEnabled()) {
00313     // TODO: Implement a KPrefsComboItem to solve this in a clean way.
00314     int alarmTime;
00315     int a[] = { 1,5,10,15,30 };
00316     int index = KOPrefs::instance()->mAlarmTime;
00317     if (index < 0 || index > 4) {
00318       alarmTime = 0;
00319     } else {
00320       alarmTime = a[index];
00321     }
00322     mAlarmTimeEdit->setText(QString::number(alarmTime));
00323   }
00324 
00325   mSecrecyCombo->setCurrentItem(event->secrecy());
00326 
00327   // set up alarm stuff
00328   Alarm::List alarms = event->alarms();
00329   Alarm::List::ConstIterator it;
00330   for( it = alarms.begin(); it != alarms.end(); ++it ) {
00331     Alarm *alarm = *it;
00332     int offset;
00333     if ( alarm->hasTime() ) {
00334       QDateTime t = alarm->time();
00335       offset = event->dtStart().secsTo( t );
00336     } else {
00337       offset = alarm->startOffset().asSeconds();
00338     }
00339     offset = offset / -60; // make minutes
00340     if (offset % 60 == 0) { // divides evenly into hours?
00341       offset = offset / 60;
00342       mAlarmIncrCombo->setCurrentItem(1);
00343     }
00344     if (offset % 24 == 0) { // divides evenly into days?
00345       offset = offset / 24;
00346       mAlarmIncrCombo->setCurrentItem(2);
00347     }
00348     mAlarmTimeEdit->setText(QString::number( offset ));
00349 
00350     if (alarm->type() == Alarm::Procedure) {
00351       mAlarmProgram = alarm->programFile();
00352       mAlarmProgramButton->setOn(true);
00353       QString dispStr = i18n("Running '%1'").arg(mAlarmProgram);
00354       QToolTip::add(mAlarmProgramButton, dispStr);
00355     }
00356     else if (alarm->type() == Alarm::Audio) {
00357       mAlarmSound = alarm->audioFile();
00358       mAlarmSoundButton->setOn(true);
00359       QString dispStr = i18n("Playing '%1'").arg(mAlarmSound);
00360       QToolTip::add(mAlarmSoundButton, dispStr);
00361     }
00362     mAlarmButton->setChecked(alarm->enabled());
00363     enableAlarmEdit( alarm->enabled() );
00364 // TODO: Deal with multiple alarms
00365     break; // For now, stop after the first alarm
00366   }
00367 
00368   setCategories(event->categoriesStr());
00369 }
00370 
00371 void KOEditorGeneral::writeIncidence(Incidence *event)
00372 {
00373 //  kdDebug(5850) << "KOEditorGeneral::writeEvent()" << endl;
00374 
00375   event->setSummary(mSummaryEdit->text());
00376   event->setLocation(mLocationEdit->text());
00377   event->setDescription(mDescriptionEdit->text());
00378   event->setCategories(mCategories);
00379   event->setSecrecy(mSecrecyCombo->currentItem());
00380 
00381   // alarm stuff
00382   if (mAlarmButton->isChecked()) {
00383     if (event->alarms().count() == 0) event->newAlarm();
00384     Alarm::List alarms = event->alarms();
00385     Alarm::List::ConstIterator it;
00386     for( it = alarms.begin(); it != alarms.end(); ++it ) {
00387       Alarm *alarm = *it;
00388       alarm->setEnabled(true);
00389 
00390       QString tmpStr = mAlarmTimeEdit->text();
00391       int j = tmpStr.toInt() * -60;
00392       if (mAlarmIncrCombo->currentItem() == 1)
00393         j = j * 60;
00394       else if (mAlarmIncrCombo->currentItem() == 2)
00395         j = j * (60 * 24);
00396       alarm->setStartOffset( j );
00397 
00398       if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn())
00399         alarm->setProcedureAlarm(mAlarmProgram);
00400       if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn())
00401         alarm->setAudioAlarm(mAlarmSound);
00402       else
00403         alarm->setDisplayAlarm(QString::null);
00404 
00405 // TODO: Deal with multiple alarms
00406       break; // For now, stop after the first alarm
00407     }
00408   } else {
00409     if ( !event->alarms().isEmpty() ) {
00410       Alarm *alarm = event->alarms().first();
00411       alarm->setEnabled(false);
00412       alarm->setType(Alarm::Invalid);
00413     }
00414   }
00415 }
00416 
00417 void KOEditorGeneral::setSummary( const QString &text )
00418 {
00419   mSummaryEdit->setText( text );
00420 }
00421 
00422 void KOEditorGeneral::setDescription( const QString &text )
00423 {
00424   mDescriptionEdit->setText( text );
00425 }
00426 
00427 QObject *KOEditorGeneral::typeAheadReceiver() const
00428 {
00429   return mSummaryEdit;
00430 }
KDE Logo
This file is part of the documentation for korganizer Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:38:29 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003