-rw-r--r-- | libkcal/calendar.cpp | 11 | ||||
-rw-r--r-- | libkcal/calendar.h | 3 | ||||
-rw-r--r-- | libkcal/calendarlocal.cpp | 17 | ||||
-rw-r--r-- | libkcal/incidence.cpp | 14 | ||||
-rw-r--r-- | libkcal/incidence.h | 1 |
5 files changed, 39 insertions, 7 deletions
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp index 52daaaa..88351eb 100644 --- a/libkcal/calendar.cpp +++ b/libkcal/calendar.cpp @@ -52,7 +52,7 @@ void Calendar::init() { mObserver = 0; mNewObserver = false; - + mUndoIncidence = 0; mModified = false; // Setup default filter, which does nothing @@ -109,6 +109,8 @@ void Calendar::init() Calendar::~Calendar() { delete mDefaultFilter; + if ( mUndoIncidence ) + delete mUndoIncidence; } const QString &Calendar::getOwner() const @@ -116,6 +118,13 @@ const QString &Calendar::getOwner() const return mOwner; } +bool Calendar::undoDeleteIncidence() +{ + if (!mUndoIncidence) + return false; + addIncidence(mUndoIncidence); + mUndoIncidence = 0; +} void Calendar::setOwner(const QString &os) { int i; diff --git a/libkcal/calendar.h b/libkcal/calendar.h index b7d6a1f..2f2c3aa 100644 --- a/libkcal/calendar.h +++ b/libkcal/calendar.h @@ -65,6 +65,8 @@ public: Calendar(); Calendar(const QString &timeZoneId); virtual ~Calendar(); + Incidence * undoIncidence() { return mUndoIncidence; }; + bool undoDeleteIncidence(); void deleteIncidence(Incidence *in); void resetTempSyncStat(); void resetPilotStat(int id); @@ -322,6 +324,7 @@ public: virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, bool inclusive = false ) = 0; Incidence *mNextAlarmIncidence; + Incidence *mUndoIncidence; private: void init(); diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp index 3f46d53..12294c0 100644 --- a/libkcal/calendarlocal.cpp +++ b/libkcal/calendarlocal.cpp @@ -152,11 +152,11 @@ 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 ); + } } @@ -201,7 +201,9 @@ bool CalendarLocal::addTodo( Todo *todo ) void CalendarLocal::deleteTodo( Todo *todo ) { // Handle orphaned children - removeRelations( todo ); + if ( mUndoIncidence ) delete mUndoIncidence; + mUndoIncidence = todo->clone(); + removeRelations( todo ); if ( mTodoList.removeRef( todo ) ) { setModified( true ); @@ -687,6 +689,9 @@ 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 @@ -173,6 +173,20 @@ bool KCal::operator==( const Incidence& i1, const Incidence& i2 ) stringCompare( i1.location(), i2.location() ); } +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 @@ -122,6 +122,7 @@ class Incidence : public IncidenceBase modification date and revision number. */ void recreate(); + Incidence* recreateCloneException(QDate); /** set creation date */ void setCreated(QDateTime); |