summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kolistview.cpp79
-rw-r--r--korganizer/kolistview.h135
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);