-rw-r--r-- | korganizer/kodaymatrix.cpp | 89 | ||||
-rw-r--r-- | korganizer/kodaymatrix.h | 2 |
2 files changed, 76 insertions, 15 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index 9181936..15a1cb4 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp @@ -610,41 +610,47 @@ void KODayMatrix::dropEvent(QDropEvent *e) // kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; e->ignore(); } #endif } // ---------------------------------------------------------------------------- // P A I N T E V E N T H A N D L I N G // ---------------------------------------------------------------------------- void KODayMatrix::paintEvent(QPaintEvent * pevent) { - if ( width() <= 0 || height() <= 0 ) + QRect sz = frameRect(); + if ( sz.width() <= 0 || sz.height() <= 0 ) return; if ( mPendingUpdateBeforeRepaint ) { updateViewTimed(); mPendingUpdateBeforeRepaint = false; } - if ( myPix.width() != width() || myPix.height()!=height() ) { - myPix.resize(size() ); + if ( myPix.width() != sz.width() || myPix.height()!=sz.height() ) { + myPix.resize(sz.size() ); } QPainter p(&myPix); p.setFont(font()); - QRect sz = frameRect(); + int dheight = daysize.height(); int dwidth = daysize.width(); int row,col; int selw, selh; + int xyOff = frameWidth(); + int colModulo = sz.width() % 7; + int rowModulo = sz.height() % 6; + qDebug("off %d col %d row %d ",xyOff,colModulo,rowModulo ); + bool isRTL = KOGlobals::self()->reverseLayout(); // draw background and topleft frame p.fillRect(pevent->rect(), mDefaultBackColor); p.setPen(mDefaultTextColor); p.drawRect(0, 0, sz.width()+1, sz.height()+1); int mSelStartT = mSelStart; int mSelEndT = mSelEnd; if ( mSelEndT >= NUMDAYS ) mSelEndT = NUMDAYS-1; // draw selected days with highlighted background color if (mSelStart != NOSELECTION) { @@ -662,41 +668,82 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent) } if ( days[mSelEndT].month() != mo ) { int sub = days[mSelEndT].day(); mSelEndT -= sub ; } } } if ( ! skip ) { row = mSelStartT/7; col = mSelStartT -row*7; QColor selcol = KOPrefs::instance()->mHighlightColor; + + + int addCol = 0; + int addRow = 0; +#if 0 + if ( colModulo ) { + if ( col >= 7 - colModulo ) + addCol = col - 7 + colModulo; + } + if ( rowModulo ) { + if ( row >= 6 - rowModulo ) + addRow = row - 5 + rowModulo; + } +#endif + + + + + if (row == mSelEndT/7) { + if ( rowModulo ) { + if ( row >= 6 - rowModulo ) + addRow = row - 5 + rowModulo; + } + if ( colModulo ) { + if ( mSelEndT-mSelStartT+1 >= 7 - colModulo ) + addCol = mSelEndT-mSelStartT+1 - 7 + colModulo; + } // Single row selection - p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth, - row*dheight, (mSelEndT-mSelStartT+1)*dwidth, dheight, selcol); + if ( row == 0) + addRow = 1; + p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1, + row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); } else { // draw first row to the right - p.fillRect(isRTL ? 0 : col*dwidth, row*dheight, (7-col)*dwidth, + if ( row == 0) + addRow = 1; + p.fillRect(isRTL ? 0 : col*dwidth+1, row*dheight+addRow, (7-col)*dwidth+colModulo, dheight, selcol); // draw full block till last line selh = mSelEndT/7-row; if (selh > 1) { - p.fillRect(0, (row+1)*dheight, 7*dwidth, (selh-1)*dheight,selcol); + p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight,selcol); } // draw last block from left to mSelEndT selw = mSelEndT-7*(mSelEndT/7)+1; - p.fillRect(isRTL ? (7-selw)*dwidth : 0, (row+selh)*dheight, - selw*dwidth, dheight, selcol); + //qDebug("esl %d ",selw ); + int add = 0; + if ( colModulo ) { + add = 7 - colModulo; + if ( selw > add ) + add = selw - add; + else + add = 0; + } + //qDebug("add %d ", add); + p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight, + selw*dwidth+add, dheight, selcol); } } } // iterate over all days in the matrix and draw the day label in appropriate colors QColor actcol = mDefaultTextColorShaded; p.setPen(actcol); QPen tmppen; for(int i = 0; i < NUMDAYS; i++) { row = i/7; col = isRTL ? 6-(i-row*7) : i-row*7; @@ -760,50 +807,64 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent) } 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); } - p.drawText(col*dwidth, row*dheight, dwidth, dheight, + 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; + p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); // reset color to actual color if (!mHolidays[i].isNull()) { p.setPen(actcol); } // reset bold font to plain font if (events[i] > 0) { QFont myFont = font(); myFont.setBold(false); p.setFont(myFont); } } - bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); + int off = xyOff; + bitBlt (this, off, off, &myPix, 0 ,0,width(), height() ,CopyROP); + //qDebug("ffffffffff %d ", off); } // ---------------------------------------------------------------------------- // R E SI Z E E V E N T H A N D L I N G // ---------------------------------------------------------------------------- void KODayMatrix::resizeEvent(QResizeEvent *) { QRect sz = frameRect(); daysize.setHeight(sz.height()*7 / NUMDAYS); daysize.setWidth(sz.width() / 7); } QSize KODayMatrix::sizeHint() const { QFontMetrics fm ( font() ); - int wid = fm.width( "30") *7+7; - int hei = fm.height() * 6+4; + int wid = fm.width( "30") *7+3; + int hei = fm.height() * 6+3; //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); return QSize ( wid, hei ); } diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h index 39946de..f4016b6 100644 --- a/korganizer/kodaymatrix.h +++ b/korganizer/kodaymatrix.h @@ -162,25 +162,25 @@ public: bool isTodayVisible() const { return today>=0; } ; /** If today is visible, then we can find out if today is * near the beginning or the end of the month. * This is dependent on today remaining the index * in the array of visible dates and going from * top left (0) to bottom right (41). */ bool isBeginningOfMonth() const { return today<=8; } ; bool isEndOfMonth() const { return today>=27; } ; QString getWhatsThisText( QPoint ) ; QSize sizeHint() const; - + QRect frameRect () const { int wid = frameWidth(); return QRect(0+wid,0+wid,width()-wid-wid,height()-wid-wid);} public slots: /** Recalculates all the flags of the days in the matrix like holidays or events * on a day (Actually calls above method with the actual startdate). */ void updateView(); void updateViewTimed(); void repaintViewTimed(); /** * Calculate which square in the matrix should be * hilighted to indicate it's today. */ |