00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include <kglobal.h>
00022
#include <klocale.h>
00023
#include <kdebug.h>
00024
00025
#include "calformat.h"
00026
00027
#include "incidencebase.h"
00028
00029
using namespace KCal;
00030
00031 IncidenceBase::IncidenceBase() :
00032 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
00033 mPilotId(0), mSyncStatus(SYNCMOD)
00034 {
00035
setUid(CalFormat::createUniqueId());
00036
00037 mAttendees.setAutoDelete(
true );
00038 }
00039
00040 IncidenceBase::IncidenceBase(
const IncidenceBase &i) :
00041
CustomProperties( i )
00042 {
00043 mReadOnly = i.
mReadOnly;
00044 mDtStart = i.
mDtStart;
00045 mDuration = i.
mDuration;
00046 mHasDuration = i.
mHasDuration;
00047 mOrganizer = i.
mOrganizer;
00048 mUid = i.
mUid;
00049
Attendee::List attendees = i.
attendees();
00050 Attendee::List::ConstIterator it;
00051
for( it = attendees.begin(); it != attendees.end(); ++it ) {
00052 mAttendees.append(
new Attendee( *(*it) ) );
00053 }
00054 mFloats = i.
mFloats;
00055 mLastModified = i.
mLastModified;
00056 mPilotId = i.
mPilotId;
00057 mSyncStatus = i.
mSyncStatus;
00058
00059
00060
00061 mObservers.clear();
00062
00063 mAttendees.setAutoDelete(
true );
00064 }
00065
00066 IncidenceBase::~IncidenceBase()
00067 {
00068 }
00069
00070
00071
bool IncidenceBase::operator==(
const IncidenceBase& i2 )
const
00072
{
00073
if(
attendees().count() != i2.
attendees().count() ) {
00074
return false;
00075 }
00076
00077
Attendee::List al1 =
attendees();
00078
Attendee::List al2 = i2.
attendees();
00079 Attendee::List::ConstIterator a1 = al1.begin();
00080 Attendee::List::ConstIterator a2 = al2.begin();
00081
for( ; a1 != al1.end() && a2 != al2.end(); ++a1, ++a2 )
00082
if( **a1 == **a2 )
00083
continue;
00084
else {
00085
return false;
00086 }
00087
00088
return (
dtStart() == i2.
dtStart() &&
00089 organizer() == i2.
organizer() &&
00090
uid() == i2.
uid() &&
00091
00092
00093
doesFloat() == i2.
doesFloat() &&
00094 duration() == i2.
duration() &&
00095 hasDuration() == i2.
hasDuration() &&
00096
pilotId() == i2.
pilotId() &&
00097
syncStatus() == i2.
syncStatus() );
00098
00099 }
00100
00101
00102
00103
00104 void IncidenceBase::setUid(
const QString &uid)
00105 {
00106 mUid = uid;
00107
updated();
00108 }
00109
00110 QString
IncidenceBase::uid()
const
00111
{
00112
return mUid;
00113 }
00114
00115 void IncidenceBase::setLastModified(
const QDateTime &lm)
00116 {
00117
00118
00119
00120
00121 QDateTime current = lm;
00122 QTime t = current.time();
00123 t.setHMS( t.hour(), t.minute(), t.second(), 0 );
00124 current.setTime( t );
00125
00126 mLastModified = current;
00127 }
00128
00129 QDateTime
IncidenceBase::lastModified()
const
00130
{
00131
return mLastModified;
00132 }
00133
00134 void IncidenceBase::setOrganizer(
const QString &o)
00135 {
00136
00137
00138
00139 mOrganizer = o;
00140
if (mOrganizer.left(7).upper() ==
"MAILTO:")
00141 mOrganizer = mOrganizer.remove(0,7);
00142
00143
updated();
00144 }
00145
00146 QString IncidenceBase::organizer()
const
00147
{
00148
return mOrganizer;
00149 }
00150
00151 void IncidenceBase::setReadOnly(
bool readOnly )
00152 {
00153 mReadOnly = readOnly;
00154 }
00155
00156 void IncidenceBase::setDtStart(
const QDateTime &dtStart)
00157 {
00158
00159 mDtStart = dtStart;
00160
updated();
00161 }
00162
00163 QDateTime
IncidenceBase::dtStart()
const
00164
{
00165
return mDtStart;
00166 }
00167
00168 QString
IncidenceBase::dtStartTimeStr()
const
00169
{
00170
return KGlobal::locale()->formatTime(
dtStart().time());
00171 }
00172
00173 QString IncidenceBase::dtStartDateStr(
bool shortfmt)
const
00174
{
00175
return KGlobal::locale()->formatDate(
dtStart().date(),shortfmt);
00176 }
00177
00178 QString
IncidenceBase::dtStartStr()
const
00179
{
00180
return KGlobal::locale()->formatDateTime(
dtStart());
00181 }
00182
00183
00184 bool IncidenceBase::doesFloat()
const
00185
{
00186
return mFloats;
00187 }
00188
00189 void IncidenceBase::setFloats(
bool f)
00190 {
00191
if (mReadOnly)
return;
00192 mFloats = f;
00193
updated();
00194 }
00195
00196
00197 void IncidenceBase::addAttendee(
Attendee *a,
bool doupdate)
00198 {
00199
00200
if (mReadOnly)
return;
00201
00202
if (a->
name().left(7).upper() ==
"MAILTO:")
00203 a->
setName(a->
name().remove(0,7));
00204
00205 mAttendees.append(a);
00206
if (doupdate)
updated();
00207 }
00208
00209
#if 0
00210
void IncidenceBase::removeAttendee(
Attendee *a)
00211 {
00212
if (mReadOnly)
return;
00213 mAttendees.
removeRef(a);
00214
updated();
00215 }
00216
00217
void IncidenceBase::removeAttendee(
const char *n)
00218 {
00219
Attendee *a;
00220
00221
if (mReadOnly)
return;
00222
for (a = mAttendees.first(); a; a = mAttendees.next())
00223
if (a->getName() == n) {
00224 mAttendees.remove();
00225
break;
00226 }
00227 }
00228
#endif
00229
00230 void IncidenceBase::clearAttendees()
00231 {
00232
if (mReadOnly)
return;
00233 mAttendees.clear();
00234 }
00235
00236 Attendee *IncidenceBase::attendeeByMail(
const QString &email )
00237 {
00238 Attendee::List::ConstIterator it;
00239
for( it = mAttendees.begin(); it != mAttendees.end(); ++it ) {
00240
if ( (*it)->email() == email )
return *it;
00241 }
00242
00243
return 0;
00244 }
00245
00246 Attendee *IncidenceBase::attendeeByMails(
const QStringList &emails,
00247
const QString &email)
00248 {
00249 QStringList mails = emails;
00250
if ( !email.isEmpty() ) mails.append( email );
00251
00252 Attendee::List::ConstIterator itA;
00253
for( itA = mAttendees.begin(); itA != mAttendees.end(); ++itA ) {
00254
for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
00255
if ( (*itA)->email() == email )
return *itA;
00256 }
00257 }
00258
00259
return 0;
00260 }
00261
00262
void IncidenceBase::setDuration(
int seconds)
00263 {
00264 mDuration = seconds;
00265 setHasDuration(
true);
00266 }
00267
00268
int IncidenceBase::duration()
const
00269
{
00270
return mDuration;
00271 }
00272
00273
void IncidenceBase::setHasDuration(
bool)
00274 {
00275 mHasDuration =
true;
00276 }
00277
00278
bool IncidenceBase::hasDuration()
const
00279
{
00280
return mHasDuration;
00281 }
00282
00283 void IncidenceBase::setSyncStatus(
int stat)
00284 {
00285
if (mReadOnly)
return;
00286 mSyncStatus = stat;
00287 }
00288
00289 int IncidenceBase::syncStatus()
const
00290
{
00291
return mSyncStatus;
00292 }
00293
00294 void IncidenceBase::setPilotId(
int id )
00295 {
00296
if (mReadOnly)
return;
00297
00298 mPilotId =
id;
00299 }
00300
00301 int IncidenceBase::pilotId()
const
00302
{
00303
return mPilotId;
00304 }
00305
00306 void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
00307 {
00308
if( !mObservers.contains(observer) ) mObservers.append( observer );
00309 }
00310
00311 void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
00312 {
00313 mObservers.remove( observer );
00314 }
00315
00316 void IncidenceBase::updated()
00317 {
00318 QPtrListIterator<Observer> it(mObservers);
00319
while( it.current() ) {
00320 Observer *o = it.current();
00321 ++it;
00322 o->incidenceUpdated(
this );
00323 }
00324 }