author | zautrix <zautrix> | 2005-04-19 19:32:54 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-04-19 19:32:54 (UTC) |
commit | cdcb0e0d0163695c56cf7cf9bd3f046ac63173ee (patch) (side-by-side diff) | |
tree | 70cb7e2db9d7075a7c7e7c38adbad0c50e5d8dc4 /korganizer/kodaymatrix.cpp | |
parent | b36bdf88fbf3cc78e4bf072b5eb3ec16bd8ec235 (diff) | |
download | kdepimpi-cdcb0e0d0163695c56cf7cf9bd3f046ac63173ee.zip kdepimpi-cdcb0e0d0163695c56cf7cf9bd3f046ac63173ee.tar.gz kdepimpi-cdcb0e0d0163695c56cf7cf9bd3f046ac63173ee.tar.bz2 |
fixes
-rw-r--r-- | korganizer/kodaymatrix.cpp | 87 |
1 files changed, 62 insertions, 25 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index 17a1d13..df606d0 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp @@ -321,267 +321,304 @@ void KODayMatrix::recalculateToday() for (int i=0; i<NUMDAYS; i++) { //events[i] = 0; days[i] = startdate.addDays(i); daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); // if today is in the currently displayed month, hilight today if (days[i].year() == QDate::currentDate().year() && days[i].month() == QDate::currentDate().month() && days[i].day() == QDate::currentDate().day()) { today = i; } } // qDebug(QString("Today is visible at %1.").arg(today)); } void KODayMatrix::updateView() { updateView(startdate); } void KODayMatrix::repaintViewTimed() { mRedrawNeeded = true; // bDays.fill( false); //pDays.fill( false); //hDays.fill( false); //eDays.fill( false); mRepaintTimer->stop(); int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday int i; for(i = 0; i < NUMDAYS; i++) { if ( ( (i+startDay) % 7 == 0 ) ) { pDays.setBit(i); } } repaint(false); } void KODayMatrix::computeEvent(Event *event, int i ) { QString holiStr = mHolidays[i]; if ( event->isHoliday()) { pDays.setBit(i); hDays.setBit(i); if ( !holiStr.isEmpty() ) holiStr += "\n"; holiStr += event->summary(); if ( !event->location().isEmpty() ) holiStr += " (" + event->location() + ")"; mHolidays[i] =holiStr ; + eDays.setBit(i); } - if ( event->isBirthday()) { - pDays.setBit(i); - if ( !holiStr.isEmpty() ) - holiStr += "\n"; - holiStr += i18n("Birthday") + ": "+event->summary(); - if ( !event->location().isEmpty() ) - holiStr += " (" + event->location() + ")"; - bDays.setBit(i); - mHolidays[i] =holiStr ; + if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) { + if ( event->isBirthday()) { + pDays.setBit(i); + if ( !holiStr.isEmpty() ) + holiStr += "\n"; + holiStr += i18n("Birthday") + ": "+event->summary(); + if ( !event->location().isEmpty() ) + holiStr += " (" + event->location() + ")"; + bDays.setBit(i); + mHolidays[i] =holiStr ; + } } - eDays.setBit(i); + if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) + eDays.setBit(i); } void KODayMatrix::updateViewTimed() { mUpdateTimer->stop(); if ( !mCalendar ) { qDebug("NOT CAL "); return; } #if 1 + int i; int timeSpan = NUMDAYS-1; QPtrList<Event> events = mCalendar->events(); Event *event; QDateTime dt; bool ok; bDays.fill( false); pDays.fill( false); hDays.fill( false); eDays.fill( false); mHolidays.clear(); QDate mStartDate = days[0]; QDate endDate = mStartDate.addDays( timeSpan ); for( event = events.first(); event; event = events.next() ) { // for event ushort recurType = event->recurrence()->doesRecur(); if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { continue; } if ( event->doesRecur() ) { bool last; QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); QDateTime incidenceEnd; int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); bool invalid = false; while( true ) { if ( incidenceStart.isValid() ) { incidenceEnd = incidenceStart.addDays( eventlen ); int st = incidenceStart.date().daysTo( endDate ); if ( st >= 0 ) { // start before timeend int end = mStartDate.daysTo( incidenceEnd.date() ); if ( end >= 0 ) { // end after timestart --- got one! //normalize st = timeSpan - st; if ( st < 0 ) st = 0; if ( end > timeSpan ) end = timeSpan; int iii; //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); for ( iii = st;iii<= end;++iii) { computeEvent( event, iii ); } } } } else { if ( invalid ) break; invalid = true; //qDebug("invalid %s", event->summary().latin1()); incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; } if ( last ) break; bool ok; incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); if ( ! ok ) break; if ( incidenceStart.date() > endDate ) break; } } else { // no recur int st = event->dtStart().date().daysTo( endDate ); if ( st >= 0 ) { // start before timeend int end = mStartDate.daysTo( event->dtEnd().date() ); if ( end >= 0 ) { // end after timestart --- got one! //normalize st = timeSpan - st; if ( st < 0 ) st = 0; if ( end > timeSpan ) end = timeSpan; int iii; for ( iii = st;iii<= end;++iii) computeEvent( event, iii ); } } } } int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday for(i = 0; i < NUMDAYS; i++) { if ( ( (i+startDay) % 7 == 0 ) ) { pDays.setBit(i); } } - -#if 0 - // insert due todos - QPtrList<Todo> todos = calendar()->todos( ); - Todo *todo; - for(todo = todos.first(); todo; todo = todos.next()) { - //insertTodo( todo ); - if ( todo->hasDueDate() ) { - int day = mStartDate.daysTo( todo->dtDue().date() ); + if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { + bDays.fill( false); + // insert due todos + QPtrList<Todo> todos = mCalendar->todos( ); + Todo *todo; + for(todo = todos.first(); todo; todo = todos.next()) { + //insertTodo( todo ); + if ( todo->hasDueDate() ) { + int day = mStartDate.daysTo( todo->dtDue().date() ); + if ( day >= 0 && day < timeSpan + 1) { + int i = day; + QString holiStr = mHolidays[i]; + pDays.setBit(i); + if ( !holiStr.isEmpty() ) + holiStr += "\n"; + holiStr += i18n("Todo") + ": "+todo->summary(); + if ( !todo->location().isEmpty() ) + holiStr += " (" + todo->location() + ")"; + bDays.setBit(i); + mHolidays[i] =holiStr ; + eDays.setBit(i); + } + } + } + } + if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { + bDays.fill( false); + // insert due todos + QPtrList<Journal> todos = mCalendar->journals( ); + Journal *todo; + for(todo = todos.first(); todo; todo = todos.next()) { + int day = mStartDate.daysTo( todo->dtStart().date() ); if ( day >= 0 && day < timeSpan + 1) { - (*cells)[day]->insertTodo( todo ); + int i = day; + QString holiStr = mHolidays[i]; + pDays.setBit(i); + if ( !holiStr.isEmpty() ) + holiStr += "\n"; + holiStr += i18n("Journal"); + bDays.setBit(i); + mHolidays[i] =holiStr ; + eDays.setBit(i); + } } } -#endif - #else //qDebug("KODayMatrix::updateViewTimed "); for(int i = 0; i < NUMDAYS; i++) { // if events are set for the day then remember to draw it bold QPtrList<Event> eventlist = mCalendar->events(days[i]); Event *event; int numEvents = eventlist.count(); QString holiStr = ""; bDays.clearBit(i); hDays.clearBit(i); eDays.clearBit(i); for(event=eventlist.first();event != 0;event=eventlist.next()) { ushort recurType = event->recurrence()->doesRecur(); if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { numEvents--; } if ( event->isHoliday()) { hDays.setBit(i); if ( !holiStr.isEmpty() ) holiStr += "\n"; holiStr += event->summary(); if ( !event->location().isEmpty() ) holiStr += " (" + event->location() + ")"; } if ( event->isBirthday()) { if ( !holiStr.isEmpty() ) holiStr += "\n"; holiStr += i18n("Birthday") + ": "+event->summary(); if ( !event->location().isEmpty() ) holiStr += " (" + event->location() + ")"; bDays.setBit(i); } } if ( numEvents ) eDays.setBit(i); //if it is a holy day then draw it red. Sundays are consider holidays, too if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || !holiStr.isEmpty()) { mHolidays[i] = holiStr; } else { mHolidays[i] = QString::null; } } #endif mRedrawNeeded = true; if ( ! mPendingUpdateBeforeRepaint ) repaint(false); } void KODayMatrix::updateView(QDate actdate) { - + if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView ) + mRedrawNeeded = true; + mLastView = KOPrefs::instance()->mCurrentDisplayedView; if ( ! actdate.isValid() ) { //qDebug("date not valid "); return; } mDayChanged = false; //flag to indicate if the starting day of the matrix has changed by this call //mDayChanged = false; // if a new startdate is to be set then apply Cornelius's calculation // of the first day to be shown if (actdate != startdate) { // reset index of selection according to shift of starting date from startdate to actdate if (mSelStart != NOSELECTION) { int tmp = actdate.daysTo(startdate); //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; // shift selection if new one would be visible at least partly ! if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { // nested if is required for next X display pushed from a different month - correction required // otherwise, for month forward and backward, it must be avoided if( mSelStart > NUMDAYS || mSelStart < 0 ) mSelStart = mSelStart + tmp; if( mSelEnd > NUMDAYS || mSelEnd < 0 ) mSelEnd = mSelEnd + tmp; } } startdate = actdate; mDayChanged = true; recalculateToday(); mRedrawNeeded = true; } //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); if ( !isVisible() ) { mPendingUpdateBeforeRepaint = true; } else { #ifdef DESKTOP_VERSION //mRepaintTimer->start( 100 ); //updateViewTimed(); mUpdateTimer->start( 50 ); #else mRepaintTimer->start( 350 ); mUpdateTimer->start( 800 ); #endif } } void KODayMatrix::updateEvents() { if ( !mCalendar ) return; @@ -1007,99 +1044,99 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent) mTodayPen.setWidth(1); else mTodayPen.setWidth(mTodayMarginWidth); //draw red rectangle for holidays if (pDays.testBit(i)) { if (actcol == mDefaultTextColor) { mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); } else { mTodayPen.setColor(mHolidayColorShaded); } } //draw gray rectangle for today if in selection if (i >= mSelStartT && i <= mSelEndT) { QColor grey("grey"); mTodayPen.setColor(grey); } p.setPen(mTodayPen); int addCol = 0; int addRow = 0; if (rowModulo) { if ( row >= 6 - rowModulo ) addRow = row - 5 + rowModulo; } if ( colModulo ) { if ( col >= 7 - colModulo ) addCol = col - 6 + colModulo-1; } addCol += 1; if ( row == 0 ) addRow = 1; p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1); p.setPen(tmppen); } // if any events are on that day then draw it using a bold font if ( eDays.testBit(i) ) { QFont myFont = font(); myFont.setBold(true); p.setFont(myFont); } // if it is a holiday then use the default holiday color if ( pDays.testBit(i)) { if ( bDays.testBit(i) ) { if ( hDays.testBit(i) ) - p.setPen(QColor(Qt::green)); + p.setPen(QColor(0,200,0)); else - p.setPen(QColor(Qt::green).dark()); + p.setPen(QColor(Qt::blue)); } else { if (actcol == mDefaultTextColor ) { p.setPen(KOPrefs::instance()->mHolidayColor); } else { p.setPen(mHolidayColorShaded); } } } // draw selected days with special color // DO NOT specially highlight holidays in selection ! if (i >= mSelStartT && i <= mSelEndT) { ;//p.setPen(mSelectedDaysColor); } int addCol = 0; int addRow = 0; if ( colModulo ) { if ( col >= 7 - colModulo ) addCol = col - 7 + colModulo; } if ( rowModulo ) { if ( row >= 6 - rowModulo ) addRow = row - 5 + rowModulo; } //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); ++addCol;//++addCol; if ( row == 0) addRow = 1; p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); // reset color to actual color if (pDays.testBit(i)) { p.setPen(actcol); } // reset bold font to plain font if ( eDays.testBit(i)) { QFont myFont = font(); myFont.setBold(false); p.setFont(myFont); } } } else { //qDebug("NO redraw "); } bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP); |