-rw-r--r-- | korganizer/kolistview.cpp | 79 | ||||
-rw-r--r-- | korganizer/kolistview.h | 135 |
2 files changed, 211 insertions, 3 deletions
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp index 732fc46..d4d9c0f 100644 --- a/korganizer/kolistview.cpp +++ b/korganizer/kolistview.cpp @@ -65,6 +65,8 @@ #include "kolistview.h" + + class KOListViewWhatsThis :public QWhatsThis { public: @@ -257,7 +259,7 @@ KOListView::KOListView(Calendar *calendar, QWidget *parent, i18n("Select all"),this, SLOT(allSelection()),true); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), - i18n("Deselect All"),this, + i18n("Deselect all"),this, SLOT(clearSelection()),true); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Delete all selected"),this, @@ -269,17 +271,21 @@ KOListView::KOListView(Calendar *calendar, QWidget *parent, mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Save Journal/Description..."),this, SLOT(saveDescriptionToFile()),true); - mPopupMenu->insertSeparator(); + // mPopupMenu->insertSeparator(); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Add Categ. to selected..."),this, SLOT(addCat()),true); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Set Categ. for selected..."),this, SLOT(setCat()),true); - mPopupMenu->insertSeparator(); + //mPopupMenu->insertSeparator(); + mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), + i18n("Set alarm for selected..."),this, + SLOT(setAlarm()),true); #ifndef DESKTOP_VERSION + mPopupMenu->insertSeparator(); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Beam selected via IR"),this, SLOT(beamSelected()),true); @@ -338,6 +344,73 @@ void KOListView::setCat() { setCategories( true ); } +void KOListView::setAlarm() +{ + KOAlarmPrefs kap( this); + if ( !kap.exec() ) + return; + + + QStringList itemList; + QPtrList<KOListViewItem> sel ; + QListViewItem *qitem = mListView->firstChild (); + while ( qitem ) { + if ( qitem->isSelected() ) { + sel.append(((KOListViewItem *)qitem)); + } + qitem = qitem->nextSibling(); + } + int count = 0; + KOListViewItem * item, *temp; + item = sel.first(); + Incidence* inc; + while ( item ) { + inc = item->data(); + if ( inc->type() != "Journal" ) { + ++count; + if (kap.mAlarmButton->isChecked()) { + if (inc->alarms().count() == 0) + inc->newAlarm(); + QPtrList<Alarm> alarms = inc->alarms(); + Alarm *alarm; + for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { + alarm->setEnabled(true); + int j = kap.mAlarmTimeEdit->value()* -60; + if (kap.mAlarmIncrCombo->currentItem() == 1) + j = j * 60; + else if (kap.mAlarmIncrCombo->currentItem() == 2) + j = j * (60 * 24); + alarm->setStartOffset( j ); + + if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { + alarm->setProcedureAlarm(kap.mAlarmProgram); + } + else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) + alarm->setAudioAlarm(kap.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 = inc->alarms().first(); + if ( alarm ) { + alarm->setEnabled(false); + alarm->setType(Alarm::Invalid); + } + } + } + temp = item; + item = sel.next(); + mUidDict.remove( inc->uid() ); + delete temp;; + addIncidence( inc ); + } + topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) ); + qDebug("KO: Set alarm for %d items", count); + calendar()->reInitAlarmSettings(); +} void KOListView::setCategories( bool removeOld ) { diff --git a/korganizer/kolistview.h b/korganizer/kolistview.h index be9b09c..78004fe 100644 --- a/korganizer/kolistview.h +++ b/korganizer/kolistview.h @@ -42,6 +42,140 @@ using namespace KCal; + + +#include <qpushbutton.h> +#include <qlayout.h> +#include <qdialog.h> +#include <qcombobox.h> +#include <qspinbox.h> +#include <qtooltip.h> +#include <qcheckbox.h> +#include <qhbox.h> +#include <qlabel.h> +#include <kiconloader.h> +#include "kfiledialog.h" +#include "koprefs.h" +class KOAlarmPrefs : public QDialog +{ + Q_OBJECT + public: + KOAlarmPrefs( QWidget *par=0, const char *name=0 ) : + QDialog( par, name, true ) + { + setCaption( i18n("Alarm Options") ); + QVBoxLayout* alarmLayout = new QVBoxLayout( this ); + alarmLayout->setSpacing( 3 ); + alarmLayout->setMargin( 3 ); + QWidget *parent = this; + mAlarmButton = new QCheckBox(i18n("Set reminder offset to:"),parent); + alarmLayout->addWidget(mAlarmButton); + mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; + mAlarmTimeEdit->setValue( 15 ); + alarmLayout->addWidget(mAlarmTimeEdit); + mAlarmIncrCombo = new QComboBox(false, parent); + mAlarmIncrCombo->insertItem(i18n("minute(s)")); + mAlarmIncrCombo->insertItem(i18n("hour(s)")); + mAlarmIncrCombo->insertItem(i18n("day(s)")); + alarmLayout->addWidget(mAlarmIncrCombo); + QHBox * hb = new QHBox ( parent ); + alarmLayout->addWidget(hb); + mAlarmSoundButton = new QPushButton(hb); + mAlarmSoundButton->setPixmap(SmallIcon("playsound")); + mAlarmSoundButton->setToggleButton(true); + connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); + mAlarmProgramButton = new QPushButton(hb); + mAlarmProgramButton->setPixmap(SmallIcon("run")); + mAlarmProgramButton->setToggleButton(true); + connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); + mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); + mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); + mAlarmLabel = new QLabel( this ); + alarmLayout->addWidget( mAlarmLabel ); + mAlarmLabel->setText( "..."+KOPrefs::instance()->mDefaultAlarmFile.right( 30 ) ); + mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; + mAlarmSoundButton->setOn( true ); + QPushButton * ok = new QPushButton( i18n("Set Alarm!"), this ); + alarmLayout->addWidget( ok ); + QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); + alarmLayout->addWidget( cancel ); + connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); + connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); + resize( 200, 200 ); + + } + + + + QString mAlarmSound, mAlarmProgram ; + QCheckBox* mAlarmButton; + QSpinBox* mAlarmTimeEdit; + QLabel* mAlarmLabel; + QComboBox* mAlarmIncrCombo ; + QPushButton* mAlarmSoundButton ,*mAlarmProgramButton; +private slots: + +void 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; + mAlarmLabel->setText( "..."+fileName.right( 30 ) ); + 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); + + } + } +}; + +void 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; + mAlarmLabel->setText( "..."+fileName.right( 30 ) ); + 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); + } + } +}; + +}; + + + + + + + typedef CustomListViewItem<Incidence *> KOListViewItem; /** @@ -142,6 +276,7 @@ class KOListView : public KOEventView void updateConfig(); void addCat(); void setCat(); + void setAlarm(); void setCategories( bool removeOld ); void changeEventDisplay(Event *, int); |