summaryrefslogtreecommitdiffabout
path: root/korganizer/kodaymatrix.cpp
Unidiff
Diffstat (limited to 'korganizer/kodaymatrix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp58
1 files changed, 44 insertions, 14 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 1cde616..619ae39 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -262,25 +262,29 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays)
262 262
263 // apply normal routine to selection being entirely within matrix limits 263 // apply normal routine to selection being entirely within matrix limits
264 } else { 264 } else {
265 for (int i = i0; i <= mSelEnd; i++) { 265 for (int i = i0; i <= mSelEnd; i++) {
266 selDays.append(days[i]); 266 selDays.append(days[i]);
267 } 267 }
268 } 268 }
269} 269}
270 270
271void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 271void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
272{ 272{
273 mSelStart = startdate.daysTo(start); 273 mSelStart = startdate.daysTo(start);
274 if ( mSelStart < 0 )
275 mSelStart = 0;
274 mSelEnd = startdate.daysTo(end); 276 mSelEnd = startdate.daysTo(end);
277 if ( mSelEnd < 0 )
278 clearSelection();
275} 279}
276void KODayMatrix::clearSelection() 280void KODayMatrix::clearSelection()
277{ 281{
278 mSelEnd = mSelStart = NOSELECTION; 282 mSelEnd = mSelStart = NOSELECTION;
279} 283}
280 284
281 285
282void KODayMatrix::recalculateToday() 286void KODayMatrix::recalculateToday()
283{ 287{
284 today = -1; 288 today = -1;
285 for (int i=0; i<NUMDAYS; i++) { 289 for (int i=0; i<NUMDAYS; i++) {
286 events[i] = 0; 290 events[i] = 0;
@@ -629,91 +633,117 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
629 633
630 QRect sz = frameRect(); 634 QRect sz = frameRect();
631 int dheight = daysize.height(); 635 int dheight = daysize.height();
632 int dwidth = daysize.width(); 636 int dwidth = daysize.width();
633 int row,col; 637 int row,col;
634 int selw, selh; 638 int selw, selh;
635 bool isRTL = KOGlobals::self()->reverseLayout(); 639 bool isRTL = KOGlobals::self()->reverseLayout();
636 640
637 // draw background and topleft frame 641 // draw background and topleft frame
638 p.fillRect(pevent->rect(), mDefaultBackColor); 642 p.fillRect(pevent->rect(), mDefaultBackColor);
639 p.setPen(mDefaultTextColor); 643 p.setPen(mDefaultTextColor);
640 p.drawRect(0, 0, sz.width()+1, sz.height()+1); 644 p.drawRect(0, 0, sz.width()+1, sz.height()+1);
641 645 int mSelStartT = mSelStart;
646 int mSelEndT = mSelEnd;
647 if ( mSelEndT >= NUMDAYS )
648 mSelEndT = NUMDAYS-1;
642 // draw selected days with highlighted background color 649 // draw selected days with highlighted background color
643 if (mSelStart != NOSELECTION) { 650 if (mSelStart != NOSELECTION) {
644 651 bool skip = false;
645 row = mSelStart/7; 652 if ( ! mouseDown ) {
646 col = mSelStart -row*7; 653 int mo = days[20].month();
654 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
655 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
656 if ( days[mSelStartT].month() > mo || days[mSelEndT].month() < mo ) {
657 skip = true;
658 } else {
659 if ( days[mSelStartT].month() != mo ) {
660 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
661 mSelStartT += add +1;
662 }
663 if ( days[mSelEndT].month() != mo ) {
664 int sub = days[mSelEndT].day();
665 mSelEndT -= sub ;
666 }
667 }
668 }
669 if ( ! skip ) {
670 row = mSelStartT/7;
671 col = mSelStartT -row*7;
647 QColor selcol = KOPrefs::instance()->mHighlightColor; 672 QColor selcol = KOPrefs::instance()->mHighlightColor;
648 673
649 if (row == mSelEnd/7) { 674 if (row == mSelEndT/7) {
650 // Single row selection 675 // Single row selection
651 p.fillRect(isRTL ? (7 - (mSelEnd-mSelStart+1) - col)*dwidth : col*dwidth, 676 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth,
652 row*dheight, (mSelEnd-mSelStart+1)*dwidth, dheight, selcol); 677 row*dheight, (mSelEndT-mSelStartT+1)*dwidth, dheight, selcol);
653 } else { 678 } else {
654 // draw first row to the right 679 // draw first row to the right
655 p.fillRect(isRTL ? 0 : col*dwidth, row*dheight, (7-col)*dwidth, 680 p.fillRect(isRTL ? 0 : col*dwidth, row*dheight, (7-col)*dwidth,
656 dheight, selcol); 681 dheight, selcol);
657 // draw full block till last line 682 // draw full block till last line
658 selh = mSelEnd/7-row; 683 selh = mSelEndT/7-row;
659 if (selh > 1) { 684 if (selh > 1) {
660 p.fillRect(0, (row+1)*dheight, 7*dwidth, (selh-1)*dheight,selcol); 685 p.fillRect(0, (row+1)*dheight, 7*dwidth, (selh-1)*dheight,selcol);
661 } 686 }
662 // draw last block from left to mSelEnd 687 // draw last block from left to mSelEndT
663 selw = mSelEnd-7*(mSelEnd/7)+1; 688 selw = mSelEndT-7*(mSelEndT/7)+1;
664 p.fillRect(isRTL ? (7-selw)*dwidth : 0, (row+selh)*dheight, 689 p.fillRect(isRTL ? (7-selw)*dwidth : 0, (row+selh)*dheight,
665 selw*dwidth, dheight, selcol); 690 selw*dwidth, dheight, selcol);
666 } 691 }
692 }
667 } 693 }
668 694
669 // iterate over all days in the matrix and draw the day label in appropriate colors 695 // iterate over all days in the matrix and draw the day label in appropriate colors
670 QColor actcol = mDefaultTextColorShaded; 696 QColor actcol = mDefaultTextColorShaded;
671 p.setPen(actcol); 697 p.setPen(actcol);
672 QPen tmppen; 698 QPen tmppen;
673 for(int i = 0; i < NUMDAYS; i++) { 699 for(int i = 0; i < NUMDAYS; i++) {
674 row = i/7; 700 row = i/7;
675 col = isRTL ? 6-(i-row*7) : i-row*7; 701 col = isRTL ? 6-(i-row*7) : i-row*7;
676 702
677 // if it is the first day of a month switch color from normal to shaded and vice versa 703 // if it is the first day of a month switch color from normal to shaded and vice versa
678 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { 704 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
679 if (actcol == mDefaultTextColorShaded) { 705 if (actcol == mDefaultTextColorShaded) {
680 actcol = mDefaultTextColor; 706 actcol = mDefaultTextColor;
681 } else { 707 } else {
682 actcol = mDefaultTextColorShaded; 708 actcol = mDefaultTextColorShaded;
683 } 709 }
684 p.setPen(actcol); 710 p.setPen(actcol);
685 } 711 }
686 712 if (actcol == mDefaultTextColorShaded) {
713 if ( ! mouseDown ) {
714 continue;
715 }
716 }
687 //Reset pen color after selected days block 717 //Reset pen color after selected days block
688 if (i == mSelEnd+1) { 718 if (i == mSelEndT+1) {
689 p.setPen(actcol); 719 p.setPen(actcol);
690 } 720 }
691 721
692 // if today then draw rectangle around day 722 // if today then draw rectangle around day
693 if (today == i) { 723 if (today == i) {
694 tmppen = p.pen(); 724 tmppen = p.pen();
695 QPen mTodayPen(p.pen()); 725 QPen mTodayPen(p.pen());
696 726
697 mTodayPen.setWidth(mTodayMarginWidth); 727 mTodayPen.setWidth(mTodayMarginWidth);
698 //draw red rectangle for holidays 728 //draw red rectangle for holidays
699 if (!mHolidays[i].isNull()) { 729 if (!mHolidays[i].isNull()) {
700 if (actcol == mDefaultTextColor) { 730 if (actcol == mDefaultTextColor) {
701 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); 731 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
702 } else { 732 } else {
703 mTodayPen.setColor(mHolidayColorShaded); 733 mTodayPen.setColor(mHolidayColorShaded);
704 } 734 }
705 } 735 }
706 //draw gray rectangle for today if in selection 736 //draw gray rectangle for today if in selection
707 if (i >= mSelStart && i <= mSelEnd) { 737 if (i >= mSelStartT && i <= mSelEndT) {
708 QColor grey("grey"); 738 QColor grey("grey");
709 mTodayPen.setColor(grey); 739 mTodayPen.setColor(grey);
710 } 740 }
711 p.setPen(mTodayPen); 741 p.setPen(mTodayPen);
712 p.drawRect(col*dwidth, row*dheight, dwidth, dheight); 742 p.drawRect(col*dwidth, row*dheight, dwidth, dheight);
713 p.setPen(tmppen); 743 p.setPen(tmppen);
714 } 744 }
715 745
716 // if any events are on that day then draw it using a bold font 746 // if any events are on that day then draw it using a bold font
717 if (events[i] > 0) { 747 if (events[i] > 0) {
718 QFont myFont = font(); 748 QFont myFont = font();
719 myFont.setBold(true); 749 myFont.setBold(true);
@@ -726,25 +756,25 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
726 p.setPen(Qt::green); 756 p.setPen(Qt::green);
727 } else { 757 } else {
728 if (actcol == mDefaultTextColor) { 758 if (actcol == mDefaultTextColor) {
729 p.setPen(KOPrefs::instance()->mHolidayColor); 759 p.setPen(KOPrefs::instance()->mHolidayColor);
730 } else { 760 } else {
731 p.setPen(mHolidayColorShaded); 761 p.setPen(mHolidayColorShaded);
732 } 762 }
733 } 763 }
734 } 764 }
735 765
736 // draw selected days with special color 766 // draw selected days with special color
737 // DO NOT specially highlight holidays in selection ! 767 // DO NOT specially highlight holidays in selection !
738 if (i >= mSelStart && i <= mSelEnd) { 768 if (i >= mSelStartT && i <= mSelEndT) {
739 ;//p.setPen(mSelectedDaysColor); 769 ;//p.setPen(mSelectedDaysColor);
740 } 770 }
741 771
742 p.drawText(col*dwidth, row*dheight, dwidth, dheight, 772 p.drawText(col*dwidth, row*dheight, dwidth, dheight,
743 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 773 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
744 774
745 // reset color to actual color 775 // reset color to actual color
746 if (!mHolidays[i].isNull()) { 776 if (!mHolidays[i].isNull()) {
747 p.setPen(actcol); 777 p.setPen(actcol);
748 } 778 }
749 // reset bold font to plain font 779 // reset bold font to plain font
750 if (events[i] > 0) { 780 if (events[i] > 0) {