-rw-r--r-- | libopie2/opiepim/core/opimrecord.cpp | 26 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimrecord.h | 4 | ||||
-rw-r--r-- | libopie2/opiepim/otodo.cpp | 265 | ||||
-rw-r--r-- | libopie2/opiepim/otodo.h | 26 |
4 files changed, 95 insertions, 226 deletions
diff --git a/libopie2/opiepim/core/opimrecord.cpp b/libopie2/opiepim/core/opimrecord.cpp index 95de1df..d8f73c7 100644 --- a/libopie2/opiepim/core/opimrecord.cpp +++ b/libopie2/opiepim/core/opimrecord.cpp @@ -2,22 +2,24 @@ OPimRecord::OPimRecord( int uid ) : Qtopia::Record() { + setUid( uid ); + /* assign a new UID */ if ( uid == 1 ) assignUid(); } OPimRecord::~OPimRecord() { } -OPimRecord::OPimRecord( OPimRecord& rec ) +OPimRecord::OPimRecord( const OPimRecord& rec ) : Qtopia::Record( rec ) { (*this) = rec; } OPimRecord &OPimRecord::operator=( const OPimRecord& rec) { - /* how do I call the parent copy operator ? */ - setUid( rec.uid() ); - setCategories( rec.categories() ); + Qtopia::Record::operator=( rec ); + m_relations = rec.m_relations; + return *this; } QStringList OPimRecord::categoryNames()const { @@ -25,7 +27,7 @@ QStringList OPimRecord::categoryNames()const { return list; } -void OPimRecord::setCategoryName( const QStringList& ) { +void OPimRecord::setCategoryNames( const QStringList& ) { } void OPimRecord::addCategoryName( const QString& ) { @@ -88,3 +90,17 @@ void OPimRecord::setRelations( const QString& app, QArray<int> ids ) { } m_relations.replace( app, tmp ); } +QString OPimRecord::crossToString()const { + QString str; + QMap<QString, QArray<int> >::ConstIterator it; + for (it = m_relations.begin(); it != m_relations.end(); ++it ) { + QArray<int> id = it.data(); + for ( uint i = 0; i < id.size(); ++i ) { + str += it.key() + "," + QString::number( i ) + ";"; + } + } + str = str.remove( str.length()-1, 1); // strip the ; + //qWarning("IDS " + str ); + + return str; +} diff --git a/libopie2/opiepim/core/opimrecord.h b/libopie2/opiepim/core/opimrecord.h index a0e0413..18112d4 100644 --- a/libopie2/opiepim/core/opimrecord.h +++ b/libopie2/opiepim/core/opimrecord.h @@ -19,7 +19,7 @@ public: /** * copy c'tor */ - OPimRecord( OPimRecord& rec ); + OPimRecord( const OPimRecord& rec ); /** * copy operator @@ -34,7 +34,7 @@ public: /** * set category names they will be resolved */ - void setCategoryName( const QStringList& ); + void setCategoryNames( const QStringList& ); /** * addCategoryName adds a name diff --git a/libopie2/opiepim/otodo.cpp b/libopie2/opiepim/otodo.cpp index d8e0447..3c93838 100644 --- a/libopie2/opiepim/otodo.cpp +++ b/libopie2/opiepim/otodo.cpp @@ -11,14 +11,13 @@ #include <qpe/categories.h> #include <qpe/categoryselect.h> -#include "todoevent.h" -using namespace Opie; -Qtopia::UidGen ToDoEvent::m_gen; +#include "otodo.h" -struct ToDoEvent::ToDoEventData : public QShared { - ToDoEventData() : QShared() { + +struct OTodo::OTodoData : public QShared { + OTodoData() : QShared() { }; QDate date; @@ -29,62 +28,47 @@ struct ToDoEvent::ToDoEventData : public QShared { QString desc; QString sum; QMap<QString, QString> extra; - QMap<QString, QArray<int> > relations; - int uid; ushort prog; bool hasAlarmDateTime :1; QDateTime alarmDateTime; }; -ToDoEvent::ToDoEvent(const ToDoEvent &event ) - : data( event.data ) +OTodo::OTodo(const OTodo &event ) + : OPimRecord( event ), data( event.data ) { data->ref(); //qWarning("ref up"); } -ToDoEvent::~ToDoEvent() { +OTodo::~OTodo() { if ( data->deref() ) { - //qWarning("ToDoEvent::dereffing"); + //qWarning("OTodo::dereffing"); delete data; data = 0l; } } -ToDoEvent::ToDoEvent(bool completed, int priority, +OTodo::OTodo(bool completed, int priority, const QStringList &category, const QString& summary, const QString &description, ushort progress, bool hasDate, QDate date, int uid ) + : OPimRecord( uid ) { - //qWarning("ToDoEventData"); - data = new ToDoEventData; + //qWarning("OTodoData"); + setCategories( idsFromString( category.join(";") ) ); + data = new OTodoData; data->date = date; data->isCompleted = completed; data->hasDate = hasDate; data->priority = priority; - data->category = category; data->sum = summary; data->prog = progress; data->desc = Qtopia::simplifyMultiLineSpace(description ); - if (uid == -1 ) { - uid = m_gen.generate(); - - }// generated the ids - m_gen.store( uid ); - - data->uid = uid; data->hasAlarmDateTime = false; } -QArray<int> ToDoEvent::categories()const -{ - qWarning( "ToDoEvent:cats" + data->category.join(";") ); - QArray<int> array(data->category.count() ); // currently the datebook can be only in one category - array = Qtopia::Record::idsFromString( data->category.join(";") ); - return array; -} -bool ToDoEvent::match( const QRegExp ®Exp )const +bool OTodo::match( const QRegExp ®Exp )const { if( QString::number( data->priority ).find( regExp ) != -1 ){ return true; @@ -92,200 +76,107 @@ bool ToDoEvent::match( const QRegExp ®Exp )const return true; }else if(data->desc.find( regExp ) != -1 ){ return true; + }else if(data->sum.find( regExp ) != -1 ) { + return true; } return false; } -bool ToDoEvent::isCompleted() const +bool OTodo::isCompleted() const { return data->isCompleted; } -bool ToDoEvent::hasDueDate() const +bool OTodo::hasDueDate() const { return data->hasDate; } -bool ToDoEvent::hasAlarmDateTime() const +bool OTodo::hasAlarmDateTime() const { return data->hasAlarmDateTime; } -int ToDoEvent::priority()const +int OTodo::priority()const { return data->priority; } -QStringList ToDoEvent::allCategories()const -{ - return data->category; -} -QString ToDoEvent::extra(const QString& )const -{ - return QString::null; -} -QString ToDoEvent::summary() const +QString OTodo::summary() const { return data->sum; } -ushort ToDoEvent::progress() const +ushort OTodo::progress() const { return data->prog; } -QStringList ToDoEvent::relatedApps() const -{ - QStringList list; - QMap<QString, QArray<int> >::ConstIterator it; - for ( it = data->relations.begin(); it != data->relations.end(); ++it ) { - list << it.key(); - } - return list; -} -QArray<int> ToDoEvent::relations( const QString& app)const -{ - QArray<int> tmp; - QMap<QString, QArray<int> >::ConstIterator it; - it = data->relations.find( app); - if ( it != data->relations.end() ) - tmp = it.data(); - return tmp; -} -void ToDoEvent::insertCategory(const QString &str ) -{ - changeOrModify(); - qWarning("insert category;" + str ); - data->category.append( str ); -} -void ToDoEvent::clearCategories() -{ - changeOrModify(); - data->category.clear(); -} -void ToDoEvent::setCategories(const QStringList &list ) -{ - changeOrModify(); - qWarning("set categories" + list.join(";") ); - data->category = list; -} -QDate ToDoEvent::dueDate()const +QDate OTodo::dueDate()const { return data->date; } -QDateTime ToDoEvent::alarmDateTime() const +QDateTime OTodo::alarmDateTime() const { return data->alarmDateTime; } -QString ToDoEvent::description()const +QString OTodo::description()const { return data->desc; } -void ToDoEvent::setCompleted( bool completed ) +void OTodo::setCompleted( bool completed ) { changeOrModify(); data->isCompleted = completed; } -void ToDoEvent::setHasDueDate( bool hasDate ) +void OTodo::setHasDueDate( bool hasDate ) { changeOrModify(); data->hasDate = hasDate; } -void ToDoEvent::setHasAlarmDateTime( bool hasAlarmDateTime ) +void OTodo::setHasAlarmDateTime( bool hasAlarmDateTime ) { changeOrModify(); data->hasAlarmDateTime = hasAlarmDateTime; } -void ToDoEvent::setDescription(const QString &desc ) +void OTodo::setDescription(const QString &desc ) { changeOrModify(); data->desc = Qtopia::simplifyMultiLineSpace(desc ); } -void ToDoEvent::setExtra( const QString&, const QString& ) -{ - -} -void ToDoEvent::setSummary( const QString& sum ) +void OTodo::setSummary( const QString& sum ) { changeOrModify(); data->sum = sum; } -void ToDoEvent::setCategory( const QString &cat ) -{ - changeOrModify(); - //qWarning("setCategory %s", cat.latin1() ); - data->category.clear(); - data->category << cat; -} -void ToDoEvent::setPriority(int prio ) +void OTodo::setPriority(int prio ) { changeOrModify(); data->priority = prio; } -void ToDoEvent::setDueDate( QDate date ) +void OTodo::setDueDate( QDate date ) { changeOrModify(); data->date = date; } -void ToDoEvent::setAlarmDateTime( const QDateTime& alarm ) +void OTodo::setAlarmDateTime( const QDateTime& alarm ) { changeOrModify(); data->alarmDateTime = alarm; } -void ToDoEvent::addRelated( const QString &app, int id ) -{ - changeOrModify(); - - QMap<QString, QArray<int> >::Iterator it; - QArray<int> tmp; - it = data->relations.find( app ); - if ( it == data->relations.end() ) { - tmp.resize(1 ); - tmp[0] = id; - }else{ - tmp = it.data(); - tmp.resize( tmp.size() + 1 ); - tmp[tmp.size() - 1] = id; - } - data->relations.replace( app, tmp ); -} -void ToDoEvent::addRelated(const QString& app, QArray<int> ids ) -{ - changeOrModify(); - - QMap<QString, QArray<int> >::Iterator it; - QArray<int> tmp; - it = data->relations.find( app); - if ( it == data->relations.end() ) { // not there - /** tmp.resize( ids.size() ); stupid?? - */ - tmp = ids; - }else{ - tmp = it.data(); - int offset = tmp.size()-1; - tmp.resize( tmp.size() + ids.size() ); - for (uint i = 0; i < ids.size(); i++ ) { - tmp[offset+i] = ids[i]; - } - - } - data->relations.replace( app, tmp ); -} -void ToDoEvent::clearRelated( const QString& app ) -{ - changeOrModify(); - data->relations.remove( app ); -} -bool ToDoEvent::isOverdue( ) +bool OTodo::isOverdue( ) { if( data->hasDate ) return QDate::currentDate() > data->date; return false; } -void ToDoEvent::setProgress(ushort progress ) +void OTodo::setProgress(ushort progress ) { changeOrModify(); data->prog = progress; } +QString OTodo::toShortText() const { + return summary(); +} /*! Returns a richt text string */ -QString ToDoEvent::richText() const +QString OTodo::toRichText() const { QString text; QStringList catlist; @@ -316,28 +207,14 @@ QString ToDoEvent::richText() const text += "<br>"; } - // Open database of all categories and get the list of - // the categories this todoevent belongs to. - // Then print them... - // I am not sure whether there is no better way doing this !? - Categories catdb; - bool firstloop = true; - catdb.load( categoryFileName() ); - catlist = allCategories(); - text += "<b>" + QObject::tr( "Category:") + "</b> "; - for ( QStringList::Iterator it = catlist.begin(); it != catlist.end(); ++it ) { - if (!firstloop){ - text += ", "; - } - firstloop = false; - text += catdb.label ("todo", (*it).toInt()); - } + text += categoryNames().join(", "); text += "<br>"; + return text; } -bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{ +bool OTodo::operator<( const OTodo &toDoEvent )const{ if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; if( hasDueDate() && toDoEvent.hasDueDate() ){ @@ -349,7 +226,7 @@ bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{ } return false; } -bool ToDoEvent::operator<=(const ToDoEvent &toDoEvent )const +bool OTodo::operator<=(const OTodo &toDoEvent )const { if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; if( !hasDueDate() && toDoEvent.hasDueDate() ) return true; @@ -362,7 +239,7 @@ bool ToDoEvent::operator<=(const ToDoEvent &toDoEvent )const } return true; } -bool ToDoEvent::operator>(const ToDoEvent &toDoEvent )const +bool OTodo::operator>(const OTodo &toDoEvent )const { if( !hasDueDate() && !toDoEvent.hasDueDate() ) return false; if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; @@ -375,7 +252,7 @@ bool ToDoEvent::operator>(const ToDoEvent &toDoEvent )const } return false; } -bool ToDoEvent::operator>=(const ToDoEvent &toDoEvent )const +bool OTodo::operator>=(const OTodo &toDoEvent )const { if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; @@ -388,7 +265,7 @@ bool ToDoEvent::operator>=(const ToDoEvent &toDoEvent )const } return true; } -bool ToDoEvent::operator==(const ToDoEvent &toDoEvent )const +bool OTodo::operator==(const OTodo &toDoEvent )const { if( data->priority == toDoEvent.data->priority && data->priority == toDoEvent.data->prog && @@ -404,7 +281,7 @@ bool ToDoEvent::operator==(const ToDoEvent &toDoEvent )const return false; } -void ToDoEvent::deref() { +void OTodo::deref() { //qWarning("deref in ToDoEvent"); if ( data->deref() ) { @@ -413,23 +290,21 @@ void ToDoEvent::deref() { d= 0; } } -ToDoEvent &ToDoEvent::operator=(const ToDoEvent &item ) +OTodo &OTodo::operator=(const OTodo &item ) { + OPimRecord::operator=( item ); //qWarning("operator= ref "); item.data->ref(); deref(); - data = item.data; - - return *this; } -QMap<int, QString> ToDoEvent::toMap() const { +QMap<int, QString> OTodo::toMap() const { QMap<int, QString> map; - map.insert( Uid, QString::number( data->uid ) ); - map.insert( Category, data->category.join(";") ); + map.insert( Uid, QString::number( uid() ) ); + map.insert( Category, idsToString( categories() ) ); map.insert( HasDate, QString::number( data->hasDate ) ); map.insert( Completed, QString::number( data->isCompleted ) ); map.insert( Description, data->desc ); @@ -446,32 +321,7 @@ QMap<int, QString> ToDoEvent::toMap() const { return map; } - -QString ToDoEvent::crossToString()const { - QString str; - QMap<QString, QArray<int> >::ConstIterator it; - for (it = data->relations.begin(); it != data->relations.end(); ++it ) { - QArray<int> id = it.data(); - for ( uint i = 0; i < id.size(); ++i ) { - str += it.key() + "," + QString::number( i ) + ";"; - } - } - str = str.remove( str.length()-1, 1); // strip the ; - //qWarning("IDS " + str ); - - return str; -} -int ToDoEvent::uid()const { - return data->uid; -} -void ToDoEvent::setUid( int id ) { - if ( id == -1 ) - id = m_gen.generate(); - m_gen.store(id ); - changeOrModify(); - data->uid = id; -} -QMap<QString, QString> ToDoEvent::extras()const { +QMap<QString, QString> OTodo::toExtraMap()const { return data->extra; } /** @@ -479,26 +329,23 @@ QMap<QString, QString> ToDoEvent::extras()const { * creates a new QShared Object or it can modify it * right in place */ -void ToDoEvent::changeOrModify() { +void OTodo::changeOrModify() { if ( data->count != 1 ) { //qWarning("changeOrModify"); data->deref(); - ToDoEventData* d2 = new ToDoEventData(); + OTodoData* d2 = new OTodoData(); copy(data, d2 ); data = d2; } } -void ToDoEvent::copy( ToDoEventData* src, ToDoEventData* dest ) { +void OTodo::copy( OTodoData* src, OTodoData* dest ) { dest->date = src->date; dest->isCompleted = src->isCompleted; dest->hasDate = src->hasDate; dest->priority = src->priority; - dest->category = src->category; dest->desc = src->desc; dest->sum = src->sum; dest->extra = src->extra; - dest->relations = src->relations; - dest->uid = src->uid; dest->prog = src->prog; dest->hasAlarmDateTime = src->hasAlarmDateTime; dest->alarmDateTime = src->alarmDateTime; diff --git a/libopie2/opiepim/otodo.h b/libopie2/opiepim/otodo.h index 429108a..e1729db 100644 --- a/libopie2/opiepim/otodo.h +++ b/libopie2/opiepim/otodo.h @@ -18,7 +18,7 @@ class OTodo : public OPimRecord { public: - typedef QValueList<ToDoEvent> ValueList; + typedef QValueList<OTodo> ValueList; enum RecordFields { Uid = Qtopia::UID_ID, Category = Qtopia::CATEGORY_ID, @@ -118,6 +118,13 @@ public: */ QString toRichText() const; + /** + * reimplementation + */ + QString type()const; + QString toShortText()const; + QMap<QString, QString> toExtraMap()const; + QString recordField(int id )const; /** * returns a list of apps which have related items @@ -183,23 +190,22 @@ public: bool operator>(const OTodo &toDoEvent )const; bool operator>=(const OTodo &toDoEvent)const; bool operator==(const OTodo &toDoEvent )const; - ToDoEvent &operator=(const OTodo &toDoEvent ); + OTodo &operator=(const OTodo &toDoEvent ); private: class OTodoPrivate; - struct OTodoEventData; + struct OTodoData; void deref(); void changeOrModify(); void copy( OTodoData* src, OTodoData* dest ); - ToDoEventPrivate *d; - ToDoEventData *data; + OTodoPrivate *d; + OTodoData *data; - static Qtopia::UidGen m_gen; -}; - inline bool ToDoEvent::operator!=(const ToDoEvent &toDoEvent )const { - return !(*this == toDoEvent); - } }; +inline bool OTodo::operator!=(const OTodo &toDoEvent )const { + return !(*this == toDoEvent); +} + #endif |