summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-09 21:20:36 (UTC)
committer zautrix <zautrix>2005-04-09 21:20:36 (UTC)
commit54f5fe5e6f4909109edf915513c02f7af3e7bb2d (patch) (unidiff)
tree66c7bcdd8ce6dcbbb6710220c1c3503c83c33d3b
parentae58b2fe29fcd8b3690dcbb6d64976674f6294e0 (diff)
downloadkdepimpi-54f5fe5e6f4909109edf915513c02f7af3e7bb2d.zip
kdepimpi-54f5fe5e6f4909109edf915513c02f7af3e7bb2d.tar.gz
kdepimpi-54f5fe5e6f4909109edf915513c02f7af3e7bb2d.tar.bz2
fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/todo.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index c008fe1..8794f7a 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -1,217 +1,230 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <kglobalsettings.h> 22#include <kglobalsettings.h>
23#include <klocale.h> 23#include <klocale.h>
24#include <kdebug.h> 24#include <kdebug.h>
25#include <qregexp.h> 25#include <qregexp.h>
26 26
27#include "todo.h" 27#include "todo.h"
28 28
29using namespace KCal; 29using namespace KCal;
30 30
31Todo::Todo(): Incidence() 31Todo::Todo(): Incidence()
32{ 32{
33// mStatus = TENTATIVE; 33// mStatus = TENTATIVE;
34 34
35 mHasDueDate = false; 35 mHasDueDate = false;
36 setHasStartDate( false ); 36 setHasStartDate( false );
37 mCompleted = getEvenTime(QDateTime::currentDateTime()); 37 mCompleted = getEvenTime(QDateTime::currentDateTime());
38 mHasCompletedDate = false; 38 mHasCompletedDate = false;
39 mPercentComplete = 0; 39 mPercentComplete = 0;
40 mRunning = false; 40 mRunning = false;
41 mRunSaveTimer = 0; 41 mRunSaveTimer = 0;
42} 42}
43 43
44Todo::Todo(const Todo &t) : Incidence(t) 44Todo::Todo(const Todo &t) : Incidence(t)
45{ 45{
46 mDtDue = t.mDtDue; 46 mDtDue = t.mDtDue;
47 mHasDueDate = t.mHasDueDate; 47 mHasDueDate = t.mHasDueDate;
48 mCompleted = t.mCompleted; 48 mCompleted = t.mCompleted;
49 mHasCompletedDate = t.mHasCompletedDate; 49 mHasCompletedDate = t.mHasCompletedDate;
50 mPercentComplete = t.mPercentComplete; 50 mPercentComplete = t.mPercentComplete;
51 mRunning = false; 51 mRunning = false;
52 mRunSaveTimer = 0; 52 mRunSaveTimer = 0;
53} 53}
54 54
55Todo::~Todo() 55Todo::~Todo()
56{ 56{
57 setRunning( false ); 57 setRunning( false );
58} 58}
59 59
60void Todo::setRunning( bool run ) 60void Todo::setRunning( bool run )
61{ 61{
62 if ( run == mRunning ) 62 if ( run == mRunning )
63 return; 63 return;
64 if ( !mRunSaveTimer ) { 64 if ( !mRunSaveTimer ) {
65 mRunSaveTimer = new QTimer ( this ); 65 mRunSaveTimer = new QTimer ( this );
66 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) ); 66 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) );
67 } 67 }
68 mRunning = run; 68 mRunning = run;
69 if ( mRunning ) { 69 if ( mRunning ) {
70 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min 70 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min
71 mRunStart = QDateTime::currentDateTime(); 71 mRunStart = QDateTime::currentDateTime();
72 } else { 72 } else {
73 mRunSaveTimer->stop(); 73 mRunSaveTimer->stop();
74 saveRunningInfoToFile(); 74 saveRunningInfoToFile();
75 } 75 }
76} 76}
77 77
78void Todo::saveRunningInfoToFile() 78void Todo::saveRunningInfoToFile()
79{ 79{
80 qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1()); 80 qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1());
81 81
82 QString dir = KGlobalSettings::timeTrackerDir(); 82 QString dir = KGlobalSettings::timeTrackerDir();
83 qDebug("%s ", dir.latin1()); 83 qDebug("%s ", dir.latin1());
84 QString file = "%1-%2-%3-%4-%5-%6-%7.tt"; 84 QString file = "%1-%2-%3-%4-%5-%6-%7.tt";
85 85
86 file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 ).arg( mRunStart.time().msec(), 3 ); 86 file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 ).arg( mRunStart.time().msec(), 3 );
87 file.replace ( QRegExp (" "), "0" ); 87 file.replace ( QRegExp (" "), "0" );
88 file = dir +"/" +file; 88 file = dir +"/" +file;
89 qDebug("%s ", file.latin1()); 89 qDebug("%s ", file.latin1());
90 QStringList dataList;
91
92 //Summary
93 //Category
94 //CategoryColor
95 //StartRuntime
96 //Runtime
97 //Due
98 //Start
99 //Prio
100 //Erledigt
101 //Uid
102 //Parents uids
90 103
91 104
92 105
93} 106}
94 107
95int Todo::runTime() 108int Todo::runTime()
96{ 109{
97 if ( !mRunning ) 110 if ( !mRunning )
98 return 0; 111 return 0;
99 return mRunStart.secsTo( QDateTime::currentDateTime() ); 112 return mRunStart.secsTo( QDateTime::currentDateTime() );
100} 113}
101bool Todo::hasRunningSub() 114bool Todo::hasRunningSub()
102{ 115{
103 if ( mRunning ) 116 if ( mRunning )
104 return true; 117 return true;
105 Incidence *aTodo; 118 Incidence *aTodo;
106 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) { 119 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) {
107 if ( ((Todo*)aTodo)->hasRunningSub() ) 120 if ( ((Todo*)aTodo)->hasRunningSub() )
108 return true; 121 return true;
109 } 122 }
110 return false; 123 return false;
111} 124}
112Incidence *Todo::clone() 125Incidence *Todo::clone()
113{ 126{
114 return new Todo(*this); 127 return new Todo(*this);
115} 128}
116 129
117bool Todo::contains ( Todo* from ) 130bool Todo::contains ( Todo* from )
118{ 131{
119 132
120 if ( !from->summary().isEmpty() ) 133 if ( !from->summary().isEmpty() )
121 if ( !summary().startsWith( from->summary() )) 134 if ( !summary().startsWith( from->summary() ))
122 return false; 135 return false;
123 if ( from->hasStartDate() ) { 136 if ( from->hasStartDate() ) {
124 if ( !hasStartDate() ) 137 if ( !hasStartDate() )
125 return false; 138 return false;
126 if ( from->dtStart() != dtStart()) 139 if ( from->dtStart() != dtStart())
127 return false; 140 return false;
128 } 141 }
129 if ( from->hasDueDate() ){ 142 if ( from->hasDueDate() ){
130 if ( !hasDueDate() ) 143 if ( !hasDueDate() )
131 return false; 144 return false;
132 if ( from->dtDue() != dtDue()) 145 if ( from->dtDue() != dtDue())
133 return false; 146 return false;
134 } 147 }
135 if ( !from->location().isEmpty() ) 148 if ( !from->location().isEmpty() )
136 if ( !location().startsWith( from->location() ) ) 149 if ( !location().startsWith( from->location() ) )
137 return false; 150 return false;
138 if ( !from->description().isEmpty() ) 151 if ( !from->description().isEmpty() )
139 if ( !description().startsWith( from->description() )) 152 if ( !description().startsWith( from->description() ))
140 return false; 153 return false;
141 if ( from->alarms().count() ) { 154 if ( from->alarms().count() ) {
142 Alarm *a = from->alarms().first(); 155 Alarm *a = from->alarms().first();
143 if ( a->enabled() ){ 156 if ( a->enabled() ){
144 if ( !alarms().count() ) 157 if ( !alarms().count() )
145 return false; 158 return false;
146 Alarm *b = alarms().first(); 159 Alarm *b = alarms().first();
147 if( ! b->enabled() ) 160 if( ! b->enabled() )
148 return false; 161 return false;
149 if ( ! (a->offset() == b->offset() )) 162 if ( ! (a->offset() == b->offset() ))
150 return false; 163 return false;
151 } 164 }
152 } 165 }
153 166
154 QStringList cat = categories(); 167 QStringList cat = categories();
155 QStringList catFrom = from->categories(); 168 QStringList catFrom = from->categories();
156 QString nCat; 169 QString nCat;
157 unsigned int iii; 170 unsigned int iii;
158 for ( iii = 0; iii < catFrom.count();++iii ) { 171 for ( iii = 0; iii < catFrom.count();++iii ) {
159 nCat = catFrom[iii]; 172 nCat = catFrom[iii];
160 if ( !nCat.isEmpty() ) 173 if ( !nCat.isEmpty() )
161 if ( !cat.contains( nCat )) { 174 if ( !cat.contains( nCat )) {
162 return false; 175 return false;
163 } 176 }
164 } 177 }
165 if ( from->isCompleted() ) { 178 if ( from->isCompleted() ) {
166 if ( !isCompleted() ) 179 if ( !isCompleted() )
167 return false; 180 return false;
168 } 181 }
169 if( priority() != from->priority() ) 182 if( priority() != from->priority() )
170 return false; 183 return false;
171 184
172 185
173 return true; 186 return true;
174 187
175} 188}
176bool KCal::operator==( const Todo& t1, const Todo& t2 ) 189bool KCal::operator==( const Todo& t1, const Todo& t2 )
177{ 190{
178 191
179 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 ); 192 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 );
180 if ( ! ret ) 193 if ( ! ret )
181 return false; 194 return false;
182 if ( t1.hasDueDate() == t2.hasDueDate() ) { 195 if ( t1.hasDueDate() == t2.hasDueDate() ) {
183 if ( t1.hasDueDate() ) { 196 if ( t1.hasDueDate() ) {
184 if ( t1.doesFloat() == t2.doesFloat() ) { 197 if ( t1.doesFloat() == t2.doesFloat() ) {
185 if ( t1.doesFloat() ) { 198 if ( t1.doesFloat() ) {
186 if ( t1.dtDue().date() != t2.dtDue().date() ) 199 if ( t1.dtDue().date() != t2.dtDue().date() )
187 return false; 200 return false;
188 } else 201 } else
189 if ( t1.dtDue() != t2.dtDue() ) 202 if ( t1.dtDue() != t2.dtDue() )
190 return false; 203 return false;
191 } else 204 } else
192 return false;// float != 205 return false;// float !=
193 } 206 }
194 207
195 } else 208 } else
196 return false; 209 return false;
197 if ( t1.percentComplete() != t2.percentComplete() ) 210 if ( t1.percentComplete() != t2.percentComplete() )
198 return false; 211 return false;
199 if ( t1.isCompleted() ) { 212 if ( t1.isCompleted() ) {
200 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) { 213 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) {
201 if ( t1.hasCompletedDate() ) { 214 if ( t1.hasCompletedDate() ) {
202 if ( t1.completed() != t2.completed() ) 215 if ( t1.completed() != t2.completed() )
203 return false; 216 return false;
204 } 217 }
205 218
206 } else 219 } else
207 return false; 220 return false;
208 } 221 }
209 return true; 222 return true;
210 223
211} 224}
212 225
213void Todo::setDtDue(const QDateTime &dtDue) 226void Todo::setDtDue(const QDateTime &dtDue)
214{ 227{
215 //int diffsecs = mDtDue.secsTo(dtDue); 228 //int diffsecs = mDtDue.secsTo(dtDue);
216 229
217 /*if (mReadOnly) return; 230 /*if (mReadOnly) return;