summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-02-03 21:18:40 (UTC)
committer zautrix <zautrix>2005-02-03 21:18:40 (UTC)
commitc8369569b3c5bc7cbec3b56ddca27847f57ca72f (patch) (side-by-side diff)
tree43faa47d14dac1b307e955e2ebfa7b0582452b6a
parente9c27558f7127b4a003b435ce09f33b788bf98d1 (diff)
downloadkdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.zip
kdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.tar.gz
kdepimpi-c8369569b3c5bc7cbec3b56ddca27847f57ca72f.tar.bz2
alarm fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt6
-rw-r--r--korganizer/kolistview.cpp79
-rw-r--r--korganizer/kolistview.h135
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 *);