-rw-r--r-- | korganizer/komonthview.cpp | 116 |
1 files changed, 113 insertions, 3 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index cba85fa..9b0389d 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp | |||
@@ -133,24 +133,25 @@ void KNoScrollListBox::focusInEvent ( QFocusEvent * e ) | |||
133 | } | 133 | } |
134 | } | 134 | } |
135 | } | 135 | } |
136 | void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) | 136 | void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) |
137 | { | 137 | { |
138 | int i = currentItem (); | 138 | int i = currentItem (); |
139 | if ( i >= 0 ) { | 139 | if ( i >= 0 ) { |
140 | setSelected ( i, false ); | 140 | setSelected ( i, false ); |
141 | } | 141 | } |
142 | QListBox::focusOutEvent ( e ); | 142 | QListBox::focusOutEvent ( e ); |
143 | setVScrollBarMode(QScrollView::AlwaysOff); | 143 | setVScrollBarMode(QScrollView::AlwaysOff); |
144 | setHScrollBarMode(QScrollView::AlwaysOff); | 144 | setHScrollBarMode(QScrollView::AlwaysOff); |
145 | emit highligtIncidence( 0, (MonthViewCell*)this, 0 ); | ||
145 | } | 146 | } |
146 | 147 | ||
147 | QString KNoScrollListBox::getWhatsThisText(QPoint p) | 148 | QString KNoScrollListBox::getWhatsThisText(QPoint p) |
148 | { | 149 | { |
149 | QListBoxItem* item = itemAt ( p ); | 150 | QListBoxItem* item = itemAt ( p ); |
150 | if ( ! item ) { | 151 | if ( ! item ) { |
151 | return i18n("Click in the cell\nto add an event!"); | 152 | return i18n("Click in the cell\nto add an event!"); |
152 | } | 153 | } |
153 | return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), | 154 | return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), |
154 | KOPrefs::instance()->mWTshowDetails, | 155 | KOPrefs::instance()->mWTshowDetails, |
155 | KOPrefs::instance()->mWTshowCreated, | 156 | KOPrefs::instance()->mWTshowCreated, |
156 | KOPrefs::instance()->mWTshowChanged); | 157 | KOPrefs::instance()->mWTshowChanged); |
@@ -271,63 +272,89 @@ void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) | |||
271 | void KNoScrollListBox::mousePressEvent(QMouseEvent *e) | 272 | void KNoScrollListBox::mousePressEvent(QMouseEvent *e) |
272 | { | 273 | { |
273 | QListBox::mousePressEvent(e); | 274 | QListBox::mousePressEvent(e); |
274 | 275 | ||
275 | if(e->button() == RightButton) { | 276 | if(e->button() == RightButton) { |
276 | emit rightClick(); | 277 | emit rightClick(); |
277 | } | 278 | } |
278 | } | 279 | } |
279 | 280 | ||
280 | MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) | 281 | MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) |
281 | : QListBoxItem() | 282 | : QListBoxItem() |
282 | { | 283 | { |
284 | mDisplayHightlighted = false; | ||
283 | mblockRepaint = true; | 285 | mblockRepaint = true; |
284 | setText( s ); | 286 | setText( s ); |
285 | mMultiday = 0; | 287 | mMultiday = 0; |
286 | mIncidence = incidence; | 288 | mIncidence = incidence; |
287 | mDate = qd; | 289 | mDate = qd; |
288 | mRecur = false; | 290 | mRecur = false; |
289 | mAlarm = false; | 291 | mAlarm = false; |
290 | mReply = false; | 292 | mReply = false; |
291 | mInfo = false; | 293 | mInfo = false; |
292 | mdayPos = 0; | 294 | mdayPos = 0; |
293 | isWeekItem = KOPrefs::instance()->mMonthViewWeek; | 295 | isWeekItem = KOPrefs::instance()->mMonthViewWeek; |
294 | } | 296 | } |
295 | void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) | 297 | void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) |
296 | { | 298 | { |
299 | mDisplayHightlighted = false; | ||
297 | setText( s ); | 300 | setText( s ); |
298 | mMultiday = 0; | 301 | mMultiday = 0; |
299 | mIncidence = incidence; | 302 | mIncidence = incidence; |
300 | mDate = qd; | 303 | mDate = qd; |
301 | mRecur = false; | 304 | mRecur = false; |
302 | mAlarm = false; | 305 | mAlarm = false; |
303 | mReply = false; | 306 | mReply = false; |
304 | mInfo = false; | 307 | mInfo = false; |
305 | mdayPos = 0; | 308 | mdayPos = 0; |
306 | } | 309 | } |
310 | bool MonthViewItem::setHighlightedFalse() | ||
311 | { | ||
312 | if ( !mDisplayHightlighted ) | ||
313 | return false; | ||
314 | mDisplayHightlighted = false; | ||
315 | return true; | ||
316 | } | ||
307 | 317 | ||
318 | bool MonthViewItem::setHighlighted( Incidence * inc ) | ||
319 | { | ||
320 | if ( inc == mIncidence ) { | ||
321 | if ( mDisplayHightlighted ) | ||
322 | return false; | ||
323 | mDisplayHightlighted = true; | ||
324 | return true; | ||
325 | } else { | ||
326 | if ( !mDisplayHightlighted ) | ||
327 | return false; | ||
328 | mDisplayHightlighted = false; | ||
329 | return true; | ||
330 | } | ||
331 | return false; | ||
332 | } | ||
308 | void MonthViewItem::paint(QPainter *p) | 333 | void MonthViewItem::paint(QPainter *p) |
309 | { | 334 | { |
310 | if ( mblockRepaint ) { | 335 | if ( mblockRepaint ) { |
311 | return; | 336 | return; |
312 | } | 337 | } |
313 | #if QT_VERSION >= 0x030000 | 338 | #if QT_VERSION >= 0x030000 |
314 | bool sel = isSelected(); | 339 | bool sel = isSelected(); |
315 | #else | 340 | #else |
316 | bool sel = selected(); | 341 | bool sel = selected(); |
317 | #endif | 342 | #endif |
318 | int heihei = height( listBox () ); | 343 | int heihei = height( listBox () ); |
319 | int x = 1; | 344 | int x = 1; |
320 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) | 345 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor || mDisplayHightlighted ) |
321 | { | 346 | { |
347 | if ( mDisplayHightlighted ) | ||
348 | sel = true; | ||
322 | p->setBackgroundColor( palette().color( QPalette::Normal, \ | 349 | p->setBackgroundColor( palette().color( QPalette::Normal, \ |
323 | sel ? QColorGroup::Highlight : QColorGroup::Background ) ); | 350 | sel ? QColorGroup::Highlight : QColorGroup::Background ) ); |
324 | p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei ); | 351 | p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei ); |
325 | } | 352 | } |
326 | 353 | ||
327 | //int y = 3;//(height() - mRecurPixmap.height()) /2; | 354 | //int y = 3;//(height() - mRecurPixmap.height()) /2; |
328 | int size = PIXMAP_SIZE; | 355 | int size = PIXMAP_SIZE; |
329 | if ( QApplication::desktop()->width() < 300 ) | 356 | if ( QApplication::desktop()->width() < 300 ) |
330 | size = 3; | 357 | size = 3; |
331 | int y = (heihei - size -1 ) /2; | 358 | int y = (heihei - size -1 ) /2; |
332 | 359 | ||
333 | if ( mIncidence->calID() > 1 ) { | 360 | if ( mIncidence->calID() > 1 ) { |
@@ -591,24 +618,25 @@ void MonthViewCell::setHoliday( bool holiday ) | |||
591 | 618 | ||
592 | void MonthViewCell::setHoliday( const QString &holiday ) | 619 | void MonthViewCell::setHoliday( const QString &holiday ) |
593 | { | 620 | { |
594 | mHolidayString = holiday; | 621 | mHolidayString = holiday; |
595 | 622 | ||
596 | if ( !holiday.isEmpty() ) { | 623 | if ( !holiday.isEmpty() ) { |
597 | setHoliday( true ); | 624 | setHoliday( true ); |
598 | } | 625 | } |
599 | } | 626 | } |
600 | 627 | ||
601 | void MonthViewCell::startUpdateCell() | 628 | void MonthViewCell::startUpdateCell() |
602 | { | 629 | { |
630 | |||
603 | mdayCount = 0; | 631 | mdayCount = 0; |
604 | setFocusPolicy(NoFocus); | 632 | setFocusPolicy(NoFocus); |
605 | if ( !mMonthView->isUpdatePossible() ) | 633 | if ( !mMonthView->isUpdatePossible() ) |
606 | return; | 634 | return; |
607 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); | 635 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); |
608 | while ( mitem ) { | 636 | while ( mitem ) { |
609 | mitem->setBlockRepaint( true ); | 637 | mitem->setBlockRepaint( true ); |
610 | mitem = (MonthViewItem *)mitem->next(); | 638 | mitem = (MonthViewItem *)mitem->next(); |
611 | } | 639 | } |
612 | if ( mAvailItemList.count() > 20 ) { | 640 | if ( mAvailItemList.count() > 20 ) { |
613 | mAvailItemList.setAutoDelete( true ); | 641 | mAvailItemList.setAutoDelete( true ); |
614 | mAvailItemList.clear(); | 642 | mAvailItemList.clear(); |
@@ -1074,30 +1102,57 @@ void MonthViewCell::contextMenu( QListBoxItem *item ) | |||
1074 | mMonthView->setPopupCell( this ); | 1102 | mMonthView->setPopupCell( this ); |
1075 | if ( !item ) { | 1103 | if ( !item ) { |
1076 | mMonthView->showContextMenu( 0 ); | 1104 | mMonthView->showContextMenu( 0 ); |
1077 | return; | 1105 | return; |
1078 | } | 1106 | } |
1079 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); | 1107 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); |
1080 | Incidence *incidence = eventItem->incidence(); | 1108 | Incidence *incidence = eventItem->incidence(); |
1081 | if ( incidence ) mMonthView->showContextMenu( incidence ); | 1109 | if ( incidence ) mMonthView->showContextMenu( incidence ); |
1082 | } | 1110 | } |
1083 | 1111 | ||
1084 | void MonthViewCell::selection( QListBoxItem *item ) | 1112 | void MonthViewCell::selection( QListBoxItem *item ) |
1085 | { | 1113 | { |
1086 | if ( !item ) return; | 1114 | if ( !item ) { |
1087 | 1115 | emit highligtIncidence( 0 , this, 0 ); | |
1116 | return; | ||
1117 | } | ||
1118 | MonthViewItem * it = (static_cast<MonthViewItem *>( item )); | ||
1119 | emit highligtIncidence( it->incidence(), this, it->multiDay() ); | ||
1088 | mMonthView->setSelectedCell( this ); | 1120 | mMonthView->setSelectedCell( this ); |
1089 | } | 1121 | } |
1090 | 1122 | ||
1123 | void MonthViewCell::deHightLight() | ||
1124 | { | ||
1125 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); | ||
1126 | while ( mitem ) { | ||
1127 | if ( mitem->setHighlightedFalse() ) | ||
1128 | updateItem ( mitem ); | ||
1129 | mitem = (MonthViewItem *)mitem->next(); | ||
1130 | } | ||
1131 | } | ||
1132 | // returns true if no inc found | ||
1133 | bool MonthViewCell::doHightLight( Incidence * inc ) | ||
1134 | { | ||
1091 | 1135 | ||
1136 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); | ||
1137 | while ( mitem ) { | ||
1138 | if ( mitem->incidence() == inc ) { | ||
1139 | if ( mitem->setHighlighted( inc ) ) | ||
1140 | updateItem ( mitem ); | ||
1141 | return false; | ||
1142 | } | ||
1143 | mitem = (MonthViewItem *)mitem->next(); | ||
1144 | } | ||
1145 | return true; | ||
1146 | } | ||
1092 | // ******************************************************************************* | 1147 | // ******************************************************************************* |
1093 | // ******************************************************************************* | 1148 | // ******************************************************************************* |
1094 | // ******************************************************************************* | 1149 | // ******************************************************************************* |
1095 | 1150 | ||
1096 | 1151 | ||
1097 | KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) | 1152 | KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) |
1098 | : KOEventView( calendar, parent, name ), | 1153 | : KOEventView( calendar, parent, name ), |
1099 | mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), | 1154 | mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), |
1100 | mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) | 1155 | mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) |
1101 | { | 1156 | { |
1102 | mFlagKeyPressed = false; | 1157 | mFlagKeyPressed = false; |
1103 | mShortDayLabelsM = false; | 1158 | mShortDayLabelsM = false; |
@@ -1191,41 +1246,45 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) | |||
1191 | mCells.insert( row * mDaysPerWeek + col, cell ); | 1246 | mCells.insert( row * mDaysPerWeek + col, cell ); |
1192 | 1247 | ||
1193 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), | 1248 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), |
1194 | SLOT( defaultAction( Incidence * ) ) ); | 1249 | SLOT( defaultAction( Incidence * ) ) ); |
1195 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), | 1250 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), |
1196 | SIGNAL( newEventSignal( QDateTime ) ) ); | 1251 | SIGNAL( newEventSignal( QDateTime ) ) ); |
1197 | connect( cell, SIGNAL( showDaySignal( QDate ) ), | 1252 | connect( cell, SIGNAL( showDaySignal( QDate ) ), |
1198 | SIGNAL( showDaySignal( QDate ) ) ); | 1253 | SIGNAL( showDaySignal( QDate ) ) ); |
1199 | connect( cell, SIGNAL( nextCell() ), | 1254 | connect( cell, SIGNAL( nextCell() ), |
1200 | SLOT( nextCell() ) ); | 1255 | SLOT( nextCell() ) ); |
1201 | connect( cell, SIGNAL( prevCell() ), | 1256 | connect( cell, SIGNAL( prevCell() ), |
1202 | SLOT( prevCell() ) ); | 1257 | SLOT( prevCell() ) ); |
1258 | connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ), | ||
1259 | SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) )); | ||
1203 | } | 1260 | } |
1204 | } | 1261 | } |
1205 | mCellsW.resize( mDaysPerWeek ); | 1262 | mCellsW.resize( mDaysPerWeek ); |
1206 | for( col = 0; col < mDaysPerWeek; ++col ) { | 1263 | for( col = 0; col < mDaysPerWeek; ++col ) { |
1207 | MonthViewCell *cell = new MonthViewCell( this, mWeekView ); | 1264 | MonthViewCell *cell = new MonthViewCell( this, mWeekView ); |
1208 | mCellsW.insert( col, cell ); | 1265 | mCellsW.insert( col, cell ); |
1209 | 1266 | ||
1210 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), | 1267 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), |
1211 | SLOT( defaultAction( Incidence * ) ) ); | 1268 | SLOT( defaultAction( Incidence * ) ) ); |
1212 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), | 1269 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), |
1213 | SIGNAL( newEventSignal( QDateTime ) ) ); | 1270 | SIGNAL( newEventSignal( QDateTime ) ) ); |
1214 | connect( cell, SIGNAL( showDaySignal( QDate ) ), | 1271 | connect( cell, SIGNAL( showDaySignal( QDate ) ), |
1215 | SIGNAL( showDaySignal( QDate ) ) ); | 1272 | SIGNAL( showDaySignal( QDate ) ) ); |
1216 | connect( cell, SIGNAL( nextCell() ), | 1273 | connect( cell, SIGNAL( nextCell() ), |
1217 | SLOT( nextCell() ) ); | 1274 | SLOT( nextCell() ) ); |
1218 | connect( cell, SIGNAL( prevCell() ), | 1275 | connect( cell, SIGNAL( prevCell() ), |
1219 | SLOT( prevCell() ) ); | 1276 | SLOT( prevCell() ) ); |
1277 | connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ), | ||
1278 | SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) )); | ||
1220 | cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); | 1279 | cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); |
1221 | } | 1280 | } |
1222 | 1281 | ||
1223 | //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); | 1282 | //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); |
1224 | mContextMenu = eventPopup(); | 1283 | mContextMenu = eventPopup(); |
1225 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), | 1284 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), |
1226 | i18n("New Event..."),this, | 1285 | i18n("New Event..."),this, |
1227 | SLOT(slotNewEvent()),false); | 1286 | SLOT(slotNewEvent()),false); |
1228 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), | 1287 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), |
1229 | i18n("New Todo..."),this, | 1288 | i18n("New Todo..."),this, |
1230 | SLOT(slotNewTodo()),false); | 1289 | SLOT(slotNewTodo()),false); |
1231 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), | 1290 | mContextMenu->addAdditionalItem(QIconSet(QPixmap()), |
@@ -1279,24 +1338,75 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) | |||
1279 | 1338 | ||
1280 | if ( mShowWeekView ) | 1339 | if ( mShowWeekView ) |
1281 | mWidStack->raiseWidget( mWeekView ); | 1340 | mWidStack->raiseWidget( mWeekView ); |
1282 | else | 1341 | else |
1283 | mWidStack->raiseWidget( mMonthView ); | 1342 | mWidStack->raiseWidget( mMonthView ); |
1284 | } | 1343 | } |
1285 | 1344 | ||
1286 | KOMonthView::~KOMonthView() | 1345 | KOMonthView::~KOMonthView() |
1287 | { | 1346 | { |
1288 | delete mContextMenu; | 1347 | delete mContextMenu; |
1289 | } | 1348 | } |
1290 | 1349 | ||
1350 | void KOMonthView::incidenceHighlighted( Incidence * inc , MonthViewCell* mc, int mday ) | ||
1351 | { | ||
1352 | //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday ); | ||
1353 | static Incidence * lastInc = 0; | ||
1354 | static MonthViewCell * lastCell = 0; | ||
1355 | |||
1356 | if ( lastInc == inc && lastCell == mc ) | ||
1357 | return; | ||
1358 | lastInc = inc; | ||
1359 | lastCell = mc; | ||
1360 | //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday ); | ||
1361 | |||
1362 | bool weekview = false; | ||
1363 | int index = 0; | ||
1364 | for (uint i = 0; i < mCellsW.count(); ++i) { | ||
1365 | if ( mCellsW[i] == mc ) { | ||
1366 | weekview = true; | ||
1367 | index = i; | ||
1368 | break; | ||
1369 | } | ||
1370 | } | ||
1371 | QPtrVector<MonthViewCell> *cells; | ||
1372 | if ( weekview ) | ||
1373 | cells = &mCellsW; | ||
1374 | else { | ||
1375 | for (uint i = 0; i < mCells.count(); ++i) { | ||
1376 | if ( mCells[i] == mc ) { | ||
1377 | index = i; | ||
1378 | break; | ||
1379 | } | ||
1380 | } | ||
1381 | cells = &mCells; | ||
1382 | } | ||
1383 | for (uint i = 0; i < (*cells).count(); ++i) { | ||
1384 | (*cells)[i]->deHightLight(); | ||
1385 | } | ||
1386 | if ( ! inc ) | ||
1387 | return; | ||
1388 | if ( mday > 1 && index > 0 ) | ||
1389 | for (int i = index-1; i >= 0; --i) { | ||
1390 | //qDebug("index %d iii %d ", index, i); | ||
1391 | if ( (*cells)[(uint)i]->doHightLight(inc) ) | ||
1392 | break; | ||
1393 | } | ||
1394 | if ( mday < 3 && mday > 0 && index < (*cells).count()-1) | ||
1395 | for (uint i = index+1; i < (*cells).count(); ++i) { | ||
1396 | if ( (*cells)[i]->doHightLight(inc) ) | ||
1397 | break; | ||
1398 | } | ||
1399 | |||
1400 | } | ||
1291 | void KOMonthView::selectInternalWeekNum ( int n ) | 1401 | void KOMonthView::selectInternalWeekNum ( int n ) |
1292 | { | 1402 | { |
1293 | switchView(); | 1403 | switchView(); |
1294 | if ( !KOPrefs::instance()->mMonthViewWeek ) | 1404 | if ( !KOPrefs::instance()->mMonthViewWeek ) |
1295 | emit selectMonth (); | 1405 | emit selectMonth (); |
1296 | else | 1406 | else |
1297 | emit selectWeekNum ( n ); | 1407 | emit selectWeekNum ( n ); |
1298 | } | 1408 | } |
1299 | 1409 | ||
1300 | int KOMonthView::currentWeek() | 1410 | int KOMonthView::currentWeek() |
1301 | { | 1411 | { |
1302 | if ( mShowWeekView ) | 1412 | if ( mShowWeekView ) |