-rw-r--r-- | libopie2/opiepim/core/opimevent.cpp | 263 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimevent.h | 65 |
2 files changed, 0 insertions, 328 deletions
diff --git a/libopie2/opiepim/core/opimevent.cpp b/libopie2/opiepim/core/opimevent.cpp index 1b553d8..cc84426 100644 --- a/libopie2/opiepim/core/opimevent.cpp +++ b/libopie2/opiepim/core/opimevent.cpp @@ -688,360 +688,97 @@ void OPimEvent::fromMap( const QMap<int, QString>& map ) setParent( map[ OPimEvent::FRecParent ].toInt() ); if ( !map[ OPimEvent::FRecChildren ].isEmpty() ) { QStringList list = QStringList::split( ' ', map[ OPimEvent::FRecChildren ] ); for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { addChild( ( *it ).toInt() ); } } // Fill recurrence stuff and put it directly into the OPimRecurrence-Object using fromMap.. if ( !map[ OPimEvent::FRType ].isEmpty() ) { QMap<int, QString> recFields; recFields.insert( OPimRecurrence::RType, map[ OPimEvent::FRType ] ); recFields.insert( OPimRecurrence::RWeekdays, map[ OPimEvent::FRWeekdays ] ); recFields.insert( OPimRecurrence::RPosition, map[ OPimEvent::FRPosition ] ); recFields.insert( OPimRecurrence::RFreq, map[ OPimEvent::FRFreq ] ); recFields.insert( OPimRecurrence::RHasEndDate, map[ OPimEvent::FRHasEndDate ] ); recFields.insert( OPimRecurrence::EndDate, map[ OPimEvent::FREndDate ] ); recFields.insert( OPimRecurrence::Created, map[ OPimEvent::FRCreated ] ); recFields.insert( OPimRecurrence::Exceptions, map[ OPimEvent::FRExceptions ] ); OPimRecurrence recur( recFields ); setRecurrence( recur ); } } int OPimEvent::parent() const { return data->parent; } void OPimEvent::setParent( int uid ) { changeOrModify(); data->parent = uid; } QArray<int> OPimEvent::children() const { if ( !data->child ) return QArray<int>(); else return data->child->copy(); } void OPimEvent::setChildren( const QArray<int>& arr ) { changeOrModify(); if ( data->child ) delete data->child; data->child = new QArray<int>( arr ); data->child->detach(); } void OPimEvent::addChild( int uid ) { changeOrModify(); if ( !data->child ) { data->child = new QArray<int>( 1 ); ( *data->child ) [ 0 ] = uid; } else { int count = data->child->count(); data->child->resize( count + 1 ); ( *data->child ) [ count ] = uid; } } void OPimEvent::removeChild( int uid ) { if ( !data->child || !data->child->contains( uid ) ) return ; changeOrModify(); QArray<int> newAr( data->child->count() - 1 ); int j = 0; uint count = data->child->count(); for ( uint i = 0; i < count; i++ ) { if ( ( *data->child ) [ i ] != uid ) { newAr[ j ] = ( *data->child ) [ i ]; j++; } } ( *data->child ) = newAr; } - -struct OEffectiveEvent::Data : public QShared -{ - Data() : QShared() - {} - OPimEvent event; - QDate date; - QTime start, end; - QDate startDate, endDate; -bool dates : 1; -}; - - -OEffectiveEvent::OEffectiveEvent() -{ - data = new Data; - data->date = QDate::currentDate(); - data->start = data->end = QTime::currentTime(); - data->dates = false; -} - - -OEffectiveEvent::OEffectiveEvent( const OPimEvent& ev, const QDate& startDate, - Position pos ) -{ - data = new Data; - data->event = ev; - data->date = startDate; - if ( pos & Start ) - data->start = ev.startDateTime().time(); - else - data->start = QTime( 0, 0, 0 ); - - if ( pos & End ) - data->end = ev.endDateTime().time(); - else - data->end = QTime( 23, 59, 59 ); - - data->dates = false; -} - - -OEffectiveEvent::OEffectiveEvent( const OEffectiveEvent& ev ) -{ - data = ev.data; - data->ref(); -} - - -OEffectiveEvent::~OEffectiveEvent() -{ - if ( data->deref() ) - { - delete data; - data = 0; - } -} - - -OEffectiveEvent& OEffectiveEvent::operator=( const OEffectiveEvent& ev ) -{ - if ( *this == ev ) return * this; - - ev.data->ref(); - deref(); - data = ev.data; - - return *this; -} - - -void OEffectiveEvent::setStartTime( const QTime& ti ) -{ - changeOrModify(); - data->start = ti; -} - - -void OEffectiveEvent::setEndTime( const QTime& en ) -{ - changeOrModify(); - data->end = en; -} - - -void OEffectiveEvent::setEvent( const OPimEvent& ev ) -{ - changeOrModify(); - data->event = ev; -} - - -void OEffectiveEvent::setDate( const QDate& da ) -{ - changeOrModify(); - data->date = da; -} - - -void OEffectiveEvent::setEffectiveDates( const QDate& from, - const QDate& to ) -{ - if ( !from.isValid() ) - { - data->dates = false; - return ; - } - - data->startDate = from; - data->endDate = to; -} - - -QString OEffectiveEvent::description() const -{ - return data->event.description(); -} - - -QString OEffectiveEvent::location() const -{ - return data->event.location(); -} - - -QString OEffectiveEvent::note() const -{ - return data->event.note(); -} - - -OPimEvent OEffectiveEvent::event() const -{ - return data->event; -} - - -QTime OEffectiveEvent::startTime() const -{ - return data->start; -} - - -QTime OEffectiveEvent::endTime() const -{ - return data->end; -} - - -QDate OEffectiveEvent::date() const -{ - return data->date; -} - - -int OEffectiveEvent::length() const -{ - return ( data->end.hour() * 60 - data->start.hour() * 60 ) - + QABS( data->start.minute() - data->end.minute() ); -} - - -int OEffectiveEvent::size() const -{ - return ( data->end.hour() - data->start.hour() ) * 3600 - + ( data->end.minute() - data->start.minute() * 60 - + data->end.second() - data->start.second() ); -} - - -QDate OEffectiveEvent::startDate() const -{ - if ( data->dates ) - return data->startDate; - else if ( data->event.hasRecurrence() ) // single day, since multi-day should have a d pointer - return data->date; - else - return data->event.startDateTime().date(); -} - - -QDate OEffectiveEvent::endDate() const -{ - if ( data->dates ) - return data->endDate; - else if ( data->event.hasRecurrence() ) - return data->date; - else - return data->event.endDateTime().date(); -} - - -void OEffectiveEvent::deref() -{ - if ( data->deref() ) - { - delete data; - data = 0; - } -} - - -void OEffectiveEvent::changeOrModify() -{ - if ( data->count != 1 ) - { - data->deref(); - Data* d2 = new Data; - d2->event = data->event; - d2->date = data->date; - d2->start = data->start; - d2->end = data->end; - d2->startDate = data->startDate; - d2->endDate = data->endDate; - d2->dates = data->dates; - data = d2; - } -} - - -bool OEffectiveEvent::operator<( const OEffectiveEvent &e ) const -{ - if ( data->date < e.date() ) - return TRUE; - if ( data->date == e.date() ) - return ( startTime() < e.startTime() ); - else - return FALSE; -} - - -bool OEffectiveEvent::operator<=( const OEffectiveEvent &e ) const -{ - return ( data->date <= e.date() ); -} - - -bool OEffectiveEvent::operator==( const OEffectiveEvent &e ) const -{ - return ( date() == e.date() - && startTime() == e.startTime() - && endTime() == e.endTime() - && event() == e.event() ); -} - - -bool OEffectiveEvent::operator!=( const OEffectiveEvent &e ) const -{ - return !( *this == e ); -} - - -bool OEffectiveEvent::operator>( const OEffectiveEvent &e ) const -{ - return !( *this <= e ); -} - - -bool OEffectiveEvent::operator>= ( const OEffectiveEvent &e ) const -{ - return !( *this < e ); -} - } diff --git a/libopie2/opiepim/core/opimevent.h b/libopie2/opiepim/core/opimevent.h index 32f648f..1d12530 100644 --- a/libopie2/opiepim/core/opimevent.h +++ b/libopie2/opiepim/core/opimevent.h @@ -126,164 +126,99 @@ class OPimEvent : public OPimRecord void setLocation( const QString& loc ); //@} //@{ bool hasNotifiers() const; OPimNotifyManager ¬ifiers() const; //@} //@{ OPimRecurrence recurrence() const; void setRecurrence( const OPimRecurrence& ); bool hasRecurrence() const; //@} //@{ QString note() const; void setNote( const QString& note ); //@} QDateTime createdDateTime() const; void setCreatedDateTime( const QDateTime& dt ); /** set the date to dt. dt is the QDateTime in localtime */ void setStartDateTime( const QDateTime& ); /** returns the datetime in the local timeZone */ QDateTime startDateTime() const; /** returns the start datetime in the current zone */ QDateTime startDateTimeInZone() const; /** in current timezone */ void setEndDateTime( const QDateTime& ); /** in current timezone */ QDateTime endDateTime() const; QDateTime endDateTimeInZone() const; bool isMultipleDay() const; bool isAllDay() const; void setAllDay( bool isAllDay ); /* pin this event to a timezone! FIXME */ void setTimeZone( const QString& timeZone ); QString timeZone() const; //@{ /** For exception to recurrence here is a list of children... */ QArray<int> children() const; void setChildren( const QArray<int>& ); void addChild( int uid ); void removeChild( int uid ); //@} /** return the parent OPimEvent */ int parent() const; void setParent( int uid ); /* needed reimp */ //@{ Reimplementations virtual bool match( const QRegExp& ) const; QString toRichText() const; QString toShortText() const; QString type() const; QMap<int, QString> toMap() const; void fromMap( const QMap<int, QString>& map ); QString recordField( int ) const; bool loadFromStream( QDataStream& ); bool saveToStream( QDataStream& ) const; //@} //@{ int rtti() const; static OPimEvent* safeCast( const OPimRecord* ); //@} /* bool operator==( const OPimEvent& ); bool operator!=( const OPimEvent& ); bool operator<( const OPimEvent& ); bool operator<=( const OPimEvent& ); bool operator>( const OPimEvent& ); bool operator>=(const OPimEvent& ); */ private: inline void changeOrModify(); void deref(); struct Data; Data* data; class Private; Private* priv; }; - -/** - * AN Event can span through multiple days. We split up a multiday eve - */ -class OEffectiveEvent -{ - - public: - typedef QValueList<OEffectiveEvent> ValueList; - enum Position { MidWay, Start, End, StartEnd }; - // If we calculate the effective event of a multi-day event - // we have to figure out whether we are at the first day, - // at the end, or anywhere else ("middle"). This is important - // for the start/end times (00:00/23:59) - // MidWay: 00:00 -> 23:59, as we are "in the middle" of a multi- - // day event - // Start: start time -> 23:59 - // End: 00:00 -> end time - // Start | End == StartEnd: for single-day events (default) - // here we draw start time -> end time - OEffectiveEvent(); - OEffectiveEvent( const OPimEvent& event, const QDate& startDate, Position pos = StartEnd ); - OEffectiveEvent( const OEffectiveEvent& ); - OEffectiveEvent &operator=( const OEffectiveEvent& ); - ~OEffectiveEvent(); - - void setStartTime( const QTime& ); - void setEndTime( const QTime& ); - void setEvent( const OPimEvent& ); - void setDate( const QDate& ); - - void setEffectiveDates( const QDate& from, const QDate& to ); - - QString description() const; - QString location() const; - QString note() const; - OPimEvent event() const; - QTime startTime() const; - QTime endTime() const; - QDate date() const; - - /* return the length in hours */ - int length() const; - int size() const; - - QDate startDate() const; - QDate endDate() const; - - bool operator<( const OEffectiveEvent &e ) const; - bool operator<=( const OEffectiveEvent &e ) const; - bool operator==( const OEffectiveEvent &e ) const; - bool operator!=( const OEffectiveEvent &e ) const; - bool operator>( const OEffectiveEvent &e ) const; - bool operator>= ( const OEffectiveEvent &e ) const; - - private: - void deref(); - inline void changeOrModify(); - class Private; - Private* priv; - struct Data; - Data* data; - -}; - } #endif |