-rw-r--r-- | korganizer/koagenda.cpp | 225 |
1 files changed, 113 insertions, 112 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp index 63fdecd..9b817bc 100644 --- a/korganizer/koagenda.cpp +++ b/korganizer/koagenda.cpp @@ -1367,209 +1367,211 @@ void KOAgenda::finishUpdate() globalFlagBlockAgendaItemUpdate = 0; for ( item=mItems.first(); item != 0; item=mItems.next() ) { item->repaintMe( ); } globalFlagBlockAgendaItemUpdate = 1; qApp->processEvents(); globalFlagBlockAgendaItemPaint = 0; for ( item=mItems.first(); item != 0; item=mItems.next() ) { item->repaint( false ); } } /* Draw grid in the background of the agenda. */ void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// int cx, int cy, int cw, int ch) { if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask ) return; if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 ) return; int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight(); if ( ch < 1 ) ch = 1; if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) { mPaintPixmap.resize( contentsWidth()+42, ch ); } mCurPixWid = contentsWidth(); mCurPixHei = ch; if ( mHighlightPixmap.width() < mGridSpacingX-1 ) { mHighlightPixmap.resize( mGridSpacingX-1, 5 ); mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); } mPixPainter.begin( &mPaintPixmap) ; //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); QPainter * p ; if (paint == 0) { mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); p = &mPixPainter; } else p = paint ; // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); //--cx;++cw; - int lGridSpacingY = mGridSpacingY*2; - int selDay; - if ( !backgroundOnly ) - for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) - { - if ( mSelectedDates[selDay] == QDateTime::currentDateTime ().date() && KOPrefs::instance()->mHighlightCurrentDay) { - int x1 = cx; - int y1 = 0; - if (y1 < cy) y1 = cy; - int x2 = cx+cw-1; - int y2 = contentsHeight(); - if (y2 > cy+ch-1) y2=cy+ch-1; - if (x2 >= x1 && y2 >= y1) { - int gxStart = selDay; - int gxEnd = gxStart ; - int xStart = KOGlobals::self()->reverseLayout() ? - (mColumns - 1 - gxStart)*mGridSpacingX : - gxStart*mGridSpacingX; - if (xStart < x1) xStart = x1; - int xEnd = KOGlobals::self()->reverseLayout() ? - (mColumns - gxStart)*mGridSpacingX-1 : - (gxStart+1)*mGridSpacingX-1; - if (xEnd > x2) xEnd = x2; - if ( KOPrefs::instance()->mUseHighlightLightColor ) - p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, - KOPrefs::instance()->mAgendaBgColor.light()); - else - p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, - KOPrefs::instance()->mAgendaBgColor.dark()); + int lGridSpacingY = mGridSpacingY*2; + int selDay; + QDate curDate = QDate::currentDate(); + if ( !backgroundOnly ) { + for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) + { + if ( mSelectedDates[selDay] == curDate && KOPrefs::instance()->mHighlightCurrentDay) { + int x1 = cx; + int y1 = 0; + if (y1 < cy) y1 = cy; + int x2 = cx+cw-1; + int y2 = contentsHeight(); + if (y2 > cy+ch-1) y2=cy+ch-1; + if (x2 >= x1 && y2 >= y1) { + int gxStart = selDay; + int gxEnd = gxStart ; + int xStart = KOGlobals::self()->reverseLayout() ? + (mColumns - 1 - gxStart)*mGridSpacingX : + gxStart*mGridSpacingX; + if (xStart < x1) xStart = x1; + int xEnd = KOGlobals::self()->reverseLayout() ? + (mColumns - gxStart)*mGridSpacingX-1 : + (gxStart+1)*mGridSpacingX-1; + if (xEnd > x2) xEnd = x2; + if ( KOPrefs::instance()->mUseHighlightLightColor ) + p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, + KOPrefs::instance()->mAgendaBgColor.light()); + else + p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, + KOPrefs::instance()->mAgendaBgColor.dark()); - } - } - } - // Highlight working hours - - if ( !backgroundOnly ) - if (mWorkingHoursEnable) { - int x1 = cx; - int y1 = mWorkingHoursYTop; - if (y1 < cy) y1 = cy; - int x2 = cx+cw-1; - // int x2 = mGridSpacingX * 5 - 1; - // if (x2 > cx+cw-1) x2 = cx + cw - 1; - int y2 = mWorkingHoursYBottom; - if (y2 > cy+ch-1) y2=cy+ch-1; - - if (x2 >= x1 && y2 >= y1) { - // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); - int gxStart = x1/mGridSpacingX; - int gxEnd = x2/mGridSpacingX; - while(gxStart <= gxEnd) { - if (gxStart < int(mHolidayMask->count()) && - !mHolidayMask->at(gxStart)) { - int xStart = KOGlobals::self()->reverseLayout() ? - (mColumns - 1 - gxStart)*mGridSpacingX : - gxStart*mGridSpacingX; - if (xStart < x1) xStart = x1; - int xEnd = KOGlobals::self()->reverseLayout() ? - (mColumns - gxStart)*mGridSpacingX-1 : - (gxStart+1)*mGridSpacingX-1; - if (xEnd > x2) xEnd = x2; - if ( mSelectedDates[gxStart] == QDateTime::currentDateTime ().date()&& KOPrefs::instance()->mHighlightCurrentDay ) { - if ( KOPrefs::instance()->mUseHighlightLightColor ) - p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, - KOPrefs::instance()->mWorkingHoursColor.light()); - else - p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, - KOPrefs::instance()->mWorkingHoursColor.dark()); - } else { - p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, - KOPrefs::instance()->mWorkingHoursColor); - } + } + } + } + } + // Highlight working hours + + if ( !backgroundOnly ) + if (mWorkingHoursEnable) { + int x1 = cx; + int y1 = mWorkingHoursYTop; + if (y1 < cy) y1 = cy; + int x2 = cx+cw-1; + // int x2 = mGridSpacingX * 5 - 1; + // if (x2 > cx+cw-1) x2 = cx + cw - 1; + int y2 = mWorkingHoursYBottom; + if (y2 > cy+ch-1) y2=cy+ch-1; + + if (x2 >= x1 && y2 >= y1) { + // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); + int gxStart = x1/mGridSpacingX; + int gxEnd = x2/mGridSpacingX; + while(gxStart <= gxEnd) { + if (gxStart < int(mHolidayMask->count()) && + !mHolidayMask->at(gxStart)) { + int xStart = KOGlobals::self()->reverseLayout() ? + (mColumns - 1 - gxStart)*mGridSpacingX : + gxStart*mGridSpacingX; + if (xStart < x1) xStart = x1; + int xEnd = KOGlobals::self()->reverseLayout() ? + (mColumns - gxStart)*mGridSpacingX-1 : + (gxStart+1)*mGridSpacingX-1; + if (xEnd > x2) xEnd = x2; + if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) { + if ( KOPrefs::instance()->mUseHighlightLightColor ) + p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, + KOPrefs::instance()->mWorkingHoursColor.light()); + else + p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, + KOPrefs::instance()->mWorkingHoursColor.dark()); + } else { + p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, + KOPrefs::instance()->mWorkingHoursColor); + } + } + ++gxStart; + } + } } - ++gxStart; + /* + int selectionX = KOGlobals::self()->reverseLayout() ? + (mColumns - 1 - mSelectionCellX) * mGridSpacingX : + mSelectionCellX * mGridSpacingX; + + // Draw selection + if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && + ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { + // TODO: paint only part within cx,cy,cw,ch + p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, + mSelectionHeight, KOPrefs::instance()->mHighlightColor ); } - } - } - /* - int selectionX = KOGlobals::self()->reverseLayout() ? - (mColumns - 1 - mSelectionCellX) * mGridSpacingX : - mSelectionCellX * mGridSpacingX; - - // Draw selection - if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && - ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { - // TODO: paint only part within cx,cy,cw,ch - p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, - mSelectionHeight, KOPrefs::instance()->mHighlightColor ); - } - */ - // Draw vertical lines of grid + */ + // Draw vertical lines of grid - int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; - if ( mGridSpacingX > 0 ) { - while (x < cx + cw) { - p->drawLine(x,cy,x,cy+ch); - x+=mGridSpacingX; - } - } - // Draw horizontal lines of grid - int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; - if ( lGridSpacingY > 0 ) { - while (y < cy + ch) { - p->setPen( SolidLine ); - p->drawLine(cx,y,cx+cw,y); - y+=lGridSpacingY; - p->setPen( DotLine ); - p->drawLine(cx,y,cx+cw,y); - y+=lGridSpacingY; - } - p->setPen( SolidLine ); - } - mPixPainter.end() ; + int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; + if ( mGridSpacingX > 0 ) { + while (x < cx + cw) { + p->drawLine(x,cy,x,cy+ch); + x+=mGridSpacingX; + } + } + // Draw horizontal lines of grid + int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; + if ( lGridSpacingY > 0 ) { + while (y < cy + ch) { + p->setPen( SolidLine ); + p->drawLine(cx,y,cx+cw,y); + y+=lGridSpacingY; + p->setPen( DotLine ); + p->drawLine(cx,y,cx+cw,y); + y+=lGridSpacingY; + } + p->setPen( SolidLine ); + } + mPixPainter.end() ; } /* Convert srcollview contents coordinates to agenda grid coordinates. */ void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) { gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : x/mGridSpacingX; gy = y/mGridSpacingY; } /* Convert agenda grid coordinates to scrollview contents coordinates. */ void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) { x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: gx*mGridSpacingX; y = gy*mGridSpacingY; } /* Return Y coordinate corresponding to time. Coordinates are rounded to fit into the grid. */ int KOAgenda::timeToY(const QTime &time) { int minutesPerCell = 24 * 60 / mRows; int timeMinutes = time.hour() * 60 + time.minute(); int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; return Y; } /* Return time corresponding to cell y coordinate. Coordinates are rounded to fit into the grid. */ QTime KOAgenda::gyToTime(int gy) { int secondsPerCell = 24 * 60 * 60/ mRows; int timeSeconds = secondsPerCell * gy; QTime time( 0, 0, 0 ); @@ -1631,105 +1633,104 @@ KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) return item; } } return 0; } void KOAgenda::updateTodo( Todo * todo, int days, bool remove) { // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| KOAgendaItem *item; item = getItemForTodo ( todo ); //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); if ( item ) { blockSignals( true ); //qDebug("item found "); item->hide(); item->setCellX(-2, -1 ); item->select(false); mUnusedItems.append( item ); mItems.remove( item ); QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); KOAgendaItem *itemit; //globalFlagBlockAgendaItemPaint = 1; for ( itemit=oldconflictItems.first(); itemit != 0; itemit=oldconflictItems.next() ) { if ( itemit != item ) placeSubCells(itemit); } qApp->processEvents(); //globalFlagBlockAgendaItemPaint = 0; for ( itemit=oldconflictItems.first(); itemit != 0; itemit=oldconflictItems.next() ) { globalFlagBlockAgendaItemUpdate = 0; if ( itemit != item ) itemit->repaintMe(); globalFlagBlockAgendaItemUpdate = 1; itemit->repaint(); } blockSignals( false ); } if ( remove ) { //qDebug("remove****************************************** "); return; } if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) return; //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); - bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); - QDate currentDate; + QDate currentDate = QDate::currentDate(); + bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda ); QDateTime dt; if ( todo->hasCompletedDate() ) dt = todo->completed(); else dt = todo->dtDue(); if ( overdue ) { - currentDate = QDate::currentDate(); days += todo->dtDue().date().daysTo( currentDate ); } else currentDate = dt.date(); if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) { if ( ! mAllDayMode ) return; // aldayagenda globalFlagBlockAgendaItemPaint = 1; item = insertAllDayItem(todo, currentDate,days, days); item->show(); } else { if ( mAllDayMode ) return; // mAgenda globalFlagBlockAgendaItemPaint = 1; int endY = timeToY(dt.time()) - 1; int hi = 12/KOPrefs::instance()->mHourSize; int startY = endY - 1-hi; item = insertItem(todo,currentDate,days,startY,endY); item->show(); } qApp->processEvents(); globalFlagBlockAgendaItemPaint = 0; QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); KOAgendaItem *itemit; for ( itemit=oldconflictItems.first(); itemit != 0; itemit=oldconflictItems.next() ) { globalFlagBlockAgendaItemUpdate = 0; itemit->repaintMe(); globalFlagBlockAgendaItemUpdate = 1; itemit->repaint(); } globalFlagBlockAgendaItemUpdate = 0; item->repaintMe(); globalFlagBlockAgendaItemUpdate = 1; item->repaint(); } /* Insert KOAgendaItem into agenda. */ KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) { if (mAllDayMode) { qDebug("KOAgenda: calling insertItem in all-day mode is illegal. "); return 0; } |