-rw-r--r-- | libkcal/event.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/libkcal/event.cpp b/libkcal/event.cpp new file mode 100644 index 0000000..dd67252 --- a/dev/null +++ b/libkcal/event.cpp @@ -0,0 +1,178 @@ +/* + 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 "event.h" + +using namespace KCal; + +Event::Event() : + mHasEndDate( false ), mTransparency( Opaque ) +{ +} + +Event::Event(const Event &e) : Incidence(e) +{ + mDtEnd = e.mDtEnd; + mHasEndDate = e.mHasEndDate; + mTransparency = e.mTransparency; +} + +Event::~Event() +{ +} + +Incidence *Event::clone() +{ + kdDebug(5800) << "Event::clone()" << endl; + return new Event(*this); +} + +bool KCal::operator==( const Event& e1, const Event& e2 ) +{ + return operator==( (const Incidence&)e1, (const Incidence&)e2 ) && + e1.dtEnd() == e2.dtEnd() && + e1.hasEndDate() == e2.hasEndDate() && + e1.transparency() == e2.transparency(); +} + + + +void Event::setDtEnd(const QDateTime &dtEnd) +{ + if (mReadOnly) return; + + mDtEnd = getEvenTime( dtEnd ); + + setHasEndDate(true); + setHasDuration(false); + + updated(); +} + +QDateTime Event::dtEnd() const +{ + if (hasEndDate()) return mDtEnd; + if (hasDuration()) return dtStart().addSecs(duration()); + + kdDebug(5800) << "Warning! Event '" << summary() + << "' does have neither end date nor duration." << endl; + return dtStart(); +} + +QString Event::dtEndTimeStr() const +{ + return KGlobal::locale()->formatTime(mDtEnd.time()); +} + +QString Event::dtEndDateStr(bool shortfmt) const +{ + return KGlobal::locale()->formatDate(mDtEnd.date(),shortfmt); +} + +QString Event::dtEndStr(bool shortfmt) const +{ + return KGlobal::locale()->formatDateTime(mDtEnd, shortfmt); +} + +void Event::setHasEndDate(bool b) +{ + mHasEndDate = b; +} + +bool Event::hasEndDate() const +{ + return mHasEndDate; +} + +bool Event::isMultiDay() const +{ + bool multi = !(dtStart().date() == dtEnd().date()); + return multi; +} + +void Event::setTransparency(Event::Transparency transparency) +{ + if (mReadOnly) return; + mTransparency = transparency; + updated(); +} + +Event::Transparency Event::transparency() const +{ + return mTransparency; +} + +void Event::setDuration(int seconds) +{ + setHasEndDate(false); + Incidence::setDuration(seconds); +} +QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset ) const +{ + + bool yes; + QDateTime incidenceStart = getNextOccurence( QDateTime::currentDateTime(), &yes ); + if ( ! yes || cancelled() ) { + *ok = false; + return QDateTime (); + } + + 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 (); + +} |