summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp89
-rw-r--r--korganizer/kodaymatrix.h2
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.
*/