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.
294 lines
8.6 KiB
294 lines
8.6 KiB
15 years ago
|
/*
|
||
|
This file is part of libkcal.
|
||
|
|
||
|
Copyright (c) 2001-2003 Cornelius Schumacher <schumacher@kde.org>
|
||
|
Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
|
||
|
|
||
|
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.
|
||
|
*/
|
||
|
#ifndef KCAL_INCIDENCEBASE_H
|
||
|
#define KCAL_INCIDENCEBASE_H
|
||
|
|
||
|
#include <qdatetime.h>
|
||
|
#include <qstringlist.h>
|
||
|
#include <qvaluelist.h>
|
||
|
#include <qptrlist.h>
|
||
|
|
||
|
#include "customproperties.h"
|
||
|
#include "attendee.h"
|
||
|
|
||
|
namespace KCal {
|
||
|
|
||
|
typedef QValueList<QDate> DateList;
|
||
|
typedef QValueList<QDateTime> DateTimeList;
|
||
|
class Event;
|
||
|
class Todo;
|
||
|
class Journal;
|
||
|
class FreeBusy;
|
||
|
|
||
|
/**
|
||
|
This class provides the base class common to all calendar components.
|
||
|
*/
|
||
|
class LIBKCAL_EXPORT IncidenceBase : public CustomProperties
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
This class provides the interface for a visitor of calendar components. It
|
||
|
serves as base class for concrete visitors, which implement certain actions on
|
||
|
calendar components. It allows to add functions, which operate on the concrete
|
||
|
types of calendar components, without changing the calendar component classes.
|
||
|
*/
|
||
|
class Visitor
|
||
|
{
|
||
|
public:
|
||
|
/** Destruct Incidence::Visitor */
|
||
|
virtual ~Visitor() {}
|
||
|
|
||
|
/**
|
||
|
Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions
|
||
|
on an Event object.
|
||
|
*/
|
||
|
virtual bool visit(Event *) { return false; }
|
||
|
/**
|
||
|
Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions
|
||
|
on a Todo object.
|
||
|
*/
|
||
|
virtual bool visit(Todo *) { return false; }
|
||
|
/**
|
||
|
Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions
|
||
|
on an Journal object.
|
||
|
*/
|
||
|
virtual bool visit(Journal *) { return false; }
|
||
|
/**
|
||
|
Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions
|
||
|
on a FreeBusy object.
|
||
|
*/
|
||
|
virtual bool visit(FreeBusy *) { return false; }
|
||
|
|
||
|
protected:
|
||
|
/** Constructor is protected to prevent direct creation of visitor base class. */
|
||
|
Visitor() {}
|
||
|
};
|
||
|
|
||
|
class Observer {
|
||
|
public:
|
||
|
virtual ~Observer() {}
|
||
|
virtual void incidenceUpdated( IncidenceBase * ) = 0;
|
||
|
virtual void incidenceUpdatedSilent( IncidenceBase * ) {};
|
||
|
};
|
||
|
|
||
|
IncidenceBase();
|
||
|
IncidenceBase( const IncidenceBase & );
|
||
|
virtual ~IncidenceBase();
|
||
|
|
||
|
IncidenceBase& operator=( const IncidenceBase &i );
|
||
|
bool operator==( const IncidenceBase & ) const;
|
||
|
|
||
|
/**
|
||
|
Accept IncidenceVisitor. A class taking part in the visitor mechanism has to
|
||
|
provide this implementation:
|
||
|
<pre>
|
||
|
bool accept(Visitor &v) { return v.visit(this); }
|
||
|
</pre>
|
||
|
*/
|
||
|
virtual bool accept(Visitor &) { return false; }
|
||
|
|
||
|
virtual QCString type() const = 0;
|
||
|
|
||
|
/** Set the unique id for the event */
|
||
|
void setUid( const QString & );
|
||
|
/** Return the unique id for the event */
|
||
|
QString uid() const;
|
||
|
|
||
|
/** Sets the time the incidence was last modified. */
|
||
|
void setLastModified( const QDateTime &lm );
|
||
|
/** Return the time the incidence was last modified. */
|
||
|
QDateTime lastModified() const;
|
||
|
|
||
|
/** sets the organizer for the event */
|
||
|
void setOrganizer( const Person &o );
|
||
|
void setOrganizer( const QString &o );
|
||
|
Person organizer() const;
|
||
|
|
||
|
/** Set readonly status. */
|
||
|
virtual void setReadOnly( bool );
|
||
|
/** Return if the object is read-only. */
|
||
|
bool isReadOnly() const { return mReadOnly; }
|
||
|
|
||
|
/** for setting the event's starting date/time with a QDateTime. */
|
||
|
virtual void setDtStart( const QDateTime &dtStart );
|
||
|
/** returns an event's starting date/time as a QDateTime. */
|
||
|
virtual QDateTime dtStart() const;
|
||
|
/** returns an event's starting time as a string formatted according to the
|
||
|
users locale settings */
|
||
|
virtual QString dtStartTimeStr() const;
|
||
|
/** returns an event's starting date as a string formatted according to the
|
||
|
users locale settings */
|
||
|
virtual QString dtStartDateStr( bool shortfmt = true ) const;
|
||
|
/** returns an event's starting date and time as a string formatted according
|
||
|
to the users locale settings */
|
||
|
virtual QString dtStartStr() const;
|
||
|
|
||
|
virtual void setDuration( int seconds );
|
||
|
int duration() const;
|
||
|
void setHasDuration( bool );
|
||
|
bool hasDuration() const;
|
||
|
|
||
|
/** Return true or false depending on whether the incidence "floats,"
|
||
|
* i.e. has a date but no time attached to it. */
|
||
|
bool doesFloat() const;
|
||
|
/** Set whether the incidence floats, i.e. has a date but no time attached to it. */
|
||
|
void setFloats( bool f );
|
||
|
|
||
|
//
|
||
|
// Comments
|
||
|
//
|
||
|
|
||
|
/**
|
||
|
* Add a comment to this incidence.
|
||
|
*
|
||
|
* Does not add a linefeed character. Just appends the text as passed in.
|
||
|
*
|
||
|
* @param comment The comment to add.
|
||
|
*/
|
||
|
void addComment(const QString& comment);
|
||
|
|
||
|
/**
|
||
|
* Remove a comment from the event.
|
||
|
*
|
||
|
* Removes first comment whose string is an exact match for the string
|
||
|
* passed in.
|
||
|
*
|
||
|
* @return true if match found, false otherwise.
|
||
|
*/
|
||
|
bool removeComment( const QString& comment );
|
||
|
|
||
|
/** Delete all comments associated with this incidence. */
|
||
|
void clearComments();
|
||
|
|
||
|
/** Return all comments associated with this incidence. */
|
||
|
QStringList comments() const;
|
||
|
|
||
|
/**
|
||
|
Add Attendee to this incidence. IncidenceBase takes ownership of the
|
||
|
Attendee object.
|
||
|
|
||
|
@param attendee a pointer to the attendee to add
|
||
|
@param doUpdate If true the Observers are notified, if false they are not.
|
||
|
*/
|
||
|
void addAttendee( Attendee *attendee, bool doUpdate = true );
|
||
|
/**
|
||
|
Remove all Attendees.
|
||
|
*/
|
||
|
void clearAttendees();
|
||
|
/**
|
||
|
Return list of attendees.
|
||
|
*/
|
||
|
const Attendee::List &attendees() const { return mAttendees; };
|
||
|
/**
|
||
|
Return number of attendees.
|
||
|
*/
|
||
|
int attendeeCount() const { return mAttendees.count(); };
|
||
|
/**
|
||
|
Return the Attendee with this email address.
|
||
|
*/
|
||
|
Attendee *attendeeByMail( const QString & ) const;
|
||
|
/**
|
||
|
Return first Attendee with one of the given email addresses.
|
||
|
*/
|
||
|
Attendee *attendeeByMails( const QStringList &,
|
||
|
const QString &email = QString::null ) const;
|
||
|
/**
|
||
|
Return attendee with given uid.
|
||
|
*/
|
||
|
Attendee *attendeeByUid( const QString &uid ) const;
|
||
|
|
||
|
/**
|
||
|
Pilot synchronization states
|
||
|
*/
|
||
|
enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 };
|
||
|
/**
|
||
|
Set synchronisation satus.
|
||
|
*/
|
||
|
void setSyncStatus( int status );
|
||
|
void setSyncStatusSilent( int status );
|
||
|
/**
|
||
|
Return synchronisation status.
|
||
|
*/
|
||
|
int syncStatus() const;
|
||
|
|
||
|
/**
|
||
|
Set Pilot Id.
|
||
|
*/
|
||
|
void setPilotId( unsigned long id );
|
||
|
/**
|
||
|
Return Pilot Id.
|
||
|
*/
|
||
|
unsigned long pilotId() const;
|
||
|
|
||
|
/**
|
||
|
Register observer. The observer is notified when the observed object
|
||
|
changes.
|
||
|
*/
|
||
|
void registerObserver( Observer * );
|
||
|
/**
|
||
|
Unregister observer. It isn't notified anymore about changes.
|
||
|
*/
|
||
|
void unRegisterObserver( Observer * );
|
||
|
/**
|
||
|
Call this to notify the observers after the IncidenceBas object has
|
||
|
changed.
|
||
|
*/
|
||
|
void updated();
|
||
|
void updatedSilent();
|
||
|
|
||
|
protected:
|
||
|
/**
|
||
|
@copydoc
|
||
|
CustomProperties::customPropertyUpdated()
|
||
|
*/
|
||
|
virtual void customPropertyUpdated();
|
||
|
|
||
|
bool mReadOnly;
|
||
|
|
||
|
private:
|
||
|
// base components
|
||
|
QDateTime mDtStart;
|
||
|
Person mOrganizer;
|
||
|
QString mUid;
|
||
|
QDateTime mLastModified;
|
||
|
Attendee::List mAttendees;
|
||
|
QStringList mComments;
|
||
|
|
||
|
bool mFloats;
|
||
|
|
||
|
int mDuration;
|
||
|
bool mHasDuration;
|
||
|
|
||
|
// PILOT SYNCHRONIZATION STUFF
|
||
|
unsigned long mPilotId; // unique id for pilot sync
|
||
|
int mSyncStatus; // status (for sync)
|
||
|
|
||
|
QPtrList<Observer> mObservers;
|
||
|
|
||
|
class Private;
|
||
|
Private *d;
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif
|