-rw-r--r-- | libkcal/todo.cpp | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp new file mode 100644 index 0000000..0c1e3e4 --- a/dev/null +++ b/libkcal/todo.cpp @@ -0,0 +1,316 @@ +/* + This file is part of libkcal. + Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include <kglobal.h> +#include <klocale.h> +#include <kdebug.h> + +#include "todo.h" + +using namespace KCal; + +Todo::Todo(): Incidence() +{ +// mStatus = TENTATIVE; + + mHasDueDate = false; + setHasStartDate( false ); + mCompleted = getEvenTime(QDateTime::currentDateTime()); + mHasCompletedDate = false; + mPercentComplete = 0; +} + +Todo::Todo(const Todo &t) : Incidence(t) +{ + mDtDue = t.mDtDue; + mHasDueDate = t.mHasDueDate; + mCompleted = t.mCompleted; + mHasCompletedDate = t.mHasCompletedDate; + mPercentComplete = t.mPercentComplete; +} + +Todo::~Todo() +{ + +} + +Incidence *Todo::clone() +{ + return new Todo(*this); +} + + +bool KCal::operator==( const Todo& t1, const Todo& t2 ) +{ + + bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 ); + if ( ! ret ) + return false; + if ( t1.hasDueDate() == t2.hasDueDate() ) { + if ( t1.hasDueDate() ) { + if ( t1.doesFloat() == t2.doesFloat() ) { + if ( t1.doesFloat() ) { + if ( t1.dtDue().date() != t2.dtDue().date() ) + return false; + } else + if ( t1.dtDue() != t2.dtDue() ) + return false; + } else + return false;// float != + } + + } else + return false; + if ( t1.percentComplete() != t2.percentComplete() ) + return false; + if ( t1.isCompleted() ) { + if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) { + if ( t1.hasCompletedDate() ) { + if ( t1.completed() != t2.completed() ) + return false; + } + + } else + return false; + } + return true; + +} + +void Todo::setDtDue(const QDateTime &dtDue) +{ + //int diffsecs = mDtDue.secsTo(dtDue); + + /*if (mReadOnly) return; + const QPtrList<Alarm>& alarms = alarms(); + for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) { + if (alarm->enabled()) { + alarm->setTime(alarm->time().addSecs(diffsecs)); + } + }*/ + mDtDue = getEvenTime(dtDue); + + //kdDebug(5800) << "setDtDue says date is " << mDtDue.toString() << endl; + + /*const QPtrList<Alarm>& alarms = alarms(); + for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) + alarm->setAlarmStart(mDtDue);*/ + + updated(); +} + +QDateTime Todo::dtDue() const +{ + return mDtDue; +} + +QString Todo::dtDueTimeStr() const +{ + return KGlobal::locale()->formatTime(mDtDue.time()); +} + +QString Todo::dtDueDateStr(bool shortfmt) const +{ + return KGlobal::locale()->formatDate(mDtDue.date(),shortfmt); +} + +QString Todo::dtDueStr(bool shortfmt) const +{ + return KGlobal::locale()->formatDateTime(mDtDue, shortfmt); +} + +bool Todo::hasDueDate() const +{ + return mHasDueDate; +} + +void Todo::setHasDueDate(bool f) +{ + if (mReadOnly) return; + mHasDueDate = f; + updated(); +} + + +#if 0 +void Todo::setStatus(const QString &statStr) +{ + if (mReadOnly) return; + QString ss(statStr.upper()); + + if (ss == "X-ACTION") + mStatus = NEEDS_ACTION; + else if (ss == "NEEDS ACTION") + mStatus = NEEDS_ACTION; + else if (ss == "ACCEPTED") + mStatus = ACCEPTED; + else if (ss == "SENT") + mStatus = SENT; + else if (ss == "TENTATIVE") + mStatus = TENTATIVE; + else if (ss == "CONFIRMED") + mStatus = CONFIRMED; + else if (ss == "DECLINED") + mStatus = DECLINED; + else if (ss == "COMPLETED") + mStatus = COMPLETED; + else if (ss == "DELEGATED") + mStatus = DELEGATED; + + updated(); +} + +void Todo::setStatus(int status) +{ + if (mReadOnly) return; + mStatus = status; + updated(); +} + +int Todo::status() const +{ + return mStatus; +} + +QString Todo::statusStr() const +{ + switch(mStatus) { + case NEEDS_ACTION: + return QString("NEEDS ACTION"); + break; + case ACCEPTED: + return QString("ACCEPTED"); + break; + case SENT: + return QString("SENT"); + break; + case TENTATIVE: + return QString("TENTATIVE"); + break; + case CONFIRMED: + return QString("CONFIRMED"); + break; + case DECLINED: + return QString("DECLINED"); + break; + case COMPLETED: + return QString("COMPLETED"); + break; + case DELEGATED: + return QString("DELEGATED"); + break; + } + return QString(""); +} +#endif + +bool Todo::isCompleted() const +{ + if (mPercentComplete == 100) return true; + else return false; +} + +void Todo::setCompleted(bool completed) +{ + if (completed) mPercentComplete = 100; + else mPercentComplete = 0; + updated(); +} + +QDateTime Todo::completed() const +{ + return mCompleted; +} + +QString Todo::completedStr() const +{ + return KGlobal::locale()->formatDateTime(mCompleted); +} + +void Todo::setCompleted(const QDateTime &completed) +{ + mHasCompletedDate = true; + mPercentComplete = 100; + mCompleted = getEvenTime(completed); + updated(); +} + +bool Todo::hasCompletedDate() const +{ + return mHasCompletedDate; +} + +int Todo::percentComplete() const +{ + return mPercentComplete; +} + +void Todo::setPercentComplete(int v) +{ + mPercentComplete = v; + updated(); +} +QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const +{ + if ( isCompleted() || ! hasDueDate() || cancelled() ) { + *ok = false; + return QDateTime (); + } + QDateTime incidenceStart; + incidenceStart = dtDue(); + bool enabled = false; + Alarm* alarm; + int off; + QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );; + // if ( QDateTime::currentDateTime() > incidenceStart ){ +// *ok = false; +// return incidenceStart; +// } + for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { + if (alarm->enabled()) { + if ( alarm->hasTime () ) { + if ( alarm->time() < alarmStart ) { + alarmStart = alarm->time(); + enabled = true; + off = alarmStart.secsTo( incidenceStart ); + } + + } else { + int secs = alarm->startOffset().asSeconds(); + if ( incidenceStart.addSecs( secs ) < alarmStart ) { + alarmStart = incidenceStart.addSecs( secs ); + enabled = true; + off = -secs; + } + } + } + } + if ( enabled ) { + if ( alarmStart > QDateTime::currentDateTime() ) { + *ok = true; + * offset = off; + return alarmStart; + } + } + *ok = false; + return QDateTime (); + +} + |