summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2003-03-24 09:06:06 (UTC)
committer umopapisdn <umopapisdn>2003-03-24 09:06:06 (UTC)
commitfea2436fef9e7096b31840e7170a23280f3d6e39 (patch) (unidiff)
tree83bcaeafa071242e4b1d5df76409ff41d9900eac
parent4a0041efd5cc7e08063c09b02858fcd9c2b59880 (diff)
downloadopie-fea2436fef9e7096b31840e7170a23280f3d6e39.zip
opie-fea2436fef9e7096b31840e7170a23280f3d6e39.tar.gz
opie-fea2436fef9e7096b31840e7170a23280f3d6e39.tar.bz2
New feature: In dayview it's now possible to duplicate an event (and immediatly change some parameters for the duplicate).
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp67
-rw-r--r--core/pim/datebook/datebook.h3
-rw-r--r--core/pim/datebook/datebookday.cpp29
-rw-r--r--core/pim/datebook/datebookday.h2
4 files changed, 86 insertions, 15 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index fa509d9..47be523 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -309,282 +309,341 @@ QString DateBook::checkEvent(const Event &e)
309{ 309{
310 /* check if overlaps with itself */ 310 /* check if overlaps with itself */
311 bool checkFailed = FALSE; 311 bool checkFailed = FALSE;
312 312
313 /* check the next 12 repeats. should catch most problems */ 313 /* check the next 12 repeats. should catch most problems */
314 QDate current_date = e.start().date(); 314 QDate current_date = e.start().date();
315 Event previous = e; 315 Event previous = e;
316 for(int i = 0; i < 12; i++) 316 for(int i = 0; i < 12; i++)
317 { 317 {
318 QDateTime next; 318 QDateTime next;
319 if (!nextOccurance(previous, current_date.addDays(1), next)) { 319 if (!nextOccurance(previous, current_date.addDays(1), next)) {
320 break; // no more repeats 320 break; // no more repeats
321 } 321 }
322 if(next < previous.end()) { 322 if(next < previous.end()) {
323 checkFailed = TRUE; 323 checkFailed = TRUE;
324 break; 324 break;
325 } 325 }
326 current_date = next.date(); 326 current_date = next.date();
327 } 327 }
328 328
329 if(checkFailed) 329 if(checkFailed)
330 return tr("Event duration is potentially longer\n" 330 return tr("Event duration is potentially longer\n"
331 "than interval between repeats."); 331 "than interval between repeats.");
332 332
333 return QString::null; 333 return QString::null;
334} 334}
335 335
336QDate DateBook::currentDate() 336QDate DateBook::currentDate()
337{ 337{
338 QDate d = QDate::currentDate(); 338 QDate d = QDate::currentDate();
339 339
340 if ( dayView && views->visibleWidget() == dayView ) { 340 if ( dayView && views->visibleWidget() == dayView ) {
341 d = dayView->date(); 341 d = dayView->date();
342 } else if ( weekView && views->visibleWidget() == weekView ) { 342 } else if ( weekView && views->visibleWidget() == weekView ) {
343 d = weekView->date(); 343 d = weekView->date();
344 } else if ( weekLstView && views->visibleWidget() == weekLstView ) { 344 } else if ( weekLstView && views->visibleWidget() == weekLstView ) {
345 d = weekLstView->date(); 345 d = weekLstView->date();
346 } else if ( monthView && views->visibleWidget() == monthView ) { 346 } else if ( monthView && views->visibleWidget() == monthView ) {
347 d = monthView->selectedDate(); 347 d = monthView->selectedDate();
348 } 348 }
349 349
350 return d; 350 return d;
351} 351}
352 352
353void DateBook::view(int v, const QDate &d) { 353void DateBook::view(int v, const QDate &d) {
354 if (v==DAY) { 354 if (v==DAY) {
355 initDay(); 355 initDay();
356 dayAction->setOn( TRUE ); 356 dayAction->setOn( TRUE );
357 dayView->setDate( d ); 357 dayView->setDate( d );
358 views->raiseWidget( dayView ); 358 views->raiseWidget( dayView );
359 dayView->redraw(); 359 dayView->redraw();
360 } else if (v==WEEK) { 360 } else if (v==WEEK) {
361 initWeek(); 361 initWeek();
362 weekAction->setOn( TRUE ); 362 weekAction->setOn( TRUE );
363 weekView->setDate( d ); 363 weekView->setDate( d );
364 views->raiseWidget( weekView ); 364 views->raiseWidget( weekView );
365 weekView->redraw(); 365 weekView->redraw();
366 } else if (v==WEEKLST) { 366 } else if (v==WEEKLST) {
367 initWeekLst(); 367 initWeekLst();
368 weekLstAction->setOn( TRUE ); 368 weekLstAction->setOn( TRUE );
369 weekLstView->setDate(d); 369 weekLstView->setDate(d);
370 views->raiseWidget( weekLstView ); 370 views->raiseWidget( weekLstView );
371 weekLstView->redraw(); 371 weekLstView->redraw();
372 } else if (v==MONTH) { 372 } else if (v==MONTH) {
373 initMonth(); 373 initMonth();
374 monthAction->setOn( TRUE ); 374 monthAction->setOn( TRUE );
375 monthView->setDate( d.year(), d.month(), d.day() ); 375 monthView->setDate( d.year(), d.month(), d.day() );
376 views->raiseWidget( monthView ); 376 views->raiseWidget( monthView );
377 monthView->redraw(); 377 monthView->redraw();
378 } 378 }
379} 379}
380 380
381void DateBook::viewDefault(const QDate &d) { 381void DateBook::viewDefault(const QDate &d) {
382 Config config("DateBook"); 382 Config config("DateBook");
383 config.setGroup("Main"); 383 config.setGroup("Main");
384 int current=config.readNumEntry("defaultview", DAY); 384 int current=config.readNumEntry("defaultview", DAY);
385 385
386 view(current,d); 386 view(current,d);
387} 387}
388 388
389void DateBook::viewDay() { 389void DateBook::viewDay() {
390 view(DAY,currentDate()); 390 view(DAY,currentDate());
391} 391}
392 392
393void DateBook::viewWeek() { 393void DateBook::viewWeek() {
394 view(WEEK,currentDate()); 394 view(WEEK,currentDate());
395} 395}
396 396
397void DateBook::viewWeekLst() { 397void DateBook::viewWeekLst() {
398 view(WEEKLST,currentDate()); 398 view(WEEKLST,currentDate());
399} 399}
400 400
401void DateBook::viewMonth() { 401void DateBook::viewMonth() {
402 view(MONTH,currentDate()); 402 view(MONTH,currentDate());
403} 403}
404 404
405void DateBook::duplicateEvent( const Event &e )
406{
407 qWarning("Hmmm...");
408 // Alot of code duplication, as this is almost like editEvent();
409 if (syncing) {
410 QMessageBox::warning( this, tr("Calendar"),
411 tr( "Can not edit data, currently syncing") );
412 return;
413 }
414
415 Event dupevent;
416 dupevent.setStart(e.start());
417 dupevent.setEnd(e.end());
418 dupevent.setDescription(e.description());
419 dupevent.setLocation(e.location());
420 // dupevent.setCategory(e.category());// how is this done??
421 dupevent.setNotes(e.notes());
422 dupevent.setAllDay(e.isAllDay());
423 dupevent.setTimeZone(e.timeZone());
424 if(e.hasAlarm()) dupevent.setAlarm(e.alarmDelay(),e.alarmSound());
425 if(e.hasRepeat()) dupevent.setRepeat(e.repeatPattern());
426
427 // workaround added for text input.
428 QDialog editDlg( this, 0, TRUE );
429 DateEntry *entry;
430 editDlg.setCaption( tr("Duplicate Event") );
431 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
432 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
433 sv->setResizePolicy( QScrollView::AutoOneFit );
434 // KLUDGE!!!
435 sv->setHScrollBarMode( QScrollView::AlwaysOff );
436 vb->addWidget( sv );
437 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" );
438 entry->timezone->setEnabled( FALSE );
439 sv->addChild( entry );
440
441#if defined(Q_WS_QWS) || defined(_WS_QWS_)
442 editDlg.showMaximized();
443#endif
444 while (editDlg.exec() ) {
445 Event newEv = entry->event();
446 if(newEv.description().isEmpty() && newEv.notes().isEmpty() )
447 break;
448 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid
449 QString error = checkEvent(newEv);
450 if (!error.isNull()) {
451 if (QMessageBox::warning(this, "error box",
452 error, "Fix it", "Continue",
453 0, 0, 1) == 0)
454 continue;
455 }
456 db->addEvent(newEv);
457 emit newEvent();
458 break;
459 }
460}
461
405void DateBook::editEvent( const Event &e ) 462void DateBook::editEvent( const Event &e )
406{ 463{
407 if (syncing) { 464 if (syncing) {
408 QMessageBox::warning( this, tr("Calendar"), 465 QMessageBox::warning( this, tr("Calendar"),
409 tr( "Can not edit data, currently syncing") ); 466 tr( "Can not edit data, currently syncing") );
410 return; 467 return;
411 } 468 }
412 469
413 // workaround added for text input. 470 // workaround added for text input.
414 QDialog editDlg( this, 0, TRUE ); 471 QDialog editDlg( this, 0, TRUE );
415 DateEntry *entry; 472 DateEntry *entry;
416 editDlg.setCaption( tr("Edit Event") ); 473 editDlg.setCaption( tr("Edit Event") );
417 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 474 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
418 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 475 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
419 sv->setResizePolicy( QScrollView::AutoOneFit ); 476 sv->setResizePolicy( QScrollView::AutoOneFit );
420 // KLUDGE!!! 477 // KLUDGE!!!
421 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 478 sv->setHScrollBarMode( QScrollView::AlwaysOff );
422 vb->addWidget( sv ); 479 vb->addWidget( sv );
423 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" ); 480 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
424 entry->timezone->setEnabled( FALSE ); 481 entry->timezone->setEnabled( FALSE );
425 sv->addChild( entry ); 482 sv->addChild( entry );
426 483
427#if defined(Q_WS_QWS) || defined(_WS_QWS_) 484#if defined(Q_WS_QWS) || defined(_WS_QWS_)
428 editDlg.showMaximized(); 485 editDlg.showMaximized();
429#endif 486#endif
430 while (editDlg.exec() ) { 487 while (editDlg.exec() ) {
431 Event newEv = entry->event(); 488 Event newEv = entry->event();
432 if(newEv.description().isEmpty() && newEv.notes().isEmpty() ) 489 if(newEv.description().isEmpty() && newEv.notes().isEmpty() )
433 break; 490 break;
434 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid 491 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid
435 QString error = checkEvent(newEv); 492 QString error = checkEvent(newEv);
436 if (!error.isNull()) { 493 if (!error.isNull()) {
437 if (QMessageBox::warning(this, "error box", 494 if (QMessageBox::warning(this, "error box",
438 error, "Fix it", "Continue", 495 error, "Fix it", "Continue",
439 0, 0, 1) == 0) 496 0, 0, 1) == 0)
440 continue; 497 continue;
441 } 498 }
442 db->editEvent(e, newEv); 499 db->editEvent(e, newEv);
443 emit newEvent(); 500 emit newEvent();
444 break; 501 break;
445 } 502 }
446} 503}
447 504
448void DateBook::removeEvent( const Event &e ) 505void DateBook::removeEvent( const Event &e )
449{ 506{
450 if (syncing) { 507 if (syncing) {
451 QMessageBox::warning( this, tr("Calendar"), 508 QMessageBox::warning( this, tr("Calendar"),
452 tr( "Can not edit data, currently syncing") ); 509 tr( "Can not edit data, currently syncing") );
453 return; 510 return;
454 } 511 }
455 512
456 QString strName = e.description(); 513 QString strName = e.description();
457 514
458 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) ) 515 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
459 return; 516 return;
460 517
461 db->removeEvent( e ); 518 db->removeEvent( e );
462 if ( views->visibleWidget() == dayView && dayView ) 519 if ( views->visibleWidget() == dayView && dayView )
463 dayView->redraw(); 520 dayView->redraw();
464} 521}
465 522
466void DateBook::addEvent( const Event &e ) 523void DateBook::addEvent( const Event &e )
467{ 524{
468 QDate d = e.start().date(); 525 QDate d = e.start().date();
469 initDay(); 526 initDay();
470 dayView->setDate( d ); 527 dayView->setDate( d );
471} 528}
472 529
473void DateBook::showDay( int year, int month, int day ) 530void DateBook::showDay( int year, int month, int day )
474{ 531{
475 QDate d(year, month, day); 532 QDate d(year, month, day);
476 view(DAY,d); 533 view(DAY,d);
477} 534}
478 535
479void DateBook::initDay() 536void DateBook::initDay()
480{ 537{
481 if ( !dayView ) { 538 if ( !dayView ) {
482 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); 539 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" );
483 views->addWidget( dayView, DAY ); 540 views->addWidget( dayView, DAY );
484 dayView->setStartViewTime( startTime ); 541 dayView->setStartViewTime( startTime );
485 dayView->setJumpToCurTime( bJumpToCurTime ); 542 dayView->setJumpToCurTime( bJumpToCurTime );
486 dayView->setRowStyle( rowStyle ); 543 dayView->setRowStyle( rowStyle );
487 connect( this, SIGNAL( newEvent() ), 544 connect( this, SIGNAL( newEvent() ),
488 dayView, SLOT( redraw() ) ); 545 dayView, SLOT( redraw() ) );
489 connect( dayView, SIGNAL( newEvent() ), 546 connect( dayView, SIGNAL( newEvent() ),
490 this, SLOT( fileNew() ) ); 547 this, SLOT( fileNew() ) );
491 connect( dayView, SIGNAL( removeEvent( const Event & ) ), 548 connect( dayView, SIGNAL( removeEvent( const Event & ) ),
492 this, SLOT( removeEvent( const Event & ) ) ); 549 this, SLOT( removeEvent( const Event & ) ) );
493 connect( dayView, SIGNAL( editEvent( const Event & ) ), 550 connect( dayView, SIGNAL( editEvent( const Event & ) ),
494 this, SLOT( editEvent( const Event & ) ) ); 551 this, SLOT( editEvent( const Event & ) ) );
552 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ),
553 this, SLOT( duplicateEvent( const Event & ) ) );
495 connect( dayView, SIGNAL( beamEvent( const Event & ) ), 554 connect( dayView, SIGNAL( beamEvent( const Event & ) ),
496 this, SLOT( beamEvent( const Event & ) ) ); 555 this, SLOT( beamEvent( const Event & ) ) );
497 connect( dayView, SIGNAL(sigNewEvent(const QString &)), 556 connect( dayView, SIGNAL(sigNewEvent(const QString &)),
498 this, SLOT(slotNewEventFromKey(const QString &)) ); 557 this, SLOT(slotNewEventFromKey(const QString &)) );
499 } 558 }
500} 559}
501 560
502void DateBook::initWeek() 561void DateBook::initWeek()
503{ 562{
504 if ( !weekView ) { 563 if ( !weekView ) {
505 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" ); 564 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" );
506 weekView->setStartViewTime( startTime ); 565 weekView->setStartViewTime( startTime );
507 views->addWidget( weekView, WEEK ); 566 views->addWidget( weekView, WEEK );
508 connect( weekView, SIGNAL( showDate( int, int, int ) ), 567 connect( weekView, SIGNAL( showDate( int, int, int ) ),
509 this, SLOT( showDay( int, int, int ) ) ); 568 this, SLOT( showDay( int, int, int ) ) );
510 connect( this, SIGNAL( newEvent() ), 569 connect( this, SIGNAL( newEvent() ),
511 weekView, SLOT( redraw() ) ); 570 weekView, SLOT( redraw() ) );
512 } 571 }
513 //But also get it right: the year that we display can be different 572 //But also get it right: the year that we display can be different
514 //from the year of the current date. So, first find the year 573 //from the year of the current date. So, first find the year
515 //number of the current week. 574 //number of the current week.
516 575
517 int yearNumber, totWeeks; 576 int yearNumber, totWeeks;
518 calcWeek( currentDate(), totWeeks, yearNumber, onMonday ); 577 calcWeek( currentDate(), totWeeks, yearNumber, onMonday );
519 578
520 QDate d = QDate( yearNumber, 12, 31 ); 579 QDate d = QDate( yearNumber, 12, 31 );
521 calcWeek( d, totWeeks, yearNumber, onMonday ); 580 calcWeek( d, totWeeks, yearNumber, onMonday );
522 581
523 while ( totWeeks == 1 ) { 582 while ( totWeeks == 1 ) {
524 d = d.addDays( -1 ); 583 d = d.addDays( -1 );
525 calcWeek( d, totWeeks, yearNumber, onMonday ); 584 calcWeek( d, totWeeks, yearNumber, onMonday );
526 } 585 }
527 if ( totWeeks != weekView->totalWeeks() ) 586 if ( totWeeks != weekView->totalWeeks() )
528 weekView->setTotalWeeks( totWeeks ); 587 weekView->setTotalWeeks( totWeeks );
529} 588}
530void DateBook::initWeekLst() { 589void DateBook::initWeekLst() {
531 if ( !weekLstView ) { 590 if ( !weekLstView ) {
532 weekLstView = new DateBookWeekLst( ampm, onMonday, db, 591 weekLstView = new DateBookWeekLst( ampm, onMonday, db,
533 views, "weeklst view" ); 592 views, "weeklst view" );
534 views->addWidget( weekLstView, WEEKLST ); 593 views->addWidget( weekLstView, WEEKLST );
535 594
536 //weekLstView->setStartViewTime( startTime ); 595 //weekLstView->setStartViewTime( startTime );
537 connect( weekLstView, SIGNAL( showDate( int, int, int ) ), 596 connect( weekLstView, SIGNAL( showDate( int, int, int ) ),
538 this, SLOT( showDay( int, int, int ) ) ); 597 this, SLOT( showDay( int, int, int ) ) );
539 connect( weekLstView, SIGNAL( addEvent( const QDateTime &, 598 connect( weekLstView, SIGNAL( addEvent( const QDateTime &,
540 const QDateTime &, 599 const QDateTime &,
541 const QString & ) ), 600 const QString & ) ),
542 this, SLOT( slotNewEntry( const QDateTime &, 601 this, SLOT( slotNewEntry( const QDateTime &,
543 const QDateTime &, 602 const QDateTime &,
544 const QString & ) ) ); 603 const QString & ) ) );
545 connect( this, SIGNAL( newEvent() ), 604 connect( this, SIGNAL( newEvent() ),
546 weekLstView, SLOT( redraw() ) ); 605 weekLstView, SLOT( redraw() ) );
547 connect( weekLstView, SIGNAL( editEvent( const Event & ) ), 606 connect( weekLstView, SIGNAL( editEvent( const Event & ) ),
548 this, SLOT( editEvent( const Event & ) ) ); 607 this, SLOT( editEvent( const Event & ) ) );
549 } 608 }
550} 609}
551 610
552 611
553void DateBook::initMonth() 612void DateBook::initMonth()
554{ 613{
555 if ( !monthView ) { 614 if ( !monthView ) {
556 monthView = new DateBookMonth( views, "month view", FALSE, db ); 615 monthView = new DateBookMonth( views, "month view", FALSE, db );
557 views->addWidget( monthView, MONTH ); 616 views->addWidget( monthView, MONTH );
558 connect( monthView, SIGNAL( dateClicked( int, int, int ) ), 617 connect( monthView, SIGNAL( dateClicked( int, int, int ) ),
559 this, SLOT( showDay( int, int, int ) ) ); 618 this, SLOT( showDay( int, int, int ) ) );
560 connect( this, SIGNAL( newEvent() ), 619 connect( this, SIGNAL( newEvent() ),
561 monthView, SLOT( redraw() ) ); 620 monthView, SLOT( redraw() ) );
562 qApp->processEvents(); 621 qApp->processEvents();
563 } 622 }
564} 623}
565 624
566void DateBook::loadSettings() 625void DateBook::loadSettings()
567{ 626{
568 { 627 {
569 Config config( "qpe" ); 628 Config config( "qpe" );
570 config.setGroup("Time"); 629 config.setGroup("Time");
571 ampm = config.readBoolEntry( "AMPM", TRUE ); 630 ampm = config.readBoolEntry( "AMPM", TRUE );
572 onMonday = config.readBoolEntry( "MONDAY" ); 631 onMonday = config.readBoolEntry( "MONDAY" );
573 } 632 }
574 633
575 { 634 {
576 Config config("DateBook"); 635 Config config("DateBook");
577 config.setGroup("Main"); 636 config.setGroup("Main");
578 startTime = config.readNumEntry("startviewtime", 8); 637 startTime = config.readNumEntry("startviewtime", 8);
579 aPreset = config.readBoolEntry("alarmpreset"); 638 aPreset = config.readBoolEntry("alarmpreset");
580 presetTime = config.readNumEntry("presettime"); 639 presetTime = config.readNumEntry("presettime");
581 bJumpToCurTime = config.readBoolEntry("jumptocurtime"); 640 bJumpToCurTime = config.readBoolEntry("jumptocurtime");
582 rowStyle = config.readNumEntry("rowstyle"); 641 rowStyle = config.readNumEntry("rowstyle");
583 } 642 }
584} 643}
585 644
586void DateBook::saveSettings() 645void DateBook::saveSettings()
587{ 646{
588 Config config( "qpe" ); 647 Config config( "qpe" );
589 Config configDB( "DateBook" ); 648 Config configDB( "DateBook" );
590 configDB.setGroup( "Main" ); 649 configDB.setGroup( "Main" );
@@ -723,209 +782,213 @@ void DateBook::flush()
723 db->save(); 782 db->save();
724} 783}
725 784
726void DateBook::timerEvent( QTimerEvent *e ) 785void DateBook::timerEvent( QTimerEvent *e )
727{ 786{
728 if ( alarmCounter < 10 ) { 787 if ( alarmCounter < 10 ) {
729 alarmCounter++; 788 alarmCounter++;
730 Sound::soundAlarm(); 789 Sound::soundAlarm();
731 } 790 }
732 else 791 else
733 killTimer( e->timerId() ); 792 killTimer( e->timerId() );
734} 793}
735 794
736void DateBook::changeClock( bool newClock ) 795void DateBook::changeClock( bool newClock )
737{ 796{
738 ampm = newClock; 797 ampm = newClock;
739 // repaint the affected objects... 798 // repaint the affected objects...
740 if (dayView) dayView->redraw(); 799 if (dayView) dayView->redraw();
741 if (weekView) weekView->redraw(); 800 if (weekView) weekView->redraw();
742 if (weekLstView) weekLstView->redraw(); 801 if (weekLstView) weekLstView->redraw();
743} 802}
744 803
745void DateBook::changeWeek( bool m ) 804void DateBook::changeWeek( bool m )
746{ 805{
747 /* no need to redraw, each widget catches. Do need to 806 /* no need to redraw, each widget catches. Do need to
748 store though for widgets we haven't made yet */ 807 store though for widgets we haven't made yet */
749 onMonday = m; 808 onMonday = m;
750} 809}
751 810
752void DateBook::slotToday() 811void DateBook::slotToday()
753{ 812{
754 // we need to view today using default view 813 // we need to view today using default view
755 viewDefault(QDate::currentDate()); 814 viewDefault(QDate::currentDate());
756} 815}
757 816
758void DateBook::closeEvent( QCloseEvent *e ) 817void DateBook::closeEvent( QCloseEvent *e )
759{ 818{
760 if(syncing) { 819 if(syncing) {
761 /* no need to save, did that at flush */ 820 /* no need to save, did that at flush */
762 e->accept(); 821 e->accept();
763 return; 822 return;
764 } 823 }
765 824
766 // save settings will generate it's own error messages, no 825 // save settings will generate it's own error messages, no
767 // need to do checking ourselves. 826 // need to do checking ourselves.
768 saveSettings(); 827 saveSettings();
769 if ( db->save() ) 828 if ( db->save() )
770 e->accept(); 829 e->accept();
771 else { 830 else {
772 if ( QMessageBox::critical( this, tr( "Out of space" ), 831 if ( QMessageBox::critical( this, tr( "Out of space" ),
773 tr("Calendar was unable to save\n" 832 tr("Calendar was unable to save\n"
774 "your changes.\n" 833 "your changes.\n"
775 "Free up some space and try again.\n" 834 "Free up some space and try again.\n"
776 "\nQuit anyway?"), 835 "\nQuit anyway?"),
777 QMessageBox::Yes|QMessageBox::Escape, 836 QMessageBox::Yes|QMessageBox::Escape,
778 QMessageBox::No|QMessageBox::Default ) 837 QMessageBox::No|QMessageBox::Default )
779 != QMessageBox::No ) 838 != QMessageBox::No )
780 e->accept(); 839 e->accept();
781 else 840 else
782 e->ignore(); 841 e->ignore();
783 } 842 }
784} 843}
785 844
786// Entering directly from the "keyboard" 845// Entering directly from the "keyboard"
787void DateBook::slotNewEventFromKey( const QString &str ) 846void DateBook::slotNewEventFromKey( const QString &str )
788{ 847{
789 if (syncing) { 848 if (syncing) {
790 QMessageBox::warning( this, tr("Calendar"), 849 QMessageBox::warning( this, tr("Calendar"),
791 tr( "Can not edit data, currently syncing") ); 850 tr( "Can not edit data, currently syncing") );
792 return; 851 return;
793 } 852 }
794 853
795 // We get to here from a key pressed in the Day View 854 // We get to here from a key pressed in the Day View
796 // So we can assume some things. We want the string 855 // So we can assume some things. We want the string
797 // passed in to be part of the description. 856 // passed in to be part of the description.
798 QDateTime start, end; 857 QDateTime start, end;
799 if ( views->visibleWidget() == dayView ) { 858 if ( views->visibleWidget() == dayView ) {
800 dayView->selectedDates( start, end ); 859 dayView->selectedDates( start, end );
801 } else if ( views->visibleWidget() == monthView ) { 860 } else if ( views->visibleWidget() == monthView ) {
802 QDate d = monthView->selectedDate(); 861 QDate d = monthView->selectedDate();
803 start = end = d; 862 start = end = d;
804 start.setTime( QTime( 10, 0 ) ); 863 start.setTime( QTime( 10, 0 ) );
805 end.setTime( QTime( 12, 0 ) ); 864 end.setTime( QTime( 12, 0 ) );
806 } else if ( views->visibleWidget() == weekView ) { 865 } else if ( views->visibleWidget() == weekView ) {
807 QDate d = weekView->date(); 866 QDate d = weekView->date();
808 start = end = d; 867 start = end = d;
809 start.setTime( QTime( 10, 0 ) ); 868 start.setTime( QTime( 10, 0 ) );
810 end.setTime( QTime( 12, 0 ) ); 869 end.setTime( QTime( 12, 0 ) );
811 } else if ( views->visibleWidget() == weekLstView ) { 870 } else if ( views->visibleWidget() == weekLstView ) {
812 QDate d = weekLstView->date(); 871 QDate d = weekLstView->date();
813 start = end = d; 872 start = end = d;
814 start.setTime( QTime( 10, 0 ) ); 873 start.setTime( QTime( 10, 0 ) );
815 end.setTime( QTime( 12, 0 ) ); 874 end.setTime( QTime( 12, 0 ) );
816 } 875 }
817 slotNewEntry(start, end, str); 876 slotNewEntry(start, end, str);
818} 877}
819void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str) { 878void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location) {
820 // argh! This really needs to be encapsulated in a class 879 // argh! This really needs to be encapsulated in a class
821 // or function. 880 // or function.
822 QDialog newDlg( this, 0, TRUE ); 881 QDialog newDlg( this, 0, TRUE );
823 newDlg.setCaption( DateEntryBase::tr("New Event") ); 882 newDlg.setCaption( DateEntryBase::tr("New Event") );
824 DateEntry *e; 883 DateEntry *e;
825 QVBoxLayout *vb = new QVBoxLayout( &newDlg ); 884 QVBoxLayout *vb = new QVBoxLayout( &newDlg );
826 QScrollView *sv = new QScrollView( &newDlg ); 885 QScrollView *sv = new QScrollView( &newDlg );
827 sv->setResizePolicy( QScrollView::AutoOneFit ); 886 sv->setResizePolicy( QScrollView::AutoOneFit );
828 sv->setFrameStyle( QFrame::NoFrame ); 887 sv->setFrameStyle( QFrame::NoFrame );
829 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 888 sv->setHScrollBarMode( QScrollView::AlwaysOff );
830 vb->addWidget( sv ); 889 vb->addWidget( sv );
831 890
832 Event ev; 891 Event ev;
833 ev.setDescription( str ); 892 ev.setDescription( str );
834 // When the new gui comes in, change this... 893 // When the new gui comes in, change this...
835 ev.setLocation( tr("(Unknown)") ); 894 if(location==0) {
895 ev.setLocation( tr("(Unknown)") );
896 } else {
897 ev.setLocation(location);
898 }
836 ev.setStart( start ); 899 ev.setStart( start );
837 ev.setEnd( end ); 900 ev.setEnd( end );
838 901
839 e = new DateEntry( onMonday, ev, ampm, &newDlg ); 902 e = new DateEntry( onMonday, ev, ampm, &newDlg );
840 e->setAlarmEnabled( aPreset, presetTime, Event::Loud ); 903 e->setAlarmEnabled( aPreset, presetTime, Event::Loud );
841 sv->addChild( e ); 904 sv->addChild( e );
842#if defined(Q_WS_QWS) || defined(_WS_QWS_) 905#if defined(Q_WS_QWS) || defined(_WS_QWS_)
843 newDlg.showMaximized(); 906 newDlg.showMaximized();
844#endif 907#endif
845 while (newDlg.exec()) { 908 while (newDlg.exec()) {
846 ev = e->event(); 909 ev = e->event();
847 ev.assignUid(); 910 ev.assignUid();
848 QString error = checkEvent( ev ); 911 QString error = checkEvent( ev );
849 if ( !error.isNull() ) { 912 if ( !error.isNull() ) {
850 if ( QMessageBox::warning( this, tr("Error!"), 913 if ( QMessageBox::warning( this, tr("Error!"),
851 error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 ) 914 error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 )
852 continue; 915 continue;
853 } 916 }
854 db->addEvent( ev ); 917 db->addEvent( ev );
855 emit newEvent(); 918 emit newEvent();
856 break; 919 break;
857 } 920 }
858} 921}
859 922
860void DateBook::setDocument( const QString &filename ) 923void DateBook::setDocument( const QString &filename )
861{ 924{
862 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return; 925 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
863 926
864 QValueList<Event> tl = Event::readVCalendar( filename ); 927 QValueList<Event> tl = Event::readVCalendar( filename );
865 for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) { 928 for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
866 db->addEvent( *it ); 929 db->addEvent( *it );
867 } 930 }
868} 931}
869 932
870static const char * beamfile = "/tmp/obex/event.vcs"; 933static const char * beamfile = "/tmp/obex/event.vcs";
871 934
872void DateBook::beamEvent( const Event &e ) 935void DateBook::beamEvent( const Event &e )
873{ 936{
874 qDebug("trying to beamn"); 937 qDebug("trying to beamn");
875 unlink( beamfile ); // delete if exists 938 unlink( beamfile ); // delete if exists
876 mkdir("/tmp/obex/", 0755); 939 mkdir("/tmp/obex/", 0755);
877 Event::writeVCalendar( beamfile, e ); 940 Event::writeVCalendar( beamfile, e );
878 Ir *ir = new Ir( this ); 941 Ir *ir = new Ir( this );
879 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 942 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
880 QString description = e.description(); 943 QString description = e.description();
881 ir->send( beamfile, description, "text/x-vCalendar" ); 944 ir->send( beamfile, description, "text/x-vCalendar" );
882} 945}
883 946
884void DateBook::beamDone( Ir *ir ) 947void DateBook::beamDone( Ir *ir )
885{ 948{
886 delete ir; 949 delete ir;
887 unlink( beamfile ); 950 unlink( beamfile );
888} 951}
889 952
890void DateBook::slotFind() 953void DateBook::slotFind()
891{ 954{
892 // move it to the day view... 955 // move it to the day view...
893 viewDay(); 956 viewDay();
894 FindDialog frmFind( "Calendar", this ); 957 FindDialog frmFind( "Calendar", this );
895 frmFind.setUseDate( true ); 958 frmFind.setUseDate( true );
896 frmFind.setDate( currentDate() ); 959 frmFind.setDate( currentDate() );
897 QObject::connect( &frmFind, 960 QObject::connect( &frmFind,
898 SIGNAL(signalFindClicked(const QString&, const QDate&, 961 SIGNAL(signalFindClicked(const QString&, const QDate&,
899 bool, bool, int)), 962 bool, bool, int)),
900 this, 963 this,
901 SLOT(slotDoFind(const QString&, const QDate&, 964 SLOT(slotDoFind(const QString&, const QDate&,
902 bool, bool, int)) ); 965 bool, bool, int)) );
903 QObject::connect( this, 966 QObject::connect( this,
904 SIGNAL(signalNotFound()), 967 SIGNAL(signalNotFound()),
905 &frmFind, 968 &frmFind,
906 SLOT(slotNotFound()) ); 969 SLOT(slotNotFound()) );
907 QObject::connect( this, 970 QObject::connect( this,
908 SIGNAL(signalWrapAround()), 971 SIGNAL(signalWrapAround()),
909 &frmFind, 972 &frmFind,
910 SLOT(slotWrapAround()) ); 973 SLOT(slotWrapAround()) );
911 frmFind.move(0,0); 974 frmFind.move(0,0);
912 frmFind.exec(); 975 frmFind.exec();
913 inSearch = false; 976 inSearch = false;
914} 977}
915 978
916bool catComp( QArray<int> cats, int category ) 979bool catComp( QArray<int> cats, int category )
917{ 980{
918 bool returnMe; 981 bool returnMe;
919 int i, 982 int i,
920 count; 983 count;
921 984
922 count = int(cats.count()); 985 count = int(cats.count());
923 returnMe = false; 986 returnMe = false;
924 if ( (category == -1 && count == 0) || category == -2 ) 987 if ( (category == -1 && count == 0) || category == -2 )
925 returnMe = true; 988 returnMe = true;
926 else { 989 else {
927 for ( i = 0; i < count; i++ ) { 990 for ( i = 0; i < count; i++ ) {
928 if ( category == cats[i] ) { 991 if ( category == cats[i] ) {
929 returnMe = true; 992 returnMe = true;
930 break; 993 break;
931 } 994 }
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
index ba8f97e..623862b 100644
--- a/core/pim/datebook/datebook.h
+++ b/core/pim/datebook/datebook.h
@@ -1,130 +1,131 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef DATEBOOK_H 20#ifndef DATEBOOK_H
21#define DATEBOOK_H 21#define DATEBOOK_H
22 22
23#include <qpe/datebookdb.h> 23#include <qpe/datebookdb.h>
24 24
25#include <qmainwindow.h> 25#include <qmainwindow.h>
26 26
27class QAction; 27class QAction;
28class QWidgetStack; 28class QWidgetStack;
29class DateBookDay; 29class DateBookDay;
30class DateBookWeek; 30class DateBookWeek;
31class DateBookWeekLst; 31class DateBookWeekLst;
32class DateBookMonth; 32class DateBookMonth;
33class Event; 33class Event;
34class QDate; 34class QDate;
35class Ir; 35class Ir;
36 36
37class DateBookDBHack : public DateBookDB { 37class DateBookDBHack : public DateBookDB {
38 public: 38 public:
39 Event eventByUID(int id); 39 Event eventByUID(int id);
40}; 40};
41 41
42class DateBook : public QMainWindow 42class DateBook : public QMainWindow
43{ 43{
44 Q_OBJECT 44 Q_OBJECT
45 45
46public: 46public:
47 DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 47 DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
48 ~DateBook(); 48 ~DateBook();
49 49
50signals: 50signals:
51 void newEvent(); 51 void newEvent();
52 void signalNotFound(); 52 void signalNotFound();
53 void signalWrapAround(); 53 void signalWrapAround();
54 54
55protected: 55protected:
56 QDate currentDate(); 56 QDate currentDate();
57 void timerEvent( QTimerEvent *e ); 57 void timerEvent( QTimerEvent *e );
58 void closeEvent( QCloseEvent *e ); 58 void closeEvent( QCloseEvent *e );
59 59
60 void view(int v, const QDate &d); 60 void view(int v, const QDate &d);
61 61
62public slots: 62public slots:
63 void flush(); 63 void flush();
64 void reload(); 64 void reload();
65 65
66private slots: 66private slots:
67 void fileNew(); 67 void fileNew();
68 void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str); 68 void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location=0);
69 void slotSettings(); 69 void slotSettings();
70 void newDefaultView(QAction *a); 70 void newDefaultView(QAction *a);
71 void slotToday();// view today 71 void slotToday();// view today
72 void changeClock( bool newClock ); 72 void changeClock( bool newClock );
73 void changeWeek( bool newDay ); 73 void changeWeek( bool newDay );
74 void appMessage(const QCString& msg, const QByteArray& data); 74 void appMessage(const QCString& msg, const QByteArray& data);
75 // handle key events in the day view... 75 // handle key events in the day view...
76 void slotNewEventFromKey( const QString &str ); 76 void slotNewEventFromKey( const QString &str );
77 void slotFind(); 77 void slotFind();
78 void slotDoFind( const QString &, const QDate &, bool, bool, int ); 78 void slotDoFind( const QString &, const QDate &, bool, bool, int );
79 79
80 void viewDefault(const QDate &d); 80 void viewDefault(const QDate &d);
81 81
82 void viewDay(); 82 void viewDay();
83 void viewWeek(); 83 void viewWeek();
84 void viewWeekLst(); 84 void viewWeekLst();
85 void viewMonth(); 85 void viewMonth();
86 86
87 void showDay( int y, int m, int d ); 87 void showDay( int y, int m, int d );
88 88
89 void editEvent( const Event &e ); 89 void editEvent( const Event &e );
90 void duplicateEvent( const Event &e );
90 void removeEvent( const Event &e ); 91 void removeEvent( const Event &e );
91 92
92 void receive( const QCString &msg, const QByteArray &data ); 93 void receive( const QCString &msg, const QByteArray &data );
93 void setDocument( const QString & ); 94 void setDocument( const QString & );
94 void beamEvent( const Event &e ); 95 void beamEvent( const Event &e );
95 void beamDone( Ir *ir ); 96 void beamDone( Ir *ir );
96 97
97private: 98private:
98 void addEvent( const Event &e ); 99 void addEvent( const Event &e );
99 void initDay(); 100 void initDay();
100 void initWeek(); 101 void initWeek();
101 void initWeekLst(); 102 void initWeekLst();
102 void initMonth(); 103 void initMonth();
103 void loadSettings(); 104 void loadSettings();
104 void saveSettings(); 105 void saveSettings();
105 106
106private: 107private:
107 DateBookDBHack *db; 108 DateBookDBHack *db;
108 QWidgetStack *views; 109 QWidgetStack *views;
109 DateBookDay *dayView; 110 DateBookDay *dayView;
110 DateBookWeek *weekView; 111 DateBookWeek *weekView;
111 DateBookMonth *monthView; 112 DateBookMonth *monthView;
112 DateBookWeekLst *weekLstView; 113 DateBookWeekLst *weekLstView;
113 QAction *dayAction, *weekAction, *weekLstAction, *monthAction; 114 QAction *dayAction, *weekAction, *weekLstAction, *monthAction;
114 bool aPreset; // have everything set to alarm? 115 bool aPreset; // have everything set to alarm?
115 int presetTime; // the standard time for the alarm 116 int presetTime; // the standard time for the alarm
116 int startTime; 117 int startTime;
117 int rowStyle; 118 int rowStyle;
118 bool bJumpToCurTime; //should jump to current time in dayview? 119 bool bJumpToCurTime; //should jump to current time in dayview?
119 bool ampm; 120 bool ampm;
120 bool onMonday; 121 bool onMonday;
121 122
122 bool syncing; 123 bool syncing;
123 bool inSearch; 124 bool inSearch;
124 125
125 int alarmCounter; 126 int alarmCounter;
126 127
127 QString checkEvent(const Event &); 128 QString checkEvent(const Event &);
128}; 129};
129 130
130#endif 131#endif
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index 42f026a..5d472a6 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -220,192 +220,194 @@ void DateBookDay::updateView( void )
220{ 220{
221 timeMarker->setTime( QTime::currentTime() ); 221 timeMarker->setTime( QTime::currentTime() );
222 //need to find a way to update all DateBookDayWidgets 222 //need to find a way to update all DateBookDayWidgets
223} 223}
224 224
225void DateBookDay::setSelectedWidget( DateBookDayWidget *w ) 225void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
226{ 226{
227 selectedWidget = w; 227 selectedWidget = w;
228} 228}
229 229
230DateBookDayWidget * DateBookDay::getSelectedWidget( void ) 230DateBookDayWidget * DateBookDay::getSelectedWidget( void )
231{ 231{
232 return selectedWidget; 232 return selectedWidget;
233} 233}
234 234
235void DateBookDay::selectedDates( QDateTime &start, QDateTime &end ) 235void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
236{ 236{
237 start.setDate( currDate ); 237 start.setDate( currDate );
238 end.setDate( currDate ); 238 end.setDate( currDate );
239 239
240 int sh=99,eh=-1; 240 int sh=99,eh=-1;
241 241
242 int n = dayView()->numSelections(); 242 int n = dayView()->numSelections();
243 243
244 for (int i=0; i<n; i++) { 244 for (int i=0; i<n; i++) {
245 QTableSelection sel = dayView()->selection( i ); 245 QTableSelection sel = dayView()->selection( i );
246 sh = QMIN(sh,sel.topRow()); 246 sh = QMIN(sh,sel.topRow());
247 eh = QMAX(sh,sel.bottomRow()+1); 247 eh = QMAX(sh,sel.bottomRow()+1);
248 } 248 }
249 if (sh > 23 || eh < 1) { 249 if (sh > 23 || eh < 1) {
250 sh=8; 250 sh=8;
251 eh=9; 251 eh=9;
252 } 252 }
253 253
254 start.setTime( QTime( sh, 0, 0 ) ); 254 start.setTime( QTime( sh, 0, 0 ) );
255 end.setTime( QTime( eh, 0, 0 ) ); 255 end.setTime( QTime( eh, 0, 0 ) );
256} 256}
257 257
258void DateBookDay::setDate( int y, int m, int d ) 258void DateBookDay::setDate( int y, int m, int d )
259{ 259{
260 header->setDate( y, m, d ); 260 header->setDate( y, m, d );
261 261
262 selectedWidget = 0; 262 selectedWidget = 0;
263} 263}
264 264
265void DateBookDay::setDate( QDate d) 265void DateBookDay::setDate( QDate d)
266{ 266{
267 header->setDate( d.year(), d.month(), d.day() ); 267 header->setDate( d.year(), d.month(), d.day() );
268 268
269 selectedWidget = 0; 269 selectedWidget = 0;
270} 270}
271 271
272void DateBookDay::dateChanged( int y, int m, int d ) 272void DateBookDay::dateChanged( int y, int m, int d )
273{ 273{
274 QDate date( y, m, d ); 274 QDate date( y, m, d );
275 if ( currDate == date ) 275 if ( currDate == date )
276 return; 276 return;
277 currDate.setYMD( y, m, d ); 277 currDate.setYMD( y, m, d );
278 relayoutPage(); 278 relayoutPage();
279 dayView()->clearSelection(); 279 dayView()->clearSelection();
280 QTableSelection ts; 280 QTableSelection ts;
281 281
282 if (jumpToCurTime && this->date() == QDate::currentDate()) 282 if (jumpToCurTime && this->date() == QDate::currentDate())
283 { 283 {
284 ts.init( QTime::currentTime().hour(), 0); 284 ts.init( QTime::currentTime().hour(), 0);
285 ts.expandTo( QTime::currentTime().hour(), 0); 285 ts.expandTo( QTime::currentTime().hour(), 0);
286 } else 286 } else
287 { 287 {
288 ts.init( startTime, 0 ); 288 ts.init( startTime, 0 );
289 ts.expandTo( startTime, 0 ); 289 ts.expandTo( startTime, 0 );
290 } 290 }
291 291
292 dayView()->addSelection( ts ); 292 dayView()->addSelection( ts );
293 293
294 selectedWidget = 0; 294 selectedWidget = 0;
295 295
296} 296}
297 297
298void DateBookDay::redraw() 298void DateBookDay::redraw()
299{ 299{
300 if ( isUpdatesEnabled() ) 300 if ( isUpdatesEnabled() )
301 relayoutPage(); 301 relayoutPage();
302} 302}
303 303
304void DateBookDay::getEvents() 304void DateBookDay::getEvents()
305{ 305{
306 widgetList.clear(); 306 widgetList.clear();
307 307
308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); 308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate );
309 QValueListIterator<EffectiveEvent> it; 309 QValueListIterator<EffectiveEvent> it;
310 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 310 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
311 EffectiveEvent ev=*it; 311 EffectiveEvent ev=*it;
312 if(!(ev.end().hour()==ev.start().hour() && ev.end().minute()==ev.start().minute())) {// Skip effective events with no duration. (i.e ending at 00:00) 312 if(!(ev.end().hour()==ev.start().hour() && ev.end().minute()==ev.start().minute())) {// Skip effective events with no duration. (i.e ending at 00:00)
313 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 313 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
314 connect( w, SIGNAL( deleteMe( const Event & ) ), 314 connect( w, SIGNAL( deleteMe( const Event & ) ),
315 this, SIGNAL( removeEvent( const Event & ) ) ); 315 this, SIGNAL( removeEvent( const Event & ) ) );
316 connect( w, SIGNAL( duplicateMe( const Event & ) ),
317 this, SIGNAL( duplicateEvent( const Event & ) ) );
316 connect( w, SIGNAL( editMe( const Event & ) ), 318 connect( w, SIGNAL( editMe( const Event & ) ),
317 this, SIGNAL( editEvent( const Event & ) ) ); 319 this, SIGNAL( editEvent( const Event & ) ) );
318 connect( w, SIGNAL( beamMe( const Event & ) ), 320 connect( w, SIGNAL( beamMe( const Event & ) ),
319 this, SIGNAL( beamEvent( const Event & ) ) ); 321 this, SIGNAL( beamEvent( const Event & ) ) );
320 widgetList.append( w ); 322 widgetList.append( w );
321 } 323 }
322 } 324 }
323 325
324} 326}
325 327
326static int place( const DateBookDayWidget *item, bool *used, int maxn ) 328static int place( const DateBookDayWidget *item, bool *used, int maxn )
327{ 329{
328 int place = 0; 330 int place = 0;
329 int start = item->event().start().hour(); 331 int start = item->event().start().hour();
330 QTime e = item->event().end(); 332 QTime e = item->event().end();
331 int end = e.hour(); 333 int end = e.hour();
332 if ( e.minute() < 5 ) 334 if ( e.minute() < 5 )
333 end--; 335 end--;
334 if ( end < start ) 336 if ( end < start )
335 end = start; 337 end = start;
336 while ( place < maxn ) { 338 while ( place < maxn ) {
337 bool free = TRUE; 339 bool free = TRUE;
338 int s = start; 340 int s = start;
339 while( s <= end ) { 341 while( s <= end ) {
340 if ( used[10*s+place] ) { 342 if ( used[10*s+place] ) {
341 free = FALSE; 343 free = FALSE;
342 break; 344 break;
343 } 345 }
344 s++; 346 s++;
345 } 347 }
346 if ( free ) break; 348 if ( free ) break;
347 place++; 349 place++;
348 } 350 }
349 if ( place == maxn ) { 351 if ( place == maxn ) {
350 return -1; 352 return -1;
351 } 353 }
352 while( start <= end ) { 354 while( start <= end ) {
353 used[10*start+place] = TRUE; 355 used[10*start+place] = TRUE;
354 start++; 356 start++;
355 } 357 }
356 return place; 358 return place;
357} 359}
358 360
359 361
360void DateBookDay::relayoutPage( bool fromResize ) 362void DateBookDay::relayoutPage( bool fromResize )
361{ 363{
362 setUpdatesEnabled( FALSE ); 364 setUpdatesEnabled( FALSE );
363 if ( !fromResize ) 365 if ( !fromResize )
364 getEvents(); // no need we already have them! 366 getEvents(); // no need we already have them!
365 367
366 widgetList.sort(); 368 widgetList.sort();
367 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning 369 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
368 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view 370 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
369 371
370 int wCount = widgetList.count(); 372 int wCount = widgetList.count();
371 int wid = view->columnWidth(0)-1; 373 int wid = view->columnWidth(0)-1;
372 int wd; 374 int wd;
373 int n = 1; 375 int n = 1;
374 376
375 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget 377 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
376 378
377 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++); 379 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
378 380
379 if ( wCount < 20 ) { 381 if ( wCount < 20 ) {
380 382
381 QArray<QRect> geometries(wCount); 383 QArray<QRect> geometries(wCount);
382 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector 384 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
383 385
384 for ( int i = 0; i < wCount; i++) 386 for ( int i = 0; i < wCount; i++)
385 { 387 {
386 QValueList<int> intersectedWidgets; 388 QValueList<int> intersectedWidgets;
387 389
388 //find all widgets intersecting with widgetList.at(i) 390 //find all widgets intersecting with widgetList.at(i)
389 for ( int j = 0; j < wCount; j++) 391 for ( int j = 0; j < wCount; j++)
390 if (i != j) 392 if (i != j)
391 if (geometries[j].intersects(geometries[i])) 393 if (geometries[j].intersects(geometries[i]))
392 intersectedWidgets.append(j); 394 intersectedWidgets.append(j);
393 395
394 //for each of these intersecting widgets find out how many widgets are they intersecting with 396 //for each of these intersecting widgets find out how many widgets are they intersecting with
395 for ( uint j = 0; j < intersectedWidgets.count(); j++) 397 for ( uint j = 0; j < intersectedWidgets.count(); j++)
396 { 398 {
397 QArray<int> inter(wCount); 399 QArray<int> inter(wCount);
398 inter[j]=1; 400 inter[j]=1;
399 401
400 if (intersectedWidgets[j] != -1) 402 if (intersectedWidgets[j] != -1)
401 for ( uint k = j; k < intersectedWidgets.count(); k++) 403 for ( uint k = j; k < intersectedWidgets.count(); k++)
402 if (j != k && intersectedWidgets[k] != -1) 404 if (j != k && intersectedWidgets[k] != -1)
403 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) 405 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]]))
404 { 406 {
405 inter[j]++; 407 inter[j]++;
406 intersectedWidgets[k] = -1; 408 intersectedWidgets[k] = -1;
407 } 409 }
408 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1; 410 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
409 } 411 }
410 412
411 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++; 413 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
@@ -627,171 +629,174 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
627 geom.setX( 0 ); 629 geom.setX( 0 );
628 geom.setWidth(dateBook->dayView()->columnWidth(0)-1); 630 geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
629 631
630} 632}
631void DateBookDayWidget::setAllDayText( QString &text ) { 633void DateBookDayWidget::setAllDayText( QString &text ) {
632 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 634 text += "<b>" + tr("This is an all day event.") + "</b><br>";
633} 635}
634void DateBookDayWidget::setEventText( QString& text ) { 636void DateBookDayWidget::setEventText( QString& text ) {
635 bool whichClock = dateBook->dayView()->whichClock(); 637 bool whichClock = dateBook->dayView()->whichClock();
636 if ( ev.startDate() != ev.endDate() ) { 638 if ( ev.startDate() != ev.endDate() ) {
637 text += "<b>" + tr("Start") + "</b>: "; 639 text += "<b>" + tr("Start") + "</b>: ";
638 text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE ); 640 text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE );
639 text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>"; 641 text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>";
640 text += "<b>" + tr("End") + "</b>: "; 642 text += "<b>" + tr("End") + "</b>: ";
641 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE ); 643 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
642 text += " - " + TimeString::longDateString( ev.endDate() ) + "<br>"; 644 text += " - " + TimeString::longDateString( ev.endDate() ) + "<br>";
643 } else { 645 } else {
644 text += "<b>" + tr("Time") + "</b>: "; 646 text += "<b>" + tr("Time") + "</b>: ";
645 text += TimeString::timeString( ev.start(), whichClock, FALSE ); 647 text += TimeString::timeString( ev.start(), whichClock, FALSE );
646 text += "<b>" + tr(" - ") + "</b>"; 648 text += "<b>" + tr(" - ") + "</b>";
647 text += TimeString::timeString( ev.end(), whichClock, FALSE ); 649 text += TimeString::timeString( ev.end(), whichClock, FALSE );
648 } 650 }
649} 651}
650 652
651DateBookDayWidget::~DateBookDayWidget() 653DateBookDayWidget::~DateBookDayWidget()
652{ 654{
653} 655}
654 656
655void DateBookDayWidget::paintEvent( QPaintEvent *e ) 657void DateBookDayWidget::paintEvent( QPaintEvent *e )
656{ 658{
657 QPainter p( this ); 659 QPainter p( this );
658 660
659 if (dateBook->getSelectedWidget() == this) 661 if (dateBook->getSelectedWidget() == this)
660 { 662 {
661 p.setBrush( QColor( 155, 240, 230 ) ); // selected item 663 p.setBrush( QColor( 155, 240, 230 ) ); // selected item
662 } else 664 } else
663 { 665 {
664 if (dateBook->date() == QDate::currentDate()) 666 if (dateBook->date() == QDate::currentDate())
665 { 667 {
666 QTime curTime = QTime::currentTime(); 668 QTime curTime = QTime::currentTime();
667 669
668 if (ev.end() < curTime) 670 if (ev.end() < curTime)
669 { 671 {
670 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive 672 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
671 } else 673 } else
672 { 674 {
673 //change color in dependence of the time till the event starts 675 //change color in dependence of the time till the event starts
674 int duration = curTime.secsTo(ev.start()); 676 int duration = curTime.secsTo(ev.start());
675 if (duration < 0) duration = 0; 677 if (duration < 0) duration = 0;
676 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift 678 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
677 679
678 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue 680 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
679 } 681 }
680 } else 682 } else
681 { 683 {
682 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date) 684 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
683 //perhaps make a distinction between future/past dates 685 //perhaps make a distinction between future/past dates
684 } 686 }
685 } 687 }
686 688
687 p.setPen( QColor(100, 100, 100) ); 689 p.setPen( QColor(100, 100, 100) );
688 p.drawRect(rect()); 690 p.drawRect(rect());
689 691
690 // p.drawRect(0,0, 5, height()); 692 // p.drawRect(0,0, 5, height());
691 693
692 int y = 0; 694 int y = 0;
693 int d = 0; 695 int d = 0;
694 696
695 if ( ev.event().hasAlarm() ) { 697 if ( ev.event().hasAlarm() ) {
696 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) ); 698 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
697 y = 20; 699 y = 20;
698 d = 20; 700 d = 20;
699 } 701 }
700 702
701 if ( ev.event().hasRepeat() ) { 703 if ( ev.event().hasRepeat() ) {
702 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 704 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
703 d = 20; 705 d = 20;
704 y += 20; 706 y += 20;
705 } 707 }
706 708
707 QSimpleRichText rt( text, font() ); 709 QSimpleRichText rt( text, font() );
708 rt.setWidth( geom.width() - d - 6 ); 710 rt.setWidth( geom.width() - d - 6 );
709 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 711 rt.draw( &p, 7, 0, e->region(), colorGroup() );
710} 712}
711 713
712void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 714void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
713{ 715{
714 DateBookDayWidget *item; 716 DateBookDayWidget *item;
715 717
716 item = dateBook->getSelectedWidget(); 718 item = dateBook->getSelectedWidget();
717 if (item) item->update(); 719 if (item) item->update();
718 720
719 dateBook->setSelectedWidget(this); 721 dateBook->setSelectedWidget(this);
720 update(); 722 update();
721 dateBook->repaint(); 723 dateBook->repaint();
722 724
723 QPopupMenu m; 725 QPopupMenu m;
724 m.insertItem( tr( "Edit" ), 1 ); 726 m.insertItem( tr( "Edit" ), 1 );
725 m.insertItem( tr( "Delete" ), 2 ); 727 m.insertItem( tr( "Duplicate" ), 4 );
726 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 728 m.insertItem( tr( "Delete" ), 2 );
727 int r = m.exec( e->globalPos() ); 729 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
728 if ( r == 1 ) { 730 int r = m.exec( e->globalPos() );
729 emit editMe( ev.event() ); 731 if ( r == 1 ) {
730 } else if ( r == 2 ) { 732 emit editMe( ev.event() );
731 emit deleteMe( ev.event() ); 733 } else if ( r == 2 ) {
732 } else if ( r == 3 ) { 734 emit deleteMe( ev.event() );
733 emit beamMe( ev.event() ); 735 } else if ( r == 3 ) {
734 } 736 emit beamMe( ev.event() );
737 } else if ( r == 4 ) {
738 emit duplicateMe( ev.event() );
739 }
735} 740}
736 741
737void DateBookDayWidget::setGeometry( const QRect &r ) 742void DateBookDayWidget::setGeometry( const QRect &r )
738{ 743{
739 geom = r; 744 geom = r;
740 setFixedSize( r.width()+1, r.height()+1 ); 745 setFixedSize( r.width()+1, r.height()+1 );
741 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 746 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
742 show(); 747 show();
743} 748}
744 749
745 750
746//--------------------------------------------------------------------------------------------- 751//---------------------------------------------------------------------------------------------
747//--------------------------------------------------------------------------------------------- 752//---------------------------------------------------------------------------------------------
748 753
749 754
750DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) 755DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
751 : QWidget( db->dayView()->viewport() ), dateBook( db ) 756 : QWidget( db->dayView()->viewport() ), dateBook( db )
752{ 757{
753 setBackgroundMode( PaletteBase ); 758 setBackgroundMode( PaletteBase );
754} 759}
755 760
756DateBookDayTimeMarker::~DateBookDayTimeMarker() 761DateBookDayTimeMarker::~DateBookDayTimeMarker()
757{ 762{
758} 763}
759 764
760void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ ) 765void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
761{ 766{
762 QPainter p( this ); 767 QPainter p( this );
763 p.setBrush( QColor( 255, 0, 0 ) ); 768 p.setBrush( QColor( 255, 0, 0 ) );
764 769
765 QPen pen; 770 QPen pen;
766 pen.setStyle(NoPen); 771 pen.setStyle(NoPen);
767 772
768 p.setPen( pen ); 773 p.setPen( pen );
769 p.drawRect(rect()); 774 p.drawRect(rect());
770} 775}
771 776
772void DateBookDayTimeMarker::setTime( const QTime &t ) 777void DateBookDayTimeMarker::setTime( const QTime &t )
773{ 778{
774 int y = t.hour()*60+t.minute(); 779 int y = t.hour()*60+t.minute();
775 int rh = dateBook->dayView()->rowHeight(0); 780 int rh = dateBook->dayView()->rowHeight(0);
776 y = y*rh/60; 781 y = y*rh/60;
777 782
778 geom.setX( 0 ); 783 geom.setX( 0 );
779 784
780 int x = dateBook->dayView()->columnWidth(0)-1; 785 int x = dateBook->dayView()->columnWidth(0)-1;
781 geom.setWidth( x ); 786 geom.setWidth( x );
782 787
783 geom.setY( y ); 788 geom.setY( y );
784 geom.setHeight( 1 ); 789 geom.setHeight( 1 );
785 790
786 setGeometry( geom ); 791 setGeometry( geom );
787 792
788 time = t; 793 time = t;
789} 794}
790 795
791void DateBookDayTimeMarker::setGeometry( const QRect &r ) 796void DateBookDayTimeMarker::setGeometry( const QRect &r )
792{ 797{
793 geom = r; 798 geom = r;
794 setFixedSize( r.width()+1, r.height()+1 ); 799 setFixedSize( r.width()+1, r.height()+1 );
795 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 800 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
796 show(); 801 show();
797} 802}
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index db1cd04..2faf24e 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -1,205 +1,207 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef DATEBOOKDAY_H 20#ifndef DATEBOOKDAY_H
21#define DATEBOOKDAY_H 21#define DATEBOOKDAY_H
22 22
23#include <qpe/event.h> 23#include <qpe/event.h>
24 24
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qtable.h> 26#include <qtable.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qlist.h> 28#include <qlist.h>
29 29
30class DateBookDayHeader; 30class DateBookDayHeader;
31class DateBookDB; 31class DateBookDB;
32class QDateTime; 32class QDateTime;
33class QMouseEvent; 33class QMouseEvent;
34class QPaintEvent; 34class QPaintEvent;
35class QResizeEvent; 35class QResizeEvent;
36 36
37class DateBookDayView : public QTable 37class DateBookDayView : public QTable
38{ 38{
39 Q_OBJECT 39 Q_OBJECT
40public: 40public:
41 DateBookDayView( bool hourClock, QWidget *parent, const char *name ); 41 DateBookDayView( bool hourClock, QWidget *parent, const char *name );
42 bool whichClock() const; 42 bool whichClock() const;
43 43
44 void setRowStyle( int style ); 44 void setRowStyle( int style );
45 45
46public slots: 46public slots:
47 void moveUp(); 47 void moveUp();
48 void moveDown(); 48 void moveDown();
49 49
50signals: 50signals:
51 void sigColWidthChanged(); 51 void sigColWidthChanged();
52 void sigCapturedKey( const QString &txt ); 52 void sigCapturedKey( const QString &txt );
53protected slots: 53protected slots:
54 void slotChangeClock( bool ); 54 void slotChangeClock( bool );
55protected: 55protected:
56 virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected ); 56 virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected );
57 virtual void paintFocus( QPainter *p, const QRect &cr ); 57 virtual void paintFocus( QPainter *p, const QRect &cr );
58 58
59 virtual void resizeEvent( QResizeEvent *e ); 59 virtual void resizeEvent( QResizeEvent *e );
60 void keyPressEvent( QKeyEvent *e ); 60 void keyPressEvent( QKeyEvent *e );
61 void initHeader(); 61 void initHeader();
62private: 62private:
63 bool ampm; 63 bool ampm;
64}; 64};
65 65
66class DateBookDay; 66class DateBookDay;
67class DateBookDayWidget : public QWidget 67class DateBookDayWidget : public QWidget
68{ 68{
69 Q_OBJECT 69 Q_OBJECT
70 70
71public: 71public:
72 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db ); 72 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db );
73 ~DateBookDayWidget(); 73 ~DateBookDayWidget();
74 74
75 const QRect &geometry() { return geom; } 75 const QRect &geometry() { return geom; }
76 void setGeometry( const QRect &r ); 76 void setGeometry( const QRect &r );
77 77
78 const EffectiveEvent &event() const { return ev; } 78 const EffectiveEvent &event() const { return ev; }
79 79
80signals: 80signals:
81 void deleteMe( const Event &e ); 81 void deleteMe( const Event &e );
82 void duplicateMe( const Event &e );
82 void editMe( const Event &e ); 83 void editMe( const Event &e );
83 void beamMe( const Event &e ); 84 void beamMe( const Event &e );
84 85
85protected: 86protected:
86 void paintEvent( QPaintEvent *e ); 87 void paintEvent( QPaintEvent *e );
87 void mousePressEvent( QMouseEvent *e ); 88 void mousePressEvent( QMouseEvent *e );
88 89
89private: 90private:
90 /** 91 /**
91 * Sets the text for an all day Event 92 * Sets the text for an all day Event
92 * All day events have no time associated 93 * All day events have no time associated
93 */ 94 */
94 void setAllDayText( QString& text ); 95 void setAllDayText( QString& text );
95 96
96 /** 97 /**
97 * Sets the EventText 98 * Sets the EventText
98 * it got a start and an end Time 99 * it got a start and an end Time
99 */ 100 */
100 void setEventText( QString& text ); 101 void setEventText( QString& text );
101 const EffectiveEvent ev; 102 const EffectiveEvent ev;
102 DateBookDay *dateBook; 103 DateBookDay *dateBook;
103 QString text; 104 QString text;
104 QRect geom; 105 QRect geom;
105}; 106};
106 107
107//Marker for current time in the dayview 108//Marker for current time in the dayview
108class DateBookDayTimeMarker : public QWidget 109class DateBookDayTimeMarker : public QWidget
109{ 110{
110 Q_OBJECT 111 Q_OBJECT
111 112
112public: 113public:
113 DateBookDayTimeMarker( DateBookDay *db ); 114 DateBookDayTimeMarker( DateBookDay *db );
114 ~DateBookDayTimeMarker(); 115 ~DateBookDayTimeMarker();
115 116
116 const QRect &geometry() { return geom; } 117 const QRect &geometry() { return geom; }
117 void setGeometry( const QRect &r ); 118 void setGeometry( const QRect &r );
118 void setTime( const QTime &t ); 119 void setTime( const QTime &t );
119 120
120signals: 121signals:
121 122
122protected: 123protected:
123 void paintEvent( QPaintEvent *e ); 124 void paintEvent( QPaintEvent *e );
124 125
125private: 126private:
126 QRect geom; 127 QRect geom;
127 QTime time; 128 QTime time;
128 DateBookDay *dateBook; 129 DateBookDay *dateBook;
129}; 130};
130 131
131//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights 132//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
132class WidgetListClass : public QList<DateBookDayWidget> 133class WidgetListClass : public QList<DateBookDayWidget>
133{ 134{
134 private: 135 private:
135 136
136 int compareItems( QCollection::Item s1, QCollection::Item s2 ) 137 int compareItems( QCollection::Item s1, QCollection::Item s2 )
137 { 138 {
138 //hmm, don't punish me for that ;) 139 //hmm, don't punish me for that ;)
139 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height()) 140 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
140 { 141 {
141 return -1; 142 return -1;
142 } else 143 } else
143 { 144 {
144 return 1; 145 return 1;
145 } 146 }
146 } 147 }
147 148
148 149
149}; 150};
150 151
151class DateBookDay : public QVBox 152class DateBookDay : public QVBox
152{ 153{
153 Q_OBJECT 154 Q_OBJECT
154 155
155public: 156public:
156 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, 157 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,
157 QWidget *parent, const char *name ); 158 QWidget *parent, const char *name );
158 void selectedDates( QDateTime &start, QDateTime &end ); 159 void selectedDates( QDateTime &start, QDateTime &end );
159 QDate date() const; 160 QDate date() const;
160 DateBookDayView *dayView() const { return view; } 161 DateBookDayView *dayView() const { return view; }
161 void setStartViewTime( int startHere ); 162 void setStartViewTime( int startHere );
162 int startViewTime() const; 163 int startViewTime() const;
163 void setSelectedWidget( DateBookDayWidget * ); 164 void setSelectedWidget( DateBookDayWidget * );
164 DateBookDayWidget * getSelectedWidget( void ); 165 DateBookDayWidget * getSelectedWidget( void );
165 void setJumpToCurTime( bool bJump ); 166 void setJumpToCurTime( bool bJump );
166 void setRowStyle( int style ); 167 void setRowStyle( int style );
167 168
168public slots: 169public slots:
169 void setDate( int y, int m, int d ); 170 void setDate( int y, int m, int d );
170 void setDate( QDate ); 171 void setDate( QDate );
171 void redraw(); 172 void redraw();
172 void slotWeekChanged( bool bStartOnMonday ); 173 void slotWeekChanged( bool bStartOnMonday );
173 void updateView();//updates TimeMarker and DayWidget-colors 174 void updateView();//updates TimeMarker and DayWidget-colors
174 175
175signals: 176signals:
176 void removeEvent( const Event& ); 177 void removeEvent( const Event& );
177 void editEvent( const Event& ); 178 void editEvent( const Event& );
179 void duplicateEvent( const Event& );
178 void beamEvent( const Event& ); 180 void beamEvent( const Event& );
179 void newEvent(); 181 void newEvent();
180 void sigNewEvent( const QString & ); 182 void sigNewEvent( const QString & );
181 183
182protected slots: 184protected slots:
183 void keyPressEvent(QKeyEvent *); 185 void keyPressEvent(QKeyEvent *);
184 186
185private slots: 187private slots:
186 void dateChanged( int y, int m, int d ); 188 void dateChanged( int y, int m, int d );
187 void slotColWidthChanged() { relayoutPage(); }; 189 void slotColWidthChanged() { relayoutPage(); };
188 190
189private: 191private:
190 void getEvents(); 192 void getEvents();
191 void relayoutPage( bool fromResize = false ); 193 void relayoutPage( bool fromResize = false );
192 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); 194 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom );
193 QDate currDate; 195 QDate currDate;
194 DateBookDayView *view; 196 DateBookDayView *view;
195 DateBookDayHeader *header; 197 DateBookDayHeader *header;
196 DateBookDB *db; 198 DateBookDB *db;
197 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height 199 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height
198 int startTime; 200 int startTime;
199 bool jumpToCurTime;//should we jump to current time in dayview? 201 bool jumpToCurTime;//should we jump to current time in dayview?
200 int rowStyle; 202 int rowStyle;
201 DateBookDayWidget *selectedWidget; //actual selected widget (obviously) 203 DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
202 DateBookDayTimeMarker *timeMarker;//marker for current time 204 DateBookDayTimeMarker *timeMarker;//marker for current time
203}; 205};
204 206
205#endif 207#endif