summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 7076e05..52fd1e8 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -283,770 +283,770 @@ QColor KODayMatrix::getShadedColor(QColor color)
283} 283}
284 284
285KODayMatrix::~KODayMatrix() 285KODayMatrix::~KODayMatrix()
286{ 286{
287#if QT_VERSION >= 0x030000 287#if QT_VERSION >= 0x030000
288 288
289#else 289#else
290 delete mKODaymatrixWhatsThis; 290 delete mKODaymatrixWhatsThis;
291#endif 291#endif
292 292
293 // delete mKODaymatrixWhatsThis; 293 // delete mKODaymatrixWhatsThis;
294 delete [] days; 294 delete [] days;
295 delete [] daylbls; 295 delete [] daylbls;
296 //delete [] events; 296 //delete [] events;
297 delete mToolTip; 297 delete mToolTip;
298} 298}
299 299
300/* 300/*
301void KODayMatrix::setStartDate(QDate start) 301void KODayMatrix::setStartDate(QDate start)
302{ 302{
303 updateView(start); 303 updateView(start);
304} 304}
305*/ 305*/
306 306
307void KODayMatrix::addSelectedDaysTo(DateList& selDays) 307void KODayMatrix::addSelectedDaysTo(DateList& selDays)
308{ 308{
309 309
310 if (mSelStart == NOSELECTION) { 310 if (mSelStart == NOSELECTION) {
311 return; 311 return;
312 } 312 }
313 313
314 //cope with selection being out of matrix limits at top (< 0) 314 //cope with selection being out of matrix limits at top (< 0)
315 int i0 = mSelStart; 315 int i0 = mSelStart;
316 if (i0 < 0) { 316 if (i0 < 0) {
317 for (int i = i0; i < 0; i++) { 317 for (int i = i0; i < 0; i++) {
318 selDays.append(days[0].addDays(i)); 318 selDays.append(days[0].addDays(i));
319 } 319 }
320 i0 = 0; 320 i0 = 0;
321 } 321 }
322 322
323 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) 323 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1)
324 if (mSelEnd > NUMDAYS-1) { 324 if (mSelEnd > NUMDAYS-1) {
325 for (int i = i0; i <= NUMDAYS-1; i++) { 325 for (int i = i0; i <= NUMDAYS-1; i++) {
326 selDays.append(days[i]); 326 selDays.append(days[i]);
327 } 327 }
328 for (int i = NUMDAYS; i < mSelEnd; i++) { 328 for (int i = NUMDAYS; i < mSelEnd; i++) {
329 selDays.append(days[0].addDays(i)); 329 selDays.append(days[0].addDays(i));
330 } 330 }
331 331
332 // apply normal routine to selection being entirely within matrix limits 332 // apply normal routine to selection being entirely within matrix limits
333 } else { 333 } else {
334 for (int i = i0; i <= mSelEnd; i++) { 334 for (int i = i0; i <= mSelEnd; i++) {
335 selDays.append(days[i]); 335 selDays.append(days[i]);
336 } 336 }
337 } 337 }
338} 338}
339 339
340bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 340bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
341{ 341{
342 mRedrawNeeded = true; 342 mRedrawNeeded = true;
343 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); 343 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION );
344 mSelStart = startdate.daysTo(start); 344 mSelStart = startdate.daysTo(start);
345 if ( mSelStart < 0 ) 345 if ( mSelStart < 0 )
346 mSelStart = 0; 346 mSelStart = 0;
347 mSelEnd = startdate.daysTo(end); 347 mSelEnd = startdate.daysTo(end);
348 if ( mSelEnd > NUMDAYS-1 ) 348 if ( mSelEnd > NUMDAYS-1 )
349 mSelEnd = NUMDAYS-1; 349 mSelEnd = NUMDAYS-1;
350 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { 350 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) {
351 clearSelection(); 351 clearSelection();
352 if ( noSel ) 352 if ( noSel )
353 return false; 353 return false;
354 } 354 }
355 355
356 return true; 356 return true;
357} 357}
358void KODayMatrix::clearSelection() 358void KODayMatrix::clearSelection()
359{ 359{
360 mSelEnd = mSelStart = NOSELECTION; 360 mSelEnd = mSelStart = NOSELECTION;
361} 361}
362 362
363 363
364void KODayMatrix::recalculateToday() 364void KODayMatrix::recalculateToday()
365{ 365{
366 today = -1; 366 today = -1;
367 for (int i=0; i<NUMDAYS; i++) { 367 for (int i=0; i<NUMDAYS; i++) {
368 //events[i] = 0; 368 //events[i] = 0;
369 days[i] = startdate.addDays(i); 369 days[i] = startdate.addDays(i);
370 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 370 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
371 371
372 // if today is in the currently displayed month, hilight today 372 // if today is in the currently displayed month, hilight today
373 if (days[i].year() == QDate::currentDate().year() && 373 if (days[i].year() == QDate::currentDate().year() &&
374 days[i].month() == QDate::currentDate().month() && 374 days[i].month() == QDate::currentDate().month() &&
375 days[i].day() == QDate::currentDate().day()) { 375 days[i].day() == QDate::currentDate().day()) {
376 today = i; 376 today = i;
377 } 377 }
378 } 378 }
379 // qDebug(QString("Today is visible at %1.").arg(today)); 379 // qDebug(QString("Today is visible at %1.").arg(today));
380} 380}
381 381
382void KODayMatrix::updateView() 382void KODayMatrix::updateView()
383{ 383{
384 updateView(startdate); 384 updateView(startdate);
385} 385}
386void KODayMatrix::repaintViewTimed() 386void KODayMatrix::repaintViewTimed()
387{ 387{
388 mRedrawNeeded = true; 388 mRedrawNeeded = true;
389 // bDays.fill( false); 389 // bDays.fill( false);
390 //pDays.fill( false); 390 //pDays.fill( false);
391 //hDays.fill( false); 391 //hDays.fill( false);
392 //eDays.fill( false); 392 //eDays.fill( false);
393 mRepaintTimer->stop(); 393 mRepaintTimer->stop();
394 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday 394 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
395 int i; 395 int i;
396 for(i = 0; i < NUMDAYS; i++) { 396 for(i = 0; i < NUMDAYS; i++) {
397 if ( ( (i+startDay) % 7 == 0 ) ) { 397 if ( ( (i+startDay) % 7 == 0 ) ) {
398 pDays.setBit(i); 398 pDays.setBit(i);
399 } 399 }
400 } 400 }
401 repaint(false); 401 repaint(false);
402} 402}
403void KODayMatrix::computeEvent(Event *event, int i ) 403void KODayMatrix::computeEvent(Event *event, int i )
404{ 404{
405 QString holiStr = mHolidays[i]; 405 QString holiStr = mHolidays[i];
406 if ( event->isHoliday()) { 406 if ( event->isHoliday()) {
407 pDays.setBit(i); 407 pDays.setBit(i);
408 hDays.setBit(i); 408 hDays.setBit(i);
409 if ( !holiStr.isEmpty() ) 409 if ( !holiStr.isEmpty() )
410 holiStr += "\n"; 410 holiStr += "\n";
411 holiStr += event->summary(); 411 holiStr += event->summary();
412 if ( !event->location().isEmpty() ) 412 if ( !event->location().isEmpty() )
413 holiStr += " (" + event->location() + ")"; 413 holiStr += " (" + event->location() + ")";
414 mHolidays[i] =holiStr ; 414 mHolidays[i] =holiStr ;
415 eDays.setBit(i); 415 eDays.setBit(i);
416 } 416 }
417 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) { 417 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) {
418 if ( event->isBirthday()) { 418 if ( event->isBirthday()) {
419 pDays.setBit(i); 419 pDays.setBit(i);
420 if ( !holiStr.isEmpty() ) 420 if ( !holiStr.isEmpty() )
421 holiStr += "\n"; 421 holiStr += "\n";
422 holiStr += i18n("Birthday") + ": "+event->summary(); 422 holiStr += i18n("Birthday") + ": "+event->summary();
423 if ( !event->location().isEmpty() ) 423 if ( !event->location().isEmpty() )
424 holiStr += " (" + event->location() + ")"; 424 holiStr += " (" + event->location() + ")";
425 bDays.setBit(i); 425 bDays.setBit(i);
426 mHolidays[i] =holiStr ; 426 mHolidays[i] =holiStr ;
427 } 427 }
428 } 428 }
429 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) 429 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW )
430 eDays.setBit(i); 430 eDays.setBit(i);
431} 431}
432void KODayMatrix::updateViewTimed() 432void KODayMatrix::updateViewTimed()
433{ 433{
434 mUpdateTimer->stop(); 434 mUpdateTimer->stop();
435 if ( !mCalendar ) { 435 if ( !mCalendar ) {
436 qDebug("NOT CAL "); 436 qDebug("NOT CAL ");
437 return; 437 return;
438 } 438 }
439#if 1 439#if 1
440 440
441 441
442 int i; 442 int i;
443 int timeSpan = NUMDAYS-1; 443 int timeSpan = NUMDAYS-1;
444 QPtrList<Event> events = mCalendar->events(); 444 QPtrList<Event> events = mCalendar->events();
445 Event *event; 445 Event *event;
446 QDateTime dt; 446 QDateTime dt;
447 bool ok; 447 bool ok;
448 bDays.fill( false); 448 bDays.fill( false);
449 pDays.fill( false); 449 pDays.fill( false);
450 hDays.fill( false); 450 hDays.fill( false);
451 eDays.fill( false); 451 eDays.fill( false);
452 mHolidays.clear(); 452 mHolidays.clear();
453 QDate mStartDate = days[0]; 453 QDate mStartDate = days[0];
454 QDate endDate = mStartDate.addDays( timeSpan ); 454 QDate endDate = mStartDate.addDays( timeSpan );
455 for( event = events.first(); event; event = events.next() ) { // for event 455 for( event = events.first(); event; event = events.next() ) { // for event
456 ushort recurType = event->doesRecur(); 456 ushort recurType = event->doesRecur();
457 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 457 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
458 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 458 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
459 continue; 459 continue;
460 } 460 }
461 if ( !KOPrefs::instance()->mLongAllday && event->doesFloat()&& event->isMultiDay() ) { 461 if ( !KOPrefs::instance()->mLongAllday && event->doesFloat()&& event->isMultiDay() ) {
462 continue; 462 continue;
463 } 463 }
464 if ( event->doesRecur() ) { 464 if ( event->doesRecur() ) {
465 bool last; 465 bool last;
466 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 466 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
467 QDateTime incidenceEnd; 467 QDateTime incidenceEnd;
468 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 468 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
469 bool invalid = false; 469 bool invalid = false;
470 while( true ) { 470 while( true ) {
471 if ( incidenceStart.isValid() ) { 471 if ( incidenceStart.isValid() ) {
472 incidenceEnd = incidenceStart.addDays( eventlen ); 472 incidenceEnd = incidenceStart.addDays( eventlen );
473 int st = incidenceStart.date().daysTo( endDate ); 473 int st = incidenceStart.date().daysTo( endDate );
474 if ( st >= 0 ) { // start before timeend 474 if ( st >= 0 ) { // start before timeend
475 int end = mStartDate.daysTo( incidenceEnd.date() ); 475 int end = mStartDate.daysTo( incidenceEnd.date() );
476 if ( end >= 0 ) { // end after timestart --- got one! 476 if ( end >= 0 ) { // end after timestart --- got one!
477 //normalize 477 //normalize
478 st = timeSpan - st; 478 st = timeSpan - st;
479 if ( st < 0 ) st = 0; 479 if ( st < 0 ) st = 0;
480 if ( end > timeSpan ) end = timeSpan; 480 if ( end > timeSpan ) end = timeSpan;
481 int iii; 481 int iii;
482 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 482 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
483 for ( iii = st;iii<= end;++iii) { 483 for ( iii = st;iii<= end;++iii) {
484 computeEvent( event, iii ); 484 computeEvent( event, iii );
485 } 485 }
486 } 486 }
487 } 487 }
488 } else { 488 } else {
489 if ( invalid ) 489 if ( invalid )
490 break; 490 break;
491 invalid = true; 491 invalid = true;
492 //qDebug("invalid %s", event->summary().latin1()); 492 //qDebug("invalid %s", event->summary().latin1());
493 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 493 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
494 } 494 }
495 if ( last ) 495 if ( last )
496 break; 496 break;
497 bool ok; 497 bool ok;
498 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 498 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
499 if ( ! ok ) 499 if ( ! ok )
500 break; 500 break;
501 if ( incidenceStart.date() > endDate ) 501 if ( incidenceStart.date() > endDate )
502 break; 502 break;
503 } 503 }
504 } else { // no recur 504 } else { // no recur
505 int st = event->dtStart().date().daysTo( endDate ); 505 int st = event->dtStart().date().daysTo( endDate );
506 if ( st >= 0 ) { // start before timeend 506 if ( st >= 0 ) { // start before timeend
507 int end = mStartDate.daysTo( event->dtEnd().date() ); 507 int end = mStartDate.daysTo( event->dtEnd().date() );
508 if ( end >= 0 ) { // end after timestart --- got one! 508 if ( end >= 0 ) { // end after timestart --- got one!
509 //normalize 509 //normalize
510 st = timeSpan - st; 510 st = timeSpan - st;
511 if ( st < 0 ) st = 0; 511 if ( st < 0 ) st = 0;
512 if ( end > timeSpan ) end = timeSpan; 512 if ( end > timeSpan ) end = timeSpan;
513 int iii; 513 int iii;
514 for ( iii = st;iii<= end;++iii) 514 for ( iii = st;iii<= end;++iii)
515 computeEvent( event, iii ); 515 computeEvent( event, iii );
516 } 516 }
517 } 517 }
518 } 518 }
519 } 519 }
520 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday 520 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
521 for(i = 0; i < NUMDAYS; i++) { 521 for(i = 0; i < NUMDAYS; i++) {
522 if ( ( (i+startDay) % 7 == 0 ) ) { 522 if ( ( (i+startDay) % 7 == 0 ) ) {
523 pDays.setBit(i); 523 pDays.setBit(i);
524 } 524 }
525 } 525 }
526 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 526 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
527 bDays.fill( false); 527 bDays.fill( false);
528 // insert due todos 528 // insert due todos
529 QPtrList<Todo> todos = mCalendar->todos( ); 529 QPtrList<Todo> todos = mCalendar->todos( );
530 Todo *todo; 530 Todo *todo;
531 for(todo = todos.first(); todo; todo = todos.next()) { 531 for(todo = todos.first(); todo; todo = todos.next()) {
532 //insertTodo( todo ); 532 //insertTodo( todo );
533 if ( todo->hasDueDate() ) { 533 if ( todo->hasDueDate() ) {
534 int day = mStartDate.daysTo( todo->dtDue().date() ); 534 int day = mStartDate.daysTo( todo->dtDue().date() );
535 if ( day >= 0 && day < timeSpan + 1) { 535 if ( day >= 0 && day < timeSpan + 1) {
536 int i = day; 536 int i = day;
537 QString holiStr = mHolidays[i]; 537 QString holiStr = mHolidays[i];
538 pDays.setBit(i); 538 pDays.setBit(i);
539 if ( !holiStr.isEmpty() ) 539 if ( !holiStr.isEmpty() )
540 holiStr += "\n"; 540 holiStr += "\n";
541 holiStr += i18n("Todo") + ": "+todo->summary(); 541 holiStr += i18n("Todo") + ": "+todo->summary();
542 if ( !todo->location().isEmpty() ) 542 if ( !todo->location().isEmpty() )
543 holiStr += " (" + todo->location() + ")"; 543 holiStr += " (" + todo->location() + ")";
544 bDays.setBit(i); 544 bDays.setBit(i);
545 mHolidays[i] =holiStr ; 545 mHolidays[i] =holiStr ;
546 eDays.setBit(i); 546 eDays.setBit(i);
547 } 547 }
548 } 548 }
549 } 549 }
550 } 550 }
551 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 551 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
552 bDays.fill( false); 552 bDays.fill( false);
553 // insert due todos 553 // insert due todos
554 QPtrList<Journal> todos = mCalendar->journals( ); 554 QPtrList<Journal> todos = mCalendar->journals( );
555 Journal *todo; 555 Journal *todo;
556 for(todo = todos.first(); todo; todo = todos.next()) { 556 for(todo = todos.first(); todo; todo = todos.next()) {
557 int day = mStartDate.daysTo( todo->dtStart().date() ); 557 int day = mStartDate.daysTo( todo->dtStart().date() );
558 if ( day >= 0 && day < timeSpan + 1) { 558 if ( day >= 0 && day < timeSpan + 1) {
559 int i = day; 559 int i = day;
560 QString holiStr = mHolidays[i]; 560 QString holiStr = mHolidays[i];
561 pDays.setBit(i); 561 pDays.setBit(i);
562 if ( !holiStr.isEmpty() ) 562 if ( !holiStr.isEmpty() )
563 holiStr += "\n"; 563 holiStr += "\n";
564 holiStr += i18n("Journal: ")+todo->summary().left(25); 564 holiStr += i18n("Journal: ")+todo->summary().left(25);
565 if ( todo->summary().length() > 25 ) 565 if ( todo->summary().length() > 25 )
566 holiStr +="..."; 566 holiStr +="...";
567 bDays.setBit(i); 567 bDays.setBit(i);
568 mHolidays[i] =holiStr ; 568 mHolidays[i] =holiStr ;
569 eDays.setBit(i); 569 eDays.setBit(i);
570 570
571 } 571 }
572 } 572 }
573 } 573 }
574#else 574#else
575 //qDebug("KODayMatrix::updateViewTimed "); 575 //qDebug("KODayMatrix::updateViewTimed ");
576 for(int i = 0; i < NUMDAYS; i++) { 576 for(int i = 0; i < NUMDAYS; i++) {
577 // if events are set for the day then remember to draw it bold 577 // if events are set for the day then remember to draw it bold
578 QPtrList<Event> eventlist = mCalendar->events(days[i]); 578 QPtrList<Event> eventlist = mCalendar->events(days[i]);
579 Event *event; 579 Event *event;
580 int numEvents = eventlist.count(); 580 int numEvents = eventlist.count();
581 QString holiStr = ""; 581 QString holiStr = "";
582 bDays.clearBit(i); 582 bDays.clearBit(i);
583 hDays.clearBit(i); 583 hDays.clearBit(i);
584 eDays.clearBit(i); 584 eDays.clearBit(i);
585 for(event=eventlist.first();event != 0;event=eventlist.next()) { 585 for(event=eventlist.first();event != 0;event=eventlist.next()) {
586 ushort recurType = event->recurrence()->doesRecur(); 586 ushort recurType = event->recurrence()->doesRecur();
587 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 587 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
588 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 588 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
589 numEvents--; 589 numEvents--;
590 } 590 }
591 if ( event->isHoliday()) { 591 if ( event->isHoliday()) {
592 hDays.setBit(i); 592 hDays.setBit(i);
593 if ( !holiStr.isEmpty() ) 593 if ( !holiStr.isEmpty() )
594 holiStr += "\n"; 594 holiStr += "\n";
595 holiStr += event->summary(); 595 holiStr += event->summary();
596 if ( !event->location().isEmpty() ) 596 if ( !event->location().isEmpty() )
597 holiStr += " (" + event->location() + ")"; 597 holiStr += " (" + event->location() + ")";
598 } 598 }
599 if ( event->isBirthday()) { 599 if ( event->isBirthday()) {
600 if ( !holiStr.isEmpty() ) 600 if ( !holiStr.isEmpty() )
601 holiStr += "\n"; 601 holiStr += "\n";
602 holiStr += i18n("Birthday") + ": "+event->summary(); 602 holiStr += i18n("Birthday") + ": "+event->summary();
603 if ( !event->location().isEmpty() ) 603 if ( !event->location().isEmpty() )
604 holiStr += " (" + event->location() + ")"; 604 holiStr += " (" + event->location() + ")";
605 bDays.setBit(i); 605 bDays.setBit(i);
606 } 606 }
607 } 607 }
608 if ( numEvents ) 608 if ( numEvents )
609 eDays.setBit(i); 609 eDays.setBit(i);
610 //if it is a holy day then draw it red. Sundays are consider holidays, too 610 //if it is a holy day then draw it red. Sundays are consider holidays, too
611 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || 611 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
612 !holiStr.isEmpty()) { 612 !holiStr.isEmpty()) {
613 mHolidays[i] = holiStr; 613 mHolidays[i] = holiStr;
614 } else { 614 } else {
615 mHolidays[i] = QString::null; 615 mHolidays[i] = QString::null;
616 } 616 }
617 } 617 }
618#endif 618#endif
619 mRedrawNeeded = true; 619 mRedrawNeeded = true;
620 if ( ! mPendingUpdateBeforeRepaint ) 620 if ( ! mPendingUpdateBeforeRepaint )
621 repaint(false); 621 repaint(false);
622} 622}
623void KODayMatrix::updateView(QDate actdate) 623void KODayMatrix::updateView(QDate actdate)
624{ 624{
625 if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView ) 625 if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView )
626 mRedrawNeeded = true; 626 mRedrawNeeded = true;
627 mLastView = KOPrefs::instance()->mCurrentDisplayedView; 627 mLastView = KOPrefs::instance()->mCurrentDisplayedView;
628 if ( ! actdate.isValid() ) { 628 if ( ! actdate.isValid() ) {
629 //qDebug("date not valid "); 629 //qDebug("date not valid ");
630 return; 630 return;
631 } 631 }
632 mDayChanged = false; 632 mDayChanged = false;
633 //flag to indicate if the starting day of the matrix has changed by this call 633 //flag to indicate if the starting day of the matrix has changed by this call
634 //mDayChanged = false; 634 //mDayChanged = false;
635 // if a new startdate is to be set then apply Cornelius's calculation 635 // if a new startdate is to be set then apply Cornelius's calculation
636 // of the first day to be shown 636 // of the first day to be shown
637 if (actdate != startdate) { 637 if (actdate != startdate) {
638 // reset index of selection according to shift of starting date from startdate to actdate 638 // reset index of selection according to shift of starting date from startdate to actdate
639 if (mSelStart != NOSELECTION) { 639 if (mSelStart != NOSELECTION) {
640 int tmp = actdate.daysTo(startdate); 640 int tmp = actdate.daysTo(startdate);
641 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; 641 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
642 // shift selection if new one would be visible at least partly ! 642 // shift selection if new one would be visible at least partly !
643 643
644 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { 644 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
645 // nested if is required for next X display pushed from a different month - correction required 645 // nested if is required for next X display pushed from a different month - correction required
646 // otherwise, for month forward and backward, it must be avoided 646 // otherwise, for month forward and backward, it must be avoided
647 if( mSelStart > NUMDAYS || mSelStart < 0 ) 647 if( mSelStart > NUMDAYS || mSelStart < 0 )
648 mSelStart = mSelStart + tmp; 648 mSelStart = mSelStart + tmp;
649 if( mSelEnd > NUMDAYS || mSelEnd < 0 ) 649 if( mSelEnd > NUMDAYS || mSelEnd < 0 )
650 mSelEnd = mSelEnd + tmp; 650 mSelEnd = mSelEnd + tmp;
651 } 651 }
652 } 652 }
653 startdate = actdate; 653 startdate = actdate;
654 mDayChanged = true; 654 mDayChanged = true;
655 recalculateToday(); 655 recalculateToday();
656 mRedrawNeeded = true; 656 mRedrawNeeded = true;
657 } 657 }
658 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); 658 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() );
659 if ( !isVisible() ) { 659 if ( !isVisible() ) {
660 mPendingUpdateBeforeRepaint = true; 660 mPendingUpdateBeforeRepaint = true;
661 } else { 661 } else {
662#ifdef DESKTOP_VERSION 662#ifdef DESKTOP_VERSION
663 //mRepaintTimer->start( 100 ); 663 //mRepaintTimer->start( 100 );
664 //updateViewTimed(); 664 //updateViewTimed();
665 mUpdateTimer->start( 50 ); 665 mUpdateTimer->start( 50 );
666#else 666#else
667 mRepaintTimer->start( 350 ); 667 mRepaintTimer->start( 250 );
668 mUpdateTimer->start( 800 ); 668 mUpdateTimer->start( 500 );
669#endif 669#endif
670 } 670 }
671} 671}
672void KODayMatrix::updateEvents() 672void KODayMatrix::updateEvents()
673{ 673{
674 if ( !mCalendar ) return; 674 if ( !mCalendar ) return;
675 675
676 for( int i = 0; i < NUMDAYS; i++ ) { 676 for( int i = 0; i < NUMDAYS; i++ ) {
677 // if events are set for the day then remember to draw it bold 677 // if events are set for the day then remember to draw it bold
678 QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); 678 QPtrList<Event> eventlist = mCalendar->events( days[ i ] );
679 int numEvents = eventlist.count(); 679 int numEvents = eventlist.count();
680 Event *event; 680 Event *event;
681 for( event = eventlist.first(); event != 0;event=eventlist.next()) { 681 for( event = eventlist.first(); event != 0;event=eventlist.next()) {
682 ushort recurType = event->doesRecur(); 682 ushort recurType = event->doesRecur();
683 683
684 if ( ( recurType == Recurrence::rDaily && 684 if ( ( recurType == Recurrence::rDaily &&
685 !KOPrefs::instance()->mDailyRecur ) || 685 !KOPrefs::instance()->mDailyRecur ) ||
686 ( recurType == Recurrence::rWeekly && 686 ( recurType == Recurrence::rWeekly &&
687 !KOPrefs::instance()->mWeeklyRecur ) ) { 687 !KOPrefs::instance()->mWeeklyRecur ) ) {
688 numEvents--; 688 numEvents--;
689 } 689 }
690 if ( !KOPrefs::instance()->mLongAllday && event->doesFloat()&& event->isMultiDay() ) { 690 if ( !KOPrefs::instance()->mLongAllday && event->doesFloat()&& event->isMultiDay() ) {
691 numEvents--; 691 numEvents--;
692 } 692 }
693 } 693 }
694 if ( numEvents ) 694 if ( numEvents )
695 eDays.setBit(i); 695 eDays.setBit(i);
696 else 696 else
697 eDays.clearBit(i); 697 eDays.clearBit(i);
698 } 698 }
699} 699}
700 700
701const QDate& KODayMatrix::getDate(int offset) 701const QDate& KODayMatrix::getDate(int offset)
702{ 702{
703 if (offset < 0 || offset > NUMDAYS-1) { 703 if (offset < 0 || offset > NUMDAYS-1) {
704 qDebug("Wrong offset2 %d", offset); 704 qDebug("Wrong offset2 %d", offset);
705 return days[0]; 705 return days[0];
706 } 706 }
707 return days[offset]; 707 return days[offset];
708} 708}
709 709
710QString KODayMatrix::getHolidayLabel(int offset) 710QString KODayMatrix::getHolidayLabel(int offset)
711{ 711{
712 if (offset < 0 || offset > NUMDAYS-1) { 712 if (offset < 0 || offset > NUMDAYS-1) {
713 qDebug("Wrong offset1 %d", offset); 713 qDebug("Wrong offset1 %d", offset);
714 return QString(); 714 return QString();
715 } 715 }
716 return mHolidays[offset]; 716 return mHolidays[offset];
717} 717}
718 718
719int KODayMatrix::getDayIndexFrom(int x, int y) 719int KODayMatrix::getDayIndexFrom(int x, int y)
720{ 720{
721 int colModulo = (width()-2) % 7; 721 int colModulo = (width()-2) % 7;
722 int rowModulo = (height()-2) % 6; 722 int rowModulo = (height()-2) % 6;
723#if 0 723#if 0
724 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? 724 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ?
725 6 - x/daysize.width() : x/daysize.width()); 725 6 - x/daysize.width() : x/daysize.width());
726#endif 726#endif
727 int xVal = (x-colModulo/2-2)/daysize.width(); 727 int xVal = (x-colModulo/2-2)/daysize.width();
728 int yVal = (y-rowModulo/2-2)/daysize.height(); 728 int yVal = (y-rowModulo/2-2)/daysize.height();
729 729
730 730
731 return 7*(yVal) + xVal; 731 return 7*(yVal) + xVal;
732 732
733} 733}
734 734
735// ---------------------------------------------------------------------------- 735// ----------------------------------------------------------------------------
736// M O U S E E V E N T H A N D L I N G 736// M O U S E E V E N T H A N D L I N G
737// ---------------------------------------------------------------------------- 737// ----------------------------------------------------------------------------
738 738
739void KODayMatrix::mousePressEvent (QMouseEvent* e) 739void KODayMatrix::mousePressEvent (QMouseEvent* e)
740{ 740{
741 741
742 if ( e->button() == LeftButton ) 742 if ( e->button() == LeftButton )
743 mouseDown = true; 743 mouseDown = true;
744 mSelStart = getDayIndexFrom(e->x(), e->y()); 744 mSelStart = getDayIndexFrom(e->x(), e->y());
745 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; 745 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
746 mSelInit = mSelStart; 746 mSelInit = mSelStart;
747 mSelEnd = mSelStart; 747 mSelEnd = mSelStart;
748 mRedrawNeeded = true; 748 mRedrawNeeded = true;
749 repaint(false); 749 repaint(false);
750} 750}
751 751
752void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) 752void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
753{ 753{
754 mRedrawNeeded = true; 754 mRedrawNeeded = true;
755 if ( e->button() == LeftButton ) 755 if ( e->button() == LeftButton )
756 if ( ! mouseDown ) { 756 if ( ! mouseDown ) {
757 return; 757 return;
758 } 758 }
759 else 759 else
760 mouseDown = false; 760 mouseDown = false;
761 int tmp = getDayIndexFrom(e->x(), e->y()); 761 int tmp = getDayIndexFrom(e->x(), e->y());
762 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 762 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
763 763
764 if (mSelInit > tmp) { 764 if (mSelInit > tmp) {
765 mSelEnd = mSelInit; 765 mSelEnd = mSelInit;
766 if (tmp != mSelStart) { 766 if (tmp != mSelStart) {
767 mSelStart = tmp; 767 mSelStart = tmp;
768 repaint(false); 768 repaint(false);
769 } 769 }
770 } else { 770 } else {
771 mSelStart = mSelInit; 771 mSelStart = mSelInit;
772 772
773 //repaint only if selection has changed 773 //repaint only if selection has changed
774 if (tmp != mSelEnd) { 774 if (tmp != mSelEnd) {
775 mSelEnd = tmp; 775 mSelEnd = tmp;
776 repaint(false); 776 repaint(false);
777 } 777 }
778 } 778 }
779 779
780 DateList daylist; 780 DateList daylist;
781 if ( mSelStart < 0 ) 781 if ( mSelStart < 0 )
782 mSelStart = 0; 782 mSelStart = 0;
783 for (int i = mSelStart; i <= mSelEnd; i++) { 783 for (int i = mSelStart; i <= mSelEnd; i++) {
784 daylist.append(days[i]); 784 daylist.append(days[i]);
785 } 785 }
786 emit selected((const DateList)daylist); 786 emit selected((const DateList)daylist);
787 787
788} 788}
789 789
790void KODayMatrix::mouseMoveEvent (QMouseEvent* e) 790void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
791{ 791{
792 if ( ! mouseDown ) { 792 if ( ! mouseDown ) {
793 return; 793 return;
794 } 794 }
795 mRedrawNeeded = true; 795 mRedrawNeeded = true;
796 int tmp = getDayIndexFrom(e->x(), e->y()); 796 int tmp = getDayIndexFrom(e->x(), e->y());
797 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 797 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
798 798
799 if (mSelInit > tmp) { 799 if (mSelInit > tmp) {
800 mSelEnd = mSelInit; 800 mSelEnd = mSelInit;
801 if (tmp != mSelStart) { 801 if (tmp != mSelStart) {
802 mSelStart = tmp; 802 mSelStart = tmp;
803 repaint(false); 803 repaint(false);
804 } 804 }
805 } else { 805 } else {
806 mSelStart = mSelInit; 806 mSelStart = mSelInit;
807 807
808 //repaint only if selection has changed 808 //repaint only if selection has changed
809 if (tmp != mSelEnd) { 809 if (tmp != mSelEnd) {
810 mSelEnd = tmp; 810 mSelEnd = tmp;
811 repaint(false); 811 repaint(false);
812 } 812 }
813 } 813 }
814} 814}
815 815
816// ---------------------------------------------------------------------------- 816// ----------------------------------------------------------------------------
817// D R A G ' N D R O P H A N D L I N G 817// D R A G ' N D R O P H A N D L I N G
818// ---------------------------------------------------------------------------- 818// ----------------------------------------------------------------------------
819 819
820void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) 820void KODayMatrix::dragEnterEvent(QDragEnterEvent *e)
821{ 821{
822#ifndef KORG_NODND 822#ifndef KORG_NODND
823 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 823 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
824 e->ignore(); 824 e->ignore();
825 return; 825 return;
826 } 826 }
827 827
828 // some visual feedback 828 // some visual feedback
829// oldPalette = palette(); 829// oldPalette = palette();
830// setPalette(my_HilitePalette); 830// setPalette(my_HilitePalette);
831// update(); 831// update();
832#endif 832#endif
833} 833}
834 834
835void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) 835void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
836{ 836{
837#ifndef KORG_NODND 837#ifndef KORG_NODND
838 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 838 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
839 e->ignore(); 839 e->ignore();
840 return; 840 return;
841 } 841 }
842 842
843 e->accept(); 843 e->accept();
844#endif 844#endif
845} 845}
846 846
847void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 847void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
848{ 848{
849#ifndef KORG_NODND 849#ifndef KORG_NODND
850// setPalette(oldPalette); 850// setPalette(oldPalette);
851// update(); 851// update();
852#endif 852#endif
853} 853}
854 854
855void KODayMatrix::dropEvent(QDropEvent *e) 855void KODayMatrix::dropEvent(QDropEvent *e)
856{ 856{
857#ifndef KORG_NODND 857#ifndef KORG_NODND
858// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 858// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
859 859
860 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 860 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
861 e->ignore(); 861 e->ignore();
862 return; 862 return;
863 } 863 }
864 864
865 DndFactory factory( mCalendar ); 865 DndFactory factory( mCalendar );
866 Event *event = factory.createDrop(e); 866 Event *event = factory.createDrop(e);
867 867
868 if (event) { 868 if (event) {
869 e->acceptAction(); 869 e->acceptAction();
870 870
871 Event *existingEvent = mCalendar->event(event->uid()); 871 Event *existingEvent = mCalendar->event(event->uid());
872 872
873 if(existingEvent) { 873 if(existingEvent) {
874 // uniquify event 874 // uniquify event
875 event->recreate(); 875 event->recreate();
876/* 876/*
877 KMessageBox::sorry(this, 877 KMessageBox::sorry(this,
878 i18n("Event already exists in this calendar."), 878 i18n("Event already exists in this calendar."),
879 i18n("Drop Event")); 879 i18n("Drop Event"));
880 delete event; 880 delete event;
881 return; 881 return;
882*/ 882*/
883 } 883 }
884// kdDebug() << "Drop new Event" << endl; 884// kdDebug() << "Drop new Event" << endl;
885 // Adjust date 885 // Adjust date
886 QDateTime start = event->dtStart(); 886 QDateTime start = event->dtStart();
887 QDateTime end = event->dtEnd(); 887 QDateTime end = event->dtEnd();
888 int duration = start.daysTo(end); 888 int duration = start.daysTo(end);
889 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 889 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
890 890
891 start.setDate(days[idx]); 891 start.setDate(days[idx]);
892 end.setDate(days[idx].addDays(duration)); 892 end.setDate(days[idx].addDays(duration));
893 893
894 event->setDtStart(start); 894 event->setDtStart(start);
895 event->setDtEnd(end); 895 event->setDtEnd(end);
896 mCalendar->addEvent(event); 896 mCalendar->addEvent(event);
897 897
898 emit eventDropped(event); 898 emit eventDropped(event);
899 } else { 899 } else {
900// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 900// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
901 e->ignore(); 901 e->ignore();
902 } 902 }
903#endif 903#endif
904} 904}
905 905
906// ---------------------------------------------------------------------------- 906// ----------------------------------------------------------------------------
907// P A I N T E V E N T H A N D L I N G 907// P A I N T E V E N T H A N D L I N G
908// ---------------------------------------------------------------------------- 908// ----------------------------------------------------------------------------
909 909
910void KODayMatrix::paintEvent(QPaintEvent * pevent) 910void KODayMatrix::paintEvent(QPaintEvent * pevent)
911{ 911{
912 912
913 if ( width() <= 0 || height() <= 0 ) 913 if ( width() <= 0 || height() <= 0 )
914 return; 914 return;
915 if ( mPendingUpdateBeforeRepaint ) { 915 if ( mPendingUpdateBeforeRepaint ) {
916 updateViewTimed(); 916 updateViewTimed();
917 mPendingUpdateBeforeRepaint = false; 917 mPendingUpdateBeforeRepaint = false;
918 } 918 }
919#if 0 919#if 0
920 if ( myPix.width() != width() || myPix.height()!=height() ) { 920 if ( myPix.width() != width() || myPix.height()!=height() ) {
921 myPix.resize(size() ); 921 myPix.resize(size() );
922 mRedrawNeeded = true; 922 mRedrawNeeded = true;
923 } 923 }
924#endif 924#endif
925 if ( oldW != width() || oldH !=height() ) 925 if ( oldW != width() || oldH !=height() )
926 mRedrawNeeded = true; 926 mRedrawNeeded = true;
927 927
928 oldH = height() ; 928 oldH = height() ;
929 oldW = width(); 929 oldW = width();
930 if ( myPix.width() < width() || myPix.height() < height() ) { 930 if ( myPix.width() < width() || myPix.height() < height() ) {
931 myPix.resize(size() ); 931 myPix.resize(size() );
932 mRedrawNeeded = true; 932 mRedrawNeeded = true;
933 933
934 } 934 }
935 935
936 if ( mRedrawNeeded ) { 936 if ( mRedrawNeeded ) {
937 //qDebug("REDRAW "); 937 //qDebug("REDRAW ");
938 QPainter p(&myPix); 938 QPainter p(&myPix);
939 p.setFont(font()); 939 p.setFont(font());
940 940
941 941
942 int dheight = daysize.height(); 942 int dheight = daysize.height();
943 int dwidth = daysize.width(); 943 int dwidth = daysize.width();
944 int row,col; 944 int row,col;
945 int selw, selh; 945 int selw, selh;
946 int xyOff = frameWidth(); 946 int xyOff = frameWidth();
947 int colModulo = (width()-2) % 7; 947 int colModulo = (width()-2) % 7;
948 int rowModulo = (height()-2) % 6; 948 int rowModulo = (height()-2) % 6;
949 //qDebug("col %d row %d ",colModulo,rowModulo ); 949 //qDebug("col %d row %d ",colModulo,rowModulo );
950 950
951 bool isRTL = KOGlobals::self()->reverseLayout(); 951 bool isRTL = KOGlobals::self()->reverseLayout();
952 952
953 // draw background and topleft frame 953 // draw background and topleft frame
954 p.fillRect(0,0,width(),height(), mDefaultBackColor); 954 p.fillRect(0,0,width(),height(), mDefaultBackColor);
955 //p.setPen(mDefaultTextColor); 955 //p.setPen(mDefaultTextColor);
956 //p.drawRect(0, 0, width(), height()); 956 //p.drawRect(0, 0, width(), height());
957 int mSelStartT = mSelStart; 957 int mSelStartT = mSelStart;
958 int mSelEndT = mSelEnd; 958 int mSelEndT = mSelEnd;
959 if ( mSelEndT >= NUMDAYS ) 959 if ( mSelEndT >= NUMDAYS )
960 mSelEndT = NUMDAYS-1; 960 mSelEndT = NUMDAYS-1;
961 // draw selected days with highlighted background color 961 // draw selected days with highlighted background color
962 if (mSelStart != NOSELECTION) { 962 if (mSelStart != NOSELECTION) {
963 bool skip = false; 963 bool skip = false;
964 if ( ! mouseDown ) { 964 if ( ! mouseDown ) {
965 int mo = days[20].month(); 965 int mo = days[20].month();
966 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 966 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
967 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 967 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
968 int startMo = days[mSelStartT].month(); 968 int startMo = days[mSelStartT].month();
969 int endMo = days[mSelEndT].month(); 969 int endMo = days[mSelEndT].month();
970 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 970 if ( startMo == 12 && mo == 1 && endMo <= 2 )
971 startMo = 1; 971 startMo = 1;
972 if ( endMo == 1 && mo == 12 ) 972 if ( endMo == 1 && mo == 12 )
973 endMo = 12; 973 endMo = 12;
974 if ( mo == 12 && startMo == 1 ) 974 if ( mo == 12 && startMo == 1 )
975 startMo = 13; 975 startMo = 13;
976 if ( (startMo > mo || endMo < mo) ) { 976 if ( (startMo > mo || endMo < mo) ) {
977 skip = true; 977 skip = true;
978 } else { 978 } else {
979 if ( days[mSelStartT].month() != mo ) { 979 if ( days[mSelStartT].month() != mo ) {
980 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 980 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
981 mSelStartT += add +1; 981 mSelStartT += add +1;
982 } 982 }
983 if ( days[mSelEndT].month() != mo ) { 983 if ( days[mSelEndT].month() != mo ) {
984 int sub = days[mSelEndT].day(); 984 int sub = days[mSelEndT].day();
985 mSelEndT -= sub ; 985 mSelEndT -= sub ;
986 } 986 }
987 } 987 }
988 } 988 }
989 //qDebug("SKIP %d ", skip); 989 //qDebug("SKIP %d ", skip);
990 if ( ! skip ) { 990 if ( ! skip ) {
991 row = mSelStartT/7; 991 row = mSelStartT/7;
992 col = mSelStartT -row*7; 992 col = mSelStartT -row*7;
993 QColor selcol = KOPrefs::instance()->mHighlightColor; 993 QColor selcol = KOPrefs::instance()->mHighlightColor;
994 int addCol = 0; 994 int addCol = 0;
995 int addRow = 0; 995 int addRow = 0;
996 int addRow2 = 0; 996 int addRow2 = 0;
997 int addCol2 = 0; 997 int addCol2 = 0;
998 if (row == mSelEndT/7) { 998 if (row == mSelEndT/7) {
999 if ( rowModulo ) { 999 if ( rowModulo ) {
1000 if ( row >= 6 - rowModulo ) 1000 if ( row >= 6 - rowModulo )
1001 addRow = row - 5 + rowModulo; 1001 addRow = row - 5 + rowModulo;
1002 } 1002 }
1003 if ( colModulo ) { 1003 if ( colModulo ) {
1004 int colt1 = mSelEndT%7; 1004 int colt1 = mSelEndT%7;
1005 //qDebug("colt1 %d ", colt1 ); 1005 //qDebug("colt1 %d ", colt1 );
1006 if ( colt1 >= 7 - colModulo ) 1006 if ( colt1 >= 7 - colModulo )
1007 addCol = colt1 - 7 + colModulo+1; 1007 addCol = colt1 - 7 + colModulo+1;
1008 int colt = mSelStartT%7; 1008 int colt = mSelStartT%7;
1009 if ( colt >= 7 - colModulo ) 1009 if ( colt >= 7 - colModulo )
1010 addCol2 = colt - 7 + colModulo; 1010 addCol2 = colt - 7 + colModulo;
1011 addCol -= addCol2; 1011 addCol -= addCol2;
1012 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 1012 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
1013 } 1013 }
1014 // Single row selection 1014 // Single row selection
1015 //if ( row == 0) 1015 //if ( row == 0)
1016 // addRow = 1; 1016 // addRow = 1;
1017 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 1017 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
1018 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 1018 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
1019 } else { 1019 } else {
1020 // draw first row to the right 1020 // draw first row to the right
1021 if ( colModulo ) { 1021 if ( colModulo ) {
1022 if ( col >= 7 - colModulo ) 1022 if ( col >= 7 - colModulo )
1023 addCol2 = col - 7 + colModulo; 1023 addCol2 = col - 7 + colModulo;
1024 } 1024 }
1025 if ( rowModulo ) { 1025 if ( rowModulo ) {
1026 if ( row >= 6 - rowModulo ) 1026 if ( row >= 6 - rowModulo )
1027 addRow = row - 5 + rowModulo; 1027 addRow = row - 5 + rowModulo;
1028 } 1028 }
1029 //if ( row == 0) 1029 //if ( row == 0)
1030 // addRow = 1; 1030 // addRow = 1;
1031 int drawWid = width()-(col*dwidth+1+addCol2)-1; 1031 int drawWid = width()-(col*dwidth+1+addCol2)-1;
1032 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, 1032 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
1033 dheight+1, selcol); 1033 dheight+1, selcol);
1034 // draw full block till last line 1034 // draw full block till last line
1035 selh = mSelEndT/7-row; 1035 selh = mSelEndT/7-row;
1036 addRow = 0; 1036 addRow = 0;
1037 if ( rowModulo ) { 1037 if ( rowModulo ) {
1038 if ( mSelEndT/7 >= 6 - rowModulo ) 1038 if ( mSelEndT/7 >= 6 - rowModulo )
1039 addRow = mSelEndT/7 - 5 + rowModulo; 1039 addRow = mSelEndT/7 - 5 + rowModulo;
1040 } 1040 }
1041 //qDebug("%d %d %d ",selh, row, addRow ); 1041 //qDebug("%d %d %d ",selh, row, addRow );
1042 int addrow2 = addRow-selh+1; 1042 int addrow2 = addRow-selh+1;
1043 if ( addrow2 < 0 ) 1043 if ( addrow2 < 0 )
1044 addrow2 = 0; 1044 addrow2 = 0;
1045 if (selh > 1) { 1045 if (selh > 1) {
1046 p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); 1046 p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
1047 } 1047 }
1048 // draw last block from left to mSelEndT 1048 // draw last block from left to mSelEndT
1049 selw = mSelEndT-7*(mSelEndT/7)+1; 1049 selw = mSelEndT-7*(mSelEndT/7)+1;
1050 //qDebug("esl %d ",selw ); 1050 //qDebug("esl %d ",selw );
1051 int add = 0; 1051 int add = 0;
1052 if ( colModulo ) { 1052 if ( colModulo ) {