summaryrefslogtreecommitdiffabout
path: root/korganizer/kodaymatrix.cpp
authorzautrix <zautrix>2005-04-01 14:41:00 (UTC)
committer zautrix <zautrix>2005-04-01 14:41:00 (UTC)
commite5ec0ef6a256b96a758815ef861526f53d1ad7a5 (patch) (side-by-side diff)
tree3fa188da9108c867c1437157731c7b7a3d4e641d /korganizer/kodaymatrix.cpp
parent93003b1f8348f112648d3cc20acb21b062220e21 (diff)
downloadkdepimpi-e5ec0ef6a256b96a758815ef861526f53d1ad7a5.zip
kdepimpi-e5ec0ef6a256b96a758815ef861526f53d1ad7a5.tar.gz
kdepimpi-e5ec0ef6a256b96a758815ef861526f53d1ad7a5.tar.bz2
fix
Diffstat (limited to 'korganizer/kodaymatrix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp493
1 files changed, 251 insertions, 242 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index d543aaf..dfc6af7 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -105,16 +105,17 @@ const int KODayMatrix::NUMDAYS = 42;
KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
: QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 )
#if 0
KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
QFrame(parent, name)
#endif
{
+ mRedrawNeeded = true;
mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this);
mPendingUpdateBeforeRepaint = false;
mouseDown = false;
// initialize dynamic arrays
bDays.resize ( NUMDAYS );
hDays.resize ( NUMDAYS );;
eDays.resize ( NUMDAYS );;
days = new QDate[NUMDAYS];
@@ -381,16 +382,17 @@ void KODayMatrix::updateViewTimed()
//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;
}
}
+ mRedrawNeeded = true;
if ( ! mPendingUpdateBeforeRepaint )
repaint(false);
}
void KODayMatrix::updateView(QDate actdate)
{
if ( ! actdate.isValid() ) {
//qDebug("date not valid ");
@@ -415,25 +417,26 @@ void KODayMatrix::updateView(QDate actdate)
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( 20 );
+ mUpdateTimer->start( 50 );
#else
mRepaintTimer->start( 350 );
mUpdateTimer->start( 1200 );
#endif
}
}
void KODayMatrix::updateEvents()
{
@@ -673,268 +676,274 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
if ( width() <= 0 || height() <= 0 )
return;
if ( mPendingUpdateBeforeRepaint ) {
updateViewTimed();
mPendingUpdateBeforeRepaint = false;
}
if ( myPix.width() != width() || myPix.height()!=height() ) {
myPix.resize(size() );
+ mRedrawNeeded = true;
}
- QPainter p(&myPix);
- p.setFont(font());
+ if ( mRedrawNeeded ) {
+ //qDebug("REDRAW ");
+ QPainter p(&myPix);
+ p.setFont(font());
- int dheight = daysize.height();
- int dwidth = daysize.width();
- int row,col;
- int selw, selh;
- int xyOff = frameWidth();
- int colModulo = (width()-2) % 7;
- int rowModulo = (height()-2) % 6;
- //qDebug("col %d row %d ",colModulo,rowModulo );
+
+ int dheight = daysize.height();
+ int dwidth = daysize.width();
+ int row,col;
+ int selw, selh;
+ int xyOff = frameWidth();
+ int colModulo = (width()-2) % 7;
+ int rowModulo = (height()-2) % 6;
+ //qDebug("col %d row %d ",colModulo,rowModulo );
- bool isRTL = KOGlobals::self()->reverseLayout();
-
- // draw background and topleft frame
- p.fillRect(0,0,width(),height(), mDefaultBackColor);
- p.setPen(mDefaultTextColor);
- p.drawRect(0, 0, width(), height());
- int mSelStartT = mSelStart;
- int mSelEndT = mSelEnd;
- if ( mSelEndT >= NUMDAYS )
- mSelEndT = NUMDAYS-1;
- // draw selected days with highlighted background color
- if (mSelStart != NOSELECTION) {
- bool skip = false;
- if ( ! mouseDown ) {
- int mo = days[20].month();
- //qDebug("-- %d %d ", mSelStartT, mSelEndT);
- //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
- int startMo = days[mSelStartT].month();
- int endMo = days[mSelEndT].month();
- if ( startMo == 12 && mo == 1 && endMo <= 2 )
- startMo = 1;
- if ( endMo == 1 && mo == 12 )
- endMo = 12;
- if ( mo == 12 && startMo == 1 )
- startMo = 13;
- if ( (startMo > mo || endMo < mo) ) {
- skip = true;
- } else {
- if ( days[mSelStartT].month() != mo ) {
- int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
- mSelStartT += add +1;
- }
- if ( days[mSelEndT].month() != mo ) {
- int sub = days[mSelEndT].day();
- mSelEndT -= sub ;
- }
- }
- }
- //qDebug("SKIP %d ", skip);
- if ( ! skip ) {
- row = mSelStartT/7;
- col = mSelStartT -row*7;
- QColor selcol = KOPrefs::instance()->mHighlightColor;
- int addCol = 0;
- int addRow = 0;
- int addRow2 = 0;
- int addCol2 = 0;
- if (row == mSelEndT/7) {
- if ( rowModulo ) {
- if ( row >= 6 - rowModulo )
- addRow = row - 5 + rowModulo;
- }
- if ( colModulo ) {
- int colt1 = mSelEndT%7;
- //qDebug("colt1 %d ", colt1 );
- if ( colt1 >= 7 - colModulo )
- addCol = colt1 - 7 + colModulo+1;
- int colt = mSelStartT%7;
- if ( colt >= 7 - colModulo )
- addCol2 = colt - 7 + colModulo;
- addCol -= addCol2;
- //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
- }
- // Single row selection
- if ( row == 0)
- addRow = 1;
- p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
- row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
- } else {
- // draw first row to the right
- if ( colModulo ) {
- if ( col >= 7 - colModulo )
- addCol2 = col - 7 + colModulo;
- }
- if ( rowModulo ) {
- if ( row >= 6 - rowModulo )
- addRow = row - 5 + rowModulo;
- }
- if ( row == 0)
- addRow = 1;
- int drawWid = width()-(col*dwidth+1+addCol2)-1;
- p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
- dheight+1, selcol);
- // draw full block till last line
- selh = mSelEndT/7-row;
- addRow = 0;
- if ( rowModulo ) {
- if ( mSelEndT/7 >= 6 - rowModulo )
- addRow = mSelEndT/7 - 5 + rowModulo;
- }
- if (selh > 1) {
- p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
- }
- // draw last block from left to mSelEndT
- selw = mSelEndT-7*(mSelEndT/7)+1;
- //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+addRow,
- selw*dwidth+add, dheight+1, selcol);
- }
- }
- }
+ bool isRTL = KOGlobals::self()->reverseLayout();
+
+ // draw background and topleft frame
+ p.fillRect(0,0,width(),height(), mDefaultBackColor);
+ p.setPen(mDefaultTextColor);
+ p.drawRect(0, 0, width(), height());
+ int mSelStartT = mSelStart;
+ int mSelEndT = mSelEnd;
+ if ( mSelEndT >= NUMDAYS )
+ mSelEndT = NUMDAYS-1;
+ // draw selected days with highlighted background color
+ if (mSelStart != NOSELECTION) {
+ bool skip = false;
+ if ( ! mouseDown ) {
+ int mo = days[20].month();
+ //qDebug("-- %d %d ", mSelStartT, mSelEndT);
+ //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
+ int startMo = days[mSelStartT].month();
+ int endMo = days[mSelEndT].month();
+ if ( startMo == 12 && mo == 1 && endMo <= 2 )
+ startMo = 1;
+ if ( endMo == 1 && mo == 12 )
+ endMo = 12;
+ if ( mo == 12 && startMo == 1 )
+ startMo = 13;
+ if ( (startMo > mo || endMo < mo) ) {
+ skip = true;
+ } else {
+ if ( days[mSelStartT].month() != mo ) {
+ int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
+ mSelStartT += add +1;
+ }
+ if ( days[mSelEndT].month() != mo ) {
+ int sub = days[mSelEndT].day();
+ mSelEndT -= sub ;
+ }
+ }
+ }
+ //qDebug("SKIP %d ", skip);
+ if ( ! skip ) {
+ row = mSelStartT/7;
+ col = mSelStartT -row*7;
+ QColor selcol = KOPrefs::instance()->mHighlightColor;
+ int addCol = 0;
+ int addRow = 0;
+ int addRow2 = 0;
+ int addCol2 = 0;
+ if (row == mSelEndT/7) {
+ if ( rowModulo ) {
+ if ( row >= 6 - rowModulo )
+ addRow = row - 5 + rowModulo;
+ }
+ if ( colModulo ) {
+ int colt1 = mSelEndT%7;
+ //qDebug("colt1 %d ", colt1 );
+ if ( colt1 >= 7 - colModulo )
+ addCol = colt1 - 7 + colModulo+1;
+ int colt = mSelStartT%7;
+ if ( colt >= 7 - colModulo )
+ addCol2 = colt - 7 + colModulo;
+ addCol -= addCol2;
+ //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
+ }
+ // Single row selection
+ if ( row == 0)
+ addRow = 1;
+ p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
+ row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
+ } else {
+ // draw first row to the right
+ if ( colModulo ) {
+ if ( col >= 7 - colModulo )
+ addCol2 = col - 7 + colModulo;
+ }
+ if ( rowModulo ) {
+ if ( row >= 6 - rowModulo )
+ addRow = row - 5 + rowModulo;
+ }
+ if ( row == 0)
+ addRow = 1;
+ int drawWid = width()-(col*dwidth+1+addCol2)-1;
+ p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
+ dheight+1, selcol);
+ // draw full block till last line
+ selh = mSelEndT/7-row;
+ addRow = 0;
+ if ( rowModulo ) {
+ if ( mSelEndT/7 >= 6 - rowModulo )
+ addRow = mSelEndT/7 - 5 + rowModulo;
+ }
+ if (selh > 1) {
+ p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
+ }
+ // draw last block from left to mSelEndT
+ selw = mSelEndT-7*(mSelEndT/7)+1;
+ //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+addRow,
+ selw*dwidth+add, dheight+1, 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;
-
- // if it is the first day of a month switch color from normal to shaded and vice versa
- if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
- if (actcol == mDefaultTextColorShaded) {
- actcol = mDefaultTextColor;
- } else {
- actcol = mDefaultTextColorShaded;
- }
- p.setPen(actcol);
- }
- if (actcol == mDefaultTextColorShaded) {
- if ( ! mouseDown ) {
- continue;
- }
- }
- //Reset pen color after selected days block
- if (i == mSelEndT+1) {
- p.setPen(actcol);
- }
+ // 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;
+
+ // if it is the first day of a month switch color from normal to shaded and vice versa
+ if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
+ if (actcol == mDefaultTextColorShaded) {
+ actcol = mDefaultTextColor;
+ } else {
+ actcol = mDefaultTextColorShaded;
+ }
+ p.setPen(actcol);
+ }
+ if (actcol == mDefaultTextColorShaded) {
+ if ( ! mouseDown ) {
+ continue;
+ }
+ }
+ //Reset pen color after selected days block
+ if (i == mSelEndT+1) {
+ p.setPen(actcol);
+ }
- // if today then draw rectangle around day
- if (today == i) {
- tmppen = p.pen();
- QPen mTodayPen(p.pen());
- if ( daysize.width() < 20 )
- mTodayPen.setWidth(1);
- else
- mTodayPen.setWidth(mTodayMarginWidth);
- //draw red rectangle for holidays
- if (!mHolidays[i].isNull()) {
- 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;
- }
+ // if today then draw rectangle around day
+ if (today == i) {
+ tmppen = p.pen();
+ QPen mTodayPen(p.pen());
+ if ( daysize.width() < 20 )
+ mTodayPen.setWidth(1);
+ else
+ mTodayPen.setWidth(mTodayMarginWidth);
+ //draw red rectangle for holidays
+ if (!mHolidays[i].isNull()) {
+ 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;
- p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight+1);
- p.setPen(tmppen);
- }
+ addCol += 1;
+ p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth, 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 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 ( !mHolidays[i].isNull()) {
- if ( bDays.testBit(i) ) {
- if ( hDays.testBit(i) )
- p.setPen(QColor(Qt::green));
- else
- p.setPen(QColor(Qt::green).dark());
- } else {
- if (actcol == mDefaultTextColor ) {
- p.setPen(KOPrefs::instance()->mHolidayColor);
- } else {
- p.setPen(mHolidayColorShaded);
- }
- }
- }
+ // if it is a holiday then use the default holiday color
+ if ( !mHolidays[i].isNull()) {
+ if ( bDays.testBit(i) ) {
+ if ( hDays.testBit(i) )
+ p.setPen(QColor(Qt::green));
+ else
+ p.setPen(QColor(Qt::green).dark());
+ } 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);
- }
+ // 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 (!mHolidays[i].isNull()) {
- p.setPen(actcol);
- }
- // reset bold font to plain font
- if ( eDays.testBit(i)) {
- QFont myFont = font();
- myFont.setBold(false);
- p.setFont(myFont);
- }
- }
- int off = 0;//xyOff;
- bitBlt (this, off, off, &myPix, 0 ,0,width(), height() ,CopyROP);
- //qDebug("ffffffffff %d ", off);
+ 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 (!mHolidays[i].isNull()) {
+ 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, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP);
+ mRedrawNeeded = false;
}
// ----------------------------------------------------------------------------
// R E SI Z E E V E N T H A N D L I N G
// ----------------------------------------------------------------------------
void KODayMatrix::resizeEvent(QResizeEvent *)
{