summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koeventviewer.cpp14
-rw-r--r--korganizer/kolistview.cpp14
-rw-r--r--korganizer/kotodoview.cpp26
3 files changed, 41 insertions, 13 deletions
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index dbe0668..bdad248 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -245,355 +245,365 @@ void KOEventViewer::mailToAttendees( bool all )
245 245
246} 246}
247void KOEventViewer::addTag(const QString & tag,const QString & text) 247void KOEventViewer::addTag(const QString & tag,const QString & text)
248{ 248{
249 int number=text.contains("\n"); 249 int number=text.contains("\n");
250 QString str = "<" + tag + ">"; 250 QString str = "<" + tag + ">";
251 QString tmpText=text; 251 QString tmpText=text;
252 QString tmpStr=str; 252 QString tmpStr=str;
253 if(number !=-1) 253 if(number !=-1)
254 { 254 {
255 if (number > 0) { 255 if (number > 0) {
256 int pos=0; 256 int pos=0;
257 QString tmp; 257 QString tmp;
258 for(int i=0;i<=number;i++) { 258 for(int i=0;i<=number;i++) {
259 pos=tmpText.find("\n"); 259 pos=tmpText.find("\n");
260 tmp=tmpText.left(pos); 260 tmp=tmpText.left(pos);
261 tmpText=tmpText.right(tmpText.length()-pos-1); 261 tmpText=tmpText.right(tmpText.length()-pos-1);
262 tmpStr+=tmp+"<br>"; 262 tmpStr+=tmp+"<br>";
263 } 263 }
264 } 264 }
265 else tmpStr += tmpText; 265 else tmpStr += tmpText;
266 tmpStr+="</" + tag + ">"; 266 tmpStr+="</" + tag + ">";
267 mText.append(tmpStr); 267 mText.append(tmpStr);
268 } 268 }
269 else 269 else
270 { 270 {
271 str += text + "</" + tag + ">"; 271 str += text + "</" + tag + ">";
272 mText.append(str); 272 mText.append(str);
273 } 273 }
274} 274}
275 275
276void KOEventViewer::setColorMode( int m ) 276void KOEventViewer::setColorMode( int m )
277{ 277{
278 mColorMode = m; 278 mColorMode = m;
279} 279}
280void KOEventViewer::appendEvent(Event *event, int mode ) 280void KOEventViewer::appendEvent(Event *event, int mode )
281{ 281{
282 mMailSubject = ""; 282 mMailSubject = "";
283 mCurrentIncidence = event; 283 mCurrentIncidence = event;
284 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 284 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
285 topLevelWidget()->setCaption(i18n("Event Viewer")); 285 topLevelWidget()->setCaption(i18n("Event Viewer"));
286 if ( mode == 0 ) { 286 if ( mode == 0 ) {
287 addTag("h2",deTag(event->summary())); 287 addTag("h2",deTag(event->summary()));
288 } 288 }
289 else { 289 else {
290 if ( mColorMode == 1 ) { 290 if ( mColorMode == 1 ) {
291 mText +="<font color=\"#00A000\">"; 291 mText +="<font color=\"#00A000\">";
292 } 292 }
293 if ( mColorMode == 2 ) { 293 if ( mColorMode == 2 ) {
294 mText +="<font color=\"#C00000\">"; 294 mText +="<font color=\"#C00000\">";
295 } 295 }
296 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 296 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
297 if ( mode == 1 ) { 297 if ( mode == 1 ) {
298 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 298 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
299 } else { 299 } else {
300 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 300 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
301 } 301 }
302 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 302 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
303 if ( mColorMode ) 303 if ( mColorMode )
304 mText += "</font>"; 304 mText += "</font>";
305 } 305 }
306 mMailSubject += i18n( "Meeting " )+ event->summary(); 306 mMailSubject += i18n( "Meeting " )+ event->summary();
307 if (event->cancelled ()) { 307 if (event->cancelled ()) {
308 mText +="<font color=\"#B00000\">"; 308 mText +="<font color=\"#B00000\">";
309 addTag("i",i18n("This event has been cancelled!")); 309 addTag("i",i18n("This event has been cancelled!"));
310 mText.append("<br>"); 310 mText.append("<br>");
311 mText += "</font>"; 311 mText += "</font>";
312 mMailSubject += i18n("(cancelled)"); 312 mMailSubject += i18n("(cancelled)");
313 } 313 }
314 if (!event->location().isEmpty()) { 314 if (!event->location().isEmpty()) {
315 addTag("b",i18n("Location: ")); 315 addTag("b",i18n("Location: "));
316 mText.append(deTag(event->location())+"<br>"); 316 mText.append(deTag(event->location())+"<br>");
317 mMailSubject += i18n(" at ") + event->location(); 317 mMailSubject += i18n(" at ") + event->location();
318 } 318 }
319 if (event->doesFloat()) { 319 if (event->doesFloat()) {
320 if (event->isMultiDay()) { 320 if (event->isMultiDay()) {
321 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 321 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
322 .arg(event->dtStartDateStr(shortDate)) 322 .arg(event->dtStartDateStr(shortDate))
323 .arg(event->dtEndDateStr(shortDate))); 323 .arg(event->dtEndDateStr(shortDate)));
324 } else { 324 } else {
325 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 325 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
326 } 326 }
327 } else { 327 } else {
328 if (event->isMultiDay()) { 328 if (event->isMultiDay()) {
329 mText.append(i18n("<p><b>From:</b> %1</p> ") 329 mText.append(i18n("<p><b>From:</b> %1</p> ")
330 .arg(event->dtStartStr( shortDate))); 330 .arg(event->dtStartStr( shortDate)));
331 mText.append(i18n("<p><b>To:</b> %1</p>") 331 mText.append(i18n("<p><b>To:</b> %1</p>")
332 .arg(event->dtEndStr(shortDate))); 332 .arg(event->dtEndStr(shortDate)));
333 } else { 333 } else {
334 mText.append(i18n("<p><b>On:</b> %1</p> ") 334 mText.append(i18n("<p><b>On:</b> %1</p> ")
335 .arg(event->dtStartDateStr( shortDate ))); 335 .arg(event->dtStartDateStr( shortDate )));
336 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 336 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
337 .arg(event->dtStartTimeStr()) 337 .arg(event->dtStartTimeStr())
338 .arg(event->dtEndTimeStr())); 338 .arg(event->dtEndTimeStr()));
339 } 339 }
340 } 340 }
341 341
342 if (event->recurrence()->doesRecur()) { 342 if (event->recurrence()->doesRecur()) {
343 343
344 QString recurText = event->recurrence()->recurrenceText(); 344 QString recurText = event->recurrence()->recurrenceText();
345 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 345 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
346 bool ok; 346 bool ok;
347 QDate start = QDate::currentDate(); 347 QDate start = QDate::currentDate();
348 QDateTime next; 348 QDateTime next;
349 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 349 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
350 if ( ok ) { 350 if ( ok ) {
351 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 351 addTag("p",i18n("<b>Next recurrence is on:</b>") );
352 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 352 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
353 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 353 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
354 354
355 } else { 355 } else {
356 bool last; 356 bool last;
357 QDate nextd; 357 QDate nextd;
358 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 358 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
359 if ( last ) { 359 if ( last ) {
360 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 360 addTag("p",i18n("<b>Last recurrence was on:</b>") );
361 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 361 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
362 } 362 }
363 } 363 }
364 } else { 364 } else {
365 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 365 mMailSubject += i18n(" - " )+event->dtStartStr( true );
366 366
367 } 367 }
368 368
369 369
370 if (event->isAlarmEnabled()) { 370 if (event->isAlarmEnabled()) {
371 Alarm *alarm =event->alarms().first() ; 371 Alarm *alarm =event->alarms().first() ;
372 QDateTime t = alarm->time(); 372 QDateTime t = alarm->time();
373 int min = t.secsTo( event->dtStart() )/60; 373 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
374 QString s =i18n("( %1 min before )").arg( min );
375 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 374 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
376 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 375 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
377 //addTag("p",s); 376 //addTag("p",s);
378 } 377 }
379 378
380 addTag("b",i18n("Access: ")); 379 addTag("b",i18n("Access: "));
381 mText.append(event->secrecyStr()+"<br>"); 380 mText.append(event->secrecyStr()+"<br>");
382 381
383 382
384 if ( KOPrefs::instance()->mEVshowDetails ) { 383 if ( KOPrefs::instance()->mEVshowDetails ) {
385 if (!event->description().isEmpty()) { 384 if (!event->description().isEmpty()) {
386 addTag("p",i18n("<b>Details: </b>")); 385 addTag("p",i18n("<b>Details: </b>"));
387 addTag("p",deTag(event->description())); 386 addTag("p",deTag(event->description()));
388 } 387 }
389 } 388 }
390 formatCategories(event); 389 formatCategories(event);
391 390
392 formatReadOnly(event); 391 formatReadOnly(event);
393 formatAttendees(event); 392 formatAttendees(event);
394 393
395 if ( KOPrefs::instance()->mEVshowCreated ) { 394 if ( KOPrefs::instance()->mEVshowCreated ) {
396 addTag("p",i18n("<b>Created: ") +" </b>"); 395 addTag("p",i18n("<b>Created: ") +" </b>");
397 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 396 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
398 397
399 } 398 }
400 if ( KOPrefs::instance()->mEVshowChanged ) { 399 if ( KOPrefs::instance()->mEVshowChanged ) {
401 addTag("p",i18n("<b>Last modified: ") +" </b>"); 400 addTag("p",i18n("<b>Last modified: ") +" </b>");
402 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 401 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
403 402
404 } 403 }
405 setText(mText); 404 setText(mText);
406 //QWhatsThis::add(this,mText); 405 //QWhatsThis::add(this,mText);
407 406
408} 407}
409 408
410void KOEventViewer::appendTodo(Todo *event, int mode ) 409void KOEventViewer::appendTodo(Todo *event, int mode )
411{ 410{
412 mMailSubject = ""; 411 mMailSubject = "";
413 mCurrentIncidence = event; 412 mCurrentIncidence = event;
414 topLevelWidget()->setCaption(i18n("Todo Viewer")); 413 topLevelWidget()->setCaption(i18n("Todo Viewer"));
415 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 414 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
416 if (mode == 0 ) 415 if (mode == 0 )
417 addTag("h2",deTag(event->summary())); 416 addTag("h2",deTag(event->summary()));
418 else { 417 else {
419 if ( mColorMode == 1 ) { 418 if ( mColorMode == 1 ) {
420 mText +="<font color=\"#00A000\">"; 419 mText +="<font color=\"#00A000\">";
421 } 420 }
422 if ( mColorMode == 2 ) { 421 if ( mColorMode == 2 ) {
423 mText +="<font color=\"#B00000\">"; 422 mText +="<font color=\"#B00000\">";
424 } 423 }
425 if ( mode == 1 ) { 424 if ( mode == 1 ) {
426 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 425 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
427 } else { 426 } else {
428 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 427 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
429 } 428 }
430 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 429 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
431 if ( mColorMode ) 430 if ( mColorMode )
432 mText += "</font>"; 431 mText += "</font>";
433 } 432 }
434 mMailSubject += i18n( "Todo " )+ event->summary(); 433 mMailSubject += i18n( "Todo " )+ event->summary();
435 434
436 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 435 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
437 mText +="<font color=\"#B00000\">"; 436 mText +="<font color=\"#B00000\">";
438 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 437 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
439 mText += "</font>"; 438 mText += "</font>";
440 } else { 439 } else {
441 mText.append(i18n("<p><i>%1 % completed</i></p>") 440 mText.append(i18n("<p><i>%1 % completed</i></p>")
442 .arg(event->percentComplete())); 441 .arg(event->percentComplete()));
443 } 442 }
444 443
445 if (event->cancelled ()) { 444 if (event->cancelled ()) {
446 mText +="<font color=\"#B00000\">"; 445 mText +="<font color=\"#B00000\">";
447 addTag("i",i18n("This todo has been cancelled!")); 446 addTag("i",i18n("This todo has been cancelled!"));
448 mText.append("<br>"); 447 mText.append("<br>");
449 mText += "</font>"; 448 mText += "</font>";
450 mMailSubject += i18n("(cancelled)"); 449 mMailSubject += i18n("(cancelled)");
451 } 450 }
452 451
453 if (!event->location().isEmpty()) { 452 if (!event->location().isEmpty()) {
454 addTag("b",i18n("Location: ")); 453 addTag("b",i18n("Location: "));
455 mText.append(deTag(event->location())+"<br>"); 454 mText.append(deTag(event->location())+"<br>");
456 mMailSubject += i18n(" at ") + event->location(); 455 mMailSubject += i18n(" at ") + event->location();
457 } 456 }
458 457
459 if (event->recurrence()->doesRecur()) { 458 if (event->recurrence()->doesRecur()) {
460 459
461 QString recurText = event->recurrence()->recurrenceText(); 460 QString recurText = event->recurrence()->recurrenceText();
462 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 461 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
463 462
464 } 463 }
465 if (event->hasStartDate()) { 464 if (event->hasStartDate()) {
466 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 465 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
467 } 466 }
468 if (event->hasDueDate()) { 467 if (event->hasDueDate()) {
469 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 468 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
470 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 469 mMailSubject += i18n(" - " )+event->dtDueStr( true );
471 } 470 }
471
472
473 if (event->isAlarmEnabled()) {
474 Alarm *alarm =event->alarms().first() ;
475 QDateTime t = alarm->time();
476 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
477 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
478 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
479 //addTag("p",s);
480 }
481
472 addTag("b",i18n("Access: ")); 482 addTag("b",i18n("Access: "));
473 mText.append(event->secrecyStr()+"<br>"); 483 mText.append(event->secrecyStr()+"<br>");
474 if ( KOPrefs::instance()->mEVshowDetails ) { 484 if ( KOPrefs::instance()->mEVshowDetails ) {
475 if (!event->description().isEmpty()) { 485 if (!event->description().isEmpty()) {
476 addTag("p",i18n("<b>Details: </b>")); 486 addTag("p",i18n("<b>Details: </b>"));
477 addTag("p",deTag(event->description())); 487 addTag("p",deTag(event->description()));
478 } 488 }
479 } 489 }
480 490
481 formatCategories(event); 491 formatCategories(event);
482 492
483 mText.append(i18n("<p><b>Priority:</b> %2</p>") 493 mText.append(i18n("<p><b>Priority:</b> %2</p>")
484 .arg(QString::number(event->priority()))); 494 .arg(QString::number(event->priority())));
485 495
486 formatReadOnly(event); 496 formatReadOnly(event);
487 formatAttendees(event); 497 formatAttendees(event);
488 if ( event->relatedTo() ) { 498 if ( event->relatedTo() ) {
489 addTag("b",i18n("Parent todo:<br>")); 499 addTag("b",i18n("Parent todo:<br>"));
490 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 500 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
491 } 501 }
492 QPtrList<Incidence> Relations = event->relations(); 502 QPtrList<Incidence> Relations = event->relations();
493 Incidence *to; 503 Incidence *to;
494 if ( Relations.first() ) 504 if ( Relations.first() )
495 addTag("b",i18n("Sub todos:<br>")); 505 addTag("b",i18n("Sub todos:<br>"));
496 for (to=Relations.first();to;to=Relations.next()) { 506 for (to=Relations.first();to;to=Relations.next()) {
497 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 507 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
498 508
499 } 509 }
500 if ( KOPrefs::instance()->mEVshowCreated ) { 510 if ( KOPrefs::instance()->mEVshowCreated ) {
501 addTag("p",i18n("<b>Created: ") +" </b>"); 511 addTag("p",i18n("<b>Created: ") +" </b>");
502 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 512 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
503 513
504 } 514 }
505 if ( KOPrefs::instance()->mEVshowChanged ) { 515 if ( KOPrefs::instance()->mEVshowChanged ) {
506 addTag("p",i18n("<b>Last modified: ") +" </b>"); 516 addTag("p",i18n("<b>Last modified: ") +" </b>");
507 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 517 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
508 518
509 } 519 }
510 setText(mText); 520 setText(mText);
511} 521}
512 522
513void KOEventViewer::formatCategories(Incidence *event) 523void KOEventViewer::formatCategories(Incidence *event)
514{ 524{
515 if (!event->categoriesStr().isEmpty()) { 525 if (!event->categoriesStr().isEmpty()) {
516 if (event->categories().count() == 1) { 526 if (event->categories().count() == 1) {
517 addTag("h3",i18n("Category")); 527 addTag("h3",i18n("Category"));
518 } else { 528 } else {
519 addTag("h3",i18n("Categories")); 529 addTag("h3",i18n("Categories"));
520 } 530 }
521 addTag("p",event->categoriesStr()); 531 addTag("p",event->categoriesStr());
522 } 532 }
523} 533}
524void KOEventViewer::formatAttendees(Incidence *event) 534void KOEventViewer::formatAttendees(Incidence *event)
525{ 535{
526 QPtrList<Attendee> attendees = event->attendees(); 536 QPtrList<Attendee> attendees = event->attendees();
527 if (attendees.count()) { 537 if (attendees.count()) {
528 538
529 539
530 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 540 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
531 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 541 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
532 addTag("h3",i18n("Organizer")); 542 addTag("h3",i18n("Organizer"));
533 mText.append("<ul><li>"); 543 mText.append("<ul><li>");
534#ifndef KORG_NOKABC 544#ifndef KORG_NOKABC
535 545
536#ifdef DESKTOP_VERSION 546#ifdef DESKTOP_VERSION
537 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 547 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
538 KABC::Addressee::List addressList; 548 KABC::Addressee::List addressList;
539 addressList = add_book->findByEmail(event->organizer()); 549 addressList = add_book->findByEmail(event->organizer());
540 KABC::Addressee o = addressList.first(); 550 KABC::Addressee o = addressList.first();
541 if (!o.isEmpty() && addressList.size()<2) { 551 if (!o.isEmpty() && addressList.size()<2) {
542 mText += "<a href=\"uid:" + o.uid() + "\">"; 552 mText += "<a href=\"uid:" + o.uid() + "\">";
543 mText += o.formattedName(); 553 mText += o.formattedName();
544 mText += "</a>\n"; 554 mText += "</a>\n";
545 } else { 555 } else {
546 mText.append(event->organizer()); 556 mText.append(event->organizer());
547 } 557 }
548#else //DESKTOP_VERSION 558#else //DESKTOP_VERSION
549 mText += "<a href=\"uid:organizer\">"; 559 mText += "<a href=\"uid:organizer\">";
550 mText += event->organizer(); 560 mText += event->organizer();
551 mText += "</a>\n"; 561 mText += "</a>\n";
552#endif //DESKTOP_VERSION 562#endif //DESKTOP_VERSION
553 563
554 564
555#else 565#else
556 mText.append(event->organizer()); 566 mText.append(event->organizer());
557#endif 567#endif
558 568
559 if (iconPath) { 569 if (iconPath) {
560 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 570 mText += " <a href=\"mailto:" + event->organizer() + "\">";
561 mText += "<IMG src=\"" + iconPath + "\">"; 571 mText += "<IMG src=\"" + iconPath + "\">";
562 mText += "</a>\n"; 572 mText += "</a>\n";
563 } 573 }
564 mText.append("</li></ul>"); 574 mText.append("</li></ul>");
565 575
566 addTag("h3",i18n("Attendees")); 576 addTag("h3",i18n("Attendees"));
567 Attendee *a; 577 Attendee *a;
568 mText.append("<ul>"); 578 mText.append("<ul>");
569 int a_count = 0; 579 int a_count = 0;
570 int a_count_nr = 0; 580 int a_count_nr = 0;
571 581
572 for(a=attendees.first();a;a=attendees.next()) { 582 for(a=attendees.first();a;a=attendees.next()) {
573#ifndef KORG_NOKABC 583#ifndef KORG_NOKABC
574#ifdef DESKTOP_VERSION 584#ifdef DESKTOP_VERSION
575 if (a->name().isEmpty()) { 585 if (a->name().isEmpty()) {
576 addressList = add_book->findByEmail(a->email()); 586 addressList = add_book->findByEmail(a->email());
577 KABC::Addressee o = addressList.first(); 587 KABC::Addressee o = addressList.first();
578 if (!o.isEmpty() && addressList.size()<2) { 588 if (!o.isEmpty() && addressList.size()<2) {
579 mText += "<a href=\"uid:" + o.uid() + "\">"; 589 mText += "<a href=\"uid:" + o.uid() + "\">";
580 mText += o.formattedName(); 590 mText += o.formattedName();
581 mText += "</a>\n"; 591 mText += "</a>\n";
582 } else { 592 } else {
583 mText += "<li>"; 593 mText += "<li>";
584 mText.append(a->email()); 594 mText.append(a->email());
585 mText += "\n"; 595 mText += "\n";
586 } 596 }
587 } else { 597 } else {
588 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 598 mText += "<li><a href=\"uid:" + a->uid() + "\">";
589 if (!a->name().isEmpty()) mText += a->name(); 599 if (!a->name().isEmpty()) mText += a->name();
590 else mText += a->email(); 600 else mText += a->email();
591 mText += "</a>\n"; 601 mText += "</a>\n";
592 } 602 }
593#else //DESKTOP_VERSION 603#else //DESKTOP_VERSION
594 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 604 mText += "<li><a href=\"uid:" + a->uid() + "\">";
595 if (!a->name().isEmpty()) mText += a->name(); 605 if (!a->name().isEmpty()) mText += a->name();
596 else mText += a->email(); 606 else mText += a->email();
597 mText += "</a>\n"; 607 mText += "</a>\n";
598#endif //DESKTOP_VERSION 608#endif //DESKTOP_VERSION
599#else 609#else
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 15e094d..e0e138e 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,286 +1,294 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qwhatsthis.h> 35#include <qwhatsthis.h>
36#include <qregexp.h> 36#include <qregexp.h>
37 37
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42 42
43#include <libkdepim/kpimglobalprefs.h> 43#include <libkdepim/kpimglobalprefs.h>
44#include <libkcal/calendar.h> 44#include <libkcal/calendar.h>
45#include <libkcal/calendarlocal.h> 45#include <libkcal/calendarlocal.h>
46#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
47#include <libkcal/vcalformat.h> 47#include <libkcal/vcalformat.h>
48#include <libkcal/recurrence.h> 48#include <libkcal/recurrence.h>
49#include <libkcal/filestorage.h> 49#include <libkcal/filestorage.h>
50#include <libkdepim/categoryselectdialog.h> 50#include <libkdepim/categoryselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 51#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 52#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 53#include <qpe/qpeapplication.h>
54#else 54#else
55#include <qapplication.h> 55#include <qapplication.h>
56#endif 56#endif
57 57
58#ifndef KORG_NOPRINTER 58#ifndef KORG_NOPRINTER
59#include "calprinter.h" 59#include "calprinter.h"
60#endif 60#endif
61#include "koglobals.h" 61#include "koglobals.h"
62#include "koprefs.h" 62#include "koprefs.h"
63#include "kfiledialog.h" 63#include "kfiledialog.h"
64 64
65#include "kolistview.h" 65#include "kolistview.h"
66 66
67 67
68 68
69 69
70class KOListViewWhatsThis :public QWhatsThis 70class KOListViewWhatsThis :public QWhatsThis
71{ 71{
72public: 72public:
73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
74 74
75protected: 75protected:
76 virtual QString text( const QPoint& p) 76 virtual QString text( const QPoint& p)
77 { 77 {
78 return _view->getWhatsThisText(p) ; 78 return _view->getWhatsThisText(p) ;
79 } 79 }
80private: 80private:
81 QWidget* _wid; 81 QWidget* _wid;
82 KOListView * _view; 82 KOListView * _view;
83}; 83};
84 84
85 85
86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
87{ 87{
88 mItem = item; 88 mItem = item;
89 mDate = date; 89 mDate = date;
90} 90}
91 91
92ListItemVisitor::~ListItemVisitor() 92ListItemVisitor::~ListItemVisitor()
93{ 93{
94} 94}
95 95
96bool ListItemVisitor::visit(Event *e) 96bool ListItemVisitor::visit(Event *e)
97{ 97{
98 98
99 bool ok = false; 99 bool ok = false;
100 QString start, end; 100 QString start, end;
101 QDate ds, de; 101 QDate ds, de;
102 if ( e->doesRecur() ) { 102 if ( e->doesRecur() ) {
103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
104 if ( ok ) { 104 if ( ok ) {
105 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 105 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
106 start = KGlobal::locale()->formatDate(ds,true); 106 start = KGlobal::locale()->formatDate(ds,true);
107 de = ds.addDays( days); 107 de = ds.addDays( days);
108 end = KGlobal::locale()->formatDate(de,true); 108 end = KGlobal::locale()->formatDate(de,true);
109 } 109 }
110 110
111 } 111 }
112 if ( ! ok ) { 112 if ( ! ok ) {
113 start =e->dtStartDateStr(); 113 start =e->dtStartDateStr();
114 end = e->dtEndDateStr(); 114 end = e->dtEndDateStr();
115 ds = e->dtStart().date(); 115 ds = e->dtStart().date();
116 de = e->dtEnd().date(); 116 de = e->dtEnd().date();
117 } 117 }
118 mItem->setText(0,e->summary()); 118 mItem->setText(0,e->summary());
119 mItem->setText(1,start); 119 mItem->setText(1,start);
120 mItem->setText(2,e->dtStartTimeStr()); 120 mItem->setText(2,e->dtStartTimeStr());
121 mItem->setText(3,end); 121 mItem->setText(3,end);
122 mItem->setText(4,e->dtEndTimeStr()); 122 mItem->setText(4,e->dtEndTimeStr());
123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 123 if ( e->isAlarmEnabled() ) {
124 mItem->setText(5,e->alarms().first()->offsetText() );
125 } else {
126 mItem->setText(5, i18n("No"));
127 }
124 mItem->setText(6, e->recurrence()->recurrenceText()); 128 mItem->setText(6, e->recurrence()->recurrenceText());
125 mItem->setText(7,"---"); 129 mItem->setText(7,"---");
126 mItem->setText(8,"---"); 130 mItem->setText(8,"---");
127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 131 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
128 mItem->setText(10,e->categoriesStr()); 132 mItem->setText(10,e->categoriesStr());
129 133
130 QString key; 134 QString key;
131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 135 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 136 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
133 mItem->setSortKey(1,key); 137 mItem->setSortKey(1,key);
134 138
135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 139 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 140 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
137 mItem->setSortKey(3,key); 141 mItem->setSortKey(3,key);
138 142
139 return true; 143 return true;
140} 144}
141 145
142bool ListItemVisitor::visit(Todo *t) 146bool ListItemVisitor::visit(Todo *t)
143{ 147{
144 mItem->setText(0,i18n("Todo: %1").arg(t->summary())); 148 mItem->setText(0,i18n("Todo: %1").arg(t->summary()));
145 if (t->hasStartDate()) { 149 if (t->hasStartDate()) {
146 mItem->setText(1,t->dtStartDateStr()); 150 mItem->setText(1,t->dtStartDateStr());
147 if (t->doesFloat()) { 151 if (t->doesFloat()) {
148 mItem->setText(2,"---"); 152 mItem->setText(2,"---");
149 } else { 153 } else {
150 mItem->setText(2,t->dtStartTimeStr()); 154 mItem->setText(2,t->dtStartTimeStr());
151 } 155 }
152 } else { 156 } else {
153 mItem->setText(1,"---"); 157 mItem->setText(1,"---");
154 mItem->setText(2,"---"); 158 mItem->setText(2,"---");
155 } 159 }
156 mItem->setText(3,"---"); 160 mItem->setText(3,"---");
157 mItem->setText(4,"---"); 161 mItem->setText(4,"---");
158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 162 if ( t->isAlarmEnabled() ) {
163 mItem->setText(5,t->alarms().first()->offsetText() );
164 } else {
165 mItem->setText(5, i18n("No"));
166 }
159 mItem->setText(6, t->recurrence()->recurrenceText()); 167 mItem->setText(6, t->recurrence()->recurrenceText());
160 if (t->hasDueDate()) { 168 if (t->hasDueDate()) {
161 mItem->setText(7,t->dtDueDateStr()); 169 mItem->setText(7,t->dtDueDateStr());
162 if (t->doesFloat()) { 170 if (t->doesFloat()) {
163 mItem->setText(8,"---"); 171 mItem->setText(8,"---");
164 } else { 172 } else {
165 mItem->setText(8,t->dtDueTimeStr()); 173 mItem->setText(8,t->dtDueTimeStr());
166 } 174 }
167 } else { 175 } else {
168 mItem->setText(7,"---"); 176 mItem->setText(7,"---");
169 mItem->setText(8,"---"); 177 mItem->setText(8,"---");
170 } 178 }
171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 179 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
172 mItem->setText(10,t->categoriesStr()); 180 mItem->setText(10,t->categoriesStr());
173 181
174 QString key; 182 QString key;
175 QDate d; 183 QDate d;
176 if (t->hasDueDate()) { 184 if (t->hasDueDate()) {
177 d = t->dtDue().date(); 185 d = t->dtDue().date();
178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 186 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 187 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
180 mItem->setSortKey(7,key); 188 mItem->setSortKey(7,key);
181 } 189 }
182 if ( t->hasStartDate() ) { 190 if ( t->hasStartDate() ) {
183 d = t->dtStart().date(); 191 d = t->dtStart().date();
184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 192 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 193 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
186 mItem->setSortKey(1,key); 194 mItem->setSortKey(1,key);
187 } 195 }
188 return true; 196 return true;
189} 197}
190 198
191bool ListItemVisitor::visit(Journal * j) 199bool ListItemVisitor::visit(Journal * j)
192{ 200{
193 QString des = j->description().left(30); 201 QString des = j->description().left(30);
194 des = des.simplifyWhiteSpace (); 202 des = des.simplifyWhiteSpace ();
195 des.replace (QRegExp ("\\n"),"" ); 203 des.replace (QRegExp ("\\n"),"" );
196 des.replace (QRegExp ("\\r"),"" ); 204 des.replace (QRegExp ("\\r"),"" );
197 mItem->setText(0,i18n("Journal: ")+des.left(25)); 205 mItem->setText(0,i18n("Journal: ")+des.left(25));
198 mItem->setText(1,j->dtStartDateStr()); 206 mItem->setText(1,j->dtStartDateStr());
199 mItem->setText(2,"---"); 207 mItem->setText(2,"---");
200 mItem->setText(3,"---"); 208 mItem->setText(3,"---");
201 mItem->setText(4,"---"); 209 mItem->setText(4,"---");
202 mItem->setText(5,"---"); 210 mItem->setText(5,"---");
203 mItem->setText(6,"---"); 211 mItem->setText(6,"---");
204 mItem->setText(7,j->dtStartDateStr()); 212 mItem->setText(7,j->dtStartDateStr());
205 mItem->setText(8,"---"); 213 mItem->setText(8,"---");
206 mItem->setText(9,"---"); 214 mItem->setText(9,"---");
207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 215 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
208 216
209 QString key; 217 QString key;
210 QDate d = j->dtStart().date(); 218 QDate d = j->dtStart().date();
211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 219 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
212 mItem->setSortKey(1,key); 220 mItem->setSortKey(1,key);
213 mItem->setSortKey(7,key); 221 mItem->setSortKey(7,key);
214 222
215 return true; 223 return true;
216} 224}
217 225
218KOListView::KOListView(Calendar *calendar, QWidget *parent, 226KOListView::KOListView(Calendar *calendar, QWidget *parent,
219 const char *name) 227 const char *name)
220 : KOEventView(calendar, parent, name) 228 : KOEventView(calendar, parent, name)
221{ 229{
222 mActiveItem = 0; 230 mActiveItem = 0;
223 mListView = new KOListViewListView(this); 231 mListView = new KOListViewListView(this);
224 mListView->addColumn(i18n("Summary")); 232 mListView->addColumn(i18n("Summary"));
225 mListView->addColumn(i18n("Start Date")); 233 mListView->addColumn(i18n("Start Date"));
226 mListView->addColumn(i18n("Start Time")); 234 mListView->addColumn(i18n("Start Time"));
227 mListView->addColumn(i18n("End Date")); 235 mListView->addColumn(i18n("End Date"));
228 mListView->addColumn(i18n("End Time")); 236 mListView->addColumn(i18n("End Time"));
229 mListView->addColumn(i18n("Alarm")); // alarm set? 237 mListView->addColumn(i18n("Alarm")); // alarm set?
230 mListView->addColumn(i18n("Recurs")); // recurs? 238 mListView->addColumn(i18n("Recurs")); // recurs?
231 mListView->addColumn(i18n("Due Date")); 239 mListView->addColumn(i18n("Due Date"));
232 mListView->addColumn(i18n("Due Time")); 240 mListView->addColumn(i18n("Due Time"));
233 mListView->addColumn(i18n("Cancelled")); 241 mListView->addColumn(i18n("Cancelled"));
234 mListView->addColumn(i18n("Categories")); 242 mListView->addColumn(i18n("Categories"));
235 243
236 mListView->setColumnAlignment(0,AlignLeft); 244 mListView->setColumnAlignment(0,AlignLeft);
237 mListView->setColumnAlignment(1,AlignLeft); 245 mListView->setColumnAlignment(1,AlignLeft);
238 mListView->setColumnAlignment(2,AlignHCenter); 246 mListView->setColumnAlignment(2,AlignHCenter);
239 mListView->setColumnAlignment(3,AlignLeft); 247 mListView->setColumnAlignment(3,AlignLeft);
240 mListView->setColumnAlignment(4,AlignHCenter); 248 mListView->setColumnAlignment(4,AlignHCenter);
241 mListView->setColumnAlignment(5,AlignLeft); 249 mListView->setColumnAlignment(5,AlignLeft);
242 mListView->setColumnAlignment(6,AlignLeft); 250 mListView->setColumnAlignment(6,AlignLeft);
243 mListView->setColumnAlignment(7,AlignLeft); 251 mListView->setColumnAlignment(7,AlignLeft);
244 mListView->setColumnAlignment(8,AlignLeft); 252 mListView->setColumnAlignment(8,AlignLeft);
245 mListView->setColumnAlignment(9,AlignLeft); 253 mListView->setColumnAlignment(9,AlignLeft);
246 mListView->setColumnAlignment(10,AlignLeft); 254 mListView->setColumnAlignment(10,AlignLeft);
247 mListView->setColumnWidthMode(10, QListView::Manual); 255 mListView->setColumnWidthMode(10, QListView::Manual);
248 new KOListViewWhatsThis(mListView->viewport(),this); 256 new KOListViewWhatsThis(mListView->viewport(),this);
249 257
250 int iii = 0; 258 int iii = 0;
251 for ( iii = 0; iii< 10 ; ++iii ) 259 for ( iii = 0; iii< 10 ; ++iii )
252 mListView->setColumnWidthMode( iii, QListView::Manual ); 260 mListView->setColumnWidthMode( iii, QListView::Manual );
253 261
254 QBoxLayout *layoutTop = new QVBoxLayout(this); 262 QBoxLayout *layoutTop = new QVBoxLayout(this);
255 layoutTop->addWidget(mListView); 263 layoutTop->addWidget(mListView);
256 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 264 mListView->setFont ( KOPrefs::instance()->mListViewFont );
257 mPopupMenu = eventPopup(); 265 mPopupMenu = eventPopup();
258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 266 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
259 i18n("Select all"),this, 267 i18n("Select all"),this,
260 SLOT(allSelection()),true); 268 SLOT(allSelection()),true);
261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 269 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
262 i18n("Deselect all"),this, 270 i18n("Deselect all"),this,
263 SLOT(clearSelection()),true); 271 SLOT(clearSelection()),true);
264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 272 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
265 i18n("Delete all selected"),this, 273 i18n("Delete all selected"),this,
266 SLOT(deleteAll()),true); 274 SLOT(deleteAll()),true);
267 mPopupMenu->insertSeparator(); 275 mPopupMenu->insertSeparator();
268 QPopupMenu * exportPO = new QPopupMenu ( this ); 276 QPopupMenu * exportPO = new QPopupMenu ( this );
269 mPopupMenu->insertItem( i18n("Export selected"), exportPO ); 277 mPopupMenu->insertItem( i18n("Export selected"), exportPO );
270 exportPO->insertItem( i18n("As iCal (ics) file..."),this, 278 exportPO->insertItem( i18n("As iCal (ics) file..."),this,
271 SLOT(saveToFile())); 279 SLOT(saveToFile()));
272 exportPO->insertItem( i18n("As vCal (vcs) file..."),this, 280 exportPO->insertItem( i18n("As vCal (vcs) file..."),this,
273 SLOT(saveToFileVCS())); 281 SLOT(saveToFileVCS()));
274 exportPO->insertItem( i18n("Journal/Details..."),this, 282 exportPO->insertItem( i18n("Journal/Details..."),this,
275 SLOT(saveDescriptionToFile())); 283 SLOT(saveDescriptionToFile()));
276 // mPopupMenu->insertSeparator(); 284 // mPopupMenu->insertSeparator();
277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 285 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
278 i18n("Add Categ. to selected..."),this, 286 i18n("Add Categ. to selected..."),this,
279 SLOT(addCat()),true); 287 SLOT(addCat()),true);
280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 288 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
281 i18n("Set Categ. for selected..."),this, 289 i18n("Set Categ. for selected..."),this,
282 SLOT(setCat()),true); 290 SLOT(setCat()),true);
283 //mPopupMenu->insertSeparator(); 291 //mPopupMenu->insertSeparator();
284 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 292 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
285 i18n("Set alarm for selected..."),this, 293 i18n("Set alarm for selected..."),this,
286 SLOT(setAlarm()),true); 294 SLOT(setAlarm()),true);
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 0a315cb..01cf0ff 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -93,260 +93,262 @@ KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
93} 93}
94 94
95void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 95void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
96{ 96{
97#ifndef KORG_NODND 97#ifndef KORG_NODND
98// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 98// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
99 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 99 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
100 !QTextDrag::canDecode( e ) ) { 100 !QTextDrag::canDecode( e ) ) {
101 e->ignore(); 101 e->ignore();
102 return; 102 return;
103 } 103 }
104 104
105 mOldCurrent = currentItem(); 105 mOldCurrent = currentItem();
106#endif 106#endif
107} 107}
108 108
109 109
110void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 110void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
111{ 111{
112#ifndef KORG_NODND 112#ifndef KORG_NODND
113// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 113// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
114 114
115 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 115 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
116 !QTextDrag::canDecode( e ) ) { 116 !QTextDrag::canDecode( e ) ) {
117 e->ignore(); 117 e->ignore();
118 return; 118 return;
119 } 119 }
120 120
121 e->accept(); 121 e->accept();
122#endif 122#endif
123} 123}
124 124
125void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 125void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
126{ 126{
127#ifndef KORG_NODND 127#ifndef KORG_NODND
128// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 128// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
129 129
130 setCurrentItem(mOldCurrent); 130 setCurrentItem(mOldCurrent);
131 setSelected(mOldCurrent,true); 131 setSelected(mOldCurrent,true);
132#endif 132#endif
133} 133}
134 134
135void KOTodoListView::contentsDropEvent(QDropEvent *e) 135void KOTodoListView::contentsDropEvent(QDropEvent *e)
136{ 136{
137#ifndef KORG_NODND 137#ifndef KORG_NODND
138// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 138// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
139 139
140 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 140 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
141 !QTextDrag::canDecode( e ) ) { 141 !QTextDrag::canDecode( e ) ) {
142 e->ignore(); 142 e->ignore();
143 return; 143 return;
144 } 144 }
145 145
146 DndFactory factory( mCalendar ); 146 DndFactory factory( mCalendar );
147 Todo *todo = factory.createDropTodo(e); 147 Todo *todo = factory.createDropTodo(e);
148 148
149 if (todo) { 149 if (todo) {
150 e->acceptAction(); 150 e->acceptAction();
151 151
152 KOTodoViewItem *destination = 152 KOTodoViewItem *destination =
153 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 153 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
154 Todo *destinationEvent = 0; 154 Todo *destinationEvent = 0;
155 if (destination) destinationEvent = destination->todo(); 155 if (destination) destinationEvent = destination->todo();
156 156
157 Todo *existingTodo = mCalendar->todo(todo->uid()); 157 Todo *existingTodo = mCalendar->todo(todo->uid());
158 158
159 if(existingTodo) { 159 if(existingTodo) {
160 Incidence *to = destinationEvent; 160 Incidence *to = destinationEvent;
161 while(to) { 161 while(to) {
162 if (to->uid() == todo->uid()) { 162 if (to->uid() == todo->uid()) {
163 KMessageBox::sorry(this, 163 KMessageBox::sorry(this,
164 i18n("Cannot move To-Do to itself\nor a child of itself"), 164 i18n("Cannot move To-Do to itself\nor a child of itself"),
165 i18n("Drop To-Do")); 165 i18n("Drop To-Do"));
166 delete todo; 166 delete todo;
167 return; 167 return;
168 } 168 }
169 to = to->relatedTo(); 169 to = to->relatedTo();
170 } 170 }
171 internalDrop = true; 171 internalDrop = true;
172 if ( destinationEvent ) 172 if ( destinationEvent )
173 reparentTodoSignal( destinationEvent, existingTodo ); 173 reparentTodoSignal( destinationEvent, existingTodo );
174 else 174 else
175 unparentTodoSignal(existingTodo); 175 unparentTodoSignal(existingTodo);
176 delete todo; 176 delete todo;
177 } else { 177 } else {
178 mCalendar->addTodo(todo); 178 mCalendar->addTodo(todo);
179 emit todoDropped(todo, KOGlobals::EVENTADDED); 179 emit todoDropped(todo, KOGlobals::EVENTADDED);
180 if ( destinationEvent ) 180 if ( destinationEvent )
181 reparentTodoSignal( destinationEvent, todo ); 181 reparentTodoSignal( destinationEvent, todo );
182 } 182 }
183 } 183 }
184 else { 184 else {
185 QString text; 185 QString text;
186 if (QTextDrag::decode(e,text)) { 186 if (QTextDrag::decode(e,text)) {
187 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 187 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
188 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 188 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
189 qDebug("Dropped : " + text); 189 qDebug("Dropped : " + text);
190 QStringList emails = QStringList::split(",",text); 190 QStringList emails = QStringList::split(",",text);
191 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 191 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
192 int pos = (*it).find("<"); 192 int pos = (*it).find("<");
193 QString name = (*it).left(pos); 193 QString name = (*it).left(pos);
194 QString email = (*it).mid(pos); 194 QString email = (*it).mid(pos);
195 if (!email.isEmpty() && todoi) { 195 if (!email.isEmpty() && todoi) {
196 todoi->todo()->addAttendee(new Attendee(name,email)); 196 todoi->todo()->addAttendee(new Attendee(name,email));
197 } 197 }
198 } 198 }
199 } 199 }
200 else { 200 else {
201 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); 201 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable ");
202 e->ignore(); 202 e->ignore();
203 } 203 }
204 } 204 }
205#endif 205#endif
206} 206}
207 207
208void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 208void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
209{ 209{
210 210
211 QPoint p(contentsToViewport(e->pos())); 211 QPoint p(contentsToViewport(e->pos()));
212 QListViewItem *i = itemAt(p); 212 QListViewItem *i = itemAt(p);
213 bool rootClicked = true; 213 bool rootClicked = true;
214 if (i) { 214 if (i) {
215 // if the user clicked into the root decoration of the item, don't 215 // if the user clicked into the root decoration of the item, don't
216 // try to start a drag! 216 // try to start a drag!
217 int X = p.x(); 217 int X = p.x();
218 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); 218 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() );
219 if (X > header()->sectionPos(0) + 219 if (X > header()->sectionPos(0) +
220 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 220 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
221 itemMargin() || 221 itemMargin() +i->height()||
222 X < header()->sectionPos(0)) { 222 X < header()->sectionPos(0)) {
223 rootClicked = false; 223 rootClicked = false;
224 } 224 }
225 } else {
226 rootClicked = false;
225 } 227 }
226#ifndef KORG_NODND 228#ifndef KORG_NODND
227 mMousePressed = false; 229 mMousePressed = false;
228 if (! rootClicked ) { 230 if (! rootClicked ) {
229 mPressPos = e->pos(); 231 mPressPos = e->pos();
230 mMousePressed = true; 232 mMousePressed = true;
231 } 233 }
232#endif 234#endif
233 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); 235 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked);
234#ifndef DESKTOP_VERSION 236#ifndef DESKTOP_VERSION
235 if (!( e->button() == RightButton && rootClicked) ) 237 if (!( e->button() == RightButton && rootClicked) )
236 QListView::contentsMousePressEvent(e); 238 QListView::contentsMousePressEvent(e);
237#else 239#else
238 QListView::contentsMousePressEvent(e); 240 QListView::contentsMousePressEvent(e);
239#endif 241#endif
240} 242}
241void KOTodoListView::paintEvent(QPaintEvent* e) 243void KOTodoListView::paintEvent(QPaintEvent* e)
242{ 244{
243 emit paintNeeded(); 245 emit paintNeeded();
244 QListView::paintEvent( e); 246 QListView::paintEvent( e);
245} 247}
246void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 248void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
247{ 249{
248 250
249#ifndef KORG_NODND 251#ifndef KORG_NODND
250 //QListView::contentsMouseMoveEvent(e); 252 //QListView::contentsMouseMoveEvent(e);
251 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 253 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
252 QApplication::startDragDistance()*3) { 254 QApplication::startDragDistance()*3) {
253 mMousePressed = false; 255 mMousePressed = false;
254 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 256 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
255 if (item) { 257 if (item) {
256 DndFactory factory( mCalendar ); 258 DndFactory factory( mCalendar );
257 ICalDrag *vd = factory.createDrag( 259 ICalDrag *vd = factory.createDrag(
258 ((KOTodoViewItem *)item)->todo(),viewport()); 260 ((KOTodoViewItem *)item)->todo(),viewport());
259 internalDrop = false; 261 internalDrop = false;
260 // we cannot do any senseful here, because the DnD is still broken in Qt 262 // we cannot do any senseful here, because the DnD is still broken in Qt
261 if (vd->drag()) { 263 if (vd->drag()) {
262 if ( !internalDrop ) { 264 if ( !internalDrop ) {
263 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); 265 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() );
264 qDebug("Dnd: External move: Delete drag source "); 266 qDebug("Dnd: External move: Delete drag source ");
265 } else 267 } else
266 qDebug("Dnd: Internal move "); 268 qDebug("Dnd: Internal move ");
267 269
268 } else { 270 } else {
269 if ( !internalDrop ) { 271 if ( !internalDrop ) {
270 qDebug("Dnd: External Copy"); 272 qDebug("Dnd: External Copy");
271 } else 273 } else
272 qDebug("DnD: Internal copy: Copy pending"); 274 qDebug("DnD: Internal copy: Copy pending");
273 } 275 }
274 } 276 }
275 } 277 }
276#endif 278#endif
277} 279}
278void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) 280void KOTodoListView::keyReleaseEvent ( QKeyEvent *e )
279{ 281{
280 if ( !e->isAutoRepeat() ) { 282 if ( !e->isAutoRepeat() ) {
281 mFlagKeyPressed = false; 283 mFlagKeyPressed = false;
282 } 284 }
283} 285}
284 286
285 287
286void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 288void KOTodoListView::keyPressEvent ( QKeyEvent * e )
287{ 289{
288 qApp->processEvents(); 290 qApp->processEvents();
289 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 291 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
290 e->ignore(); 292 e->ignore();
291 // qDebug(" ignore %d",e->isAutoRepeat() ); 293 // qDebug(" ignore %d",e->isAutoRepeat() );
292 return; 294 return;
293 } 295 }
294 if (! e->isAutoRepeat() ) 296 if (! e->isAutoRepeat() )
295 mFlagKeyPressed = true; 297 mFlagKeyPressed = true;
296 QListViewItem* cn; 298 QListViewItem* cn;
297 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 299 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
298 cn = currentItem(); 300 cn = currentItem();
299 if ( cn ) { 301 if ( cn ) {
300 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 302 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
301 if ( ci ){ 303 if ( ci ){
302 if ( e->state() == ShiftButton ) 304 if ( e->state() == ShiftButton )
303 ci->setOn( false ); 305 ci->setOn( false );
304 else 306 else
305 ci->setOn( true ); 307 ci->setOn( true );
306 cn = cn->itemBelow(); 308 cn = cn->itemBelow();
307 if ( cn ) { 309 if ( cn ) {
308 setCurrentItem ( cn ); 310 setCurrentItem ( cn );
309 ensureItemVisible ( cn ); 311 ensureItemVisible ( cn );
310 } 312 }
311 313
312 } 314 }
313 } 315 }
314 316
315 return; 317 return;
316 } 318 }
317 319
318 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 320 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
319 switch ( e->key() ) { 321 switch ( e->key() ) {
320 case Qt::Key_Down: 322 case Qt::Key_Down:
321 case Qt::Key_Up: 323 case Qt::Key_Up:
322 QListView::keyPressEvent ( e ); 324 QListView::keyPressEvent ( e );
323 break; 325 break;
324 case Qt::Key_Left: 326 case Qt::Key_Left:
325 case Qt::Key_Right: 327 case Qt::Key_Right:
326 QListView::keyPressEvent ( e ); 328 QListView::keyPressEvent ( e );
327 e->accept(); 329 e->accept();
328 return; 330 return;
329 break; 331 break;
330 default: 332 default:
331 e->ignore(); 333 e->ignore();
332 break; 334 break;
333 } 335 }
334 return; 336 return;
335 } 337 }
336 e->ignore(); 338 e->ignore();
337} 339}
338void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 340void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
339{ 341{
340 QListView::contentsMouseReleaseEvent(e); 342 QListView::contentsMouseReleaseEvent(e);
341 mMousePressed = false; 343 mMousePressed = false;
342} 344}
343 345
344void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 346void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
345{ 347{
346 if (!e) return; 348 if (!e) return;
347 349
348 QPoint vp = contentsToViewport(e->pos()); 350 QPoint vp = contentsToViewport(e->pos());
349 351
350 QListViewItem *item = itemAt(vp); 352 QListViewItem *item = itemAt(vp);
351 353
352 emit double_Clicked(item); 354 emit double_Clicked(item);
@@ -605,289 +607,289 @@ void KOTodoView::paintNeeded()
605 } 607 }
606} 608}
607void KOTodoView::paintEvent(QPaintEvent * pevent) 609void KOTodoView::paintEvent(QPaintEvent * pevent)
608{ 610{
609 if ( mPendingUpdateBeforeRepaint ) { 611 if ( mPendingUpdateBeforeRepaint ) {
610 updateView(); 612 updateView();
611 mPendingUpdateBeforeRepaint = false; 613 mPendingUpdateBeforeRepaint = false;
612 } 614 }
613 KOrg::BaseView::paintEvent( pevent); 615 KOrg::BaseView::paintEvent( pevent);
614} 616}
615 617
616void KOTodoView::updateView() 618void KOTodoView::updateView()
617{ 619{
618 pendingSubtodo = 0; 620 pendingSubtodo = 0;
619 if ( mBlockUpdate ) { 621 if ( mBlockUpdate ) {
620 return; 622 return;
621 } 623 }
622 if ( !isVisible() ) { 624 if ( !isVisible() ) {
623 mPendingUpdateBeforeRepaint = true; 625 mPendingUpdateBeforeRepaint = true;
624 return; 626 return;
625 } 627 }
626 storeCurrentItem(); 628 storeCurrentItem();
627 //qDebug("KOTodoView::updateView() %x", this); 629 //qDebug("KOTodoView::updateView() %x", this);
628 if ( isFlatDisplay ) { 630 if ( isFlatDisplay ) {
629 displayAllFlat(); 631 displayAllFlat();
630 resetCurrentItem(); 632 resetCurrentItem();
631 return; 633 return;
632 } 634 }
633 //qDebug("update "); 635 //qDebug("update ");
634// kdDebug() << "KOTodoView::updateView()" << endl; 636// kdDebug() << "KOTodoView::updateView()" << endl;
635 QFont fo = KOPrefs::instance()->mTodoViewFont; 637 QFont fo = KOPrefs::instance()->mTodoViewFont;
636 638
637 639
638 mTodoListView->clear(); 640 mTodoListView->clear();
639 if ( mName == "todolistsmall" ) { 641 if ( mName == "todolistsmall" ) {
640 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 642 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
641 int ps = fo.pointSize() -2; 643 int ps = fo.pointSize() -2;
642 if ( ps > 12 ) 644 if ( ps > 12 )
643 ps -= 2; 645 ps -= 2;
644 fo.setPointSize( ps ); 646 fo.setPointSize( ps );
645 } 647 }
646 } 648 }
647 649
648 mTodoListView->setFont( fo ); 650 mTodoListView->setFont( fo );
649 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 651 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
650 //mTodoListView->header()->setMaximumHeight(fm.height()); 652 //mTodoListView->header()->setMaximumHeight(fm.height());
651 QPtrList<Todo> todoList = calendar()->todos(); 653 QPtrList<Todo> todoList = calendar()->todos();
652 654
653/* 655/*
654 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 656 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
655 Event *t; 657 Event *t;
656 for(t = todoList.first(); t; t = todoList.next()) { 658 for(t = todoList.first(); t; t = todoList.next()) {
657 kdDebug() << " " << t->getSummary() << endl; 659 kdDebug() << " " << t->getSummary() << endl;
658 660
659 if (t->getRelatedTo()) { 661 if (t->getRelatedTo()) {
660 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 662 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
661 } 663 }
662 664
663 QPtrList<Event> l = t->getRelations(); 665 QPtrList<Event> l = t->getRelations();
664 Event *c; 666 Event *c;
665 for(c=l.first();c;c=l.next()) { 667 for(c=l.first();c;c=l.next()) {
666 kdDebug() << " - relation: " << c->getSummary() << endl; 668 kdDebug() << " - relation: " << c->getSummary() << endl;
667 } 669 }
668 } 670 }
669*/ 671*/
670 672
671 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 673 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
672 // specific order of events. That means that we have to generate parent items 674 // specific order of events. That means that we have to generate parent items
673 // recursively for proper hierarchical display of Todos. 675 // recursively for proper hierarchical display of Todos.
674 mTodoMap.clear(); 676 mTodoMap.clear();
675 Todo *todo; 677 Todo *todo;
676 todo = todoList.first();// todo; todo = todoList.next()) { 678 todo = todoList.first();// todo; todo = todoList.next()) {
677 while ( todo ) { 679 while ( todo ) {
678 bool next = true; 680 bool next = true;
679 // qDebug("todo %s ", todo->summary().latin1()); 681 // qDebug("todo %s ", todo->summary().latin1());
680 Incidence *incidence = todo->relatedTo(); 682 Incidence *incidence = todo->relatedTo();
681 while ( incidence ) { 683 while ( incidence ) {
682 if ( incidence->type() == "Todo") { 684 if ( incidence->type() == "Todo") {
683 //qDebug("related %s ",incidence->summary().latin1() ); 685 //qDebug("related %s ",incidence->summary().latin1() );
684 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 686 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
685 //qDebug("related not found "); 687 //qDebug("related not found ");
686 todoList.remove( ); 688 todoList.remove( );
687 todo = todoList.current(); 689 todo = todoList.current();
688 next = false; 690 next = false;
689 incidence = 0; 691 incidence = 0;
690 692
691 } else { 693 } else {
692 //qDebug("related found "); 694 //qDebug("related found ");
693 incidence = incidence->relatedTo(); 695 incidence = incidence->relatedTo();
694 } 696 }
695 } else 697 } else
696 incidence = 0; 698 incidence = 0;
697 } 699 }
698 if ( next ) 700 if ( next )
699 todo = todoList.next(); 701 todo = todoList.next();
700 } 702 }
701// qDebug("again .... "); 703// qDebug("again .... ");
702// for(todo = todoList.first(); todo; todo = todoList.next()) { 704// for(todo = todoList.first(); todo; todo = todoList.next()) {
703 705
704// qDebug("yytodo %s ", todo->summary().latin1()); 706// qDebug("yytodo %s ", todo->summary().latin1());
705// } 707// }
706 //qDebug("for "); 708 //qDebug("for ");
707 for(todo = todoList.first(); todo; todo = todoList.next()) { 709 for(todo = todoList.first(); todo; todo = todoList.next()) {
708 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 710 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
709 { 711 {
710 insertTodoItem(todo); 712 insertTodoItem(todo);
711 } 713 }
712 } 714 }
713 //qDebug("for end "); 715 //qDebug("for end ");
714 // Restore opened/closed state 716 // Restore opened/closed state
715 mTodoListView->blockSignals( true ); 717 mTodoListView->blockSignals( true );
716 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 718 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
717 mTodoListView->blockSignals( false ); 719 mTodoListView->blockSignals( false );
718 resetCurrentItem(); 720 resetCurrentItem();
719 processSelectionChange(); 721 processSelectionChange();
720} 722}
721 723
722void KOTodoView::storeCurrentItem() 724void KOTodoView::storeCurrentItem()
723{ 725{
724 mCurItem = 0; 726 mCurItem = 0;
725 mCurItemRootParent = 0; 727 mCurItemRootParent = 0;
726 mCurItemAbove = 0; 728 mCurItemAbove = 0;
727 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 729 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
728 if (mActiveItem) { 730 if (mActiveItem) {
729 mCurItem = mActiveItem->todo(); 731 mCurItem = mActiveItem->todo();
730 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove (); 732 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove ();
731 if ( activeItemAbove ) 733 if ( activeItemAbove )
732 mCurItemAbove = activeItemAbove->todo(); 734 mCurItemAbove = activeItemAbove->todo();
733 while ( mActiveItem->parent() != 0 ) 735 mCurItemRootParent = mCurItem;
734 mActiveItem = (KOTodoViewItem*)mActiveItem->parent(); 736 while ( mCurItemRootParent->relatedTo() != 0 )
735 mCurItemRootParent = mActiveItem->todo(); 737 mCurItemRootParent = mCurItemRootParent->relatedTo();
736 } 738 }
737 mActiveItem = 0; 739 mActiveItem = 0;
738} 740}
739 741
740void KOTodoView::resetCurrentItem() 742void KOTodoView::resetCurrentItem()
741{ 743{
742 mTodoListView->setFocus(); 744 mTodoListView->setFocus();
743 KOTodoViewItem* foundItem = 0; 745 KOTodoViewItem* foundItem = 0;
744 KOTodoViewItem* foundItemRoot = 0; 746 KOTodoViewItem* foundItemRoot = 0;
745 KOTodoViewItem* foundItemAbove = 0; 747 KOTodoViewItem* foundItemAbove = 0;
746 if ( mTodoListView->firstChild () ) { 748 if ( mTodoListView->firstChild () ) {
747 if ( mCurItem ) { 749 if ( mCurItem ) {
748 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild (); 750 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild ();
749 while ( item ) { 751 while ( item ) {
750 if ( item->todo() == mCurItem ) { 752 if ( item->todo() == mCurItem ) {
751 foundItem = item; 753 foundItem = item;
752 break; 754 break;
753 } else if ( item->todo() == mCurItemAbove ) { 755 } else if ( item->todo() == mCurItemAbove ) {
754 foundItemAbove = item; 756 foundItemAbove = item;
755 757
756 } else if ( item->todo() == mCurItemRootParent ) { 758 } else if ( item->todo() == mCurItemRootParent ) {
757 foundItemRoot = item; 759 foundItemRoot = item;
758 } 760 }
759 item = (KOTodoViewItem*)item->itemBelow(); 761 item = (KOTodoViewItem*)item->itemBelow();
760 } 762 }
761 if ( ! foundItem ) { 763 if ( ! foundItem ) {
762 if ( foundItemAbove ) 764 if ( foundItemRoot )
763 foundItem = foundItemAbove;
764 else
765 foundItem = foundItemRoot; 765 foundItem = foundItemRoot;
766 else
767 foundItem = foundItemAbove;
766 } 768 }
767 } 769 }
768 if ( foundItem ) { 770 if ( foundItem ) {
769 mTodoListView->setCurrentItem( foundItem ); 771 mTodoListView->setCurrentItem( foundItem );
770 mTodoListView->ensureItemVisible( foundItem ); 772 mTodoListView->ensureItemVisible( foundItem );
771 } else { 773 } else {
772 mTodoListView->setCurrentItem( mTodoListView->firstChild () ); 774 mTodoListView->setCurrentItem( mTodoListView->firstChild () );
773 } 775 }
774 } 776 }
775 mTodoListView->setFocus(); 777 mTodoListView->setFocus();
776} 778}
777//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove; 779//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove;
778bool KOTodoView::checkTodo( Todo * todo ) 780bool KOTodoView::checkTodo( Todo * todo )
779{ 781{
780 782
781 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 783 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
782 return false; 784 return false;
783 if ( !todo->isCompleted() ) { 785 if ( !todo->isCompleted() ) {
784 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() ) 786 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() )
785 return true; 787 return true;
786 } 788 }
787 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 789 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
788 if ( todo->hasStartDate() ) 790 if ( todo->hasStartDate() )
789 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 791 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
790 return false; 792 return false;
791 if ( todo->hasDueDate() ) 793 if ( todo->hasDueDate() )
792 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 794 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
793 return false; 795 return false;
794 } 796 }
795 return true; 797 return true;
796} 798}
797 799
798void KOTodoView::restoreItemState( QListViewItem *item ) 800void KOTodoView::restoreItemState( QListViewItem *item )
799{ 801{
800 pendingSubtodo = 0; 802 pendingSubtodo = 0;
801 while( item ) { 803 while( item ) {
802 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 804 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
803 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 805 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
804 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 806 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
805 item = item->nextSibling(); 807 item = item->nextSibling();
806 } 808 }
807} 809}
808 810
809 811
810QMap<Todo *,KOTodoViewItem *>::ConstIterator 812QMap<Todo *,KOTodoViewItem *>::ConstIterator
811 KOTodoView::insertTodoItem(Todo *todo) 813 KOTodoView::insertTodoItem(Todo *todo)
812{ 814{
813 815
814// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 816// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
815 // TODO: Check, if dynmaic cast is necessary 817 // TODO: Check, if dynmaic cast is necessary
816 818
817 pendingSubtodo = 0; 819 pendingSubtodo = 0;
818 Incidence *incidence = todo->relatedTo(); 820 Incidence *incidence = todo->relatedTo();
819 if (incidence && incidence->type() == "Todo") { 821 if (incidence && incidence->type() == "Todo") {
820 Todo *relatedTodo = static_cast<Todo *>(incidence); 822 Todo *relatedTodo = static_cast<Todo *>(incidence);
821 823
822// kdDebug() << " has Related" << endl; 824// kdDebug() << " has Related" << endl;
823 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 825 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
824 itemIterator = mTodoMap.find(relatedTodo); 826 itemIterator = mTodoMap.find(relatedTodo);
825 if (itemIterator == mTodoMap.end()) { 827 if (itemIterator == mTodoMap.end()) {
826// kdDebug() << " related not yet in list" << endl; 828// kdDebug() << " related not yet in list" << endl;
827 itemIterator = insertTodoItem (relatedTodo); 829 itemIterator = insertTodoItem (relatedTodo);
828 } 830 }
829 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 831 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
830 // and one into the map. Sure finding is more easy but why? -zecke 832 // and one into the map. Sure finding is more easy but why? -zecke
831 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 833 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
832 return mTodoMap.insert(todo,todoItem); 834 return mTodoMap.insert(todo,todoItem);
833 } else { 835 } else {
834// kdDebug() << " no Related" << endl; 836// kdDebug() << " no Related" << endl;
835 // see above -zecke 837 // see above -zecke
836 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 838 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
837 return mTodoMap.insert(todo,todoItem); 839 return mTodoMap.insert(todo,todoItem);
838 } 840 }
839} 841}
840 842
841 843
842void KOTodoView::updateConfig() 844void KOTodoView::updateConfig()
843{ 845{
844 updateView(); 846 updateView();
845 mTodoListView->repaintContents(); 847 mTodoListView->repaintContents();
846} 848}
847 849
848QPtrList<Incidence> KOTodoView::selectedIncidences() 850QPtrList<Incidence> KOTodoView::selectedIncidences()
849{ 851{
850 QPtrList<Incidence> selected; 852 QPtrList<Incidence> selected;
851 853
852 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 854 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
853// if (!item) item = mActiveItem; 855// if (!item) item = mActiveItem;
854 if (item) selected.append(item->todo()); 856 if (item) selected.append(item->todo());
855 857
856 return selected; 858 return selected;
857} 859}
858 860
859QPtrList<Todo> KOTodoView::selectedTodos() 861QPtrList<Todo> KOTodoView::selectedTodos()
860{ 862{
861 QPtrList<Todo> selected; 863 QPtrList<Todo> selected;
862 864
863 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 865 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
864// if (!item) item = mActiveItem; 866// if (!item) item = mActiveItem;
865 if (item) selected.append(item->todo()); 867 if (item) selected.append(item->todo());
866 868
867 return selected; 869 return selected;
868} 870}
869 871
870void KOTodoView::changeEventDisplay(Event *, int) 872void KOTodoView::changeEventDisplay(Event *, int)
871{ 873{
872 updateView(); 874 updateView();
873} 875}
874 876
875void KOTodoView::showDates(const QDate &, const QDate &) 877void KOTodoView::showDates(const QDate &, const QDate &)
876{ 878{
877} 879}
878 880
879void KOTodoView::showEvents(QPtrList<Event>) 881void KOTodoView::showEvents(QPtrList<Event>)
880{ 882{
881 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 883 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
882} 884}
883 885
884void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 886void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
885 const QDate &td) 887 const QDate &td)
886{ 888{
887#ifndef KORG_NOPRINTER 889#ifndef KORG_NOPRINTER
888 calPrinter->preview(CalPrinter::Todolist, fd, td); 890 calPrinter->preview(CalPrinter::Todolist, fd, td);
889#endif 891#endif
890} 892}
891 893
892void KOTodoView::editItem(QListViewItem *item ) 894void KOTodoView::editItem(QListViewItem *item )
893{ 895{
@@ -1080,307 +1082,315 @@ void KOTodoView::itemDoubleClicked(QListViewItem *item)
1080 newTodo(); 1082 newTodo();
1081 return; 1083 return;
1082 } else { 1084 } else {
1083 if ( row == 1 ) { 1085 if ( row == 1 ) {
1084 mActiveItem = (KOTodoViewItem *) item; 1086 mActiveItem = (KOTodoViewItem *) item;
1085 newSubTodo(); 1087 newSubTodo();
1086 return; 1088 return;
1087 } 1089 }
1088 } 1090 }
1089 if ( KOPrefs::instance()->mEditOnDoubleClick ) 1091 if ( KOPrefs::instance()->mEditOnDoubleClick )
1090 editItem( item ); 1092 editItem( item );
1091 else 1093 else
1092 showItem( item , QPoint(), 0 ); 1094 showItem( item , QPoint(), 0 );
1093} 1095}
1094void KOTodoView::itemClicked(QListViewItem *item) 1096void KOTodoView::itemClicked(QListViewItem *item)
1095{ 1097{
1096 //qDebug("KOTodoView::itemClicked %d", item); 1098 //qDebug("KOTodoView::itemClicked %d", item);
1097 if (!item) { 1099 if (!item) {
1098 if ( pendingSubtodo != 0 ) { 1100 if ( pendingSubtodo != 0 ) {
1099 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1101 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1100 } 1102 }
1101 pendingSubtodo = 0; 1103 pendingSubtodo = 0;
1102 return; 1104 return;
1103 } 1105 }
1104 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1106 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1105 if ( pendingSubtodo != 0 ) { 1107 if ( pendingSubtodo != 0 ) {
1106 bool allowReparent = true; 1108 bool allowReparent = true;
1107 QListViewItem *par = item; 1109 QListViewItem *par = item;
1108 while ( par ) { 1110 while ( par ) {
1109 if ( par == pendingSubtodo ) { 1111 if ( par == pendingSubtodo ) {
1110 allowReparent = false; 1112 allowReparent = false;
1111 break; 1113 break;
1112 } 1114 }
1113 par = par->parent(); 1115 par = par->parent();
1114 } 1116 }
1115 if ( !allowReparent ) { 1117 if ( !allowReparent ) {
1116 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 1118 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
1117 qDebug("Recursive reparenting not possible "); 1119 qDebug("Recursive reparenting not possible ");
1118 pendingSubtodo = 0; 1120 pendingSubtodo = 0;
1119 } else { 1121 } else {
1120 Todo* newParent = todoItem->todo(); 1122 Todo* newParent = todoItem->todo();
1121 Todo* newSub = pendingSubtodo->todo(); 1123 Todo* newSub = pendingSubtodo->todo();
1122 pendingSubtodo = 0; 1124 pendingSubtodo = 0;
1123 emit reparentTodoSignal( newParent,newSub ); 1125 emit reparentTodoSignal( newParent,newSub );
1124 return; 1126 return;
1125 } 1127 }
1126 } 1128 }
1127#if 0 1129#if 0
1128 // handled by the item itself 1130 // handled by the item itself
1129 bool completed = todoItem->todo()->isCompleted(); // Completed or not? 1131 bool completed = todoItem->todo()->isCompleted(); // Completed or not?
1130 qDebug("com %d ",completed ); 1132 qDebug("com %d ",completed );
1131 qDebug("itemclicked "); 1133 qDebug("itemclicked ");
1132 if (todoItem->isOn()) { 1134 if (todoItem->isOn()) {
1133 qDebug("on "); 1135 qDebug("on ");
1134 if (!completed) { 1136 if (!completed) {
1135 qDebug("set true "); 1137 qDebug("set true ");
1136 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 1138 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
1137 } 1139 }
1138 } else { 1140 } else {
1139 qDebug("not on "); 1141 qDebug("not on ");
1140 if (completed) { 1142 if (completed) {
1141 qDebug("set false "); 1143 qDebug("set false ");
1142 todoItem->todo()->setCompleted(false); 1144 todoItem->todo()->setCompleted(false);
1143 } 1145 }
1144 } 1146 }
1145#endif 1147#endif
1146} 1148}
1147 1149
1148void KOTodoView::setDocumentId( const QString &id ) 1150void KOTodoView::setDocumentId( const QString &id )
1149{ 1151{
1150 kdDebug() << "KOTodoView::setDocumentId()" << endl; 1152 kdDebug() << "KOTodoView::setDocumentId()" << endl;
1151 1153
1152 mDocPrefs->setDoc( id ); 1154 mDocPrefs->setDoc( id );
1153} 1155}
1154 1156
1155void KOTodoView::itemStateChanged( QListViewItem *item ) 1157void KOTodoView::itemStateChanged( QListViewItem *item )
1156{ 1158{
1157 if (!item) return; 1159 if (!item) return;
1158 1160
1159 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1161 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1160 1162
1161// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 1163// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
1162 1164
1163 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 1165 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
1164} 1166}
1165 1167
1166void KOTodoView::saveLayout(KConfig *config, const QString &group) const 1168void KOTodoView::saveLayout(KConfig *config, const QString &group) const
1167{ 1169{
1168 mTodoListView->saveLayout(config,group); 1170 mTodoListView->saveLayout(config,group);
1169} 1171}
1170 1172
1171void KOTodoView::restoreLayout(KConfig *config, const QString &group) 1173void KOTodoView::restoreLayout(KConfig *config, const QString &group)
1172{ 1174{
1173 mTodoListView->restoreLayout(config,group); 1175 mTodoListView->restoreLayout(config,group);
1174} 1176}
1175 1177
1176void KOTodoView::processSelectionChange() 1178void KOTodoView::processSelectionChange()
1177{ 1179{
1178// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 1180// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
1179 1181
1180 KOTodoViewItem *item = 1182 KOTodoViewItem *item =
1181 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 1183 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
1182 1184
1183 if ( !item ) { 1185 if ( !item ) {
1184 emit incidenceSelected( 0 ); 1186 emit incidenceSelected( 0 );
1185 } else { 1187 } else {
1186 emit incidenceSelected( item->todo() ); 1188 emit incidenceSelected( item->todo() );
1187 } 1189 }
1188} 1190}
1189 1191
1190void KOTodoView::modified(bool b) 1192void KOTodoView::modified(bool b)
1191{ 1193{
1192 emit isModified(b); 1194 emit isModified(b);
1193} 1195}
1194void KOTodoView::setTodoModified( Todo* todo ) 1196void KOTodoView::setTodoModified( Todo* todo )
1195{ 1197{
1196 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1198 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1197} 1199}
1198void KOTodoView::clearSelection() 1200void KOTodoView::clearSelection()
1199{ 1201{
1200 mTodoListView->selectAll( false ); 1202 mTodoListView->selectAll( false );
1201} 1203}
1202void KOTodoView::setAllOpen() 1204void KOTodoView::setAllOpen()
1203{ 1205{
1204 if ( isFlatDisplay ) { 1206 if ( isFlatDisplay ) {
1205 isFlatDisplay = false; 1207 isFlatDisplay = false;
1206 mPopupMenu->setItemChecked( 8,false ); 1208 mPopupMenu->setItemChecked( 8,false );
1207 updateView(); 1209 updateView();
1210 } else {
1211 storeCurrentItem();
1208 } 1212 }
1209 setOpen(mTodoListView->firstChild(), true); 1213 setOpen(mTodoListView->firstChild(), true);
1214 resetCurrentItem();
1210} 1215}
1211void KOTodoView::setAllClose() 1216void KOTodoView::setAllClose()
1212{ 1217{
1213 if ( isFlatDisplay ) { 1218 if ( isFlatDisplay ) {
1214 isFlatDisplay = false; 1219 isFlatDisplay = false;
1215 mPopupMenu->setItemChecked( 8,false ); 1220 mPopupMenu->setItemChecked( 8,false );
1216 updateView(); 1221 updateView();
1222 } else {
1223 storeCurrentItem();
1217 } 1224 }
1218 setOpen(mTodoListView->firstChild(), false); 1225 setOpen(mTodoListView->firstChild(), false);
1226 resetCurrentItem();
1219} 1227}
1220void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1228void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1221{ 1229{
1222 1230
1223 while ( item ) { 1231 while ( item ) {
1224 setOpen( item->firstChild(), setOpenI ); 1232 setOpen( item->firstChild(), setOpenI );
1225 item->setOpen( setOpenI ); 1233 item->setOpen( setOpenI );
1226 item = item->nextSibling(); 1234 item = item->nextSibling();
1227 } 1235 }
1228} 1236}
1229 1237
1230void KOTodoView::displayAllFlat() 1238void KOTodoView::displayAllFlat()
1231{ 1239{
1232 pendingSubtodo = 0; 1240 pendingSubtodo = 0;
1233 if ( mBlockUpdate ) { 1241 if ( mBlockUpdate ) {
1234 return; 1242 return;
1235 } 1243 }
1236 mPopupMenu->setItemChecked( 8,true ); 1244 mPopupMenu->setItemChecked( 8,true );
1237 isFlatDisplay = true; 1245 isFlatDisplay = true;
1238 QPtrList<Todo> todoList = calendar()->todos(); 1246 QPtrList<Todo> todoList = calendar()->todos();
1239 mTodoMap.clear(); 1247 mTodoMap.clear();
1240 mTodoListView->clear(); 1248 mTodoListView->clear();
1241 Todo *todo; 1249 Todo *todo;
1242 for(todo = todoList.first(); todo; todo = todoList.next()) { 1250 for(todo = todoList.first(); todo; todo = todoList.next()) {
1243 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1251 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1244 mTodoMap.insert(todo,todoItem); 1252 mTodoMap.insert(todo,todoItem);
1245 } 1253 }
1246 mTodoListView->setFocus(); 1254 mTodoListView->setFocus();
1247 processSelectionChange(); 1255 processSelectionChange();
1248} 1256}
1249 1257
1250void KOTodoView::setAllFlat() 1258void KOTodoView::setAllFlat()
1251{ 1259{
1252 if ( isFlatDisplay ) { 1260 if ( isFlatDisplay ) {
1253 isFlatDisplay = false; 1261 isFlatDisplay = false;
1254 mPopupMenu->setItemChecked( 8,false ); 1262 mPopupMenu->setItemChecked( 8,false );
1255 updateView(); 1263 updateView();
1256 return; 1264 return;
1257 } 1265 }
1266 storeCurrentItem();
1258 displayAllFlat(); 1267 displayAllFlat();
1268 resetCurrentItem();
1259} 1269}
1260 1270
1261void KOTodoView::purgeCompleted() 1271void KOTodoView::purgeCompleted()
1262{ 1272{
1263 emit purgeCompletedSignal(); 1273 emit purgeCompletedSignal();
1264} 1274}
1265void KOTodoView::toggleQuickTodo() 1275void KOTodoView::toggleQuickTodo()
1266{ 1276{
1267 if ( mQuickAdd->isVisible() ) { 1277 if ( mQuickAdd->isVisible() ) {
1268 mQuickAdd->hide(); 1278 mQuickAdd->hide();
1269 KOPrefs::instance()->mEnableQuickTodo = false; 1279 KOPrefs::instance()->mEnableQuickTodo = false;
1270 } 1280 }
1271 else { 1281 else {
1272 mQuickAdd->show(); 1282 mQuickAdd->show();
1273 KOPrefs::instance()->mEnableQuickTodo = true; 1283 KOPrefs::instance()->mEnableQuickTodo = true;
1274 } 1284 }
1275 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1285 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1276 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1286 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1277} 1287}
1278 1288
1279void KOTodoView::toggleRunning() 1289void KOTodoView::toggleRunning()
1280{ 1290{
1281 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1291 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1282 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1292 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1283 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1293 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1284 updateView(); 1294 updateView();
1285} 1295}
1286 1296
1287void KOTodoView::toggleCompleted() 1297void KOTodoView::toggleCompleted()
1288{ 1298{
1289 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1299 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1290 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1300 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1291 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1301 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1292 updateView(); 1302 updateView();
1293} 1303}
1294 1304
1295void KOTodoView::addQuickTodo() 1305void KOTodoView::addQuickTodo()
1296{ 1306{
1297 Todo *todo = new Todo(); 1307 Todo *todo = new Todo();
1298 todo->setSummary(mQuickAdd->text()); 1308 todo->setSummary(mQuickAdd->text());
1299 todo->setOrganizer(KOPrefs::instance()->email()); 1309 todo->setOrganizer(KOPrefs::instance()->email());
1300 CalFilter * cf = mCalendar->filter(); 1310 CalFilter * cf = mCalendar->filter();
1301 if ( cf ) { 1311 if ( cf ) {
1302 if ( cf->isEnabled()&& cf->showCategories()) { 1312 if ( cf->isEnabled()&& cf->showCategories()) {
1303 todo->setCategories(cf->categoryList()); 1313 todo->setCategories(cf->categoryList());
1304 } 1314 }
1305 if ( cf->isEnabled() ) 1315 if ( cf->isEnabled() )
1306 todo->setSecrecy( cf->getSecrecy()); 1316 todo->setSecrecy( cf->getSecrecy());
1307 } 1317 }
1308 mCalendar->addTodo(todo); 1318 mCalendar->addTodo(todo);
1309 mQuickAdd->setText(""); 1319 mQuickAdd->setText("");
1310 todoModified (todo, KOGlobals::EVENTADDED ); 1320 todoModified (todo, KOGlobals::EVENTADDED );
1311 updateView(); 1321 updateView();
1312} 1322}
1313 1323
1314void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1324void KOTodoView::keyPressEvent ( QKeyEvent * e )
1315{ 1325{
1316 // e->ignore(); 1326 // e->ignore();
1317 //return; 1327 //return;
1318 //qDebug("KOTodoView::keyPressEvent "); 1328 //qDebug("KOTodoView::keyPressEvent ");
1319 switch ( e->key() ) { 1329 switch ( e->key() ) {
1320 case Qt::Key_Down: 1330 case Qt::Key_Down:
1321 case Qt::Key_Up: 1331 case Qt::Key_Up:
1322 QWidget::keyPressEvent ( e ); 1332 QWidget::keyPressEvent ( e );
1323 break; 1333 break;
1324 1334
1325 case Qt::Key_Q: 1335 case Qt::Key_Q:
1326 toggleQuickTodo(); 1336 toggleQuickTodo();
1327 break; 1337 break;
1328 case Qt::Key_U: 1338 case Qt::Key_U:
1329 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1339 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1330 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1340 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1331 unparentTodo(); 1341 unparentTodo();
1332 e->accept(); 1342 e->accept();
1333 } else 1343 } else
1334 e->ignore(); 1344 e->ignore();
1335 break; 1345 break;
1336 case Qt::Key_S: 1346 case Qt::Key_S:
1337 if ( e->state() == Qt::ControlButton ) { 1347 if ( e->state() == Qt::ControlButton ) {
1338 e->ignore(); 1348 e->ignore();
1339 break; 1349 break;
1340 } 1350 }
1341 if ( e->state() == Qt::ShiftButton ) { 1351 if ( e->state() == Qt::ShiftButton ) {
1342 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1352 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1343 reparentTodo(); 1353 reparentTodo();
1344 e->accept(); 1354 e->accept();
1345 } else 1355 } else
1346 e->ignore(); 1356 e->ignore();
1347 break; 1357 break;
1348 case Qt::Key_P: 1358 case Qt::Key_P:
1349 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1359 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1350 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1360 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1351 if ( pendingSubtodo ) 1361 if ( pendingSubtodo )
1352 itemClicked(mActiveItem); 1362 itemClicked(mActiveItem);
1353 e->accept(); 1363 e->accept();
1354 } else 1364 } else
1355 e->ignore(); 1365 e->ignore();
1356 break; 1366 break;
1357 case Qt::Key_Escape: 1367 case Qt::Key_Escape:
1358 if ( pendingSubtodo ) { 1368 if ( pendingSubtodo ) {
1359 itemClicked(0); 1369 itemClicked(0);
1360 e->accept(); 1370 e->accept();
1361 } else 1371 } else
1362 e->ignore(); 1372 e->ignore();
1363 break; 1373 break;
1364 default: 1374 default:
1365 e->ignore(); 1375 e->ignore();
1366 } 1376 }
1367 1377
1368 if ( true ) { 1378 if ( true ) {
1369 if ( e->key() == Qt::Key_I ) { 1379 if ( e->key() == Qt::Key_I ) {
1370 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1380 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1371 if ( cn ) { 1381 if ( cn ) {
1372 mActiveItem = cn; 1382 mActiveItem = cn;
1373 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1383 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1374 if ( ci ){ 1384 if ( ci ){
1375 showTodo(); 1385 showTodo();
1376 cn = (KOTodoViewItem*)cn->itemBelow(); 1386 cn = (KOTodoViewItem*)cn->itemBelow();
1377 if ( cn ) { 1387 if ( cn ) {
1378 mTodoListView->setCurrentItem ( cn ); 1388 mTodoListView->setCurrentItem ( cn );
1379 mTodoListView->ensureItemVisible ( cn ); 1389 mTodoListView->ensureItemVisible ( cn );
1380 } 1390 }
1381 1391
1382 } 1392 }
1383 } 1393 }
1384 e->accept(); 1394 e->accept();
1385 1395
1386 } 1396 }