summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt13
-rw-r--r--korganizer/calendarview.cpp46
-rw-r--r--korganizer/calendarview.h3
-rw-r--r--korganizer/koagendaitem.cpp4
-rw-r--r--korganizer/komonthview.cpp10
-rw-r--r--korganizer/komonthview.h3
-rw-r--r--korganizer/koviewmanager.cpp3
-rw-r--r--korganizer/mainwindow.cpp7
-rw-r--r--libkcal/calendar.cpp11
-rw-r--r--libkcal/calendar.h3
-rw-r--r--libkcal/calendarlocal.cpp17
-rw-r--r--libkcal/incidence.cpp14
-rw-r--r--libkcal/incidence.h1
-rw-r--r--version2
14 files changed, 123 insertions, 14 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 5021212..46d59a3 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,4 +1,17 @@
Info about the changes in new versions of KDE-Pim/Pi
+********** VERSION 1.9.15 ************
+
+Usebilty enhancements in KO/Pi:
+When clicking on the date in a month view cell, the day view is shown.
+Old behaviour was, that the "new event" dialog popped up.
+
+Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
+That means, you can restore the latest
+event/todo/journal you have deleted.
+A journal is deleted, if you clear all the text of the journal.
+
+
+
********** VERSION 1.9.14 ************
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 543897a..15c5dd9 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -492,4 +492,11 @@ CalendarView::~CalendarView()
//kdDebug() << "~CalendarView() done" << endl;
}
+
+void CalendarView::showDay( QDate d )
+{
+ dateNavigator()->selectDate( d );
+ mViewManager->showWeekView();
+ dateNavigator()->selectDate( d );
+}
void CalendarView::timerAlarm()
{
@@ -2210,4 +2217,5 @@ void CalendarView::edit_options()
}
+
void CalendarView::slotSelectPickerDate( QDate d)
{
@@ -2230,4 +2238,17 @@ void CalendarView::slotSelectPickerDate( QDate d)
todoChanged( to );
} else {
+ if ( mMoveIncidence->doesRecur() ) {
+#if 0
+ // PENDING implement this
+ Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
+ mCalendar()->addIncidence( newInc );
+ if ( mMoveIncidence->type() == "Todo" )
+ emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
+ else
+ emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
+ mMoveIncidence = newInc;
+
+#endif
+ }
QTime tim = mMoveIncidence->dtStart().time();
int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
@@ -2427,4 +2448,6 @@ void CalendarView::moveIncidence(Incidence * inc )
da = mMoveIncidence->dtStart().date();
}
+ //PENDING set date for recurring incidence to date of recurrence
+ //mMoveIncidenceOldDate;
mDatePicker->setDate( da );
}
@@ -2885,5 +2908,5 @@ void CalendarView::deleteEvent(Event *anEvent)
//kdDebug() << "Date Not Valid" << endl;
if (KOPrefs::instance()->mConfirm) {
- km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
+ km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
i18n("KO/Pi Confirmation"),i18n("Delete All"));
@@ -2893,5 +2916,5 @@ void CalendarView::deleteEvent(Event *anEvent)
km = KMessageBox::No;
} else {
- km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
+ km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) +
i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
@@ -2934,5 +2957,5 @@ void CalendarView::deleteEvent(Event *anEvent)
} else {
if (KOPrefs::instance()->mConfirm) {
- switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
+ switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
i18n("\nAre you sure you want\nto delete this event?"),
i18n("KO/Pi Confirmation"),i18n("Delete"))) {
@@ -3800,2 +3823,19 @@ void CalendarView::removeSyncInfo( QString syncProfile)
}
+
+void CalendarView::undo_delete()
+{
+ //qDebug("undo_delete() ");
+ Incidence* undo = mCalendar->undoIncidence();
+ if ( !undo ) {
+ KMessageBox::sorry(this,i18n("There is nothing to undo!"),
+ i18n("KO/Pi"));
+ return;
+ }
+ if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) +
+ i18n("\nAre you sure you want\nto restore this?"),
+ i18n("KO/Pi Confirmation"),i18n("Restore"))) {
+ mCalendar->undoDeleteIncidence();
+ updateView();
+ }
+}
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 437a51c..646973d 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -451,4 +451,6 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
void setSyncDevice( QString );
void setSyncName( QString );
+ void showDay( QDate );
+ void undo_delete();
protected slots:
void timerAlarm();
@@ -555,4 +557,5 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
Incidence *mSelectedIncidence;
Incidence *mMoveIncidence;
+ QDate mMoveIncidenceOldDate;
KOTodoView *mTodoList;
KOEventEditor * mEventEditor;
diff --git a/korganizer/koagendaitem.cpp b/korganizer/koagendaitem.cpp
index f027343..46184ac 100644
--- a/korganizer/koagendaitem.cpp
+++ b/korganizer/koagendaitem.cpp
@@ -151,4 +151,5 @@ KOAgendaItem::~KOAgendaItem()
void KOAgendaItem::recreateIncidence()
{
+#if 0
Incidence* newInc = mIncidence->clone();
newInc->recreate();
@@ -161,5 +162,6 @@ void KOAgendaItem::recreateIncidence()
((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) );
}
- mIncidence = newInc;
+#endif
+ mIncidence = mIncidence->recreateCloneException( mDate );
}
bool KOAgendaItem::updateIcons(QPainter * p, bool horLayout)
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 7d1e82f..08232e2 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -282,6 +282,6 @@ MonthViewCell::MonthViewCell( KOMonthView *parent)
enableScrollBars( false );
updateConfig();
- connect( mLabel, SIGNAL( clicked( )),
- SLOT( newEvent() ));
+ //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
+ connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ),
SLOT( defaultAction( QListBoxItem * ) ) );
@@ -630,4 +630,8 @@ void MonthViewCell::defaultAction( QListBoxItem *item )
if ( incidence ) mMonthView->defaultAction( incidence );
}
+void MonthViewCell::showDay()
+{
+ emit showDaySignal( date() );
+}
void MonthViewCell::newEvent()
{
@@ -730,4 +734,6 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
SIGNAL( newEventSignal( QDateTime ) ) );
+ connect( cell, SIGNAL( showDaySignal( QDate ) ),
+ SIGNAL( showDaySignal( QDate ) ) );
}
}
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index e94952f..5124057 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -144,4 +144,5 @@ class MonthViewCell : public QWidget
void defaultAction( Incidence * );
void newEventSignal( QDateTime );
+ void showDaySignal( QDate );
protected:
@@ -154,4 +155,5 @@ class MonthViewCell : public QWidget
void cellClicked( QListBoxItem * );
void newEvent();
+ void showDay();
private:
@@ -222,4 +224,5 @@ class KOMonthView: public KOEventView
signals:
void selectWeekNum ( int );
+ void showDaySignal( QDate );
protected:
void resizeEvent(QResizeEvent *);
diff --git a/korganizer/koviewmanager.cpp b/korganizer/koviewmanager.cpp
index 391f98c..6e151f9 100644
--- a/korganizer/koviewmanager.cpp
+++ b/korganizer/koviewmanager.cpp
@@ -33,4 +33,5 @@
#include <qapplication.h>
#endif
+#include <qdatetime.h>
#include "calendarview.h"
#include "datenavigator.h"
@@ -445,4 +446,6 @@ void KOViewManager::showMonthView()
connect( mMonthView, SIGNAL( selectWeekNum( int ) ),
mMainView, SLOT ( selectWeekNum( int ) ) );
+ connect( mMonthView, SIGNAL( showDaySignal( QDate ) ),
+ mMainView, SLOT ( showDay( QDate ) ) );
connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig()));
mMonthView->updateConfig();
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 46ae6a0..a652c05 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -577,4 +577,11 @@ void MainWindow::initActions()
mView, SLOT( edit_options() ) );
actionMenu->insertSeparator();
+
+ action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this );
+ action->addTo( actionMenu );
+ connect( action, SIGNAL( activated() ),
+ mView, SLOT( undo_delete() ) );
+ actionMenu->insertSeparator();
+
icon = loadPixmap( pathString + "newevent" );
configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 );
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index 52daaaa..88351eb 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -53,5 +53,5 @@ void Calendar::init()
mObserver = 0;
mNewObserver = false;
-
+ mUndoIncidence = 0;
mModified = false;
@@ -110,4 +110,6 @@ Calendar::~Calendar()
{
delete mDefaultFilter;
+ if ( mUndoIncidence )
+ delete mUndoIncidence;
}
@@ -117,4 +119,11 @@ const QString &Calendar::getOwner() const
}
+bool Calendar::undoDeleteIncidence()
+{
+ if (!mUndoIncidence)
+ return false;
+ addIncidence(mUndoIncidence);
+ mUndoIncidence = 0;
+}
void Calendar::setOwner(const QString &os)
{
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index b7d6a1f..2f2c3aa 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -66,4 +66,6 @@ public:
Calendar(const QString &timeZoneId);
virtual ~Calendar();
+ Incidence * undoIncidence() { return mUndoIncidence; };
+ bool undoDeleteIncidence();
void deleteIncidence(Incidence *in);
void resetTempSyncStat();
@@ -323,4 +325,5 @@ public:
bool inclusive = false ) = 0;
Incidence *mNextAlarmIncidence;
+ Incidence *mUndoIncidence;
private:
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 3f46d53..12294c0 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -153,9 +153,9 @@ bool CalendarLocal::addEvent( Event *event )
void CalendarLocal::deleteEvent( Event *event )
{
-
-
- if ( mEventList.removeRef( event ) ) {
- setModified( true );
- }
+ if ( mUndoIncidence ) delete mUndoIncidence;
+ mUndoIncidence = event->clone();
+ if ( mEventList.removeRef( event ) ) {
+ setModified( true );
+ }
}
@@ -202,5 +202,7 @@ void CalendarLocal::deleteTodo( Todo *todo )
{
// Handle orphaned children
- removeRelations( todo );
+ if ( mUndoIncidence ) delete mUndoIncidence;
+ mUndoIncidence = todo->clone();
+ removeRelations( todo );
if ( mTodoList.removeRef( todo ) ) {
@@ -688,4 +690,7 @@ bool CalendarLocal::addJournal(Journal *journal)
void CalendarLocal::deleteJournal( Journal *journal )
{
+ if ( mUndoIncidence ) delete mUndoIncidence;
+ mUndoIncidence = journal->clone();
+ mUndoIncidence->setSummary( mUndoIncidence->description().left(25));
if ( mJournalList.removeRef(journal) ) {
setModified( true );
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 5a9ef0e..28402ae 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -174,4 +174,18 @@ bool KCal::operator==( const Incidence& i1, const Incidence& i2 )
}
+Incidence* Incidence::recreateCloneException( QDate d )
+{
+ Incidence* newInc = clone();
+ newInc->recreate();
+ if ( doesRecur() ) {
+ addExDate( d );
+ newInc->recurrence()->unsetRecurs();
+ int len = dtStart().secsTo( ((Event*)this)->dtEnd());
+ QTime tim = dtStart().time();
+ newInc->setDtStart( QDateTime(d, tim) );
+ ((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) );
+ }
+ return newInc;
+}
void Incidence::recreate()
diff --git a/libkcal/incidence.h b/libkcal/incidence.h
index 7dc6f10..1807bc4 100644
--- a/libkcal/incidence.h
+++ b/libkcal/incidence.h
@@ -123,4 +123,5 @@ class Incidence : public IncidenceBase
*/
void recreate();
+ Incidence* recreateCloneException(QDate);
/** set creation date */
diff --git a/version b/version
index 0343cbb..ef03779 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-version = "1.9.14";
+version = "1.9.15";