summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/todoevent.cpp57
-rw-r--r--libopie/todoevent.h29
2 files changed, 86 insertions, 0 deletions
diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp
index b35ac9d..f744550 100644
--- a/libopie/todoevent.cpp
+++ b/libopie/todoevent.cpp
@@ -23,183 +23,240 @@ ToDoEvent::ToDoEvent(bool completed, int priority,
23 const QString &description, 23 const QString &description,
24 ushort progress, 24 ushort progress,
25 bool hasDate, QDate date, int uid ) 25 bool hasDate, QDate date, int uid )
26{ 26{
27 m_date = date; 27 m_date = date;
28 m_isCompleted = completed; 28 m_isCompleted = completed;
29 m_hasDate = hasDate; 29 m_hasDate = hasDate;
30 m_priority = priority; 30 m_priority = priority;
31 m_category = category; 31 m_category = category;
32 m_sum = summary; 32 m_sum = summary;
33 m_prog = progress; 33 m_prog = progress;
34 m_desc = Qtopia::simplifyMultiLineSpace(description ); 34 m_desc = Qtopia::simplifyMultiLineSpace(description );
35 if (uid == -1 ) { 35 if (uid == -1 ) {
36 Qtopia::UidGen *uidgen = new Qtopia::UidGen(); 36 Qtopia::UidGen *uidgen = new Qtopia::UidGen();
37 uid = uidgen->generate(); 37 uid = uidgen->generate();
38 delete uidgen; 38 delete uidgen;
39 }// generate the ids 39 }// generate the ids
40 m_uid = uid; 40 m_uid = uid;
41} 41}
42QArray<int> ToDoEvent::categories()const 42QArray<int> ToDoEvent::categories()const
43{ 43{
44 QArray<int> array(m_category.count() ); // currently the datebook can be only in one category 44 QArray<int> array(m_category.count() ); // currently the datebook can be only in one category
45 array = Qtopia::Record::idsFromString( m_category.join(";") ); 45 array = Qtopia::Record::idsFromString( m_category.join(";") );
46 return array; 46 return array;
47} 47}
48bool ToDoEvent::match( const QRegExp &regExp )const 48bool ToDoEvent::match( const QRegExp &regExp )const
49{ 49{
50 if( QString::number( m_priority ).find( regExp ) != -1 ){ 50 if( QString::number( m_priority ).find( regExp ) != -1 ){
51 return true; 51 return true;
52 }else if( m_hasDate && m_date.toString().find( regExp) != -1 ){ 52 }else if( m_hasDate && m_date.toString().find( regExp) != -1 ){
53 return true; 53 return true;
54 }else if(m_desc.find( regExp ) != -1 ){ 54 }else if(m_desc.find( regExp ) != -1 ){
55 return true; 55 return true;
56 } 56 }
57 return false; 57 return false;
58} 58}
59bool ToDoEvent::isCompleted() const 59bool ToDoEvent::isCompleted() const
60{ 60{
61 return m_isCompleted; 61 return m_isCompleted;
62} 62}
63bool ToDoEvent::hasDate() const 63bool ToDoEvent::hasDate() const
64{ 64{
65 return m_hasDate; 65 return m_hasDate;
66} 66}
67int ToDoEvent::priority()const 67int ToDoEvent::priority()const
68{ 68{
69 return m_priority; 69 return m_priority;
70} 70}
71QStringList ToDoEvent::allCategories()const 71QStringList ToDoEvent::allCategories()const
72{ 72{
73 return m_category; 73 return m_category;
74} 74}
75QString ToDoEvent::extra(const QString& )const 75QString ToDoEvent::extra(const QString& )const
76{ 76{
77 return QString::null; 77 return QString::null;
78} 78}
79QString ToDoEvent::summary() const 79QString ToDoEvent::summary() const
80{ 80{
81 return m_sum; 81 return m_sum;
82} 82}
83ushort ToDoEvent::progress() const 83ushort ToDoEvent::progress() const
84{ 84{
85 return m_prog; 85 return m_prog;
86} 86}
87QStringList ToDoEvent::relatedApps() const
88{
89 QStringList list;
90 QMap<QString, QArray<int> >::ConstIterator it;
91 for ( it = m_relations.begin(); it != m_relations.end(); ++it ) {
92 list << it.key();
93 }
94 return list;
95}
96QArray<int> ToDoEvent::relations( const QString& app)const
97{
98 QArray<int> tmp;
99 QMap<QString, QArray<int> >::ConstIterator it;
100 it = m_relations.find( app);
101 if ( it != m_relations.end() )
102 tmp = it.data();
103 return tmp;
104}
87void ToDoEvent::insertCategory(const QString &str ) 105void ToDoEvent::insertCategory(const QString &str )
88{ 106{
89 m_category.append( str ); 107 m_category.append( str );
90} 108}
91void ToDoEvent::clearCategories() 109void ToDoEvent::clearCategories()
92{ 110{
93 m_category.clear(); 111 m_category.clear();
94} 112}
95void ToDoEvent::setCategories(const QStringList &list ) 113void ToDoEvent::setCategories(const QStringList &list )
96{ 114{
97 m_category = list; 115 m_category = list;
98} 116}
99QDate ToDoEvent::date()const 117QDate ToDoEvent::date()const
100{ 118{
101 return m_date; 119 return m_date;
102} 120}
103 121
104QString ToDoEvent::description()const 122QString ToDoEvent::description()const
105{ 123{
106 return m_desc; 124 return m_desc;
107} 125}
108void ToDoEvent::setCompleted( bool completed ) 126void ToDoEvent::setCompleted( bool completed )
109{ 127{
110 m_isCompleted = completed; 128 m_isCompleted = completed;
111} 129}
112void ToDoEvent::setHasDate( bool hasDate ) 130void ToDoEvent::setHasDate( bool hasDate )
113{ 131{
114 m_hasDate = hasDate; 132 m_hasDate = hasDate;
115} 133}
116void ToDoEvent::setDescription(const QString &desc ) 134void ToDoEvent::setDescription(const QString &desc )
117{ 135{
118 m_desc = Qtopia::simplifyMultiLineSpace(desc ); 136 m_desc = Qtopia::simplifyMultiLineSpace(desc );
119} 137}
120void ToDoEvent::setExtra( const QString&, const QString& ) 138void ToDoEvent::setExtra( const QString&, const QString& )
121{ 139{
122 140
123} 141}
124void ToDoEvent::setSummary( const QString& sum ) 142void ToDoEvent::setSummary( const QString& sum )
125{ 143{
126 m_sum = sum; 144 m_sum = sum;
127} 145}
128void ToDoEvent::setCategory( const QString &cat ) 146void ToDoEvent::setCategory( const QString &cat )
129{ 147{
130 qWarning("setCategory %s", cat.latin1() ); 148 qWarning("setCategory %s", cat.latin1() );
131 m_category.clear(); 149 m_category.clear();
132 m_category << cat; 150 m_category << cat;
133} 151}
134void ToDoEvent::setPriority(int prio ) 152void ToDoEvent::setPriority(int prio )
135{ 153{
136 m_priority = prio; 154 m_priority = prio;
137} 155}
138void ToDoEvent::setDate( QDate date ) 156void ToDoEvent::setDate( QDate date )
139{ 157{
140 m_date = date; 158 m_date = date;
141} 159}
160void ToDoEvent::addRelated( const QString &app, int id )
161{
162 QMap<QString, QArray<int> >::Iterator it;
163 QArray<int> tmp;
164 it = m_relations.find( app );
165 if ( it == m_relations.end() ) {
166 tmp.resize(1 );
167 tmp[0] = id;
168 }else{
169 tmp = it.data();
170 tmp.resize( tmp.size() + 1 );
171 tmp[tmp.size() - 1] = id;
172 }
173 m_relations.replace( app, tmp );
174}
175void ToDoEvent::addRelated(const QString& app, QArray<int> ids )
176{
177 QMap<QString, QArray<int> >::Iterator it;
178 QArray<int> tmp;
179 it = m_relations.find( app);
180 if ( it == m_relations.end() ) { // not there
181 /** tmp.resize( ids.size() ); stupid??
182 */
183 tmp = ids;
184 }else{
185 tmp = it.data();
186 int offset = tmp.size()-1;
187 tmp.resize( tmp.size() + ids.size() );
188 for (uint i = 0; i < ids.size(); i++ ) {
189 tmp[offset+i] = ids[i];
190 }
191
192 }
193 m_relations.replace( app, tmp );
194}
195void ToDoEvent::clearRelated( const QString& app )
196{
197 m_relations.remove( app );
198}
142bool ToDoEvent::isOverdue( ) 199bool ToDoEvent::isOverdue( )
143{ 200{
144 if( m_hasDate ) 201 if( m_hasDate )
145 return QDate::currentDate() > m_date; 202 return QDate::currentDate() > m_date;
146 return false; 203 return false;
147} 204}
148void ToDoEvent::setProgress(ushort progress ) 205void ToDoEvent::setProgress(ushort progress )
149{ 206{
150 m_prog = progress; 207 m_prog = progress;
151} 208}
152/*! 209/*!
153 Returns a richt text string 210 Returns a richt text string
154*/ 211*/
155QString ToDoEvent::richText() const 212QString ToDoEvent::richText() const
156{ 213{
157 QString text; 214 QString text;
158 QStringList catlist; 215 QStringList catlist;
159 216
160 // Description of the todo 217 // Description of the todo
161 if ( !description().isEmpty() ){ 218 if ( !description().isEmpty() ){
162 text += "<b>" + QObject::tr( "Summary:") + "</b><br>"; 219 text += "<b>" + QObject::tr( "Summary:") + "</b><br>";
163 text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 220 text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
164 text += "<b>" + QObject::tr( "Description:" ) + "</b><br>"; 221 text += "<b>" + QObject::tr( "Description:" ) + "</b><br>";
165 text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br><br><br>"; 222 text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br><br><br>";
166 } 223 }
167 text += "<b>" + QObject::tr( "Priority:") +" </b>" 224 text += "<b>" + QObject::tr( "Priority:") +" </b>"
168 + QString::number( priority() ) + " <br>"; 225 + QString::number( priority() ) + " <br>";
169 text += "<b>" + QObject::tr( "Progress:") + " </b>" 226 text += "<b>" + QObject::tr( "Progress:") + " </b>"
170 + QString::number( progress() ) + " %<br>"; 227 + QString::number( progress() ) + " %<br>";
171 if (hasDate() ){ 228 if (hasDate() ){
172 text += "<b>" + QObject::tr( "Deadline:") + " </b>"; 229 text += "<b>" + QObject::tr( "Deadline:") + " </b>";
173 text += date().toString(); 230 text += date().toString();
174 text += "<br>"; 231 text += "<br>";
175 } 232 }
176 233
177 // Open database of all categories and get the list of 234 // Open database of all categories and get the list of
178 // the categories this todoevent belongs to. 235 // the categories this todoevent belongs to.
179 // Then print them... 236 // Then print them...
180 // I am not sure whether there is no better way doing this !? 237 // I am not sure whether there is no better way doing this !?
181 Categories catdb; 238 Categories catdb;
182 bool firstloop = true; 239 bool firstloop = true;
183 catdb.load( categoryFileName() ); 240 catdb.load( categoryFileName() );
184 catlist = allCategories(); 241 catlist = allCategories();
185 242
186 text += "<b>" + QObject::tr( "Category:") + "</b> "; 243 text += "<b>" + QObject::tr( "Category:") + "</b> ";
187 for ( QStringList::Iterator it = catlist.begin(); it != catlist.end(); ++it ) { 244 for ( QStringList::Iterator it = catlist.begin(); it != catlist.end(); ++it ) {
188 if (!firstloop){ 245 if (!firstloop){
189 text += ", "; 246 text += ", ";
190 } 247 }
191 firstloop = false; 248 firstloop = false;
192 text += catdb.label ("todo", (*it).toInt()); 249 text += catdb.label ("todo", (*it).toInt());
193 } 250 }
194 text += "<br>"; 251 text += "<br>";
195 return text; 252 return text;
196} 253}
197 254
198bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{ 255bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{
199 if( !hasDate() && !toDoEvent.hasDate() ) return true; 256 if( !hasDate() && !toDoEvent.hasDate() ) return true;
200 if( !hasDate() && toDoEvent.hasDate() ) return false; 257 if( !hasDate() && toDoEvent.hasDate() ) return false;
201 if( hasDate() && toDoEvent.hasDate() ){ 258 if( hasDate() && toDoEvent.hasDate() ){
202 if( date() == toDoEvent.date() ){ // let's the priority decide 259 if( date() == toDoEvent.date() ){ // let's the priority decide
203 return priority() < toDoEvent.priority(); 260 return priority() < toDoEvent.priority();
204 }else{ 261 }else{
205 return date() < toDoEvent.date(); 262 return date() < toDoEvent.date();
diff --git a/libopie/todoevent.h b/libopie/todoevent.h
index de4623f..b55a39b 100644
--- a/libopie/todoevent.h
+++ b/libopie/todoevent.h
@@ -1,162 +1,191 @@
1 1
2#ifndef todoevent_h 2#ifndef todoevent_h
3#define todoevent_h 3#define todoevent_h
4 4
5
6#include <qarray.h>
5#include <qmap.h> 7#include <qmap.h>
6#include <qregexp.h> 8#include <qregexp.h>
7#include <qstringlist.h> 9#include <qstringlist.h>
8#include <qdatetime.h> 10#include <qdatetime.h>
9 11
12
10class ToDoEvent { 13class ToDoEvent {
11 friend class ToDoDB; 14 friend class ToDoDB;
12 public: 15 public:
13 // priorities from Very low to very high 16 // priorities from Very low to very high
14 enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW }; 17 enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW };
15 /* Constructs a new ToDoEvent 18 /* Constructs a new ToDoEvent
16 @param completed Is the TodoEvent completed 19 @param completed Is the TodoEvent completed
17 @param priority What is the priority of this ToDoEvent 20 @param priority What is the priority of this ToDoEvent
18 @param category Which category does it belong( uid ) 21 @param category Which category does it belong( uid )
19 @param summary A small summary of the todo 22 @param summary A small summary of the todo
20 @param description What is this ToDoEvent about 23 @param description What is this ToDoEvent about
21 @param hasDate Does this Event got a deadline 24 @param hasDate Does this Event got a deadline
22 @param date what is the deadline? 25 @param date what is the deadline?
23 @param uid what is the UUID of this Event 26 @param uid what is the UUID of this Event
24 **/ 27 **/
25 ToDoEvent( bool completed = false, int priority = NORMAL, 28 ToDoEvent( bool completed = false, int priority = NORMAL,
26 const QStringList &category = QStringList(), 29 const QStringList &category = QStringList(),
27 const QString &summary = QString::null , 30 const QString &summary = QString::null ,
28 const QString &description = QString::null, 31 const QString &description = QString::null,
29 ushort progress = 0, 32 ushort progress = 0,
30 bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 ); 33 bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 );
31 /* Copy c'tor 34 /* Copy c'tor
32 35
33 **/ 36 **/
34 ToDoEvent(const ToDoEvent & ); 37 ToDoEvent(const ToDoEvent & );
35 38
36 /* 39 /*
37 Is this event completed? 40 Is this event completed?
38 **/ 41 **/
39 bool isCompleted() const; 42 bool isCompleted() const;
40 43
41 /* 44 /*
42 Does this Event have a deadline 45 Does this Event have a deadline
43 **/ 46 **/
44 bool hasDate() const; 47 bool hasDate() const;
45 48
46 /* 49 /*
47 What is the priority? 50 What is the priority?
48 **/ 51 **/
49 int priority()const ; 52 int priority()const ;
50 53
51 /** 54 /**
52 * progress as ushort 0, 20, 40, 60, 80 or 100% 55 * progress as ushort 0, 20, 40, 60, 80 or 100%
53 */ 56 */
54 ushort progress() const; 57 ushort progress() const;
55 /* 58 /*
56 All category numbers as QString in a List 59 All category numbers as QString in a List
57 **/ 60 **/
58 QStringList allCategories()const; 61 QStringList allCategories()const;
59 62
60 /* 63 /*
61 * Same as above but with QArray<int> 64 * Same as above but with QArray<int>
62 */ 65 */
63 QArray<int> categories() const; 66 QArray<int> categories() const;
64 67
65 /** 68 /**
66 * The end Date 69 * The end Date
67 */ 70 */
68 QDate date()const; 71 QDate date()const;
69 72
70 /** 73 /**
71 * The description of the todo 74 * The description of the todo
72 */ 75 */
73 QString description()const; 76 QString description()const;
74 77
75 /** 78 /**
76 * A small summary of the todo 79 * A small summary of the todo
77 */ 80 */
78 QString summary() const; 81 QString summary() const;
79 82
80 /** 83 /**
81 * Return this todoevent in a RichText formatted QString 84 * Return this todoevent in a RichText formatted QString
82 */ 85 */
83 QString richText() const; 86 QString richText() const;
84 87
85 /** 88 /**
86 * Returns the UID of the Todo 89 * Returns the UID of the Todo
87 */ 90 */
88 int uid()const { return m_uid;}; 91 int uid()const { return m_uid;};
89 92
90 93
91 QString extra(const QString& )const; 94 QString extra(const QString& )const;
95
96 /**
97 * returns a list of apps which have related items
98 */
99 QStringList relatedApps()const;
100
101 /**
102 * returns all relations for one app
103 */
104 QArray<int> relations( const QString& app )const;
92 /** 105 /**
93 * Set if this Todo is completed 106 * Set if this Todo is completed
94 */ 107 */
95 void setCompleted(bool completed ); 108 void setCompleted(bool completed );
96 109
97 /** 110 /**
98 * set if this todo got an end data 111 * set if this todo got an end data
99 */ 112 */
100 void setHasDate( bool hasDate ); 113 void setHasDate( bool hasDate );
101 // if the category doesn't exist we will create it 114 // if the category doesn't exist we will create it
102 // this sets the the Category after this call category will be the only category 115 // this sets the the Category after this call category will be the only category
103 void setCategory( const QString &category ); 116 void setCategory( const QString &category );
104 // adds a category to the Categories of this event 117 // adds a category to the Categories of this event
105 void insertCategory(const QString &category ); 118 void insertCategory(const QString &category );
106 119
107 /** 120 /**
108 * Removes this event from all categories 121 * Removes this event from all categories
109 */ 122 */
110 void clearCategories(); 123 void clearCategories();
111 124
112 /** 125 /**
113 * This todo belongs to xxx categories 126 * This todo belongs to xxx categories
114 */ 127 */
115 void setCategories(const QStringList& ); 128 void setCategories(const QStringList& );
116 129
117 /** 130 /**
118 * Set the priority of the Todo 131 * Set the priority of the Todo
119 */ 132 */
120 void setPriority(int priority ); 133 void setPriority(int priority );
121 134
122 /** 135 /**
123 * Set the progress. 136 * Set the progress.
124 */ 137 */
125 void setProgress( ushort progress ); 138 void setProgress( ushort progress );
126 139
127 /** 140 /**
141 * add related function it replaces too ;)
142 */
143 void addRelated( const QString& app, int id );
144
145 /**
146 * add related
147 */
148 void addRelated( const QString& app, QArray<int> ids );
149
150 /**
151 * clear relations for one app
152 */
153 void clearRelated(const QString& app);
154
155 /**
128 * set the end date 156 * set the end date
129 */ 157 */
130 void setDate( QDate date ); 158 void setDate( QDate date );
131 void setDescription(const QString& ); 159 void setDescription(const QString& );
132 void setSummary(const QString& ); 160 void setSummary(const QString& );
133 void setExtra( const QString&, const QString& ); 161 void setExtra( const QString&, const QString& );
134 bool isOverdue(); 162 bool isOverdue();
135 163
136 bool match( const QRegExp &r )const; 164 bool match( const QRegExp &r )const;
137 165
138 void setUid(int id) {m_uid = id; }; 166 void setUid(int id) {m_uid = id; };
139 bool operator<(const ToDoEvent &toDoEvent )const; 167 bool operator<(const ToDoEvent &toDoEvent )const;
140 bool operator<=(const ToDoEvent &toDoEvent )const; 168 bool operator<=(const ToDoEvent &toDoEvent )const;
141 bool operator!=(const ToDoEvent &toDoEvent )const { return !(*this == toDoEvent); }; 169 bool operator!=(const ToDoEvent &toDoEvent )const { return !(*this == toDoEvent); };
142 bool operator>(const ToDoEvent &toDoEvent )const; 170 bool operator>(const ToDoEvent &toDoEvent )const;
143 bool operator>=(const ToDoEvent &toDoEvent)const; 171 bool operator>=(const ToDoEvent &toDoEvent)const;
144 bool operator==(const ToDoEvent &toDoEvent )const; 172 bool operator==(const ToDoEvent &toDoEvent )const;
145 ToDoEvent &operator=(const ToDoEvent &toDoEvent ); 173 ToDoEvent &operator=(const ToDoEvent &toDoEvent );
146 private: 174 private:
147 class ToDoEventPrivate; 175 class ToDoEventPrivate;
148 ToDoEventPrivate *d; 176 ToDoEventPrivate *d;
149 QDate m_date; 177 QDate m_date;
150 bool m_isCompleted:1; 178 bool m_isCompleted:1;
151 bool m_hasDate:1; 179 bool m_hasDate:1;
152 int m_priority; 180 int m_priority;
153 QStringList m_category; 181 QStringList m_category;
154 QString m_desc; 182 QString m_desc;
155 QString m_sum; 183 QString m_sum;
156 QMap<QString, QString> m_extra; 184 QMap<QString, QString> m_extra;
185 QMap<QString, QArray<int> > m_relations;
157 int m_uid; 186 int m_uid;
158 ushort m_prog; 187 ushort m_prog;
159}; 188};
160 189
161 190
162#endif 191#endif