Diffstat (limited to 'korganizer/koeditorgeneral.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | korganizer/koeditorgeneral.cpp | 505 |
1 files changed, 505 insertions, 0 deletions
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp new file mode 100644 index 0000000..ad1389f --- a/dev/null +++ b/korganizer/koeditorgeneral.cpp @@ -0,0 +1,505 @@ +/* + This file is part of KOrganizer. + Copyright (c) 2001 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 <qwidget.h> +#include <qtooltip.h> +#include <qlayout.h> +#include <qvbox.h> +#include <qbuttongroup.h> +#include <qvgroupbox.h> +#include <qwidgetstack.h> +#include <qdatetime.h> +#include <qfile.h> + + +#include <kglobal.h> +#include <kdebug.h> +#include <klocale.h> +#include <kiconloader.h> +#include <kmessagebox.h> +#include <kfiledialog.h> +#include <kstandarddirs.h> + +#include <libkcal/todo.h> +#include <libkcal/event.h> +#include <libkdepim/categoryselectdialog.h> +#include <libkdepim/kdateedit.h> + +#include "koprefs.h" +#include "koglobals.h" + +#include "koeditorgeneral.h" +#include "kolocationbox.h" +#include "koeditorgeneral.moc" +#ifndef DESKTOP_VERSION +#include <qpe/qpeapplication.h> +#else +#include <qapplication.h> +#endif + +KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) : + QObject( parent, name) +{ +} + +KOEditorGeneral::~KOEditorGeneral() +{ +} + +void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout) +{ + QGridLayout *headerLayout = new QGridLayout(topLayout); + +#if 0 + mOwnerLabel = new QLabel(i18n("Owner:"),parent); + headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1); +#endif + + QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent); + headerLayout->addWidget(summaryLabel,1,0); + + mSummaryEdit = new KOLocationBox(TRUE,parent, 10); + mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); + //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) ); + //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() ); + int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2; + if ( QApplication::desktop()->width() > 320 ) + mSummaryEdit->setMaximumHeight( hei +6 ); + //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding ); + // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink } + // mSummaryEdit = new QLineEdit(parent); + headerLayout->addWidget(mSummaryEdit,1,1); + connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); + + QLabel *locationLabel = new QLabel(i18n("Location:"),parent); + headerLayout->addWidget(locationLabel,2,0); + + mLocationEdit = new KOLocationBox(TRUE,parent,10); + mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); + if ( QApplication::desktop()->width() > 320 ) + mLocationEdit->setMaximumHeight( hei + 6); + + // mLocationEdit = new QLineEdit(parent); + connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); + headerLayout->addWidget(mLocationEdit,2,1); + headerLayout->setColStretch( 1, 10); +} +void KOEditorGeneral::setFocusOn( int i ) +{ + qApp->processEvents(); + if ( i == 1 ) { + mDescriptionEdit->setFocus(); + mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333); + } + if ( i == 2 ) { + mSummaryEdit->setFocus(); + } + +} +void KOEditorGeneral::editCategories() +{ + // qDebug("KOEditorGeneral::editCategories() "); + KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); + connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &))); + //KOGlobals::fitDialogToScreen( csd ); + csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) ); + csd->exec(); + delete csd; +} +void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout) +{ + QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout ); + + mCategoriesButton = new QPushButton(parent); + mCategoriesButton->setText(i18n("Categories...")); + connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() )); + categoriesLayout->addWidget(mCategoriesButton); + + mCategoriesLabel = new QLabel(parent); + mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken); + categoriesLayout->addWidget(mCategoriesLabel,1); +} + +void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout) +{ + QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout ); + + QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent); + mCancelBox = new QCheckBox ( i18n("Cancelled"), parent); + secrecyLayout->addWidget(mCancelBox); + secrecyLayout->addWidget(secrecyLabel); + + mSecrecyCombo = new QComboBox(parent); + mSecrecyCombo->insertStringList(Incidence::secrecyList()); + secrecyLayout->addWidget(mSecrecyCombo); +} + +void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout) +{ + mDescriptionEdit = new KTextEdit(parent); + mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont ); + mDescriptionEdit->append(""); + mDescriptionEdit->setReadOnly(false); + mDescriptionEdit->setOverwriteMode(false); + mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth ); + topLayout->addWidget(mDescriptionEdit); +#ifndef DESKTOP_VERSION + QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold ); +#endif + +} + +void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout) +{ + QBoxLayout *alarmLayout = new QHBoxLayout(topLayout); + + //mAlarmBell = new QLabel(parent); + //mAlarmBell->setPixmap(SmallIcon("bell")); + //alarmLayout->addWidget(mAlarmBell); + if ( QApplication::desktop()->width() < 320 ) + mAlarmButton = new QCheckBox(i18n("Rem."),parent); + else + mAlarmButton = new QCheckBox(i18n("Reminder:"),parent); + + connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool))); + alarmLayout->addWidget(mAlarmButton); + + mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; + alarmLayout->addWidget(mAlarmTimeEdit); + mAlarmIncrCombo = new QComboBox(false, parent); + if ( QApplication::desktop()->width() < 320 ) { + mAlarmIncrCombo->insertItem(i18n("min")); + mAlarmIncrCombo->insertItem(i18n("hou")); + mAlarmIncrCombo->insertItem(i18n("day")); + mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() ); + mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() ); + } else { + mAlarmIncrCombo->insertItem(i18n("minute(s)")); + mAlarmIncrCombo->insertItem(i18n("hour(s)")); + mAlarmIncrCombo->insertItem(i18n("day(s)")); + } + + // mAlarmIncrCombo->setMinimumHeight(20); + alarmLayout->addWidget(mAlarmIncrCombo); + mAlarmSoundButton = new QPushButton(parent); + mAlarmSoundButton->setPixmap(SmallIcon("playsound")); + mAlarmSoundButton->setToggleButton(true); + QToolTip::add(mAlarmSoundButton, i18n("No sound set")); + connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); + alarmLayout->addWidget(mAlarmSoundButton); + + mAlarmProgramButton = new QPushButton(parent); + mAlarmProgramButton->setPixmap(SmallIcon("run")); + mAlarmProgramButton->setToggleButton(true); + QToolTip::add(mAlarmProgramButton, i18n("No program set")); + connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); + alarmLayout->addWidget(mAlarmProgramButton); + mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); + mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); + // if ( KOPrefs::instance()->mCompactDialogs ) { + // mAlarmSoundButton->hide(); + // mAlarmProgramButton->hide(); + // } +} + +void KOEditorGeneral::pickAlarmSound() +{ + + //QString prefix = mAlarmSound; + if (!mAlarmSoundButton->isOn()) { + //mAlarmSound = ""; + QToolTip::remove(mAlarmSoundButton); + QToolTip::add(mAlarmSoundButton, i18n("No sound set")); + mAlarmProgramButton->setOn(true); + mAlarmSoundButton->setOn(false); + } else { + QString fileName(KFileDialog::getOpenFileName(mAlarmSound, + i18n("*.wav|Wav Files"), 0)); + if (!fileName.isEmpty()) { + mAlarmSound = fileName; + QToolTip::remove(mAlarmSoundButton); + QString dispStr = i18n("Playing '%1'").arg(fileName); + QToolTip::add(mAlarmSoundButton, dispStr); + mAlarmProgramButton->setOn(false); + mAlarmSoundButton->setOn(true); + } else { + mAlarmProgramButton->setOn(true); + mAlarmSoundButton->setOn(false); + + } + } + + if (mAlarmProgramButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); + if ( mAlarmSoundButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio.Al.: ") + mAlarmSound ); +} + +void KOEditorGeneral::pickAlarmProgram() +{ + if (!mAlarmProgramButton->isOn()) { + //mAlarmProgram = ""; + QToolTip::remove(mAlarmProgramButton); + QToolTip::add(mAlarmProgramButton, i18n("No program set")); + mAlarmProgramButton->setOn(false); + mAlarmSoundButton->setOn(true); + } else { + QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0)); + if (!fileName.isEmpty()) { + mAlarmProgram = fileName; + QToolTip::remove(mAlarmProgramButton); + QString dispStr = i18n("Running '%1'").arg(fileName); + QToolTip::add(mAlarmProgramButton, dispStr); + mAlarmSoundButton->setOn(false); + mAlarmProgramButton->setOn(true); + } else { + mAlarmProgramButton->setOn(false); + mAlarmSoundButton->setOn(true); + } + } + if (mAlarmProgramButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); + if ( mAlarmSoundButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); +} + + + +void KOEditorGeneral::enableAlarmEdit(bool enable) +{ + if ( enable ) { + if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) { + mAlarmSoundButton->setOn( true ); + if ( mAlarmSound.isEmpty() ) + mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; + else { + if ( ! QFile::exists( mAlarmSound ) ) + mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; + } + } + if (mAlarmProgramButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); + if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); + } + else { + ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Alarm disabled")); + + } + mAlarmTimeEdit->setEnabled(enable); + mAlarmSoundButton->setEnabled(enable); + mAlarmProgramButton->setEnabled(enable); + mAlarmIncrCombo->setEnabled(enable); +} + +void KOEditorGeneral::disableAlarmEdit(bool disable) +{ + enableAlarmEdit( !disable ); +} + +void KOEditorGeneral::enableAlarm( bool enable ) +{ + enableAlarmEdit( enable ); +} + +void KOEditorGeneral::alarmDisable(bool disable) +{ + if (!disable) { + //mAlarmBell->setEnabled(true); + mAlarmButton->setEnabled(true); + } else { + //mAlarmBell->setEnabled(false); + mAlarmButton->setEnabled(false); + mAlarmButton->setChecked(false); + mAlarmTimeEdit->setEnabled(false); + mAlarmSoundButton->setEnabled(false); + mAlarmProgramButton->setEnabled(false); + mAlarmIncrCombo->setEnabled(false); + } +} + +void KOEditorGeneral::setCategories(const QString &str) +{ + mCategoriesLabel->setText(str); +} + +void KOEditorGeneral::setDefaults(bool allDay) +{ +#if 0 + mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName()); +#endif + + enableAlarmEdit( !allDay ); + + // TODO: Implement a KPrefsComboItem to solve this in a clean way. + int alarmTime; + int a[] = { 1,5,10,15,30,60,180, 1440 }; + int index = KOPrefs::instance()->mAlarmTime; + if (index < 0 || index > 7) { + alarmTime = 15; + } else { + alarmTime = a[index]; + } + mAlarmButton ->setChecked( false ); + mAlarmTimeEdit->setValue(alarmTime); + mAlarmIncrCombo->setCurrentItem(0); + enableAlarmEdit( false ); + //alarmDisable (false); + mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic); + mCancelBox->setChecked( false ); + mSummaryEdit->setEditText(""); + mLocationEdit->setEditText(""); + mDescriptionEdit->setText(""); + mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; + setCategories(""); +} +void KOEditorGeneral::setSecrecy( int num ) +{ + mSecrecyCombo->setCurrentItem(num); +} +void KOEditorGeneral::readIncidence(Incidence *event) +{ + + mAlarmIncrCombo->setCurrentItem(0); + mSummaryEdit->setEditText(event->summary()); + mLocationEdit->setEditText(event->location()); + mDescriptionEdit->setText(event->description()); + +#if 0 + // organizer information + mOwnerLabel->setText(i18n("Owner: ") + event->organizer()); +#endif + + enableAlarmEdit( event->isAlarmEnabled() ); + //qDebug("KOEditorGeneral::readIncidence(Incidence *event) "); + if(!event->isAlarmEnabled()) { + // TODO: Implement a KPrefsComboItem to solve this in a clean way. + int alarmTime; + int a[] = { 1,5,10,15,30,60,180, 1440 }; + int index = KOPrefs::instance()->mAlarmTime; + if (index < 0 || index > 7) { + alarmTime = 15; + } else { + alarmTime = a[index]; + } + mAlarmTimeEdit->setValue(alarmTime); + } + mAlarmButton->setChecked( event->isAlarmEnabled() ); + mSecrecyCombo->setCurrentItem(event->secrecy()); + mCancelBox->setChecked( event->cancelled() ); + mAlarmProgramButton->setOn(false); + mAlarmSoundButton->setOn(false); + + // set up alarm stuff + QPtrList<Alarm> alarms = event->alarms(); + Alarm* alarm; + mAlarmIncrCombo->setCurrentItem(0); + for ( alarm = alarms.first(); alarm; alarm = alarms.next() ) { + int offset; + if ( alarm->hasTime() ) { + QDateTime t = alarm->time(); + offset = event->dtStart().secsTo( t ); + } else { + offset = alarm->startOffset().asSeconds(); + } + if ( offset != 0 ) { + offset = offset / -60; // make minutes + if (offset % 60 == 0) { // divides evenly into hours? + offset = offset / 60; + mAlarmIncrCombo->setCurrentItem(1); + if (offset % 24 == 0) { // divides evenly into days? + offset = offset / 24; + mAlarmIncrCombo->setCurrentItem(2); + } + } + } + mAlarmTimeEdit->setValue( offset ); + if (alarm->type() == Alarm::Procedure) { + + mAlarmProgram = alarm->programFile(); + mAlarmProgramButton->setOn(true); + QString dispStr = i18n("Running '%1'").arg(mAlarmProgram); + QToolTip::add(mAlarmProgramButton, dispStr); + } + else if (alarm->type() == Alarm::Audio) { + mAlarmSound = alarm->audioFile(); + if ( ! QFile::exists( mAlarmSound ) ) + mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; + mAlarmSoundButton->setOn(true); + QString dispStr = i18n("Playing '%1'").arg(mAlarmSound); + QToolTip::add(mAlarmSoundButton, dispStr); + } + mAlarmButton->setChecked(alarm->enabled()); + enableAlarmEdit( alarm->enabled() ); + //qDebug("nableAlarmEdit( alarm->enabled() )********* "); + // TODO: Deal with multiple alarms + break; // For now, stop after the first alarm + } + + setCategories(event->categoriesStr()); +} + +void KOEditorGeneral::writeIncidence(Incidence *event) +{ + // kdDebug() << "KOEditorGeneral::writeEvent()" << endl; + mLocationEdit->save(KOLocationBox::LOCATION); + event->setSummary(mSummaryEdit->currentText()); + event->setLocation(mLocationEdit->currentText()); + event->setDescription(mDescriptionEdit->text()); + event->setCategories(mCategoriesLabel->text()); + event->setSecrecy(mSecrecyCombo->currentItem()); + event->setCancelled(mCancelBox->isChecked() );; + // alarm stuff + if (mAlarmButton->isChecked()) { + if (event->alarms().count() == 0) + event->newAlarm(); + QPtrList<Alarm> alarms = event->alarms(); + Alarm *alarm; + for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { + alarm->setEnabled(true); + int j = mAlarmTimeEdit->value()* -60; + if (mAlarmIncrCombo->currentItem() == 1) + j = j * 60; + else if (mAlarmIncrCombo->currentItem() == 2) + j = j * (60 * 24); + alarm->setStartOffset( j ); + + if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn()) { + alarm->setProcedureAlarm(mAlarmProgram); + } + else if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) + alarm->setAudioAlarm(mAlarmSound); + else + alarm->setType(Alarm::Invalid); + //alarm->setAudioAlarm("default"); + // TODO: Deal with multiple alarms + break; // For now, stop after the first alarm + } + } else { + Alarm* alarm = event->alarms().first(); + if ( alarm ) { + alarm->setEnabled(false); + alarm->setType(Alarm::Invalid); + } + } +} |