You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.4 KiB
155 lines
3.4 KiB
/*
|
|
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., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, 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()
|
|
{
|
|
// kdDebug(5800) << "~Event() " << int( this ) << endl;
|
|
}
|
|
|
|
Event *Event::clone()
|
|
{
|
|
// kdDebug(5800) << "Event::clone()" << endl;
|
|
return new Event(*this);
|
|
}
|
|
|
|
Event& Event::operator=( const Event &e )
|
|
{
|
|
Incidence::operator=( e );
|
|
mDtEnd = e.mDtEnd;
|
|
mHasEndDate = e.mHasEndDate;
|
|
mTransparency = e.mTransparency;
|
|
return *this;
|
|
}
|
|
|
|
bool Event::operator==( const Event& e2 ) const
|
|
{
|
|
return
|
|
static_cast<const Incidence&>(*this) == static_cast<const Incidence&>(e2) &&
|
|
dtEnd() == e2.dtEnd() &&
|
|
hasEndDate() == e2.hasEndDate() &&
|
|
transparency() == e2.transparency();
|
|
}
|
|
|
|
|
|
|
|
void Event::setDtEnd(const TQDateTime &dtEnd)
|
|
{
|
|
if (mReadOnly) return;
|
|
|
|
mDtEnd = dtEnd;
|
|
|
|
setHasEndDate(true);
|
|
setHasDuration(false);
|
|
|
|
updated();
|
|
}
|
|
|
|
TQDateTime Event::dtEnd() const
|
|
{
|
|
if (hasEndDate()) return mDtEnd;
|
|
if (hasDuration()) return dtStart().addSecs(duration());
|
|
|
|
// It is valid for a VEVENT to be without a DTEND. See RFC2445, Sect4.6.1.
|
|
// Be careful to use Event::dateEnd() as appropriate due to this possibility.
|
|
return dtStart();
|
|
}
|
|
|
|
TQDate Event::dateEnd() const
|
|
{
|
|
if ( doesFloat() ) return dtEnd().date();
|
|
else return dtEnd().addSecs(-1).date();
|
|
}
|
|
|
|
TQString Event::dtEndTimeStr() const
|
|
{
|
|
return KGlobal::locale()->formatTime(dtEnd().time());
|
|
}
|
|
|
|
TQString Event::dtEndDateStr(bool shortfmt) const
|
|
{
|
|
return KGlobal::locale()->formatDate(dtEnd().date(),shortfmt);
|
|
}
|
|
|
|
TQString Event::dtEndStr() const
|
|
{
|
|
return KGlobal::locale()->formatDateTime(dtEnd());
|
|
}
|
|
|
|
void Event::setHasEndDate(bool b)
|
|
{
|
|
mHasEndDate = b;
|
|
}
|
|
|
|
bool Event::hasEndDate() const
|
|
{
|
|
return mHasEndDate;
|
|
}
|
|
|
|
bool Event::isMultiDay() const
|
|
{
|
|
// End date is non inclusive, so subtract 1 second...
|
|
TQDateTime start( dtStart() );
|
|
TQDateTime end( dtEnd() );
|
|
if ( ! doesFloat() ) {
|
|
end = end.addSecs(-1);
|
|
}
|
|
bool multi = ( start.date() != end.date() && start <= end );
|
|
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);
|
|
}
|