summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp11
-rw-r--r--korganizer/koagendaview.cpp33
-rw-r--r--korganizer/koeventviewer.cpp18
-rw-r--r--korganizer/kotodoview.cpp13
-rw-r--r--korganizer/kotodoviewitem.cpp7
5 files changed, 54 insertions, 28 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index 002234d..7c41cab 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -1165,571 +1165,576 @@ void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// i
1165{ 1165{
1166 1166
1167 1167
1168 if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask ) 1168 if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask )
1169 return; 1169 return;
1170 if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 ) 1170 if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 )
1171 return; 1171 return;
1172 int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight(); 1172 int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight();
1173 if ( ch < 1 ) 1173 if ( ch < 1 )
1174 ch = 1; 1174 ch = 1;
1175 if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) { 1175 if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) {
1176 mPaintPixmap.resize( contentsWidth()+42, ch ); 1176 mPaintPixmap.resize( contentsWidth()+42, ch );
1177 } 1177 }
1178 mCurPixWid = contentsWidth(); 1178 mCurPixWid = contentsWidth();
1179 mCurPixHei = ch; 1179 mCurPixHei = ch;
1180 if ( mHighlightPixmap.width() < mGridSpacingX-1 || mHighlightPixmap.height() < ch ) { 1180 if ( mHighlightPixmap.width() < mGridSpacingX-1 || mHighlightPixmap.height() < ch ) {
1181 mHighlightPixmap.resize( mGridSpacingX-1, ch ); 1181 mHighlightPixmap.resize( mGridSpacingX-1, ch );
1182 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); 1182 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor );
1183 } 1183 }
1184 mPixPainter.begin( &mPaintPixmap) ; 1184 mPixPainter.begin( &mPaintPixmap) ;
1185 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); 1185 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() );
1186 QPainter * p ; 1186 QPainter * p ;
1187 if (paint == 0) { 1187 if (paint == 0) {
1188 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); 1188 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor);
1189 p = &mPixPainter; 1189 p = &mPixPainter;
1190 } 1190 }
1191 else 1191 else
1192 p = paint ; 1192 p = paint ;
1193 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); 1193 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch);
1194 1194
1195 //--cx;++cw; 1195 //--cx;++cw;
1196 int lGridSpacingY = mGridSpacingY*2; 1196 int lGridSpacingY = mGridSpacingY*2;
1197 int selDay; 1197 int selDay;
1198 if ( !backgroundOnly ) 1198 if ( !backgroundOnly )
1199 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) 1199 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay)
1200 { 1200 {
1201 if ( mSelectedDates[selDay] == QDateTime::currentDateTime ().date() && KOPrefs::instance()->mHighlightCurrentDay) { 1201 if ( mSelectedDates[selDay] == QDateTime::currentDateTime ().date() && KOPrefs::instance()->mHighlightCurrentDay) {
1202 int x1 = cx; 1202 int x1 = cx;
1203 int y1 = 0; 1203 int y1 = 0;
1204 if (y1 < cy) y1 = cy; 1204 if (y1 < cy) y1 = cy;
1205 int x2 = cx+cw-1; 1205 int x2 = cx+cw-1;
1206 int y2 = contentsHeight(); 1206 int y2 = contentsHeight();
1207 if (y2 > cy+ch-1) y2=cy+ch-1; 1207 if (y2 > cy+ch-1) y2=cy+ch-1;
1208 if (x2 >= x1 && y2 >= y1) { 1208 if (x2 >= x1 && y2 >= y1) {
1209 int gxStart = selDay; 1209 int gxStart = selDay;
1210 int gxEnd = gxStart ; 1210 int gxEnd = gxStart ;
1211 int xStart = KOGlobals::self()->reverseLayout() ? 1211 int xStart = KOGlobals::self()->reverseLayout() ?
1212 (mColumns - 1 - gxStart)*mGridSpacingX : 1212 (mColumns - 1 - gxStart)*mGridSpacingX :
1213 gxStart*mGridSpacingX; 1213 gxStart*mGridSpacingX;
1214 if (xStart < x1) xStart = x1; 1214 if (xStart < x1) xStart = x1;
1215 int xEnd = KOGlobals::self()->reverseLayout() ? 1215 int xEnd = KOGlobals::self()->reverseLayout() ?
1216 (mColumns - gxStart)*mGridSpacingX-1 : 1216 (mColumns - gxStart)*mGridSpacingX-1 :
1217 (gxStart+1)*mGridSpacingX-1; 1217 (gxStart+1)*mGridSpacingX-1;
1218 if (xEnd > x2) xEnd = x2; 1218 if (xEnd > x2) xEnd = x2;
1219 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1219 if ( KOPrefs::instance()->mUseHighlightLightColor )
1220 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1220 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1221 KOPrefs::instance()->mAgendaBgColor.light()); 1221 KOPrefs::instance()->mAgendaBgColor.light());
1222 else 1222 else
1223 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1223 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1224 KOPrefs::instance()->mAgendaBgColor.dark()); 1224 KOPrefs::instance()->mAgendaBgColor.dark());
1225 1225
1226 } 1226 }
1227 } 1227 }
1228 } 1228 }
1229 // Highlight working hours 1229 // Highlight working hours
1230 1230
1231 if ( !backgroundOnly ) 1231 if ( !backgroundOnly )
1232 if (mWorkingHoursEnable) { 1232 if (mWorkingHoursEnable) {
1233 int x1 = cx; 1233 int x1 = cx;
1234 int y1 = mWorkingHoursYTop; 1234 int y1 = mWorkingHoursYTop;
1235 if (y1 < cy) y1 = cy; 1235 if (y1 < cy) y1 = cy;
1236 int x2 = cx+cw-1; 1236 int x2 = cx+cw-1;
1237 // int x2 = mGridSpacingX * 5 - 1; 1237 // int x2 = mGridSpacingX * 5 - 1;
1238 // if (x2 > cx+cw-1) x2 = cx + cw - 1; 1238 // if (x2 > cx+cw-1) x2 = cx + cw - 1;
1239 int y2 = mWorkingHoursYBottom; 1239 int y2 = mWorkingHoursYBottom;
1240 if (y2 > cy+ch-1) y2=cy+ch-1; 1240 if (y2 > cy+ch-1) y2=cy+ch-1;
1241 1241
1242 if (x2 >= x1 && y2 >= y1) { 1242 if (x2 >= x1 && y2 >= y1) {
1243 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); 1243 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX );
1244 int gxStart = x1/mGridSpacingX; 1244 int gxStart = x1/mGridSpacingX;
1245 int gxEnd = x2/mGridSpacingX; 1245 int gxEnd = x2/mGridSpacingX;
1246 while(gxStart <= gxEnd) { 1246 while(gxStart <= gxEnd) {
1247 if (gxStart < int(mHolidayMask->count()) && 1247 if (gxStart < int(mHolidayMask->count()) &&
1248 !mHolidayMask->at(gxStart)) { 1248 !mHolidayMask->at(gxStart)) {
1249 int xStart = KOGlobals::self()->reverseLayout() ? 1249 int xStart = KOGlobals::self()->reverseLayout() ?
1250 (mColumns - 1 - gxStart)*mGridSpacingX : 1250 (mColumns - 1 - gxStart)*mGridSpacingX :
1251 gxStart*mGridSpacingX; 1251 gxStart*mGridSpacingX;
1252 if (xStart < x1) xStart = x1; 1252 if (xStart < x1) xStart = x1;
1253 int xEnd = KOGlobals::self()->reverseLayout() ? 1253 int xEnd = KOGlobals::self()->reverseLayout() ?
1254 (mColumns - gxStart)*mGridSpacingX-1 : 1254 (mColumns - gxStart)*mGridSpacingX-1 :
1255 (gxStart+1)*mGridSpacingX-1; 1255 (gxStart+1)*mGridSpacingX-1;
1256 if (xEnd > x2) xEnd = x2; 1256 if (xEnd > x2) xEnd = x2;
1257 if ( mSelectedDates[gxStart] == QDateTime::currentDateTime ().date()&& KOPrefs::instance()->mHighlightCurrentDay ) { 1257 if ( mSelectedDates[gxStart] == QDateTime::currentDateTime ().date()&& KOPrefs::instance()->mHighlightCurrentDay ) {
1258 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1258 if ( KOPrefs::instance()->mUseHighlightLightColor )
1259 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1259 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1260 KOPrefs::instance()->mWorkingHoursColor.light()); 1260 KOPrefs::instance()->mWorkingHoursColor.light());
1261 else 1261 else
1262 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1262 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1263 KOPrefs::instance()->mWorkingHoursColor.dark()); 1263 KOPrefs::instance()->mWorkingHoursColor.dark());
1264 } else { 1264 } else {
1265 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1265 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1266 KOPrefs::instance()->mWorkingHoursColor); 1266 KOPrefs::instance()->mWorkingHoursColor);
1267 } 1267 }
1268 } 1268 }
1269 ++gxStart; 1269 ++gxStart;
1270 } 1270 }
1271 } 1271 }
1272 } 1272 }
1273 /* 1273 /*
1274 int selectionX = KOGlobals::self()->reverseLayout() ? 1274 int selectionX = KOGlobals::self()->reverseLayout() ?
1275 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1275 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1276 mSelectionCellX * mGridSpacingX; 1276 mSelectionCellX * mGridSpacingX;
1277 1277
1278 // Draw selection 1278 // Draw selection
1279 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1279 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1280 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1280 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1281 // TODO: paint only part within cx,cy,cw,ch 1281 // TODO: paint only part within cx,cy,cw,ch
1282 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, 1282 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX,
1283 mSelectionHeight, KOPrefs::instance()->mHighlightColor ); 1283 mSelectionHeight, KOPrefs::instance()->mHighlightColor );
1284 } 1284 }
1285 */ 1285 */
1286 // Draw vertical lines of grid 1286 // Draw vertical lines of grid
1287 1287
1288 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; 1288 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX;
1289 if ( mGridSpacingX > 0 ) { 1289 if ( mGridSpacingX > 0 ) {
1290 while (x < cx + cw) { 1290 while (x < cx + cw) {
1291 p->drawLine(x,cy,x,cy+ch); 1291 p->drawLine(x,cy,x,cy+ch);
1292 x+=mGridSpacingX; 1292 x+=mGridSpacingX;
1293 } 1293 }
1294 } 1294 }
1295 // Draw horizontal lines of grid 1295 // Draw horizontal lines of grid
1296 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; 1296 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY;
1297 if ( lGridSpacingY > 0 ) { 1297 if ( lGridSpacingY > 0 ) {
1298 while (y < cy + ch) { 1298 while (y < cy + ch) {
1299 p->setPen( SolidLine ); 1299 p->setPen( SolidLine );
1300 p->drawLine(cx,y,cx+cw,y); 1300 p->drawLine(cx,y,cx+cw,y);
1301 y+=lGridSpacingY; 1301 y+=lGridSpacingY;
1302 p->setPen( DotLine ); 1302 p->setPen( DotLine );
1303 p->drawLine(cx,y,cx+cw,y); 1303 p->drawLine(cx,y,cx+cw,y);
1304 y+=lGridSpacingY; 1304 y+=lGridSpacingY;
1305 } 1305 }
1306 p->setPen( SolidLine ); 1306 p->setPen( SolidLine );
1307 } 1307 }
1308 mPixPainter.end() ; 1308 mPixPainter.end() ;
1309} 1309}
1310 1310
1311/* 1311/*
1312 Convert srcollview contents coordinates to agenda grid coordinates. 1312 Convert srcollview contents coordinates to agenda grid coordinates.
1313*/ 1313*/
1314void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) 1314void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy)
1315{ 1315{
1316 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : 1316 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX :
1317 x/mGridSpacingX; 1317 x/mGridSpacingX;
1318 gy = y/mGridSpacingY; 1318 gy = y/mGridSpacingY;
1319} 1319}
1320 1320
1321/* 1321/*
1322 Convert agenda grid coordinates to scrollview contents coordinates. 1322 Convert agenda grid coordinates to scrollview contents coordinates.
1323*/ 1323*/
1324void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) 1324void KOAgenda::gridToContents (int gx, int gy, int& x, int& y)
1325{ 1325{
1326 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: 1326 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX:
1327 gx*mGridSpacingX; 1327 gx*mGridSpacingX;
1328 y = gy*mGridSpacingY; 1328 y = gy*mGridSpacingY;
1329} 1329}
1330 1330
1331 1331
1332/* 1332/*
1333 Return Y coordinate corresponding to time. Coordinates are rounded to fit into 1333 Return Y coordinate corresponding to time. Coordinates are rounded to fit into
1334 the grid. 1334 the grid.
1335*/ 1335*/
1336int KOAgenda::timeToY(const QTime &time) 1336int KOAgenda::timeToY(const QTime &time)
1337{ 1337{
1338 int minutesPerCell = 24 * 60 / mRows; 1338 int minutesPerCell = 24 * 60 / mRows;
1339 int timeMinutes = time.hour() * 60 + time.minute(); 1339 int timeMinutes = time.hour() * 60 + time.minute();
1340 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; 1340 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell;
1341 return Y; 1341 return Y;
1342} 1342}
1343 1343
1344 1344
1345/* 1345/*
1346 Return time corresponding to cell y coordinate. Coordinates are rounded to 1346 Return time corresponding to cell y coordinate. Coordinates are rounded to
1347 fit into the grid. 1347 fit into the grid.
1348*/ 1348*/
1349QTime KOAgenda::gyToTime(int gy) 1349QTime KOAgenda::gyToTime(int gy)
1350{ 1350{
1351 1351
1352 int secondsPerCell = 24 * 60 * 60/ mRows; 1352 int secondsPerCell = 24 * 60 * 60/ mRows;
1353 1353
1354 int timeSeconds = secondsPerCell * gy; 1354 int timeSeconds = secondsPerCell * gy;
1355 1355
1356 QTime time( 0, 0, 0 ); 1356 QTime time( 0, 0, 0 );
1357 if ( timeSeconds < 24 * 60 * 60 ) { 1357 if ( timeSeconds < 24 * 60 * 60 ) {
1358 time = time.addSecs(timeSeconds); 1358 time = time.addSecs(timeSeconds);
1359 } else { 1359 } else {
1360 time.setHMS( 23, 59, 59 ); 1360 time.setHMS( 23, 59, 59 );
1361 } 1361 }
1362 1362
1363 return time; 1363 return time;
1364} 1364}
1365 1365
1366void KOAgenda::setStartHour(int startHour) 1366void KOAgenda::setStartHour(int startHour)
1367{ 1367{
1368 int startCell = startHour * mRows / 24; 1368 int startCell = startHour * mRows / 24;
1369 setContentsPos(0,startCell * gridSpacingY()); 1369 setContentsPos(0,startCell * gridSpacingY());
1370} 1370}
1371void KOAgenda::hideUnused() 1371void KOAgenda::hideUnused()
1372{ 1372{
1373 // experimental only 1373 // experimental only
1374 // return; 1374 // return;
1375 KOAgendaItem *item; 1375 KOAgendaItem *item;
1376 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { 1376 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) {
1377 item->hide(); 1377 item->hide();
1378 } 1378 }
1379} 1379}
1380 1380
1381 1381
1382KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) 1382KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view)
1383{ 1383{
1384 1384
1385 KOAgendaItem *fi; 1385 KOAgendaItem *fi;
1386 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { 1386 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) {
1387 if ( fi->incidence() == event ) { 1387 if ( fi->incidence() == event ) {
1388 mUnusedItems.remove(); 1388 mUnusedItems.remove();
1389 fi->init( event, qd ); 1389 fi->init( event, qd );
1390 return fi; 1390 return fi;
1391 } 1391 }
1392 } 1392 }
1393 fi=mUnusedItems.first(); 1393 fi=mUnusedItems.first();
1394 if ( fi ) { 1394 if ( fi ) {
1395 mUnusedItems.remove(); 1395 mUnusedItems.remove();
1396 fi->init( event, qd ); 1396 fi->init( event, qd );
1397 return fi; 1397 return fi;
1398 } 1398 }
1399 // qDebug("new KOAgendaItem "); 1399 // qDebug("new KOAgendaItem ");
1400 1400
1401 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); 1401 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode );
1402 agendaItem->installEventFilter(this); 1402 agendaItem->installEventFilter(this);
1403 addChild(agendaItem,0,0); 1403 addChild(agendaItem,0,0);
1404 return agendaItem; 1404 return agendaItem;
1405} 1405}
1406KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) 1406KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo )
1407{ 1407{
1408 KOAgendaItem *item; 1408 KOAgendaItem *item;
1409 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1409 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1410 if ( item->incidence() == todo ) { 1410 if ( item->incidence() == todo ) {
1411 mItems.remove(); 1411 mItems.remove();
1412 return item; 1412 return item;
1413 } 1413 }
1414 } 1414 }
1415 return 0; 1415 return 0;
1416} 1416}
1417 1417
1418 1418
1419void KOAgenda::updateTodo( Todo * todo, int days, bool remove) 1419void KOAgenda::updateTodo( Todo * todo, int days, bool remove)
1420{ 1420{
1421 1421 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )||
1422 KOAgendaItem *item; 1422 KOAgendaItem *item;
1423 item = getItemForTodo ( todo ); 1423 item = getItemForTodo ( todo );
1424 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); 1424 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove);
1425 if ( item ) { 1425 if ( item ) {
1426 blockSignals( true ); 1426 blockSignals( true );
1427 //qDebug("item found "); 1427 //qDebug("item found ");
1428 item->hide(); 1428 item->hide();
1429 item->setCellX(-2, -1 ); 1429 item->setCellX(-2, -1 );
1430 item->select(false); 1430 item->select(false);
1431 mUnusedItems.append( item ); 1431 mUnusedItems.append( item );
1432 mItems.remove( item ); 1432 mItems.remove( item );
1433 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1433 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1434 KOAgendaItem *itemit; 1434 KOAgendaItem *itemit;
1435 //globalFlagBlockAgendaItemPaint = 1; 1435 //globalFlagBlockAgendaItemPaint = 1;
1436 for ( itemit=oldconflictItems.first(); itemit != 0; 1436 for ( itemit=oldconflictItems.first(); itemit != 0;
1437 itemit=oldconflictItems.next() ) { 1437 itemit=oldconflictItems.next() ) {
1438 if ( itemit != item ) 1438 if ( itemit != item )
1439 placeSubCells(itemit); 1439 placeSubCells(itemit);
1440 } 1440 }
1441 qApp->processEvents(); 1441 qApp->processEvents();
1442 //globalFlagBlockAgendaItemPaint = 0; 1442 //globalFlagBlockAgendaItemPaint = 0;
1443 for ( itemit=oldconflictItems.first(); itemit != 0; 1443 for ( itemit=oldconflictItems.first(); itemit != 0;
1444 itemit=oldconflictItems.next() ) { 1444 itemit=oldconflictItems.next() ) {
1445 globalFlagBlockAgendaItemUpdate = 0; 1445 globalFlagBlockAgendaItemUpdate = 0;
1446 if ( itemit != item ) 1446 if ( itemit != item )
1447 itemit->repaintMe(); 1447 itemit->repaintMe();
1448 globalFlagBlockAgendaItemUpdate = 1; 1448 globalFlagBlockAgendaItemUpdate = 1;
1449 itemit->repaint(); 1449 itemit->repaint();
1450 } 1450 }
1451 blockSignals( false ); 1451 blockSignals( false );
1452 } 1452 }
1453 if ( remove ) { 1453 if ( remove ) {
1454 //qDebug("remove****************************************** "); 1454 //qDebug("remove****************************************** ");
1455 return; 1455 return;
1456 } 1456 }
1457 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); 1457 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ ");
1458 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); 1458 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda );
1459 QDate currentDate; 1459 QDate currentDate;
1460 QDateTime dt;
1461 if ( todo->hasCompletedDate() )
1462 dt = todo->completed();
1463 else
1464 dt = todo->dtDue();
1460 if ( overdue ) { 1465 if ( overdue ) {
1461 currentDate = QDate::currentDate(); 1466 currentDate = QDate::currentDate();
1462 days += todo->dtDue().date().daysTo( currentDate ); 1467 days += todo->dtDue().date().daysTo( currentDate );
1463 } 1468 }
1464 else 1469 else
1465 currentDate = todo->dtDue().date(); 1470 currentDate = dt.date();
1466 1471
1467 if ( todo->doesFloat() || overdue ) { 1472 if ( todo->doesFloat() || overdue ) {
1468 if ( ! mAllDayMode ) return; 1473 if ( ! mAllDayMode ) return;
1469 // aldayagenda 1474 // aldayagenda
1470 globalFlagBlockAgendaItemPaint = 1; 1475 globalFlagBlockAgendaItemPaint = 1;
1471 item = insertAllDayItem(todo, currentDate,days, days); 1476 item = insertAllDayItem(todo, currentDate,days, days);
1472 item->show(); 1477 item->show();
1473 1478
1474 } 1479 }
1475 else { 1480 else {
1476 if ( mAllDayMode ) return; 1481 if ( mAllDayMode ) return;
1477 // mAgenda 1482 // mAgenda
1478 globalFlagBlockAgendaItemPaint = 1; 1483 globalFlagBlockAgendaItemPaint = 1;
1479 int endY = timeToY(todo->dtDue().time()) - 1; 1484 int endY = timeToY(dt.time()) - 1;
1480 int hi = 12/KOPrefs::instance()->mHourSize; 1485 int hi = 12/KOPrefs::instance()->mHourSize;
1481 int startY = endY - 1-hi; 1486 int startY = endY - 1-hi;
1482 item = insertItem(todo,currentDate,days,startY,endY); 1487 item = insertItem(todo,currentDate,days,startY,endY);
1483 item->show(); 1488 item->show();
1484 } 1489 }
1485 qApp->processEvents(); 1490 qApp->processEvents();
1486 globalFlagBlockAgendaItemPaint = 0; 1491 globalFlagBlockAgendaItemPaint = 0;
1487 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1492 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1488 KOAgendaItem *itemit; 1493 KOAgendaItem *itemit;
1489 for ( itemit=oldconflictItems.first(); itemit != 0; 1494 for ( itemit=oldconflictItems.first(); itemit != 0;
1490 itemit=oldconflictItems.next() ) { 1495 itemit=oldconflictItems.next() ) {
1491 globalFlagBlockAgendaItemUpdate = 0; 1496 globalFlagBlockAgendaItemUpdate = 0;
1492 itemit->repaintMe(); 1497 itemit->repaintMe();
1493 globalFlagBlockAgendaItemUpdate = 1; 1498 globalFlagBlockAgendaItemUpdate = 1;
1494 itemit->repaint(); 1499 itemit->repaint();
1495 } 1500 }
1496 globalFlagBlockAgendaItemUpdate = 0; 1501 globalFlagBlockAgendaItemUpdate = 0;
1497 item->repaintMe(); 1502 item->repaintMe();
1498 globalFlagBlockAgendaItemUpdate = 1; 1503 globalFlagBlockAgendaItemUpdate = 1;
1499 item->repaint(); 1504 item->repaint();
1500} 1505}
1501/* 1506/*
1502 Insert KOAgendaItem into agenda. 1507 Insert KOAgendaItem into agenda.
1503*/ 1508*/
1504KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) 1509KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom)
1505{ 1510{
1506 //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl; 1511 //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl;
1507 1512
1508 if (mAllDayMode) { 1513 if (mAllDayMode) {
1509 kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl; 1514 kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl;
1510 return 0; 1515 return 0;
1511 } 1516 }
1512 1517
1513 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1518 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1514 //agendaItem->setFrameStyle(WinPanel|Raised); 1519 //agendaItem->setFrameStyle(WinPanel|Raised);
1515 1520
1516 int YSize = YBottom - YTop + 1; 1521 int YSize = YBottom - YTop + 1;
1517 if (YSize < 0) { 1522 if (YSize < 0) {
1518 kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl; 1523 kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl;
1519 YSize = 1; 1524 YSize = 1;
1520 } 1525 }
1521 int iheight = mGridSpacingY * YSize; 1526 int iheight = mGridSpacingY * YSize;
1522 1527
1523 agendaItem->resize(mGridSpacingX,iheight ); 1528 agendaItem->resize(mGridSpacingX,iheight );
1524 agendaItem->setCellXY(X,YTop,YBottom); 1529 agendaItem->setCellXY(X,YTop,YBottom);
1525 agendaItem->setCellXWidth(X); 1530 agendaItem->setCellXWidth(X);
1526 1531
1527 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); 1532 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY);
1528 mItems.append(agendaItem); 1533 mItems.append(agendaItem);
1529 1534
1530 placeSubCells(agendaItem); 1535 placeSubCells(agendaItem);
1531 1536
1532 //agendaItem->show(); 1537 //agendaItem->show();
1533 1538
1534 marcus_bains(); 1539 marcus_bains();
1535 1540
1536 return agendaItem; 1541 return agendaItem;
1537} 1542}
1538 1543
1539 1544
1540/* 1545/*
1541 Insert all-day KOAgendaItem into agenda. 1546 Insert all-day KOAgendaItem into agenda.
1542*/ 1547*/
1543KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) 1548KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd)
1544{ 1549{
1545 if (!mAllDayMode) { 1550 if (!mAllDayMode) {
1546 return 0; 1551 return 0;
1547 } 1552 }
1548 1553
1549 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1554 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1550 1555
1551 agendaItem->setCellXY(XBegin,0,0); 1556 agendaItem->setCellXY(XBegin,0,0);
1552 agendaItem->setCellXWidth(XEnd); 1557 agendaItem->setCellXWidth(XEnd);
1553 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); 1558 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY);
1554 1559
1555 //addChild(agendaItem,XBegin*mGridSpacingX,0); 1560 //addChild(agendaItem,XBegin*mGridSpacingX,0);
1556 mItems.append(agendaItem); 1561 mItems.append(agendaItem);
1557 1562
1558 placeSubCells(agendaItem); 1563 placeSubCells(agendaItem);
1559 1564
1560 //agendaItem->show(); 1565 //agendaItem->show();
1561 1566
1562 return agendaItem; 1567 return agendaItem;
1563} 1568}
1564 1569
1565 1570
1566void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 1571void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
1567 int YTop,int YBottom) 1572 int YTop,int YBottom)
1568{ 1573{
1569 if (mAllDayMode) { 1574 if (mAllDayMode) {
1570 ; 1575 ;
1571 return; 1576 return;
1572 } 1577 }
1573 1578
1574 int cellX,cellYTop,cellYBottom; 1579 int cellX,cellYTop,cellYBottom;
1575 QString newtext; 1580 QString newtext;
1576 int width = XEnd - XBegin + 1; 1581 int width = XEnd - XBegin + 1;
1577 int count = 0; 1582 int count = 0;
1578 KOAgendaItem *current = 0; 1583 KOAgendaItem *current = 0;
1579 QPtrList<KOAgendaItem> multiItems; 1584 QPtrList<KOAgendaItem> multiItems;
1580 for (cellX = XBegin;cellX <= XEnd;++cellX) { 1585 for (cellX = XBegin;cellX <= XEnd;++cellX) {
1581 if (cellX == XBegin) cellYTop = YTop; 1586 if (cellX == XBegin) cellYTop = YTop;
1582 else cellYTop = 0; 1587 else cellYTop = 0;
1583 if (cellX == XEnd) cellYBottom = YBottom; 1588 if (cellX == XEnd) cellYBottom = YBottom;
1584 else cellYBottom = rows() - 1; 1589 else cellYBottom = rows() - 1;
1585 newtext = QString("(%1/%2): ").arg(++count).arg(width); 1590 newtext = QString("(%1/%2): ").arg(++count).arg(width);
1586 newtext.append(event->summary()); 1591 newtext.append(event->summary());
1587 current = insertItem(event,qd,cellX,cellYTop,cellYBottom); 1592 current = insertItem(event,qd,cellX,cellYTop,cellYBottom);
1588 current->setText(newtext); 1593 current->setText(newtext);
1589 multiItems.append(current); 1594 multiItems.append(current);
1590 } 1595 }
1591 1596
1592 KOAgendaItem *next = 0; 1597 KOAgendaItem *next = 0;
1593 KOAgendaItem *last = multiItems.last(); 1598 KOAgendaItem *last = multiItems.last();
1594 KOAgendaItem *first = multiItems.first(); 1599 KOAgendaItem *first = multiItems.first();
1595 KOAgendaItem *setFirst,*setLast; 1600 KOAgendaItem *setFirst,*setLast;
1596 current = first; 1601 current = first;
1597 while (current) { 1602 while (current) {
1598 next = multiItems.next(); 1603 next = multiItems.next();
1599 if (current == first) setFirst = 0; 1604 if (current == first) setFirst = 0;
1600 else setFirst = first; 1605 else setFirst = first;
1601 if (current == last) setLast = 0; 1606 if (current == last) setLast = 0;
1602 else setLast = last; 1607 else setLast = last;
1603 1608
1604 current->setMultiItem(setFirst,next,setLast); 1609 current->setMultiItem(setFirst,next,setLast);
1605 current = next; 1610 current = next;
1606 } 1611 }
1607 1612
1608 marcus_bains(); 1613 marcus_bains();
1609} 1614}
1610 1615
1611 1616
1612//QSizePolicy KOAgenda::sizePolicy() const 1617//QSizePolicy KOAgenda::sizePolicy() const
1613//{ 1618//{
1614 // Thought this would make the all-day event agenda minimum size and the 1619 // Thought this would make the all-day event agenda minimum size and the
1615 // normal agenda take the remaining space. But it doesn´t work. The QSplitter 1620 // normal agenda take the remaining space. But it doesn´t work. The QSplitter
1616 // don´t seem to think that an Expanding widget needs more space than a 1621 // don´t seem to think that an Expanding widget needs more space than a
1617 // Preferred one. 1622 // Preferred one.
1618 // But it doesn´t hurt, so it stays. 1623 // But it doesn´t hurt, so it stays.
1619// if (mAllDayMode) { 1624// if (mAllDayMode) {
1620// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); 1625// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
1621// } else { 1626// } else {
1622// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); 1627// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
1623// } 1628// }
1624//} 1629//}
1625void KOAgenda::finishResize ( ) 1630void KOAgenda::finishResize ( )
1626{ 1631{
1627 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) "); 1632 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) ");
1628 if ( globalFlagBlockAgenda == 0 ) { 1633 if ( globalFlagBlockAgenda == 0 ) {
1629 finishUpdate(); 1634 finishUpdate();
1630 //qDebug("finishUpdate() called "); 1635 //qDebug("finishUpdate() called ");
1631 } 1636 }
1632} 1637}
1633/* 1638/*
1634 Overridden from QScrollView to provide proper resizing of KOAgendaItems. 1639 Overridden from QScrollView to provide proper resizing of KOAgendaItems.
1635*/ 1640*/
1636void KOAgenda::resizeEvent ( QResizeEvent *ev ) 1641void KOAgenda::resizeEvent ( QResizeEvent *ev )
1637{ 1642{
1638 1643
1639 mResizeTimer.start( 150 , true ); 1644 mResizeTimer.start( 150 , true );
1640 computeSizes(); 1645 computeSizes();
1641 return; 1646 return;
1642 1647
1643} 1648}
1644void KOAgenda::computeSizes() 1649void KOAgenda::computeSizes()
1645{ 1650{
1646 if ( globalFlagBlockStartup ) 1651 if ( globalFlagBlockStartup )
1647 return; 1652 return;
1648 1653
1649 if (mAllDayMode) { 1654 if (mAllDayMode) {
1650 mGridSpacingX = (width()-3) / mColumns; 1655 mGridSpacingX = (width()-3) / mColumns;
1651 mGridSpacingY = height() - 2 * frameWidth() - 1; 1656 mGridSpacingY = height() - 2 * frameWidth() - 1;
1652 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY + 1); 1657 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY + 1);
1653// mGridSpacingY = height(); 1658// mGridSpacingY = height();
1654// resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1659// resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1655 1660
1656 KOAgendaItem *item; 1661 KOAgendaItem *item;
1657 int subCellWidth; 1662 int subCellWidth;
1658 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1663 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1659 subCellWidth = mGridSpacingY / item->subCells(); 1664 subCellWidth = mGridSpacingY / item->subCells();
1660 item->resize(mGridSpacingX * item->cellWidth(),subCellWidth); 1665 item->resize(mGridSpacingX * item->cellWidth(),subCellWidth);
1661 moveChild(item,KOGlobals::self()->reverseLayout() ? 1666 moveChild(item,KOGlobals::self()->reverseLayout() ?
1662 (mColumns - 1 - item->cellX()) * mGridSpacingX : 1667 (mColumns - 1 - item->cellX()) * mGridSpacingX :
1663 item->cellX() * mGridSpacingX, 1668 item->cellX() * mGridSpacingX,
1664 item->subCell() * subCellWidth); 1669 item->subCell() * subCellWidth);
1665 } 1670 }
1666 KOPrefs::instance()->mAllDaySize = mGridSpacingY; 1671 KOPrefs::instance()->mAllDaySize = mGridSpacingY;
1667 } else { 1672 } else {
1668 mGridSpacingX = (width() - verticalScrollBar()->width()-3)/mColumns; 1673 mGridSpacingX = (width() - verticalScrollBar()->width()-3)/mColumns;
1669 if (height() > mGridSpacingY * mRows + 1 ) { 1674 if (height() > mGridSpacingY * mRows + 1 ) {
1670 KOPrefs::instance()->mHourSize = ((height())/mRows)+1; 1675 KOPrefs::instance()->mHourSize = ((height())/mRows)+1;
1671 mGridSpacingY = KOPrefs::instance()->mHourSize ; 1676 mGridSpacingY = KOPrefs::instance()->mHourSize ;
1672 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1677 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1673 emit resizedSignal(); 1678 emit resizedSignal();
1674 } else 1679 } else
1675 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1680 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1676 KOAgendaItem *item; 1681 KOAgendaItem *item;
1677 int subCellWidth; 1682 int subCellWidth;
1678 1683
1679 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1684 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1680 subCellWidth = mGridSpacingX / item->subCells(); 1685 subCellWidth = mGridSpacingX / item->subCells();
1681 item->resize(subCellWidth,item->height()); 1686 item->resize(subCellWidth,item->height());
1682 moveChild(item,(KOGlobals::self()->reverseLayout() ? 1687 moveChild(item,(KOGlobals::self()->reverseLayout() ?
1683 (mColumns - 1 - item->cellX()) * mGridSpacingX : 1688 (mColumns - 1 - item->cellX()) * mGridSpacingX :
1684 item->cellX() * mGridSpacingX) + 1689 item->cellX() * mGridSpacingX) +
1685 item->subCell() * subCellWidth,childY(item)); 1690 item->subCell() * subCellWidth,childY(item));
1686 } 1691 }
1687 } 1692 }
1688 int cw = contentsWidth(); 1693 int cw = contentsWidth();
1689 int ch = contentsHeight(); 1694 int ch = contentsHeight();
1690 if ( mAllDayMode ) { 1695 if ( mAllDayMode ) {
1691 QPixmap* paintPixAll = KOAgendaItem::paintPixAllday(); 1696 QPixmap* paintPixAll = KOAgendaItem::paintPixAllday();
1692 if ( (paintPixAll->width() < cw || paintPixAll->height() < ch) && cw > 0 && ch > 0 ) 1697 if ( (paintPixAll->width() < cw || paintPixAll->height() < ch) && cw > 0 && ch > 0 )
1693 paintPixAll->resize( cw, ch ); 1698 paintPixAll->resize( cw, ch );
1694 } else { 1699 } else {
1695 QPixmap* paintPix = KOAgendaItem::paintPix(); 1700 QPixmap* paintPix = KOAgendaItem::paintPix();
1696 if ( paintPix->width() < cw || paintPix->height() < ch ) 1701 if ( paintPix->width() < cw || paintPix->height() < ch )
1697 KOAgendaItem::resizePixmap( cw , ch ); 1702 KOAgendaItem::resizePixmap( cw , ch );
1698 } 1703 }
1699 1704
1700 checkScrollBoundaries(); 1705 checkScrollBoundaries();
1701 marcus_bains(); 1706 marcus_bains();
1702 drawContentsToPainter(); 1707 drawContentsToPainter();
1703 viewport()->repaint(false); 1708 viewport()->repaint(false);
1704} 1709}
1705 1710
1706void KOAgenda::scrollUp() 1711void KOAgenda::scrollUp()
1707{ 1712{
1708 scrollBy(0,-mScrollOffset); 1713 scrollBy(0,-mScrollOffset);
1709} 1714}
1710 1715
1711 1716
1712void KOAgenda::scrollDown() 1717void KOAgenda::scrollDown()
1713{ 1718{
1714 scrollBy(0,mScrollOffset); 1719 scrollBy(0,mScrollOffset);
1715} 1720}
1716 1721
1717void KOAgenda::popupAlarm() 1722void KOAgenda::popupAlarm()
1718{ 1723{
1719 if (!mClickedItem) { 1724 if (!mClickedItem) {
1720 qDebug("KOAgenda::popupAlarm() called without having a clicked item "); 1725 qDebug("KOAgenda::popupAlarm() called without having a clicked item ");
1721 return; 1726 return;
1722 } 1727 }
1723// TODO: deal correctly with multiple alarms 1728// TODO: deal correctly with multiple alarms
1724 Alarm* alarm; 1729 Alarm* alarm;
1725 QPtrList<Alarm> list(mClickedItem->incidence()->alarms()); 1730 QPtrList<Alarm> list(mClickedItem->incidence()->alarms());
1726 for(alarm=list.first();alarm;alarm=list.next()) { 1731 for(alarm=list.first();alarm;alarm=list.next()) {
1727 alarm->toggleAlarm(); 1732 alarm->toggleAlarm();
1728 } 1733 }
1729 emit itemModified( mClickedItem , KOGlobals::EVENTEDITED ); 1734 emit itemModified( mClickedItem , KOGlobals::EVENTEDITED );
1730 mClickedItem->paintMe( true ); 1735 mClickedItem->paintMe( true );
1731 mClickedItem->repaint( false ); 1736 mClickedItem->repaint( false );
1732} 1737}
1733 1738
1734/* 1739/*
1735 Calculates the minimum width 1740 Calculates the minimum width
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 1864e22..bbc43e4 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -697,843 +697,854 @@ void KOAgendaView::createDayLabels()
697 dayLabel = new QLabel(mDayLabels); 697 dayLabel = new QLabel(mDayLabels);
698 mDayLabelsList.append( dayLabel ); 698 mDayLabelsList.append( dayLabel );
699 mLayoutDayLabels->addWidget(dayLabel); 699 mLayoutDayLabels->addWidget(dayLabel);
700 } 700 }
701 dayLabel->setMinimumWidth( 1 ); 701 dayLabel->setMinimumWidth( 1 );
702 dayLabel->setMaximumWidth( 2048 ); 702 dayLabel->setMaximumWidth( 2048 );
703 dayLabel->setFont( dlf ); 703 dayLabel->setFont( dlf );
704 dayLabel->show(); 704 dayLabel->show();
705 QString str; 705 QString str;
706 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 706 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
707 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 707 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
708 switch ( maxLen ) { 708 switch ( maxLen ) {
709 case 2: 709 case 2:
710 str = QString::number( date.day() ); 710 str = QString::number( date.day() );
711 break; 711 break;
712 712
713 case 3: 713 case 3:
714 str = dayName.left( 1 ) +QString::number( date.day()); 714 str = dayName.left( 1 ) +QString::number( date.day());
715 715
716 break; 716 break;
717 case 4: 717 case 4:
718 str = dayName.left( 1 ) + " " +QString::number( date.day()); 718 str = dayName.left( 1 ) + " " +QString::number( date.day());
719 719
720 break; 720 break;
721 case 5: 721 case 5:
722 str = dayName.left( 2 ) + " " +QString::number( date.day()); 722 str = dayName.left( 2 ) + " " +QString::number( date.day());
723 723
724 break; 724 break;
725 case 6: 725 case 6:
726 str = dayName.left( 3 ) + " " +QString::number( date.day()); 726 str = dayName.left( 3 ) + " " +QString::number( date.day());
727 break; 727 break;
728 728
729 default: 729 default:
730 break; 730 break;
731 } 731 }
732 if ( oneday ) { 732 if ( oneday ) {
733 QString addString; 733 QString addString;
734 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 734 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
735 addString = i18n("Today"); 735 addString = i18n("Today");
736 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 736 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
737 addString = i18n("Tomorrow"); 737 addString = i18n("Tomorrow");
738 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 738 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
739 addString = i18n("Yesterday"); 739 addString = i18n("Yesterday");
740 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 740 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
741 addString = i18n("Day before yesterday"); 741 addString = i18n("Day before yesterday");
742 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 742 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
743 addString = i18n("Day after tomorrow"); 743 addString = i18n("Day after tomorrow");
744 if ( !addString.isEmpty() ) { 744 if ( !addString.isEmpty() ) {
745 str = addString+", " + str; 745 str = addString+", " + str;
746 } 746 }
747 } 747 }
748 dayLabel->setText(str); 748 dayLabel->setText(str);
749 dayLabel->setAlignment(QLabel::AlignHCenter); 749 dayLabel->setAlignment(QLabel::AlignHCenter);
750 if (date == QDate::currentDate()) { 750 if (date == QDate::currentDate()) {
751 QFont bFont = dlf; 751 QFont bFont = dlf;
752 bFont.setBold( true ); 752 bFont.setBold( true );
753 dayLabel->setFont(bFont); 753 dayLabel->setFont(bFont);
754 } 754 }
755 //dayLayout->addWidget(dayLabel); 755 //dayLayout->addWidget(dayLabel);
756 756
757#ifndef KORG_NOPLUGINS 757#ifndef KORG_NOPLUGINS
758 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 758 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
759 CalendarDecoration *it; 759 CalendarDecoration *it;
760 for(it = cds.first(); it; it = cds.next()) { 760 for(it = cds.first(); it; it = cds.next()) {
761 QString text = it->shortText( date ); 761 QString text = it->shortText( date );
762 if ( !text.isEmpty() ) { 762 if ( !text.isEmpty() ) {
763 QLabel *label = new QLabel(text,mDayLabels); 763 QLabel *label = new QLabel(text,mDayLabels);
764 label->setAlignment(AlignCenter); 764 label->setAlignment(AlignCenter);
765 dayLayout->addWidget(label); 765 dayLayout->addWidget(label);
766 } 766 }
767 } 767 }
768 768
769 for(it = cds.first(); it; it = cds.next()) { 769 for(it = cds.first(); it; it = cds.next()) {
770 QWidget *wid = it->smallWidget(mDayLabels,date); 770 QWidget *wid = it->smallWidget(mDayLabels,date);
771 if ( wid ) { 771 if ( wid ) {
772 // wid->setHeight(20); 772 // wid->setHeight(20);
773 dayLayout->addWidget(wid); 773 dayLayout->addWidget(wid);
774 } 774 }
775 } 775 }
776#endif 776#endif
777 } 777 }
778 if ( ! appendLabels ) { 778 if ( ! appendLabels ) {
779 dayLabel = mDayLabelsList.next(); 779 dayLabel = mDayLabelsList.next();
780 if ( !dayLabel ) 780 if ( !dayLabel )
781 appendLabels = true; 781 appendLabels = true;
782 } 782 }
783 if ( appendLabels ) { 783 if ( appendLabels ) {
784 dayLabel = new QLabel(mDayLabels); 784 dayLabel = new QLabel(mDayLabels);
785 mDayLabelsList.append( dayLabel ); 785 mDayLabelsList.append( dayLabel );
786 mLayoutDayLabels->addWidget(dayLabel); 786 mLayoutDayLabels->addWidget(dayLabel);
787 } 787 }
788 //dayLabel->hide();//test only 788 //dayLabel->hide();//test only
789 789
790 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; 790 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ;
791 if ( offset < 0 ) offset = 0; 791 if ( offset < 0 ) offset = 0;
792 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); 792 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 );
793 dayLabel->setText("");//QString::number ( mSelectedDates.first().month() ) ); 793 dayLabel->setText("");//QString::number ( mSelectedDates.first().month() ) );
794 dayLabel->show(); 794 dayLabel->show();
795 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); 795 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset );
796 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); 796 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2);
797 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 797 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
798 if ( !appendLabels ) { 798 if ( !appendLabels ) {
799 dayLabel = mDayLabelsList.next(); 799 dayLabel = mDayLabelsList.next();
800 while ( dayLabel ) { 800 while ( dayLabel ) {
801 //qDebug("!dayLabel %d",dayLabel ); 801 //qDebug("!dayLabel %d",dayLabel );
802 dayLabel->hide(); 802 dayLabel->hide();
803 dayLabel = mDayLabelsList.next(); 803 dayLabel = mDayLabelsList.next();
804 } 804 }
805 } 805 }
806 //mDayLabelsFrame->show(); 806 //mDayLabelsFrame->show();
807 //mDayLabels->show(); 807 //mDayLabels->show();
808 //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight); 808 //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight);
809 //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight ); 809 //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight );
810 mDayLabelsFrame->setFixedHeight( newHight ); 810 mDayLabelsFrame->setFixedHeight( newHight );
811} 811}
812 812
813int KOAgendaView::maxDatesHint() 813int KOAgendaView::maxDatesHint()
814{ 814{
815 // Not sure about the max number of events, so return 0 for now. 815 // Not sure about the max number of events, so return 0 for now.
816 return 0; 816 return 0;
817} 817}
818 818
819int KOAgendaView::currentDateCount() 819int KOAgendaView::currentDateCount()
820{ 820{
821 return mSelectedDates.count(); 821 return mSelectedDates.count();
822} 822}
823 823
824QPtrList<Incidence> KOAgendaView::selectedIncidences() 824QPtrList<Incidence> KOAgendaView::selectedIncidences()
825{ 825{
826 QPtrList<Incidence> selected; 826 QPtrList<Incidence> selected;
827 Incidence *incidence; 827 Incidence *incidence;
828 828
829 incidence = mAgenda->selectedIncidence(); 829 incidence = mAgenda->selectedIncidence();
830 if (incidence) selected.append(incidence); 830 if (incidence) selected.append(incidence);
831 831
832 incidence = mAllDayAgenda->selectedIncidence(); 832 incidence = mAllDayAgenda->selectedIncidence();
833 if (incidence) selected.append(incidence); 833 if (incidence) selected.append(incidence);
834 834
835 return selected; 835 return selected;
836} 836}
837 837
838DateList KOAgendaView::selectedDates() 838DateList KOAgendaView::selectedDates()
839{ 839{
840 DateList selected; 840 DateList selected;
841 QDate qd; 841 QDate qd;
842 842
843 qd = mAgenda->selectedIncidenceDate(); 843 qd = mAgenda->selectedIncidenceDate();
844 if (qd.isValid()) selected.append(qd); 844 if (qd.isValid()) selected.append(qd);
845 845
846 qd = mAllDayAgenda->selectedIncidenceDate(); 846 qd = mAllDayAgenda->selectedIncidenceDate();
847 if (qd.isValid()) selected.append(qd); 847 if (qd.isValid()) selected.append(qd);
848 848
849 return selected; 849 return selected;
850} 850}
851 851
852 852
853void KOAgendaView::updateView() 853void KOAgendaView::updateView()
854{ 854{
855 if ( mBlockUpdating ) 855 if ( mBlockUpdating )
856 return; 856 return;
857 // kdDebug() << "KOAgendaView::updateView()" << endl; 857 // kdDebug() << "KOAgendaView::updateView()" << endl;
858 fillAgenda(); 858 fillAgenda();
859 859
860} 860}
861 861
862 862
863/* 863/*
864 Update configuration settings for the agenda view. This method is not 864 Update configuration settings for the agenda view. This method is not
865 complete. 865 complete.
866*/ 866*/
867void KOAgendaView::updateConfig() 867void KOAgendaView::updateConfig()
868{ 868{
869 if ( mBlockUpdating ) 869 if ( mBlockUpdating )
870 return; 870 return;
871 // kdDebug() << "KOAgendaView::updateConfig()" << endl; 871 // kdDebug() << "KOAgendaView::updateConfig()" << endl;
872 872
873 // update config for children 873 // update config for children
874 mTimeLabels->updateConfig(); 874 mTimeLabels->updateConfig();
875 mAgenda->storePosition(); 875 mAgenda->storePosition();
876 mAgenda->updateConfig(); 876 mAgenda->updateConfig();
877 mAllDayAgenda->updateConfig(); 877 mAllDayAgenda->updateConfig();
878 // widget synchronization 878 // widget synchronization
879 //TODO: find a better way, maybe signal/slot 879 //TODO: find a better way, maybe signal/slot
880 mTimeLabels->positionChanged(); 880 mTimeLabels->positionChanged();
881 881
882 // for some reason, this needs to be called explicitly 882 // for some reason, this needs to be called explicitly
883 mTimeLabels->repaint(); 883 mTimeLabels->repaint();
884 884
885 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 885 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
886 886
887 // ToolTips displaying summary of events 887 // ToolTips displaying summary of events
888 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 888 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
889 ->mEnableToolTips); 889 ->mEnableToolTips);
890 890
891 //setHolidayMasks(); 891 //setHolidayMasks();
892 892
893 //createDayLabels(); called by via updateView(); 893 //createDayLabels(); called by via updateView();
894 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 894 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
895 updateView(); 895 updateView();
896 mAgenda->restorePosition(); 896 mAgenda->restorePosition();
897} 897}
898 898
899 899
900void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 900void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
901{ 901{
902 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; 902 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl;
903 //qDebug("KOAgendaView::updateEventDates "); 903 //qDebug("KOAgendaView::updateEventDates ");
904 QDateTime startDt,endDt; 904 QDateTime startDt,endDt;
905 QDate startDate; 905 QDate startDate;
906 int lenInSecs; 906 int lenInSecs;
907 // if ( type == KOAgenda::RESIZETOP ) 907 // if ( type == KOAgenda::RESIZETOP )
908 // qDebug("RESIZETOP "); 908 // qDebug("RESIZETOP ");
909 // if ( type == KOAgenda::RESIZEBOTTOM ) 909 // if ( type == KOAgenda::RESIZEBOTTOM )
910 // qDebug("RESIZEBOTTOM "); 910 // qDebug("RESIZEBOTTOM ");
911 // if ( type == KOAgenda::MOVE ) 911 // if ( type == KOAgenda::MOVE )
912 // qDebug("MOVE "); 912 // qDebug("MOVE ");
913 if ( item->incidence()->type() == "Event" ) { 913 if ( item->incidence()->type() == "Event" ) {
914 startDt =item->incidence()->dtStart(); 914 startDt =item->incidence()->dtStart();
915 endDt = item->incidence()->dtEnd(); 915 endDt = item->incidence()->dtEnd();
916 lenInSecs = startDt.secsTo( endDt ); 916 lenInSecs = startDt.secsTo( endDt );
917 } 917 }
918 918
919 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 919 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
920 920
921 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { 921 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) {
922 startDate = mSelectedDates[item->mLastMoveXPos]; 922 startDate = mSelectedDates[item->mLastMoveXPos];
923 } else { 923 } else {
924 if (item->cellX() < 0) { 924 if (item->cellX() < 0) {
925 startDate = (mSelectedDates.first()).addDays(item->cellX()); 925 startDate = (mSelectedDates.first()).addDays(item->cellX());
926 } else { 926 } else {
927 startDate = mSelectedDates[item->cellX()]; 927 startDate = mSelectedDates[item->cellX()];
928 } 928 }
929 } 929 }
930 startDt.setDate(startDate); 930 startDt.setDate(startDate);
931 931
932 if (item->incidence()->doesFloat()) { 932 if (item->incidence()->doesFloat()) {
933 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 933 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
934 } else { 934 } else {
935 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 935 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
936 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 936 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
937 if ( item->incidence()->type() == "Event" ) { 937 if ( item->incidence()->type() == "Event" ) {
938 if ( type == KOAgenda::MOVE ) { 938 if ( type == KOAgenda::MOVE ) {
939 endDt = startDt.addSecs(lenInSecs); 939 endDt = startDt.addSecs(lenInSecs);
940 940
941 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 941 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
942 if (item->lastMultiItem()) { 942 if (item->lastMultiItem()) {
943 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 943 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
944 endDt.setDate(startDate. 944 endDt.setDate(startDate.
945 addDays(item->lastMultiItem()->cellX() - item->cellX())); 945 addDays(item->lastMultiItem()->cellX() - item->cellX()));
946 } else { 946 } else {
947 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 947 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
948 endDt.setDate(startDate); 948 endDt.setDate(startDate);
949 } 949 }
950 } 950 }
951 } else { 951 } else {
952 // todo 952 // todo
953 qDebug("tooooodoooooo ");
953 if (item->lastMultiItem()) { 954 if (item->lastMultiItem()) {
954 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 955 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
955 endDt.setDate(startDate. 956 endDt.setDate(startDate.
956 addDays(item->lastMultiItem()->cellX() - item->cellX())); 957 addDays(item->lastMultiItem()->cellX() - item->cellX()));
957 } else { 958 } else {
958 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 959 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
959 if ( item->cellYBottom() > 0 ) 960 if ( item->cellYBottom() > 0 )
960 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 961 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
961 else 962 else
962 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 963 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
963 endDt.setDate(startDate); 964 endDt.setDate(startDate);
964 } 965 }
965 } 966 }
966 } 967 }
967 968
968 969 qDebug("to888");
969 if ( item->incidence()->type() == "Event" ) { 970 if ( item->incidence()->type() == "Event" ) {
970 item->incidence()->setDtStart(startDt); 971 item->incidence()->setDtStart(startDt);
971 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 972 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
972 } else if ( item->incidence()->type() == "Todo" ) { 973 } else if ( item->incidence()->type() == "Todo" ) {
973 (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); 974 (static_cast<Todo*>(item->incidence()))->setDtDue(endDt);
974 } 975 }
975 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 976 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
976 item->incidence()->setRevision(item->incidence()->revision()+1); 977 item->incidence()->setRevision(item->incidence()->revision()+1);
977 item->setItemDate(startDt.date()); 978 item->setItemDate(startDt.date());
978 //item->updateItem(); 979 //item->updateItem();
979 if ( item->incidence()->type() == "Todo" ) { 980 if ( item->incidence()->type() == "Todo" ) {
980 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 981 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
981 982
982 } 983 }
983 else 984 else
984 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); 985 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED);
985 item->updateItem(); 986 item->updateItem();
986} 987}
987 988
988void KOAgendaView::showDates( const QDate &start, const QDate &end ) 989void KOAgendaView::showDates( const QDate &start, const QDate &end )
989{ 990{
990 // kdDebug() << "KOAgendaView::selectDates" << endl; 991 // kdDebug() << "KOAgendaView::selectDates" << endl;
991 992
992 mSelectedDates.clear(); 993 mSelectedDates.clear();
993 // qDebug("KOAgendaView::showDates "); 994 // qDebug("KOAgendaView::showDates ");
994 QDate d = start; 995 QDate d = start;
995 while (d <= end) { 996 while (d <= end) {
996 mSelectedDates.append(d); 997 mSelectedDates.append(d);
997 d = d.addDays( 1 ); 998 d = d.addDays( 1 );
998 } 999 }
999 1000
1000 // and update the view 1001 // and update the view
1001 fillAgenda(); 1002 fillAgenda();
1002} 1003}
1003 1004
1004 1005
1005void KOAgendaView::showEvents(QPtrList<Event>) 1006void KOAgendaView::showEvents(QPtrList<Event>)
1006{ 1007{
1007 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; 1008 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl;
1008} 1009}
1009 1010
1010void KOAgendaView::changeEventDisplay(Event *, int) 1011void KOAgendaView::changeEventDisplay(Event *, int)
1011{ 1012{
1012 // qDebug("KOAgendaView::changeEventDisplay "); 1013 // qDebug("KOAgendaView::changeEventDisplay ");
1013 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; 1014 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl;
1014 // this should be re-written to be MUCH smarter. Right now we 1015 // this should be re-written to be MUCH smarter. Right now we
1015 // are just playing dumb. 1016 // are just playing dumb.
1016 fillAgenda(); 1017 fillAgenda();
1017} 1018}
1018 1019
1019void KOAgendaView::fillAgenda(const QDate &) 1020void KOAgendaView::fillAgenda(const QDate &)
1020{ 1021{
1021 // qDebug("KOAgendaView::fillAgenda "); 1022 // qDebug("KOAgendaView::fillAgenda ");
1022 fillAgenda(); 1023 fillAgenda();
1023} 1024}
1024 1025
1025void KOAgendaView::fillAgenda() 1026void KOAgendaView::fillAgenda()
1026{ 1027{
1027 if ( globalFlagBlockStartup ) 1028 if ( globalFlagBlockStartup )
1028 return; 1029 return;
1029 if ( globalFlagBlockAgenda == 1 ) 1030 if ( globalFlagBlockAgenda == 1 )
1030 return; 1031 return;
1031 //if ( globalFlagBlockAgenda == 2 ) 1032 //if ( globalFlagBlockAgenda == 2 )
1032 //globalFlagBlockAgenda = 0; 1033 //globalFlagBlockAgenda = 0;
1033 // globalFlagBlockPainting = false; 1034 // globalFlagBlockPainting = false;
1034 if ( globalFlagBlockAgenda == 0 ) 1035 if ( globalFlagBlockAgenda == 0 )
1035 globalFlagBlockAgenda = 1; 1036 globalFlagBlockAgenda = 1;
1036 // clearView(); 1037 // clearView();
1037 //qDebug("fillAgenda()++++ "); 1038 //qDebug("fillAgenda()++++ ");
1038 globalFlagBlockAgendaItemPaint = 1; 1039 globalFlagBlockAgendaItemPaint = 1;
1039 mAllDayAgenda->changeColumns(mSelectedDates.count()); 1040 mAllDayAgenda->changeColumns(mSelectedDates.count());
1040 mAgenda->changeColumns(mSelectedDates.count()); 1041 mAgenda->changeColumns(mSelectedDates.count());
1041 qApp->processEvents(); 1042 qApp->processEvents();
1042 mEventIndicatorTop->changeColumns(mSelectedDates.count()); 1043 mEventIndicatorTop->changeColumns(mSelectedDates.count());
1043 mEventIndicatorBottom->changeColumns(mSelectedDates.count()); 1044 mEventIndicatorBottom->changeColumns(mSelectedDates.count());
1044 setHolidayMasks(); 1045 setHolidayMasks();
1045 1046
1046 //mAgenda->hideUnused(); 1047 //mAgenda->hideUnused();
1047 //mAllDayAgenda->hideUnused(); 1048 //mAllDayAgenda->hideUnused();
1048 1049
1049 // mAgenda->blockNextRepaint( false ); 1050 // mAgenda->blockNextRepaint( false );
1050 // mAgenda->viewport()->repaint(); 1051 // mAgenda->viewport()->repaint();
1051 // mAgenda->blockNextRepaint( true ); 1052 // mAgenda->blockNextRepaint( true );
1052 mMinY.resize(mSelectedDates.count()); 1053 mMinY.resize(mSelectedDates.count());
1053 mMaxY.resize(mSelectedDates.count()); 1054 mMaxY.resize(mSelectedDates.count());
1054 1055
1055 QPtrList<Event> dayEvents; 1056 QPtrList<Event> dayEvents;
1056 1057
1057 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1058 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1058 // Therefore, get all of them. 1059 // Therefore, gtodoset all of them.
1059 QPtrList<Todo> todos = calendar()->todos(); 1060 QPtrList<Todo> todos = calendar()->todos();
1060 1061
1061 mAgenda->setDateList(mSelectedDates); 1062 mAgenda->setDateList(mSelectedDates);
1062 1063
1063 QDate today = QDate::currentDate(); 1064 QDate today = QDate::currentDate();
1064 1065
1065 DateList::ConstIterator dit; 1066 DateList::ConstIterator dit;
1066 int curCol = 0; 1067 int curCol = 0;
1067 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 1068 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
1068 QDate currentDate = *dit; 1069 QDate currentDate = *dit;
1069 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() 1070 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString()
1070 // << endl; 1071 // << endl;
1071 1072
1072 dayEvents = calendar()->events(currentDate,true); 1073 dayEvents = calendar()->events(currentDate,true);
1073 1074
1074 // Default values, which can never be reached 1075 // Default values, which can never be reached
1075 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; 1076 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1;
1076 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; 1077 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1;
1077 1078
1078 unsigned int numEvent; 1079 unsigned int numEvent;
1079 for(numEvent=0;numEvent<dayEvents.count();++numEvent) { 1080 for(numEvent=0;numEvent<dayEvents.count();++numEvent) {
1080 Event *event = dayEvents.at(numEvent); 1081 Event *event = dayEvents.at(numEvent);
1081 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1082 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1082 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1083 if ( event->uid().left(15) == QString("last-syncEvent-") )
1083 continue; 1084 continue;
1084 // kdDebug() << " Event: " << event->summary() << endl; 1085 // kdDebug() << " Event: " << event->summary() << endl;
1085 1086
1086 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; 1087 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol;
1087 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; 1088 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol;
1088 1089
1089 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; 1090 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl;
1090 1091
1091 if (event->doesFloat()) { 1092 if (event->doesFloat()) {
1092 if (event->recurrence()->doesRecur()) { 1093 if (event->recurrence()->doesRecur()) {
1093 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); 1094 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
1094 } else { 1095 } else {
1095 if (beginX <= 0 && curCol == 0) { 1096 if (beginX <= 0 && curCol == 0) {
1096 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1097 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1097 } else if (beginX == curCol) { 1098 } else if (beginX == curCol) {
1098 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1099 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1099 } 1100 }
1100 } 1101 }
1101 } else if (event->isMultiDay()) { 1102 } else if (event->isMultiDay()) {
1102 if ( event->doesRecur () ) { 1103 if ( event->doesRecur () ) {
1103 QDate dateit = currentDate; 1104 QDate dateit = currentDate;
1104 int count = 0; 1105 int count = 0;
1105 int max = event->dtStart().daysTo( event->dtEnd() ) +2; 1106 int max = event->dtStart().daysTo( event->dtEnd() ) +2;
1106 while (! event->recursOn( dateit ) && count <= max ) { 1107 while (! event->recursOn( dateit ) && count <= max ) {
1107 ++count; 1108 ++count;
1108 dateit = dateit.addDays( -1 ); 1109 dateit = dateit.addDays( -1 );
1109 } 1110 }
1110 bool ok; 1111 bool ok;
1111 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); 1112 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok );
1112 if ( ok ) 1113 if ( ok )
1113 { 1114 {
1114 int secs = event->dtStart().secsTo( event->dtEnd() ); 1115 int secs = event->dtStart().secsTo( event->dtEnd() );
1115 QDateTime nextOcend =nextOcstart.addSecs( secs ); ; 1116 QDateTime nextOcend =nextOcstart.addSecs( secs ); ;
1116 beginX = currentDate.daysTo(nextOcstart.date()) + curCol; 1117 beginX = currentDate.daysTo(nextOcstart.date()) + curCol;
1117 endX = currentDate.daysTo(nextOcend.date()) + curCol; 1118 endX = currentDate.daysTo(nextOcend.date()) + curCol;
1118 1119
1119 } 1120 }
1120 } 1121 }
1121 int startY = mAgenda->timeToY(event->dtStart().time()); 1122 int startY = mAgenda->timeToY(event->dtStart().time());
1122 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1123 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1123 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); 1124 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol );
1124 if ((beginX <= 0 && curCol == 0) || beginX == curCol) { 1125 if ((beginX <= 0 && curCol == 0) || beginX == curCol) {
1125 //qDebug("insert!!! "); 1126 //qDebug("insert!!! ");
1126 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); 1127 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY);
1127 } 1128 }
1128 if (beginX == curCol) { 1129 if (beginX == curCol) {
1129 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1130 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1130 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1131 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1131 } else if (endX == curCol) { 1132 } else if (endX == curCol) {
1132 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1133 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1133 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1134 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1134 } else { 1135 } else {
1135 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1136 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1136 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1137 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1137 } 1138 }
1138 } else { 1139 } else {
1139 int startY = mAgenda->timeToY(event->dtStart().time()); 1140 int startY = mAgenda->timeToY(event->dtStart().time());
1140 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1141 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1141 if (endY < startY) endY = startY; 1142 if (endY < startY) endY = startY;
1142 mAgenda->insertItem(event,currentDate,curCol,startY,endY); 1143 mAgenda->insertItem(event,currentDate,curCol,startY,endY);
1143 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1144 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1144 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1145 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1145 } 1146 }
1146 } 1147 }
1147 // ---------- [display Todos -------------- 1148 // ---------- [display Todos --------------
1148 unsigned int numTodo; 1149 unsigned int numTodo;
1149 for (numTodo = 0; numTodo < todos.count(); ++numTodo) { 1150 for (numTodo = 0; numTodo < todos.count(); ++numTodo) {
1150 Todo *todo = todos.at(numTodo); 1151 Todo *todo = todos.at(numTodo);
1151 1152
1152 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date 1153 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date
1153 1154
1154 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1155 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1155 // Already completed items can be displayed on their original due date 1156 // Already completed items can be displayed on their original due date
1156 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda 1157 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda
1157 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; 1158 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda;
1158 1159 bool fillIn = false;
1159 if ( ((todo->dtDue().date() == currentDate) && !overdue) || ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| 1160 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate )
1160 ((currentDate == today) && overdue) ) { 1161 fillIn = true;
1162 if ( ! fillIn && !todo->hasCompletedDate() )
1163 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue);
1164 qDebug("refill todo ");
1165 if ( fillIn ) {
1161 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue 1166 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue
1162 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1167 if ( KOPrefs::instance()->mShowTodoInAgenda )
1163 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); 1168 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol);
1164 } 1169 }
1165 else { 1170 else {
1166 QDateTime dt; 1171 QDateTime dt;
1167 if ( todo->hasCompletedDate() ) 1172 if ( todo->hasCompletedDate() )
1168 dt = todo->completed(); 1173 dt = todo->completed();
1169 else 1174 else
1170 dt = todo->dtDue();; 1175 dt = todo->dtDue();;
1171 1176
1172 1177
1173 int endY = mAgenda->timeToY(dt.time()) - 1; 1178 int endY = mAgenda->timeToY(dt.time()) - 1;
1174 int hi = (18/KOPrefs::instance()->mHourSize); 1179 int hi = (18/KOPrefs::instance()->mHourSize);
1175 //qDebug("hei %d ",KOPrefs::instance()->mHourSize); 1180 //qDebug("hei %d ",KOPrefs::instance()->mHourSize);
1176 int startY = endY -hi; 1181 int startY = endY -hi;
1177 1182
1178 mAgenda->insertItem(todo,currentDate,curCol,startY,endY); 1183 mAgenda->insertItem(todo,currentDate,curCol,startY,endY);
1179 1184
1180 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1185 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1181 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1186 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1182 } 1187 }
1183 } 1188 }
1184 } 1189 }
1185 // ---------- display Todos] -------------- 1190 // ---------- display Todos] --------------
1186 1191
1187 ++curCol; 1192 ++curCol;
1188 } 1193 }
1189 mAgenda->hideUnused(); 1194 mAgenda->hideUnused();
1190 mAllDayAgenda->hideUnused(); 1195 mAllDayAgenda->hideUnused();
1191 mAgenda->checkScrollBoundaries(); 1196 mAgenda->checkScrollBoundaries();
1192 1197
1193 deleteSelectedDateTime(); 1198 deleteSelectedDateTime();
1194 1199
1195 createDayLabels(); 1200 createDayLabels();
1196 emit incidenceSelected( 0 ); 1201 emit incidenceSelected( 0 );
1197 1202
1198 if ( globalFlagBlockAgenda == 2 ) { 1203 if ( globalFlagBlockAgenda == 2 ) {
1199 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 1204 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
1200 setStartHour( KOPrefs::instance()->mDayBegins ); 1205 setStartHour( KOPrefs::instance()->mDayBegins );
1201 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1206 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
1202 setStartHour( QTime::currentTime ().hour() ); 1207 setStartHour( QTime::currentTime ().hour() );
1203 // qApp->processEvents(); 1208 // qApp->processEvents();
1204 } 1209 }
1205 qApp->processEvents(); 1210 qApp->processEvents();
1206 //qDebug("qApp->processEvents(); END "); 1211 //qDebug("qApp->processEvents(); END ");
1207 globalFlagBlockAgenda = 0; 1212 globalFlagBlockAgenda = 0;
1208 1213
1209 // mAgenda->hideUnused(); 1214 // mAgenda->hideUnused();
1210 //mAllDayAgenda->hideUnused(); 1215 //mAllDayAgenda->hideUnused();
1211 mAllDayAgenda->drawContentsToPainter(); 1216 mAllDayAgenda->drawContentsToPainter();
1212 mAgenda->drawContentsToPainter(); 1217 mAgenda->drawContentsToPainter();
1213 repaintAgenda(); 1218 repaintAgenda();
1214 // mAgenda->finishUpdate(); 1219 // mAgenda->finishUpdate();
1215 //mAllDayAgenda->finishUpdate(); 1220 //mAllDayAgenda->finishUpdate();
1216 1221
1217 // repaintAgenda(); 1222 // repaintAgenda();
1218 //qApp->processEvents(); 1223 //qApp->processEvents();
1219 // globalFlagBlockAgenda = 0; 1224 // globalFlagBlockAgenda = 0;
1220} 1225}
1221void KOAgendaView::repaintAgenda() 1226void KOAgendaView::repaintAgenda()
1222{ 1227{
1223 // mAllDayAgenda->drawContentsToPainter(); 1228 // mAllDayAgenda->drawContentsToPainter();
1224// mAllDayAgenda->viewport()->repaint( false ); 1229// mAllDayAgenda->viewport()->repaint( false );
1225// mAgenda->drawContentsToPainter(); 1230// mAgenda->drawContentsToPainter();
1226// mAgenda->viewport()->repaint( false ); 1231// mAgenda->viewport()->repaint( false );
1227// qApp->processEvents(); 1232// qApp->processEvents();
1228 1233
1229 //qDebug("KOAgendaView::repaintAgenda() "); 1234 //qDebug("KOAgendaView::repaintAgenda() ");
1230 //qApp->processEvents(); 1235 //qApp->processEvents();
1231 mAgenda->viewport()->repaint( false ); 1236 mAgenda->viewport()->repaint( false );
1232 mAllDayAgenda->viewport()->repaint( false ); 1237 mAllDayAgenda->viewport()->repaint( false );
1233 mAgenda->finishUpdate(); 1238 mAgenda->finishUpdate();
1234 mAllDayAgenda->finishUpdate(); 1239 mAllDayAgenda->finishUpdate();
1235} 1240}
1236 1241
1237 1242
1238void KOAgendaView::clearView() 1243void KOAgendaView::clearView()
1239{ 1244{
1240 // kdDebug() << "ClearView" << endl; 1245 // kdDebug() << "ClearView" << endl;
1241 mAllDayAgenda->clear(); 1246 mAllDayAgenda->clear();
1242 mAgenda->clear(); 1247 mAgenda->clear();
1243} 1248}
1244 1249
1245void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1250void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1246 const QDate &td) 1251 const QDate &td)
1247{ 1252{
1248#ifndef KORG_NOPRINTER 1253#ifndef KORG_NOPRINTER
1249 if (fd == td) 1254 if (fd == td)
1250 calPrinter->preview(CalPrinter::Day, fd, td); 1255 calPrinter->preview(CalPrinter::Day, fd, td);
1251 else 1256 else
1252 calPrinter->preview(CalPrinter::Week, fd, td); 1257 calPrinter->preview(CalPrinter::Week, fd, td);
1253#endif 1258#endif
1254} 1259}
1255 1260
1256// void KOAgendaView::updateMovedTodo() 1261// void KOAgendaView::updateMovedTodo()
1257// { 1262// {
1258// // updateConfig(); 1263// // updateConfig();
1259// // emit updateTodoViews(); 1264// // emit updateTodoViews();
1260// } 1265// }
1261 1266
1262void KOAgendaView::newEvent(int gx, int gy) 1267void KOAgendaView::newEvent(int gx, int gy)
1263{ 1268{
1264 if (!mSelectedDates.count()) return; 1269 if (!mSelectedDates.count()) return;
1265 1270
1266 QDate day = mSelectedDates[gx]; 1271 QDate day = mSelectedDates[gx];
1267 1272
1268 QTime time = mAgenda->gyToTime(gy); 1273 QTime time = mAgenda->gyToTime(gy);
1269 QDateTime dt(day,time); 1274 QDateTime dt(day,time);
1270 // if ( dt < QDateTime::currentDateTime () ) 1275 // if ( dt < QDateTime::currentDateTime () )
1271 // dt = QDateTime::currentDateTime ().addSecs( 3600 ); 1276 // dt = QDateTime::currentDateTime ().addSecs( 3600 );
1272 emit newEventSignal(dt); 1277 emit newEventSignal(dt);
1273} 1278}
1274 1279
1275void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd) 1280void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd)
1276{ 1281{
1277 if (!mSelectedDates.count()) return; 1282 if (!mSelectedDates.count()) return;
1278 1283
1279 QDate dayStart = mSelectedDates[gxStart]; 1284 QDate dayStart = mSelectedDates[gxStart];
1280 QDate dayEnd = mSelectedDates[gxEnd]; 1285 QDate dayEnd = mSelectedDates[gxEnd];
1281 1286
1282 QTime timeStart = mAgenda->gyToTime(gyStart); 1287 QTime timeStart = mAgenda->gyToTime(gyStart);
1283 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1288 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1284 1289
1285 QDateTime dtStart(dayStart,timeStart); 1290 QDateTime dtStart(dayStart,timeStart);
1286 QDateTime dtEnd(dayEnd,timeEnd); 1291 QDateTime dtEnd(dayEnd,timeEnd);
1287 1292
1288 emit newEventSignal(dtStart,dtEnd); 1293 emit newEventSignal(dtStart,dtEnd);
1289} 1294}
1290 1295
1291void KOAgendaView::newEventAllDay(int gx, int ) 1296void KOAgendaView::newEventAllDay(int gx, int )
1292{ 1297{
1293 if (!mSelectedDates.count()) return; 1298 if (!mSelectedDates.count()) return;
1294 1299
1295 QDate day = mSelectedDates[gx]; 1300 QDate day = mSelectedDates[gx];
1296 1301
1297 emit newEventSignal(day); 1302 emit newEventSignal(day);
1298} 1303}
1299void KOAgendaView::newTodoAllDay(int gx, int ) 1304void KOAgendaView::newTodoAllDay(int gx, int )
1300{ 1305{
1301 if (!mSelectedDates.count()) return; 1306 if (!mSelectedDates.count()) return;
1302 1307
1303 QDateTime day (mSelectedDates[gx] ); 1308 QDateTime day (mSelectedDates[gx] );
1304 emit newTodoSignal(day, true); 1309 emit newTodoSignal(day, true);
1305} 1310}
1306void KOAgendaView::newTodo(int gx, int gy ) 1311void KOAgendaView::newTodo(int gx, int gy )
1307{ 1312{
1308 if (!mSelectedDates.count()) return; 1313 if (!mSelectedDates.count()) return;
1309 QDate dayStart = mSelectedDates[gx]; 1314 QDate dayStart = mSelectedDates[gx];
1310 QTime timeStart = mAgenda->gyToTime(gy); 1315 QTime timeStart = mAgenda->gyToTime(gy);
1311 QDateTime dt (dayStart,timeStart); 1316 QDateTime dt (dayStart,timeStart);
1312 emit newTodoSignal( dt, false ); 1317 emit newTodoSignal( dt, false );
1313} 1318}
1314 1319
1315void KOAgendaView::updateEventIndicatorTop(int newY) 1320void KOAgendaView::updateEventIndicatorTop(int newY)
1316{ 1321{
1317 uint i; 1322 uint i;
1318 for(i=0;i<mMinY.size();++i) { 1323 for(i=0;i<mMinY.size();++i) {
1319 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true); 1324 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true);
1320 else mEventIndicatorTop->enableColumn(i,false); 1325 else mEventIndicatorTop->enableColumn(i,false);
1321 } 1326 }
1322 1327
1323 mEventIndicatorTop->update(); 1328 mEventIndicatorTop->update();
1324} 1329}
1325 1330
1326void KOAgendaView::updateEventIndicatorBottom(int newY) 1331void KOAgendaView::updateEventIndicatorBottom(int newY)
1327{ 1332{
1328 uint i; 1333 uint i;
1329 for(i=0;i<mMaxY.size();++i) { 1334 for(i=0;i<mMaxY.size();++i) {
1330 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true); 1335 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true);
1331 else mEventIndicatorBottom->enableColumn(i,false); 1336 else mEventIndicatorBottom->enableColumn(i,false);
1332 } 1337 }
1333 1338
1334 mEventIndicatorBottom->update(); 1339 mEventIndicatorBottom->update();
1335} 1340}
1336 1341
1337void KOAgendaView::startDrag(Event *event) 1342void KOAgendaView::startDrag(Event *event)
1338{ 1343{
1339#ifndef KORG_NODND 1344#ifndef KORG_NODND
1340 DndFactory factory( calendar() ); 1345 DndFactory factory( calendar() );
1341 ICalDrag *vd = factory.createDrag(event,this); 1346 ICalDrag *vd = factory.createDrag(event,this);
1342 if (vd->drag()) { 1347 if (vd->drag()) {
1343 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl; 1348 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl;
1344 } 1349 }
1345#endif 1350#endif
1346} 1351}
1347 1352
1348void KOAgendaView::readSettings() 1353void KOAgendaView::readSettings()
1349{ 1354{
1350 readSettings(KOGlobals::config()); 1355 readSettings(KOGlobals::config());
1351} 1356}
1352 1357
1353void KOAgendaView::readSettings(KConfig *config) 1358void KOAgendaView::readSettings(KConfig *config)
1354{ 1359{
1355 // kdDebug() << "KOAgendaView::readSettings()" << endl; 1360 // kdDebug() << "KOAgendaView::readSettings()" << endl;
1356 1361
1357 config->setGroup("Views"); 1362 config->setGroup("Views");
1358 1363
1359 //#ifndef KORG_NOSPLITTER 1364 //#ifndef KORG_NOSPLITTER
1360 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView"); 1365 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView");
1361 if (sizes.count() == 2) { 1366 if (sizes.count() == 2) {
1362 if ( sizes[0] < 20 ) { 1367 if ( sizes[0] < 20 ) {
1363 sizes[1] = sizes[1] +20 - sizes[0]; 1368 sizes[1] = sizes[1] +20 - sizes[0];
1364 sizes[0] = 20; 1369 sizes[0] = 20;
1365 } 1370 }
1366 mSplitterAgenda->setSizes(sizes); 1371 mSplitterAgenda->setSizes(sizes);
1367 // qDebug("read %d %d ",sizes[0],sizes[1] ); 1372 // qDebug("read %d %d ",sizes[0],sizes[1] );
1368 } 1373 }
1369 //#endif 1374 //#endif
1370 1375
1371 // updateConfig(); 1376 // updateConfig();
1372} 1377}
1373 1378
1374void KOAgendaView::writeSettings(KConfig *config) 1379void KOAgendaView::writeSettings(KConfig *config)
1375{ 1380{
1376 // kdDebug() << "KOAgendaView::writeSettings()" << endl; 1381 // kdDebug() << "KOAgendaView::writeSettings()" << endl;
1377 1382
1378 config->setGroup("Views"); 1383 config->setGroup("Views");
1379 1384
1380 //#ifndef KORG_NOSPLITTER 1385 //#ifndef KORG_NOSPLITTER
1381 QValueList<int> list = mSplitterAgenda->sizes(); 1386 QValueList<int> list = mSplitterAgenda->sizes();
1382 config->writeEntry("Separator AgendaView",list); 1387 config->writeEntry("Separator AgendaView",list);
1383 //qDebug("write %d %d ", list[0],list[1] ); 1388 //qDebug("write %d %d ", list[0],list[1] );
1384 //#endif 1389 //#endif
1385} 1390}
1386 1391
1387void KOAgendaView::setHolidayMasks() 1392void KOAgendaView::setHolidayMasks()
1388{ 1393{
1389 mHolidayMask.resize(mSelectedDates.count()); 1394 mHolidayMask.resize(mSelectedDates.count());
1390 1395
1391 uint i; 1396 uint i;
1392 for(i=0;i<mSelectedDates.count();++i) { 1397 for(i=0;i<mSelectedDates.count();++i) {
1393 QDate date = mSelectedDates[i]; 1398 QDate date = mSelectedDates[i];
1394 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6); 1399 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6);
1395 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7); 1400 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7);
1396 bool showHoliday = false; 1401 bool showHoliday = false;
1397 if ( KOPrefs::instance()->mExcludeHolidays ) { 1402 if ( KOPrefs::instance()->mExcludeHolidays ) {
1398 QPtrList<Event> events = calendar()->events( date, true ); 1403 QPtrList<Event> events = calendar()->events( date, true );
1399 Event *event; 1404 Event *event;
1400 for( event = events.first(); event; event = events.next() ) { 1405 for( event = events.first(); event; event = events.next() ) {
1401 if ( event->categories().contains("Holiday") || 1406 if ( event->categories().contains("Holiday") ||
1402 event->categories().contains(i18n("Holiday"))) { 1407 event->categories().contains(i18n("Holiday"))) {
1403 showHoliday = true; 1408 showHoliday = true;
1404 break; 1409 break;
1405 } 1410 }
1406 } 1411 }
1407 1412
1408 } 1413 }
1409 1414
1410#ifndef KORG_NOPLUGINS 1415#ifndef KORG_NOPLUGINS
1411 bool showHoliday = KOPrefs::instance()->mExcludeHolidays && 1416 bool showHoliday = KOPrefs::instance()->mExcludeHolidays &&
1412 !KOCore::self()->holiday(date).isEmpty(); 1417 !KOCore::self()->holiday(date).isEmpty();
1413#endif 1418#endif
1414 bool showDay = showSaturday || showSunday || showHoliday; 1419 bool showDay = showSaturday || showSunday || showHoliday;
1415 1420
1416 if (showDay) { 1421 if (showDay) {
1417 mHolidayMask.at(i) = true; 1422 mHolidayMask.at(i) = true;
1418 } else { 1423 } else {
1419 mHolidayMask.at(i) = false; 1424 mHolidayMask.at(i) = false;
1420 } 1425 }
1421 } 1426 }
1422 1427
1423 mAgenda->setHolidayMask(&mHolidayMask); 1428 mAgenda->setHolidayMask(&mHolidayMask);
1424 mAllDayAgenda->setHolidayMask(&mHolidayMask); 1429 mAllDayAgenda->setHolidayMask(&mHolidayMask);
1425} 1430}
1426 1431
1427void KOAgendaView::setContentsPos(int y) 1432void KOAgendaView::setContentsPos(int y)
1428{ 1433{
1429 mAgenda->setContentsPos(0,y); 1434 mAgenda->setContentsPos(0,y);
1430} 1435}
1431 1436
1432void KOAgendaView::setExpandedButton( bool expanded ) 1437void KOAgendaView::setExpandedButton( bool expanded )
1433{ 1438{
1434 if ( expanded ) { 1439 if ( expanded ) {
1435 mExpandButton->setPixmap( mExpandedPixmap ); 1440 mExpandButton->setPixmap( mExpandedPixmap );
1436 } else { 1441 } else {
1437 mExpandButton->setPixmap( mNotExpandedPixmap ); 1442 mExpandButton->setPixmap( mNotExpandedPixmap );
1438 } 1443 }
1439} 1444}
1440 1445
1441void KOAgendaView::clearSelection() 1446void KOAgendaView::clearSelection()
1442{ 1447{
1443 mAgenda->deselectItem(); 1448 mAgenda->deselectItem();
1444 mAllDayAgenda->deselectItem(); 1449 mAllDayAgenda->deselectItem();
1445} 1450}
1446 1451
1447void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart, 1452void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart,
1448 int gxEnd, int gyEnd) 1453 int gxEnd, int gyEnd)
1449{ 1454{
1450 mTimeSpanInAllDay = true; 1455 mTimeSpanInAllDay = true;
1451 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd); 1456 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd);
1452} 1457}
1453 1458
1454 1459
1455 1460
1456 1461
1457void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, 1462void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart,
1458 int gxEnd, int gyEnd) 1463 int gxEnd, int gyEnd)
1459{ 1464{
1460 if (!mSelectedDates.count()) return; 1465 if (!mSelectedDates.count()) return;
1461 1466
1462 QDate dayStart = mSelectedDates[gxStart]; 1467 QDate dayStart = mSelectedDates[gxStart];
1463 QDate dayEnd = mSelectedDates[gxEnd]; 1468 QDate dayEnd = mSelectedDates[gxEnd];
1464 1469
1465 QTime timeStart = mAgenda->gyToTime(gyStart); 1470 QTime timeStart = mAgenda->gyToTime(gyStart);
1466 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1471 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1467 1472
1468 QDateTime dtStart(dayStart,timeStart); 1473 QDateTime dtStart(dayStart,timeStart);
1469 QDateTime dtEnd(dayEnd,timeEnd); 1474 QDateTime dtEnd(dayEnd,timeEnd);
1470 1475
1471 mTimeSpanBegin = dtStart; 1476 mTimeSpanBegin = dtStart;
1472 mTimeSpanEnd = dtEnd; 1477 mTimeSpanEnd = dtEnd;
1473 1478
1474} 1479}
1475 1480
1476void KOAgendaView::deleteSelectedDateTime() 1481void KOAgendaView::deleteSelectedDateTime()
1477{ 1482{
1478 mTimeSpanBegin.setDate(QDate()); 1483 mTimeSpanBegin.setDate(QDate());
1479 mTimeSpanEnd.setDate(QDate()); 1484 mTimeSpanEnd.setDate(QDate());
1480 mTimeSpanInAllDay = false; 1485 mTimeSpanInAllDay = false;
1481} 1486}
1482 1487
1483void KOAgendaView::keyPressEvent ( QKeyEvent * e ) 1488void KOAgendaView::keyPressEvent ( QKeyEvent * e )
1484{ 1489{
1485 e->ignore(); 1490 e->ignore();
1486} 1491}
1487 1492
1488void KOAgendaView::scrollOneHourUp() 1493void KOAgendaView::scrollOneHourUp()
1489{ 1494{
1490 1495
1491 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); 1496 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 );
1492} 1497}
1493void KOAgendaView::scrollOneHourDown() 1498void KOAgendaView::scrollOneHourDown()
1494{ 1499{
1495 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); 1500 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 );
1496} 1501}
1497 1502
1498void KOAgendaView::setStartHour( int h ) 1503void KOAgendaView::setStartHour( int h )
1499{ 1504{
1500 mAgenda->setStartHour( h ); 1505 mAgenda->setStartHour( h );
1501 1506
1502} 1507}
1503 1508
1504void KOAgendaView::updateTodo( Todo * t, int ) 1509void KOAgendaView::updateTodo( Todo * t, int )
1505{ 1510{
1506 1511
1507 bool remove = false; 1512 bool remove = false;
1508 bool removeAD = false; 1513 bool removeAD = false;
1509 if ( ! t->hasDueDate() ) { 1514 QDate da;
1515 if ( t->hasCompletedDate() )
1516 da = t->completed().date();
1517 else
1518 da = t->dtDue().date();
1519 if ( ! t->hasDueDate() && !t->hasCompletedDate() ) {
1510 remove = true; 1520 remove = true;
1511 removeAD = true; 1521 removeAD = true;
1512 } 1522 }
1513 else { 1523 else {
1514 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; 1524 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ;
1515 if ( overdue && 1525 if ( overdue &&
1516 QDate::currentDate() >= mSelectedDates.first() && 1526 QDate::currentDate() >= mSelectedDates.first() &&
1517 QDate::currentDate() <= mSelectedDates.last()) { 1527 QDate::currentDate() <= mSelectedDates.last()) {
1518 removeAD = false; 1528 removeAD = false;
1519 remove = true; 1529 remove = true;
1520 } 1530 }
1521 else { 1531 else {
1522 if ( t->dtDue().date() < mSelectedDates.first() || 1532
1523 t->dtDue().date() > mSelectedDates.last() ) { 1533 if ( da < mSelectedDates.first() ||
1534 da > mSelectedDates.last() ) {
1524 remove = true; 1535 remove = true;
1525 removeAD = true; 1536 removeAD = true;
1526 } else { 1537 } else {
1527 remove = t->doesFloat(); 1538 remove = t->doesFloat() && !t->hasCompletedDate();
1528 removeAD = !remove; 1539 removeAD = !remove;
1529 } 1540 }
1530 } 1541 }
1531 } 1542 }
1532 int days = mSelectedDates.first().daysTo( t->dtDue().date() ); 1543 int days = mSelectedDates.first().daysTo( da );
1533 // qDebug("daysto %d ", days ); 1544 // qDebug("daysto %d ", days );
1534 mAgenda->updateTodo( t , days, remove); 1545 mAgenda->updateTodo( t , days, remove);
1535 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1546 if ( KOPrefs::instance()->mShowTodoInAgenda )
1536 mAllDayAgenda->updateTodo( t , days, removeAD); 1547 mAllDayAgenda->updateTodo( t , days, removeAD);
1537 //qDebug("KOAgendaView::updateTodo( Todo *, int ) "); 1548 //qDebug("KOAgendaView::updateTodo( Todo *, int ) ");
1538 1549
1539} 1550}
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 36a2947..7dc1880 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -94,511 +94,513 @@ void KOEventViewer::setSource(const QString& n)
94 dia.resize( 220, 240); 94 dia.resize( 220, 240);
95 else { 95 else {
96 dia.resize( 400,400); 96 dia.resize( 400,400);
97 } 97 }
98 dia.exec(); 98 dia.exec();
99 break; 99 break;
100 } 100 }
101 } 101 }
102 return; 102 return;
103 } 103 }
104#else 104#else
105 { 105 {
106 if ( "uid:organizer" == n ) { 106 if ( "uid:organizer" == n ) {
107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
108 return; 108 return;
109 } 109 }
110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
111 if (attendees.count()) { 111 if (attendees.count()) {
112 Attendee *a; 112 Attendee *a;
113 for(a=attendees.first();a;a=attendees.next()) { 113 for(a=attendees.first();a;a=attendees.next()) {
114 if ( "uid:"+a->uid() == n ) { 114 if ( "uid:"+a->uid() == n ) {
115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
116 return; 116 return;
117 } 117 }
118 } 118 }
119 } 119 }
120 return; 120 return;
121 } 121 }
122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
123 // the result should now arrive through method insertAttendees 123 // the result should now arrive through method insertAttendees
124 //QString uid = "uid:"+(*it).uid(); 124 //QString uid = "uid:"+(*it).uid();
125#endif 125#endif
126 if ( n.left(6) == "mailto" ) { 126 if ( n.left(6) == "mailto" ) {
127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
128#ifndef DESKTOP_VERSION 128#ifndef DESKTOP_VERSION
129 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 129 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
130 e << n.mid(7); 130 e << n.mid(7);
131#endif 131#endif
132 132
133 } 133 }
134 134
135 135
136#ifndef KORG_NODCOP 136#ifndef KORG_NODCOP
137 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 137 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
138 QString tmpStr; 138 QString tmpStr;
139 if (n.startsWith("mailto:")) { 139 if (n.startsWith("mailto:")) {
140 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 140 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
141 //emit showIncidence(n); 141 //emit showIncidence(n);
142 return; 142 return;
143 } else if (n.startsWith("uid:")) { 143 } else if (n.startsWith("uid:")) {
144 DCOPClient *client = KApplication::kApplication()->dcopClient(); 144 DCOPClient *client = KApplication::kApplication()->dcopClient();
145 const QByteArray noParamData; 145 const QByteArray noParamData;
146 const QByteArray paramData; 146 const QByteArray paramData;
147 QByteArray replyData; 147 QByteArray replyData;
148 QCString replyTypeStr; 148 QCString replyTypeStr;
149#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 149#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
150 bool foundAbbrowser = PING_ABBROWSER; 150 bool foundAbbrowser = PING_ABBROWSER;
151 151
152 if (foundAbbrowser) { 152 if (foundAbbrowser) {
153 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 153 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
154 //client->send("kaddressbook","KAddressBookIface", 154 //client->send("kaddressbook","KAddressBookIface",
155 QDataStream arg(paramData, IO_WriteOnly); 155 QDataStream arg(paramData, IO_WriteOnly);
156 arg << n.mid(6); 156 arg << n.mid(6);
157 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 157 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
158 return; 158 return;
159 } else { 159 } else {
160 /* 160 /*
161 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 161 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
162 We start it without its main interface 162 We start it without its main interface
163 */ 163 */
164 KIconLoader* iconLoader = new KIconLoader(); 164 KIconLoader* iconLoader = new KIconLoader();
165 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 165 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
166 ActionManager::setStartedKAddressBook(true); 166 ActionManager::setStartedKAddressBook(true);
167 tmpStr = "kaddressbook --editor-only --uid "; 167 tmpStr = "kaddressbook --editor-only --uid ";
168 tmpStr += KProcess::quote(n.mid(6)); 168 tmpStr += KProcess::quote(n.mid(6));
169 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 169 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
170 return; 170 return;
171 } 171 }
172 } else { 172 } else {
173 //QTextBrowser::setSource(n); 173 //QTextBrowser::setSource(n);
174 } 174 }
175#endif 175#endif
176} 176}
177 177
178void KOEventViewer::addTag(const QString & tag,const QString & text) 178void KOEventViewer::addTag(const QString & tag,const QString & text)
179{ 179{
180 int number=text.contains("\n"); 180 int number=text.contains("\n");
181 QString str = "<" + tag + ">"; 181 QString str = "<" + tag + ">";
182 QString tmpText=text; 182 QString tmpText=text;
183 QString tmpStr=str; 183 QString tmpStr=str;
184 if(number !=-1) 184 if(number !=-1)
185 { 185 {
186 if (number > 0) { 186 if (number > 0) {
187 int pos=0; 187 int pos=0;
188 QString tmp; 188 QString tmp;
189 for(int i=0;i<=number;i++) { 189 for(int i=0;i<=number;i++) {
190 pos=tmpText.find("\n"); 190 pos=tmpText.find("\n");
191 tmp=tmpText.left(pos); 191 tmp=tmpText.left(pos);
192 tmpText=tmpText.right(tmpText.length()-pos-1); 192 tmpText=tmpText.right(tmpText.length()-pos-1);
193 tmpStr+=tmp+"<br>"; 193 tmpStr+=tmp+"<br>";
194 } 194 }
195 } 195 }
196 else tmpStr += tmpText; 196 else tmpStr += tmpText;
197 tmpStr+="</" + tag + ">"; 197 tmpStr+="</" + tag + ">";
198 mText.append(tmpStr); 198 mText.append(tmpStr);
199 } 199 }
200 else 200 else
201 { 201 {
202 str += text + "</" + tag + ">"; 202 str += text + "</" + tag + ">";
203 mText.append(str); 203 mText.append(str);
204 } 204 }
205} 205}
206 206
207void KOEventViewer::setColorMode( int m ) 207void KOEventViewer::setColorMode( int m )
208{ 208{
209 mColorMode = m; 209 mColorMode = m;
210} 210}
211void KOEventViewer::appendEvent(Event *event, int mode ) 211void KOEventViewer::appendEvent(Event *event, int mode )
212{ 212{
213 mMailSubject = ""; 213 mMailSubject = "";
214 mCurrentIncidence = event; 214 mCurrentIncidence = event;
215 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 215 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
216 topLevelWidget()->setCaption(i18n("Event Viewer")); 216 topLevelWidget()->setCaption(i18n("Event Viewer"));
217 if ( mode == 0 ) { 217 if ( mode == 0 ) {
218 addTag("h2",event->summary()); 218 addTag("h2",event->summary());
219 } 219 }
220 else { 220 else {
221 if ( mColorMode == 1 ) { 221 if ( mColorMode == 1 ) {
222 mText +="<font color=\"#00A000\">"; 222 mText +="<font color=\"#00A000\">";
223 } 223 }
224 if ( mColorMode == 2 ) { 224 if ( mColorMode == 2 ) {
225 mText +="<font color=\"#C00000\">"; 225 mText +="<font color=\"#C00000\">";
226 } 226 }
227 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 227 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
228 if ( mode == 1 ) { 228 if ( mode == 1 ) {
229 addTag("h2",i18n( "Local: " ) +event->summary()); 229 addTag("h2",i18n( "Local: " ) +event->summary());
230 } else { 230 } else {
231 addTag("h2",i18n( "Remote: " ) +event->summary()); 231 addTag("h2",i18n( "Remote: " ) +event->summary());
232 } 232 }
233 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 233 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
234 if ( mColorMode ) 234 if ( mColorMode )
235 mText += "</font>"; 235 mText += "</font>";
236 } 236 }
237 mMailSubject += i18n( "Meeting " )+ event->summary(); 237 mMailSubject += i18n( "Meeting " )+ event->summary();
238 if (event->cancelled ()) { 238 if (event->cancelled ()) {
239 mText +="<font color=\"#B00000\">"; 239 mText +="<font color=\"#B00000\">";
240 addTag("i",i18n("This event has been cancelled!")); 240 addTag("i",i18n("This event has been cancelled!"));
241 mText.append("<br>"); 241 mText.append("<br>");
242 mText += "</font>"; 242 mText += "</font>";
243 mMailSubject += i18n("(cancelled)"); 243 mMailSubject += i18n("(cancelled)");
244 } 244 }
245 if (!event->location().isEmpty()) { 245 if (!event->location().isEmpty()) {
246 addTag("b",i18n("Location: ")); 246 addTag("b",i18n("Location: "));
247 mText.append(event->location()+"<br>"); 247 mText.append(event->location()+"<br>");
248 mMailSubject += i18n(" at ") + event->location(); 248 mMailSubject += i18n(" at ") + event->location();
249 } 249 }
250 if (event->doesFloat()) { 250 if (event->doesFloat()) {
251 if (event->isMultiDay()) { 251 if (event->isMultiDay()) {
252 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 252 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
253 .arg(event->dtStartDateStr(shortDate)) 253 .arg(event->dtStartDateStr(shortDate))
254 .arg(event->dtEndDateStr(shortDate))); 254 .arg(event->dtEndDateStr(shortDate)));
255 } else { 255 } else {
256 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 256 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
257 } 257 }
258 } else { 258 } else {
259 if (event->isMultiDay()) { 259 if (event->isMultiDay()) {
260 mText.append(i18n("<p><b>From:</b> %1</p> ") 260 mText.append(i18n("<p><b>From:</b> %1</p> ")
261 .arg(event->dtStartStr( shortDate))); 261 .arg(event->dtStartStr( shortDate)));
262 mText.append(i18n("<p><b>To:</b> %1</p>") 262 mText.append(i18n("<p><b>To:</b> %1</p>")
263 .arg(event->dtEndStr(shortDate))); 263 .arg(event->dtEndStr(shortDate)));
264 } else { 264 } else {
265 mText.append(i18n("<p><b>On:</b> %1</p> ") 265 mText.append(i18n("<p><b>On:</b> %1</p> ")
266 .arg(event->dtStartDateStr( shortDate ))); 266 .arg(event->dtStartDateStr( shortDate )));
267 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 267 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
268 .arg(event->dtStartTimeStr()) 268 .arg(event->dtStartTimeStr())
269 .arg(event->dtEndTimeStr())); 269 .arg(event->dtEndTimeStr()));
270 } 270 }
271 } 271 }
272 272
273 if (event->recurrence()->doesRecur()) { 273 if (event->recurrence()->doesRecur()) {
274 274
275 QString recurText = event->recurrence()->recurrenceText(); 275 QString recurText = event->recurrence()->recurrenceText();
276 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 276 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
277 bool last; 277 bool last;
278 QDate start = QDate::currentDate(); 278 QDate start = QDate::currentDate();
279 QDate next; 279 QDate next;
280 next = event->recurrence()->getPreviousDate( start , &last ); 280 next = event->recurrence()->getPreviousDate( start , &last );
281 if ( !last ) { 281 if ( !last ) {
282 next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); 282 next = event->recurrence()->getNextDate( start.addDays( - 1 ) );
283 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 283 addTag("p",i18n("<b>Next recurrence is on:</b>") );
284 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 284 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
285 QDateTime nextdt = QDateTime( next, event->dtStart().time()); 285 QDateTime nextdt = QDateTime( next, event->dtStart().time());
286 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true ); 286 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true );
287 287
288 } else { 288 } else {
289 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 289 addTag("p",i18n("<b>Last recurrence was on:</b>") );
290 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 290 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
291 } 291 }
292 } else { 292 } else {
293 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 293 mMailSubject += i18n(" - " )+event->dtStartStr( true );
294 294
295 } 295 }
296 296
297 297
298 if (event->isAlarmEnabled()) { 298 if (event->isAlarmEnabled()) {
299 Alarm *alarm =event->alarms().first() ; 299 Alarm *alarm =event->alarms().first() ;
300 QDateTime t = alarm->time(); 300 QDateTime t = alarm->time();
301 int min = t.secsTo( event->dtStart() )/60; 301 int min = t.secsTo( event->dtStart() )/60;
302 QString s =i18n("( %1 min before )").arg( min ); 302 QString s =i18n("( %1 min before )").arg( min );
303 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 303 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
304 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 304 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
305 //addTag("p",s); 305 //addTag("p",s);
306 } 306 }
307 307
308 addTag("b",i18n("Access: ")); 308 addTag("b",i18n("Access: "));
309 mText.append(event->secrecyStr()+"<br>"); 309 mText.append(event->secrecyStr()+"<br>");
310 if (!event->description().isEmpty()) { 310 if (!event->description().isEmpty()) {
311 addTag("p",i18n("<b>Details: </b>")); 311 addTag("p",i18n("<b>Details: </b>"));
312 addTag("p",event->description()); 312 addTag("p",event->description());
313 } 313 }
314 314
315 formatCategories(event); 315 formatCategories(event);
316 316
317 formatReadOnly(event); 317 formatReadOnly(event);
318 formatAttendees(event); 318 formatAttendees(event);
319 319
320 setText(mText); 320 setText(mText);
321 //QWhatsThis::add(this,mText); 321 //QWhatsThis::add(this,mText);
322 322
323} 323}
324 324
325void KOEventViewer::appendTodo(Todo *event, int mode ) 325void KOEventViewer::appendTodo(Todo *event, int mode )
326{ 326{
327 mMailSubject = ""; 327 mMailSubject = "";
328 mCurrentIncidence = event; 328 mCurrentIncidence = event;
329 topLevelWidget()->setCaption(i18n("Todo Viewer")); 329 topLevelWidget()->setCaption(i18n("Todo Viewer"));
330 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 330 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
331 if (mode == 0 ) 331 if (mode == 0 )
332 addTag("h2",event->summary()); 332 addTag("h2",event->summary());
333 else { 333 else {
334 if ( mColorMode == 1 ) { 334 if ( mColorMode == 1 ) {
335 mText +="<font color=\"#00A000\">"; 335 mText +="<font color=\"#00A000\">";
336 } 336 }
337 if ( mColorMode == 2 ) { 337 if ( mColorMode == 2 ) {
338 mText +="<font color=\"#B00000\">"; 338 mText +="<font color=\"#B00000\">";
339 } 339 }
340 if ( mode == 1 ) { 340 if ( mode == 1 ) {
341 addTag("h2",i18n( "Local: " ) +event->summary()); 341 addTag("h2",i18n( "Local: " ) +event->summary());
342 } else { 342 } else {
343 addTag("h2",i18n( "Remote: " ) +event->summary()); 343 addTag("h2",i18n( "Remote: " ) +event->summary());
344 } 344 }
345 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 345 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
346 if ( mColorMode ) 346 if ( mColorMode )
347 mText += "</font>"; 347 mText += "</font>";
348 } 348 }
349 mMailSubject += i18n( "Todo " )+ event->summary(); 349 mMailSubject += i18n( "Todo " )+ event->summary();
350
351 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
352 mText +="<font color=\"#B00000\">";
353 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
354 mText += "</font>";
355 } else {
356 mText.append(i18n("<p><i>%1 % completed</i></p>")
357 .arg(event->percentComplete()));
358 }
359
350 if (event->cancelled ()) { 360 if (event->cancelled ()) {
351 mText +="<font color=\"#B00000\">"; 361 mText +="<font color=\"#B00000\">";
352 addTag("i",i18n("This todo has been cancelled!")); 362 addTag("i",i18n("This todo has been cancelled!"));
353 mText.append("<br>"); 363 mText.append("<br>");
354 mText += "</font>"; 364 mText += "</font>";
355 mMailSubject += i18n("(cancelled)"); 365 mMailSubject += i18n("(cancelled)");
356 } 366 }
357 367
358 if (!event->location().isEmpty()) { 368 if (!event->location().isEmpty()) {
359 addTag("b",i18n("Location: ")); 369 addTag("b",i18n("Location: "));
360 mText.append(event->location()+"<br>"); 370 mText.append(event->location()+"<br>");
361 mMailSubject += i18n(" at ") + event->location(); 371 mMailSubject += i18n(" at ") + event->location();
362 } 372 }
363 if (event->hasStartDate()) { 373 if (event->hasStartDate()) {
364 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 374 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
365 } 375 }
366 if (event->hasDueDate()) { 376 if (event->hasDueDate()) {
367 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 377 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
368 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 378 mMailSubject += i18n(" - " )+event->dtDueStr( true );
369 } 379 }
370 addTag("b",i18n("Access: ")); 380 addTag("b",i18n("Access: "));
371 mText.append(event->secrecyStr()+"<br>"); 381 mText.append(event->secrecyStr()+"<br>");
372 if (!event->description().isEmpty()) { 382 if (!event->description().isEmpty()) {
373 addTag("p",i18n("<b>Details: </b>")); 383 addTag("p",i18n("<b>Details: </b>"));
374 addTag("p",event->description()); 384 addTag("p",event->description());
375 } 385 }
376 386
377 formatCategories(event); 387 formatCategories(event);
378 388
379 mText.append(i18n("<p><b>Priority:</b> %2</p>") 389 mText.append(i18n("<p><b>Priority:</b> %2</p>")
380 .arg(QString::number(event->priority()))); 390 .arg(QString::number(event->priority())));
381 391
382 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
383 mText.append(i18n("<p><i>Completed on %1</i></p>")
384 .arg( event->completedStr() ));
385 } else {
386 mText.append(i18n("<p><i>%1 % completed</i></p>")
387 .arg(event->percentComplete()));
388 }
389
390 formatReadOnly(event); 392 formatReadOnly(event);
391 formatAttendees(event); 393 formatAttendees(event);
392 if ( event->relatedTo() ) { 394 if ( event->relatedTo() ) {
393 addTag("b",i18n("Parent todo: ")); 395 addTag("b",i18n("Parent todo: "));
394 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 396 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
395 } 397 }
396 QPtrList<Incidence> Relations = event->relations(); 398 QPtrList<Incidence> Relations = event->relations();
397 Incidence *to; 399 Incidence *to;
398 if ( Relations.first() ) 400 if ( Relations.first() )
399 addTag("b",i18n("Sub todos:<br>")); 401 addTag("b",i18n("Sub todos:<br>"));
400 for (to=Relations.first();to;to=Relations.next()) { 402 for (to=Relations.first();to;to=Relations.next()) {
401 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 403 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
402 404
403 } 405 }
404 setText(mText); 406 setText(mText);
405} 407}
406 408
407void KOEventViewer::formatCategories(Incidence *event) 409void KOEventViewer::formatCategories(Incidence *event)
408{ 410{
409 if (!event->categoriesStr().isEmpty()) { 411 if (!event->categoriesStr().isEmpty()) {
410 if (event->categories().count() == 1) { 412 if (event->categories().count() == 1) {
411 addTag("h3",i18n("Category")); 413 addTag("h3",i18n("Category"));
412 } else { 414 } else {
413 addTag("h3",i18n("Categories")); 415 addTag("h3",i18n("Categories"));
414 } 416 }
415 addTag("p",event->categoriesStr()); 417 addTag("p",event->categoriesStr());
416 } 418 }
417} 419}
418void KOEventViewer::formatAttendees(Incidence *event) 420void KOEventViewer::formatAttendees(Incidence *event)
419{ 421{
420 QPtrList<Attendee> attendees = event->attendees(); 422 QPtrList<Attendee> attendees = event->attendees();
421 if (attendees.count()) { 423 if (attendees.count()) {
422 424
423 425
424 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 426 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
425 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 427 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
426 addTag("h3",i18n("Organizer")); 428 addTag("h3",i18n("Organizer"));
427 mText.append("<ul><li>"); 429 mText.append("<ul><li>");
428#ifndef KORG_NOKABC 430#ifndef KORG_NOKABC
429 431
430#ifdef DESKTOP_VERSION 432#ifdef DESKTOP_VERSION
431 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 433 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
432 KABC::Addressee::List addressList; 434 KABC::Addressee::List addressList;
433 addressList = add_book->findByEmail(event->organizer()); 435 addressList = add_book->findByEmail(event->organizer());
434 KABC::Addressee o = addressList.first(); 436 KABC::Addressee o = addressList.first();
435 if (!o.isEmpty() && addressList.size()<2) { 437 if (!o.isEmpty() && addressList.size()<2) {
436 mText += "<a href=\"uid:" + o.uid() + "\">"; 438 mText += "<a href=\"uid:" + o.uid() + "\">";
437 mText += o.formattedName(); 439 mText += o.formattedName();
438 mText += "</a>\n"; 440 mText += "</a>\n";
439 } else { 441 } else {
440 mText.append(event->organizer()); 442 mText.append(event->organizer());
441 } 443 }
442#else //DESKTOP_VERSION 444#else //DESKTOP_VERSION
443 mText += "<a href=\"uid:organizer\">"; 445 mText += "<a href=\"uid:organizer\">";
444 mText += event->organizer(); 446 mText += event->organizer();
445 mText += "</a>\n"; 447 mText += "</a>\n";
446#endif //DESKTOP_VERSION 448#endif //DESKTOP_VERSION
447 449
448 450
449#else 451#else
450 mText.append(event->organizer()); 452 mText.append(event->organizer());
451#endif 453#endif
452 454
453 if (iconPath) { 455 if (iconPath) {
454 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 456 mText += " <a href=\"mailto:" + event->organizer() + "\">";
455 mText += "<IMG src=\"" + iconPath + "\">"; 457 mText += "<IMG src=\"" + iconPath + "\">";
456 mText += "</a>\n"; 458 mText += "</a>\n";
457 } 459 }
458 mText.append("</li></ul>"); 460 mText.append("</li></ul>");
459 461
460 addTag("h3",i18n("Attendees")); 462 addTag("h3",i18n("Attendees"));
461 Attendee *a; 463 Attendee *a;
462 mText.append("<ul>"); 464 mText.append("<ul>");
463 for(a=attendees.first();a;a=attendees.next()) { 465 for(a=attendees.first();a;a=attendees.next()) {
464#ifndef KORG_NOKABC 466#ifndef KORG_NOKABC
465#ifdef DESKTOP_VERSION 467#ifdef DESKTOP_VERSION
466 if (a->name().isEmpty()) { 468 if (a->name().isEmpty()) {
467 addressList = add_book->findByEmail(a->email()); 469 addressList = add_book->findByEmail(a->email());
468 KABC::Addressee o = addressList.first(); 470 KABC::Addressee o = addressList.first();
469 if (!o.isEmpty() && addressList.size()<2) { 471 if (!o.isEmpty() && addressList.size()<2) {
470 mText += "<a href=\"uid:" + o.uid() + "\">"; 472 mText += "<a href=\"uid:" + o.uid() + "\">";
471 mText += o.formattedName(); 473 mText += o.formattedName();
472 mText += "</a>\n"; 474 mText += "</a>\n";
473 } else { 475 } else {
474 mText += "<li>"; 476 mText += "<li>";
475 mText.append(a->email()); 477 mText.append(a->email());
476 mText += "\n"; 478 mText += "\n";
477 } 479 }
478 } else { 480 } else {
479 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 481 mText += "<li><a href=\"uid:" + a->uid() + "\">";
480 if (!a->name().isEmpty()) mText += a->name(); 482 if (!a->name().isEmpty()) mText += a->name();
481 else mText += a->email(); 483 else mText += a->email();
482 mText += "</a>\n"; 484 mText += "</a>\n";
483 } 485 }
484#else //DESKTOP_VERSION 486#else //DESKTOP_VERSION
485 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 487 mText += "<li><a href=\"uid:" + a->uid() + "\">";
486 if (!a->name().isEmpty()) mText += a->name(); 488 if (!a->name().isEmpty()) mText += a->name();
487 else mText += a->email(); 489 else mText += a->email();
488 mText += "</a>\n"; 490 mText += "</a>\n";
489#endif //DESKTOP_VERSION 491#endif //DESKTOP_VERSION
490#else 492#else
491 //qDebug("nokabc "); 493 //qDebug("nokabc ");
492 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 494 mText += "<li><a href=\"uid:" + a->uid() + "\">";
493 if (!a->name().isEmpty()) mText += a->name(); 495 if (!a->name().isEmpty()) mText += a->name();
494 else mText += a->email(); 496 else mText += a->email();
495 mText += "</a>\n"; 497 mText += "</a>\n";
496#endif 498#endif
497 499
498 500
499 if (!a->email().isEmpty()) { 501 if (!a->email().isEmpty()) {
500 if (iconPath) { 502 if (iconPath) {
501 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 503 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
502 if ( a->RSVP() ) 504 if ( a->RSVP() )
503 mText += "<IMG src=\"" + iconPath + "\">"; 505 mText += "<IMG src=\"" + iconPath + "\">";
504 else 506 else
505 mText += "<IMG src=\"" + NOiconPath + "\">"; 507 mText += "<IMG src=\"" + NOiconPath + "\">";
506 mText += "</a>\n"; 508 mText += "</a>\n";
507 } 509 }
508 } 510 }
509 if (a->status() != Attendee::NeedsAction ) 511 if (a->status() != Attendee::NeedsAction )
510 mText +="[" + a->statusStr() + "] "; 512 mText +="[" + a->statusStr() + "] ";
511 if (a->role() == Attendee::Chair ) 513 if (a->role() == Attendee::Chair )
512 mText +="(" + a->roleStr().left(1) + ".)"; 514 mText +="(" + a->roleStr().left(1) + ".)";
513 } 515 }
514 mText.append("</li></ul>"); 516 mText.append("</li></ul>");
515 } 517 }
516 518
517} 519}
518void KOEventViewer::appendJournal(Journal *jour, int mode ) 520void KOEventViewer::appendJournal(Journal *jour, int mode )
519{ 521{
520 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 522 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
521 if (mode == 0 ) { 523 if (mode == 0 ) {
522 addTag("h2",i18n("Journal from: ")); 524 addTag("h2",i18n("Journal from: "));
523 } 525 }
524 else { 526 else {
525 if ( mode == 1 ) { 527 if ( mode == 1 ) {
526 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 528 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
527 } else { 529 } else {
528 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 530 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
529 } 531 }
530 } 532 }
531 topLevelWidget()->setCaption("Journal Viewer"); 533 topLevelWidget()->setCaption("Journal Viewer");
532 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 534 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
533 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 535 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
534 if (!jour->description().isEmpty()) { 536 if (!jour->description().isEmpty()) {
535 addTag("p",jour->description()); 537 addTag("p",jour->description());
536 } 538 }
537 setText(mText); 539 setText(mText);
538} 540}
539 541
540void KOEventViewer::formatReadOnly(Incidence *event) 542void KOEventViewer::formatReadOnly(Incidence *event)
541{ 543{
542 if (event->isReadOnly()) { 544 if (event->isReadOnly()) {
543 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 545 addTag("p","<em>(" + i18n("read-only") + ")</em>");
544 } 546 }
545} 547}
546void KOEventViewer::setSyncMode( bool b ) 548void KOEventViewer::setSyncMode( bool b )
547{ 549{
548 mSyncMode = b; 550 mSyncMode = b;
549} 551}
550 552
551 553
552void KOEventViewer::setTodo(Todo *event, bool clearV ) 554void KOEventViewer::setTodo(Todo *event, bool clearV )
553{ 555{
554 if ( clearV ) 556 if ( clearV )
555 clearEvents(); 557 clearEvents();
556 if ( mSyncMode ) { 558 if ( mSyncMode ) {
557 if ( clearV ) 559 if ( clearV )
558 appendTodo(event,1 ); 560 appendTodo(event,1 );
559 else 561 else
560 appendTodo(event,2); 562 appendTodo(event,2);
561 } else 563 } else
562 appendTodo(event); 564 appendTodo(event);
563} 565}
564void KOEventViewer::setJournal(Journal *event, bool clearV ) 566void KOEventViewer::setJournal(Journal *event, bool clearV )
565{ 567{
566 if ( clearV ) 568 if ( clearV )
567 clearEvents(); 569 clearEvents();
568 if ( mSyncMode ) { 570 if ( mSyncMode ) {
569 if ( clearV ) 571 if ( clearV )
570 appendJournal(event, 1); 572 appendJournal(event, 1);
571 else 573 else
572 appendJournal(event, 2); 574 appendJournal(event, 2);
573 } else 575 } else
574 appendJournal(event); 576 appendJournal(event);
575} 577}
576 578
577void KOEventViewer::setEvent(Event *event) 579void KOEventViewer::setEvent(Event *event)
578{ 580{
579 clearEvents(); 581 clearEvents();
580 if ( mSyncMode ) 582 if ( mSyncMode )
581 appendEvent(event, 1); 583 appendEvent(event, 1);
582 else 584 else
583 appendEvent(event); 585 appendEvent(event);
584} 586}
585 587
586void KOEventViewer::addEvent(Event *event) 588void KOEventViewer::addEvent(Event *event)
587{ 589{
588 if ( mSyncMode ) 590 if ( mSyncMode )
589 appendEvent(event, 2); 591 appendEvent(event, 2);
590 else 592 else
591 appendEvent(event); 593 appendEvent(event);
592} 594}
593 595
594void KOEventViewer::clearEvents(bool now) 596void KOEventViewer::clearEvents(bool now)
595{ 597{
596 mText = ""; 598 mText = "";
597 if (now) setText(mText); 599 if (now) setText(mText);
598} 600}
599 601
600void KOEventViewer::addText(QString text) 602void KOEventViewer::addText(QString text)
601{ 603{
602 mText.append(text); 604 mText.append(text);
603 setText(mText); 605 setText(mText);
604} 606}
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 8c1953d..14e8b5c 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -81,512 +81,513 @@ void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
82 !QTextDrag::canDecode( e ) ) { 82 !QTextDrag::canDecode( e ) ) {
83 e->ignore(); 83 e->ignore();
84 return; 84 return;
85 } 85 }
86 86
87 mOldCurrent = currentItem(); 87 mOldCurrent = currentItem();
88#endif 88#endif
89} 89}
90 90
91 91
92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
93{ 93{
94#ifndef KORG_NODND 94#ifndef KORG_NODND
95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
96 96
97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
98 !QTextDrag::canDecode( e ) ) { 98 !QTextDrag::canDecode( e ) ) {
99 e->ignore(); 99 e->ignore();
100 return; 100 return;
101 } 101 }
102 102
103 e->accept(); 103 e->accept();
104#endif 104#endif
105} 105}
106 106
107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
108{ 108{
109#ifndef KORG_NODND 109#ifndef KORG_NODND
110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
111 111
112 setCurrentItem(mOldCurrent); 112 setCurrentItem(mOldCurrent);
113 setSelected(mOldCurrent,true); 113 setSelected(mOldCurrent,true);
114#endif 114#endif
115} 115}
116 116
117void KOTodoListView::contentsDropEvent(QDropEvent *e) 117void KOTodoListView::contentsDropEvent(QDropEvent *e)
118{ 118{
119#ifndef KORG_NODND 119#ifndef KORG_NODND
120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
121 121
122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
123 !QTextDrag::canDecode( e ) ) { 123 !QTextDrag::canDecode( e ) ) {
124 e->ignore(); 124 e->ignore();
125 return; 125 return;
126 } 126 }
127 127
128 DndFactory factory( mCalendar ); 128 DndFactory factory( mCalendar );
129 Todo *todo = factory.createDropTodo(e); 129 Todo *todo = factory.createDropTodo(e);
130 130
131 if (todo) { 131 if (todo) {
132 e->acceptAction(); 132 e->acceptAction();
133 133
134 KOTodoViewItem *destination = 134 KOTodoViewItem *destination =
135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
136 Todo *destinationEvent = 0; 136 Todo *destinationEvent = 0;
137 if (destination) destinationEvent = destination->todo(); 137 if (destination) destinationEvent = destination->todo();
138 138
139 Todo *existingTodo = mCalendar->todo(todo->uid()); 139 Todo *existingTodo = mCalendar->todo(todo->uid());
140 140
141 if(existingTodo) { 141 if(existingTodo) {
142 Incidence *to = destinationEvent; 142 Incidence *to = destinationEvent;
143 while(to) { 143 while(to) {
144 if (to->uid() == todo->uid()) { 144 if (to->uid() == todo->uid()) {
145 KMessageBox::sorry(this, 145 KMessageBox::sorry(this,
146 i18n("Cannot move To-Do to itself\nor a child of itself"), 146 i18n("Cannot move To-Do to itself\nor a child of itself"),
147 i18n("Drop To-Do")); 147 i18n("Drop To-Do"));
148 delete todo; 148 delete todo;
149 return; 149 return;
150 } 150 }
151 to = to->relatedTo(); 151 to = to->relatedTo();
152 } 152 }
153 internalDrop = true; 153 internalDrop = true;
154 if ( destinationEvent ) 154 if ( destinationEvent )
155 reparentTodoSignal( destinationEvent, existingTodo ); 155 reparentTodoSignal( destinationEvent, existingTodo );
156 else 156 else
157 unparentTodoSignal(existingTodo); 157 unparentTodoSignal(existingTodo);
158 delete todo; 158 delete todo;
159 } else { 159 } else {
160 mCalendar->addTodo(todo); 160 mCalendar->addTodo(todo);
161 emit todoDropped(todo, KOGlobals::EVENTADDED); 161 emit todoDropped(todo, KOGlobals::EVENTADDED);
162 if ( destinationEvent ) 162 if ( destinationEvent )
163 reparentTodoSignal( destinationEvent, todo ); 163 reparentTodoSignal( destinationEvent, todo );
164 } 164 }
165 } 165 }
166 else { 166 else {
167 QString text; 167 QString text;
168 if (QTextDrag::decode(e,text)) { 168 if (QTextDrag::decode(e,text)) {
169 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 169 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
170 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 170 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
171 qDebug("Dropped : " + text); 171 qDebug("Dropped : " + text);
172 QStringList emails = QStringList::split(",",text); 172 QStringList emails = QStringList::split(",",text);
173 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 173 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
174 int pos = (*it).find("<"); 174 int pos = (*it).find("<");
175 QString name = (*it).left(pos); 175 QString name = (*it).left(pos);
176 QString email = (*it).mid(pos); 176 QString email = (*it).mid(pos);
177 if (!email.isEmpty() && todoi) { 177 if (!email.isEmpty() && todoi) {
178 todoi->todo()->addAttendee(new Attendee(name,email)); 178 todoi->todo()->addAttendee(new Attendee(name,email));
179 } 179 }
180 } 180 }
181 } 181 }
182 else { 182 else {
183 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); 183 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable ");
184 e->ignore(); 184 e->ignore();
185 } 185 }
186 } 186 }
187#endif 187#endif
188} 188}
189 189
190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
191{ 191{
192#ifndef KORG_NODND 192#ifndef KORG_NODND
193 QPoint p(contentsToViewport(e->pos())); 193 QPoint p(contentsToViewport(e->pos()));
194 QListViewItem *i = itemAt(p); 194 QListViewItem *i = itemAt(p);
195 mMousePressed = false; 195 mMousePressed = false;
196 if (i) { 196 if (i) {
197 // if the user clicked into the root decoration of the item, don't 197 // if the user clicked into the root decoration of the item, don't
198 // try to start a drag! 198 // try to start a drag!
199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) + 199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) +
200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
201 itemMargin() || 201 itemMargin() ||
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210 QListView::contentsMousePressEvent(e); 210 QListView::contentsMousePressEvent(e);
211} 211}
212 212
213void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 213void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
214{ 214{
215 215
216#ifndef KORG_NODND 216#ifndef KORG_NODND
217 QListView::contentsMouseMoveEvent(e); 217 QListView::contentsMouseMoveEvent(e);
218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
219 QApplication::startDragDistance()) { 219 QApplication::startDragDistance()) {
220 mMousePressed = false; 220 mMousePressed = false;
221 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 221 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
222 if (item) { 222 if (item) {
223 DndFactory factory( mCalendar ); 223 DndFactory factory( mCalendar );
224 ICalDrag *vd = factory.createDrag( 224 ICalDrag *vd = factory.createDrag(
225 ((KOTodoViewItem *)item)->todo(),viewport()); 225 ((KOTodoViewItem *)item)->todo(),viewport());
226 internalDrop = false; 226 internalDrop = false;
227 // we cannot do any senseful here, because the DnD is still broken in Qt 227 // we cannot do any senseful here, because the DnD is still broken in Qt
228 if (vd->drag()) { 228 if (vd->drag()) {
229 if ( !internalDrop ) { 229 if ( !internalDrop ) {
230 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); 230 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() );
231 qDebug("Dnd: External move: Delete drag source "); 231 qDebug("Dnd: External move: Delete drag source ");
232 } else 232 } else
233 qDebug("Dnd: Internal move "); 233 qDebug("Dnd: Internal move ");
234 234
235 } else { 235 } else {
236 if ( !internalDrop ) { 236 if ( !internalDrop ) {
237 qDebug("Dnd: External Copy"); 237 qDebug("Dnd: External Copy");
238 } else 238 } else
239 qDebug("DnD: Internal copy: Copy pending"); 239 qDebug("DnD: Internal copy: Copy pending");
240 } 240 }
241 } 241 }
242 } 242 }
243#endif 243#endif
244} 244}
245void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 245void KOTodoListView::keyPressEvent ( QKeyEvent * e )
246{ 246{
247 247
248 QListViewItem* cn; 248 QListViewItem* cn;
249 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 249 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
250 cn = currentItem(); 250 cn = currentItem();
251 if ( cn ) { 251 if ( cn ) {
252 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 252 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
253 if ( ci ){ 253 if ( ci ){
254 if ( e->state() == ShiftButton ) 254 if ( e->state() == ShiftButton )
255 ci->setOn( false ); 255 ci->setOn( false );
256 else 256 else
257 ci->setOn( true ); 257 ci->setOn( true );
258 cn = cn->nextSibling(); 258 cn = cn->nextSibling();
259 if ( cn ) { 259 if ( cn ) {
260 setCurrentItem ( cn ); 260 setCurrentItem ( cn );
261 ensureItemVisible ( cn ); 261 ensureItemVisible ( cn );
262 } 262 }
263 263
264 } 264 }
265 } 265 }
266 266
267 return; 267 return;
268 } 268 }
269 269
270 // qDebug("KOTodoListView::keyPressEvent "); 270 // qDebug("KOTodoListView::keyPressEvent ");
271 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 271 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
272 switch ( e->key() ) { 272 switch ( e->key() ) {
273 case Qt::Key_Down: 273 case Qt::Key_Down:
274 case Qt::Key_Up: 274 case Qt::Key_Up:
275 QListView::keyPressEvent ( e ); 275 QListView::keyPressEvent ( e );
276 break; 276 break;
277 case Qt::Key_Left: 277 case Qt::Key_Left:
278 case Qt::Key_Right: 278 case Qt::Key_Right:
279 QListView::keyPressEvent ( e ); 279 QListView::keyPressEvent ( e );
280 e->accept(); 280 e->accept();
281 return; 281 return;
282 break; 282 break;
283 default: 283 default:
284 e->ignore(); 284 e->ignore();
285 break; 285 break;
286 } 286 }
287 return; 287 return;
288 } 288 }
289 e->ignore(); 289 e->ignore();
290} 290}
291void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 291void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
292{ 292{
293 QListView::contentsMouseReleaseEvent(e); 293 QListView::contentsMouseReleaseEvent(e);
294 mMousePressed = false; 294 mMousePressed = false;
295} 295}
296 296
297void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 297void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
298{ 298{
299 if (!e) return; 299 if (!e) return;
300 300
301 QPoint vp = contentsToViewport(e->pos()); 301 QPoint vp = contentsToViewport(e->pos());
302 302
303 QListViewItem *item = itemAt(vp); 303 QListViewItem *item = itemAt(vp);
304 304
305 emit double_Clicked(item); 305 emit double_Clicked(item);
306 if (!item) return; 306 if (!item) return;
307 307
308 emit doubleClicked(item,vp,0); 308 emit doubleClicked(item,vp,0);
309} 309}
310 310
311///////////////////////////////////////////////////////////////////////////// 311/////////////////////////////////////////////////////////////////////////////
312 312
313KOQuickTodo::KOQuickTodo(QWidget *parent) : 313KOQuickTodo::KOQuickTodo(QWidget *parent) :
314 QLineEdit(parent) 314 QLineEdit(parent)
315{ 315{
316 setText(i18n("Click to add a new Todo")); 316 setText(i18n("Click to add a new Todo"));
317} 317}
318 318
319void KOQuickTodo::focusInEvent(QFocusEvent *ev) 319void KOQuickTodo::focusInEvent(QFocusEvent *ev)
320{ 320{
321 if ( text()==i18n("Click to add a new Todo") ) 321 if ( text()==i18n("Click to add a new Todo") )
322 setText(""); 322 setText("");
323 QLineEdit::focusInEvent(ev); 323 QLineEdit::focusInEvent(ev);
324} 324}
325 325
326void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 326void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
327{ 327{
328 setText(i18n("Click to add a new Todo")); 328 setText(i18n("Click to add a new Todo"));
329 QLineEdit::focusOutEvent(ev); 329 QLineEdit::focusOutEvent(ev);
330} 330}
331 331
332///////////////////////////////////////////////////////////////////////////// 332/////////////////////////////////////////////////////////////////////////////
333 333
334KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 334KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
335 KOrg::BaseView(calendar,parent,name) 335 KOrg::BaseView(calendar,parent,name)
336{ 336{
337 isFlatDisplay = false;
337 mNavigator = 0; 338 mNavigator = 0;
338 QBoxLayout *topLayout = new QVBoxLayout(this); 339 QBoxLayout *topLayout = new QVBoxLayout(this);
339 mName = QString ( name ); 340 mName = QString ( name );
340 mBlockUpdate = false; 341 mBlockUpdate = false;
341 mQuickAdd = new KOQuickTodo(this); 342 mQuickAdd = new KOQuickTodo(this);
342 topLayout->addWidget(mQuickAdd); 343 topLayout->addWidget(mQuickAdd);
343 344
344 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 345 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
345 346
346 mTodoListView = new KOTodoListView(calendar,this, name ); 347 mTodoListView = new KOTodoListView(calendar,this, name );
347 topLayout->addWidget(mTodoListView); 348 topLayout->addWidget(mTodoListView);
348 //mTodoListView->header()->setMaximumHeight(30); 349 //mTodoListView->header()->setMaximumHeight(30);
349 mTodoListView->setRootIsDecorated(true); 350 mTodoListView->setRootIsDecorated(true);
350 mTodoListView->setAllColumnsShowFocus(true); 351 mTodoListView->setAllColumnsShowFocus(true);
351 352
352 mTodoListView->setShowSortIndicator(true); 353 mTodoListView->setShowSortIndicator(true);
353 354
354 mTodoListView->addColumn(i18n("Todo")); 355 mTodoListView->addColumn(i18n("Todo"));
355 mTodoListView->addColumn(i18n("Prio")); 356 mTodoListView->addColumn(i18n("Prio"));
356 mTodoListView->setColumnAlignment(1,AlignHCenter); 357 mTodoListView->setColumnAlignment(1,AlignHCenter);
357 mTodoListView->addColumn(i18n("Complete")); 358 mTodoListView->addColumn(i18n("Complete"));
358 mTodoListView->setColumnAlignment(2,AlignCenter); 359 mTodoListView->setColumnAlignment(2,AlignCenter);
359 360
360 mTodoListView->addColumn(i18n("Due Date")); 361 mTodoListView->addColumn(i18n("Due Date"));
361 mTodoListView->setColumnAlignment(3,AlignLeft); 362 mTodoListView->setColumnAlignment(3,AlignLeft);
362 mTodoListView->addColumn(i18n("Due Time")); 363 mTodoListView->addColumn(i18n("Due Time"));
363 mTodoListView->setColumnAlignment(4,AlignHCenter); 364 mTodoListView->setColumnAlignment(4,AlignHCenter);
364 365
365 mTodoListView->addColumn(i18n("Start Date")); 366 mTodoListView->addColumn(i18n("Start Date"));
366 mTodoListView->setColumnAlignment(5,AlignLeft); 367 mTodoListView->setColumnAlignment(5,AlignLeft);
367 mTodoListView->addColumn(i18n("Start Time")); 368 mTodoListView->addColumn(i18n("Start Time"));
368 mTodoListView->setColumnAlignment(6,AlignHCenter); 369 mTodoListView->setColumnAlignment(6,AlignHCenter);
369 370
370 mTodoListView->addColumn(i18n("Cancelled")); 371 mTodoListView->addColumn(i18n("Cancelled"));
371 mTodoListView->addColumn(i18n("Categories")); 372 mTodoListView->addColumn(i18n("Categories"));
372#if 0 373#if 0
373 mTodoListView->addColumn(i18n("Sort Id")); 374 mTodoListView->addColumn(i18n("Sort Id"));
374 mTodoListView->setColumnAlignment(4,AlignHCenter); 375 mTodoListView->setColumnAlignment(4,AlignHCenter);
375#endif 376#endif
376 377
377 mTodoListView->setMinimumHeight( 60 ); 378 mTodoListView->setMinimumHeight( 60 );
378 mTodoListView->setItemsRenameable( true ); 379 mTodoListView->setItemsRenameable( true );
379 mTodoListView->setRenameable( 0 ); 380 mTodoListView->setRenameable( 0 );
380 mTodoListView->setColumnWidth( 0, 120 ); 381 mTodoListView->setColumnWidth( 0, 120 );
381 mTodoListView->setColumnWidthMode(0, QListView::Manual); 382 mTodoListView->setColumnWidthMode(0, QListView::Manual);
382 mTodoListView->setColumnWidthMode(1, QListView::Manual); 383 mTodoListView->setColumnWidthMode(1, QListView::Manual);
383 mTodoListView->setColumnWidthMode(2, QListView::Manual); 384 mTodoListView->setColumnWidthMode(2, QListView::Manual);
384 mTodoListView->setColumnWidthMode(3, QListView::Manual); 385 mTodoListView->setColumnWidthMode(3, QListView::Manual);
385 mTodoListView->setColumnWidthMode(4, QListView::Manual); 386 mTodoListView->setColumnWidthMode(4, QListView::Manual);
386 mTodoListView->setColumnWidthMode(5, QListView::Manual); 387 mTodoListView->setColumnWidthMode(5, QListView::Manual);
387 mTodoListView->setColumnWidthMode(6, QListView::Manual); 388 mTodoListView->setColumnWidthMode(6, QListView::Manual);
388 mTodoListView->setColumnWidthMode(7, QListView::Manual); 389 mTodoListView->setColumnWidthMode(7, QListView::Manual);
389 mTodoListView->setColumnWidthMode(8, QListView::Manual); 390 mTodoListView->setColumnWidthMode(8, QListView::Manual);
390 391
391 392
392 mPriorityPopupMenu = new QPopupMenu(this); 393 mPriorityPopupMenu = new QPopupMenu(this);
393 for (int i = 1; i <= 5; i++) { 394 for (int i = 1; i <= 5; i++) {
394 QString label = QString ("%1").arg (i); 395 QString label = QString ("%1").arg (i);
395 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 396 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
396 } 397 }
397 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 398 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
398 399
399 mPercentageCompletedPopupMenu = new QPopupMenu(this); 400 mPercentageCompletedPopupMenu = new QPopupMenu(this);
400 for (int i = 0; i <= 100; i+=20) { 401 for (int i = 0; i <= 100; i+=20) {
401 QString label = QString ("%1 %").arg (i); 402 QString label = QString ("%1 %").arg (i);
402 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 403 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
403 } 404 }
404 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 405 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
405 406
406 407
407 408
408 mItemPopupMenu = new QPopupMenu(this); 409 mItemPopupMenu = new QPopupMenu(this);
409 mItemPopupMenu->insertItem(i18n("Show..."), this, 410 mItemPopupMenu->insertItem(i18n("Show..."), this,
410 SLOT (showTodo())); 411 SLOT (showTodo()));
411 mItemPopupMenu->insertItem(i18n("Edit..."), this, 412 mItemPopupMenu->insertItem(i18n("Edit..."), this,
412 SLOT (editTodo())); 413 SLOT (editTodo()));
413 mItemPopupMenu->insertItem( i18n("Delete"), this, 414 mItemPopupMenu->insertItem( i18n("Delete"), this,
414 SLOT (deleteTodo())); 415 SLOT (deleteTodo()));
415 mItemPopupMenu->insertItem( i18n("Clone..."), this, 416 mItemPopupMenu->insertItem( i18n("Clone..."), this,
416 SLOT (cloneTodo())); 417 SLOT (cloneTodo()));
417 mItemPopupMenu->insertItem( i18n("Move..."), this, 418 mItemPopupMenu->insertItem( i18n("Move..."), this,
418 SLOT (moveTodo())); 419 SLOT (moveTodo()));
419 mItemPopupMenu->insertItem( i18n("Beam..."), this, 420 mItemPopupMenu->insertItem( i18n("Beam..."), this,
420 SLOT (beamTodo())); 421 SLOT (beamTodo()));
421 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 422 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
422 SLOT (cancelTodo())); 423 SLOT (cancelTodo()));
423 mItemPopupMenu->insertSeparator(); 424 mItemPopupMenu->insertSeparator();
424 425
425 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 426 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
426 SLOT (newTodo())); 427 SLOT (newTodo()));
427 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 428 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
428 SLOT (newSubTodo())); 429 SLOT (newSubTodo()));
429 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 430 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
430 SLOT (unparentTodo()),0,21); 431 SLOT (unparentTodo()),0,21);
431 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 432 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
432 SLOT (reparentTodo()),0,22); 433 SLOT (reparentTodo()),0,22);
433 mItemPopupMenu->insertSeparator(); 434 mItemPopupMenu->insertSeparator();
434#if 0 435#if 0
435 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 436 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
436 this, SLOT( purgeCompleted() ) ); 437 this, SLOT( purgeCompleted() ) );
437 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 438 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
438 this, SLOT( toggleCompleted() ),0, 33 ); 439 this, SLOT( toggleCompleted() ),0, 33 );
439 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 440 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
440 this, SLOT( toggleQuickTodo() ),0, 34 ); 441 this, SLOT( toggleQuickTodo() ),0, 34 );
441 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 442 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
442 this, SLOT( toggleRunning() ),0, 35 ); 443 this, SLOT( toggleRunning() ),0, 35 );
443 444
444#endif 445#endif
445 mPopupMenu = new QPopupMenu(this); 446 mPopupMenu = new QPopupMenu(this);
446 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 447 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
447 SLOT (newTodo()),0,1); 448 SLOT (newTodo()),0,1);
448 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 449 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
449 this, SLOT(purgeCompleted()),0,2); 450 this, SLOT(purgeCompleted()),0,2);
450 mPopupMenu->insertItem(i18n("Show Completed"), 451 mPopupMenu->insertItem(i18n("Show Completed"),
451 this, SLOT( toggleCompleted() ),0,3 ); 452 this, SLOT( toggleCompleted() ),0,3 );
452 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 453 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
453 this, SLOT( toggleQuickTodo() ),0,4 ); 454 this, SLOT( toggleQuickTodo() ),0,4 );
454 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 455 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
455 this, SLOT( toggleRunning() ),0,5 ); 456 this, SLOT( toggleRunning() ),0,5 );
456 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 457 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
457 this, SLOT( setAllOpen() ),0,6 ); 458 this, SLOT( setAllOpen() ),0,6 );
458 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 459 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
459 this, SLOT( setAllClose() ),0,7 ); 460 this, SLOT( setAllClose() ),0,7 );
460 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 461 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
461 this, SLOT( setAllFlat() ),0,8 ); 462 this, SLOT( setAllFlat() ),0,8 );
462 mDocPrefs = new DocPrefs( name ); 463 mDocPrefs = new DocPrefs( name );
463 464
464 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 465 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
465 mPopupMenu->setCheckable( true ); 466 mPopupMenu->setCheckable( true );
466 mItemPopupMenu->setCheckable( true ); 467 mItemPopupMenu->setCheckable( true );
467 468
468 469
469 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 470 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
470 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 471 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
471 472
472 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 473 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
473 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 474 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
474 475
475 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 476 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
476 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 477 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
477 478
478 479
479 // Double clicking conflicts with opening/closing the subtree 480 // Double clicking conflicts with opening/closing the subtree
480 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 481 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
481 SLOT( editItem( QListViewItem *) ) ); 482 SLOT( editItem( QListViewItem *) ) );
482 /* 483 /*
483 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 484 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
484 const QPoint &,int ) ), 485 const QPoint &,int ) ),
485 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 486 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
486 */ 487 */
487 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 488 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
488 const QPoint &,int ) ), 489 const QPoint &,int ) ),
489 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 490 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
490 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 491 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
491 SLOT( itemClicked( QListViewItem * ) ) ); 492 SLOT( itemClicked( QListViewItem * ) ) );
492 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 493 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
493 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 494 SLOT( itemDoubleClicked( QListViewItem * ) ) );
494 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 495 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
495 SLOT( updateView() ) ); 496 SLOT( updateView() ) );
496 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 497 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
497 SLOT( todoModified(Todo *, int) ) ); 498 SLOT( todoModified(Todo *, int) ) );
498 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 499 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
499 SLOT( itemStateChanged( QListViewItem * ) ) ); 500 SLOT( itemStateChanged( QListViewItem * ) ) );
500 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 501 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
501 SLOT( itemStateChanged( QListViewItem * ) ) ); 502 SLOT( itemStateChanged( QListViewItem * ) ) );
502 503
503#if 0 504#if 0
504 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 505 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
505 SLOT(selectionChanged(QListViewItem *))); 506 SLOT(selectionChanged(QListViewItem *)));
506 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 507 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
507 SLOT(selectionChanged(QListViewItem *))); 508 SLOT(selectionChanged(QListViewItem *)));
508 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 509 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
509 SLOT(selectionChanged(QListViewItem *))); 510 SLOT(selectionChanged(QListViewItem *)));
510#endif 511#endif
511 512
512 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) )); 513 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) ));
513 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) )); 514 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) ));
514 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) )); 515 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) ));
515 516
516 connect( mTodoListView, SIGNAL(selectionChanged() ), 517 connect( mTodoListView, SIGNAL(selectionChanged() ),
517 SLOT( processSelectionChange() ) ); 518 SLOT( processSelectionChange() ) );
518 connect( mQuickAdd, SIGNAL( returnPressed () ), 519 connect( mQuickAdd, SIGNAL( returnPressed () ),
519 SLOT( addQuickTodo() ) ); 520 SLOT( addQuickTodo() ) );
520 521
521} 522}
522 523
523KOTodoView::~KOTodoView() 524KOTodoView::~KOTodoView()
524{ 525{
525 delete mDocPrefs; 526 delete mDocPrefs;
526} 527}
527 528
528void KOTodoView::jumpToDate () 529void KOTodoView::jumpToDate ()
529{ 530{
530 // if (mActiveItem) { 531 // if (mActiveItem) {
531// mActiveItem->todo()); 532// mActiveItem->todo());
532// if ( mActiveItem->todo()->hasDueDate() ) 533// if ( mActiveItem->todo()->hasDueDate() )
533// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 534// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
534} 535}
535 536
536void KOTodoView::updateView() 537void KOTodoView::updateView()
537{ 538{
538 pendingSubtodo = 0; 539 pendingSubtodo = 0;
539 if ( mBlockUpdate ) { 540 if ( mBlockUpdate ) {
540 //qDebug("blocked "); 541 //qDebug("blocked ");
541 return; 542 return;
542 } 543 }
543 if ( isFlatDisplay ) { 544 if ( isFlatDisplay ) {
544 setAllFlat(); 545 setAllFlat();
545 return; 546 return;
546 } 547 }
547 //qDebug("update "); 548 //qDebug("update ");
548// kdDebug() << "KOTodoView::updateView()" << endl; 549// kdDebug() << "KOTodoView::updateView()" << endl;
549 QFont fo = KOPrefs::instance()->mTodoViewFont; 550 QFont fo = KOPrefs::instance()->mTodoViewFont;
550 mTodoListView->clear(); 551 mTodoListView->clear();
551 if ( mName == "todolistsmall" ) { 552 if ( mName == "todolistsmall" ) {
552 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 553 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
553 int ps = fo.pointSize() -2; 554 int ps = fo.pointSize() -2;
554 if ( ps > 12 ) 555 if ( ps > 12 )
555 ps -= 2; 556 ps -= 2;
556 fo.setPointSize( ps ); 557 fo.setPointSize( ps );
557 } 558 }
558 } 559 }
559 560
560 mTodoListView->setFont( fo ); 561 mTodoListView->setFont( fo );
561 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 562 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
562 //mTodoListView->header()->setMaximumHeight(fm.height()); 563 //mTodoListView->header()->setMaximumHeight(fm.height());
563 QPtrList<Todo> todoList = calendar()->todos(); 564 QPtrList<Todo> todoList = calendar()->todos();
564 565
565/* 566/*
566 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 567 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
567 Event *t; 568 Event *t;
568 for(t = todoList.first(); t; t = todoList.next()) { 569 for(t = todoList.first(); t; t = todoList.next()) {
569 kdDebug() << " " << t->getSummary() << endl; 570 kdDebug() << " " << t->getSummary() << endl;
570 571
571 if (t->getRelatedTo()) { 572 if (t->getRelatedTo()) {
572 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 573 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
573 } 574 }
574 575
575 QPtrList<Event> l = t->getRelations(); 576 QPtrList<Event> l = t->getRelations();
576 Event *c; 577 Event *c;
577 for(c=l.first();c;c=l.next()) { 578 for(c=l.first();c;c=l.next()) {
578 kdDebug() << " - relation: " << c->getSummary() << endl; 579 kdDebug() << " - relation: " << c->getSummary() << endl;
579 } 580 }
580 } 581 }
581*/ 582*/
582 583
583 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 584 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
584 // specific order of events. That means that we have to generate parent items 585 // specific order of events. That means that we have to generate parent items
585 // recursively for proper hierarchical display of Todos. 586 // recursively for proper hierarchical display of Todos.
586 mTodoMap.clear(); 587 mTodoMap.clear();
587 Todo *todo; 588 Todo *todo;
588 todo = todoList.first();// todo; todo = todoList.next()) { 589 todo = todoList.first();// todo; todo = todoList.next()) {
589 while ( todo ) { 590 while ( todo ) {
590 bool next = true; 591 bool next = true;
591 // qDebug("todo %s ", todo->summary().latin1()); 592 // qDebug("todo %s ", todo->summary().latin1());
592 Incidence *incidence = todo->relatedTo(); 593 Incidence *incidence = todo->relatedTo();
@@ -699,523 +700,531 @@ void KOTodoView::updateConfig()
699 700
700QPtrList<Incidence> KOTodoView::selectedIncidences() 701QPtrList<Incidence> KOTodoView::selectedIncidences()
701{ 702{
702 QPtrList<Incidence> selected; 703 QPtrList<Incidence> selected;
703 704
704 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 705 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
705// if (!item) item = mActiveItem; 706// if (!item) item = mActiveItem;
706 if (item) selected.append(item->todo()); 707 if (item) selected.append(item->todo());
707 708
708 return selected; 709 return selected;
709} 710}
710 711
711QPtrList<Todo> KOTodoView::selectedTodos() 712QPtrList<Todo> KOTodoView::selectedTodos()
712{ 713{
713 QPtrList<Todo> selected; 714 QPtrList<Todo> selected;
714 715
715 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 716 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
716// if (!item) item = mActiveItem; 717// if (!item) item = mActiveItem;
717 if (item) selected.append(item->todo()); 718 if (item) selected.append(item->todo());
718 719
719 return selected; 720 return selected;
720} 721}
721 722
722void KOTodoView::changeEventDisplay(Event *, int) 723void KOTodoView::changeEventDisplay(Event *, int)
723{ 724{
724 updateView(); 725 updateView();
725} 726}
726 727
727void KOTodoView::showDates(const QDate &, const QDate &) 728void KOTodoView::showDates(const QDate &, const QDate &)
728{ 729{
729} 730}
730 731
731void KOTodoView::showEvents(QPtrList<Event>) 732void KOTodoView::showEvents(QPtrList<Event>)
732{ 733{
733 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 734 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
734} 735}
735 736
736void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 737void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
737 const QDate &td) 738 const QDate &td)
738{ 739{
739#ifndef KORG_NOPRINTER 740#ifndef KORG_NOPRINTER
740 calPrinter->preview(CalPrinter::Todolist, fd, td); 741 calPrinter->preview(CalPrinter::Todolist, fd, td);
741#endif 742#endif
742} 743}
743 744
744void KOTodoView::editItem(QListViewItem *item ) 745void KOTodoView::editItem(QListViewItem *item )
745{ 746{
746 // qDebug("editItem(QListViewItem *item ) "); 747 // qDebug("editItem(QListViewItem *item ) ");
747 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 748 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
748} 749}
749 750
750void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 751void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
751{ 752{
752 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 753 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
753} 754}
754 755
755void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 756void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
756{ 757{
757 pendingSubtodo = 0; 758 pendingSubtodo = 0;
758 mActiveItem = (KOTodoViewItem *)item; 759 mActiveItem = (KOTodoViewItem *)item;
759 if (item) { 760 if (item) {
760 switch (column){ 761 switch (column){
761 case 1: 762 case 1:
762 mPriorityPopupMenu->popup(QCursor::pos ()); break; 763 mPriorityPopupMenu->popup(QCursor::pos ()); break;
763 case 2: 764 case 2:
764 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 765 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
765 case 3: 766 case 3:
766 moveTodo(); 767 moveTodo();
767 break; 768 break;
768 case 8: 769 case 8:
769 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 770 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
770 default: 771 default:
771 mItemPopupMenu->popup(QCursor::pos()); 772 mItemPopupMenu->popup(QCursor::pos());
772 } 773 }
773 } else mPopupMenu->popup(QCursor::pos()); 774 } else mPopupMenu->popup(QCursor::pos());
774} 775}
775void KOTodoView::newTodo() 776void KOTodoView::newTodo()
776{ 777{
777 emit newTodoSignal(); 778 emit newTodoSignal();
778} 779}
779 780
780void KOTodoView::newSubTodo() 781void KOTodoView::newSubTodo()
781{ 782{
782 if (mActiveItem) { 783 if (mActiveItem) {
783 emit newSubTodoSignal(mActiveItem->todo()); 784 emit newSubTodoSignal(mActiveItem->todo());
784 } 785 }
785} 786}
786void KOTodoView::unparentTodo() 787void KOTodoView::unparentTodo()
787{ 788{
788 if (mActiveItem) { 789 if (mActiveItem) {
789 emit unparentTodoSignal(mActiveItem->todo()); 790 emit unparentTodoSignal(mActiveItem->todo());
790 } 791 }
791} 792}
792 793
793void KOTodoView::reparentTodo() 794void KOTodoView::reparentTodo()
794{ 795{
795 if (mActiveItem) { 796 if (mActiveItem) {
796 qDebug("KOTodoView::reparentTodo() "); 797 qDebug("KOTodoView::reparentTodo() ");
797 topLevelWidget()->setCaption(i18n("Click on new parent item")); 798 topLevelWidget()->setCaption(i18n("Click on new parent item"));
798 pendingSubtodo = mActiveItem; 799 pendingSubtodo = mActiveItem;
799 } 800 }
800} 801}
801void KOTodoView::editTodo() 802void KOTodoView::editTodo()
802{ 803{
803 if (mActiveItem) { 804 if (mActiveItem) {
804 emit editTodoSignal(mActiveItem->todo()); 805 emit editTodoSignal(mActiveItem->todo());
805 } 806 }
806} 807}
807void KOTodoView::cloneTodo() 808void KOTodoView::cloneTodo()
808{ 809{
809 if (mActiveItem) { 810 if (mActiveItem) {
810 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 811 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
811 } 812 }
812} 813}
813void KOTodoView::cancelTodo() 814void KOTodoView::cancelTodo()
814{ 815{
815 if (mActiveItem) { 816 if (mActiveItem) {
816 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 817 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
817 } 818 }
818} 819}
819void KOTodoView::moveTodo() 820void KOTodoView::moveTodo()
820{ 821{
821 if (mActiveItem) { 822 if (mActiveItem) {
822 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 823 emit moveTodoSignal((Incidence*)mActiveItem->todo());
823 } 824 }
824} 825}
825void KOTodoView::beamTodo() 826void KOTodoView::beamTodo()
826{ 827{
827 if (mActiveItem) { 828 if (mActiveItem) {
828 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 829 emit beamTodoSignal((Incidence*)mActiveItem->todo());
829 } 830 }
830} 831}
831 832
832 833
833void KOTodoView::showTodo() 834void KOTodoView::showTodo()
834{ 835{
835 if (mActiveItem) { 836 if (mActiveItem) {
836 emit showTodoSignal(mActiveItem->todo()); 837 emit showTodoSignal(mActiveItem->todo());
837 } 838 }
838} 839}
839 840
840void KOTodoView::deleteTodo() 841void KOTodoView::deleteTodo()
841{ 842{
842 if (mActiveItem) { 843 if (mActiveItem) {
843 emit deleteTodoSignal(mActiveItem->todo()); 844 emit deleteTodoSignal(mActiveItem->todo());
844 } 845 }
845} 846}
846 847
847void KOTodoView::setNewPriority(int index) 848void KOTodoView::setNewPriority(int index)
848{ 849{
849 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 850 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
850 mActiveItem->todo()->setPriority(mPriority[index]); 851 mActiveItem->todo()->setPriority(mPriority[index]);
851 mActiveItem->construct(); 852 mActiveItem->construct();
852 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 853 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
853 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 854 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
854 } 855 }
855} 856}
856 857
857void KOTodoView::setNewPercentage(int index) 858void KOTodoView::setNewPercentage(int index)
858{ 859{
859 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 860 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
860 if (mPercentage[index] == 100) { 861 if (mPercentage[index] == 100) {
861 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 862 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
862 } else { 863 } else {
863 mActiveItem->todo()->setCompleted(false); 864 mActiveItem->todo()->setCompleted(false);
864 } 865 }
865 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 866 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
866 mActiveItem->construct(); 867 mActiveItem->construct();
867 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 868 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
868 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 869 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
869 } 870 }
870} 871}
871 872
872 873
873QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 874QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
874{ 875{
875 QPopupMenu* tempMenu = new QPopupMenu (this); 876 QPopupMenu* tempMenu = new QPopupMenu (this);
876 QStringList checkedCategories = todoItem->todo()->categories (); 877 QStringList checkedCategories = todoItem->todo()->categories ();
877 878
878 tempMenu->setCheckable (true); 879 tempMenu->setCheckable (true);
879 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 880 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
880 it != KOPrefs::instance()->mCustomCategories.end (); 881 it != KOPrefs::instance()->mCustomCategories.end ();
881 ++it) { 882 ++it) {
882 int index = tempMenu->insertItem (*it); 883 int index = tempMenu->insertItem (*it);
883 mCategory[index] = *it; 884 mCategory[index] = *it;
884 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 885 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
885 } 886 }
886 887
887 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 888 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
888 return tempMenu; 889 return tempMenu;
889 890
890 891
891} 892}
892void KOTodoView::changedCategories(int index) 893void KOTodoView::changedCategories(int index)
893{ 894{
894 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 895 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
895 QStringList categories = mActiveItem->todo()->categories (); 896 QStringList categories = mActiveItem->todo()->categories ();
896 if (categories.find (mCategory[index]) != categories.end ()) 897 if (categories.find (mCategory[index]) != categories.end ())
897 categories.remove (mCategory[index]); 898 categories.remove (mCategory[index]);
898 else 899 else
899 categories.insert (categories.end(), mCategory[index]); 900 categories.insert (categories.end(), mCategory[index]);
900 categories.sort (); 901 categories.sort ();
901 mActiveItem->todo()->setCategories (categories); 902 mActiveItem->todo()->setCategories (categories);
902 mActiveItem->construct(); 903 mActiveItem->construct();
903 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 904 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
904 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 905 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
905 } 906 }
906} 907}
907void KOTodoView::itemDoubleClicked(QListViewItem *item) 908void KOTodoView::itemDoubleClicked(QListViewItem *item)
908{ 909{
909 if ( pendingSubtodo != 0 ) { 910 if ( pendingSubtodo != 0 ) {
910 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 911 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
911 } 912 }
912 pendingSubtodo = 0; 913 pendingSubtodo = 0;
913 if (!item) { 914 if (!item) {
914 newTodo(); 915 newTodo();
915 return; 916 return;
916 } 917 }
917 if ( KOPrefs::instance()->mEditOnDoubleClick ) 918 if ( KOPrefs::instance()->mEditOnDoubleClick )
918 editItem( item ); 919 editItem( item );
919 else 920 else
920 showItem( item , QPoint(), 0 ); 921 showItem( item , QPoint(), 0 );
921} 922}
922void KOTodoView::itemClicked(QListViewItem *item) 923void KOTodoView::itemClicked(QListViewItem *item)
923{ 924{
924 925
925 if (!item) { 926 if (!item) {
926 if ( pendingSubtodo != 0 ) { 927 if ( pendingSubtodo != 0 ) {
927 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 928 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
928 } 929 }
929 pendingSubtodo = 0; 930 pendingSubtodo = 0;
930 return; 931 return;
931 } 932 }
932 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 933 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
933 if ( pendingSubtodo != 0 ) { 934 if ( pendingSubtodo != 0 ) {
934 bool allowReparent = true; 935 bool allowReparent = true;
935 QListViewItem *par = item; 936 QListViewItem *par = item;
936 while ( par ) { 937 while ( par ) {
937 if ( par == pendingSubtodo ) { 938 if ( par == pendingSubtodo ) {
938 allowReparent = false; 939 allowReparent = false;
939 break; 940 break;
940 } 941 }
941 par = par->parent(); 942 par = par->parent();
942 } 943 }
943 if ( !allowReparent ) { 944 if ( !allowReparent ) {
944 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 945 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
945 qDebug("Recursive reparenting not possible "); 946 qDebug("Recursive reparenting not possible ");
946 pendingSubtodo = 0; 947 pendingSubtodo = 0;
947 } else { 948 } else {
948 Todo* newParent = todoItem->todo(); 949 Todo* newParent = todoItem->todo();
949 Todo* newSub = pendingSubtodo->todo(); 950 Todo* newSub = pendingSubtodo->todo();
950 pendingSubtodo = 0; 951 pendingSubtodo = 0;
951 emit reparentTodoSignal( newParent,newSub ); 952 emit reparentTodoSignal( newParent,newSub );
952 return; 953 return;
953 } 954 }
954 } 955 }
955 int completed = todoItem->todo()->isCompleted(); // Completed or not? 956#if 0
956 957 // handled by the item itself
958 bool completed = todoItem->todo()->isCompleted(); // Completed or not?
959 qDebug("com %d ",completed );
960 qDebug("itemclicked ");
957 if (todoItem->isOn()) { 961 if (todoItem->isOn()) {
962 qDebug("on ");
958 if (!completed) { 963 if (!completed) {
964 qDebug("set true ");
959 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 965 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
960 } 966 }
961 } else { 967 } else {
968 qDebug("not on ");
962 if (completed) { 969 if (completed) {
970 qDebug("set false ");
963 todoItem->todo()->setCompleted(false); 971 todoItem->todo()->setCompleted(false);
964 } 972 }
965 } 973 }
974#endif
966} 975}
967 976
968void KOTodoView::setDocumentId( const QString &id ) 977void KOTodoView::setDocumentId( const QString &id )
969{ 978{
970 kdDebug() << "KOTodoView::setDocumentId()" << endl; 979 kdDebug() << "KOTodoView::setDocumentId()" << endl;
971 980
972 mDocPrefs->setDoc( id ); 981 mDocPrefs->setDoc( id );
973} 982}
974 983
975void KOTodoView::itemStateChanged( QListViewItem *item ) 984void KOTodoView::itemStateChanged( QListViewItem *item )
976{ 985{
977 if (!item) return; 986 if (!item) return;
978 987
979 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 988 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
980 989
981// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 990// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
982 991
983 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 992 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
984} 993}
985 994
986void KOTodoView::saveLayout(KConfig *config, const QString &group) const 995void KOTodoView::saveLayout(KConfig *config, const QString &group) const
987{ 996{
988 mTodoListView->saveLayout(config,group); 997 mTodoListView->saveLayout(config,group);
989} 998}
990 999
991void KOTodoView::restoreLayout(KConfig *config, const QString &group) 1000void KOTodoView::restoreLayout(KConfig *config, const QString &group)
992{ 1001{
993 mTodoListView->restoreLayout(config,group); 1002 mTodoListView->restoreLayout(config,group);
994} 1003}
995 1004
996void KOTodoView::processSelectionChange() 1005void KOTodoView::processSelectionChange()
997{ 1006{
998// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 1007// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
999 1008
1000 KOTodoViewItem *item = 1009 KOTodoViewItem *item =
1001 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 1010 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
1002 1011
1003 if ( !item ) { 1012 if ( !item ) {
1004 emit incidenceSelected( 0 ); 1013 emit incidenceSelected( 0 );
1005 } else { 1014 } else {
1006 emit incidenceSelected( item->todo() ); 1015 emit incidenceSelected( item->todo() );
1007 } 1016 }
1008} 1017}
1009 1018
1010void KOTodoView::modified(bool b) 1019void KOTodoView::modified(bool b)
1011{ 1020{
1012 emit isModified(b); 1021 emit isModified(b);
1013} 1022}
1014void KOTodoView::setTodoModified( Todo* todo ) 1023void KOTodoView::setTodoModified( Todo* todo )
1015{ 1024{
1016 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1025 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1017} 1026}
1018void KOTodoView::clearSelection() 1027void KOTodoView::clearSelection()
1019{ 1028{
1020 mTodoListView->selectAll( false ); 1029 mTodoListView->selectAll( false );
1021} 1030}
1022void KOTodoView::setAllOpen() 1031void KOTodoView::setAllOpen()
1023{ 1032{
1024 if ( isFlatDisplay ) { 1033 if ( isFlatDisplay ) {
1025 isFlatDisplay = false; 1034 isFlatDisplay = false;
1026 mPopupMenu->setItemChecked( 8,false ); 1035 mPopupMenu->setItemChecked( 8,false );
1027 updateView(); 1036 updateView();
1028 } 1037 }
1029 setOpen(mTodoListView->firstChild(), true); 1038 setOpen(mTodoListView->firstChild(), true);
1030} 1039}
1031void KOTodoView::setAllClose() 1040void KOTodoView::setAllClose()
1032{ 1041{
1033 if ( isFlatDisplay ) { 1042 if ( isFlatDisplay ) {
1034 isFlatDisplay = false; 1043 isFlatDisplay = false;
1035 mPopupMenu->setItemChecked( 8,false ); 1044 mPopupMenu->setItemChecked( 8,false );
1036 updateView(); 1045 updateView();
1037 } 1046 }
1038 setOpen(mTodoListView->firstChild(), false); 1047 setOpen(mTodoListView->firstChild(), false);
1039} 1048}
1040void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1049void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1041{ 1050{
1042 1051
1043 while ( item ) { 1052 while ( item ) {
1044 setOpen( item->firstChild(), setOpenI ); 1053 setOpen( item->firstChild(), setOpenI );
1045 item->setOpen( setOpenI ); 1054 item->setOpen( setOpenI );
1046 item = item->nextSibling(); 1055 item = item->nextSibling();
1047 } 1056 }
1048} 1057}
1049 1058
1050void KOTodoView::setAllFlat() 1059void KOTodoView::setAllFlat()
1051{ 1060{
1052 if ( isFlatDisplay ) { 1061 if ( isFlatDisplay ) {
1053 isFlatDisplay = false; 1062 isFlatDisplay = false;
1054 mPopupMenu->setItemChecked( 8,false ); 1063 mPopupMenu->setItemChecked( 8,false );
1055 updateView(); 1064 updateView();
1056 return; 1065 return;
1057 } 1066 }
1058 pendingSubtodo = 0; 1067 pendingSubtodo = 0;
1059 if ( mBlockUpdate ) { 1068 if ( mBlockUpdate ) {
1060 return; 1069 return;
1061 } 1070 }
1062 mPopupMenu->setItemChecked( 8,true ); 1071 mPopupMenu->setItemChecked( 8,true );
1063 isFlatDisplay = true; 1072 isFlatDisplay = true;
1064 QPtrList<Todo> todoList = calendar()->todos(); 1073 QPtrList<Todo> todoList = calendar()->todos();
1065 mTodoMap.clear(); 1074 mTodoMap.clear();
1066 mTodoListView->clear(); 1075 mTodoListView->clear();
1067 Todo *todo; 1076 Todo *todo;
1068 for(todo = todoList.first(); todo; todo = todoList.next()) { 1077 for(todo = todoList.first(); todo; todo = todoList.next()) {
1069 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1078 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1070 mTodoMap.insert(todo,todoItem); 1079 mTodoMap.insert(todo,todoItem);
1071 } 1080 }
1072 mTodoListView->setFocus(); 1081 mTodoListView->setFocus();
1073 processSelectionChange(); 1082 processSelectionChange();
1074} 1083}
1075 1084
1076void KOTodoView::purgeCompleted() 1085void KOTodoView::purgeCompleted()
1077{ 1086{
1078 emit purgeCompletedSignal(); 1087 emit purgeCompletedSignal();
1079} 1088}
1080void KOTodoView::toggleQuickTodo() 1089void KOTodoView::toggleQuickTodo()
1081{ 1090{
1082 if ( mQuickAdd->isVisible() ) { 1091 if ( mQuickAdd->isVisible() ) {
1083 mQuickAdd->hide(); 1092 mQuickAdd->hide();
1084 KOPrefs::instance()->mEnableQuickTodo = false; 1093 KOPrefs::instance()->mEnableQuickTodo = false;
1085 } 1094 }
1086 else { 1095 else {
1087 mQuickAdd->show(); 1096 mQuickAdd->show();
1088 KOPrefs::instance()->mEnableQuickTodo = true; 1097 KOPrefs::instance()->mEnableQuickTodo = true;
1089 } 1098 }
1090 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1099 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1091 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1100 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1092} 1101}
1093 1102
1094void KOTodoView::toggleRunning() 1103void KOTodoView::toggleRunning()
1095{ 1104{
1096 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1105 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1097 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1106 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1098 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1107 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1099 updateView(); 1108 updateView();
1100} 1109}
1101 1110
1102void KOTodoView::toggleCompleted() 1111void KOTodoView::toggleCompleted()
1103{ 1112{
1104 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1113 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1105 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1114 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1106 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1115 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1107 updateView(); 1116 updateView();
1108} 1117}
1109 1118
1110void KOTodoView::addQuickTodo() 1119void KOTodoView::addQuickTodo()
1111{ 1120{
1112 Todo *todo = new Todo(); 1121 Todo *todo = new Todo();
1113 todo->setSummary(mQuickAdd->text()); 1122 todo->setSummary(mQuickAdd->text());
1114 todo->setOrganizer(KOPrefs::instance()->email()); 1123 todo->setOrganizer(KOPrefs::instance()->email());
1115 CalFilter * cf = mCalendar->filter(); 1124 CalFilter * cf = mCalendar->filter();
1116 if ( cf ) { 1125 if ( cf ) {
1117 if ( cf->isEnabled()&& cf->showCategories()) { 1126 if ( cf->isEnabled()&& cf->showCategories()) {
1118 todo->setCategories(cf->categoryList()); 1127 todo->setCategories(cf->categoryList());
1119 } 1128 }
1120 if ( cf->isEnabled() ) 1129 if ( cf->isEnabled() )
1121 todo->setSecrecy( cf->getSecrecy()); 1130 todo->setSecrecy( cf->getSecrecy());
1122 } 1131 }
1123 mCalendar->addTodo(todo); 1132 mCalendar->addTodo(todo);
1124 mQuickAdd->setText(""); 1133 mQuickAdd->setText("");
1125 todoModified (todo, KOGlobals::EVENTADDED ); 1134 todoModified (todo, KOGlobals::EVENTADDED );
1126 updateView(); 1135 updateView();
1127} 1136}
1128void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1137void KOTodoView::keyPressEvent ( QKeyEvent * e )
1129{ 1138{
1130 // e->ignore(); 1139 // e->ignore();
1131 //return; 1140 //return;
1132 //qDebug("KOTodoView::keyPressEvent "); 1141 //qDebug("KOTodoView::keyPressEvent ");
1133 switch ( e->key() ) { 1142 switch ( e->key() ) {
1134 case Qt::Key_Down: 1143 case Qt::Key_Down:
1135 case Qt::Key_Up: 1144 case Qt::Key_Up:
1136 QWidget::keyPressEvent ( e ); 1145 QWidget::keyPressEvent ( e );
1137 break; 1146 break;
1138 1147
1139 case Qt::Key_Q: 1148 case Qt::Key_Q:
1140 toggleQuickTodo(); 1149 toggleQuickTodo();
1141 break; 1150 break;
1142 case Qt::Key_U: 1151 case Qt::Key_U:
1143 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1152 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1144 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1153 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1145 unparentTodo(); 1154 unparentTodo();
1146 e->accept(); 1155 e->accept();
1147 } else 1156 } else
1148 e->ignore(); 1157 e->ignore();
1149 break; 1158 break;
1150 case Qt::Key_S: 1159 case Qt::Key_S:
1151 if ( e->state() == Qt::ControlButton ) { 1160 if ( e->state() == Qt::ControlButton ) {
1152 e->ignore(); 1161 e->ignore();
1153 break; 1162 break;
1154 } 1163 }
1155 if ( e->state() == Qt::ShiftButton ) { 1164 if ( e->state() == Qt::ShiftButton ) {
1156 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1165 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1157 reparentTodo(); 1166 reparentTodo();
1158 e->accept(); 1167 e->accept();
1159 } else 1168 } else
1160 e->ignore(); 1169 e->ignore();
1161 break; 1170 break;
1162 case Qt::Key_P: 1171 case Qt::Key_P:
1163 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1172 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1164 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1173 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1165 if ( pendingSubtodo ) 1174 if ( pendingSubtodo )
1166 itemClicked(mActiveItem); 1175 itemClicked(mActiveItem);
1167 e->accept(); 1176 e->accept();
1168 } else 1177 } else
1169 e->ignore(); 1178 e->ignore();
1170 break; 1179 break;
1171 case Qt::Key_Escape: 1180 case Qt::Key_Escape:
1172 if ( pendingSubtodo ) { 1181 if ( pendingSubtodo ) {
1173 itemClicked(0); 1182 itemClicked(0);
1174 e->accept(); 1183 e->accept();
1175 } else 1184 } else
1176 e->ignore(); 1185 e->ignore();
1177 break; 1186 break;
1178 default: 1187 default:
1179 e->ignore(); 1188 e->ignore();
1180 } 1189 }
1181 1190
1182 if ( true ) { 1191 if ( true ) {
1183 if ( e->key() == Qt::Key_I ) { 1192 if ( e->key() == Qt::Key_I ) {
1184 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1193 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1185 if ( cn ) { 1194 if ( cn ) {
1186 mActiveItem = cn; 1195 mActiveItem = cn;
1187 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1196 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1188 if ( ci ){ 1197 if ( ci ){
1189 showTodo(); 1198 showTodo();
1190 cn = (KOTodoViewItem*)cn->itemBelow(); 1199 cn = (KOTodoViewItem*)cn->itemBelow();
1191 if ( cn ) { 1200 if ( cn ) {
1192 mTodoListView->setCurrentItem ( cn ); 1201 mTodoListView->setCurrentItem ( cn );
1193 mTodoListView->ensureItemVisible ( cn ); 1202 mTodoListView->ensureItemVisible ( cn );
1194 } 1203 }
1195 1204
1196 } 1205 }
1197 } 1206 }
1198 e->accept(); 1207 e->accept();
1199 1208
1200 } 1209 }
1201 1210
1202 } 1211 }
1203 1212
1204} 1213}
1205void KOTodoView::updateTodo( Todo * t, int type ) 1214void KOTodoView::updateTodo( Todo * t, int type )
1206{ 1215{
1207 if ( mBlockUpdate) 1216 if ( mBlockUpdate)
1208 return; 1217 return;
1209 1218
1210 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1219 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1211 itemIterator = mTodoMap.find(t); 1220 itemIterator = mTodoMap.find(t);
1212 if (itemIterator != mTodoMap.end()) { 1221 if (itemIterator != mTodoMap.end()) {
1213 (*itemIterator)->construct(); 1222 (*itemIterator)->construct();
1214 } else { 1223 } else {
1215 if ( type == KOGlobals::EVENTADDED ) { 1224 if ( type == KOGlobals::EVENTADDED ) {
1216 insertTodoItem( t ); 1225 insertTodoItem( t );
1217 } 1226 }
1218 } 1227 }
1219 1228
1220} 1229}
1221 1230
diff --git a/korganizer/kotodoviewitem.cpp b/korganizer/kotodoviewitem.cpp
index 21ecb73..2822237 100644
--- a/korganizer/kotodoviewitem.cpp
+++ b/korganizer/kotodoviewitem.cpp
@@ -1,457 +1,456 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <klocale.h> 20#include <klocale.h>
21#include <kdebug.h> 21#include <kdebug.h>
22#include <qapp.h> 22#include <qapp.h>
23 23
24#include <kiconloader.h> 24#include <kiconloader.h>
25#include "kotodoviewitem.h" 25#include "kotodoviewitem.h"
26#include "kotodoview.h" 26#include "kotodoview.h"
27#include "koprefs.h" 27#include "koprefs.h"
28 28
29KOTodoViewItem::KOTodoViewItem( QListView *parent, Todo *todo, KOTodoView *kotodo) 29KOTodoViewItem::KOTodoViewItem( QListView *parent, Todo *todo, KOTodoView *kotodo)
30 : QCheckListItem( parent , "", CheckBox ), mTodo( todo ), mTodoView( kotodo ) 30 : QCheckListItem( parent , "", CheckBox ), mTodo( todo ), mTodoView( kotodo )
31{ 31{
32 construct(); 32 construct();
33} 33}
34 34
35KOTodoViewItem::KOTodoViewItem( KOTodoViewItem *parent, Todo *todo, KOTodoView *kotodo ) 35KOTodoViewItem::KOTodoViewItem( KOTodoViewItem *parent, Todo *todo, KOTodoView *kotodo )
36 : QCheckListItem( parent, "", CheckBox ), mTodo( todo ), mTodoView( kotodo ) 36 : QCheckListItem( parent, "", CheckBox ), mTodo( todo ), mTodoView( kotodo )
37{ 37{
38 construct(); 38 construct();
39} 39}
40 40
41QString KOTodoViewItem::key(int column,bool) const 41QString KOTodoViewItem::key(int column,bool) const
42{ 42{
43 QMap<int,QString>::ConstIterator it = mKeyMap.find(column); 43 QMap<int,QString>::ConstIterator it = mKeyMap.find(column);
44 if (it == mKeyMap.end()) { 44 if (it == mKeyMap.end()) {
45 return text(column).lower(); 45 return text(column).lower();
46 } else { 46 } else {
47 return *it; 47 return *it;
48 } 48 }
49} 49}
50 50
51void KOTodoViewItem:: setup() 51void KOTodoViewItem:: setup()
52{ 52{
53 53
54 int h = 20; 54 int h = 20;
55 if ( listView () ) { 55 if ( listView () ) {
56 QFontMetrics fm ( listView ()->font () ); 56 QFontMetrics fm ( listView ()->font () );
57 h = fm.height(); 57 h = fm.height();
58 } 58 }
59 setHeight( h ); 59 setHeight( h );
60 60
61} 61}
62void KOTodoViewItem::setSortKey(int column,const QString &key) 62void KOTodoViewItem::setSortKey(int column,const QString &key)
63{ 63{
64 mKeyMap.insert(column,key); 64 mKeyMap.insert(column,key);
65} 65}
66 66
67#if QT_VERSION >= 0x030000 67#if QT_VERSION >= 0x030000
68void KOTodoViewItem::paintBranches(QPainter *p,const QColorGroup & cg,int w, 68void KOTodoViewItem::paintBranches(QPainter *p,const QColorGroup & cg,int w,
69 int y,int h) 69 int y,int h)
70{ 70{
71 QListViewItem::paintBranches(p,cg,w,y,h); 71 QListViewItem::paintBranches(p,cg,w,y,h);
72} 72}
73#else 73#else
74#endif 74#endif
75 75
76void KOTodoViewItem::construct() 76void KOTodoViewItem::construct()
77{ 77{
78 // qDebug("KOTodoViewItem::construct() "); 78 // qDebug("KOTodoViewItem::construct() ");
79 m_init = true; 79 m_init = true;
80 QString keyd = "=="; 80 QString keyd = "==";
81 QString keyt = "=="; 81 QString keyt = "==";
82 QString skeyd = "=="; 82 QString skeyd = "==";
83 QString skeyt = "=="; 83 QString skeyt = "==";
84 84
85 setOn(mTodo->isCompleted()); 85 setOn(mTodo->isCompleted());
86 setText(0,mTodo->summary()); 86 setText(0,mTodo->summary());
87 setText(1,QString::number(mTodo->priority())); 87 setText(1,QString::number(mTodo->priority()));
88 setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); 88 setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete())));
89 if (mTodo->percentComplete()<100) { 89 if (mTodo->percentComplete()<100) {
90 if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); 90 if (mTodo->isCompleted()) setSortKey(2,QString::number(999));
91 else setSortKey(2,QString::number(mTodo->percentComplete())); 91 else setSortKey(2,QString::number(mTodo->percentComplete()));
92 } 92 }
93 else { 93 else {
94 if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); 94 if (mTodo->isCompleted()) setSortKey(2,QString::number(999));
95 else setSortKey(2,QString::number(99)); 95 else setSortKey(2,QString::number(99));
96 } 96 }
97 if (mTodo->hasDueDate()) { 97 if (mTodo->hasDueDate()) {
98 setText(3, mTodo->dtDueDateStr()); 98 setText(3, mTodo->dtDueDateStr());
99 QDate d = mTodo->dtDue().date(); 99 QDate d = mTodo->dtDue().date();
100 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 100 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
101 // setSortKey(3,keyd); 101 // setSortKey(3,keyd);
102 if (mTodo->doesFloat()) { 102 if (mTodo->doesFloat()) {
103 setText(4,""); 103 setText(4,"");
104 } 104 }
105 else { 105 else {
106 setText(4,mTodo->dtDueTimeStr()); 106 setText(4,mTodo->dtDueTimeStr());
107 QTime t = mTodo->dtDue().time(); 107 QTime t = mTodo->dtDue().time();
108 keyt.sprintf("%02d%02d",t.hour(),t.minute()); 108 keyt.sprintf("%02d%02d",t.hour(),t.minute());
109 //setSortKey(4,keyt); 109 //setSortKey(4,keyt);
110 } 110 }
111 } else { 111 } else {
112 setText(3,""); 112 setText(3,"");
113 setText(4,""); 113 setText(4,"");
114 } 114 }
115 setSortKey(3,keyd); 115 setSortKey(3,keyd);
116 setSortKey(4,keyt); 116 setSortKey(4,keyt);
117 117
118 if (mTodo->isCompleted()) setSortKey(1,"6" + QString::number(mTodo->priority())+keyd+keyt); 118 if (mTodo->isCompleted()) setSortKey(1,"6" + QString::number(mTodo->priority())+keyd+keyt);
119 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); 119 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt);
120 120
121 121
122 122
123 if (mTodo->hasStartDate()) { 123 if (mTodo->hasStartDate()) {
124 setText(5, mTodo->dtStartDateStr()); 124 setText(5, mTodo->dtStartDateStr());
125 QDate d = mTodo->dtStart().date(); 125 QDate d = mTodo->dtStart().date();
126 skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 126 skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
127 127
128 if (mTodo->doesFloat()) { 128 if (mTodo->doesFloat()) {
129 setText(6,""); 129 setText(6,"");
130 } 130 }
131 else { 131 else {
132 setText(6,mTodo->dtStartTimeStr()); 132 setText(6,mTodo->dtStartTimeStr());
133 QTime t = mTodo->dtStart().time(); 133 QTime t = mTodo->dtStart().time();
134 skeyt.sprintf("%02d%02d",t.hour(),t.minute()); 134 skeyt.sprintf("%02d%02d",t.hour(),t.minute());
135 135
136 } 136 }
137 } else { 137 } else {
138 setText(5,""); 138 setText(5,"");
139 setText(6,""); 139 setText(6,"");
140 } 140 }
141 setSortKey(5,skeyd); 141 setSortKey(5,skeyd);
142 setSortKey(6,skeyt); 142 setSortKey(6,skeyt);
143 143
144 setText(7,mTodo->cancelled() ? i18n("Yes") : i18n("No")); 144 setText(7,mTodo->cancelled() ? i18n("Yes") : i18n("No"));
145 setText(8,mTodo->categoriesStr()); 145 setText(8,mTodo->categoriesStr());
146 146
147#if 0 147#if 0
148 // Find sort id in description. It's the text behind the last '#' character 148 // Find sort id in description. It's the text behind the last '#' character
149 // found in the description. White spaces are removed from beginning and end 149 // found in the description. White spaces are removed from beginning and end
150 // of sort id. 150 // of sort id.
151 int pos = mTodo->description().findRev('#'); 151 int pos = mTodo->description().findRev('#');
152 if (pos < 0) { 152 if (pos < 0) {
153 setText(6,""); 153 setText(6,"");
154 } else { 154 } else {
155 QString str = mTodo->description().mid(pos+1); 155 QString str = mTodo->description().mid(pos+1);
156 str.stripWhiteSpace(); 156 str.stripWhiteSpace();
157 setText(6,str); 157 setText(6,str);
158 } 158 }
159#endif 159#endif
160 160
161 m_known = false; 161 m_known = false;
162 m_init = false; 162 m_init = false;
163 163
164 setMyPixmap(); 164 setMyPixmap();
165 165
166} 166}
167void KOTodoViewItem::setMyPixmap() 167void KOTodoViewItem::setMyPixmap()
168{ 168{
169 int size = 5; 169 int size = 5;
170 QPixmap pixi = QPixmap( 1, 1 ); 170 QPixmap pixi = QPixmap( 1, 1 );
171 // if ( !mTodo->isCompleted() && mTodo->hasDueDate() && mTodo->dtDue() < QDateTime::currentDateTime() ) { 171 // if ( !mTodo->isCompleted() && mTodo->hasDueDate() && mTodo->dtDue() < QDateTime::currentDateTime() ) {
172// pixi = SmallIcon("redcross16"); 172// pixi = SmallIcon("redcross16");
173// } else { 173// } else {
174 QPainter p; 174 QPainter p;
175 175
176 int pixSize = 0; 176 int pixSize = 0;
177 QPixmap pPix = QPixmap( size, size ); 177 QPixmap pPix = QPixmap( size, size );
178 if ( mTodo->description().length() > 0 ) { 178 if ( mTodo->description().length() > 0 ) {
179 pixi.resize(size, pixSize+size); 179 pixi.resize(size, pixSize+size);
180 pPix.fill( Qt::darkGreen ); 180 pPix.fill( Qt::darkGreen );
181 p.begin( &pixi ); 181 p.begin( &pixi );
182 p. drawPixmap ( 0, pixSize, pPix); 182 p. drawPixmap ( 0, pixSize, pPix);
183 p.end(); 183 p.end();
184 pixSize += size; 184 pixSize += size;
185 } 185 }
186 if ( mTodo->isAlarmEnabled() ) { 186 if ( mTodo->isAlarmEnabled() ) {
187 pixi.resize(size, pixSize+size); 187 pixi.resize(size, pixSize+size);
188 pPix.fill( Qt::red ); 188 pPix.fill( Qt::red );
189 p.begin( &pixi ); 189 p.begin( &pixi );
190 p. drawPixmap ( 0, pixSize, pPix); 190 p. drawPixmap ( 0, pixSize, pPix);
191 p.end(); 191 p.end();
192 pixSize += size; 192 pixSize += size;
193 } 193 }
194 // } 194 // }
195 if ( pixi.width() > 1 ) { 195 if ( pixi.width() > 1 ) {
196 setPixmap ( 0,pixi ) ; 196 setPixmap ( 0,pixi ) ;
197 } else { 197 } else {
198 setPixmap ( 0,QPixmap() ) ; 198 setPixmap ( 0,QPixmap() ) ;
199 } 199 }
200} 200}
201void KOTodoViewItem::stateChange(bool state) 201void KOTodoViewItem::stateChange(bool state)
202{ 202{
203 // qDebug("KOTodoViewItem::stateChange "); 203 // qDebug("KOTodoViewItem::stateChange ");
204 // do not change setting on startup 204 // do not change setting on startup
205 if ( m_init ) return; 205 if ( m_init ) return;
206 206 qDebug("KOTodoViewItem::stateChange ");
207 kdDebug() << "State changed, modified " << state << endl;
208 QString keyd = "=="; 207 QString keyd = "==";
209 QString keyt = "=="; 208 QString keyt = "==";
210 209
211 if (state) mTodo->setCompleted(state); 210 mTodo->setCompleted(state);
212 else mTodo->setPercentComplete(0); 211 if (state) mTodo->setCompleted(QDateTime::currentDateTime());
213 if (isOn()!=state) { 212 if (isOn()!=state) {
214 setOn(state); 213 setOn(state);
215 } 214 }
216 215
217 if (mTodo->hasDueDate()) { 216 if (mTodo->hasDueDate()) {
218 setText(3, mTodo->dtDueDateStr()); 217 setText(3, mTodo->dtDueDateStr());
219 QDate d = mTodo->dtDue().date(); 218 QDate d = mTodo->dtDue().date();
220 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 219 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
221 setSortKey(3,keyd); 220 setSortKey(3,keyd);
222 if (mTodo->doesFloat()) { 221 if (mTodo->doesFloat()) {
223 setText(4,""); 222 setText(4,"");
224 } 223 }
225 else { 224 else {
226 setText(4,mTodo->dtDueTimeStr()); 225 setText(4,mTodo->dtDueTimeStr());
227 QTime t = mTodo->dtDue().time(); 226 QTime t = mTodo->dtDue().time();
228 keyt.sprintf("%02d%02d",t.hour(),t.minute()); 227 keyt.sprintf("%02d%02d",t.hour(),t.minute());
229 setSortKey(4,keyt); 228 setSortKey(4,keyt);
230 } 229 }
231 } 230 }
232 if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt); 231 if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt);
233 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); 232 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt);
234 233
235 setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); 234 setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete())));
236 if (mTodo->percentComplete()<100) { 235 if (mTodo->percentComplete()<100) {
237 if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); 236 if (mTodo->isCompleted()) setSortKey(2,QString::number(999));
238 else setSortKey(2,QString::number(mTodo->percentComplete())); 237 else setSortKey(2,QString::number(mTodo->percentComplete()));
239 } 238 }
240 else { 239 else {
241 if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); 240 if (mTodo->isCompleted()) setSortKey(2,QString::number(999));
242 else setSortKey(2,QString::number(99)); 241 else setSortKey(2,QString::number(99));
243 } 242 }
244 QListViewItem * myChild = firstChild(); 243 QListViewItem * myChild = firstChild();
245 KOTodoViewItem *item; 244 KOTodoViewItem *item;
246 while( myChild ) { 245 while( myChild ) {
247 item = static_cast<KOTodoViewItem*>(myChild); 246 item = static_cast<KOTodoViewItem*>(myChild);
248 item->stateChange(state); 247 item->stateChange(state);
249 myChild = myChild->nextSibling(); 248 myChild = myChild->nextSibling();
250 } 249 }
251 mTodoView->modified(true); 250 mTodoView->modified(true);
252 setMyPixmap(); 251 setMyPixmap();
253 mTodoView->setTodoModified( mTodo ); 252 mTodoView->setTodoModified( mTodo );
254} 253}
255 254
256bool KOTodoViewItem::isAlternate() 255bool KOTodoViewItem::isAlternate()
257{ 256{
258#ifndef KORG_NOLVALTERNATION 257#ifndef KORG_NOLVALTERNATION
259 KOTodoListView *lv = static_cast<KOTodoListView *>(listView()); 258 KOTodoListView *lv = static_cast<KOTodoListView *>(listView());
260 if (lv && lv->alternateBackground().isValid()) 259 if (lv && lv->alternateBackground().isValid())
261 { 260 {
262 KOTodoViewItem *above = 0; 261 KOTodoViewItem *above = 0;
263 above = dynamic_cast<KOTodoViewItem *>(itemAbove()); 262 above = dynamic_cast<KOTodoViewItem *>(itemAbove());
264 m_known = above ? above->m_known : true; 263 m_known = above ? above->m_known : true;
265 if (m_known) 264 if (m_known)
266 { 265 {
267 m_odd = above ? !above->m_odd : false; 266 m_odd = above ? !above->m_odd : false;
268 } 267 }
269 else 268 else
270 { 269 {
271 KOTodoViewItem *item; 270 KOTodoViewItem *item;
272 bool previous = true; 271 bool previous = true;
273 if (QListViewItem::parent()) 272 if (QListViewItem::parent())
274 { 273 {
275 item = dynamic_cast<KOTodoViewItem *>(QListViewItem::parent()); 274 item = dynamic_cast<KOTodoViewItem *>(QListViewItem::parent());
276 if (item) 275 if (item)
277 previous = item->m_odd; 276 previous = item->m_odd;
278 item = dynamic_cast<KOTodoViewItem *>(QListViewItem::parent()->firstChild()); 277 item = dynamic_cast<KOTodoViewItem *>(QListViewItem::parent()->firstChild());
279 } 278 }
280 else 279 else
281 { 280 {
282 item = dynamic_cast<KOTodoViewItem *>(lv->firstChild()); 281 item = dynamic_cast<KOTodoViewItem *>(lv->firstChild());
283 } 282 }
284 283
285 while(item) 284 while(item)
286 { 285 {
287 item->m_odd = previous = !previous; 286 item->m_odd = previous = !previous;
288 item->m_known = true; 287 item->m_known = true;
289 item = dynamic_cast<KOTodoViewItem *>(item->nextSibling()); 288 item = dynamic_cast<KOTodoViewItem *>(item->nextSibling());
290 } 289 }
291 } 290 }
292 return m_odd; 291 return m_odd;
293 } 292 }
294 return false; 293 return false;
295#else 294#else
296 return false; 295 return false;
297#endif 296#endif
298} 297}
299 298
300void KOTodoViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) 299void KOTodoViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
301{ 300{
302 QColorGroup _cg = cg; 301 QColorGroup _cg = cg;
303 QColorGroup::ColorRole role; 302 QColorGroup::ColorRole role;
304 if ( KOPrefs::instance()->mTodoViewUsesForegroundColor ) 303 if ( KOPrefs::instance()->mTodoViewUsesForegroundColor )
305 role = QColorGroup::Text; 304 role = QColorGroup::Text;
306 else 305 else
307 role = QColorGroup::Base; 306 role = QColorGroup::Base;
308 //#ifndef KORG_NOLVALTERNATION 307 //#ifndef KORG_NOLVALTERNATION
309 // if (isAlternate()) 308 // if (isAlternate())
310 // _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground()); 309 // _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground());
311 bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors; 310 bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors;
312 QColor colorToSet; 311 QColor colorToSet;
313 if ( setColor ) { 312 if ( setColor ) {
314 QStringList categories = mTodo->categories(); 313 QStringList categories = mTodo->categories();
315 QString cat = categories.first(); 314 QString cat = categories.first();
316 if ( !cat.isEmpty()) { 315 if ( !cat.isEmpty()) {
317 colorToSet = *(KOPrefs::instance()->categoryColor(cat) ); 316 colorToSet = *(KOPrefs::instance()->categoryColor(cat) );
318 } else 317 } else
319 setColor = false; 318 setColor = false;
320 } 319 }
321 if (mTodo->hasDueDate()) { 320 if (mTodo->hasDueDate()) {
322 if (mTodo->dtDue().date()==QDate::currentDate() && 321 if (mTodo->dtDue().date()==QDate::currentDate() &&
323 !mTodo->isCompleted()) { 322 !mTodo->isCompleted()) {
324 //_cg.setColor( role , KOPrefs::instance()->mTodoDueTodayColor); 323 //_cg.setColor( role , KOPrefs::instance()->mTodoDueTodayColor);
325 colorToSet = KOPrefs::instance()->mTodoDueTodayColor; 324 colorToSet = KOPrefs::instance()->mTodoDueTodayColor;
326 setColor = true; 325 setColor = true;
327 } 326 }
328 if (mTodo->dtDue().date() < QDate::currentDate() && 327 if (mTodo->dtDue().date() < QDate::currentDate() &&
329 !mTodo->isCompleted()) { 328 !mTodo->isCompleted()) {
330 //_cg.setColor( role, KOPrefs::instance()->mTodoOverdueColor); 329 //_cg.setColor( role, KOPrefs::instance()->mTodoOverdueColor);
331 colorToSet = KOPrefs::instance()->mTodoOverdueColor; 330 colorToSet = KOPrefs::instance()->mTodoOverdueColor;
332 setColor = true; 331 setColor = true;
333 } 332 }
334 } 333 }
335 334
336 if ( setColor ) { 335 if ( setColor ) {
337 _cg.setColor(role,colorToSet ); 336 _cg.setColor(role,colorToSet );
338 if ( role == QColorGroup::Base) { 337 if ( role == QColorGroup::Base) {
339 int rgb = colorToSet.red(); 338 int rgb = colorToSet.red();
340 rgb += colorToSet.blue()/2; 339 rgb += colorToSet.blue()/2;
341 rgb += colorToSet.green(); 340 rgb += colorToSet.green();
342 if ( rgb < 200 ) 341 if ( rgb < 200 )
343 _cg.setColor(QColorGroup::Text,Qt::white ); 342 _cg.setColor(QColorGroup::Text,Qt::white );
344 } 343 }
345 } 344 }
346 //#endif 345 //#endif
347 if ( column > 0 ){ 346 if ( column > 0 ){
348 if ( column == 2 && !KOPrefs::instance()->mTodoViewShowsPercentage ) { 347 if ( column == 2 && !KOPrefs::instance()->mTodoViewShowsPercentage ) {
349 p->save(); 348 p->save();
350 int progress = (int)(( (width-6)*mTodo->percentComplete())/100.0 + 0.5); 349 int progress = (int)(( (width-6)*mTodo->percentComplete())/100.0 + 0.5);
351 350
352 p->fillRect( 0, 0, width, height(), _cg.base() ); // background 351 p->fillRect( 0, 0, width, height(), _cg.base() ); // background
353 // p->setPen(Qt::black ); //border 352 // p->setPen(Qt::black ); //border
354 // p->setBrush( KOPrefs::instance()->mHighlightColorKGlobalSettings::baseColor() ); //filling 353 // p->setBrush( KOPrefs::instance()->mHighlightColorKGlobalSettings::baseColor() ); //filling
355 QColor fc = KOPrefs::instance()->mHighlightColor; 354 QColor fc = KOPrefs::instance()->mHighlightColor;
356 if ( mTodo->percentComplete() == 100 ) 355 if ( mTodo->percentComplete() == 100 )
357 fc = darkGreen; 356 fc = darkGreen;
358 p->drawRect( 2, 2, width-4, height()-4); 357 p->drawRect( 2, 2, width-4, height()-4);
359 p->fillRect( 3, 3, progress, height()-6, 358 p->fillRect( 3, 3, progress, height()-6,
360 fc ); 359 fc );
361 p->restore(); 360 p->restore();
362 } else { 361 } else {
363 QCheckListItem::paintCell(p, _cg, column, width, alignment); 362 QCheckListItem::paintCell(p, _cg, column, width, alignment);
364 } 363 }
365 return; 364 return;
366 } 365 }
367 366
368 int align = alignment; 367 int align = alignment;
369 368
370 if ( !p ) 369 if ( !p )
371 return; 370 return;
372 371
373 p->fillRect( 0, 0, width, height(), _cg.brush( QColorGroup::Base ) ); 372 p->fillRect( 0, 0, width, height(), _cg.brush( QColorGroup::Base ) );
374 373
375 QListView *lv = listView(); 374 QListView *lv = listView();
376 if ( !lv ) 375 if ( !lv )
377 return; 376 return;
378 int marg = 2;//lv->itemMargin(); 377 int marg = 2;//lv->itemMargin();
379 int r = 0; 378 int r = 0;
380 QCheckListItem::Type myType = QCheckListItem::CheckBox; 379 QCheckListItem::Type myType = QCheckListItem::CheckBox;
381 int BoxSize = 20; 380 int BoxSize = 20;
382 int boxOffset = 2; 381 int boxOffset = 2;
383 int xOffset = 2; 382 int xOffset = 2;
384 if (qApp->desktop()->width() < 300 ) { 383 if (qApp->desktop()->width() < 300 ) {
385 BoxSize = 14; 384 BoxSize = 14;
386 boxOffset = -1; 385 boxOffset = -1;
387 xOffset = 1; 386 xOffset = 1;
388 // marg = 0; 387 // marg = 0;
389 } 388 }
390 if ( height() < BoxSize ) { 389 if ( height() < BoxSize ) {
391 boxOffset = boxOffset - ((BoxSize - height())/2) ; 390 boxOffset = boxOffset - ((BoxSize - height())/2) ;
392 // qDebug("boxOffset %d height %d", boxOffset, height() ); 391 // qDebug("boxOffset %d height %d", boxOffset, height() );
393 BoxSize = height(); 392 BoxSize = height();
394 393
395 } 394 }
396 //bool winStyle = lv->style() == WindowsStyle; 395 //bool winStyle = lv->style() == WindowsStyle;
397 396
398 int lineStart = 5; 397 int lineStart = 5;
399 if ( myType == Controller ) { 398 if ( myType == Controller ) {
400 if ( !pixmap( 0 ) ) 399 if ( !pixmap( 0 ) )
401 r += BoxSize + 4; 400 r += BoxSize + 4;
402 } else { 401 } else {
403 ASSERT( lv ); //### 402 ASSERT( lv ); //###
404 //QFontMetrics fm( lv->font() ); 403 //QFontMetrics fm( lv->font() );
405 //int d = fm.height(); 404 //int d = fm.height();
406 int x = 0; 405 int x = 0;
407 int y = (height() - BoxSize) / 2; 406 int y = (height() - BoxSize) / 2;
408 //p->setPen( QPen( _cg.text(), winStyle ? 2 : 1 ) ); 407 //p->setPen( QPen( _cg.text(), winStyle ? 2 : 1 ) );
409 if ( myType == CheckBox ) { 408 if ( myType == CheckBox ) {
410 if ( isEnabled() ) 409 if ( isEnabled() )
411 p->setPen( QPen( _cg.text(), 1 ) ); 410 p->setPen( QPen( _cg.text(), 1 ) );
412 else 411 else
413 p->setPen( QPen( listView()->palette().color( QPalette::Disabled, QColorGroup::Text ), 1 ) ); 412 p->setPen( QPen( listView()->palette().color( QPalette::Disabled, QColorGroup::Text ), 1 ) );
414 p->drawRect( x+marg, y+2, BoxSize-4, BoxSize-4 ); 413 p->drawRect( x+marg, y+2, BoxSize-4, BoxSize-4 );
415 lineStart = x+marg; 414 lineStart = x+marg;
416 ///////////////////// 415 /////////////////////
417 x++; 416 x++;
418 y++; 417 y++;
419 if ( isOn() ) { 418 if ( isOn() ) {
420 QPointArray a( 7*2 ); 419 QPointArray a( 7*2 );
421 int i, xx, yy; 420 int i, xx, yy;
422 xx = x+xOffset+marg+(boxOffset/2); 421 xx = x+xOffset+marg+(boxOffset/2);
423 yy = y+5+boxOffset; 422 yy = y+5+boxOffset;
424 for ( i=0; i<3; i++ ) { 423 for ( i=0; i<3; i++ ) {
425 a.setPoint( 2*i, xx, yy ); 424 a.setPoint( 2*i, xx, yy );
426 a.setPoint( 2*i+1, xx, yy+2 ); 425 a.setPoint( 2*i+1, xx, yy+2 );
427 // qDebug(" "); 426 // qDebug(" ");
428 xx++; yy++; 427 xx++; yy++;
429 } 428 }
430 yy -= 2; 429 yy -= 2;
431 for ( i=3; i<7; i++ ) { 430 for ( i=3; i<7; i++ ) {
432 a.setPoint( 2*i, xx, yy ); 431 a.setPoint( 2*i, xx, yy );
433 a.setPoint( 2*i+1, xx, yy+2 ); 432 a.setPoint( 2*i+1, xx, yy+2 );
434 xx++; yy--; 433 xx++; yy--;
435 } 434 }
436 p->setPen( darkGreen ); 435 p->setPen( darkGreen );
437 p->drawLineSegments( a ); 436 p->drawLineSegments( a );
438 } 437 }
439 //////////////////////// 438 ////////////////////////
440 } 439 }
441 r += BoxSize + 4; 440 r += BoxSize + 4;
442 } 441 }
443 442
444 p->translate( r, 0 ); 443 p->translate( r, 0 );
445 p->setPen( QPen( _cg.text() ) ); 444 p->setPen( QPen( _cg.text() ) );
446 QListViewItem::paintCell( p, _cg, column, width - r, align ); 445 QListViewItem::paintCell( p, _cg, column, width - r, align );
447 if ( mTodo->cancelled () ) { 446 if ( mTodo->cancelled () ) {
448 p->setPen( black ); 447 p->setPen( black );
449 QRect br = p->boundingRect( 1,1,1,1,0,mTodo->summary() ); 448 QRect br = p->boundingRect( 1,1,1,1,0,mTodo->summary() );
450 int wid = br.width() +lineStart; 449 int wid = br.width() +lineStart;
451 if ( wid > width-3 ) 450 if ( wid > width-3 )
452 wid = width-3; 451 wid = width-3;
453 p->drawLine( lineStart, height()/2+1, wid, height()/2+1 ); 452 p->drawLine( lineStart, height()/2+1, wid, height()/2+1 );
454 453
455 } 454 }
456 455
457} 456}