summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt1
-rw-r--r--korganizer/koeditorgeneraltodo.cpp12
-rw-r--r--libkcal/todo.cpp1
3 files changed, 7 insertions, 7 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 18e94a7..15caf9e 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,28 +1,29 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.2.1 ************ 3********** VERSION 2.2.1 ************
4 4
5KO/Pi: 5KO/Pi:
6Fixed a problem displaying very long allday events in agenda view in single day mode. 6Fixed a problem displaying very long allday events in agenda view in single day mode.
7Fixed a problem with the default settings for new todos.
7 8
8KA/Pi: 9KA/Pi:
9Added a config option to turn on asking before a contact is deleted. 10Added a config option to turn on asking before a contact is deleted.
10Fixed a problem with the default view and view selection at startup. 11Fixed a problem with the default view and view selection at startup.
11 12
12********** VERSION 2.2.0 ************ 13********** VERSION 2.2.0 ************
13 14
14New stable release! 15New stable release!
15Fixed some minor usability problems. 16Fixed some minor usability problems.
16Added writing of next alarm to a file for usage on pdaXrom. 17Added writing of next alarm to a file for usage on pdaXrom.
17 18
18 19
19************************************* 20*************************************
20 21
21You can find the complete changelog 22You can find the complete changelog
22from version 1.7.7 to 2.2.0 23from version 1.7.7 to 2.2.0
23in the source package or on 24in the source package or on
24 25
25http://www.pi-sync.net/html/changelog.html 26http://www.pi-sync.net/html/changelog.html
26 27
27 28
28 29
diff --git a/korganizer/koeditorgeneraltodo.cpp b/korganizer/koeditorgeneraltodo.cpp
index 10d9a8c..d32d5a5 100644
--- a/korganizer/koeditorgeneraltodo.cpp
+++ b/korganizer/koeditorgeneraltodo.cpp
@@ -115,265 +115,263 @@ void KOEditorGeneralTodo::initTime(QWidget *parent,QBoxLayout *topLayout)
115 115
116 mDueDateEdit = new KDateEdit(timeBoxFrame); 116 mDueDateEdit = new KDateEdit(timeBoxFrame);
117 layoutTimeBox->addWidget(mDueDateEdit,1,1); 117 layoutTimeBox->addWidget(mDueDateEdit,1,1);
118 118
119 mDueTimeEdit = new KOTimeEdit(timeBoxFrame); 119 mDueTimeEdit = new KOTimeEdit(timeBoxFrame);
120 layoutTimeBox->addWidget(mDueTimeEdit,1,2); 120 layoutTimeBox->addWidget(mDueTimeEdit,1,2);
121 121
122 122
123 mTimeButton = new QCheckBox(i18n("Time associated"),timeBoxFrame); 123 mTimeButton = new QCheckBox(i18n("Time associated"),timeBoxFrame);
124 layoutTimeBox->addMultiCellWidget(mTimeButton,2,2,0,1); 124 layoutTimeBox->addMultiCellWidget(mTimeButton,2,2,0,1);
125 125
126 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool))); 126 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool)));
127 connect(mDueDateEdit,SIGNAL(setTimeTo(QTime)),mDueTimeEdit,SLOT(setTime(QTime))); 127 connect(mDueDateEdit,SIGNAL(setTimeTo(QTime)),mDueTimeEdit,SLOT(setTime(QTime)));
128 connect(mStartDateEdit,SIGNAL(setTimeTo(QTime)),mStartTimeEdit,SLOT(setTime(QTime))); 128 connect(mStartDateEdit,SIGNAL(setTimeTo(QTime)),mStartTimeEdit,SLOT(setTime(QTime)));
129 connect(mStartDateEdit, SIGNAL(dateChanged(QDate)), 129 connect(mStartDateEdit, SIGNAL(dateChanged(QDate)),
130 this, SLOT(startDateChanged(QDate))); 130 this, SLOT(startDateChanged(QDate)));
131 // some more layouting 131 // some more layouting
132 //layoutTimeBox->setColStretch(3,1); 132 //layoutTimeBox->setColStretch(3,1);
133} 133}
134 134
135 135
136void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout) 136void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout)
137{ 137{
138 mCompletedCombo = new QComboBox(parent); 138 mCompletedCombo = new QComboBox(parent);
139 // xgettext:no-c-format 139 // xgettext:no-c-format
140 mCompletedCombo->insertItem(i18n(" 0 %")); 140 mCompletedCombo->insertItem(i18n(" 0 %"));
141 // xgettext:no-c-format 141 // xgettext:no-c-format
142 mCompletedCombo->insertItem(i18n(" 20 %")); 142 mCompletedCombo->insertItem(i18n(" 20 %"));
143 // xgettext:no-c-format 143 // xgettext:no-c-format
144 mCompletedCombo->insertItem(i18n(" 40 %")); 144 mCompletedCombo->insertItem(i18n(" 40 %"));
145 // xgettext:no-c-format 145 // xgettext:no-c-format
146 mCompletedCombo->insertItem(i18n(" 60 %")); 146 mCompletedCombo->insertItem(i18n(" 60 %"));
147 // xgettext:no-c-format 147 // xgettext:no-c-format
148 mCompletedCombo->insertItem(i18n(" 80 %")); 148 mCompletedCombo->insertItem(i18n(" 80 %"));
149 // xgettext:no-c-format 149 // xgettext:no-c-format
150 mCompletedCombo->insertItem(i18n("100 %")); 150 mCompletedCombo->insertItem(i18n("100 %"));
151 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int))); 151 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int)));
152 topLayout->addWidget(mCompletedCombo); 152 topLayout->addWidget(mCompletedCombo);
153 153
154 mCompletedLabel = new QLabel(i18n("completed"),parent); 154 mCompletedLabel = new QLabel(i18n("completed"),parent);
155 topLayout->addWidget(mCompletedLabel); 155 topLayout->addWidget(mCompletedLabel);
156 156
157 mCompleteDateEdit = new KDateEdit(parent); 157 mCompleteDateEdit = new KDateEdit(parent);
158 topLayout->addWidget(mCompleteDateEdit ); 158 topLayout->addWidget(mCompleteDateEdit );
159 159
160 mCompleteTimeEdit = new KOTimeEdit(parent); 160 mCompleteTimeEdit = new KOTimeEdit(parent);
161 topLayout->addWidget( mCompleteTimeEdit); 161 topLayout->addWidget( mCompleteTimeEdit);
162 162
163 mCompletedCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred,QSizePolicy::Preferred) ); 163 mCompletedCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred,QSizePolicy::Preferred) );
164 mCompletedLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,QSizePolicy::Preferred) ); 164 mCompletedLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,QSizePolicy::Preferred) );
165 connect(mCompleteDateEdit,SIGNAL(setTimeTo(QTime)),mCompleteTimeEdit,SLOT(setTime(QTime))); 165 connect(mCompleteDateEdit,SIGNAL(setTimeTo(QTime)),mCompleteTimeEdit,SLOT(setTime(QTime)));
166 166
167 if ( QApplication::desktop()->width() <= 480 ) { 167 if ( QApplication::desktop()->width() <= 480 ) {
168 if ( QApplication::desktop()->width() < 320 ) 168 if ( QApplication::desktop()->width() < 320 )
169 mCompleteDateEdit->setMaximumWidth( 85 ); 169 mCompleteDateEdit->setMaximumWidth( 85 );
170 else 170 else
171 mCompleteDateEdit->setMaximumWidth( 140 ); 171 mCompleteDateEdit->setMaximumWidth( 140 );
172 topLayout->setSpacing( 0 ); 172 topLayout->setSpacing( 0 );
173 } 173 }
174} 174}
175 175
176void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout) 176void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout)
177{ 177{
178 178
179 QHBox* h = new QHBox ( parent ); 179 QHBox* h = new QHBox ( parent );
180 topLayout->addWidget( h ); 180 topLayout->addWidget( h );
181 QLabel *priorityLabel = new QLabel(i18n("Priority:"), h); 181 QLabel *priorityLabel = new QLabel(i18n("Priority:"), h);
182 // topLayout->addWidget(priorityLabel); 182 // topLayout->addWidget(priorityLabel);
183 mPriorityCombo = new QComboBox( h ); 183 mPriorityCombo = new QComboBox( h );
184 mPriorityCombo->insertItem(i18n("1 (high)")); 184 mPriorityCombo->insertItem(i18n("1 (high)"));
185 mPriorityCombo->insertItem(i18n("2")); 185 mPriorityCombo->insertItem(i18n("2"));
186 mPriorityCombo->insertItem(i18n("3")); 186 mPriorityCombo->insertItem(i18n("3"));
187 mPriorityCombo->insertItem(i18n("4")); 187 mPriorityCombo->insertItem(i18n("4"));
188 mPriorityCombo->insertItem(i18n("5 (low)")); 188 mPriorityCombo->insertItem(i18n("5 (low)"));
189 //topLayout->addWidget(mPriorityCombo); 189 //topLayout->addWidget(mPriorityCombo);
190} 190}
191 191
192void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout) 192void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout)
193{ 193{
194 QBoxLayout *statusLayout = new QHBoxLayout(topLayout); 194 QBoxLayout *statusLayout = new QHBoxLayout(topLayout);
195 195
196 initCompletion( parent, statusLayout ); 196 initCompletion( parent, statusLayout );
197 197
198 statusLayout->addStretch( 1 ); 198 statusLayout->addStretch( 1 );
199 199
200 initPriority( parent, statusLayout ); 200 initPriority( parent, statusLayout );
201} 201}
202 202
203void KOEditorGeneralTodo::setDefaults(QDateTime due,bool allDay) 203void KOEditorGeneralTodo::setDefaults(QDateTime due,bool allDay)
204{ 204{
205 205
206 mSummaryEdit->load(KOLocationBox::SUMMARYTODO); 206 mSummaryEdit->load(KOLocationBox::SUMMARYTODO);
207 mLocationEdit->load(KOLocationBox::LOCATION); 207 mLocationEdit->load(KOLocationBox::LOCATION);
208 KOEditorGeneral::setDefaults(allDay); 208 KOEditorGeneral::setDefaults(allDay);
209 209
210 mTimeButton->setChecked( !allDay ); 210 mTimeButton->setChecked( !allDay );
211 if(mTimeButton->isChecked()) { 211 mTimeButton->setEnabled( !allDay );
212 mTimeButton->setEnabled(true);
213 }
214 else {
215 mTimeButton->setEnabled(false);
216 }
217 212
218 enableTimeEdits( !allDay ); 213 enableTimeEdits( !allDay );
219 if ( due.isValid() ) { 214 if ( due.isValid() ) {
220 mDueCheck->setChecked(true); 215 mDueCheck->setChecked(true);
221 enableDueEdit(true); 216 enableDueEdit(true);
222 alarmDisable(false); 217 alarmDisable(false);
223 } else { 218 } else {
224 mDueCheck->setChecked(false); 219 mDueCheck->setChecked(false);
225 enableDueEdit(false); 220 enableDueEdit(false);
226 due = QDateTime::currentDateTime().addDays(7); 221 due = QDateTime::currentDateTime().addDays(7);
227 alarmDisable(true); 222 alarmDisable(true);
228 } 223 }
229 224
230 225
231 mStartCheck->setChecked(false); 226 mStartCheck->setChecked(false);
232 enableStartEdit(false); 227 enableStartEdit(false);
233 228
234 mDueDateEdit->setDate(due.date()); 229 mDueDateEdit->setDate(due.date());
235 mDueTimeEdit->setTime(due.time()); 230 mDueTimeEdit->setTime(due.time());
236 due = due.addDays(-7); 231 due = due.addDays(-7);
237 mStartDateEdit->setDate(due.date()); 232 mStartDateEdit->setDate(due.date());
238 mStartTimeEdit->setTime(due.time()); 233 mStartTimeEdit->setTime(due.time());
239 234
240 mPriorityCombo->setCurrentItem(2); 235 mPriorityCombo->setCurrentItem(2);
241 mCompletedLabel->setText(i18n(" completed"));; 236 mCompletedLabel->setText(i18n(" completed"));;
242 mCompletedCombo->setCurrentItem(0); 237 mCompletedCombo->setCurrentItem(0);
243 mCompleteDateEdit->hide(); 238 mCompleteDateEdit->hide();
244 mCompleteTimeEdit->hide(); 239 mCompleteTimeEdit->hide();
245} 240}
246 241
247void KOEditorGeneralTodo::readTodo(Todo *todo) 242void KOEditorGeneralTodo::readTodo(Todo *todo)
248{ 243{
249 244
250 mSummaryEdit->load(KOLocationBox::SUMMARYTODO); 245 mSummaryEdit->load(KOLocationBox::SUMMARYTODO);
251 mLocationEdit->load(KOLocationBox::LOCATION); 246 mLocationEdit->load(KOLocationBox::LOCATION);
252 KOEditorGeneral::readIncidence(todo); 247 KOEditorGeneral::readIncidence(todo);
253 248
254 QDateTime dueDT; 249 QDateTime dueDT;
250 mTimeButton->setChecked( !todo->doesFloat() );
251 mTimeButton->setEnabled( !todo->doesFloat() );
255 252
256 if (todo->hasDueDate()) { 253 if (todo->hasDueDate()) {
257 enableAlarmEdit(true); 254 enableAlarmEdit(true);
258 dueDT = todo->dtDue(); 255 dueDT = todo->dtDue();
259 mDueDateEdit->setDate(todo->dtDue().date()); 256 mDueDateEdit->setDate(todo->dtDue().date());
260 mDueTimeEdit->setTime(todo->dtDue().time()); 257 mDueTimeEdit->setTime(todo->dtDue().time());
261 mDueCheck->setChecked(true); 258 mDueCheck->setChecked(true);
259 mTimeButton->setEnabled( true );
262 } else { 260 } else {
263 alarmDisable(true); 261 alarmDisable(true);
264 mDueDateEdit->setEnabled(false); 262 mDueDateEdit->setEnabled(false);
265 mDueTimeEdit->setEnabled(false); 263 mDueTimeEdit->setEnabled(false);
266 mDueDateEdit->setDate(QDate::currentDate()); 264 mDueDateEdit->setDate(QDate::currentDate());
267 mDueTimeEdit->setTime(QTime::currentTime()); 265 mDueTimeEdit->setTime(QTime::currentTime());
268 mDueCheck->setChecked(false); 266 mDueCheck->setChecked(false);
269 } 267 }
270 268
271 if (todo->hasStartDate()) { 269 if (todo->hasStartDate()) {
272 mStartDateEdit->setDate(todo->dtStart().date()); 270 mStartDateEdit->setDate(todo->dtStart().date());
273 mStartTimeEdit->setTime(todo->dtStart().time()); 271 mStartTimeEdit->setTime(todo->dtStart().time());
274 mStartCheck->setChecked(true); 272 mStartCheck->setChecked(true);
273 mTimeButton->setEnabled( true );
275 } else { 274 } else {
276 mStartDateEdit->setEnabled(false); 275 mStartDateEdit->setEnabled(false);
277 mStartTimeEdit->setEnabled(false); 276 mStartTimeEdit->setEnabled(false);
278 mStartDateEdit->setDate(QDate::currentDate()); 277 mStartDateEdit->setDate(QDate::currentDate());
279 mStartTimeEdit->setTime(QTime::currentTime()); 278 mStartTimeEdit->setTime(QTime::currentTime());
280 mStartCheck->setChecked(false); 279 mStartCheck->setChecked(false);
281 } 280 }
282 281
283 mTimeButton->setChecked( !todo->doesFloat() );
284 282
285 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20); 283 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20);
286 if (todo->isCompleted() && todo->hasCompletedDate()) { 284 if (todo->isCompleted() && todo->hasCompletedDate()) {
287 mCompleted = todo->completed(); 285 mCompleted = todo->completed();
288 } 286 }
289 setCompletedDate(); 287 setCompletedDate();
290 288
291 mPriorityCombo->setCurrentItem(todo->priority()-1); 289 mPriorityCombo->setCurrentItem(todo->priority()-1);
292} 290}
293 291
294void KOEditorGeneralTodo::writeTodo(Todo *todo) 292void KOEditorGeneralTodo::writeTodo(Todo *todo)
295{ 293{
296 KOEditorGeneral::writeIncidence(todo); 294 KOEditorGeneral::writeIncidence(todo);
297 295
298 // temp. until something better happens. 296 // temp. until something better happens.
299 QString tmpStr; 297 QString tmpStr;
300 298
301 todo->setHasDueDate(mDueCheck->isChecked()); 299 todo->setHasDueDate(mDueCheck->isChecked());
302 todo->setHasStartDate(mStartCheck->isChecked()); 300 todo->setHasStartDate(mStartCheck->isChecked());
303 301
304 QDate tmpDate; 302 QDate tmpDate;
305 QTime tmpTime; 303 QTime tmpTime;
306 QDateTime tmpDT; 304 QDateTime tmpDT;
307 if ( mTimeButton->isChecked() ) { 305 if ( mTimeButton->isChecked() ) {
308 todo->setFloats(false); 306 todo->setFloats(false);
309 307
310 // set due date/time 308 // set due date/time
311 tmpDate = mDueDateEdit->date(); 309 tmpDate = mDueDateEdit->date();
312 tmpTime = mDueTimeEdit->getTime(); 310 tmpTime = mDueTimeEdit->getTime();
313 tmpDT.setDate(tmpDate); 311 tmpDT.setDate(tmpDate);
314 tmpDT.setTime(tmpTime); 312 tmpDT.setTime(tmpTime);
315 todo->setDtDue(tmpDT); 313 todo->setDtDue(tmpDT);
316 314
317 // set start date/time 315 // set start date/time
318 tmpDate = mStartDateEdit->date(); 316 tmpDate = mStartDateEdit->date();
319 tmpTime = mStartTimeEdit->getTime(); 317 tmpTime = mStartTimeEdit->getTime();
320 tmpDT.setDate(tmpDate); 318 tmpDT.setDate(tmpDate);
321 tmpDT.setTime(tmpTime); 319 tmpDT.setTime(tmpTime);
322 todo->setDtStart(tmpDT); 320 todo->setDtStart(tmpDT);
323 } else { 321 } else {
324 todo->setFloats(true); 322 todo->setFloats(true);
325 323
326 // need to change this. 324 // need to change this.
327 tmpDate = mDueDateEdit->date(); 325 tmpDate = mDueDateEdit->date();
328 tmpTime.setHMS(0,0,0); 326 tmpTime.setHMS(0,0,0);
329 tmpDT.setDate(tmpDate); 327 tmpDT.setDate(tmpDate);
330 tmpDT.setTime(tmpTime); 328 tmpDT.setTime(tmpTime);
331 todo->setDtDue(tmpDT); 329 todo->setDtDue(tmpDT);
332 330
333 tmpDate = mStartDateEdit->date(); 331 tmpDate = mStartDateEdit->date();
334 tmpTime.setHMS(0,0,0); 332 tmpTime.setHMS(0,0,0);
335 tmpDT.setDate(tmpDate); 333 tmpDT.setDate(tmpDate);
336 tmpDT.setTime(tmpTime); 334 tmpDT.setTime(tmpTime);
337 todo->setDtStart(tmpDT); 335 todo->setDtStart(tmpDT);
338 } 336 }
339 todo->setPriority(mPriorityCombo->currentItem()+1); 337 todo->setPriority(mPriorityCombo->currentItem()+1);
340 338
341 // set completion state 339 // set completion state
342 if ( mCompletedCombo->currentItem() == 5 ) { 340 if ( mCompletedCombo->currentItem() == 5 ) {
343 QDateTime comp ( mCompleteDateEdit->date(), mCompleteTimeEdit->getTime() ); 341 QDateTime comp ( mCompleteDateEdit->date(), mCompleteTimeEdit->getTime() );
344 if ( comp.isValid () ) { 342 if ( comp.isValid () ) {
345 todo->setPercentComplete(100); 343 todo->setPercentComplete(100);
346 todo->setCompleted(comp); 344 todo->setCompleted(comp);
347 } else { 345 } else {
348 todo->setPercentComplete( 100 ); 346 todo->setPercentComplete( 100 );
349 if ( mCompleted.isValid() ) 347 if ( mCompleted.isValid() )
350 todo->setCompleted(mCompleted); 348 todo->setCompleted(mCompleted);
351 } 349 }
352 } else { 350 } else {
353 todo->setPercentComplete(mCompletedCombo->currentItem() * 20); 351 todo->setPercentComplete(mCompletedCombo->currentItem() * 20);
354 } 352 }
355 353
356 mSummaryEdit->save(KOLocationBox::SUMMARYTODO); 354 mSummaryEdit->save(KOLocationBox::SUMMARYTODO);
357} 355}
358 356
359void KOEditorGeneralTodo::enableDueEdit(bool enable) 357void KOEditorGeneralTodo::enableDueEdit(bool enable)
360{ 358{
361 mDueDateEdit->setEnabled( enable ); 359 mDueDateEdit->setEnabled( enable );
362 360
363 if(mDueCheck->isChecked() || mStartCheck->isChecked()) { 361 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
364 mTimeButton->setEnabled(true); 362 mTimeButton->setEnabled(true);
365 } 363 }
366 else { 364 else {
367 mTimeButton->setEnabled(false); 365 mTimeButton->setEnabled(false);
368 mTimeButton->setChecked(false); 366 mTimeButton->setChecked(false);
369 } 367 }
370 368
371 if (enable) { 369 if (enable) {
372 mDueTimeEdit->setEnabled( mTimeButton->isChecked() ); 370 mDueTimeEdit->setEnabled( mTimeButton->isChecked() );
373 } else { 371 } else {
374 mDueTimeEdit->setEnabled( false ); 372 mDueTimeEdit->setEnabled( false );
375 } 373 }
376 emit datesChecked(); 374 emit datesChecked();
377} 375}
378 376
379void KOEditorGeneralTodo::enableStartEdit( bool enable ) 377void KOEditorGeneralTodo::enableStartEdit( bool enable )
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index e4508a0..48d37d5 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -1,140 +1,141 @@
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#include <qfileinfo.h> 26#include <qfileinfo.h>
27 27
28#include "calendarlocal.h" 28#include "calendarlocal.h"
29#include "icalformat.h" 29#include "icalformat.h"
30#include "todo.h" 30#include "todo.h"
31 31
32using namespace KCal; 32using namespace KCal;
33 33
34Todo::Todo(): QObject(), Incidence() 34Todo::Todo(): QObject(), Incidence()
35{ 35{
36// mStatus = TENTATIVE; 36// mStatus = TENTATIVE;
37 37
38 mHasDueDate = false; 38 mHasDueDate = false;
39 setHasStartDate( false ); 39 setHasStartDate( false );
40 mCompleted = getEvenTime(QDateTime::currentDateTime()); 40 mCompleted = getEvenTime(QDateTime::currentDateTime());
41 mHasCompletedDate = false; 41 mHasCompletedDate = false;
42 mPercentComplete = 0; 42 mPercentComplete = 0;
43 mRunning = false; 43 mRunning = false;
44 mRunSaveTimer = 0; 44 mRunSaveTimer = 0;
45 setFloats( true );
45} 46}
46 47
47Todo::Todo(const Todo &t) : QObject(),Incidence(t) 48Todo::Todo(const Todo &t) : QObject(),Incidence(t)
48{ 49{
49 mDtDue = t.mDtDue; 50 mDtDue = t.mDtDue;
50 mHasDueDate = t.mHasDueDate; 51 mHasDueDate = t.mHasDueDate;
51 mCompleted = t.mCompleted; 52 mCompleted = t.mCompleted;
52 mHasCompletedDate = t.mHasCompletedDate; 53 mHasCompletedDate = t.mHasCompletedDate;
53 mPercentComplete = t.mPercentComplete; 54 mPercentComplete = t.mPercentComplete;
54 mRunning = false; 55 mRunning = false;
55 mRunSaveTimer = 0; 56 mRunSaveTimer = 0;
56} 57}
57 58
58Todo::~Todo() 59Todo::~Todo()
59{ 60{
60 setRunning( false ); 61 setRunning( false );
61 //qDebug("Todo::~Todo() "); 62 //qDebug("Todo::~Todo() ");
62} 63}
63 64
64void Todo::setRunningFalse( QString s ) 65void Todo::setRunningFalse( QString s )
65{ 66{
66 if ( ! mRunning ) 67 if ( ! mRunning )
67 return; 68 return;
68 mRunning = false; 69 mRunning = false;
69 if ( mRunSaveTimer ) 70 if ( mRunSaveTimer )
70 mRunSaveTimer->stop(); 71 mRunSaveTimer->stop();
71 saveRunningInfoToFile( s ); 72 saveRunningInfoToFile( s );
72} 73}
73void Todo::stopRunning() 74void Todo::stopRunning()
74{ 75{
75 if ( !mRunning ) 76 if ( !mRunning )
76 return; 77 return;
77 if ( mRunSaveTimer ) 78 if ( mRunSaveTimer )
78 mRunSaveTimer->stop(); 79 mRunSaveTimer->stop();
79 mRunning = false; 80 mRunning = false;
80} 81}
81void Todo::setRunning( bool run ) 82void Todo::setRunning( bool run )
82{ 83{
83 if ( run == mRunning ) 84 if ( run == mRunning )
84 return; 85 return;
85 //qDebug("Todo::setRunning %d ", run); 86 //qDebug("Todo::setRunning %d ", run);
86 if ( !mRunSaveTimer ) { 87 if ( !mRunSaveTimer ) {
87 mRunSaveTimer = new QTimer ( this ); 88 mRunSaveTimer = new QTimer ( this );
88 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) ); 89 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) );
89 } 90 }
90 mRunning = run; 91 mRunning = run;
91 if ( mRunning ) { 92 if ( mRunning ) {
92 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min 93 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min
93 mRunStart = QDateTime::currentDateTime(); 94 mRunStart = QDateTime::currentDateTime();
94 } else { 95 } else {
95 mRunSaveTimer->stop(); 96 mRunSaveTimer->stop();
96 saveRunningInfoToFile(); 97 saveRunningInfoToFile();
97 } 98 }
98} 99}
99void Todo::saveRunningInfo( QString comment, QDateTime start, QDateTime end ) 100void Todo::saveRunningInfo( QString comment, QDateTime start, QDateTime end )
100{ 101{
101 if ( !mRunning) return; 102 if ( !mRunning) return;
102 mRunning = false; 103 mRunning = false;
103 mRunStart = start; 104 mRunStart = start;
104 mRunEnd = end; 105 mRunEnd = end;
105 saveRunningInfoToFile( comment ); 106 saveRunningInfoToFile( comment );
106} 107}
107void Todo::saveRunningInfoToFile() 108void Todo::saveRunningInfoToFile()
108{ 109{
109 mRunEnd = QDateTime::currentDateTime(); 110 mRunEnd = QDateTime::currentDateTime();
110 saveRunningInfoToFile( QString::null ); 111 saveRunningInfoToFile( QString::null );
111} 112}
112void Todo::saveRunningInfoToFile( QString comment ) 113void Todo::saveRunningInfoToFile( QString comment )
113{ 114{
114 //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1()); 115 //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1());
115 if ( mRunStart.secsTo ( mRunEnd) < 15 ) { 116 if ( mRunStart.secsTo ( mRunEnd) < 15 ) {
116 qDebug("Running time < 15 seconds. Skipped. "); 117 qDebug("Running time < 15 seconds. Skipped. ");
117 return; 118 return;
118 } 119 }
119 QString dir = KGlobalSettings::timeTrackerDir(); 120 QString dir = KGlobalSettings::timeTrackerDir();
120 //qDebug("%s ", dir.latin1()); 121 //qDebug("%s ", dir.latin1());
121 QString file = "%1%2%3-%4%5%6-"; 122 QString file = "%1%2%3-%4%5%6-";
122 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 ); 123 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 );
123 file.replace ( QRegExp (" "), "0" ); 124 file.replace ( QRegExp (" "), "0" );
124 file += uid(); 125 file += uid();
125 //qDebug("File %s ",file.latin1() ); 126 //qDebug("File %s ",file.latin1() );
126 CalendarLocal cal; 127 CalendarLocal cal;
127 cal.setLocalTime(); 128 cal.setLocalTime();
128 Todo * to = (Todo*) clone(); 129 Todo * to = (Todo*) clone();
129 to->setFloats( false ); 130 to->setFloats( false );
130 to->setDtStart( mRunStart ); 131 to->setDtStart( mRunStart );
131 to->setHasStartDate( true ); 132 to->setHasStartDate( true );
132 to->setDtDue( mRunEnd ); 133 to->setDtDue( mRunEnd );
133 to->setHasDueDate( true ); 134 to->setHasDueDate( true );
134 to->setUid( file ); 135 to->setUid( file );
135 if ( !comment.isEmpty() ) { 136 if ( !comment.isEmpty() ) {
136 QString des = to->description(); 137 QString des = to->description();
137 if ( des.isEmpty () ) 138 if ( des.isEmpty () )
138 to->setDescription( "TT-Note: " + comment ); 139 to->setDescription( "TT-Note: " + comment );
139 else 140 else
140 to->setDescription( "TT-Note: " + comment +"\n" + des ); 141 to->setDescription( "TT-Note: " + comment +"\n" + des );