author | zautrix <zautrix> | 2005-02-03 21:18:40 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-02-03 21:18:40 (UTC) |
commit | c8369569b3c5bc7cbec3b56ddca27847f57ca72f (patch) (side-by-side diff) | |
tree | 43faa47d14dac1b307e955e2ebfa7b0582452b6a | |
parent | e9c27558f7127b4a003b435ce09f33b788bf98d1 (diff) | |
download | kdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.zip kdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.tar.gz kdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.tar.bz2 |
alarm fixes
-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 6 | ||||
-rw-r--r-- | korganizer/kolistview.cpp | 79 | ||||
-rw-r--r-- | korganizer/kolistview.h | 135 |
3 files changed, 216 insertions, 4 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index ec08321..6abf802 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt @@ -129,25 +129,25 @@ { "Delete All","Lösche alles" }, { "Delete all selected","Lösche alle Selektierten" }, { "Delete Current","Aktuellen löschen" }, { "Delete Event...","Lösche Termin..." }, { "Delete Event","Lösche Termin" }, { "&Delete","Löschen" }, { "Delete...","Löschen..." }, { "Delete","Löschen" }, { "Delete Todo...","Lösche Todo..." }, { "Delete To-Do","Lösche Todo" }, { "Deleting item %d ...","Lösche Eintrag %d..." }, { "Descriptions","Beschreibungen" }, -{ "Deselect All","Deselektiere Alle" }, +{ "Deselect all","Deselektiere Alle" }, { "Details","Details" }, { "Dinner","Abendessen" }, { "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, { "Due Date","Fällig am" }, { "Due: ","Fällig: "}, { "Due Time","Fällig um" }, { "Due:","Fällig:"}, { "Duration: ","Dauer: " }, { "Edit...","Bearbeite..." }, { "Edit","Bearbeite" }, { "Edit Event...","Bearbeite Termin..." }, { "Edit Event","Bearbeite Termin" }, @@ -1198,15 +1198,19 @@ { "Next days","Nächste Tage" }, { "Next week","Nächste Woche" }, { "Next two weeks","Nächste zwei Wochen" }, { "Next month","Nächster Monat" }, { "Journal view","Journal" }, { "Display all opened","Zeige alle geöffnet" }, { "Display all closed","Zeige alle geschlossen" }, { "Display all flat","Zeige alle flach" }, { "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, { "Default todo done color:","Standard Todo erledigt Farbe" }, { "Select week %1-%2","Selektiere Woche %1-%2" }, { "Select Week","Selektiere Woche" }, +{ "Set alarm for selected...","Setze Alarm für Selekt..." }, +{ "Set reminder offset to:","Setze Alarm Offset auf:" }, +{ "Set Alarm!","Setze Alarm!" }, +{ "Canged alarm for %1 items","Alarm für %1 Items geändert" }, { "","" }, { "","" }, { "","" }, diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp index 732fc46..d4d9c0f 100644 --- a/korganizer/kolistview.cpp +++ b/korganizer/kolistview.cpp @@ -56,24 +56,26 @@ #endif #ifndef KORG_NOPRINTER #include "calprinter.h" #endif #include "koglobals.h" #include "koprefs.h" #include "kfiledialog.h" #include "kolistview.h" + + class KOListViewWhatsThis :public QWhatsThis { public: KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; protected: virtual QString text( const QPoint& p) { return _view->getWhatsThisText(p) ; } private: QWidget* _wid; @@ -248,47 +250,51 @@ KOListView::KOListView(Calendar *calendar, QWidget *parent, int iii = 0; for ( iii = 0; iii< 10 ; ++iii ) mListView->setColumnWidthMode( iii, QListView::Manual ); QBoxLayout *layoutTop = new QVBoxLayout(this); layoutTop->addWidget(mListView); mListView->setFont ( KOPrefs::instance()->mListViewFont ); mPopupMenu = eventPopup(); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 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, SLOT(deleteAll()),true); mPopupMenu->insertSeparator(); mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), i18n("Save selected to file..."),this, SLOT(saveToFile()),true); 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); #endif /* mPopupMenu = new QPopupMenu; mPopupMenu->insertItem(i18n("Edit Event"), this, SLOT (editEvent())); mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, SLOT (deleteEvent())); mPopupMenu->insertSeparator(); mPopupMenu->insertItem(i18n("Show Dates"), this, @@ -329,24 +335,91 @@ void KOListView::updateList() // qDebug(" KOListView::updateList() "); } void KOListView::addCat( ) { setCategories( false ); } 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 ) { KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); if (! csd->exec()) { delete csd; return; } QStringList catList = csd->selectedCategories(); delete csd; // if ( catList.count() == 0 ) // return; diff --git a/korganizer/kolistview.h b/korganizer/kolistview.h index be9b09c..78004fe 100644 --- a/korganizer/kolistview.h +++ b/korganizer/kolistview.h @@ -33,24 +33,158 @@ #ifndef DESKTOP_VERSION #include <qtopia/ir.h> #else #define Ir char #endif #include <libkcal/incidence.h> #include "koeventview.h" #include "customlistviewitem.h" 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; /** This class provides the initialisation of a KOListViewItem for calendar components using the Incidence::Visitor. */ class ListItemVisitor : public Incidence::Visitor { public: ListItemVisitor(KOListViewItem *, QDate d); ~ListItemVisitor(); @@ -133,24 +267,25 @@ class KOListView : public KOEventView void clear(); void beamDone( Ir *ir ); void showDates(); void hideDates(); void deleteAll(); void saveToFile(); void saveDescriptionToFile(); void beamSelected(); void updateConfig(); void addCat(); void setCat(); + void setAlarm(); void setCategories( bool removeOld ); void changeEventDisplay(Event *, int); void defaultItemAction(QListViewItem *item); void popupMenu(QListViewItem *item,const QPoint &,int); protected slots: void processSelectionChange(QListViewItem *); protected: void addEvents(QPtrList<Event> eventList); void addIncidence(Incidence *); |