summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-01-31 16:29:05 (UTC)
committer zautrix <zautrix>2005-01-31 16:29:05 (UTC)
commitec037c4616342c1b3976c55db98b775f48e0d455 (patch) (unidiff)
tree9d568c8f6ad6005f822c12644596b7a553837c7f
parent5d52c81be9b43887c13f8534a04164d3b44b821f (diff)
downloadkdepimpi-ec037c4616342c1b3976c55db98b775f48e0d455.zip
kdepimpi-ec037c4616342c1b3976c55db98b775f48e0d455.tar.gz
kdepimpi-ec037c4616342c1b3976c55db98b775f48e0d455.tar.bz2
fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp165
-rw-r--r--korganizer/komonthview.h5
-rw-r--r--libkcal/calendarlocal.cpp1
-rw-r--r--libkcal/incidence.cpp3
4 files changed, 146 insertions, 28 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 770a42b..6646b98 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -207,950 +207,1063 @@ void MonthViewItem::paint(QPainter *p)
207 size = 3; 207 size = 3;
208 if ( KOPrefs::instance()->mMonthShowIcons ) { 208 if ( KOPrefs::instance()->mMonthShowIcons ) {
209 if ( mInfo ) { 209 if ( mInfo ) {
210 p->fillRect ( x, y,size,size, Qt::darkGreen ); 210 p->fillRect ( x, y,size,size, Qt::darkGreen );
211 x += size + 1; 211 x += size + 1;
212 } 212 }
213 if ( mRecur ) { 213 if ( mRecur ) {
214 p->fillRect ( x, y,size,size, Qt::blue ); 214 p->fillRect ( x, y,size,size, Qt::blue );
215 x += size + 1; 215 x += size + 1;
216 } 216 }
217 if ( mAlarm ) { 217 if ( mAlarm ) {
218 p->fillRect ( x, y,size,size, Qt::red ); 218 p->fillRect ( x, y,size,size, Qt::red );
219 x += size + 1; 219 x += size + 1;
220 } 220 }
221 if ( mReply ) { 221 if ( mReply ) {
222 p->fillRect ( x, y,size,size, Qt::yellow ); 222 p->fillRect ( x, y,size,size, Qt::yellow );
223 x += size + 1; 223 x += size + 1;
224 } 224 }
225 } 225 }
226 QFontMetrics fm = p->fontMetrics(); 226 QFontMetrics fm = p->fontMetrics();
227 int yPos; 227 int yPos;
228 int pmheight = size; 228 int pmheight = size;
229 if( pmheight < fm.height() ) 229 if( pmheight < fm.height() )
230 yPos = fm.ascent() + fm.leading()/2; 230 yPos = fm.ascent() + fm.leading()/2;
231 else 231 else
232 yPos = pmheight/2 - fm.height()/2 + fm.ascent(); 232 yPos = pmheight/2 - fm.height()/2 + fm.ascent();
233 p->setPen( palette().color( QPalette::Normal, sel ? \ 233 p->setPen( palette().color( QPalette::Normal, sel ? \
234 QColorGroup::HighlightedText : QColorGroup::Foreground ) ); 234 QColorGroup::HighlightedText : QColorGroup::Foreground ) );
235 p->drawText( x, yPos, text() ); 235 p->drawText( x, yPos, text() );
236 if ( mIncidence->cancelled() ) { 236 if ( mIncidence->cancelled() ) {
237 int wid = fm.width( text() ); 237 int wid = fm.width( text() );
238 p->drawLine( x, yPos- fm.height()/2+2,x+wid, yPos- fm.height()/2 +2); 238 p->drawLine( x, yPos- fm.height()/2+2,x+wid, yPos- fm.height()/2 +2);
239 } 239 }
240 240
241} 241}
242 242
243int MonthViewItem::height(const QListBox *lb) const 243int MonthViewItem::height(const QListBox *lb) const
244{ 244{
245 return lb->fontMetrics().lineSpacing()+1; 245 return lb->fontMetrics().lineSpacing()+1;
246} 246}
247 247
248int MonthViewItem::width(const QListBox *lb) const 248int MonthViewItem::width(const QListBox *lb) const
249{ 249{
250 int size = PIXMAP_SIZE; 250 int size = PIXMAP_SIZE;
251 if ( QApplication::desktop()->width() < 300 ) 251 if ( QApplication::desktop()->width() < 300 )
252 size = 3; 252 size = 3;
253 int x = 1; 253 int x = 1;
254 if ( mInfo ) { 254 if ( mInfo ) {
255 x += size + 1; 255 x += size + 1;
256 } 256 }
257 if( mRecur ) { 257 if( mRecur ) {
258 x += size+1; 258 x += size+1;
259 } 259 }
260 if( mAlarm ) { 260 if( mAlarm ) {
261 x += size+1; 261 x += size+1;
262 } 262 }
263 if( mReply ) { 263 if( mReply ) {
264 x += size+1; 264 x += size+1;
265 } 265 }
266 266
267 return( x + lb->fontMetrics().width( text() ) + 1 ); 267 return( x + lb->fontMetrics().width( text() ) + 1 );
268} 268}
269 269
270 270
271MonthViewCell::MonthViewCell( KOMonthView *parent) 271MonthViewCell::MonthViewCell( KOMonthView *parent)
272 : QWidget( parent ), 272 : QWidget( parent ),
273 mMonthView( parent ) 273 mMonthView( parent )
274{ 274{
275 275
276 QVBoxLayout *topLayout = new QVBoxLayout( this ); 276 QVBoxLayout *topLayout = new QVBoxLayout( this );
277 277
278 // mLabel = new QLabel( this );QPushButton 278 // mLabel = new QLabel( this );QPushButton
279 mLabel = new QPushButton( this ); 279 mLabel = new QPushButton( this );
280 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); 280 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain );
281 //mLabel->setLineWidth( 1 ); 281 //mLabel->setLineWidth( 1 );
282 //mLabel->setAlignment( AlignCenter ); 282 //mLabel->setAlignment( AlignCenter );
283 mLabel->setFlat( true ); 283 mLabel->setFlat( true );
284 mItemList = new KNoScrollListBox( this ); 284 mItemList = new KNoScrollListBox( this );
285 mItemList->setMinimumSize( 10, 10 ); 285 mItemList->setMinimumSize( 10, 10 );
286 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain ); 286 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain );
287 mItemList->setLineWidth( 1 ); 287 mItemList->setLineWidth( 1 );
288 topLayout->addWidget( mItemList ); 288 topLayout->addWidget( mItemList );
289 mLabel->raise(); 289 mLabel->raise();
290 // QColor( 0,0,255 ) QColor( 160,1600,255 ) 290 // QColor( 0,0,255 ) QColor( 160,1600,255 )
291 mStandardPalette = palette(); 291 mStandardPalette = palette();
292 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); 292 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) );
293 293
294 enableScrollBars( false ); 294 enableScrollBars( false );
295 updateConfig(); 295 updateConfig();
296 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 296 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
297 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 297 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
298 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ), 298 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ),
299 SLOT( defaultAction( QListBoxItem * ) ) ); 299 SLOT( defaultAction( QListBoxItem * ) ) );
300 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *, 300 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *,
301 const QPoint &) ), 301 const QPoint &) ),
302 SLOT( contextMenu( QListBoxItem * ) ) ); 302 SLOT( contextMenu( QListBoxItem * ) ) );
303 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ), 303 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ),
304 SLOT( selection( QListBoxItem * ) ) ); 304 SLOT( selection( QListBoxItem * ) ) );
305 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 305 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
306 SLOT( cellClicked( QListBoxItem * ) ) ); 306 SLOT( cellClicked( QListBoxItem * ) ) );
307 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 307 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
308 SLOT( selection( QListBoxItem * ) ) ); 308 SLOT( selection( QListBoxItem * ) ) );
309} 309}
310#ifdef DESKTOP_VERSION 310#ifdef DESKTOP_VERSION
311QToolTipGroup *MonthViewCell::toolTipGroup() 311QToolTipGroup *MonthViewCell::toolTipGroup()
312{ 312{
313 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); 313 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
314 return mToolTipGroup; 314 return mToolTipGroup;
315} 315}
316#endif 316#endif
317 317
318void MonthViewCell::setDate( const QDate &date ) 318void MonthViewCell::setDate( const QDate &date )
319{ 319{
320 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 320 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
321 mDate = date; 321 mDate = date;
322 322
323 323
324 324
325 //resizeEvent( 0 ); 325 //resizeEvent( 0 );
326} 326}
327 327
328QDate MonthViewCell::date() const 328QDate MonthViewCell::date() const
329{ 329{
330 return mDate; 330 return mDate;
331} 331}
332 332
333void MonthViewCell::setPrimary( bool primary ) 333void MonthViewCell::setPrimary( bool primary )
334{ 334{
335 mPrimary = primary; 335 mPrimary = primary;
336 //setMyPalette(); 336 //setMyPalette();
337} 337}
338void MonthViewCell::setMyPalette() 338void MonthViewCell::setMyPalette()
339{ 339{
340 340
341 if ( mHoliday) { 341 if ( mHoliday) {
342 setPalette( mHolidayPalette ); 342 setPalette( mHolidayPalette );
343 } else { 343 } else {
344 if ( mPrimary ) { 344 if ( mPrimary ) {
345 setPalette( mPrimaryPalette ); 345 setPalette( mPrimaryPalette );
346 } else { 346 } else {
347 setPalette( mNonPrimaryPalette ); 347 setPalette( mNonPrimaryPalette );
348 } 348 }
349 } 349 }
350 QPalette pal = palette(); 350 QPalette pal = palette();
351 351
352 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 352 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
353} 353}
354QPalette MonthViewCell::getPalette () 354QPalette MonthViewCell::getPalette ()
355{ 355{
356 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 356 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
357 return mStandardPalette; 357 return mStandardPalette;
358 if ( mHoliday) { 358 if ( mHoliday) {
359 return mHolidayPalette ; 359 return mHolidayPalette ;
360 } else { 360 } else {
361 if ( mPrimary ) { 361 if ( mPrimary ) {
362 return mPrimaryPalette ; 362 return mPrimaryPalette ;
363 } 363 }
364 } 364 }
365 return mNonPrimaryPalette; 365 return mNonPrimaryPalette;
366} 366}
367bool MonthViewCell::isPrimary() const 367bool MonthViewCell::isPrimary() const
368{ 368{
369 return mPrimary; 369 return mPrimary;
370} 370}
371 371
372void MonthViewCell::setHoliday( bool holiday ) 372void MonthViewCell::setHoliday( bool holiday )
373{ 373{
374 mHoliday = holiday; 374 mHoliday = holiday;
375 //setMyPalette(); 375 //setMyPalette();
376} 376}
377 377
378void MonthViewCell::setHoliday( const QString &holiday ) 378void MonthViewCell::setHoliday( const QString &holiday )
379{ 379{
380 mHolidayString = holiday; 380 mHolidayString = holiday;
381 381
382 if ( !holiday.isEmpty() ) { 382 if ( !holiday.isEmpty() ) {
383 setHoliday( true ); 383 setHoliday( true );
384 } 384 }
385} 385}
386void MonthViewCell::keyPressEvent ( QKeyEvent * e ) 386void MonthViewCell::keyPressEvent ( QKeyEvent * e )
387{ 387{
388 388
389 e->ignore(); 389 e->ignore();
390 390
391} 391}
392void MonthViewCell::clear() 392void MonthViewCell::clear()
393{ 393{
394 mItemList->clear(); 394 mItemList->clear();
395 QApplication::removePostedEvents ( mItemList ); 395 QApplication::removePostedEvents ( mItemList );
396 QApplication::removePostedEvents ( mLabel ); 396 QApplication::removePostedEvents ( mLabel );
397 QApplication::removePostedEvents ( this ); 397 QApplication::removePostedEvents ( this );
398} 398}
399void MonthViewCell::updateCell() 399
400void MonthViewCell::startUpdateCell()
400{ 401{
402
401 if ( !mMonthView->isUpdatePossible() ) 403 if ( !mMonthView->isUpdatePossible() )
402 return; 404 return;
403 /* 405 /*
404 if ( !isVisible() ){ 406 if ( !isVisible() ){
405 return; 407 return;
406 } 408 }
407 */ 409 */
408 // qDebug("MonthViewCell::updateCell() "); 410 // qDebug("MonthViewCell::updateCell() ");
409 setPrimary( mDate.month()%2 ); 411 setPrimary( mDate.month()%2 );
410 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 412 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
411 if ( mDate == QDate::currentDate() ) { 413 if ( mDate == QDate::currentDate() ) {
412 mItemList->setLineWidth( 3 ); 414 mItemList->setLineWidth( 3 );
413 } else { 415 } else {
414 mItemList->setLineWidth( 1 ); 416 mItemList->setLineWidth( 1 );
415 } 417 }
416 mItemList->clear(); 418 mItemList->clear();
417 419
418#ifdef DESKTOP_VERSION 420#ifdef DESKTOP_VERSION
419 QToolTip::remove(this); 421 QToolTip::remove(this);
420#endif 422#endif
421 QString tipText(""); 423 mToolTip = "";
422 //qApp->processEvents(); 424 //qApp->processEvents();
423 if ( !mHolidayString.isEmpty() ) { 425 if ( !mHolidayString.isEmpty() ) {
424 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 426 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
425 item->setPalette( mHolidayPalette ); 427 item->setPalette( mHolidayPalette );
426 mItemList->insertItem( item ); 428 mItemList->insertItem( item );
427 tipText += mHolidayString+"\n"; 429 mToolTip += mHolidayString+"\n";
428 } 430 }
429 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 431}
430 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
431 Event *event;
432 for( event = events.first(); event; event = events.next() ) { // for event
433 432
433void MonthViewCell::insertEvent(Event *event)
434{
434 if ( !(event->doesRecur() == Recurrence::rNone) ) { 435 if ( !(event->doesRecur() == Recurrence::rNone) ) {
435 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) 436 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
436 continue; 437 return;
437 else 438 else
438 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) 439 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
439 continue; 440 return;
440 } 441 }
441 442
442 if ( event->categories().contains("Holiday") || 443 if ( event->categories().contains("Holiday") ||
443 event->categories().contains(i18n("Holiday"))) { 444 event->categories().contains(i18n("Holiday"))) {
444 setHoliday( true ); 445 setHoliday( true );
445 if ( mDate.dayOfWeek() == 7 ) 446 if ( mDate.dayOfWeek() == 7 )
446 mItemList->setLineWidth( 3 ); 447 mItemList->setLineWidth( 3 );
447 } 448 }
448 QString text; 449 QString text;
449 if (event->isMultiDay()) { 450 if (event->isMultiDay()) {
450 QString prefix = "<->"; 451 QString prefix = "<->";
451 if ( event->doesRecur() ) { 452 if ( event->doesRecur() ) {
452 if ( event->recursOn( mDate) ) 453 if ( event->recursOn( mDate) )
453 prefix ="->" ; 454 prefix ="->" ;
454 else { 455 else {
455 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 456 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
456 if ( event->recursOn( mDate.addDays( -days)) ) 457 if ( event->recursOn( mDate.addDays( -days)) )
457 prefix ="<-" ; 458 prefix ="<-" ;
458 } 459 }
459 460
460 } else { 461 } else {
461 if (mDate == event->dtStart().date()) { 462 if (mDate == event->dtStart().date()) {
462 prefix ="->" ; 463 prefix ="->" ;
463 } else if (mDate == event->dtEnd().date()) { 464 } else if (mDate == event->dtEnd().date()) {
464 prefix ="<-" ; 465 prefix ="<-" ;
465 } 466 }
466 } 467 }
467 text = prefix + event->summary(); 468 text = prefix + event->summary();
468 tipText += text; 469 mToolTip += text;
469 } else { 470 } else {
470 if (event->doesFloat()) { 471 if (event->doesFloat()) {
471 text = event->summary(); 472 text = event->summary();
472 tipText += text; 473 mToolTip += text;
473 } 474 }
474 else { 475 else {
475 text = KGlobal::locale()->formatTime(event->dtStart().time()); 476 text = KGlobal::locale()->formatTime(event->dtStart().time());
476 text += " " + event->summary(); 477 text += " " + event->summary();
477 tipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 478 mToolTip += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
478 } 479 }
479 } 480 }
480 481
481 MonthViewItem *item = new MonthViewItem( event, mDate, text ); 482 MonthViewItem *item = new MonthViewItem( event, mDate, text );
482 QPalette pal; 483 QPalette pal;
483 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 484 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
484 QStringList categories = event->categories(); 485 QStringList categories = event->categories();
485 QString cat = categories.first(); 486 QString cat = categories.first();
486 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 487 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
487 pal = getPalette(); 488 pal = getPalette();
488 if (cat.isEmpty()) { 489 if (cat.isEmpty()) {
489 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 490 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
490 } else { 491 } else {
491 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 492 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
492 } 493 }
493 494
494 } else { 495 } else {
495 if (cat.isEmpty()) { 496 if (cat.isEmpty()) {
496 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 497 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
497 } else { 498 } else {
498 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 499 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
499 } 500 }
500 } 501 }
501 502
502 } else { 503 } else {
503 pal = mStandardPalette ; 504 pal = mStandardPalette ;
504 } 505 }
505 item->setPalette( pal ); 506 item->setPalette( pal );
506 item->setRecur( event->recurrence()->doesRecur() ); 507 item->setRecur( event->recurrence()->doesRecur() );
507 item->setAlarm( event->isAlarmEnabled() ); 508 item->setAlarm( event->isAlarmEnabled() );
508 item->setMoreInfo( event->description().length() > 0 ); 509 item->setMoreInfo( event->description().length() > 0 );
509#ifdef DESKTOP_VERSION 510#ifdef DESKTOP_VERSION
510 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, 511 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails,
511 KOPrefs::instance()->email()); 512 KOPrefs::instance()->email());
512 if ( me != 0 ) { 513 if ( me != 0 ) {
513 if ( me->status() == Attendee::NeedsAction && me->RSVP()) 514 if ( me->status() == Attendee::NeedsAction && me->RSVP())
514 item->setReply(true); 515 item->setReply(true);
515 else 516 else
516 item->setReply(false); 517 item->setReply(false);
517 } else 518 } else
518 item->setReply(false); 519 item->setReply(false);
519#endif 520#endif
520 mItemList->insertItem( item ); 521 mItemList->insertItem( item );
521 tipText += "\n"; 522 mToolTip += "\n";
522 523}
523 } 524void MonthViewCell::insertTodo(Todo *todo)
524 525{
525 // insert due todos 526 QString text;
526 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
527 Todo *todo;
528 for(todo = todos.first(); todo; todo = todos.next()) {
529 QString text;
530 if (todo->hasDueDate()) { 527 if (todo->hasDueDate()) {
531 if (!todo->doesFloat()) { 528 if (!todo->doesFloat()) {
532 text += KGlobal::locale()->formatTime(todo->dtDue().time()); 529 text += KGlobal::locale()->formatTime(todo->dtDue().time());
533 text += " "; 530 text += " ";
534 } 531 }
535 } 532 }
536 text += i18n("To-Do: %1").arg(todo->summary()); 533 text += i18n("To-Do: %1").arg(todo->summary());
537 534
538 MonthViewItem *item = new MonthViewItem( todo, mDate, text ); 535 MonthViewItem *item = new MonthViewItem( todo, mDate, text );
539 //item->setPalette( mStandardPalette ); 536 //item->setPalette( mStandardPalette );
540 QPalette pal; 537 QPalette pal;
541 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 538 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
542 QStringList categories = todo->categories(); 539 QStringList categories = todo->categories();
543 QString cat = categories.first(); 540 QString cat = categories.first();
544 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 541 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
545 pal = getPalette(); 542 pal = getPalette();
546 if (cat.isEmpty()) { 543 if (cat.isEmpty()) {
547 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 544 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
548 } else { 545 } else {
549 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 546 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
550 } 547 }
551 548
552 } else { 549 } else {
553 if (cat.isEmpty()) { 550 if (cat.isEmpty()) {
554 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 551 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
555 } else { 552 } else {
556 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 553 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
557 } 554 }
558 } 555 }
559 556
560 } else { 557 } else {
561 pal = mStandardPalette ; 558 pal = mStandardPalette ;
562 } 559 }
563 item->setPalette( pal ); 560 item->setPalette( pal );
564 mItemList->insertItem( item ); 561 mItemList->insertItem( item );
565 tipText += text+"\n"; 562 mToolTip += text+"\n";
566 } 563}
564void MonthViewCell::finishUpdateCell()
565{
567#ifdef DESKTOP_VERSION 566#ifdef DESKTOP_VERSION
568 if (tipText != "") 567 if (mToolTip != "")
569 QToolTip::add(this,tipText,toolTipGroup(),""); 568 QToolTip::add(this,mToolTip,toolTipGroup(),"");
570#endif 569#endif
571 570
572 //setMyPalette(); 571 //setMyPalette();
573 setMyPalette(); 572 setMyPalette();
574 QString text; 573 QString text;
575 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; 574 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog;
576 if ( KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { 575 if ( KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) {
577 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; 576 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " ";
578 mLabel->resize( mLabelBigSize ); 577 mLabel->resize( mLabelBigSize );
579 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 578 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
580 } else { 579 } else {
581 mLabel->resize( mLabelSize ); 580 mLabel->resize( mLabelSize );
582 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 581 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
583 } 582 }
584 583
585 mLabel->setText( text ); 584 mLabel->setText( text );
586 resizeEvent( 0 ); 585 resizeEvent( 0 );
586}
587void MonthViewCell::updateCell()
588{
589 if ( !mMonthView->isUpdatePossible() )
590 return;
591 startUpdateCell();
592 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
593 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
594 Event *event;
595 for( event = events.first(); event; event = events.next() ) { // for event
596 insertEvent(event);
597 }
598 // insert due todos
599 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
600 Todo *todo;
601 for(todo = todos.first(); todo; todo = todos.next()) {
602 insertTodo( todo );
603 }
604 finishUpdateCell();
587 // if ( isVisible()) 605 // if ( isVisible())
588 //qApp->processEvents(); 606 //qApp->processEvents();
589} 607}
590 608
591void MonthViewCell::updateConfig() 609void MonthViewCell::updateConfig()
592{ 610{
593 611 qDebug("MonthViewCell::updateConfig() ");
594 setFont( KOPrefs::instance()->mMonthViewFont ); 612 setFont( KOPrefs::instance()->mMonthViewFont );
595 613
596 QFontMetrics fm( font() ); 614 QFontMetrics fm( font() );
597 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); 615 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 );
598 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); 616 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 );
599 mHolidayPalette = mStandardPalette; 617 mHolidayPalette = mStandardPalette;
600 mPrimaryPalette = mStandardPalette; 618 mPrimaryPalette = mStandardPalette;
601 mNonPrimaryPalette = mStandardPalette; 619 mNonPrimaryPalette = mStandardPalette;
602 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { 620 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) {
603 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); 621 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor );
604 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); 622 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor );
605 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); 623 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark());
606 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); 624 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark());
607 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); 625 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor);
608 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); 626 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor);
609 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); 627 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark());
610 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); 628 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor);
611 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); 629 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor);
612 } 630 }
613 updateCell(); 631 updateCell();
614} 632}
615 633
616void MonthViewCell::enableScrollBars( bool enabled ) 634void MonthViewCell::enableScrollBars( bool enabled )
617{ 635{
618 if ( enabled ) { 636 if ( enabled ) {
619 mItemList->setVScrollBarMode(QScrollView::Auto); 637 mItemList->setVScrollBarMode(QScrollView::Auto);
620 mItemList->setHScrollBarMode(QScrollView::Auto); 638 mItemList->setHScrollBarMode(QScrollView::Auto);
621 } else { 639 } else {
622 mItemList->setVScrollBarMode(QScrollView::AlwaysOff); 640 mItemList->setVScrollBarMode(QScrollView::AlwaysOff);
623 mItemList->setHScrollBarMode(QScrollView::AlwaysOff); 641 mItemList->setHScrollBarMode(QScrollView::AlwaysOff);
624 } 642 }
625} 643}
626 644
627Incidence *MonthViewCell::selectedIncidence() 645Incidence *MonthViewCell::selectedIncidence()
628{ 646{
629 int index = mItemList->currentItem(); 647 int index = mItemList->currentItem();
630 if ( index < 0 ) return 0; 648 if ( index < 0 ) return 0;
631 649
632 MonthViewItem *item = 650 MonthViewItem *item =
633 static_cast<MonthViewItem *>( mItemList->item( index ) ); 651 static_cast<MonthViewItem *>( mItemList->item( index ) );
634 652
635 if ( !item ) return 0; 653 if ( !item ) return 0;
636 654
637 return item->incidence(); 655 return item->incidence();
638} 656}
639 657
640QDate MonthViewCell::selectedIncidenceDate() 658QDate MonthViewCell::selectedIncidenceDate()
641{ 659{
642 QDate qd; 660 QDate qd;
643 int index = mItemList->currentItem(); 661 int index = mItemList->currentItem();
644 if ( index < 0 ) return qd; 662 if ( index < 0 ) return qd;
645 663
646 MonthViewItem *item = 664 MonthViewItem *item =
647 static_cast<MonthViewItem *>( mItemList->item( index ) ); 665 static_cast<MonthViewItem *>( mItemList->item( index ) );
648 666
649 if ( !item ) return qd; 667 if ( !item ) return qd;
650 668
651 return item->incidenceDate(); 669 return item->incidenceDate();
652} 670}
653 671
654void MonthViewCell::deselect() 672void MonthViewCell::deselect()
655{ 673{
656 mItemList->clearSelection(); 674 mItemList->clearSelection();
657 enableScrollBars( false ); 675 enableScrollBars( false );
658 // updateCell(); 676 // updateCell();
659} 677}
660void MonthViewCell::select() 678void MonthViewCell::select()
661{ 679{
662 ;// updateCell(); 680 ;// updateCell();
663} 681}
664 682
665void MonthViewCell::resizeEvent ( QResizeEvent * ) 683void MonthViewCell::resizeEvent ( QResizeEvent * )
666{ 684{
667 if ( !mMonthView->isUpdatePossible() ) 685 if ( !mMonthView->isUpdatePossible() )
668 return; 686 return;
669#ifndef DESKTOP_VERSION 687#ifndef DESKTOP_VERSION
670 if ( !isVisible() ){ 688 if ( !isVisible() ){
671 return; 689 return;
672 } 690 }
673#endif 691#endif
674 int size = height() - mLabel->height(); 692 int size = height() - mLabel->height();
675 if ( size > 0 ) 693 if ( size > 0 )
676 mItemList->verticalScrollBar()->setMaximumHeight( size ); 694 mItemList->verticalScrollBar()->setMaximumHeight( size );
677 size = width() - mLabel->width(); 695 size = width() - mLabel->width();
678 if ( size > 0 ) 696 if ( size > 0 )
679 mItemList->horizontalScrollBar()->setMaximumWidth( size ); 697 mItemList->horizontalScrollBar()->setMaximumWidth( size );
680 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() ); 698 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() );
681 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 699 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
682} 700}
683 701
684void MonthViewCell::defaultAction( QListBoxItem *item ) 702void MonthViewCell::defaultAction( QListBoxItem *item )
685{ 703{
686 if ( !item ) return; 704 if ( !item ) return;
687 705
688 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 706 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
689 Incidence *incidence = eventItem->incidence(); 707 Incidence *incidence = eventItem->incidence();
690 if ( incidence ) mMonthView->defaultAction( incidence ); 708 if ( incidence ) mMonthView->defaultAction( incidence );
691} 709}
692void MonthViewCell::showDay() 710void MonthViewCell::showDay()
693{ 711{
694 emit showDaySignal( date() ); 712 emit showDaySignal( date() );
695} 713}
696void MonthViewCell::newEvent() 714void MonthViewCell::newEvent()
697{ 715{
698 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 716 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
699 emit newEventSignal( dt ); 717 emit newEventSignal( dt );
700} 718}
701void MonthViewCell::cellClicked( QListBoxItem *item ) 719void MonthViewCell::cellClicked( QListBoxItem *item )
702{ 720{
703 static QListBoxItem * lastClicked = 0; 721 static QListBoxItem * lastClicked = 0;
704 if ( item == 0 ) { 722 if ( item == 0 ) {
705 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 723 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
706 emit newEventSignal( dt ); 724 emit newEventSignal( dt );
707 return; 725 return;
708 } 726 }
709 /* 727 /*
710 if ( lastClicked ) 728 if ( lastClicked )
711 if ( ! item ) { 729 if ( ! item ) {
712 if ( lastClicked->listBox() != item->listBox() ) 730 if ( lastClicked->listBox() != item->listBox() )
713 lastClicked->listBox()->clearSelection(); 731 lastClicked->listBox()->clearSelection();
714 } 732 }
715 */ 733 */
716 734
717 mMonthView->setSelectedCell( this ); 735 mMonthView->setSelectedCell( this );
718 if( KOPrefs::instance()->mEnableMonthScroll ) enableScrollBars( true ); 736 if( KOPrefs::instance()->mEnableMonthScroll ) enableScrollBars( true );
719 select(); 737 select();
720} 738}
721 739
722void MonthViewCell::contextMenu( QListBoxItem *item ) 740void MonthViewCell::contextMenu( QListBoxItem *item )
723{ 741{
724 if ( !item ) return; 742 if ( !item ) return;
725 743
726 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 744 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
727 Incidence *incidence = eventItem->incidence(); 745 Incidence *incidence = eventItem->incidence();
728 if ( incidence ) mMonthView->showContextMenu( incidence ); 746 if ( incidence ) mMonthView->showContextMenu( incidence );
729} 747}
730 748
731void MonthViewCell::selection( QListBoxItem *item ) 749void MonthViewCell::selection( QListBoxItem *item )
732{ 750{
733 if ( !item ) return; 751 if ( !item ) return;
734 752
735 mMonthView->setSelectedCell( this ); 753 mMonthView->setSelectedCell( this );
736} 754}
737 755
738 756
739// ******************************************************************************* 757// *******************************************************************************
740// ******************************************************************************* 758// *******************************************************************************
741// ******************************************************************************* 759// *******************************************************************************
742 760
743 761
744KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 762KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
745 : KOEventView( calendar, parent, name ), 763 : KOEventView( calendar, parent, name ),
746 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 764 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
747 mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 765 mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
748{ 766{
749 767
750 updatePossible = false; 768 updatePossible = false;
751 mCells.setAutoDelete( true ); 769 mCells.setAutoDelete( true );
752 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 770 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
753 // mDayLayout = new QGridLayout( this ); 771 // mDayLayout = new QGridLayout( this );
754 // create the day of the week labels (Sun, Mon, etc) and add them to 772 // create the day of the week labels (Sun, Mon, etc) and add them to
755 // the layout. 773 // the layout.
756 mDayLabels.resize( mDaysPerWeek ); 774 mDayLabels.resize( mDaysPerWeek );
757 QFont bfont = font(); 775 QFont bfont = font();
758 if ( QApplication::desktop()->width() < 650 ) { 776 if ( QApplication::desktop()->width() < 650 ) {
759 bfont.setPointSize( bfont.pointSize() - 2 ); 777 bfont.setPointSize( bfont.pointSize() - 2 );
760 } 778 }
761 bfont.setBold( true ); 779 bfont.setBold( true );
762 int i; 780 int i;
763 781
764 for( i = 0; i < mDaysPerWeek; i++ ) { 782 for( i = 0; i < mDaysPerWeek; i++ ) {
765 QLabel *label = new QLabel( this ); 783 QLabel *label = new QLabel( this );
766 label->setFont(bfont); 784 label->setFont(bfont);
767 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 785 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
768 label->setLineWidth(1); 786 label->setLineWidth(1);
769 label->setAlignment(AlignCenter); 787 label->setAlignment(AlignCenter);
770 mDayLabels.insert( i, label ); 788 mDayLabels.insert( i, label );
771 } 789 }
772 790
773 bfont.setBold( false ); 791 bfont.setBold( false );
774 mWeekLabels.resize( mNumWeeks+1 ); 792 mWeekLabels.resize( mNumWeeks+1 );
775 for( i = 0; i < mNumWeeks+1; i++ ) { 793 for( i = 0; i < mNumWeeks+1; i++ ) {
776 KOWeekButton *label = new KOWeekButton( this ); 794 KOWeekButton *label = new KOWeekButton( this );
777 label->setFont(bfont); 795 label->setFont(bfont);
778 connect( label, SIGNAL( selectWeekNum ( int )),this, SIGNAL( selectWeekNum ( int )) ); 796 connect( label, SIGNAL( selectWeekNum ( int )),this, SIGNAL( selectWeekNum ( int )) );
779 label->setFlat(true); 797 label->setFlat(true);
780 QWhatsThis::add(label,i18n("Click on the week number to\nshow week in agenda view")); 798 QWhatsThis::add(label,i18n("Click on the week number to\nshow week in agenda view"));
781 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 799 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
782 //label->setLineWidth(1); 800 //label->setLineWidth(1);
783 //label->setAlignment(AlignCenter); 801 //label->setAlignment(AlignCenter);
784 mWeekLabels.insert( i, label ); 802 mWeekLabels.insert( i, label );
785 } 803 }
786 mWeekLabels[mNumWeeks]->setText( i18n("W")); 804 mWeekLabels[mNumWeeks]->setText( i18n("W"));
787 int row, col; 805 int row, col;
788 mCells.resize( mNumCells ); 806 mCells.resize( mNumCells );
789 for( row = 0; row < mNumWeeks; ++row ) { 807 for( row = 0; row < mNumWeeks; ++row ) {
790 for( col = 0; col < mDaysPerWeek; ++col ) { 808 for( col = 0; col < mDaysPerWeek; ++col ) {
791 MonthViewCell *cell = new MonthViewCell( this ); 809 MonthViewCell *cell = new MonthViewCell( this );
792 mCells.insert( row * mDaysPerWeek + col, cell ); 810 mCells.insert( row * mDaysPerWeek + col, cell );
793 811
794 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 812 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
795 SLOT( defaultAction( Incidence * ) ) ); 813 SLOT( defaultAction( Incidence * ) ) );
796 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 814 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
797 SIGNAL( newEventSignal( QDateTime ) ) ); 815 SIGNAL( newEventSignal( QDateTime ) ) );
798 connect( cell, SIGNAL( showDaySignal( QDate ) ), 816 connect( cell, SIGNAL( showDaySignal( QDate ) ),
799 SIGNAL( showDaySignal( QDate ) ) ); 817 SIGNAL( showDaySignal( QDate ) ) );
800 } 818 }
801 } 819 }
802 820
803 mContextMenu = eventPopup(); 821 mContextMenu = eventPopup();
804 // updateConfig(); //useless here 822 // updateConfig(); //useless here
805 823
806 emit incidenceSelected( 0 ); 824 emit incidenceSelected( 0 );
807} 825}
808 826
809KOMonthView::~KOMonthView() 827KOMonthView::~KOMonthView()
810{ 828{
811 delete mContextMenu; 829 delete mContextMenu;
812} 830}
813 831
814int KOMonthView::maxDatesHint() 832int KOMonthView::maxDatesHint()
815{ 833{
816 return mNumCells; 834 return mNumCells;
817} 835}
818 836
819int KOMonthView::currentDateCount() 837int KOMonthView::currentDateCount()
820{ 838{
821 return mNumCells; 839 return mNumCells;
822} 840}
823 841
824QPtrList<Incidence> KOMonthView::selectedIncidences() 842QPtrList<Incidence> KOMonthView::selectedIncidences()
825{ 843{
826 QPtrList<Incidence> selected; 844 QPtrList<Incidence> selected;
827 845
828 if ( mSelectedCell ) { 846 if ( mSelectedCell ) {
829 Incidence *incidence = mSelectedCell->selectedIncidence(); 847 Incidence *incidence = mSelectedCell->selectedIncidence();
830 if ( incidence ) selected.append( incidence ); 848 if ( incidence ) selected.append( incidence );
831 } 849 }
832 850
833 return selected; 851 return selected;
834} 852}
835 853
836DateList KOMonthView::selectedDates() 854DateList KOMonthView::selectedDates()
837{ 855{
838 DateList selected; 856 DateList selected;
839 857
840 if ( mSelectedCell ) { 858 if ( mSelectedCell ) {
841 QDate qd = mSelectedCell->selectedIncidenceDate(); 859 QDate qd = mSelectedCell->selectedIncidenceDate();
842 if ( qd.isValid() ) selected.append( qd ); 860 if ( qd.isValid() ) selected.append( qd );
843 } 861 }
844 862
845 return selected; 863 return selected;
846} 864}
847 865
848void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, 866void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd,
849 const QDate &td) 867 const QDate &td)
850{ 868{
851#ifndef KORG_NOPRINTER 869#ifndef KORG_NOPRINTER
852 calPrinter->preview(CalPrinter::Month, fd, td); 870 calPrinter->preview(CalPrinter::Month, fd, td);
853#endif 871#endif
854} 872}
855 873
856void KOMonthView::updateConfig() 874void KOMonthView::updateConfig()
857{ 875{
858 876
859 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 877 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
860 878
861 QFontMetrics fontmetric(mDayLabels[0]->font()); 879 QFontMetrics fontmetric(mDayLabels[0]->font());
862 mWidthLongDayLabel = 0; 880 mWidthLongDayLabel = 0;
863 881
864 for (int i = 0; i < 7; i++) { 882 for (int i = 0; i < 7; i++) {
865 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 883 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
866 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 884 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
867 } 885 }
868 bool temp = mShowSatSunComp ; 886 bool temp = mShowSatSunComp ;
869 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 887 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
870 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) 888 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
871 computeLayout(); 889 computeLayout();
872 updateDayLabels(); 890 updateDayLabels();
873 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); 891 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
874 int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; 892 int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
875 //resizeEvent( 0 ); 893 //resizeEvent( 0 );
876 for (uint i = 0; i < mCells.count(); ++i) { 894 for (uint i = 0; i < mCells.count(); ++i) {
877 mCells[i]->updateConfig(); 895 mCells[i]->updateConfig();
878 } 896 }
879#ifdef DESKTOP_VERSION 897#ifdef DESKTOP_VERSION
880 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); 898 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips);
881#endif 899#endif
882} 900}
883 901
884void KOMonthView::updateDayLabels() 902void KOMonthView::updateDayLabels()
885{ 903{
886 904
887 for (int i = 0; i < 7; i++) { 905 for (int i = 0; i < 7; i++) {
888 if (mWeekStartsMonday) { 906 if (mWeekStartsMonday) {
889 bool show = mShortDayLabels; 907 bool show = mShortDayLabels;
890 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > mDayLabels[i]->width() ) 908 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > mDayLabels[i]->width() )
891 show = true; 909 show = true;
892 mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 910 mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
893 } else { 911 } else {
894 if (i==0) mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels)); 912 if (i==0) mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels));
895 else mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels)); 913 else mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels));
896 914
897 } 915 }
898 } 916 }
899} 917}
900 918
901void KOMonthView::showDates(const QDate &start, const QDate &) 919void KOMonthView::showDates(const QDate &start, const QDate &)
902{ 920{
903 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; 921 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl;
904 922
905 923
906 mStartDate = start; 924 mStartDate = start;
907 925
908 int startWeekDay = mWeekStartsMonday ? 1 : 7; 926 int startWeekDay = mWeekStartsMonday ? 1 : 7;
909 927
910 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { 928 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) {
911 mStartDate = mStartDate.addDays( -1 ); 929 mStartDate = mStartDate.addDays( -1 );
912 } 930 }
913 931
914 bool primary = false; 932 bool primary = false;
915 uint i; 933 uint i;
916 for( i = 0; i < mCells.size(); ++i ) { 934 for( i = 0; i < mCells.size(); ++i ) {
917 QDate date = mStartDate.addDays( i ); 935 QDate date = mStartDate.addDays( i );
918 mCells[i]->setDate( date ); 936 mCells[i]->setDate( date );
919 937
920#ifndef KORG_NOPLUGINS 938#ifndef KORG_NOPLUGINS
921 // add holiday, if present 939 // add holiday, if present
922 QString hstring(KOCore::self()->holiday(date)); 940 QString hstring(KOCore::self()->holiday(date));
923 mCells[i]->setHoliday( hstring ); 941 mCells[i]->setHoliday( hstring );
924#endif 942#endif
925 943
926 } 944 }
927 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); 945 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 );
928 for( i = 0; i < 6; ++i ) { 946 for( i = 0; i < 6; ++i ) {
929 int wno; 947 int wno;
930 // remember, according to ISO 8601, the first week of the year is the 948 // remember, according to ISO 8601, the first week of the year is the
931 // first week that contains a thursday. Thus we must subtract off 4, 949 // first week that contains a thursday. Thus we must subtract off 4,
932 // not just 1. 950 // not just 1.
933 int dayOfYear = date.dayOfYear(); 951 int dayOfYear = date.dayOfYear();
934 if (dayOfYear % 7 != 0) 952 if (dayOfYear % 7 != 0)
935 wno = dayOfYear / 7 + 1; 953 wno = dayOfYear / 7 + 1;
936 else 954 else
937 wno =dayOfYear / 7; 955 wno =dayOfYear / 7;
938 mWeekLabels[i]->setWeekNum( wno ); 956 mWeekLabels[i]->setWeekNum( wno );
939 date = date.addDays( 7 ); 957 date = date.addDays( 7 );
940 } 958 }
941 updateView(); 959 updateView();
942} 960}
943 961
944void KOMonthView::showEvents(QPtrList<Event>) 962void KOMonthView::showEvents(QPtrList<Event>)
945{ 963{
946 qDebug("KOMonthView::selectEvents is not implemented yet. "); 964 qDebug("KOMonthView::selectEvents is not implemented yet. ");
947} 965}
948 966
949void KOMonthView::changeEventDisplay(Event *, int) 967void KOMonthView::changeEventDisplay(Event *, int)
950{ 968{
951 // this should be re-written to be much more efficient, but this 969 // this should be re-written to be much more efficient, but this
952 // quick-and-dirty-hack gets the job done for right now. 970 // quick-and-dirty-hack gets the job done for right now.
953 updateView(); 971 updateView();
954} 972}
955 973
956void KOMonthView::updateView() 974void KOMonthView::updateView()
957{ 975{
958 976
959 if ( !updatePossible ) 977 if ( !updatePossible )
960 return; 978 return;
979 QTime ti;
980 ti.start();
981#if 1
982 int i;
983 for( i = 0; i < mCells.count(); ++i ) {
984 mCells[i]->startUpdateCell();
985 }
986
987 QPtrList<Event> events = calendar()->events();
988 Event *event;
989 QDateTime dt;
990 bool ok;
991 int timeSpan = mCells.size()-1;
992 QDate endDate = mStartDate.addDays( timeSpan );
993 for( event = events.first(); event; event = events.next() ) { // for event
994 if ( event->doesRecur() ) {
995 bool last;
996 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
997 QDateTime incidenceEnd;
998 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
999 bool invalid = false;
1000 while( true ) {
1001 if ( incidenceStart.isValid() ) {
1002 incidenceEnd = incidenceStart.addDays( eventlen );
1003 int st = incidenceStart.date().daysTo( endDate );
1004 if ( st >= 0 ) { // start before timeend
1005 int end = mStartDate.daysTo( incidenceEnd.date() );
1006 if ( end >= 0 ) { // end after timestart --- got one!
1007 //normalize
1008 st = timeSpan - st;
1009 if ( st < 0 ) st = 0;
1010 if ( end > timeSpan ) end = timeSpan;
1011 int iii;
1012 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
1013 for ( iii = st;iii<= end;++iii)
1014 mCells[iii]->insertEvent( event );
1015 }
1016 }
1017 } else {
1018 if ( invalid )
1019 break;
1020 invalid = true;
1021 //qDebug("invalid %s", event->summary().latin1());
1022 incidenceStart = QDateTime( mStartDate );
1023 }
1024 if ( last )
1025 break;
1026 bool ok;
1027 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
1028 if ( ! ok )
1029 break;
1030 if ( incidenceStart.date() > endDate )
1031 break;
1032 }
1033 } else { // no recur
1034 int st = event->dtStart().date().daysTo( endDate );
1035 if ( st >= 0 ) { // start before timeend
1036 int end = mStartDate.daysTo( event->dtEnd().date() );
1037 if ( end >= 0 ) { // end after timestart --- got one!
1038 //normalize
1039 st = timeSpan - st;
1040 if ( st < 0 ) st = 0;
1041 if ( end > timeSpan ) end = timeSpan;
1042 int iii;
1043 for ( iii = st;iii<= end;++iii)
1044 mCells[iii]->insertEvent( event );
1045 }
1046 }
1047 }
1048 }
1049 // insert due todos
1050 QPtrList<Todo> todos = calendar()->todos( );
1051 Todo *todo;
1052 for(todo = todos.first(); todo; todo = todos.next()) {
1053 //insertTodo( todo );
1054 if ( todo->hasDueDate() ) {
1055 int day = mStartDate.daysTo( todo->dtDue().date() );
1056 if ( day >= 0 && day < mCells.size() ) {
1057 mCells[day]->insertTodo( todo );
1058 }
1059 }
1060 }
1061
1062 for( i = 0; i < mCells.count(); ++i ) {
1063 mCells[i]->finishUpdateCell();
1064 }
1065 processSelectionChange();
1066 mCells[0]->setFocus();
1067
1068
1069#else
1070 // old code
961 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); 1071 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
962 int i; 1072 int i;
963 for( i = 0; i < mCells.count(); ++i ) { 1073 for( i = 0; i < mCells.count(); ++i ) {
964 mCells[i]->updateCell(); 1074 mCells[i]->updateCell();
965 } 1075 }
966 1076
967 //qDebug("KOMonthView::updateView() "); 1077 //qDebug("KOMonthView::updateView() ");
968 processSelectionChange(); 1078 processSelectionChange();
969 // qDebug("---------------------------------------------------------------------+ "); 1079 // qDebug("---------------------------------------------------------------------+ ");
970 mCells[0]->setFocus(); 1080 mCells[0]->setFocus();
1081#endif
1082
1083 qDebug("update time %d ", ti.elapsed());
971} 1084}
972 1085
973void KOMonthView::resizeEvent(QResizeEvent * e) 1086void KOMonthView::resizeEvent(QResizeEvent * e)
974{ 1087{
975 computeLayout(); 1088 computeLayout();
976 mCells[0]->setFocus(); 1089 mCells[0]->setFocus();
977} 1090}
978void KOMonthView::computeLayout() 1091void KOMonthView::computeLayout()
979{ 1092{
980 // select the appropriate heading string size. E.g. "Wednesday" or "Wed". 1093 // select the appropriate heading string size. E.g. "Wednesday" or "Wed".
981 // note this only changes the text if the requested size crosses the 1094 // note this only changes the text if the requested size crosses the
982 // threshold between big enough to support the full name and not big 1095 // threshold between big enough to support the full name and not big
983 // enough. 1096 // enough.
984 1097
985 int daysToShow = 7; 1098 int daysToShow = 7;
986 bool combinedSatSun = false; 1099 bool combinedSatSun = false;
987 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1100 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
988 daysToShow = 6; 1101 daysToShow = 6;
989 combinedSatSun = true; 1102 combinedSatSun = true;
990 } 1103 }
991 int tWid = topLevelWidget()->size().width(); 1104 int tWid = topLevelWidget()->size().width();
992 int tHei = topLevelWidget()->size().height(); 1105 int tHei = topLevelWidget()->size().height();
993 1106
994 int wid = size().width();//e 1107 int wid = size().width();//e
995 int hei = size().height()-1; 1108 int hei = size().height()-1;
996 1109
997 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 1110 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
998 return; 1111 return;
999 //qDebug("KOMonthView::computeLayout()------------------------------------ "); 1112 //qDebug("KOMonthView::computeLayout()------------------------------------ ");
1000 QFontMetrics fm ( mWeekLabels[0]->font() ); 1113 QFontMetrics fm ( mWeekLabels[0]->font() );
1001 int weeklabelwid = fm.width( "888" ); 1114 int weeklabelwid = fm.width( "888" );
1002 wid -= weeklabelwid; 1115 wid -= weeklabelwid;
1003 1116
1004 int colWid = wid / daysToShow; 1117 int colWid = wid / daysToShow;
1005 int lastCol = wid - ( colWid*6 ); 1118 int lastCol = wid - ( colWid*6 );
1006 int dayLabelHei = mDayLabels[0]->sizeHint().height(); 1119 int dayLabelHei = mDayLabels[0]->sizeHint().height();
1007 int cellHei = (hei - dayLabelHei) /6; 1120 int cellHei = (hei - dayLabelHei) /6;
1008 int colModulo = wid % daysToShow; 1121 int colModulo = wid % daysToShow;
1009 int rowModulo = (hei- dayLabelHei) % 6; 1122 int rowModulo = (hei- dayLabelHei) % 6;
1010 //qDebug("rowmod %d ", rowModulo); 1123 //qDebug("rowmod %d ", rowModulo);
1011 int i; 1124 int i;
1012 int x,y,w,h; 1125 int x,y,w,h;
1013 x= 0; 1126 x= 0;
1014 y= 0; 1127 y= 0;
1015 w = colWid; 1128 w = colWid;
1016 h = dayLabelHei ; 1129 h = dayLabelHei ;
1017 for ( i = 0; i < 7; i++) { 1130 for ( i = 0; i < 7; i++) {
1018 if ( i == daysToShow-colModulo ) 1131 if ( i == daysToShow-colModulo )
1019 ++w; 1132 ++w;
1020 if ( combinedSatSun ) { 1133 if ( combinedSatSun ) {
1021 if ( i >= daysToShow-1 ) { 1134 if ( i >= daysToShow-1 ) {
1022 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); 1135 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h);
1023 x -= w/2 ; 1136 x -= w/2 ;
1024 } 1137 }
1025 else 1138 else
1026 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1139 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1027 } else 1140 } else
1028 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1141 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1029 x += w; 1142 x += w;
1030 } 1143 }
1031 x= 0; 1144 x= 0;
1032 y= dayLabelHei; 1145 y= dayLabelHei;
1033 w = colWid; 1146 w = colWid;
1034 h = cellHei ; 1147 h = cellHei ;
1035 for ( i = 0; i < mCells.count(); ++i) { 1148 for ( i = 0; i < mCells.count(); ++i) {
1036 1149
1037 w = colWid; 1150 w = colWid;
1038 if ( ((i) % 7) >= 7-colModulo ) { 1151 if ( ((i) % 7) >= 7-colModulo ) {
1039 ++w; 1152 ++w;
1040 } 1153 }
1041 if ( i == (6-rowModulo)*7) 1154 if ( i == (6-rowModulo)*7)
1042 ++h; 1155 ++h;
1043 if ( combinedSatSun ) { 1156 if ( combinedSatSun ) {
1044 if ( (i)%7 >= daysToShow-1 ) { 1157 if ( (i)%7 >= daysToShow-1 ) {
1045 if ( (i)%7 == daysToShow-1 ) { 1158 if ( (i)%7 == daysToShow-1 ) {
1046 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); 1159 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 );
1047 x -= w ;y += h/2; 1160 x -= w ;y += h/2;
1048 } else { 1161 } else {
1049 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); 1162 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 );
1050 y -= h/2; 1163 y -= h/2;
1051 } 1164 }
1052 } else 1165 } else
1053 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1166 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1054 1167
1055 } 1168 }
1056 else 1169 else
1057 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1170 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1058 x += w; 1171 x += w;
1059 if ( x + w/2 > wid ) { 1172 if ( x + w/2 > wid ) {
1060 x = 0; 1173 x = 0;
1061 y += h; 1174 y += h;
1062 } 1175 }
1063 } 1176 }
1064 y= dayLabelHei; 1177 y= dayLabelHei;
1065 h = cellHei ; 1178 h = cellHei ;
1066 for ( i = 0; i < 6; i++) { 1179 for ( i = 0; i < 6; i++) {
1067 if ( i == (6-rowModulo)) 1180 if ( i == (6-rowModulo))
1068 ++h; 1181 ++h;
1069 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); 1182 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h);
1070 y += h; 1183 y += h;
1071 } 1184 }
1072 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1185 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1073 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1186 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1074 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1187 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1075 mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ; 1188 mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ;
1076 updateDayLabels(); 1189 updateDayLabels();
1077 bool forceUpdate = !updatePossible; 1190 bool forceUpdate = !updatePossible;
1078 updatePossible = true; 1191 updatePossible = true;
1079 if ( forceUpdate ) 1192 if ( forceUpdate )
1080 updateView(); 1193 updateView();
1081} 1194}
1082 1195
1083void KOMonthView::showContextMenu( Incidence *incidence ) 1196void KOMonthView::showContextMenu( Incidence *incidence )
1084{ 1197{
1085 mContextMenu->showIncidencePopup(incidence); 1198 mContextMenu->showIncidencePopup(incidence);
1086 /* 1199 /*
1087 if( incidence && incidence->type() == "Event" ) { 1200 if( incidence && incidence->type() == "Event" ) {
1088 Event *event = static_cast<Event *>(incidence); 1201 Event *event = static_cast<Event *>(incidence);
1089 mContextMenu->showEventPopup(event); 1202 mContextMenu->showEventPopup(event);
1090 } else { 1203 } else {
1091 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; 1204 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl;
1092 } 1205 }
1093 */ 1206 */
1094} 1207}
1095MonthViewCell * KOMonthView::selectedCell( ) 1208MonthViewCell * KOMonthView::selectedCell( )
1096{ 1209{
1097 return mSelectedCell; 1210 return mSelectedCell;
1098} 1211}
1099void KOMonthView::setSelectedCell( MonthViewCell *cell ) 1212void KOMonthView::setSelectedCell( MonthViewCell *cell )
1100{ 1213{
1101 // qDebug("KOMonthView::setSelectedCell "); 1214 // qDebug("KOMonthView::setSelectedCell ");
1102 if ( mSelectedCell && mSelectedCell != cell ) { 1215 if ( mSelectedCell && mSelectedCell != cell ) {
1103 MonthViewCell * mvc = mSelectedCell; 1216 MonthViewCell * mvc = mSelectedCell;
1104 mSelectedCell = cell; 1217 mSelectedCell = cell;
1105 mvc->deselect(); 1218 mvc->deselect();
1106 } else 1219 } else
1107 mSelectedCell = cell; 1220 mSelectedCell = cell;
1108 // if ( mSelectedCell ) 1221 // if ( mSelectedCell )
1109 // mSelectedCell->select(); 1222 // mSelectedCell->select();
1110 if ( !mSelectedCell ) 1223 if ( !mSelectedCell )
1111 emit incidenceSelected( 0 ); 1224 emit incidenceSelected( 0 );
1112 else 1225 else
1113 emit incidenceSelected( mSelectedCell->selectedIncidence() ); 1226 emit incidenceSelected( mSelectedCell->selectedIncidence() );
1114} 1227}
1115 1228
1116void KOMonthView::processSelectionChange() 1229void KOMonthView::processSelectionChange()
1117{ 1230{
1118 QPtrList<Incidence> incidences = selectedIncidences(); 1231 QPtrList<Incidence> incidences = selectedIncidences();
1119 if (incidences.count() > 0) { 1232 if (incidences.count() > 0) {
1120 emit incidenceSelected( incidences.first() ); 1233 emit incidenceSelected( incidences.first() );
1121 } else { 1234 } else {
1122 emit incidenceSelected( 0 ); 1235 emit incidenceSelected( 0 );
1123 } 1236 }
1124} 1237}
1125 1238
1126void KOMonthView::clearSelection() 1239void KOMonthView::clearSelection()
1127{ 1240{
1128 if ( mSelectedCell ) { 1241 if ( mSelectedCell ) {
1129 mSelectedCell->deselect(); 1242 mSelectedCell->deselect();
1130 mSelectedCell = 0; 1243 mSelectedCell = 0;
1131 } 1244 }
1132} 1245}
1133void KOMonthView::keyPressEvent ( QKeyEvent * e ) 1246void KOMonthView::keyPressEvent ( QKeyEvent * e )
1134{ 1247{
1135 //qDebug("KOMonthView::keyPressEvent "); 1248 //qDebug("KOMonthView::keyPressEvent ");
1136 switch(e->key()) { 1249 switch(e->key()) {
1137 case Key_Up: 1250 case Key_Up:
1138 { 1251 {
1139 emit prevMonth(); 1252 emit prevMonth();
1140 mCells[0]->setFocus(); 1253 mCells[0]->setFocus();
1141 } 1254 }
1142 e->accept(); 1255 e->accept();
1143 break; 1256 break;
1144 case Key_Down: 1257 case Key_Down:
1145 { 1258 {
1146 emit nextMonth(); 1259 emit nextMonth();
1147 mCells[0]->setFocus(); 1260 mCells[0]->setFocus();
1148 1261
1149 } 1262 }
1150 e->accept(); 1263 e->accept();
1151 break; 1264 break;
1152 default: 1265 default:
1153 e->ignore(); 1266 e->ignore();
1154 break; 1267 break;
1155 } 1268 }
1156} 1269}
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index 50903b3..b84065e 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -1,274 +1,279 @@
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#ifndef _KOMONTHVIEW_H 20#ifndef _KOMONTHVIEW_H
21#define _KOMONTHVIEW_H 21#define _KOMONTHVIEW_H
22 22
23#include <qlabel.h> 23#include <qlabel.h>
24#include <qframe.h> 24#include <qframe.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qlistbox.h> 26#include <qlistbox.h>
27#include <qpoint.h> 27#include <qpoint.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qintdict.h> 29#include <qintdict.h>
30#include <qpushbutton.h> 30#include <qpushbutton.h>
31#include <qvaluelist.h> 31#include <qvaluelist.h>
32#include <qptrvector.h> 32#include <qptrvector.h>
33 33
34#include <libkcal/calendar.h> 34#include <libkcal/calendar.h>
35#include <libkcal/event.h> 35#include <libkcal/event.h>
36 36
37#include "koeventview.h" 37#include "koeventview.h"
38 38
39#ifdef DESKTOP_VERSION 39#ifdef DESKTOP_VERSION
40class QToolTipGroup; 40class QToolTipGroup;
41#endif 41#endif
42 42
43class KNOWhatsThis; 43class KNOWhatsThis;
44class KOWeekButton : public QPushButton 44class KOWeekButton : public QPushButton
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47 public: 47 public:
48 KOWeekButton( QWidget *parent=0, const char *name=0 ) : 48 KOWeekButton( QWidget *parent=0, const char *name=0 ) :
49 QPushButton( parent, name) 49 QPushButton( parent, name)
50 { 50 {
51 connect( this, SIGNAL( clicked() ), 51 connect( this, SIGNAL( clicked() ),
52 SLOT( bottonClicked() )); 52 SLOT( bottonClicked() ));
53 mNumber = -1; 53 mNumber = -1;
54 } 54 }
55 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));} 55 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));}
56 signals: 56 signals:
57 void selectWeekNum ( int ); 57 void selectWeekNum ( int );
58private: 58private:
59 int mNumber; 59 int mNumber;
60private slots : 60private slots :
61 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); } 61 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); }
62}; 62};
63 63
64class KNoScrollListBox: public QListBox 64class KNoScrollListBox: public QListBox
65{ 65{
66 Q_OBJECT 66 Q_OBJECT
67 public: 67 public:
68 KNoScrollListBox(QWidget *parent=0, const char *name=0); 68 KNoScrollListBox(QWidget *parent=0, const char *name=0);
69 ~KNoScrollListBox(); 69 ~KNoScrollListBox();
70 QString getWhatsThisText(QPoint p) ; 70 QString getWhatsThisText(QPoint p) ;
71 71
72 signals: 72 signals:
73 void shiftDown(); 73 void shiftDown();
74 void shiftUp(); 74 void shiftUp();
75 void rightClick(); 75 void rightClick();
76 76
77 protected slots: 77 protected slots:
78 void keyPressEvent(QKeyEvent *); 78 void keyPressEvent(QKeyEvent *);
79 void keyReleaseEvent(QKeyEvent *); 79 void keyReleaseEvent(QKeyEvent *);
80 void mousePressEvent(QMouseEvent *); 80 void mousePressEvent(QMouseEvent *);
81 81
82 private: 82 private:
83 KNOWhatsThis * mWT; 83 KNOWhatsThis * mWT;
84}; 84};
85 85
86 86
87class MonthViewItem: public QListBoxItem 87class MonthViewItem: public QListBoxItem
88{ 88{
89 public: 89 public:
90 MonthViewItem( Incidence *, QDate qd, const QString & title ); 90 MonthViewItem( Incidence *, QDate qd, const QString & title );
91 91
92 void setRecur(bool on) { mRecur = on; } 92 void setRecur(bool on) { mRecur = on; }
93 void setAlarm(bool on) { mAlarm = on; } 93 void setAlarm(bool on) { mAlarm = on; }
94 void setReply(bool on) { mReply = on; } 94 void setReply(bool on) { mReply = on; }
95 void setMoreInfo(bool on) { mInfo = on; } 95 void setMoreInfo(bool on) { mInfo = on; }
96 96
97 97
98 void setPalette(const QPalette &p) { mPalette = p; } 98 void setPalette(const QPalette &p) { mPalette = p; }
99 QPalette palette() const { return mPalette; } 99 QPalette palette() const { return mPalette; }
100 100
101 Incidence *incidence() const { return mIncidence; } 101 Incidence *incidence() const { return mIncidence; }
102 QDate incidenceDate() { return mDate; } 102 QDate incidenceDate() { return mDate; }
103 103
104 protected: 104 protected:
105 virtual void paint(QPainter *); 105 virtual void paint(QPainter *);
106 virtual int height(const QListBox *) const; 106 virtual int height(const QListBox *) const;
107 virtual int width(const QListBox *) const; 107 virtual int width(const QListBox *) const;
108 108
109 private: 109 private:
110 bool mRecur; 110 bool mRecur;
111 bool mAlarm; 111 bool mAlarm;
112 bool mReply; 112 bool mReply;
113 bool mInfo; 113 bool mInfo;
114 114
115 QPalette mPalette; 115 QPalette mPalette;
116 QDate mDate; 116 QDate mDate;
117 117
118 Incidence *mIncidence; 118 Incidence *mIncidence;
119}; 119};
120 120
121 121
122class KOMonthView; 122class KOMonthView;
123 123
124class MonthViewCell : public QWidget 124class MonthViewCell : public QWidget
125{ 125{
126 Q_OBJECT 126 Q_OBJECT
127 public: 127 public:
128 MonthViewCell( KOMonthView * ); 128 MonthViewCell( KOMonthView * );
129 129
130 void setDate( const QDate & ); 130 void setDate( const QDate & );
131 QDate date() const; 131 QDate date() const;
132 132
133 void setPrimary( bool ); 133 void setPrimary( bool );
134 bool isPrimary() const; 134 bool isPrimary() const;
135 135
136 void setHoliday( bool ); 136 void setHoliday( bool );
137 void setHoliday( const QString & ); 137 void setHoliday( const QString & );
138 138
139 void updateCell(); 139 void updateCell();
140 void startUpdateCell();
141 void finishUpdateCell();
142 void insertEvent(Event *);
143 void insertTodo(Todo *);
140 144
141 void updateConfig(); 145 void updateConfig();
142 146
143 void enableScrollBars( bool ); 147 void enableScrollBars( bool );
144 148
145 Incidence *selectedIncidence(); 149 Incidence *selectedIncidence();
146 QDate selectedIncidenceDate(); 150 QDate selectedIncidenceDate();
147 151
148 void deselect(); 152 void deselect();
149 void select(); 153 void select();
150 void clear(); 154 void clear();
151 155
152#ifdef DESKTOP_VERSION 156#ifdef DESKTOP_VERSION
153 static QToolTipGroup *toolTipGroup(); 157 static QToolTipGroup *toolTipGroup();
154#endif 158#endif
155 signals: 159 signals:
156 void defaultAction( Incidence * ); 160 void defaultAction( Incidence * );
157 void newEventSignal( QDateTime ); 161 void newEventSignal( QDateTime );
158 void showDaySignal( QDate ); 162 void showDaySignal( QDate );
159 163
160 protected: 164 protected:
165 QString mToolTip;
161 void resizeEvent( QResizeEvent * ); 166 void resizeEvent( QResizeEvent * );
162 167
163 protected slots: 168 protected slots:
164 void defaultAction( QListBoxItem * ); 169 void defaultAction( QListBoxItem * );
165 void contextMenu( QListBoxItem * ); 170 void contextMenu( QListBoxItem * );
166 void selection( QListBoxItem * ); 171 void selection( QListBoxItem * );
167 void cellClicked( QListBoxItem * ); 172 void cellClicked( QListBoxItem * );
168 void newEvent(); 173 void newEvent();
169 void showDay(); 174 void showDay();
170 175
171 private: 176 private:
172 KOMonthView *mMonthView; 177 KOMonthView *mMonthView;
173 178
174 QDate mDate; 179 QDate mDate;
175 bool mPrimary; 180 bool mPrimary;
176 bool mHoliday; 181 bool mHoliday;
177 QString mHolidayString; 182 QString mHolidayString;
178 183
179 //QLabel *mLabel; 184 //QLabel *mLabel;
180 QPushButton *mLabel; 185 QPushButton *mLabel;
181 QListBox *mItemList; 186 QListBox *mItemList;
182#ifdef DESKTOP_VERSION 187#ifdef DESKTOP_VERSION
183 static QToolTipGroup *mToolTipGroup; 188 static QToolTipGroup *mToolTipGroup;
184#endif 189#endif
185 QSize mLabelSize; 190 QSize mLabelSize;
186 QSize mLabelBigSize; 191 QSize mLabelBigSize;
187 QPalette mHolidayPalette; 192 QPalette mHolidayPalette;
188 QPalette mStandardPalette; 193 QPalette mStandardPalette;
189 QPalette mPrimaryPalette; 194 QPalette mPrimaryPalette;
190 QPalette mNonPrimaryPalette; 195 QPalette mNonPrimaryPalette;
191 void setMyPalette(); 196 void setMyPalette();
192 QPalette getPalette (); 197 QPalette getPalette ();
193 void keyPressEvent ( QKeyEvent * ) ; 198 void keyPressEvent ( QKeyEvent * ) ;
194 199
195}; 200};
196 201
197 202
198class KOMonthView: public KOEventView 203class KOMonthView: public KOEventView
199{ 204{
200 Q_OBJECT 205 Q_OBJECT
201 public: 206 public:
202 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 ); 207 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 );
203 ~KOMonthView(); 208 ~KOMonthView();
204 209
205 /** Returns maximum number of days supported by the komonthview */ 210 /** Returns maximum number of days supported by the komonthview */
206 virtual int maxDatesHint(); 211 virtual int maxDatesHint();
207 212
208 /** Returns number of currently shown dates. */ 213 /** Returns number of currently shown dates. */
209 virtual int currentDateCount(); 214 virtual int currentDateCount();
210 215
211 /** returns the currently selected events */ 216 /** returns the currently selected events */
212 virtual QPtrList<Incidence> selectedIncidences(); 217 virtual QPtrList<Incidence> selectedIncidences();
213 218
214 /** returns dates of the currently selected events */ 219 /** returns dates of the currently selected events */
215 virtual DateList selectedDates(); 220 virtual DateList selectedDates();
216 221
217 virtual void printPreview(CalPrinter *calPrinter, 222 virtual void printPreview(CalPrinter *calPrinter,
218 const QDate &, const QDate &); 223 const QDate &, const QDate &);
219 bool isMonthView() { return true; } 224 bool isMonthView() { return true; }
220 bool isUpdatePossible() { return updatePossible; } 225 bool isUpdatePossible() { return updatePossible; }
221 226
222 MonthViewCell * selectedCell(); 227 MonthViewCell * selectedCell();
223 public slots: 228 public slots:
224 virtual void updateView(); 229 virtual void updateView();
225 virtual void updateConfig(); 230 virtual void updateConfig();
226 virtual void showDates(const QDate &start, const QDate &end); 231 virtual void showDates(const QDate &start, const QDate &end);
227 virtual void showEvents(QPtrList<Event> eventList); 232 virtual void showEvents(QPtrList<Event> eventList);
228 233
229 void changeEventDisplay(Event *, int); 234 void changeEventDisplay(Event *, int);
230 235
231 void clearSelection(); 236 void clearSelection();
232 237
233 void showContextMenu( Incidence * ); 238 void showContextMenu( Incidence * );
234 239
235 void setSelectedCell( MonthViewCell * ); 240 void setSelectedCell( MonthViewCell * );
236 241
237 protected slots: 242 protected slots:
238 void processSelectionChange(); 243 void processSelectionChange();
239 signals: 244 signals:
240 void nextMonth(); 245 void nextMonth();
241 void prevMonth(); 246 void prevMonth();
242 void selectWeekNum ( int ); 247 void selectWeekNum ( int );
243 void showDaySignal( QDate ); 248 void showDaySignal( QDate );
244 protected: 249 protected:
245 void resizeEvent(QResizeEvent *); 250 void resizeEvent(QResizeEvent *);
246 void viewChanged(); 251 void viewChanged();
247 void updateDayLabels(); 252 void updateDayLabels();
248 253
249 private: 254 private:
250 bool updatePossible; 255 bool updatePossible;
251 int mDaysPerWeek; 256 int mDaysPerWeek;
252 int mNumWeeks; 257 int mNumWeeks;
253 int mNumCells; 258 int mNumCells;
254 bool mWeekStartsMonday; 259 bool mWeekStartsMonday;
255 bool mShowSatSunComp; 260 bool mShowSatSunComp;
256 void computeLayout(); 261 void computeLayout();
257 262
258 QPtrVector<MonthViewCell> mCells; 263 QPtrVector<MonthViewCell> mCells;
259 QPtrVector<QLabel> mDayLabels; 264 QPtrVector<QLabel> mDayLabels;
260 QPtrVector<KOWeekButton> mWeekLabels; 265 QPtrVector<KOWeekButton> mWeekLabels;
261 266
262 bool mShortDayLabels; 267 bool mShortDayLabels;
263 int mWidthLongDayLabel; 268 int mWidthLongDayLabel;
264 269
265 QDate mStartDate; 270 QDate mStartDate;
266 271
267 MonthViewCell *mSelectedCell; 272 MonthViewCell *mSelectedCell;
268 273
269 KOEventPopupMenu *mContextMenu; 274 KOEventPopupMenu *mContextMenu;
270 void keyPressEvent ( QKeyEvent * ) ; 275 void keyPressEvent ( QKeyEvent * ) ;
271 276
272}; 277};
273 278
274#endif 279#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 0eba6a9..e75154b 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -398,327 +398,328 @@ void CalendarLocal::reInitAlarmSettings()
398 } 398 }
399 deRegisterAlarm(); 399 deRegisterAlarm();
400 mNextAlarmIncidence = 0; 400 mNextAlarmIncidence = 0;
401 checkAlarmForIncidence( 0, false ); 401 checkAlarmForIncidence( 0, false );
402 402
403} 403}
404 404
405 405
406 406
407QDateTime CalendarLocal::nextAlarm( int daysTo ) 407QDateTime CalendarLocal::nextAlarm( int daysTo )
408{ 408{
409 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 409 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
410 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 410 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
411 QDateTime next; 411 QDateTime next;
412 Event *e; 412 Event *e;
413 bool ok; 413 bool ok;
414 bool found = false; 414 bool found = false;
415 int offset; 415 int offset;
416 mNextAlarmIncidence = 0; 416 mNextAlarmIncidence = 0;
417 for( e = mEventList.first(); e; e = mEventList.next() ) { 417 for( e = mEventList.first(); e; e = mEventList.next() ) {
418 next = e->getNextAlarmDateTime(& ok, &offset ) ; 418 next = e->getNextAlarmDateTime(& ok, &offset ) ;
419 if ( ok ) { 419 if ( ok ) {
420 if ( next < nextA ) { 420 if ( next < nextA ) {
421 nextA = next; 421 nextA = next;
422 found = true; 422 found = true;
423 mNextSummary = e->summary(); 423 mNextSummary = e->summary();
424 mNextAlarmEventDateTime = next.addSecs(offset ) ; 424 mNextAlarmEventDateTime = next.addSecs(offset ) ;
425 mNextAlarmIncidence = (Incidence *) e; 425 mNextAlarmIncidence = (Incidence *) e;
426 } 426 }
427 } 427 }
428 } 428 }
429 Todo *t; 429 Todo *t;
430 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 430 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
431 next = t->getNextAlarmDateTime(& ok, &offset ) ; 431 next = t->getNextAlarmDateTime(& ok, &offset ) ;
432 if ( ok ) { 432 if ( ok ) {
433 if ( next < nextA ) { 433 if ( next < nextA ) {
434 nextA = next; 434 nextA = next;
435 found = true; 435 found = true;
436 mNextSummary = t->summary(); 436 mNextSummary = t->summary();
437 mNextAlarmEventDateTime = next.addSecs(offset ); 437 mNextAlarmEventDateTime = next.addSecs(offset );
438 mNextAlarmIncidence = (Incidence *) t; 438 mNextAlarmIncidence = (Incidence *) t;
439 } 439 }
440 } 440 }
441 } 441 }
442 if ( mNextAlarmIncidence ) { 442 if ( mNextAlarmIncidence ) {
443 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 443 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
444 mNextAlarmDateTime = nextA; 444 mNextAlarmDateTime = nextA;
445 } 445 }
446 return nextA; 446 return nextA;
447} 447}
448Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 448Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
449{ 449{
450 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 450 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
451} 451}
452 452
453Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 453Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
454{ 454{
455 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - " 455 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - "
456 << to.toString() << ")\n"; 456 << to.toString() << ")\n";
457 457
458 Alarm::List alarms; 458 Alarm::List alarms;
459 459
460 Event *e; 460 Event *e;
461 461
462 for( e = mEventList.first(); e; e = mEventList.next() ) { 462 for( e = mEventList.first(); e; e = mEventList.next() ) {
463 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 463 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
464 else appendAlarms( alarms, e, from, to ); 464 else appendAlarms( alarms, e, from, to );
465 } 465 }
466 466
467 Todo *t; 467 Todo *t;
468 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 468 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
469 appendAlarms( alarms, t, from, to ); 469 appendAlarms( alarms, t, from, to );
470 } 470 }
471 471
472 return alarms; 472 return alarms;
473} 473}
474 474
475void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 475void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
476 const QDateTime &from, const QDateTime &to ) 476 const QDateTime &from, const QDateTime &to )
477{ 477{
478 QPtrList<Alarm> alarmList = incidence->alarms(); 478 QPtrList<Alarm> alarmList = incidence->alarms();
479 Alarm *alarm; 479 Alarm *alarm;
480 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 480 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
481// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 481// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
482// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 482// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
483 if ( alarm->enabled() ) { 483 if ( alarm->enabled() ) {
484 if ( alarm->time() >= from && alarm->time() <= to ) { 484 if ( alarm->time() >= from && alarm->time() <= to ) {
485 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary() 485 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary()
486 << "': " << alarm->time().toString() << endl; 486 << "': " << alarm->time().toString() << endl;
487 alarms.append( alarm ); 487 alarms.append( alarm );
488 } 488 }
489 } 489 }
490 } 490 }
491} 491}
492 492
493void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 493void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
494 Incidence *incidence, 494 Incidence *incidence,
495 const QDateTime &from, 495 const QDateTime &from,
496 const QDateTime &to ) 496 const QDateTime &to )
497{ 497{
498 498
499 QPtrList<Alarm> alarmList = incidence->alarms(); 499 QPtrList<Alarm> alarmList = incidence->alarms();
500 Alarm *alarm; 500 Alarm *alarm;
501 QDateTime qdt; 501 QDateTime qdt;
502 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 502 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
503 if (incidence->recursOn(from.date())) { 503 if (incidence->recursOn(from.date())) {
504 qdt.setTime(alarm->time().time()); 504 qdt.setTime(alarm->time().time());
505 qdt.setDate(from.date()); 505 qdt.setDate(from.date());
506 } 506 }
507 else qdt = alarm->time(); 507 else qdt = alarm->time();
508 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 508 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
509 if ( alarm->enabled() ) { 509 if ( alarm->enabled() ) {
510 if ( qdt >= from && qdt <= to ) { 510 if ( qdt >= from && qdt <= to ) {
511 alarms.append( alarm ); 511 alarms.append( alarm );
512 } 512 }
513 } 513 }
514 } 514 }
515} 515}
516 516
517 517
518/****************************** PROTECTED METHODS ****************************/ 518/****************************** PROTECTED METHODS ****************************/
519 519
520// after changes are made to an event, this should be called. 520// after changes are made to an event, this should be called.
521void CalendarLocal::update( IncidenceBase *incidence ) 521void CalendarLocal::update( IncidenceBase *incidence )
522{ 522{
523 incidence->setSyncStatus( Event::SYNCMOD ); 523 incidence->setSyncStatus( Event::SYNCMOD );
524 incidence->setLastModified( QDateTime::currentDateTime() ); 524 incidence->setLastModified( QDateTime::currentDateTime() );
525 // we should probably update the revision number here, 525 // we should probably update the revision number here,
526 // or internally in the Event itself when certain things change. 526 // or internally in the Event itself when certain things change.
527 // need to verify with ical documentation. 527 // need to verify with ical documentation.
528 528
529 setModified( true ); 529 setModified( true );
530} 530}
531 531
532void CalendarLocal::insertEvent( Event *event ) 532void CalendarLocal::insertEvent( Event *event )
533{ 533{
534 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 534 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
535} 535}
536 536
537 537
538QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 538QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
539{ 539{
540 QPtrList<Event> eventList; 540 QPtrList<Event> eventList;
541 541
542 Event *event; 542 Event *event;
543 for( event = mEventList.first(); event; event = mEventList.next() ) { 543 for( event = mEventList.first(); event; event = mEventList.next() ) {
544 if ( event->doesRecur() ) { 544 if ( event->doesRecur() ) {
545 if ( event->isMultiDay() ) { 545 if ( event->isMultiDay() ) {
546 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 546 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
547 int i; 547 int i;
548 for ( i = 0; i <= extraDays; i++ ) { 548 for ( i = 0; i <= extraDays; i++ ) {
549 if ( event->recursOn( qd.addDays( -i ) ) ) { 549 if ( event->recursOn( qd.addDays( -i ) ) ) {
550 eventList.append( event ); 550 eventList.append( event );
551 break; 551 break;
552 } 552 }
553 } 553 }
554 } else { 554 } else {
555 if ( event->recursOn( qd ) ) 555 if ( event->recursOn( qd ) )
556 eventList.append( event ); 556 eventList.append( event );
557 } 557 }
558 } else { 558 } else {
559 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 559 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
560 eventList.append( event ); 560 eventList.append( event );
561 } 561 }
562 } 562 }
563 } 563 }
564 564
565 if ( !sorted ) { 565 if ( !sorted ) {
566 return eventList; 566 return eventList;
567 } 567 }
568 568
569 // kdDebug(5800) << "Sorting events for date\n" << endl; 569 // kdDebug(5800) << "Sorting events for date\n" << endl;
570 // now, we have to sort it based on dtStart.time() 570 // now, we have to sort it based on dtStart.time()
571 QPtrList<Event> eventListSorted; 571 QPtrList<Event> eventListSorted;
572 Event *sortEvent; 572 Event *sortEvent;
573 for ( event = eventList.first(); event; event = eventList.next() ) { 573 for ( event = eventList.first(); event; event = eventList.next() ) {
574 sortEvent = eventListSorted.first(); 574 sortEvent = eventListSorted.first();
575 int i = 0; 575 int i = 0;
576 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 576 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
577 { 577 {
578 i++; 578 i++;
579 sortEvent = eventListSorted.next(); 579 sortEvent = eventListSorted.next();
580 } 580 }
581 eventListSorted.insert( i, event ); 581 eventListSorted.insert( i, event );
582 } 582 }
583 return eventListSorted; 583 return eventListSorted;
584} 584}
585 585
586 586
587QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 587QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
588 bool inclusive ) 588 bool inclusive )
589{ 589{
590 qDebug("CalendarLocal::rawEvents called ");
590 Event *event = 0; 591 Event *event = 0;
591 592
592 QPtrList<Event> eventList; 593 QPtrList<Event> eventList;
593 594
594 // Get non-recurring events 595 // Get non-recurring events
595 for( event = mEventList.first(); event; event = mEventList.next() ) { 596 for( event = mEventList.first(); event; event = mEventList.next() ) {
596 if ( event->doesRecur() ) { 597 if ( event->doesRecur() ) {
597 QDate rStart = event->dtStart().date(); 598 QDate rStart = event->dtStart().date();
598 bool found = false; 599 bool found = false;
599 if ( inclusive ) { 600 if ( inclusive ) {
600 if ( rStart >= start && rStart <= end ) { 601 if ( rStart >= start && rStart <= end ) {
601 // Start date of event is in range. Now check for end date. 602 // Start date of event is in range. Now check for end date.
602 // if duration is negative, event recurs forever, so do not include it. 603 // if duration is negative, event recurs forever, so do not include it.
603 if ( event->recurrence()->duration() == 0 ) { // End date set 604 if ( event->recurrence()->duration() == 0 ) { // End date set
604 QDate rEnd = event->recurrence()->endDate(); 605 QDate rEnd = event->recurrence()->endDate();
605 if ( rEnd >= start && rEnd <= end ) { // End date within range 606 if ( rEnd >= start && rEnd <= end ) { // End date within range
606 found = true; 607 found = true;
607 } 608 }
608 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 609 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
609 // TODO: Calculate end date from duration. Should be done in Event 610 // TODO: Calculate end date from duration. Should be done in Event
610 // For now exclude all events with a duration. 611 // For now exclude all events with a duration.
611 } 612 }
612 } 613 }
613 } else { 614 } else {
614 bool founOne; 615 bool founOne;
615 QDate next = event->getNextOccurence( start, &founOne ).date(); 616 QDate next = event->getNextOccurence( start, &founOne ).date();
616 if ( founOne ) { 617 if ( founOne ) {
617 if ( next <= end ) { 618 if ( next <= end ) {
618 found = true; 619 found = true;
619 } 620 }
620 } 621 }
621 622
622 /* 623 /*
623 // crap !!! 624 // crap !!!
624 if ( rStart <= end ) { // Start date not after range 625 if ( rStart <= end ) { // Start date not after range
625 if ( rStart >= start ) { // Start date within range 626 if ( rStart >= start ) { // Start date within range
626 found = true; 627 found = true;
627 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 628 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
628 found = true; 629 found = true;
629 } else if ( event->recurrence()->duration() == 0 ) { // End date set 630 } else if ( event->recurrence()->duration() == 0 ) { // End date set
630 QDate rEnd = event->recurrence()->endDate(); 631 QDate rEnd = event->recurrence()->endDate();
631 if ( rEnd >= start && rEnd <= end ) { // End date within range 632 if ( rEnd >= start && rEnd <= end ) { // End date within range
632 found = true; 633 found = true;
633 } 634 }
634 } else { // Duration set 635 } else { // Duration set
635 // TODO: Calculate end date from duration. Should be done in Event 636 // TODO: Calculate end date from duration. Should be done in Event
636 // For now include all events with a duration. 637 // For now include all events with a duration.
637 found = true; 638 found = true;
638 } 639 }
639 } 640 }
640 */ 641 */
641 642
642 } 643 }
643 644
644 if ( found ) eventList.append( event ); 645 if ( found ) eventList.append( event );
645 } else { 646 } else {
646 QDate s = event->dtStart().date(); 647 QDate s = event->dtStart().date();
647 QDate e = event->dtEnd().date(); 648 QDate e = event->dtEnd().date();
648 649
649 if ( inclusive ) { 650 if ( inclusive ) {
650 if ( s >= start && e <= end ) { 651 if ( s >= start && e <= end ) {
651 eventList.append( event ); 652 eventList.append( event );
652 } 653 }
653 } else { 654 } else {
654 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { 655 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) {
655 eventList.append( event ); 656 eventList.append( event );
656 } 657 }
657 } 658 }
658 } 659 }
659 } 660 }
660 661
661 return eventList; 662 return eventList;
662} 663}
663 664
664QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 665QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
665{ 666{
666 return rawEventsForDate( qdt.date() ); 667 return rawEventsForDate( qdt.date() );
667} 668}
668 669
669QPtrList<Event> CalendarLocal::rawEvents() 670QPtrList<Event> CalendarLocal::rawEvents()
670{ 671{
671 return mEventList; 672 return mEventList;
672} 673}
673 674
674bool CalendarLocal::addJournal(Journal *journal) 675bool CalendarLocal::addJournal(Journal *journal)
675{ 676{
676 if ( journal->dtStart().isValid()) 677 if ( journal->dtStart().isValid())
677 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; 678 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl;
678 else 679 else
679 kdDebug(5800) << "Adding Journal without a DTSTART" << endl; 680 kdDebug(5800) << "Adding Journal without a DTSTART" << endl;
680 681
681 mJournalList.append(journal); 682 mJournalList.append(journal);
682 683
683 journal->registerObserver( this ); 684 journal->registerObserver( this );
684 685
685 setModified( true ); 686 setModified( true );
686 687
687 return true; 688 return true;
688} 689}
689 690
690void CalendarLocal::deleteJournal( Journal *journal ) 691void CalendarLocal::deleteJournal( Journal *journal )
691{ 692{
692 if ( mUndoIncidence ) delete mUndoIncidence; 693 if ( mUndoIncidence ) delete mUndoIncidence;
693 mUndoIncidence = journal->clone(); 694 mUndoIncidence = journal->clone();
694 mUndoIncidence->setSummary( mUndoIncidence->description().left(25)); 695 mUndoIncidence->setSummary( mUndoIncidence->description().left(25));
695 if ( mJournalList.removeRef(journal) ) { 696 if ( mJournalList.removeRef(journal) ) {
696 setModified( true ); 697 setModified( true );
697 } 698 }
698} 699}
699 700
700Journal *CalendarLocal::journal( const QDate &date ) 701Journal *CalendarLocal::journal( const QDate &date )
701{ 702{
702// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 703// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
703 704
704 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 705 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
705 if ( it->dtStart().date() == date ) 706 if ( it->dtStart().date() == date )
706 return it; 707 return it;
707 708
708 return 0; 709 return 0;
709} 710}
710 711
711Journal *CalendarLocal::journal( const QString &uid ) 712Journal *CalendarLocal::journal( const QString &uid )
712{ 713{
713 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 714 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
714 if ( it->uid() == uid ) 715 if ( it->uid() == uid )
715 return it; 716 return it;
716 717
717 return 0; 718 return 0;
718} 719}
719 720
720QPtrList<Journal> CalendarLocal::journals() 721QPtrList<Journal> CalendarLocal::journals()
721{ 722{
722 return mJournalList; 723 return mJournalList;
723} 724}
724 725
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 28402ae..f9e1e9e 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -403,215 +403,214 @@ void Incidence::deleteAttachment(Attachment *attachment)
403} 403}
404 404
405void Incidence::deleteAttachments(const QString& mime) 405void Incidence::deleteAttachments(const QString& mime)
406{ 406{
407 Attachment *at = mAttachments.first(); 407 Attachment *at = mAttachments.first();
408 while (at) { 408 while (at) {
409 if (at->mimeType() == mime) 409 if (at->mimeType() == mime)
410 mAttachments.remove(); 410 mAttachments.remove();
411 else 411 else
412 at = mAttachments.next(); 412 at = mAttachments.next();
413 } 413 }
414} 414}
415 415
416QPtrList<Attachment> Incidence::attachments() const 416QPtrList<Attachment> Incidence::attachments() const
417{ 417{
418 return mAttachments; 418 return mAttachments;
419} 419}
420 420
421QPtrList<Attachment> Incidence::attachments(const QString& mime) const 421QPtrList<Attachment> Incidence::attachments(const QString& mime) const
422{ 422{
423 QPtrList<Attachment> attachments; 423 QPtrList<Attachment> attachments;
424 QPtrListIterator<Attachment> it( mAttachments ); 424 QPtrListIterator<Attachment> it( mAttachments );
425 Attachment *at; 425 Attachment *at;
426 while ( (at = it.current()) ) { 426 while ( (at = it.current()) ) {
427 if (at->mimeType() == mime) 427 if (at->mimeType() == mime)
428 attachments.append(at); 428 attachments.append(at);
429 ++it; 429 ++it;
430 } 430 }
431 431
432 return attachments; 432 return attachments;
433} 433}
434 434
435void Incidence::setResources(const QStringList &resources) 435void Incidence::setResources(const QStringList &resources)
436{ 436{
437 if (mReadOnly) return; 437 if (mReadOnly) return;
438 mResources = resources; 438 mResources = resources;
439 updated(); 439 updated();
440} 440}
441 441
442QStringList Incidence::resources() const 442QStringList Incidence::resources() const
443{ 443{
444 return mResources; 444 return mResources;
445} 445}
446 446
447 447
448void Incidence::setPriority(int priority) 448void Incidence::setPriority(int priority)
449{ 449{
450 if (mReadOnly) return; 450 if (mReadOnly) return;
451 mPriority = priority; 451 mPriority = priority;
452 updated(); 452 updated();
453} 453}
454 454
455int Incidence::priority() const 455int Incidence::priority() const
456{ 456{
457 return mPriority; 457 return mPriority;
458} 458}
459 459
460void Incidence::setSecrecy(int sec) 460void Incidence::setSecrecy(int sec)
461{ 461{
462 if (mReadOnly) return; 462 if (mReadOnly) return;
463 mSecrecy = sec; 463 mSecrecy = sec;
464 updated(); 464 updated();
465} 465}
466 466
467int Incidence::secrecy() const 467int Incidence::secrecy() const
468{ 468{
469 return mSecrecy; 469 return mSecrecy;
470} 470}
471 471
472QString Incidence::secrecyStr() const 472QString Incidence::secrecyStr() const
473{ 473{
474 return secrecyName(mSecrecy); 474 return secrecyName(mSecrecy);
475} 475}
476 476
477QString Incidence::secrecyName(int secrecy) 477QString Incidence::secrecyName(int secrecy)
478{ 478{
479 switch (secrecy) { 479 switch (secrecy) {
480 case SecrecyPublic: 480 case SecrecyPublic:
481 return i18n("Public"); 481 return i18n("Public");
482 break; 482 break;
483 case SecrecyPrivate: 483 case SecrecyPrivate:
484 return i18n("Private"); 484 return i18n("Private");
485 break; 485 break;
486 case SecrecyConfidential: 486 case SecrecyConfidential:
487 return i18n("Confidential"); 487 return i18n("Confidential");
488 break; 488 break;
489 default: 489 default:
490 return i18n("Undefined"); 490 return i18n("Undefined");
491 break; 491 break;
492 } 492 }
493} 493}
494 494
495QStringList Incidence::secrecyList() 495QStringList Incidence::secrecyList()
496{ 496{
497 QStringList list; 497 QStringList list;
498 list << secrecyName(SecrecyPublic); 498 list << secrecyName(SecrecyPublic);
499 list << secrecyName(SecrecyPrivate); 499 list << secrecyName(SecrecyPrivate);
500 list << secrecyName(SecrecyConfidential); 500 list << secrecyName(SecrecyConfidential);
501 501
502 return list; 502 return list;
503} 503}
504 504
505 505
506QPtrList<Alarm> Incidence::alarms() const 506QPtrList<Alarm> Incidence::alarms() const
507{ 507{
508 return mAlarms; 508 return mAlarms;
509} 509}
510 510
511Alarm* Incidence::newAlarm() 511Alarm* Incidence::newAlarm()
512{ 512{
513 Alarm* alarm = new Alarm(this); 513 Alarm* alarm = new Alarm(this);
514 mAlarms.append(alarm); 514 mAlarms.append(alarm);
515// updated(); 515// updated();
516 return alarm; 516 return alarm;
517} 517}
518 518
519void Incidence::addAlarm(Alarm *alarm) 519void Incidence::addAlarm(Alarm *alarm)
520{ 520{
521 mAlarms.append(alarm); 521 mAlarms.append(alarm);
522 updated(); 522 updated();
523} 523}
524 524
525void Incidence::removeAlarm(Alarm *alarm) 525void Incidence::removeAlarm(Alarm *alarm)
526{ 526{
527 mAlarms.removeRef(alarm); 527 mAlarms.removeRef(alarm);
528 updated(); 528 updated();
529} 529}
530 530
531void Incidence::clearAlarms() 531void Incidence::clearAlarms()
532{ 532{
533 mAlarms.clear(); 533 mAlarms.clear();
534 updated(); 534 updated();
535} 535}
536 536
537bool Incidence::isAlarmEnabled() const 537bool Incidence::isAlarmEnabled() const
538{ 538{
539 Alarm* alarm; 539 Alarm* alarm;
540 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { 540 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
541 if (alarm->enabled()) 541 if (alarm->enabled())
542 return true; 542 return true;
543 } 543 }
544 return false; 544 return false;
545} 545}
546 546
547Recurrence *Incidence::recurrence() const 547Recurrence *Incidence::recurrence() const
548{ 548{
549 return mRecurrence; 549 return mRecurrence;
550} 550}
551void Incidence::setRecurrence( Recurrence * r) 551void Incidence::setRecurrence( Recurrence * r)
552{ 552{
553 delete mRecurrence; 553 delete mRecurrence;
554 mRecurrence = r; 554 mRecurrence = r;
555} 555}
556 556
557void Incidence::setLocation(const QString &location) 557void Incidence::setLocation(const QString &location)
558{ 558{
559 if (mReadOnly) return; 559 if (mReadOnly) return;
560 mLocation = location; 560 mLocation = location;
561 updated(); 561 updated();
562} 562}
563 563
564QString Incidence::location() const 564QString Incidence::location() const
565{ 565{
566 return mLocation; 566 return mLocation;
567} 567}
568 568
569ushort Incidence::doesRecur() const 569ushort Incidence::doesRecur() const
570{ 570{
571 if ( mRecurrence ) return mRecurrence->doesRecur(); 571 if ( mRecurrence ) return mRecurrence->doesRecur();
572 else return Recurrence::rNone; 572 else return Recurrence::rNone;
573} 573}
574 574
575QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const 575QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const
576{ 576{
577 QDateTime incidenceStart = dt; 577 QDateTime incidenceStart = dt;
578 *ok = false; 578 *ok = false;
579 if ( doesRecur() ) { 579 if ( doesRecur() ) {
580 bool last; 580 bool last;
581 recurrence()->getPreviousDateTime( incidenceStart , &last ); 581 recurrence()->getPreviousDateTime( incidenceStart , &last );
582 int count = 0; 582 int count = 0;
583 if ( !last ) { 583 if ( !last ) {
584 while ( !last ) { 584 while ( !last ) {
585 ++count; 585 ++count;
586 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last ); 586 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last );
587 if ( recursOn( incidenceStart.date() ) ) { 587 if ( recursOn( incidenceStart.date() ) ) {
588 last = true; // exit while llop 588 last = true; // exit while llop
589 } else { 589 } else {
590 if ( last ) { // no alarm on last recurrence 590 if ( last ) { // no alarm on last recurrence
591 return QDateTime (); 591 return QDateTime ();
592 } 592 }
593 int year = incidenceStart.date().year(); 593 int year = incidenceStart.date().year();
594 // workaround for bug in recurrence 594 // workaround for bug in recurrence
595 if ( count == 100 || year < 1980 || year > 5000 ) { 595 if ( count == 100 || year < 1000 || year > 5000 ) {
596 return QDateTime (); 596 return QDateTime ();
597 } 597 }
598 incidenceStart = incidenceStart.addSecs( 1 ); 598 incidenceStart = incidenceStart.addSecs( 1 );
599 } 599 }
600 } 600 }
601 } else { 601 } else {
602 return QDateTime (); 602 return QDateTime ();
603 } 603 }
604 } else { 604 } else {
605 if ( hasStartDate () ) { 605 if ( hasStartDate () ) {
606 incidenceStart = dtStart(); 606 incidenceStart = dtStart();
607 } 607 }
608 if ( type() =="Todo" ) { 608 if ( type() =="Todo" ) {
609 if ( ((Todo*)this)->hasDueDate() ) 609 if ( ((Todo*)this)->hasDueDate() )
610 incidenceStart = ((Todo*)this)->dtDue(); 610 incidenceStart = ((Todo*)this)->dtDue();
611
612 } 611 }
613 } 612 }
614 if ( incidenceStart > dt ) 613 if ( incidenceStart > dt )
615 *ok = true; 614 *ok = true;
616 return incidenceStart; 615 return incidenceStart;
617} 616}