summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show 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
@@ -117,49 +117,49 @@
{ "Days in What's Next:","Tage in What's Next:" },
{ "day(s)","Tag(e)" },
{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
{ "day","Tag" },
{ "Dec","Dez" },
{ "December","Dezember" },
{ "Default alarm time:","Standard Alarmzeit:" },
{ "Default appointment time:","Standard Termin Startzeit:" },
{ "Default event color:","Standard Terminfarbe:" },
{ "Default","Standard" },
{ "Def. duration of new app.:","Standard Termin Länge:" },
{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
{ "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" },
{ "Edit exceptions","Bearbeite Ausnahmen" },
{ "EditorBox:","Editor Fenster:" },
{ "Edit Recurrence Range","Bearbeite Wiederholung" },
{ "Edit Todo...","Berabeite Todo..." },
{ "Edit To-Do","Todo bearbeiten" },
{ "E&mail address:","E&mail Adresse:" },
{ "(EmptyEmail)","(KeineEmail)" },
{ "(EmptyName)","(KeinName)" },
{ "Enable Recurrence","Wiederholender Termin" },
{ "End after","Endet nach"},
{ "End by:","Endet am"},
{ "End Date","End Datum" },
@@ -1186,27 +1186,31 @@
{ "confidential","vertraul." },
{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
{ "Yesterday","Gestern" },
{ "Day after tomorrow","Übermorgen" },
{ "Tomorrow","Morgen" },
{ "Day before yesterday","Vorgestern" },
{ "Size %1","Größe %1" },
{ "New Agendasize: %1","Neue Agendagröße: %1" },
{ " (%1 y.)"," (%1 J.)" },
{ "Allday:","Ganztägig:" },
{ "compl.todos","erled.Todos" },
{ "Day view","Tagesansicht" },
{ "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
@@ -44,48 +44,50 @@
#include <libkcal/calendar.h>
#include <libkcal/calendarlocal.h>
#include <libkcal/icalformat.h>
#include <libkcal/vcalformat.h>
#include <libkcal/recurrence.h>
#include <libkcal/filestorage.h>
#include <libkdepim/categoryselectdialog.h>
#include <libkcal/kincidenceformatter.h>
#ifndef DESKTOP_VERSION
#include <qpe/qpeapplication.h>
#else
#include <qapplication.h>
#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;
KOListView * _view;
};
ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
{
mItem = item;
mDate = date;
}
ListItemVisitor::~ListItemVisitor()
{
@@ -236,71 +238,75 @@ KOListView::KOListView(Calendar *calendar, QWidget *parent,
mListView->setColumnAlignment(2,AlignHCenter);
mListView->setColumnAlignment(3,AlignLeft);
mListView->setColumnAlignment(4,AlignHCenter);
mListView->setColumnAlignment(5,AlignLeft);
mListView->setColumnAlignment(6,AlignLeft);
mListView->setColumnAlignment(7,AlignLeft);
mListView->setColumnAlignment(8,AlignLeft);
mListView->setColumnAlignment(9,AlignLeft);
mListView->setColumnAlignment(10,AlignLeft);
mListView->setColumnWidthMode(10, QListView::Manual);
new KOListViewWhatsThis(mListView->viewport(),this);
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,
SLOT(showDates()));
mPopupMenu->insertItem(i18n("Hide Dates"), this,
SLOT(hideDates()));
*/
QObject::connect(mListView,SIGNAL( newEvent()),
this,SIGNAL(signalNewEvent()));
QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
this,SLOT(defaultItemAction(QListViewItem *)));
QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *,
const QPoint &, int )),
this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
@@ -317,48 +323,115 @@ KOListView::~KOListView()
}
QString KOListView::getWhatsThisText(QPoint p)
{
KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
if ( item )
return KIncidenceFormatter::instance()->getFormattedText( item->data() );
return i18n("That is the list view" );
}
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;
catList.sort();
QString categoriesStr = catList.join(",");
int i;
QStringList itemList;
QPtrList<KOListViewItem> sel ;
QListViewItem *qitem = mListView->firstChild ();
while ( qitem ) {
if ( qitem->isSelected() ) {
sel.append(((KOListViewItem *)qitem));
}
qitem = qitem->nextSibling();
}
diff --git a/korganizer/kolistview.h b/korganizer/kolistview.h
index be9b09c..78004fe 100644
--- a/korganizer/kolistview.h
+++ b/korganizer/kolistview.h
@@ -21,48 +21,182 @@
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#ifndef _KOLISTVIEW_H
#define _KOLISTVIEW_H
#include <qlistview.h>
#include <qmap.h>
#include <qdict.h>
#include <klistview.h>
#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();
bool visit(Event *);
bool visit(Todo *);
bool visit(Journal *);
private:
KOListViewItem *mItem;
QDate mDate;
};
/**
This class provides a multi-column list view of events. It can
display events from one particular day or several days, it doesn't
@@ -121,48 +255,49 @@ class KOListView : public KOEventView
int count();
QString getWhatsThisText(QPoint p);
signals:
void signalNewEvent();
void beamIncidenceList(QPtrList<Incidence>);
public slots:
virtual void updateView();
virtual void showDates(const QDate &start, const QDate &end);
virtual void showEvents(QPtrList<Event> eventList);
void clearSelection();
void allSelection();
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 *);
KOListViewItem *getItemForEvent(Event *event);
private:
KOListViewListView *mListView;
KOEventPopupMenu *mPopupMenu;
KOListViewItem *mActiveItem;
QDict<Incidence> mUidDict;
QDate mStartDate;
void keyPressEvent ( QKeyEvent * ) ;
};
#endif