-rw-r--r-- | korganizer/kodaymatrix.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index 8affe50..c7e1b45 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp | |||
@@ -64,105 +64,108 @@ class KODaymatrixWhatsThis :public QWhatsThis | |||
64 | public: | 64 | public: |
65 | KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; | 65 | KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; |
66 | ~KODaymatrixWhatsThis() { ; }; | 66 | ~KODaymatrixWhatsThis() { ; }; |
67 | 67 | ||
68 | protected: | 68 | protected: |
69 | virtual QString text( const QPoint& p ) | 69 | virtual QString text( const QPoint& p ) |
70 | { | 70 | { |
71 | return _view->getWhatsThisText( p ) ; | 71 | return _view->getWhatsThisText( p ) ; |
72 | } | 72 | } |
73 | private: | 73 | private: |
74 | KODayMatrix * _view; | 74 | KODayMatrix * _view; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | void DynamicTip::maybeTip( const QPoint &pos ) | 77 | void DynamicTip::maybeTip( const QPoint &pos ) |
78 | { | 78 | { |
79 | //calculate which cell of the matrix the mouse is in | 79 | //calculate which cell of the matrix the mouse is in |
80 | QRect sz = matrix->frameRect(); | 80 | QRect sz = matrix->frameRect(); |
81 | int dheight = sz.height()*7 / 42; | 81 | int dheight = sz.height()*7 / 42; |
82 | int dwidth = sz.width() / 7; | 82 | int dwidth = sz.width() / 7; |
83 | int row = pos.y()/dheight; | 83 | int row = pos.y()/dheight; |
84 | int col = pos.x()/dwidth; | 84 | int col = pos.x()/dwidth; |
85 | 85 | ||
86 | QRect rct(col*dwidth, row*dheight, dwidth, dheight); | 86 | QRect rct(col*dwidth, row*dheight, dwidth, dheight); |
87 | 87 | ||
88 | // kdDebug() << "DynamicTip::maybeTip matrix cell index [" << | 88 | // kdDebug() << "DynamicTip::maybeTip matrix cell index [" << |
89 | // col << "][" << row << "] => " <<(col+row*7) << endl; | 89 | // col << "][" << row << "] => " <<(col+row*7) << endl; |
90 | 90 | ||
91 | //show holiday names only | 91 | //show holiday names only |
92 | QString str = matrix->getHolidayLabel(col+row*7); | 92 | QString str = matrix->getHolidayLabel(col+row*7); |
93 | if (str.isEmpty()) return; | 93 | if (str.isEmpty()) return; |
94 | tip(rct, str); | 94 | tip(rct, str); |
95 | } | 95 | } |
96 | 96 | ||
97 | 97 | ||
98 | // ============================================================================ | 98 | // ============================================================================ |
99 | // K O D A Y M A T R I X | 99 | // K O D A Y M A T R I X |
100 | // ============================================================================ | 100 | // ============================================================================ |
101 | 101 | ||
102 | const int KODayMatrix::NOSELECTION = -1000; | 102 | const int KODayMatrix::NOSELECTION = -1000; |
103 | const int KODayMatrix::NUMDAYS = 42; | 103 | const int KODayMatrix::NUMDAYS = 42; |
104 | 104 | ||
105 | KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) | 105 | KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) |
106 | : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) | 106 | : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) |
107 | 107 | ||
108 | #if 0 | 108 | #if 0 |
109 | KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : | 109 | KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : |
110 | QFrame(parent, name) | 110 | QFrame(parent, name) |
111 | #endif | 111 | #endif |
112 | { | 112 | { |
113 | oldW = 0; | ||
114 | oldH = 0; | ||
115 | myPix.resize( 150, 120 ); | ||
113 | mRedrawNeeded = true; | 116 | mRedrawNeeded = true; |
114 | mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); | 117 | mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); |
115 | mPendingUpdateBeforeRepaint = false; | 118 | mPendingUpdateBeforeRepaint = false; |
116 | mouseDown = false; | 119 | mouseDown = false; |
117 | // initialize dynamic arrays | 120 | // initialize dynamic arrays |
118 | bDays.resize ( NUMDAYS ); | 121 | bDays.resize ( NUMDAYS ); |
119 | hDays.resize ( NUMDAYS );; | 122 | hDays.resize ( NUMDAYS ); |
120 | eDays.resize ( NUMDAYS );; | 123 | eDays.resize ( NUMDAYS ); |
121 | days = new QDate[NUMDAYS]; | 124 | days = new QDate[NUMDAYS]; |
122 | daylbls = new QString[NUMDAYS]; | 125 | daylbls = new QString[NUMDAYS]; |
123 | //events = new int[NUMDAYS]; | 126 | //events = new int[NUMDAYS]; |
124 | mToolTip = new DynamicTip(this); | 127 | mToolTip = new DynamicTip(this); |
125 | 128 | ||
126 | // set default values used for drawing the matrix | 129 | // set default values used for drawing the matrix |
127 | mDefaultBackColor = palette().active().base(); | 130 | mDefaultBackColor = palette().active().base(); |
128 | mDefaultTextColor = palette().active().foreground(); | 131 | mDefaultTextColor = palette().active().foreground(); |
129 | mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); | 132 | mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); |
130 | mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); | 133 | mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); |
131 | mSelectedDaysColor = QColor("white"); | 134 | mSelectedDaysColor = QColor("white"); |
132 | mTodayMarginWidth = 2; | 135 | mTodayMarginWidth = 2; |
133 | mSelEnd = mSelStart = NOSELECTION; | 136 | mSelEnd = mSelStart = NOSELECTION; |
134 | 137 | ||
135 | setAcceptDrops(true); | 138 | setAcceptDrops(true); |
136 | //setFont( QFont("Arial", 10) ); | 139 | //setFont( QFont("Arial", 10) ); |
137 | 140 | ||
138 | mUpdateTimer = new QTimer( this ); | 141 | mUpdateTimer = new QTimer( this ); |
139 | connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); | 142 | connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); |
140 | mRepaintTimer = new QTimer( this ); | 143 | mRepaintTimer = new QTimer( this ); |
141 | connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); | 144 | connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); |
142 | mDayChanged = false; | 145 | mDayChanged = false; |
143 | updateView(); | 146 | updateView(); |
144 | } | 147 | } |
145 | QString KODayMatrix::getWhatsThisText( QPoint p ) | 148 | QString KODayMatrix::getWhatsThisText( QPoint p ) |
146 | { | 149 | { |
147 | 150 | ||
148 | int tmp = getDayIndexFrom(p.x(), p.y()); | 151 | int tmp = getDayIndexFrom(p.x(), p.y()); |
149 | if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) | 152 | if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) |
150 | return QString(); | 153 | return QString(); |
151 | QDate mDate = days[tmp]; | 154 | QDate mDate = days[tmp]; |
152 | QPtrList<Event> eventlist = mCalendar->events(mDate); | 155 | QPtrList<Event> eventlist = mCalendar->events(mDate); |
153 | Event *event; | 156 | Event *event; |
154 | QStringList mToolTip; | 157 | QStringList mToolTip; |
155 | for(event=eventlist.first();event != 0;event=eventlist.next()) { | 158 | for(event=eventlist.first();event != 0;event=eventlist.next()) { |
156 | QString mToolTipText; | 159 | QString mToolTipText; |
157 | QString text; | 160 | QString text; |
158 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day | 161 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day |
159 | if (event->isMultiDay()) { | 162 | if (event->isMultiDay()) { |
160 | QString prefix = "<->";multiday = 2; | 163 | QString prefix = "<->";multiday = 2; |
161 | QString time; | 164 | QString time; |
162 | if ( event->doesRecur() ) { | 165 | if ( event->doesRecur() ) { |
163 | if ( event->recursOn( mDate) ) { | 166 | if ( event->recursOn( mDate) ) { |
164 | prefix ="->" ;multiday = 1; | 167 | prefix ="->" ;multiday = 1; |
165 | } | 168 | } |
166 | else { | 169 | else { |
167 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); | 170 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); |
168 | if ( event->recursOn( mDate.addDays( -days)) ) { | 171 | if ( event->recursOn( mDate.addDays( -days)) ) { |
@@ -289,97 +292,101 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays) | |||
289 | 292 | ||
290 | bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) | 293 | bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) |
291 | { | 294 | { |
292 | mRedrawNeeded = true; | 295 | mRedrawNeeded = true; |
293 | bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); | 296 | bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); |
294 | mSelStart = startdate.daysTo(start); | 297 | mSelStart = startdate.daysTo(start); |
295 | if ( mSelStart < 0 ) | 298 | if ( mSelStart < 0 ) |
296 | mSelStart = 0; | 299 | mSelStart = 0; |
297 | mSelEnd = startdate.daysTo(end); | 300 | mSelEnd = startdate.daysTo(end); |
298 | if ( mSelEnd > NUMDAYS-1 ) | 301 | if ( mSelEnd > NUMDAYS-1 ) |
299 | mSelEnd = NUMDAYS-1; | 302 | mSelEnd = NUMDAYS-1; |
300 | if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { | 303 | if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { |
301 | clearSelection(); | 304 | clearSelection(); |
302 | if ( noSel ) | 305 | if ( noSel ) |
303 | return false; | 306 | return false; |
304 | } | 307 | } |
305 | 308 | ||
306 | return true; | 309 | return true; |
307 | } | 310 | } |
308 | void KODayMatrix::clearSelection() | 311 | void KODayMatrix::clearSelection() |
309 | { | 312 | { |
310 | mSelEnd = mSelStart = NOSELECTION; | 313 | mSelEnd = mSelStart = NOSELECTION; |
311 | } | 314 | } |
312 | 315 | ||
313 | 316 | ||
314 | void KODayMatrix::recalculateToday() | 317 | void KODayMatrix::recalculateToday() |
315 | { | 318 | { |
316 | today = -1; | 319 | today = -1; |
317 | for (int i=0; i<NUMDAYS; i++) { | 320 | for (int i=0; i<NUMDAYS; i++) { |
318 | //events[i] = 0; | 321 | //events[i] = 0; |
319 | days[i] = startdate.addDays(i); | 322 | days[i] = startdate.addDays(i); |
320 | daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); | 323 | daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); |
321 | 324 | ||
322 | // if today is in the currently displayed month, hilight today | 325 | // if today is in the currently displayed month, hilight today |
323 | if (days[i].year() == QDate::currentDate().year() && | 326 | if (days[i].year() == QDate::currentDate().year() && |
324 | days[i].month() == QDate::currentDate().month() && | 327 | days[i].month() == QDate::currentDate().month() && |
325 | days[i].day() == QDate::currentDate().day()) { | 328 | days[i].day() == QDate::currentDate().day()) { |
326 | today = i; | 329 | today = i; |
327 | } | 330 | } |
328 | } | 331 | } |
329 | // qDebug(QString("Today is visible at %1.").arg(today)); | 332 | // qDebug(QString("Today is visible at %1.").arg(today)); |
330 | } | 333 | } |
331 | 334 | ||
332 | void KODayMatrix::updateView() | 335 | void KODayMatrix::updateView() |
333 | { | 336 | { |
334 | updateView(startdate); | 337 | updateView(startdate); |
335 | } | 338 | } |
336 | void KODayMatrix::repaintViewTimed() | 339 | void KODayMatrix::repaintViewTimed() |
337 | { | 340 | { |
341 | mRedrawNeeded = true; | ||
342 | bDays.fill( false); | ||
343 | hDays.fill( false); | ||
344 | eDays.fill( false); | ||
338 | mRepaintTimer->stop(); | 345 | mRepaintTimer->stop(); |
339 | repaint(false); | 346 | repaint(false); |
340 | } | 347 | } |
341 | void KODayMatrix::updateViewTimed() | 348 | void KODayMatrix::updateViewTimed() |
342 | { | 349 | { |
343 | mUpdateTimer->stop(); | 350 | mUpdateTimer->stop(); |
344 | if ( !mCalendar ) { | 351 | if ( !mCalendar ) { |
345 | qDebug("NOT CAL "); | 352 | qDebug("NOT CAL "); |
346 | return; | 353 | return; |
347 | } | 354 | } |
348 | //qDebug("KODayMatrix::updateViewTimed "); | 355 | //qDebug("KODayMatrix::updateViewTimed "); |
349 | for(int i = 0; i < NUMDAYS; i++) { | 356 | for(int i = 0; i < NUMDAYS; i++) { |
350 | // if events are set for the day then remember to draw it bold | 357 | // if events are set for the day then remember to draw it bold |
351 | QPtrList<Event> eventlist = mCalendar->events(days[i]); | 358 | QPtrList<Event> eventlist = mCalendar->events(days[i]); |
352 | Event *event; | 359 | Event *event; |
353 | int numEvents = eventlist.count(); | 360 | int numEvents = eventlist.count(); |
354 | QString holiStr = ""; | 361 | QString holiStr = ""; |
355 | bDays.clearBit(i); | 362 | bDays.clearBit(i); |
356 | hDays.clearBit(i); | 363 | hDays.clearBit(i); |
357 | eDays.clearBit(i); | 364 | eDays.clearBit(i); |
358 | for(event=eventlist.first();event != 0;event=eventlist.next()) { | 365 | for(event=eventlist.first();event != 0;event=eventlist.next()) { |
359 | ushort recurType = event->recurrence()->doesRecur(); | 366 | ushort recurType = event->recurrence()->doesRecur(); |
360 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || | 367 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || |
361 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { | 368 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { |
362 | numEvents--; | 369 | numEvents--; |
363 | } | 370 | } |
364 | if ( event->isHoliday()) { | 371 | if ( event->isHoliday()) { |
365 | hDays.setBit(i); | 372 | hDays.setBit(i); |
366 | if ( !holiStr.isEmpty() ) | 373 | if ( !holiStr.isEmpty() ) |
367 | holiStr += "\n"; | 374 | holiStr += "\n"; |
368 | holiStr += event->summary(); | 375 | holiStr += event->summary(); |
369 | if ( !event->location().isEmpty() ) | 376 | if ( !event->location().isEmpty() ) |
370 | holiStr += " (" + event->location() + ")"; | 377 | holiStr += " (" + event->location() + ")"; |
371 | } | 378 | } |
372 | if ( event->isBirthday()) { | 379 | if ( event->isBirthday()) { |
373 | if ( !holiStr.isEmpty() ) | 380 | if ( !holiStr.isEmpty() ) |
374 | holiStr += "\n"; | 381 | holiStr += "\n"; |
375 | holiStr += i18n("Birthday") + ": "+event->summary(); | 382 | holiStr += i18n("Birthday") + ": "+event->summary(); |
376 | if ( !event->location().isEmpty() ) | 383 | if ( !event->location().isEmpty() ) |
377 | holiStr += " (" + event->location() + ")"; | 384 | holiStr += " (" + event->location() + ")"; |
378 | bDays.setBit(i); | 385 | bDays.setBit(i); |
379 | } | 386 | } |
380 | } | 387 | } |
381 | if ( numEvents ) | 388 | if ( numEvents ) |
382 | eDays.setBit(i); | 389 | eDays.setBit(i); |
383 | //if it is a holy day then draw it red. Sundays are consider holidays, too | 390 | //if it is a holy day then draw it red. Sundays are consider holidays, too |
384 | if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || | 391 | if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || |
385 | !holiStr.isEmpty()) { | 392 | !holiStr.isEmpty()) { |
@@ -638,101 +645,113 @@ void KODayMatrix::dropEvent(QDropEvent *e) | |||
638 | Event *existingEvent = mCalendar->event(event->uid()); | 645 | Event *existingEvent = mCalendar->event(event->uid()); |
639 | 646 | ||
640 | if(existingEvent) { | 647 | if(existingEvent) { |
641 | // uniquify event | 648 | // uniquify event |
642 | event->recreate(); | 649 | event->recreate(); |
643 | /* | 650 | /* |
644 | KMessageBox::sorry(this, | 651 | KMessageBox::sorry(this, |
645 | i18n("Event already exists in this calendar."), | 652 | i18n("Event already exists in this calendar."), |
646 | i18n("Drop Event")); | 653 | i18n("Drop Event")); |
647 | delete event; | 654 | delete event; |
648 | return; | 655 | return; |
649 | */ | 656 | */ |
650 | } | 657 | } |
651 | // kdDebug() << "Drop new Event" << endl; | 658 | // kdDebug() << "Drop new Event" << endl; |
652 | // Adjust date | 659 | // Adjust date |
653 | QDateTime start = event->dtStart(); | 660 | QDateTime start = event->dtStart(); |
654 | QDateTime end = event->dtEnd(); | 661 | QDateTime end = event->dtEnd(); |
655 | int duration = start.daysTo(end); | 662 | int duration = start.daysTo(end); |
656 | int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); | 663 | int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); |
657 | 664 | ||
658 | start.setDate(days[idx]); | 665 | start.setDate(days[idx]); |
659 | end.setDate(days[idx].addDays(duration)); | 666 | end.setDate(days[idx].addDays(duration)); |
660 | 667 | ||
661 | event->setDtStart(start); | 668 | event->setDtStart(start); |
662 | event->setDtEnd(end); | 669 | event->setDtEnd(end); |
663 | mCalendar->addEvent(event); | 670 | mCalendar->addEvent(event); |
664 | 671 | ||
665 | emit eventDropped(event); | 672 | emit eventDropped(event); |
666 | } else { | 673 | } else { |
667 | // kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; | 674 | // kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; |
668 | e->ignore(); | 675 | e->ignore(); |
669 | } | 676 | } |
670 | #endif | 677 | #endif |
671 | } | 678 | } |
672 | 679 | ||
673 | // ---------------------------------------------------------------------------- | 680 | // ---------------------------------------------------------------------------- |
674 | // P A I N T E V E N T H A N D L I N G | 681 | // P A I N T E V E N T H A N D L I N G |
675 | // ---------------------------------------------------------------------------- | 682 | // ---------------------------------------------------------------------------- |
676 | 683 | ||
677 | void KODayMatrix::paintEvent(QPaintEvent * pevent) | 684 | void KODayMatrix::paintEvent(QPaintEvent * pevent) |
678 | { | 685 | { |
679 | 686 | ||
680 | if ( width() <= 0 || height() <= 0 ) | 687 | if ( width() <= 0 || height() <= 0 ) |
681 | return; | 688 | return; |
682 | if ( mPendingUpdateBeforeRepaint ) { | 689 | if ( mPendingUpdateBeforeRepaint ) { |
683 | updateViewTimed(); | 690 | updateViewTimed(); |
684 | mPendingUpdateBeforeRepaint = false; | 691 | mPendingUpdateBeforeRepaint = false; |
685 | } | 692 | } |
693 | #if 0 | ||
686 | if ( myPix.width() != width() || myPix.height()!=height() ) { | 694 | if ( myPix.width() != width() || myPix.height()!=height() ) { |
687 | myPix.resize(size() ); | 695 | myPix.resize(size() ); |
688 | mRedrawNeeded = true; | 696 | mRedrawNeeded = true; |
689 | } | 697 | } |
690 | 698 | #endif | |
699 | if ( oldW != width() || oldH !=height() ) | ||
700 | mRedrawNeeded = true; | ||
701 | |||
702 | oldH = height() ; | ||
703 | oldW = width(); | ||
704 | if ( myPix.width() < width() || myPix.height() < height() ) { | ||
705 | myPix.resize(size() ); | ||
706 | mRedrawNeeded = true; | ||
707 | |||
708 | } | ||
709 | |||
691 | if ( mRedrawNeeded ) { | 710 | if ( mRedrawNeeded ) { |
692 | //qDebug("REDRAW "); | 711 | //qDebug("REDRAW "); |
693 | QPainter p(&myPix); | 712 | QPainter p(&myPix); |
694 | p.setFont(font()); | 713 | p.setFont(font()); |
695 | 714 | ||
696 | 715 | ||
697 | int dheight = daysize.height(); | 716 | int dheight = daysize.height(); |
698 | int dwidth = daysize.width(); | 717 | int dwidth = daysize.width(); |
699 | int row,col; | 718 | int row,col; |
700 | int selw, selh; | 719 | int selw, selh; |
701 | int xyOff = frameWidth(); | 720 | int xyOff = frameWidth(); |
702 | int colModulo = (width()-2) % 7; | 721 | int colModulo = (width()-2) % 7; |
703 | int rowModulo = (height()-2) % 6; | 722 | int rowModulo = (height()-2) % 6; |
704 | //qDebug("col %d row %d ",colModulo,rowModulo ); | 723 | //qDebug("col %d row %d ",colModulo,rowModulo ); |
705 | 724 | ||
706 | bool isRTL = KOGlobals::self()->reverseLayout(); | 725 | bool isRTL = KOGlobals::self()->reverseLayout(); |
707 | 726 | ||
708 | // draw background and topleft frame | 727 | // draw background and topleft frame |
709 | p.fillRect(0,0,width(),height(), mDefaultBackColor); | 728 | p.fillRect(0,0,width(),height(), mDefaultBackColor); |
710 | p.setPen(mDefaultTextColor); | 729 | p.setPen(mDefaultTextColor); |
711 | p.drawRect(0, 0, width(), height()); | 730 | p.drawRect(0, 0, width(), height()); |
712 | int mSelStartT = mSelStart; | 731 | int mSelStartT = mSelStart; |
713 | int mSelEndT = mSelEnd; | 732 | int mSelEndT = mSelEnd; |
714 | if ( mSelEndT >= NUMDAYS ) | 733 | if ( mSelEndT >= NUMDAYS ) |
715 | mSelEndT = NUMDAYS-1; | 734 | mSelEndT = NUMDAYS-1; |
716 | // draw selected days with highlighted background color | 735 | // draw selected days with highlighted background color |
717 | if (mSelStart != NOSELECTION) { | 736 | if (mSelStart != NOSELECTION) { |
718 | bool skip = false; | 737 | bool skip = false; |
719 | if ( ! mouseDown ) { | 738 | if ( ! mouseDown ) { |
720 | int mo = days[20].month(); | 739 | int mo = days[20].month(); |
721 | //qDebug("-- %d %d ", mSelStartT, mSelEndT); | 740 | //qDebug("-- %d %d ", mSelStartT, mSelEndT); |
722 | //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); | 741 | //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); |
723 | int startMo = days[mSelStartT].month(); | 742 | int startMo = days[mSelStartT].month(); |
724 | int endMo = days[mSelEndT].month(); | 743 | int endMo = days[mSelEndT].month(); |
725 | if ( startMo == 12 && mo == 1 && endMo <= 2 ) | 744 | if ( startMo == 12 && mo == 1 && endMo <= 2 ) |
726 | startMo = 1; | 745 | startMo = 1; |
727 | if ( endMo == 1 && mo == 12 ) | 746 | if ( endMo == 1 && mo == 12 ) |
728 | endMo = 12; | 747 | endMo = 12; |
729 | if ( mo == 12 && startMo == 1 ) | 748 | if ( mo == 12 && startMo == 1 ) |
730 | startMo = 13; | 749 | startMo = 13; |
731 | if ( (startMo > mo || endMo < mo) ) { | 750 | if ( (startMo > mo || endMo < mo) ) { |
732 | skip = true; | 751 | skip = true; |
733 | } else { | 752 | } else { |
734 | if ( days[mSelStartT].month() != mo ) { | 753 | if ( days[mSelStartT].month() != mo ) { |
735 | int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); | 754 | int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); |
736 | mSelStartT += add +1; | 755 | mSelStartT += add +1; |
737 | } | 756 | } |
738 | if ( days[mSelEndT].month() != mo ) { | 757 | if ( days[mSelEndT].month() != mo ) { |
@@ -902,73 +921,74 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent) | |||
902 | else | 921 | else |
903 | p.setPen(QColor(Qt::green).dark()); | 922 | p.setPen(QColor(Qt::green).dark()); |
904 | } else { | 923 | } else { |
905 | if (actcol == mDefaultTextColor ) { | 924 | if (actcol == mDefaultTextColor ) { |
906 | p.setPen(KOPrefs::instance()->mHolidayColor); | 925 | p.setPen(KOPrefs::instance()->mHolidayColor); |
907 | } else { | 926 | } else { |
908 | p.setPen(mHolidayColorShaded); | 927 | p.setPen(mHolidayColorShaded); |
909 | } | 928 | } |
910 | } | 929 | } |
911 | } | 930 | } |
912 | 931 | ||
913 | // draw selected days with special color | 932 | // draw selected days with special color |
914 | // DO NOT specially highlight holidays in selection ! | 933 | // DO NOT specially highlight holidays in selection ! |
915 | if (i >= mSelStartT && i <= mSelEndT) { | 934 | if (i >= mSelStartT && i <= mSelEndT) { |
916 | ;//p.setPen(mSelectedDaysColor); | 935 | ;//p.setPen(mSelectedDaysColor); |
917 | } | 936 | } |
918 | 937 | ||
919 | int addCol = 0; | 938 | int addCol = 0; |
920 | int addRow = 0; | 939 | int addRow = 0; |
921 | if ( colModulo ) { | 940 | if ( colModulo ) { |
922 | if ( col >= 7 - colModulo ) | 941 | if ( col >= 7 - colModulo ) |
923 | addCol = col - 7 + colModulo; | 942 | addCol = col - 7 + colModulo; |
924 | } | 943 | } |
925 | if ( rowModulo ) { | 944 | if ( rowModulo ) { |
926 | if ( row >= 6 - rowModulo ) | 945 | if ( row >= 6 - rowModulo ) |
927 | addRow = row - 5 + rowModulo; | 946 | addRow = row - 5 + rowModulo; |
928 | } | 947 | } |
929 | //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); | 948 | //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); |
930 | ++addCol;//++addCol; | 949 | ++addCol;//++addCol; |
931 | if ( row == 0) | 950 | if ( row == 0) |
932 | addRow = 1; | 951 | addRow = 1; |
933 | p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, | 952 | p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, |
934 | Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); | 953 | Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); |
935 | 954 | ||
936 | // reset color to actual color | 955 | // reset color to actual color |
937 | if (!mHolidays[i].isNull()) { | 956 | if (!mHolidays[i].isNull()) { |
938 | p.setPen(actcol); | 957 | p.setPen(actcol); |
939 | } | 958 | } |
940 | // reset bold font to plain font | 959 | // reset bold font to plain font |
941 | if ( eDays.testBit(i)) { | 960 | if ( eDays.testBit(i)) { |
942 | QFont myFont = font(); | 961 | QFont myFont = font(); |
943 | myFont.setBold(false); | 962 | myFont.setBold(false); |
944 | p.setFont(myFont); | 963 | p.setFont(myFont); |
945 | } | 964 | } |
946 | } | 965 | } |
947 | } else { | 966 | } else { |
948 | //qDebug("NO redraw "); | 967 | //qDebug("NO redraw "); |
949 | } | 968 | } |
950 | bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); | 969 | |
970 | bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP); | ||
951 | mRedrawNeeded = false; | 971 | mRedrawNeeded = false; |
952 | } | 972 | } |
953 | 973 | ||
954 | // ---------------------------------------------------------------------------- | 974 | // ---------------------------------------------------------------------------- |
955 | // R E SI Z E E V E N T H A N D L I N G | 975 | // R E SI Z E E V E N T H A N D L I N G |
956 | // ---------------------------------------------------------------------------- | 976 | // ---------------------------------------------------------------------------- |
957 | 977 | ||
958 | void KODayMatrix::resizeEvent(QResizeEvent *) | 978 | void KODayMatrix::resizeEvent(QResizeEvent *) |
959 | { | 979 | { |
960 | QRect sz = frameRect(); | 980 | QRect sz = frameRect(); |
961 | daysize.setHeight(sz.height()*7 / NUMDAYS); | 981 | daysize.setHeight(sz.height()*7 / NUMDAYS); |
962 | daysize.setWidth(sz.width() / 7); | 982 | daysize.setWidth(sz.width() / 7); |
963 | } | 983 | } |
964 | 984 | ||
965 | QSize KODayMatrix::sizeHint() const | 985 | QSize KODayMatrix::sizeHint() const |
966 | { | 986 | { |
967 | 987 | ||
968 | QFontMetrics fm ( font() ); | 988 | QFontMetrics fm ( font() ); |
969 | int wid = fm.width( "30") *7+3; | 989 | int wid = fm.width( "30") *7+3; |
970 | int hei = fm.height() * 6+3; | 990 | int hei = fm.height() * 6+3; |
971 | //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); | 991 | //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); |
972 | return QSize ( wid, hei ); | 992 | return QSize ( wid, hei ); |
973 | 993 | ||
974 | } | 994 | } |