summaryrefslogtreecommitdiff
path: root/core/pim/datebook
Unidiff
Diffstat (limited to 'core/pim/datebook') (more/less context) (show whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp46
-rw-r--r--core/pim/datebook/datebook.pro6
-rw-r--r--core/pim/datebook/datebookday.cpp123
-rw-r--r--core/pim/datebook/datebookday.h6
-rw-r--r--core/pim/datebook/datebookdayallday.cpp226
-rw-r--r--core/pim/datebook/datebookdayallday.h80
-rw-r--r--core/pim/datebook/datebooksettings.h1
-rw-r--r--core/pim/datebook/datebookweek.cpp63
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.cpp12
-rw-r--r--core/pim/datebook/datebookweeklst.cpp10
-rw-r--r--core/pim/datebook/dateentryimpl.cpp2
-rw-r--r--core/pim/datebook/opie-datebook.control6
-rw-r--r--core/pim/datebook/repeatentry.cpp50
13 files changed, 557 insertions, 74 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index b7e89b0..10a9b59 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -207,48 +207,52 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
207 * from view() 207 * from view()
208 */ 208 */
209 if( needEvilHack ){ 209 if( needEvilHack ){
210 QTimer::singleShot( 500, this, SLOT(viewWeek()) ); 210 QTimer::singleShot( 500, this, SLOT(viewWeek()) );
211 } 211 }
212} 212}
213 213
214void DateBook::receive( const QCString &msg, const QByteArray &data ) 214void DateBook::receive( const QCString &msg, const QByteArray &data )
215{ 215{
216 QDataStream stream( data, IO_ReadOnly ); 216 QDataStream stream( data, IO_ReadOnly );
217 if ( msg == "timeChange(QString)" ) { 217 if ( msg == "timeChange(QString)" ) {
218 // update active view! 218 // update active view!
219 if ( dayAction->isOn() ) 219 if ( dayAction->isOn() )
220 viewDay(); 220 viewDay();
221 else if ( weekAction->isOn() ) 221 else if ( weekAction->isOn() )
222 viewWeek(); 222 viewWeek();
223 else if ( monthAction->isOn() ) 223 else if ( monthAction->isOn() )
224 viewMonth(); 224 viewMonth();
225 } 225 }
226 else if (msg == "editEvent(int)") { 226 else if (msg == "editEvent(int)") {
227 int uid; 227 int uid;
228 stream >> uid; 228 stream >> uid;
229 Event e=db->eventByUID(uid); 229 Event e=db->eventByUID(uid);
230 editEvent(e); 230 editEvent(e);
231 }else if (msg == "viewDefault(QDate)"){
232 QDate day;
233 stream >> day;
234 viewDefault(day);
231 } 235 }
232} 236}
233 237
234DateBook::~DateBook() 238DateBook::~DateBook()
235{ 239{
236} 240}
237 241
238void DateBook::slotSettings() 242void DateBook::slotSettings()
239{ 243{
240 DateBookSettings frmSettings( ampm, this ); 244 DateBookSettings frmSettings( ampm, this );
241 frmSettings.setStartTime( startTime ); 245 frmSettings.setStartTime( startTime );
242 frmSettings.setAlarmPreset( aPreset, presetTime ); 246 frmSettings.setAlarmPreset( aPreset, presetTime );
243 frmSettings.setJumpToCurTime( bJumpToCurTime ); 247 frmSettings.setJumpToCurTime( bJumpToCurTime );
244 frmSettings.setRowStyle( rowStyle ); 248 frmSettings.setRowStyle( rowStyle );
245 frmSettings.comboDefaultView->setCurrentItem(defaultView-1); 249 frmSettings.comboDefaultView->setCurrentItem(defaultView-1);
246 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig); 250 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig);
247 251
248 bool found=false; 252 bool found=false;
249 for (int i=0; i<(frmSettings.comboLocation->count()); i++) { 253 for (int i=0; i<(frmSettings.comboLocation->count()); i++) {
250 if ( frmSettings.comboLocation->text(i) == defaultLocation ) { 254 if ( frmSettings.comboLocation->text(i) == defaultLocation ) {
251 frmSettings.comboLocation->setCurrentItem(i); 255 frmSettings.comboLocation->setCurrentItem(i);
252 found=true; 256 found=true;
253 break; 257 break;
254 } 258 }
@@ -415,133 +419,143 @@ void DateBook::duplicateEvent( const Event &e )
415 419
416 Event dupevent(e);// Make a duplicate. 420 Event dupevent(e);// Make a duplicate.
417 421
418 // workaround added for text input. 422 // workaround added for text input.
419 QDialog editDlg( this, 0, TRUE ); 423 QDialog editDlg( this, 0, TRUE );
420 DateEntry *entry; 424 DateEntry *entry;
421 editDlg.setCaption( tr("Duplicate Event") ); 425 editDlg.setCaption( tr("Duplicate Event") );
422 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 426 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
423 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 427 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
424 sv->setResizePolicy( QScrollView::AutoOneFit ); 428 sv->setResizePolicy( QScrollView::AutoOneFit );
425 // KLUDGE!!! 429 // KLUDGE!!!
426 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 430 sv->setHScrollBarMode( QScrollView::AlwaysOff );
427 vb->addWidget( sv ); 431 vb->addWidget( sv );
428 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" ); 432 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" );
429 entry->timezone->setEnabled( FALSE ); 433 entry->timezone->setEnabled( FALSE );
430 sv->addChild( entry ); 434 sv->addChild( entry );
431 435
432#if defined(Q_WS_QWS) || defined(_WS_QWS_) 436#if defined(Q_WS_QWS) || defined(_WS_QWS_)
433 editDlg.showMaximized(); 437 editDlg.showMaximized();
434#endif 438#endif
435 while (editDlg.exec() ) { 439 while (editDlg.exec() ) {
436 Event newEv = entry->event(); 440 Event newEv = entry->event();
437 QString error = checkEvent(newEv); 441 QString error = checkEvent(newEv);
438 if (!error.isNull()) { 442 if (!error.isNull()) {
439 if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) 443 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0)
440 continue; 444 continue;
441 } 445 }
446 /*
447 * The problem:
448 * DateBookDB does remove repeating events not by uid but by the time
449 * the recurrence was created
450 * so we need to update that time as well
451 */
452 Event::RepeatPattern rp = newEv.repeatPattern();
453 rp.createTime = ::time( NULL );
454 newEv.setRepeat( TRUE, rp ); // has repeat and repeatPattern...
455
442 db->addEvent(newEv); 456 db->addEvent(newEv);
443 emit newEvent(); 457 emit newEvent();
444 break; 458 break;
445 } 459 }
446} 460}
447 461
448void DateBook::editEvent( const Event &e ) 462void DateBook::editEvent( const Event &e )
449{ 463{
450 if (syncing) { 464 if (syncing) {
451 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 465 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
452 return; 466 return;
453 } 467 }
454 468
455 // workaround added for text input. 469 // workaround added for text input.
456 QDialog editDlg( this, 0, TRUE ); 470 QDialog editDlg( this, 0, TRUE );
457 DateEntry *entry; 471 DateEntry *entry;
458 editDlg.setCaption( tr("Edit Event") ); 472 editDlg.setCaption( tr("Edit Event") );
459 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 473 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
460 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 474 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
461 sv->setResizePolicy( QScrollView::AutoOneFit ); 475 sv->setResizePolicy( QScrollView::AutoOneFit );
462 // KLUDGE!!! 476 // KLUDGE!!!
463 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 477 sv->setHScrollBarMode( QScrollView::AlwaysOff );
464 vb->addWidget( sv ); 478 vb->addWidget( sv );
465 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" ); 479 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
466 entry->timezone->setEnabled( FALSE ); 480 entry->timezone->setEnabled( FALSE );
467 sv->addChild( entry ); 481 sv->addChild( entry );
468 482
469#if defined(Q_WS_QWS) || defined(_WS_QWS_) 483#if defined(Q_WS_QWS) || defined(_WS_QWS_)
470 editDlg.showMaximized(); 484 editDlg.showMaximized();
471#endif 485#endif
472 while (editDlg.exec() ) { 486 while (editDlg.exec() ) {
473 Event newEv = entry->event(); 487 Event newEv = entry->event();
474 if(newEv.description().isEmpty() && newEv.notes().isEmpty() ) 488 if(newEv.description().isEmpty() && newEv.notes().isEmpty() )
475 break; 489 break;
476 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid 490 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid
477 QString error = checkEvent(newEv); 491 QString error = checkEvent(newEv);
478 if (!error.isNull()) { 492 if (!error.isNull()) {
479 if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) continue; 493 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue;
480 } 494 }
481 db->editEvent(e, newEv); 495 db->editEvent(e, newEv);
482 emit newEvent(); 496 emit newEvent();
483 break; 497 break;
484 } 498 }
485} 499}
486 500
487void DateBook::removeEvent( const Event &e ) 501void DateBook::removeEvent( const Event &e )
488{ 502{
489 if (syncing) { 503 if (syncing) {
490 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 504 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
491 return; 505 return;
492 } 506 }
493 507
494 QString strName = e.description(); 508 QString strName = e.description();
495 509
496 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) ) 510 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
497 return; 511 return;
498 512
499 db->removeEvent( e ); 513 db->removeEvent( e );
500 if ( views->visibleWidget() == dayView && dayView ) 514 if ( views->visibleWidget() == dayView && dayView )
501 dayView->redraw(); 515 dayView->redraw();
502} 516}
503 517
504void DateBook::addEvent( const Event &e ) 518void DateBook::addEvent( const Event &e )
505{ 519{
506 QDate d = e.start().date(); 520 QDate d = e.start().date();
507 initDay(); 521 initDay();
508 dayView->setDate( d ); 522 dayView->setDate( d );
509} 523}
510 524
511void DateBook::showDay( int year, int month, int day ) 525void DateBook::showDay( int year, int month, int day )
512{ 526{
513 QDate d(year, month, day); 527 QDate d(year, month, day);
514 view(DAY,d); 528 view(DAY,d);
515} 529}
516 530
517void DateBook::initDay() 531void DateBook::initDay()
518{ 532{
519 if ( !dayView ) { 533 if ( !dayView ) {
520 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); 534 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" );
521 views->addWidget( dayView, DAY ); 535 views->addWidget( dayView, DAY );
522 dayView->setStartViewTime( startTime );
523 dayView->setJumpToCurTime( bJumpToCurTime ); 536 dayView->setJumpToCurTime( bJumpToCurTime );
537 dayView->setStartViewTime( startTime );
524 dayView->setRowStyle( rowStyle ); 538 dayView->setRowStyle( rowStyle );
525 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) ); 539 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) );
526 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) ); 540 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) );
527 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) ); 541 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) );
528 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) ); 542 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) );
529 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) ); 543 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) );
530 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) ); 544 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) );
531 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) ); 545 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) );
532 } 546 }
533} 547}
534 548
535void DateBook::initWeek() 549void DateBook::initWeek()
536{ 550{
537 if ( !weekView ) { 551 if ( !weekView ) {
538 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" ); 552 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" );
539 weekView->setStartViewTime( startTime ); 553 weekView->setStartViewTime( startTime );
540 views->addWidget( weekView, WEEK ); 554 views->addWidget( weekView, WEEK );
541 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); 555 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) );
542 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) ); 556 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) );
543 } 557 }
544 558
545 //But also get it right: the year that we display can be different 559 //But also get it right: the year that we display can be different
546 //from the year of the current date. So, first find the year 560 //from the year of the current date. So, first find the year
547 //number of the current week. 561 //number of the current week.
@@ -676,74 +690,90 @@ void DateBook::appMessage(const QCString& msg, const QByteArray& data)
676 alarmCounter = 0; 690 alarmCounter = 0;
677 stopTimer = startTimer( 5000 ); 691 stopTimer = startTimer( 5000 );
678 } 692 }
679 QDialog dlg( this, 0, TRUE ); 693 QDialog dlg( this, 0, TRUE );
680 QVBoxLayout *vb = new QVBoxLayout( &dlg ); 694 QVBoxLayout *vb = new QVBoxLayout( &dlg );
681 QScrollView *view = new QScrollView( &dlg, "scrollView"); 695 QScrollView *view = new QScrollView( &dlg, "scrollView");
682 view->setResizePolicy( QScrollView::AutoOneFit ); 696 view->setResizePolicy( QScrollView::AutoOneFit );
683 vb->addWidget( view ); 697 vb->addWidget( view );
684 QLabel *lblMsg = new QLabel( msg, &dlg ); 698 QLabel *lblMsg = new QLabel( msg, &dlg );
685 view->addChild( lblMsg ); 699 view->addChild( lblMsg );
686 QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg ); 700 QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg );
687 connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) ); 701 connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) );
688 vb->addWidget( cmdOk ); 702 vb->addWidget( cmdOk );
689 703
690#if defined(Q_WS_QWS) || defined(_WS_QWS_) 704#if defined(Q_WS_QWS) || defined(_WS_QWS_)
691 dlg.showMaximized(); 705 dlg.showMaximized();
692#endif 706#endif
693 needShow = dlg.exec(); 707 needShow = dlg.exec();
694 708
695 if ( bSound ) 709 if ( bSound )
696 killTimer( stopTimer ); 710 killTimer( stopTimer );
697 } 711 }
698 } 712 }
699 } else if ( msg == "nextView()" ) { 713 } else if ( msg == "nextView()" ) {
714 needShow = true;
700 if ( !qApp-> activeWindow ( )) { 715 if ( !qApp-> activeWindow ( )) {
701 needShow = TRUE; 716 needShow = TRUE;
702 } else { 717 } else {
703 QWidget* cur = views->visibleWidget(); 718 QWidget* cur = views->visibleWidget();
704 if ( cur ) { 719 if ( cur ) {
705 if ( cur == dayView ) 720 if ( cur == dayView )
706 viewWeek(); 721 viewWeek();
707 else if ( cur == weekView ) 722 else if ( cur == weekView )
708 viewWeekLst(); 723 viewWeekLst();
709 else if ( cur == weekLstView ) 724 else if ( cur == weekLstView )
710 viewMonth(); 725 viewMonth();
711 else if ( cur == monthView ) 726 else if ( cur == monthView )
712 viewDay(); 727 viewDay();
713 needShow = TRUE; 728 needShow = TRUE;
714 } 729 }
715 } 730 }
731 } else if (msg == "editEvent(int)") {
732 /* simple copy from receive */
733 QDataStream stream(data,IO_ReadOnly);
734 int uid;
735 stream >> uid;
736 Event e=db->eventByUID(uid);
737 editEvent(e);
738 } else if (msg == "viewDefault(QDate)"){
739 /* simple copy from receive */
740 QDataStream stream(data,IO_ReadOnly);
741 QDate day;
742 stream >> day;
743 viewDefault(day);
744 needShow = true;
716 } 745 }
746
717 if ( needShow ) { 747 if ( needShow ) {
718#if defined(Q_WS_QWS) || defined(_WS_QWS_) 748#if defined(Q_WS_QWS) || defined(_WS_QWS_)
719 showMaximized(); 749 // showMaximized();
720#else 750#else
721 show(); 751 // show();
722#endif 752#endif
723 raise(); 753 // raise();
724 QPEApplication::setKeepRunning(); 754 QPEApplication::setKeepRunning();
725 setActiveWindow(); 755 // setActiveWindow();
726 } 756 }
727} 757}
728 758
729void DateBook::reload() 759void DateBook::reload()
730{ 760{
731 db->reload(); 761 db->reload();
732 if ( dayAction->isOn() ) viewDay(); 762 if ( dayAction->isOn() ) viewDay();
733 else if ( weekAction->isOn() ) viewWeek(); 763 else if ( weekAction->isOn() ) viewWeek();
734 else if ( monthAction->isOn() ) viewMonth(); 764 else if ( monthAction->isOn() ) viewMonth();
735 syncing = FALSE; 765 syncing = FALSE;
736} 766}
737 767
738void DateBook::flush() 768void DateBook::flush()
739{ 769{
740 syncing = TRUE; 770 syncing = TRUE;
741 db->save(); 771 db->save();
742} 772}
743 773
744void DateBook::timerEvent( QTimerEvent *e ) 774void DateBook::timerEvent( QTimerEvent *e )
745{ 775{
746 if ( alarmCounter < 10 ) { 776 if ( alarmCounter < 10 ) {
747 alarmCounter++; 777 alarmCounter++;
748 Sound::soundAlarm(); 778 Sound::soundAlarm();
749 } else { 779 } else {
@@ -896,49 +926,49 @@ void DateBook::setDocument( const QString &filename )
896static const char * beamfile = "/tmp/obex/event.vcs"; 926static const char * beamfile = "/tmp/obex/event.vcs";
897 927
898void DateBook::beamEvent( const Event &e ) 928void DateBook::beamEvent( const Event &e )
899{ 929{
900 qDebug("trying to beamn"); 930 qDebug("trying to beamn");
901 unlink( beamfile ); // delete if exists 931 unlink( beamfile ); // delete if exists
902 mkdir("/tmp/obex/", 0755); 932 mkdir("/tmp/obex/", 0755);
903 Event::writeVCalendar( beamfile, e ); 933 Event::writeVCalendar( beamfile, e );
904 Ir *ir = new Ir( this ); 934 Ir *ir = new Ir( this );
905 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 935 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
906 QString description = e.description(); 936 QString description = e.description();
907 ir->send( beamfile, description, "text/x-vCalendar" ); 937 ir->send( beamfile, description, "text/x-vCalendar" );
908} 938}
909 939
910void DateBook::beamDone( Ir *ir ) 940void DateBook::beamDone( Ir *ir )
911{ 941{
912 delete ir; 942 delete ir;
913 unlink( beamfile ); 943 unlink( beamfile );
914} 944}
915 945
916void DateBook::slotFind() 946void DateBook::slotFind()
917{ 947{
918 // move it to the day view... 948 // move it to the day view...
919 viewDay(); 949 viewDay();
920 FindDialog frmFind( "Calendar", this ); 950 FindDialog frmFind( "Calendar", this ); // no tr needed
921 frmFind.setUseDate( true ); 951 frmFind.setUseDate( true );
922 frmFind.setDate( currentDate() ); 952 frmFind.setDate( currentDate() );
923 QObject::connect( &frmFind, 953 QObject::connect( &frmFind,
924 SIGNAL(signalFindClicked(const QString&, const QDate&, 954 SIGNAL(signalFindClicked(const QString&, const QDate&,
925 bool, bool, int)), 955 bool, bool, int)),
926 this, 956 this,
927 SLOT(slotDoFind(const QString&, const QDate&, 957 SLOT(slotDoFind(const QString&, const QDate&,
928 bool, bool, int)) ); 958 bool, bool, int)) );
929 QObject::connect( this, 959 QObject::connect( this,
930 SIGNAL(signalNotFound()), 960 SIGNAL(signalNotFound()),
931 &frmFind, 961 &frmFind,
932 SLOT(slotNotFound()) ); 962 SLOT(slotNotFound()) );
933 QObject::connect( this, 963 QObject::connect( this,
934 SIGNAL(signalWrapAround()), 964 SIGNAL(signalWrapAround()),
935 &frmFind, 965 &frmFind,
936 SLOT(slotWrapAround()) ); 966 SLOT(slotWrapAround()) );
937 frmFind.move(0,0); 967 frmFind.move(0,0);
938 frmFind.exec(); 968 frmFind.exec();
939 inSearch = false; 969 inSearch = false;
940} 970}
941 971
942bool catComp( QArray<int> cats, int category ) 972bool catComp( QArray<int> cats, int category )
943{ 973{
944 bool returnMe; 974 bool returnMe;
diff --git a/core/pim/datebook/datebook.pro b/core/pim/datebook/datebook.pro
index e8e0a98..ae30c8d 100644
--- a/core/pim/datebook/datebook.pro
+++ b/core/pim/datebook/datebook.pro
@@ -1,50 +1,52 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG += qt warn_on release 2 CONFIG += qt warn_on release
3 DESTDIR = $(OPIEDIR)/bin 3 DESTDIR = $(OPIEDIR)/bin
4 HEADERS= datebookday.h \ 4 HEADERS= datebookday.h \
5 datebook.h \ 5 datebook.h \
6 dateentryimpl.h \ 6 dateentryimpl.h \
7 datebookdayheaderimpl.h \ 7 datebookdayheaderimpl.h \
8 datebooksettings.h \ 8 datebooksettings.h \
9 datebookweek.h \ 9 datebookweek.h \
10 datebookweeklst.h \ 10 datebookweeklst.h \
11 datebookweekheaderimpl.h \ 11 datebookweekheaderimpl.h \
12 repeatentry.h \ 12 repeatentry.h \
13 noteentryimpl.h \ 13 noteentryimpl.h \
14 onoteedit.h 14 onoteedit.h \
15 datebookdayallday.h
15 SOURCES= main.cpp \ 16 SOURCES= main.cpp \
16 datebookday.cpp \ 17 datebookday.cpp \
17 datebook.cpp \ 18 datebook.cpp \
18 dateentryimpl.cpp \ 19 dateentryimpl.cpp \
19 datebookdayheaderimpl.cpp \ 20 datebookdayheaderimpl.cpp \
20 datebooksettings.cpp \ 21 datebooksettings.cpp \
21 datebookweek.cpp \ 22 datebookweek.cpp \
22 datebookweeklst.cpp \ 23 datebookweeklst.cpp \
23 datebookweekheaderimpl.cpp \ 24 datebookweekheaderimpl.cpp \
24 repeatentry.cpp \ 25 repeatentry.cpp \
25 noteentryimpl.cpp \ 26 noteentryimpl.cpp \
26 onoteedit.cpp 27 onoteedit.cpp \
28 datebookdayallday.cpp
27 INTERFACES= dateentry.ui \ 29 INTERFACES= dateentry.ui \
28 datebookdayheader.ui \ 30 datebookdayheader.ui \
29 datebookweekheader.ui \ 31 datebookweekheader.ui \
30 datebookweeklstheader.ui \ 32 datebookweeklstheader.ui \
31 datebookweeklstdayhdr.ui \ 33 datebookweeklstdayhdr.ui \
32 repeatentrybase.ui \ 34 repeatentrybase.ui \
33 datebooksettingsbase.ui \ 35 datebooksettingsbase.ui \
34 noteentry.ui 36 noteentry.ui
35INCLUDEPATH += $(OPIEDIR)/include 37INCLUDEPATH += $(OPIEDIR)/include
36 DEPENDPATH+= $(OPIEDIR)/include 38 DEPENDPATH+= $(OPIEDIR)/include
37LIBS += -lqpe -lopie 39LIBS += -lqpe -lopie
38 TARGET = datebook 40 TARGET = datebook
39 41
40TRANSLATIONS = ../../../i18n/de/datebook.ts \ 42TRANSLATIONS = ../../../i18n/de/datebook.ts \
41 ../../../i18n/nl/datebook.ts \ 43 ../../../i18n/nl/datebook.ts \
42 ../../../i18n/xx/datebook.ts \ 44 ../../../i18n/xx/datebook.ts \
43 ../../../i18n/en/datebook.ts \ 45 ../../../i18n/en/datebook.ts \
44 ../../../i18n/es/datebook.ts \ 46 ../../../i18n/es/datebook.ts \
45 ../../../i18n/fr/datebook.ts \ 47 ../../../i18n/fr/datebook.ts \
46 ../../../i18n/hu/datebook.ts \ 48 ../../../i18n/hu/datebook.ts \
47 ../../../i18n/ja/datebook.ts \ 49 ../../../i18n/ja/datebook.ts \
48 ../../../i18n/ko/datebook.ts \ 50 ../../../i18n/ko/datebook.ts \
49 ../../../i18n/no/datebook.ts \ 51 ../../../i18n/no/datebook.ts \
50 ../../../i18n/pl/datebook.ts \ 52 ../../../i18n/pl/datebook.ts \
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index 0b213e9..f4008e9 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -1,47 +1,48 @@
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#include <qmessagebox.h> 20#include <qmessagebox.h>
21 21
22#include "datebookday.h" 22#include "datebookday.h"
23#include "datebookdayheaderimpl.h" 23#include "datebookdayheaderimpl.h"
24#include "datebookdayallday.h"
24 25
25#include <qpe/datebookdb.h> 26#include <qpe/datebookdb.h>
26#include <qpe/resource.h> 27#include <qpe/resource.h>
27#include <qpe/event.h> 28#include <qpe/event.h>
28#include <qpe/qpeapplication.h> 29#include <qpe/qpeapplication.h>
29#include <qpe/timestring.h> 30#include <qpe/timestring.h>
30#include <qpe/qpedebug.h> 31#include <qpe/qpedebug.h>
31#include <qpe/ir.h> 32#include <qpe/ir.h>
32 33
33#include <qheader.h> 34#include <qheader.h>
34#include <qdatetime.h> 35#include <qdatetime.h>
35#include <qpainter.h> 36#include <qpainter.h>
36#include <qsimplerichtext.h> 37#include <qsimplerichtext.h>
37#include <qpopupmenu.h> 38#include <qpopupmenu.h>
38#include <qtextcodec.h> 39#include <qtextcodec.h>
39#include <qpalette.h> 40#include <qpalette.h>
40 41
41#include <qlineedit.h> 42#include <qlineedit.h>
42 43
43#include <qtimer.h> 44#include <qtimer.h>
44 45
45DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name ) 46DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name )
46 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() ) 47 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() )
47{ 48{
@@ -190,82 +191,91 @@ void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent *e )
190 quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0)); 191 quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0));
191 this->moveChild(quickLineEdit,0,sh*this->rowHeight(0)); 192 this->moveChild(quickLineEdit,0,sh*this->rowHeight(0));
192 quickLineEdit->setFocus(); 193 quickLineEdit->setFocus();
193 quickLineEdit->show(); 194 quickLineEdit->show();
194} 195}
195 196
196//=========================================================================== 197//===========================================================================
197 198
198DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name) 199DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name)
199{ 200{
200 active=1; 201 active=1;
201 quickEvent.setStart(start); 202 quickEvent.setStart(start);
202 quickEvent.setEnd(end); 203 quickEvent.setEnd(end);
203 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed())); 204 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
204} 205}
205 206
206void DateBookDayViewQuickLineEdit::slotReturnPressed() 207void DateBookDayViewQuickLineEdit::slotReturnPressed()
207{ 208{
208 if(active && (!this->text().isEmpty())) {// Fix to avoid having this event beeing added multiple times. 209 if(active && (!this->text().isEmpty())) {// Fix to avoid having this event beeing added multiple times.
209 quickEvent.setDescription(this->text()); 210 quickEvent.setDescription(this->text());
210 connect(this,SIGNAL(insertEvent(const Event &)),this->topLevelWidget(),SLOT(insertEvent(const Event &))); 211 connect(this,SIGNAL(insertEvent(const Event &)),this->topLevelWidget(),SLOT(insertEvent(const Event &)));
211 emit(insertEvent(quickEvent)); 212 emit(insertEvent(quickEvent));
212 active=0; 213 active=0;
213 } 214 }
214 this->close(true);// Close and also delete this widget 215 /* we need to return to this object.. */
216 QTimer::singleShot(500, this, SLOT(finallyCallClose()) );// Close and also delete this widget
217}
218void DateBookDayViewQuickLineEdit::finallyCallClose() {
219 close(true); // also deletes this widget...
215} 220}
216 221
217void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e ) 222void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e )
218{ 223{
219 slotReturnPressed(); // Reuse code to add event and close this widget. 224 slotReturnPressed(); // Reuse code to add event and close this widget.
220} 225}
221 226
222//=========================================================================== 227//===========================================================================
223 228
224DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name ) 229DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name )
225 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 ) 230 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 )
226{ 231{
227 widgetList.setAutoDelete( true ); 232 widgetList.setAutoDelete( true );
228 header = new DateBookDayHeader( startOnMonday, this, "day header" ); 233 header = new DateBookDayHeader( startOnMonday, this, "day header" );
229 header->setDate( currDate.year(), currDate.month(), currDate.day() ); 234 header->setDate( currDate.year(), currDate.month(), currDate.day() );
235
236 m_allDays = new DatebookdayAllday(newDb, this, "all day event list" );
237 m_allDays->hide();
238
230 view = new DateBookDayView( ampm, this, "day view" ); 239 view = new DateBookDayView( ampm, this, "day view" );
231 240
232 connect( header, SIGNAL( dateChanged( int, int, int ) ), this, SLOT( dateChanged( int, int, int ) ) ); 241 connect( header, SIGNAL( dateChanged( int, int, int ) ), this, SLOT( dateChanged( int, int, int ) ) );
233 connect( header, SIGNAL( dateChanged( int, int, int ) ), view, SLOT( slotDateChanged( int, int, int ) ) ); 242 connect( header, SIGNAL( dateChanged( int, int, int ) ), view, SLOT( slotDateChanged( int, int, int ) ) );
234 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) ); 243 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) );
235 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 244 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
236 connect( view, SIGNAL(sigCapturedKey(const QString &)), this, SIGNAL(sigNewEvent(const QString&)) ); 245 connect( view, SIGNAL(sigCapturedKey(const QString &)), this, SIGNAL(sigNewEvent(const QString&)) );
237 246
238 QTimer *timer = new QTimer( this ); 247 QTimer *timer = new QTimer( this );
239 248
240 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors 249 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors
241 timer->start( 1000*60*5, FALSE ); //update every 5min 250 timer->start( 1000*60*5, FALSE ); //update every 5min
242 251
243 selectedWidget = 0; 252 selectedWidget = 0;
244 253
245 timeMarker = new DateBookDayTimeMarker( this ); 254 timeMarker = new DateBookDayTimeMarker( this );
246 timeMarker->setTime( QTime::currentTime() ); 255 timeMarker->setTime( QTime::currentTime() );
247 rowStyle = -1; // initialize with bogus values 256 rowStyle = -1; // initialize with bogus values
257 jumpToCurTime = false;
248} 258}
249 259
250void DateBookDay::setJumpToCurTime( bool bJump ) 260void DateBookDay::setJumpToCurTime( bool bJump )
251{ 261{
252 jumpToCurTime = bJump; 262 jumpToCurTime = bJump;
253} 263}
254 264
255void DateBookDay::setRowStyle( int style ) 265void DateBookDay::setRowStyle( int style )
256{ 266{
257 if (rowStyle != style) view->setRowStyle( style ); 267 if (rowStyle != style) view->setRowStyle( style );
258 rowStyle = style; 268 rowStyle = style;
259} 269}
260 270
261void DateBookDay::updateView( void ) 271void DateBookDay::updateView( void )
262{ 272{
263 timeMarker->setTime( QTime::currentTime() ); 273 timeMarker->setTime( QTime::currentTime() );
264 //need to find a way to update all DateBookDayWidgets 274 //need to find a way to update all DateBookDayWidgets
265} 275}
266 276
267void DateBookDay::setSelectedWidget( DateBookDayWidget *w ) 277void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
268{ 278{
269 selectedWidget = w; 279 selectedWidget = w;
270} 280}
271 281
@@ -322,104 +332,125 @@ void DateBookDay::dateChanged( int y, int m, int d )
322 332
323 if (jumpToCurTime && this->date() == QDate::currentDate()) 333 if (jumpToCurTime && this->date() == QDate::currentDate())
324 { 334 {
325 ts.init( QTime::currentTime().hour(), 0); 335 ts.init( QTime::currentTime().hour(), 0);
326 ts.expandTo( QTime::currentTime().hour(), 0); 336 ts.expandTo( QTime::currentTime().hour(), 0);
327 } else { 337 } else {
328 ts.init( startTime, 0 ); 338 ts.init( startTime, 0 );
329 ts.expandTo( startTime, 0 ); 339 ts.expandTo( startTime, 0 );
330 } 340 }
331 341
332 dayView()->addSelection( ts ); 342 dayView()->addSelection( ts );
333 selectedWidget = 0; 343 selectedWidget = 0;
334} 344}
335 345
336void DateBookDay::redraw() 346void DateBookDay::redraw()
337{ 347{
338 if ( isUpdatesEnabled() ) 348 if ( isUpdatesEnabled() )
339 relayoutPage(); 349 relayoutPage();
340} 350}
341 351
342void DateBookDay::getEvents() 352void DateBookDay::getEvents()
343{ 353{
344 widgetList.clear(); 354 widgetList.clear();
345 355
356 /* clear the AllDay List */
357 m_allDays->hide(); // just in case
358 m_allDays->removeAllEvents();
359
346 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); 360 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate );
347 QValueListIterator<EffectiveEvent> it; 361 QValueListIterator<EffectiveEvent> it;
362 QObject* object = 0;
348 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 363 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
349 EffectiveEvent ev=*it; 364 EffectiveEvent ev=*it;
350 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) {// Skip events ending at 00:00 starting at another day. 365 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) {// Skip events ending at 00:00 starting at another day.
366 if (ev.event().type() == Event::AllDay ) {
367 object = m_allDays->addEvent( ev );
368 if (!object)
369 continue;
370 }else {
351 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 371 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
352 connect( w, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) );
353 connect( w, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) );
354 connect( w, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) );
355 connect( w, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) );
356 widgetList.append( w ); 372 widgetList.append( w );
373 object = w;
374 }
375
376 connect( object, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) );
377 connect( object, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) );
378 connect( object, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) );
379 connect( object, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) );
380
357 } 381 }
358 } 382 }
359} 383}
360 384
361static int place( const DateBookDayWidget *item, bool *used, int maxn ) 385static int place( const DateBookDayWidget *item, bool *used, int maxn )
362{ 386{
363 int place = 0; 387 int place = 0;
364 int start = item->event().start().hour(); 388 int start = item->event().start().hour();
365 QTime e = item->event().end(); 389 QTime e = item->event().end();
366 int end = e.hour(); 390 int end = e.hour();
367 if ( e.minute() < 5 ) 391 if ( e.minute() < 5 )
368 end--; 392 end--;
369 if ( end < start ) 393 if ( end < start )
370 end = start; 394 end = start;
371 while ( place < maxn ) { 395 while ( place < maxn ) {
372 bool free = TRUE; 396 bool free = TRUE;
373 int s = start; 397 int s = start;
374 while( s <= end ) { 398 while( s <= end ) {
375 if ( used[10*s+place] ) { 399 if ( used[10*s+place] ) {
376 free = FALSE; 400 free = FALSE;
377 break; 401 break;
378 } 402 }
379 s++; 403 s++;
380 } 404 }
381 if ( free ) 405 if ( free )
382 break; 406 break;
383 place++; 407 place++;
384 } 408 }
385 if ( place == maxn ) { 409 if ( place == maxn ) {
386 return -1; 410 return -1;
387 } 411 }
388 while( start <= end ) { 412 while( start <= end ) {
389 used[10*start+place] = TRUE; 413 used[10*start+place] = TRUE;
390 start++; 414 start++;
391 } 415 }
392 return place; 416 return place;
393} 417}
394 418
395 419
396void DateBookDay::relayoutPage( bool fromResize ) 420void DateBookDay::relayoutPage( bool fromResize )
397{ 421{
398 setUpdatesEnabled( FALSE ); 422 setUpdatesEnabled( FALSE );
399 if ( !fromResize ) 423 if ( !fromResize ) {
400 getEvents(); // no need we already have them! 424 getEvents(); // no need we already have them!
401 425
426 if (m_allDays->items() > 0 )
427 m_allDays->show();
428 /*
429 * else if ( m_allDays->items() == 0 ) already hide in getEvents
430 */
431 }
432
402 widgetList.sort(); 433 widgetList.sort();
403 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning 434 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
404 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view 435 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
405 436
406 int wCount = widgetList.count(); 437 int wCount = widgetList.count();
407 int wid = view->columnWidth(0)-1; 438 int wid = view->columnWidth(0)-1;
408 int wd; 439 int wd;
409 int n = 1; 440 int n = 1;
410 441
411 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget 442 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
412 443
413 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++); 444 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
414 445
415 if ( wCount < 20 ) { 446 if ( wCount < 20 ) {
416 447
417 QArray<QRect> geometries(wCount); 448 QArray<QRect> geometries(wCount);
418 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector 449 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
419 450
420 for ( int i = 0; i < wCount; i++) { 451 for ( int i = 0; i < wCount; i++) {
421 QValueList<int> intersectedWidgets; 452 QValueList<int> intersectedWidgets;
422 453
423 //find all widgets intersecting with widgetList.at(i) 454 //find all widgets intersecting with widgetList.at(i)
424 for ( int j = 0; j < wCount; j++) { 455 for ( int j = 0; j < wCount; j++) {
425 if (i != j) 456 if (i != j)
@@ -709,74 +740,154 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e )
709 p.drawRect(rect()); 740 p.drawRect(rect());
710 741
711 // p.drawRect(0,0, 5, height()); 742 // p.drawRect(0,0, 5, height());
712 743
713 int y = 0; 744 int y = 0;
714 int d = 0; 745 int d = 0;
715 746
716 if ( ev.event().hasAlarm() ) { 747 if ( ev.event().hasAlarm() ) {
717 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) ); 748 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
718 y = 20; 749 y = 20;
719 d = 20; 750 d = 20;
720 } 751 }
721 752
722 if ( ev.event().hasRepeat() ) { 753 if ( ev.event().hasRepeat() ) {
723 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 754 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
724 d = 20; 755 d = 20;
725 y += 20; 756 y += 20;
726 } 757 }
727 758
728 QSimpleRichText rt( text, font() ); 759 QSimpleRichText rt( text, font() );
729 rt.setWidth( geom.width() - d - 6 ); 760 rt.setWidth( geom.width() - d - 6 );
730 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 761 rt.draw( &p, 7, 0, e->region(), colorGroup() );
731} 762}
732 763
764/*
765 * we need to find the real start date for a uid
766 * we need to check from one day to another...
767 */
768QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB* db) {
769 QDate dt( isIncluded );
770 QDate fnd = dt;
771
772 bool doAgain = true;
773 do{
774 dt = dt.addDays( -1 );
775 QValueList<EffectiveEvent> events = db->getEffectiveEvents( dt, dt );
776 for (QValueList<EffectiveEvent>::Iterator it = events.begin(); it != events.end(); ++it ) {
777 EffectiveEvent ev = (*it);
778 if ( uid == ev.event().uid() && ev.start() != QTime(0, 0, 0 ) )
779 return ev.date();
780 }
781 }while (doAgain );
782
783 return fnd;
784}
785
733void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 786void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
734{ 787{
735 DateBookDayWidget *item; 788 DateBookDayWidget *item;
736 789
737 item = dateBook->getSelectedWidget(); 790 item = dateBook->getSelectedWidget();
738 if (item) 791 if (item)
739 item->update(); 792 item->update();
740 793
741 dateBook->setSelectedWidget(this); 794 dateBook->setSelectedWidget(this);
742 update(); 795 update();
743 dateBook->repaint(); 796 dateBook->repaint();
744 797
745 QPopupMenu m; 798 QPopupMenu m;
746 m.insertItem( tr( "Edit" ), 1 ); 799 m.insertItem( tr( "Edit" ), 1 );
747 m.insertItem( tr( "Duplicate" ), 4 ); 800 m.insertItem( tr( "Duplicate" ), 4 );
748 m.insertItem( tr( "Delete" ), 2 ); 801 m.insertItem( tr( "Delete" ), 2 );
749 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 802 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
803 if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 );
750 int r = m.exec( e->globalPos() ); 804 int r = m.exec( e->globalPos() );
751 if ( r == 1 ) { 805 if ( r == 1 ) {
752 emit editMe( ev.event() ); 806 emit editMe( ev.event() );
753 } else if ( r == 2 ) { 807 } else if ( r == 2 ) {
754 emit deleteMe( ev.event() ); 808 emit deleteMe( ev.event() );
755 } else if ( r == 3 ) { 809 } else if ( r == 3 ) {
756 emit beamMe( ev.event() ); 810 emit beamMe( ev.event() );
757 } else if ( r == 4 ) { 811 } else if ( r == 4 ) {
758 emit duplicateMe( ev.event() ); 812 emit duplicateMe( ev.event() );
813 } else if ( r == 5 ) {
814 // create an Event and beam it...
815 /*
816 * Start with the easy stuff. If start and end date is the same we can just use
817 * the values of effective events
818 * If it is a multi day event we need to find the real start and end date...
819 */
820 if ( ev.event().start().date() == ev.event().end().date() ) {
821 Event event( ev.event() );
822
823 QDateTime dt( ev.date(), ev.start() );
824 event.setStart( dt );
825
826 dt.setTime( ev.end() );
827 event.setEnd( dt );
828 emit beamMe( event );
829 }else {
830 /*
831 * at least the the Times are right now
832 */
833 QDateTime start( ev.event().start() );
834 QDateTime end ( ev.event().end () );
835
836
837 /*
838 * ok we know the start date or we need to find it
839 */
840 if ( ev.start() != QTime( 0, 0, 0 ) ) {
841 start.setDate( ev.date() );
842 }else {
843 QDate dt = DateBookDay::findRealStart( ev.event().uid(), ev.date(), dateBook->db );
844 start.setDate( dt );
845 }
846
847
848 /*
849 * ok we know now the end date...
850 * else
851 * get to know the offset btw the real start and real end
852 * and then add it to the new start date...
853 */
854 if ( ev.end() != QTime(23, 59, 59 ) ) {
855 end.setDate( ev.date() );
856 }else{
857 int days = ev.event().start().date().daysTo( ev.event().end().date() );
858 end.setDate( start.date().addDays( days ) );
859 }
860
861
862
863 Event event( ev.event() );
864 event.setStart( start );
865 event.setEnd ( end );
866
867
868 emit beamMe( event );
869 }
759 } 870 }
760} 871}
761 872
762void DateBookDayWidget::setGeometry( const QRect &r ) 873void DateBookDayWidget::setGeometry( const QRect &r )
763{ 874{
764 geom = r; 875 geom = r;
765 setFixedSize( r.width()+1, r.height()+1 ); 876 setFixedSize( r.width()+1, r.height()+1 );
766 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 877 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
767 show(); 878 show();
768} 879}
769 880
770 881
771//--------------------------------------------------------------------------------------------- 882//---------------------------------------------------------------------------------------------
772//--------------------------------------------------------------------------------------------- 883//---------------------------------------------------------------------------------------------
773 884
774 885
775DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) 886DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
776 : QWidget( db->dayView()->viewport() ), dateBook( db ) 887 : QWidget( db->dayView()->viewport() ), dateBook( db )
777{ 888{
778 setBackgroundMode( PaletteBase ); 889 setBackgroundMode( PaletteBase );
779} 890}
780 891
781DateBookDayTimeMarker::~DateBookDayTimeMarker() 892DateBookDayTimeMarker::~DateBookDayTimeMarker()
782{ 893{
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index 961f60f..3898cbc 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -11,64 +11,66 @@
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
30#include "datebook.h" 30#include "datebook.h"
31#include <qlineedit.h> 31#include <qlineedit.h>
32 32
33class DateBookDayHeader; 33class DateBookDayHeader;
34class DateBookDB; 34class DateBookDB;
35class DatebookdayAllday;
35class QDateTime; 36class QDateTime;
36class QMouseEvent; 37class QMouseEvent;
37class QPaintEvent; 38class QPaintEvent;
38class QResizeEvent; 39class QResizeEvent;
39 40
40class DateBookDayViewQuickLineEdit : public QLineEdit 41class DateBookDayViewQuickLineEdit : public QLineEdit
41{ 42{
42 Q_OBJECT 43 Q_OBJECT
43public: 44public:
44 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0); 45 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
45protected: 46protected:
46 Event quickEvent; 47 Event quickEvent;
47 int active; 48 int active;
48 void focusOutEvent( QFocusEvent *e ); 49 void focusOutEvent( QFocusEvent *e );
49protected slots: 50protected slots:
50 void slotReturnPressed(void); 51 void slotReturnPressed(void);
52 void finallyCallClose();
51signals: 53signals:
52 void insertEvent(const Event &e); 54 void insertEvent(const Event &e);
53}; 55};
54 56
55 57
56class DateBookDayView : public QTable 58class DateBookDayView : public QTable
57{ 59{
58 Q_OBJECT 60 Q_OBJECT
59public: 61public:
60 DateBookDayView( bool hourClock, QWidget *parent, const char *name ); 62 DateBookDayView( bool hourClock, QWidget *parent, const char *name );
61 bool whichClock() const; 63 bool whichClock() const;
62 64
63 void setRowStyle( int style ); 65 void setRowStyle( int style );
64 66
65public slots: 67public slots:
66 void moveUp(); 68 void moveUp();
67 void moveDown(); 69 void moveDown();
68 void slotDateChanged( int year, int month, int day ); 70 void slotDateChanged( int year, int month, int day );
69 71
70signals: 72signals:
71 void sigColWidthChanged(); 73 void sigColWidthChanged();
72 void sigCapturedKey( const QString &txt ); 74 void sigCapturedKey( const QString &txt );
73protected slots: 75protected slots:
74 void slotChangeClock( bool ); 76 void slotChangeClock( bool );
@@ -155,76 +157,80 @@ private:
155//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights 157//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
156class WidgetListClass : public QList<DateBookDayWidget> 158class WidgetListClass : public QList<DateBookDayWidget>
157{ 159{
158 private: 160 private:
159 161
160 int compareItems( QCollection::Item s1, QCollection::Item s2 ) 162 int compareItems( QCollection::Item s1, QCollection::Item s2 )
161 { 163 {
162 //hmm, don't punish me for that ;) 164 //hmm, don't punish me for that ;)
163 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height()) 165 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
164 { 166 {
165 return -1; 167 return -1;
166 } else 168 } else
167 { 169 {
168 return 1; 170 return 1;
169 } 171 }
170 } 172 }
171 173
172 174
173}; 175};
174 176
175class DateBookDay : public QVBox 177class DateBookDay : public QVBox
176{ 178{
177 Q_OBJECT 179 Q_OBJECT
178 180
181 friend class DateBookDayWidget; // for beam this occurence and access to DateBookDB
179public: 182public:
180 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, 183 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,
181 QWidget *parent, const char *name ); 184 QWidget *parent, const char *name );
182 void selectedDates( QDateTime &start, QDateTime &end ); 185 void selectedDates( QDateTime &start, QDateTime &end );
183 QDate date() const; 186 QDate date() const;
184 DateBookDayView *dayView() const { return view; } 187 DateBookDayView *dayView() const { return view; }
185 void setStartViewTime( int startHere ); 188 void setStartViewTime( int startHere );
186 int startViewTime() const; 189 int startViewTime() const;
187 void setSelectedWidget( DateBookDayWidget * ); 190 void setSelectedWidget( DateBookDayWidget * );
188 DateBookDayWidget * getSelectedWidget( void ); 191 DateBookDayWidget * getSelectedWidget( void );
189 void setJumpToCurTime( bool bJump ); 192 void setJumpToCurTime( bool bJump );
190 void setRowStyle( int style ); 193 void setRowStyle( int style );
194 static QDate findRealStart( int uid, const QDate& isIncluded,
195 DateBookDB* );
191 196
192public slots: 197public slots:
193 void setDate( int y, int m, int d ); 198 void setDate( int y, int m, int d );
194 void setDate( QDate ); 199 void setDate( QDate );
195 void redraw(); 200 void redraw();
196 void slotWeekChanged( bool bStartOnMonday ); 201 void slotWeekChanged( bool bStartOnMonday );
197 void updateView();//updates TimeMarker and DayWidget-colors 202 void updateView();//updates TimeMarker and DayWidget-colors
198 203
199signals: 204signals:
200 void removeEvent( const Event& ); 205 void removeEvent( const Event& );
201 void editEvent( const Event& ); 206 void editEvent( const Event& );
202 void duplicateEvent( const Event& ); 207 void duplicateEvent( const Event& );
203 void beamEvent( const Event& ); 208 void beamEvent( const Event& );
204 void newEvent(); 209 void newEvent();
205 void sigNewEvent( const QString & ); 210 void sigNewEvent( const QString & );
206 211
207protected slots: 212protected slots:
208 void keyPressEvent(QKeyEvent *); 213 void keyPressEvent(QKeyEvent *);
209 214
210private slots: 215private slots:
211 void dateChanged( int y, int m, int d ); 216 void dateChanged( int y, int m, int d );
212 void slotColWidthChanged() { relayoutPage(); }; 217 void slotColWidthChanged() { relayoutPage(); };
213 218
214private: 219private:
215 void getEvents(); 220 void getEvents();
216 void relayoutPage( bool fromResize = false ); 221 void relayoutPage( bool fromResize = false );
217 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); 222 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom );
218 QDate currDate; 223 QDate currDate;
219 DateBookDayView *view; 224 DateBookDayView *view;
220 DateBookDayHeader *header; 225 DateBookDayHeader *header;
226 DatebookdayAllday *m_allDays;
221 DateBookDB *db; 227 DateBookDB *db;
222 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height 228 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height
223 int startTime; 229 int startTime;
224 bool jumpToCurTime;//should we jump to current time in dayview? 230 bool jumpToCurTime;//should we jump to current time in dayview?
225 int rowStyle; 231 int rowStyle;
226 DateBookDayWidget *selectedWidget; //actual selected widget (obviously) 232 DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
227 DateBookDayTimeMarker *timeMarker;//marker for current time 233 DateBookDayTimeMarker *timeMarker;//marker for current time
228}; 234};
229 235
230#endif 236#endif
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
new file mode 100644
index 0000000..985f31a
--- a/dev/null
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -0,0 +1,226 @@
1/****************************************************************************
2** GPL by Rajko Albrecht
3**
4**
5**
6**
7**
8****************************************************************************/
9#include "datebookdayallday.h"
10
11#include <qpushbutton.h>
12#include <qlayout.h>
13#include <qvariant.h>
14#include <qtooltip.h>
15#include <qwhatsthis.h>
16#include <qobjectlist.h>
17#include <qpe/event.h>
18#include <qpe/ir.h>
19#include <qpe/datebookdb.h>
20#include <qpe/resource.h>
21#include <qpopupmenu.h>
22#include <qtimer.h>
23#include <qregexp.h>
24#include <qdatetime.h>
25
26#include "datebookday.h"
27
28/*
29 * Constructs a DatebookdayAllday which is a child of 'parent', with the
30 * name 'name' and widget flags set to 'f'
31 */
32DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags fl )
33 : QWidget( parent, name,fl ),item_count(0),dateBook(db)
34{
35 if ( !name )
36 setName( "DatebookdayAllday" );
37 setMinimumSize( QSize( 0, 0 ) );
38
39 datebookdayalldayLayout = new QVBoxLayout( this );
40 datebookdayalldayLayout->setSpacing( 0 );
41 datebookdayalldayLayout->setMargin( 0 );
42
43 lblDesc = new DatebookEventDesc(parent->parentWidget(),"");
44 lblDesc->setBackgroundColor(Qt::yellow);
45 lblDesc->hide();
46 subWidgets.setAutoDelete(true);
47}
48
49/*
50 * Destroys the object and frees any allocated resources
51 */
52DatebookdayAllday::~DatebookdayAllday()
53{
54 // no need to delete child widgets, Qt does it all for us
55}
56
57DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
58{
59 DatebookAlldayDisp * lb;
60 lb = new DatebookAlldayDisp(dateBook,ev,this,NULL);
61 datebookdayalldayLayout->addWidget(lb);
62 subWidgets.append(lb);
63
64 connect(lb,SIGNAL(displayMe(const Event &)),lblDesc,SLOT(disp_event(const Event&)));
65 ++item_count;
66
67 return lb;
68}
69
70void DatebookdayAllday::removeAllEvents()
71{
72 subWidgets.clear();
73 item_count = 0;
74}
75
76DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev,
77 QWidget* parent,const char* name,WFlags f)
78 : QLabel(parent,name,f),m_Ev(ev),dateBook(db)
79{
80 QString strDesc = m_Ev.description();
81 strDesc = strDesc.replace(QRegExp("<"),"&#60;");
82 setBackgroundColor(yellow);
83 setText(strDesc);
84 setFrameStyle(QFrame::Raised|QFrame::Panel);
85 QSize s = sizeHint();
86 setMaximumSize( QSize( 32767, s.height()-4 ) );
87 setMinimumSize( QSize( 0, s.height()-4 ) );
88}
89
90DatebookAlldayDisp::~DatebookAlldayDisp()
91{
92}
93
94void DatebookAlldayDisp::beam_single_event()
95{
96 // create an Event and beam it...
97 /*
98 * Start with the easy stuff. If start and end date is the same we can just use
99 * the values of effective m_Events
100 * If it is a multi day m_Event we need to find the real start and end date...
101 */
102 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
103 Event m_Event( m_Ev.event() );
104
105 QDateTime dt( m_Ev.date(), m_Ev.start() );
106 m_Event.setStart( dt );
107
108 dt.setTime( m_Ev.end() );
109 m_Event.setEnd( dt );
110 emit beamMe( m_Event );
111 }else {
112 /*
113 * at least the the Times are right now
114 */
115 QDateTime start( m_Ev.event().start() );
116 QDateTime end ( m_Ev.event().end () );
117
118 /*
119 * ok we know the start date or we need to find it
120 */
121 if ( m_Ev.start() != QTime( 0, 0, 0 ) ) {
122 start.setDate( m_Ev.date() );
123 }else {
124 QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook );
125 start.setDate( dt );
126 }
127
128 /*
129 * ok we know now the end date...
130 * else
131 * get to know the offset btw the real start and real end
132 * and then add it to the new start date...
133 */
134 if ( m_Ev.end() != QTime(23, 59, 59 ) ) {
135 end.setDate( m_Ev.date() );
136 }else{
137 int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() );
138 end.setDate( start.date().addDays( days ) );
139 }
140 Event m_Event( m_Ev.event() );
141 m_Event.setStart( start );
142 m_Event.setEnd ( end );
143 emit beamMe( m_Event );
144 }
145}
146
147void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
148{
149 QColor b = backgroundColor();
150 setBackgroundColor(green);
151 update();
152 QPopupMenu m;
153 m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 );
154 m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 );
155 m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 );
156 if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 );
157 if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 );
158 m.insertItem( tr( "Info"),6);
159 int r = m.exec( e->globalPos() );
160 setBackgroundColor(b);
161 update();
162 switch (r) {
163 case 1:
164 emit editMe( m_Ev.event() );
165 break;
166 case 2:
167 emit deleteMe( m_Ev.event() );
168 break;
169 case 3:
170 emit beamMe( m_Ev.event() );
171 break;
172 case 4:
173 emit duplicateMe( m_Ev.event() );
174 break;
175 case 5:
176 beam_single_event();
177 break;
178 case 6:
179 emit displayMe( m_Ev.event() );
180 break;
181 default:
182 break;
183 }
184}
185
186DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name)
187 :QLabel(parent,name)
188{
189 m_Timer=new QTimer(this);
190 connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide()));
191 setFrameStyle(QFrame::Sunken|QFrame::Panel);
192 setTextFormat(RichText);
193}
194
195DatebookEventDesc::~DatebookEventDesc()
196{
197}
198
199void DatebookEventDesc::mousePressEvent(QMouseEvent*)
200{
201 hide();
202 if (m_Timer->isActive()) m_Timer->stop();
203}
204
205void DatebookEventDesc::disp_event(const Event&e)
206{
207 if (m_Timer->isActive()) m_Timer->stop();
208 QString text;
209 text = "<b><i>"+e.description()+"</i></b><br>";
210 if (e.notes().length()>0) {
211 text+="<b>"+e.notes()+"</b><br>";
212 }
213 if (e.location().length()>0) {
214 text+="<i>"+e.location()+"</i><br>";
215 }
216 text = text.replace(QRegExp("\n"),"<br>");
217 setText(text);
218 QSize s = sizeHint();
219 s+=QSize(10,10);
220 resize(s);
221 move( QMAX(0,(parentWidget()->width()-width()) / 2),
222 (parentWidget()->height()-height())/2 );
223 show();
224 m_Timer->start(2000,true);
225}
226
diff --git a/core/pim/datebook/datebookdayallday.h b/core/pim/datebook/datebookdayallday.h
new file mode 100644
index 0000000..c781785
--- a/dev/null
+++ b/core/pim/datebook/datebookdayallday.h
@@ -0,0 +1,80 @@
1#ifndef DATEBOOKDAYALLDAYBASE_H
2#define DATEBOOKDAYALLDAYBASE_H
3
4#include <qvariant.h>
5#include <qframe.h>
6#include <qlabel.h>
7#include <qlist.h>
8#include <qpe/event.h>
9
10class QVBoxLayout;
11class QHBoxLayout;
12class QGridLayout;
13class DatebookAlldayDisp;
14class DatebookEventDesc;
15class DateBookDB;
16
17class DatebookdayAllday : public QWidget
18{
19 Q_OBJECT
20
21public:
22 DatebookdayAllday(DateBookDB* db,
23 QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
24 ~DatebookdayAllday();
25 DatebookAlldayDisp* addEvent(const EffectiveEvent&e);
26 const unsigned int items()const{return item_count;}
27
28public slots:
29 void removeAllEvents();
30
31protected:
32 QVBoxLayout* datebookdayalldayLayout;
33 DatebookEventDesc * lblDesc;
34 unsigned int item_count;
35 QList<DatebookAlldayDisp> subWidgets;
36 DateBookDB *dateBook;
37};
38
39class DatebookAlldayDisp : public QLabel
40{
41 Q_OBJECT
42
43public:
44 DatebookAlldayDisp(DateBookDB* db,const EffectiveEvent& e,
45 QWidget* parent=0,const char* name = 0, WFlags fl=0);
46 virtual ~DatebookAlldayDisp();
47
48signals:
49 void deleteMe( const Event &e );
50 void duplicateMe( const Event &e );
51 void editMe( const Event &e );
52 void beamMe( const Event &e );
53 void displayMe(const Event &e);
54
55public slots:
56
57protected:
58 EffectiveEvent m_Ev;
59 DateBookDB* dateBook;
60 void mousePressEvent( QMouseEvent *e );
61 void beam_single_event();
62};
63
64class DatebookEventDesc: public QLabel
65{
66 Q_OBJECT
67
68public:
69 DatebookEventDesc(QWidget* Parent=0,const char* name = 0);
70 virtual ~DatebookEventDesc();
71
72public slots:
73 void disp_event(const Event&e);
74
75protected:
76 void mousePressEvent(QMouseEvent*e);
77 QTimer* m_Timer;
78};
79
80#endif // DATEBOOKDAYALLDAYBASE_H
diff --git a/core/pim/datebook/datebooksettings.h b/core/pim/datebook/datebooksettings.h
index c3036e1..cf8a0ff 100644
--- a/core/pim/datebook/datebooksettings.h
+++ b/core/pim/datebook/datebooksettings.h
@@ -4,48 +4,49 @@
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 20
21#ifndef DATEBOOKSETTINGS_H 21#ifndef DATEBOOKSETTINGS_H
22#define DATEBOOKSETTINGS_H 22#define DATEBOOKSETTINGS_H
23#include "datebooksettingsbase.h" 23#include "datebooksettingsbase.h"
24#include <qpe/categoryselect.h> 24#include <qpe/categoryselect.h>
25 25
26class DateBookSettings : public DateBookSettingsBase 26class DateBookSettings : public DateBookSettingsBase
27{ 27{
28 Q_OBJECT
28public: 29public:
29 DateBookSettings( bool whichClock, QWidget *parent = 0, 30 DateBookSettings( bool whichClock, QWidget *parent = 0,
30 const char *name = 0, bool modal = TRUE, WFlags = 0 ); 31 const char *name = 0, bool modal = TRUE, WFlags = 0 );
31 ~DateBookSettings(); 32 ~DateBookSettings();
32 void setStartTime( int newStartViewTime ); 33 void setStartTime( int newStartViewTime );
33 int startTime() const; 34 int startTime() const;
34 void setAlarmPreset( bool bAlarm, int presetTime ); 35 void setAlarmPreset( bool bAlarm, int presetTime );
35 bool alarmPreset() const; 36 bool alarmPreset() const;
36 int presetTime() const; 37 int presetTime() const;
37 void setAlarmType( int alarmType ); 38 void setAlarmType( int alarmType );
38 int alarmType() const; 39 int alarmType() const;
39 40
40 void setJumpToCurTime( bool bJump ); 41 void setJumpToCurTime( bool bJump );
41 bool jumpToCurTime() const; 42 bool jumpToCurTime() const;
42 void setRowStyle( int style ); 43 void setRowStyle( int style );
43 int rowStyle() const; 44 int rowStyle() const;
44 45
45private slots: 46private slots:
46 void slot12Hour( int ); 47 void slot12Hour( int );
47 void slotChangeClock( bool ); 48 void slotChangeClock( bool );
48 49
49private: 50private:
50 void init(); 51 void init();
51 bool ampm; 52 bool ampm;
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index 2ad7aa9..ab7e963 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -1,61 +1,54 @@
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#include "datebookweek.h" 20#include "datebookweek.h"
21#include "datebookweekheaderimpl.h" 21#include "datebookweekheaderimpl.h"
22 22
23#include <qpe/calendar.h>
24#include <qpe/datebookdb.h> 23#include <qpe/datebookdb.h>
25#include <qpe/event.h>
26#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
27#include <qpe/timestring.h> 25#include <qpe/calendar.h>
28 26
29#include <qdatetime.h>
30#include <qheader.h> 27#include <qheader.h>
31#include <qlabel.h> 28#include <qlabel.h>
32#include <qlayout.h> 29#include <qlayout.h>
33#include <qpainter.h>
34#include <qpopupmenu.h>
35#include <qtimer.h> 30#include <qtimer.h>
36#include <qspinbox.h>
37#include <qstyle.h>
38 31
39//----------------------------------------------------------------- 32//-----------------------------------------------------------------
40 33
41 34
42DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e ) 35DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e )
43 : ev( e ) 36 : ev( e )
44{ 37{
45 // with the current implementation change the color for all day events 38 // with the current implementation change the color for all day events
46 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) { 39 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) {
47 c = Qt::green; 40 c = Qt::green;
48 } else { 41 } else {
49 c = ev.event().hasAlarm() ? Qt::red : Qt::blue; 42 c = ev.event().hasAlarm() ? Qt::red : Qt::blue;
50 } 43 }
51} 44}
52 45
53void DateBookWeekItem::setGeometry( int x, int y, int w, int h ) 46void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
54{ 47{
55 r.setRect( x, y, w, h ); 48 r.setRect( x, y, w, h );
56} 49}
57 50
58 51
59//------------------=--------------------------------------------- 52//------------------=---------------------------------------------
60 53
61DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday, 54DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
@@ -68,86 +61,79 @@ DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
68 viewport()->setBackgroundMode( PaletteBase ); 61 viewport()->setBackgroundMode( PaletteBase );
69 62
70 header = new QHeader( this ); 63 header = new QHeader( this );
71 header->addLabel( "" ); 64 header->addLabel( "" );
72 65
73 header->setMovingEnabled( false ); 66 header->setMovingEnabled( false );
74 header->setResizeEnabled( false ); 67 header->setResizeEnabled( false );
75 header->setClickEnabled( false, 0 ); 68 header->setClickEnabled( false, 0 );
76 initNames(); 69 initNames();
77 70
78 71
79 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) ); 72 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
80 73
81 QObject::connect(qApp, SIGNAL(clockChanged(bool)), 74 QObject::connect(qApp, SIGNAL(clockChanged(bool)),
82 this, SLOT(slotChangeClock(bool))); 75 this, SLOT(slotChangeClock(bool)));
83 76
84 QFontMetrics fm( font() ); 77 QFontMetrics fm( font() );
85 rowHeight = fm.height()+2; 78 rowHeight = fm.height()+2;
86 79
87 resizeContents( width(), 24*rowHeight ); 80 resizeContents( width(), 24*rowHeight );
88} 81}
89 82
90void DateBookWeekView::initNames() 83void DateBookWeekView::initNames()
91{ 84{
85#warning Please review this ! (eilers)
86
87 // Ok, I am Mr. Pedantic, but shouldn't we count until 6 instead of 7, if bOnMonday is false ? (eilers)
88
92 static bool bFirst = true; 89 static bool bFirst = true;
93 if ( bFirst ) { 90 if ( bFirst ) {
94 if ( bOnMonday ) { 91 if ( bOnMonday ) {
95 header->addLabel( tr("Mo", "Monday" ) ); 92 for ( int i = 1; i<=7; i++ ) {
96 header->addLabel( tr("Tu", "Tuesday") ); 93 header->addLabel( Calendar::nameOfDay( i ) );
97 header->addLabel( tr("We", "Wednesday" ) ); 94 }
98 header->addLabel( tr("Th", "Thursday" ) ); 95
99 header->addLabel( tr("Fr", "Friday" ) );
100 header->addLabel( tr("Sa", "Saturday" ) );
101 header->addLabel( tr("Su", "Sunday" ) );
102 } else { 96 } else {
103 header->addLabel( tr("Su", "Sunday" ) ); 97 header->addLabel( Calendar::nameOfDay( 7 ) );
104 header->addLabel( tr("Mo", "Monday") ); 98 for ( int i = 1; i<7; i++ ) {
105 header->addLabel( tr("Tu", "Tuesday") ); 99 header->addLabel( Calendar::nameOfDay( i ) );
106 header->addLabel( tr("We", "Wednesday" ) ); 100 }
107 header->addLabel( tr("Th", "Thursday" ) );
108 header->addLabel( tr("Fr", "Friday" ) );
109 header->addLabel( tr("Sa", "Saturday" ) );
110 } 101 }
111 bFirst = false; 102 bFirst = false;
112 } else { 103 } else {
113 // we are change things... 104 // we are change things...
114 if ( bOnMonday ) { 105 if ( bOnMonday ) {
115 header->setLabel( 1, tr("Mo", "Monday") ); 106 for ( int i = 1; i<=7; i++ ) {
116 header->setLabel( 2, tr("Tu", "Tuesday") ); 107 header->setLabel( i, Calendar::nameOfDay( i ) );
117 header->setLabel( 3, tr("We", "Wednesday" ) ); 108 }
118 header->setLabel( 4, tr("Th", "Thursday" ) ); 109
119 header->setLabel( 5, tr("Fr", "Friday" ) );
120 header->setLabel( 6, tr("Sa", "Saturday" ) );
121 header->setLabel( 7, tr("Su", "Sunday" ) );
122 } else { 110 } else {
123 header->setLabel( 1, tr("Su", "Sunday" ) ); 111 header->setLabel( 1, Calendar::nameOfDay( 7 ) );
124 header->setLabel( 2, tr("Mo", "Monday") ); 112 for ( int i = 1; i<7; i++ ) {
125 header->setLabel( 3, tr("Tu", "Tuesday") ); 113 header->setLabel( i+1, Calendar::nameOfDay( i ) );
126 header->setLabel( 4, tr("We", "Wednesday" ) ); 114 }
127 header->setLabel( 5, tr("Th", "Thursday" ) ); 115
128 header->setLabel( 6, tr("Fr", "Friday" ) );
129 header->setLabel( 7, tr("Sa", "Saturday" ) );
130 } 116 }
131 } 117 }
132} 118}
133 119
134 120
135 121
136void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev ) 122void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
137{ 123{
138 items.clear(); 124 items.clear();
139 QValueListIterator<EffectiveEvent> it; 125 QValueListIterator<EffectiveEvent> it;
140 for ( it = ev.begin(); it != ev.end(); ++it ) { 126 for ( it = ev.begin(); it != ev.end(); ++it ) {
141 DateBookWeekItem *i = new DateBookWeekItem( *it ); 127 DateBookWeekItem *i = new DateBookWeekItem( *it );
142 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day. 128 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day.
143 positionItem( i ); 129 positionItem( i );
144 items.append( i ); 130 items.append( i );
145 } 131 }
146 } 132 }
147 viewport()->update(); 133 viewport()->update();
148} 134}
149 135
150void DateBookWeekView::moveToHour( int h ) 136void DateBookWeekView::moveToHour( int h )
151{ 137{
152 int offset = h*rowHeight; 138 int offset = h*rowHeight;
153 setContentsPos( 0, offset ); 139 setContentsPos( 0, offset );
@@ -381,49 +367,50 @@ void DateBookWeek::keyPressEvent(QKeyEvent *e)
381{ 367{
382 switch(e->key()) { 368 switch(e->key()) {
383 case Key_Up: 369 case Key_Up:
384 view->scrollBy(0, -20); 370 view->scrollBy(0, -20);
385 break; 371 break;
386 case Key_Down: 372 case Key_Down:
387 view->scrollBy(0, 20); 373 view->scrollBy(0, 20);
388 break; 374 break;
389 case Key_Left: 375 case Key_Left:
390 setDate(date().addDays(-7)); 376 setDate(date().addDays(-7));
391 break; 377 break;
392 case Key_Right: 378 case Key_Right:
393 setDate(date().addDays(7)); 379 setDate(date().addDays(7));
394 break; 380 break;
395 default: 381 default:
396 e->ignore(); 382 e->ignore();
397 } 383 }
398} 384}
399 385
400void DateBookWeek::showDay( int day ) 386void DateBookWeek::showDay( int day )
401{ 387{
402 QDate d=bdate; 388 QDate d=bdate;
403 389
404 // Calculate offset to first day of week. 390 // Calculate offset to first day of week.
405 int dayoffset=d.dayOfWeek(); 391 int dayoffset=d.dayOfWeek() % 7;
392
406 if(bStartOnMonday) dayoffset--; 393 if(bStartOnMonday) dayoffset--;
407 394
408 day--; 395 day--;
409 d=d.addDays(day-dayoffset); 396 d=d.addDays(day-dayoffset);
410 emit showDate( d.year(), d.month(), d.day() ); 397 emit showDate( d.year(), d.month(), d.day() );
411} 398}
412 399
413void DateBookWeek::setDate( int y, int m, int d ) 400void DateBookWeek::setDate( int y, int m, int d )
414{ 401{
415 setDate(QDate(y, m, d)); 402 setDate(QDate(y, m, d));
416} 403}
417 404
418void DateBookWeek::setDate(QDate newdate) 405void DateBookWeek::setDate(QDate newdate)
419{ 406{
420 bdate=newdate; 407 bdate=newdate;
421 dow = newdate.dayOfWeek(); 408 dow = newdate.dayOfWeek();
422 header->setDate( newdate ); 409 header->setDate( newdate );
423} 410}
424 411
425void DateBookWeek::dateChanged( QDate &newdate ) 412void DateBookWeek::dateChanged( QDate &newdate )
426{ 413{
427 bdate=newdate; 414 bdate=newdate;
428 getEvents(); 415 getEvents();
429} 416}
@@ -554,48 +541,50 @@ void DateBookWeek::slotYearChanged( int y )
554 } 541 }
555} 542}
556 543
557void DateBookWeek::slotWeekChanged( bool onMonday ) 544void DateBookWeek::slotWeekChanged( bool onMonday )
558{ 545{
559 bStartOnMonday = onMonday; 546 bStartOnMonday = onMonday;
560 view->setStartOfWeek( bStartOnMonday ); 547 view->setStartOfWeek( bStartOnMonday );
561 header->setStartOfWeek( bStartOnMonday ); 548 header->setStartOfWeek( bStartOnMonday );
562 redraw(); 549 redraw();
563} 550}
564 551
565void DateBookWeek::slotClockChanged( bool ap ) 552void DateBookWeek::slotClockChanged( bool ap )
566{ 553{
567 ampm = ap; 554 ampm = ap;
568} 555}
569 556
570// return the date at the beginning of the week... 557// return the date at the beginning of the week...
571QDate DateBookWeek::weekDate() const 558QDate DateBookWeek::weekDate() const
572{ 559{
573 QDate d=bdate; 560 QDate d=bdate;
574 561
575 // Calculate offset to first day of week. 562 // Calculate offset to first day of week.
576 int dayoffset=d.dayOfWeek(); 563 int dayoffset=d.dayOfWeek();
577 if(bStartOnMonday) dayoffset--; 564 if(bStartOnMonday) dayoffset--;
565 else if( dayoffset == 7 )
566 dayoffset = 0;
578 567
579 return d.addDays(-dayoffset); 568 return d.addDays(-dayoffset);
580} 569}
581 570
582// this used to only be needed by datebook.cpp, but now we need it inside 571// this used to only be needed by datebook.cpp, but now we need it inside
583// week view since 572// week view since
584// we need to be able to figure out our total number of weeks on the fly... 573// we need to be able to figure out our total number of weeks on the fly...
585// this is probably the best place to put it.. 574// this is probably the best place to put it..
586 575
587// For Weeks that start on Monday... (EASY!) 576// For Weeks that start on Monday... (EASY!)
588// At the moment we will use ISO 8601 method for computing 577// At the moment we will use ISO 8601 method for computing
589// the week. Granted, other countries use other methods, 578// the week. Granted, other countries use other methods,
590// bet we aren't doing any Locale stuff at the moment. So, 579// bet we aren't doing any Locale stuff at the moment. So,
591// this should pass. This Algorithim is public domain and 580// this should pass. This Algorithim is public domain and
592// available at: 581// available at:
593// http://personal.ecu.edu/mccartyr/ISOwdALG.txt 582// http://personal.ecu.edu/mccartyr/ISOwdALG.txt
594// the week number is return, and the year number is returned in year 583// the week number is return, and the year number is returned in year
595// for Instance 2001/12/31 is actually the first week in 2002. 584// for Instance 2001/12/31 is actually the first week in 2002.
596// There is a more mathematical definition, but I will implement it when 585// There is a more mathematical definition, but I will implement it when
597// we are pass our deadline. 586// we are pass our deadline.
598 587
599// For Weeks that start on Sunday... (ahh... home rolled) 588// For Weeks that start on Sunday... (ahh... home rolled)
600// okay, if Jan 1 is on Friday or Saturday, 589// okay, if Jan 1 is on Friday or Saturday,
601// it will go to the pervious 590// it will go to the pervious
diff --git a/core/pim/datebook/datebookweekheaderimpl.cpp b/core/pim/datebook/datebookweekheaderimpl.cpp
index ff7626f..770410e 100644
--- a/core/pim/datebook/datebookweekheaderimpl.cpp
+++ b/core/pim/datebook/datebookweekheaderimpl.cpp
@@ -49,67 +49,75 @@ DateBookWeekHeader::DateBookWeekHeader( bool startOnMonday, QWidget* parent, con
49 */ 49 */
50DateBookWeekHeader::~DateBookWeekHeader() 50DateBookWeekHeader::~DateBookWeekHeader()
51{ 51{
52 // no need to delete child widgets, Qt does it all for us 52 // no need to delete child widgets, Qt does it all for us
53} 53}
54 54
55void DateBookWeekHeader::pickDate() 55void DateBookWeekHeader::pickDate()
56{ 56{
57 static QPopupMenu *m1 = 0; 57 static QPopupMenu *m1 = 0;
58 static DateBookMonth *picker = 0; 58 static DateBookMonth *picker = 0;
59 if ( !m1 ) { 59 if ( !m1 ) {
60 m1 = new QPopupMenu( this ); 60 m1 = new QPopupMenu( this );
61 picker = new DateBookMonth( m1, 0, TRUE ); 61 picker = new DateBookMonth( m1, 0, TRUE );
62 m1->insertItem( picker ); 62 m1->insertItem( picker );
63 connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( setDate( int, int, int ) ) ); 63 connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( setDate( int, int, int ) ) );
64 // connect( m1, SIGNAL( aboutToHide() ), this, SLOT( gotHide() ) ); 64 // connect( m1, SIGNAL( aboutToHide() ), this, SLOT( gotHide() ) );
65 } 65 }
66 picker->setDate( date.year(), date.month(), date.day() ); 66 picker->setDate( date.year(), date.month(), date.day() );
67 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height()))); 67 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height())));
68 picker->setFocus(); 68 picker->setFocus();
69} 69}
70 70
71void DateBookWeekHeader::nextMonth() 71void DateBookWeekHeader::nextMonth()
72{ 72{
73 qWarning("nextMonth() " );
73 setDate(date.addDays(28)); 74 setDate(date.addDays(28));
74} 75}
75void DateBookWeekHeader::prevMonth() 76void DateBookWeekHeader::prevMonth()
76{ 77{
78 qWarning("prevMonth() " );
77 setDate(date.addDays(-28)); 79 setDate(date.addDays(-28));
78} 80}
79void DateBookWeekHeader::nextWeek() 81void DateBookWeekHeader::nextWeek()
80{ 82{
83 qWarning("nextWeek() " );
81 setDate(date.addDays(7)); 84 setDate(date.addDays(7));
82} 85}
83void DateBookWeekHeader::prevWeek() 86void DateBookWeekHeader::prevWeek()
84{ 87{
88 qWarning("prevWeek() ");
85 setDate(date.addDays(-7)); 89 setDate(date.addDays(-7));
86} 90}
87 91
88void DateBookWeekHeader::setDate( int y, int m, int d ) 92void DateBookWeekHeader::setDate( int y, int m, int d )
89{ 93{
90 setDate(QDate(y,m,d)); 94 setDate(QDate(y,m,d));
91} 95}
92 96
93void DateBookWeekHeader::setDate(const QDate &d) { 97void DateBookWeekHeader::setDate(const QDate &d) {
94 int year,week,dayofweek; 98 int year,week,dayofweek;
95 date=d; 99 date=d;
96 dayofweek=d.dayOfWeek(); 100 dayofweek=d.dayOfWeek();
97 if(bStartOnMonday) dayofweek--; 101 if(bStartOnMonday)
98 date=date.addDays(-dayofweek); 102 dayofweek--;
103 else if( dayofweek == 7 )
104 /* we already have the right day -7 would lead to the current week..*/
105 dayofweek = 0;
99 106
107 date=date.addDays(-dayofweek);
100 calcWeek(date,week,year,bStartOnMonday); 108 calcWeek(date,week,year,bStartOnMonday);
101 QDate start=date; 109 QDate start=date;
102 QDate stop=start.addDays(6); 110 QDate stop=start.addDays(6);
103 labelDate->setText( QString::number(start.day()) + "." + 111 labelDate->setText( QString::number(start.day()) + "." +
104 start.monthName(start.month()) + "-" + 112 start.monthName(start.month()) + "-" +
105 QString::number(stop.day()) + "." + 113 QString::number(stop.day()) + "." +
106 start.monthName(stop.month()) +" ("+ 114 start.monthName(stop.month()) +" ("+
107 tr("w")+":"+QString::number( week ) +")"); 115 tr("w")+":"+QString::number( week ) +")");
108 emit dateChanged(date); 116 emit dateChanged(date);
109} 117}
110 118
111void DateBookWeekHeader::setStartOfWeek( bool onMonday ) 119void DateBookWeekHeader::setStartOfWeek( bool onMonday )
112{ 120{
113 bStartOnMonday = onMonday; 121 bStartOnMonday = onMonday;
114 setDate( date ); 122 setDate( date );
115} 123}
diff --git a/core/pim/datebook/datebookweeklst.cpp b/core/pim/datebook/datebookweeklst.cpp
index 7817042..aad1f3a 100644
--- a/core/pim/datebook/datebookweeklst.cpp
+++ b/core/pim/datebook/datebookweeklst.cpp
@@ -40,49 +40,54 @@ DateBookWeekLstHeader::DateBookWeekLstHeader(bool onM, QWidget* parent, const ch
40 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") ); 40 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") );
41 backweek->setBackgroundMode( PaletteButton ); 41 backweek->setBackgroundMode( PaletteButton );
42 backweek->setPixmap( Resource::loadPixmap("back") ); 42 backweek->setPixmap( Resource::loadPixmap("back") );
43 backmonth->setBackgroundMode( PaletteButton ); 43 backmonth->setBackgroundMode( PaletteButton );
44 backmonth->setPixmap( Resource::loadPixmap("fastback") ); 44 backmonth->setPixmap( Resource::loadPixmap("fastback") );
45 DateBookWeekLstHeaderBaseLayout->setSpacing(0); 45 DateBookWeekLstHeaderBaseLayout->setSpacing(0);
46 DateBookWeekLstHeaderBaseLayout->setMargin(0); 46 DateBookWeekLstHeaderBaseLayout->setMargin(0);
47 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding)); 47 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding));
48 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed)); 48 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
49 49
50 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth())); 50 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth()));
51 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek())); 51 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek()));
52 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek())); 52 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek()));
53 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth())); 53 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth()));
54 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate())); 54 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate()));
55 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool))); 55 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool)));
56 bStartOnMonday=onM; 56 bStartOnMonday=onM;
57} 57}
58DateBookWeekLstHeader::~DateBookWeekLstHeader(){} 58DateBookWeekLstHeader::~DateBookWeekLstHeader(){}
59 59
60void DateBookWeekLstHeader::setDate(const QDate &d) { 60void DateBookWeekLstHeader::setDate(const QDate &d) {
61 int year,week,dayofweek; 61 int year,week,dayofweek;
62 date=d; 62 date=d;
63 dayofweek=d.dayOfWeek(); 63 dayofweek=d.dayOfWeek();
64 if(bStartOnMonday) dayofweek--; 64 if(bStartOnMonday)
65 dayofweek--;
66 else if( dayofweek == 7 )
67 /* we already have the right day -7 would lead to the same week */
68 dayofweek = 0;
69
65 date=date.addDays(-dayofweek); 70 date=date.addDays(-dayofweek);
66 71
67 calcWeek(date,week,year,bStartOnMonday); 72 calcWeek(date,week,year,bStartOnMonday);
68 QDate start=date; 73 QDate start=date;
69 QDate stop=start.addDays(6); 74 QDate stop=start.addDays(6);
70 labelDate->setText( QString::number(start.day()) + "." + 75 labelDate->setText( QString::number(start.day()) + "." +
71 start.monthName(start.month()) + "-" + 76 start.monthName(start.month()) + "-" +
72 QString::number(stop.day()) + "." + 77 QString::number(stop.day()) + "." +
73 start.monthName(stop.month()) +" ("+ 78 start.monthName(stop.month()) +" ("+
74 tr("w")+":"+QString::number( week ) +")"); 79 tr("w")+":"+QString::number( week ) +")");
75 emit dateChanged(date); 80 emit dateChanged(date);
76} 81}
77 82
78void DateBookWeekLstHeader::pickDate() { 83void DateBookWeekLstHeader::pickDate() {
79 static QPopupMenu *m1 = 0; 84 static QPopupMenu *m1 = 0;
80 static DateBookMonth *picker = 0; 85 static DateBookMonth *picker = 0;
81 if ( !m1 ) { 86 if ( !m1 ) {
82 m1 = new QPopupMenu( this ); 87 m1 = new QPopupMenu( this );
83 picker = new DateBookMonth( m1, 0, TRUE ); 88 picker = new DateBookMonth( m1, 0, TRUE );
84 m1->insertItem( picker ); 89 m1->insertItem( picker );
85 connect( picker, SIGNAL( dateClicked( int, int, int ) ),this, SLOT( setDate( int, int, int ) ) ); 90 connect( picker, SIGNAL( dateClicked( int, int, int ) ),this, SLOT( setDate( int, int, int ) ) );
86 //connect( m1, SIGNAL( aboutToHide() ), 91 //connect( m1, SIGNAL( aboutToHide() ),
87 //this, SLOT( gotHide() ) ); 92 //this, SLOT( gotHide() ) );
88 } 93 }
@@ -96,49 +101,49 @@ void DateBookWeekLstHeader::setDate(int y, int m, int d) {
96 101
97void DateBookWeekLstHeader::nextWeek() { 102void DateBookWeekLstHeader::nextWeek() {
98 setDate(date.addDays(7)); 103 setDate(date.addDays(7));
99} 104}
100void DateBookWeekLstHeader::prevWeek() { 105void DateBookWeekLstHeader::prevWeek() {
101 setDate(date.addDays(-7)); 106 setDate(date.addDays(-7));
102} 107}
103void DateBookWeekLstHeader::nextMonth() 108void DateBookWeekLstHeader::nextMonth()
104{ 109{
105 setDate(date.addDays(28)); 110 setDate(date.addDays(28));
106} 111}
107void DateBookWeekLstHeader::prevMonth() 112void DateBookWeekLstHeader::prevMonth()
108{ 113{
109 setDate(date.addDays(-28)); 114 setDate(date.addDays(-28));
110} 115}
111 116
112DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */, 117DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */,
113 QWidget* parent, 118 QWidget* parent,
114 const char* name, 119 const char* name,
115 WFlags fl ) 120 WFlags fl )
116 : DateBookWeekLstDayHdrBase(parent, name, fl) { 121 : DateBookWeekLstDayHdrBase(parent, name, fl) {
117 122
118 date=d; 123 date=d;
119 124
120 static const char *wdays={"MTWTFSSM"}; 125 static const QString wdays=tr("MTWTFSSM", "Week days");
121 char day=wdays[d.dayOfWeek()-1]; 126 char day=wdays[d.dayOfWeek()-1];
122 127
123 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) ); 128 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) );
124 add->setText("+"); 129 add->setText("+");
125 130
126 if (d == QDate::currentDate()) { 131 if (d == QDate::currentDate()) {
127 QPalette pal=label->palette(); 132 QPalette pal=label->palette();
128 pal.setColor(QColorGroup::Foreground, QColor(0,0,255)); 133 pal.setColor(QColorGroup::Foreground, QColor(0,0,255));
129 label->setPalette(pal); 134 label->setPalette(pal);
130 135
131 /* 136 /*
132 QFont f=label->font(); 137 QFont f=label->font();
133 f.setItalic(true); 138 f.setItalic(true);
134 label->setFont(f); 139 label->setFont(f);
135 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor())); 140 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor()));
136 */ 141 */
137 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday 142 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday
138 QPalette pal=label->palette(); 143 QPalette pal=label->palette();
139 pal.setColor(QColorGroup::Foreground, QColor(255,0,0)); 144 pal.setColor(QColorGroup::Foreground, QColor(255,0,0));
140 label->setPalette(pal); 145 label->setPalette(pal);
141 } 146 }
142 147
143 connect (label, SIGNAL(clicked()), this, SLOT(showDay())); 148 connect (label, SIGNAL(clicked()), this, SLOT(showDay()));
144 connect (add, SIGNAL(clicked()), this, SLOT(newEvent())); 149 connect (add, SIGNAL(clicked()), this, SLOT(newEvent()));
@@ -216,48 +221,49 @@ DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev,
216 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL); 221 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL);
217 qDebug("Read weeklistviewconfig: %d",weeklistviewconfig); 222 qDebug("Read weeklistviewconfig: %d",weeklistviewconfig);
218 223
219 bStartOnMonday=onM; 224 bStartOnMonday=onM;
220 setPalette(white); 225 setPalette(white);
221 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding)); 226 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
222 227
223 QVBoxLayout *layout = new QVBoxLayout( this ); 228 QVBoxLayout *layout = new QVBoxLayout( this );
224 229
225 qBubbleSort(ev); 230 qBubbleSort(ev);
226 QValueListIterator<EffectiveEvent> it; 231 QValueListIterator<EffectiveEvent> it;
227 it=ev.begin(); 232 it=ev.begin();
228 233
229 int dayOrder[7]; 234 int dayOrder[7];
230 if (bStartOnMonday) { 235 if (bStartOnMonday) {
231 for (int d=0; d<7; d++) dayOrder[d]=d+1; 236 for (int d=0; d<7; d++) dayOrder[d]=d+1;
232 } else { 237 } else {
233 for (int d=0; d<7; d++) dayOrder[d]=d; 238 for (int d=0; d<7; d++) dayOrder[d]=d;
234 dayOrder[0]=7; 239 dayOrder[0]=7;
235 } 240 }
236 241
237 // Calculate offset to first day of week. 242 // Calculate offset to first day of week.
238 int dayoffset=d.dayOfWeek(); 243 int dayoffset=d.dayOfWeek();
239 if(bStartOnMonday) dayoffset--; 244 if(bStartOnMonday) dayoffset--;
245 else if( dayoffset == 7 ) dayoffset = 0;
240 246
241 for (int i=0; i<7; i++) { 247 for (int i=0; i<7; i++) {
242 // Header 248 // Header
243 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this); 249 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this);
244 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 250 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
245 connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)), 251 connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)),
246 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); 252 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)));
247 layout->addWidget(hdr); 253 layout->addWidget(hdr);
248 254
249 // Events 255 // Events
250 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) { 256 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) {
251 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) {// Skip events ending at 00:00 starting at another day. 257 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) {// Skip events ending at 00:00 starting at another day.
252 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this); 258 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this);
253 layout->addWidget(l); 259 layout->addWidget(l);
254 connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); 260 connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &)));
255 } 261 }
256 it++; 262 it++;
257 } 263 }
258 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 264 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
259 } 265 }
260} 266}
261DateBookWeekLstView::~DateBookWeekLstView(){} 267DateBookWeekLstView::~DateBookWeekLstView(){}
262void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();} 268void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();}
263 269
diff --git a/core/pim/datebook/dateentryimpl.cpp b/core/pim/datebook/dateentryimpl.cpp
index 13d2ce2..d9e5225 100644
--- a/core/pim/datebook/dateentryimpl.cpp
+++ b/core/pim/datebook/dateentryimpl.cpp
@@ -381,48 +381,50 @@ void DateEntry::typeChanged( const QString &s )
381 buttonStart->setEnabled( b ); 381 buttonStart->setEnabled( b );
382 comboStart->setEnabled( b ); 382 comboStart->setEnabled( b );
383 comboEnd->setEnabled( b ); 383 comboEnd->setEnabled( b );
384} 384}
385 385
386void DateEntry::slotRepeat() 386void DateEntry::slotRepeat()
387{ 387{
388 // Work around for compiler Bug.. 388 // Work around for compiler Bug..
389 RepeatEntry *e; 389 RepeatEntry *e;
390 390
391 // it is better in my opinion to just grab this from the mother, 391 // it is better in my opinion to just grab this from the mother,
392 // since, this dialog doesn't need to keep track of it... 392 // since, this dialog doesn't need to keep track of it...
393 if ( rp.type != Event::NoRepeat ) 393 if ( rp.type != Event::NoRepeat )
394 e = new RepeatEntry( startWeekOnMonday, rp, startDate, this); 394 e = new RepeatEntry( startWeekOnMonday, rp, startDate, this);
395 else 395 else
396 e = new RepeatEntry( startWeekOnMonday, startDate, this ); 396 e = new RepeatEntry( startWeekOnMonday, startDate, this );
397 397
398#if defined(Q_WS_QWS) || defined(_WS_QWS_) 398#if defined(Q_WS_QWS) || defined(_WS_QWS_)
399 e->showMaximized(); 399 e->showMaximized();
400#endif 400#endif
401 if ( e->exec() ) { 401 if ( e->exec() ) {
402 rp = e->repeatPattern(); 402 rp = e->repeatPattern();
403 setRepeatLabel(); 403 setRepeatLabel();
404 } 404 }
405 // deleting sounds like a nice idea...
406 delete e;
405} 407}
406 408
407void DateEntry::slotChangeStartOfWeek( bool onMonday ) 409void DateEntry::slotChangeStartOfWeek( bool onMonday )
408{ 410{
409 startWeekOnMonday = onMonday; 411 startWeekOnMonday = onMonday;
410} 412}
411 413
412Event DateEntry::event() 414Event DateEntry::event()
413{ 415{
414 Event ev; 416 Event ev;
415 Event::SoundTypeChoice st; 417 Event::SoundTypeChoice st;
416 ev.setDescription( comboDescription->currentText() ); 418 ev.setDescription( comboDescription->currentText() );
417 ev.setLocation( comboLocation->currentText() ); 419 ev.setLocation( comboLocation->currentText() );
418 ev.setCategories( comboCategory->currentCategories() ); 420 ev.setCategories( comboCategory->currentCategories() );
419 ev.setType( checkAllDay->isChecked() ? Event::AllDay : Event::Normal ); 421 ev.setType( checkAllDay->isChecked() ? Event::AllDay : Event::Normal );
420 if ( startDate > endDate ) { 422 if ( startDate > endDate ) {
421 QDate tmp = endDate; 423 QDate tmp = endDate;
422 endDate = startDate; 424 endDate = startDate;
423 startDate = tmp; 425 startDate = tmp;
424 } 426 }
425 427
426 // This is now done in the changed slots 428 // This is now done in the changed slots
427 // startTime = parseTime( comboStart->text(), ampm ); 429 // startTime = parseTime( comboStart->text(), ampm );
428 //endTime = parseTime( comboEnd->text(), ampm ); 430 //endTime = parseTime( comboEnd->text(), ampm );
diff --git a/core/pim/datebook/opie-datebook.control b/core/pim/datebook/opie-datebook.control
index 1a28448..fe5a086 100644
--- a/core/pim/datebook/opie-datebook.control
+++ b/core/pim/datebook/opie-datebook.control
@@ -1,11 +1,11 @@
1Package: opie-datebook 1Package: opie-datebook
2Files: bin/datebook apps/1Pim/datebook.desktop pics/datebook 2Files: bin/datebook apps/1Pim/datebook.desktop
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Conflicts: qpe-tkccalendar 5Conflicts: qpe-tkccalendar
6Maintainer: Warwick Allison <warwick@trolltech.com> 6Maintainer: Warwick Allison <warwick@trolltech.com>
7Architecture: arm 7Architecture: arm
8Version: $QPE_VERSION-$SUB_VERSION 8Depends: task-opie-minimal, libopie1, opie-pics
9Depends: task-opie-minimal, libopie1
10Description: A datebook/appointment manager 9Description: A datebook/appointment manager
11 A datebook/appointment manager for the Opie environment. 10 A datebook/appointment manager for the Opie environment.
11Version: $QPE_VERSION$EXTRAVERSION
diff --git a/core/pim/datebook/repeatentry.cpp b/core/pim/datebook/repeatentry.cpp
index 5637c4d..b1a162d 100644
--- a/core/pim/datebook/repeatentry.cpp
+++ b/core/pim/datebook/repeatentry.cpp
@@ -12,89 +12,111 @@
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 20
21#include "repeatentry.h" 21#include "repeatentry.h"
22 22
23#include <qpe/datebookmonth.h> 23#include <qpe/datebookmonth.h>
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25#include <qpe/timestring.h> 25#include <qpe/timestring.h>
26 26
27#include <qbuttongroup.h> 27#include <qbuttongroup.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qpopupmenu.h> 29#include <qpopupmenu.h>
30#include <qspinbox.h> 30#include <qspinbox.h>
31#include <qtoolbutton.h> 31#include <qtoolbutton.h>
32 32
33#include <time.h> 33#include <time.h>
34 34
35// Global Templates for use in setting up the repeat label... 35// Global Templates for use in setting up the repeat label...
36const QString strDayTemplate = QObject::tr("Every"); 36// the problem is these strings get initialized before QPEApplication can install the translator -zecke
37const QString strYearTemplate = QObject::tr("%1 %2 every "); 37namespace {
38const QString strMonthDateTemplate = QObject::tr("The %1 every "); 38QString strDayTemplate;
39const QString strMonthDayTemplate = QObject::tr("The %1 %1 of every"); 39QString strYearTemplate;
40const QString strWeekTemplate = QObject::tr("Every "); 40QString strMonthDateTemplate;
41const QString dayLabel[] = { QObject::tr("Monday"), 41QString strMonthDayTemplate;
42 QObject::tr("Tuesday"), 42QString strWeekTemplate;
43 QObject::tr("Wednesday"), 43QString dayLabel[7];
44 QObject::tr("Thursday"), 44}
45 QObject::tr("Friday"), 45
46 QObject::tr("Saturday"), 46/*
47 QObject::tr("Sunday") }; 47 * static linkage to not polute the symbol table...
48 48 * The problem is that const and static linkage are resolved prior to installing a translator
49 * leading to that the above strings are translted but to the original we delay the init of these strings...
50 * -zecke
51 */
52static void fillStrings() {
53 strDayTemplate = QObject::tr("Every");
54 strYearTemplate = QObject::tr("%1 %2 every ");
55 strMonthDateTemplate = QObject::tr("The %1 every ");
56 strMonthDayTemplate = QObject::tr("The %1 %1 of every");
57 strWeekTemplate = QObject::tr("Every ");
58 dayLabel[0] = QObject::tr("Monday");
59 dayLabel[1] = QObject::tr("Tuesday");
60 dayLabel[2] = QObject::tr("Wednesday");
61 dayLabel[3] = QObject::tr("Thursday");
62 dayLabel[4] = QObject::tr("Friday");
63 dayLabel[5] = QObject::tr("Saturday");
64 dayLabel[6] = QObject::tr("Sunday");
65}
49 66
50 static QString numberPlacing( int x );// return the proper word format for 67 static QString numberPlacing( int x );// return the proper word format for
51 // x (1st, 2nd, etc) 68 // x (1st, 2nd, etc)
52static int week( const QDate &dt ); // what week in the month is dt? 69static int week( const QDate &dt ); // what week in the month is dt?
53 70
54RepeatEntry::RepeatEntry( bool startOnMonday, 71RepeatEntry::RepeatEntry( bool startOnMonday,
55 const QDate &newStart, QWidget *parent, 72 const QDate &newStart, QWidget *parent,
56 const char *name, bool modal, WFlags fl ) 73 const char *name, bool modal, WFlags fl )
57 : RepeatEntryBase( parent, name, modal, fl ), 74 : RepeatEntryBase( parent, name, modal, fl ),
58 start( newStart ), 75 start( newStart ),
59 currInterval( NONE ), 76 currInterval( NONE ),
60 startWeekOnMonday( startOnMonday ) 77 startWeekOnMonday( startOnMonday )
61{ 78{
79 if (strDayTemplate.isEmpty() )
80 fillStrings();
81
62 init(); 82 init();
63 fraType->setButton( currInterval ); 83 fraType->setButton( currInterval );
64 chkNoEnd->setChecked( TRUE ); 84 chkNoEnd->setChecked( TRUE );
65 setupNone(); 85 setupNone();
66} 86}
67 87
68RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp, 88RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp,
69 const QDate &startDate, 89 const QDate &startDate,
70 QWidget *parent, const char *name, bool modal, 90 QWidget *parent, const char *name, bool modal,
71 WFlags fl ) 91 WFlags fl )
72 : RepeatEntryBase( parent, name, modal, fl ), 92 : RepeatEntryBase( parent, name, modal, fl ),
73 start( startDate ), 93 start( startDate ),
74 end( rp.endDate() ), 94 end( rp.endDate() ),
75 startWeekOnMonday( startOnMonday ) 95 startWeekOnMonday( startOnMonday )
76{ 96{
97 if (strDayTemplate.isEmpty() )
98 fillStrings();
77 // do some stuff with the repeat pattern 99 // do some stuff with the repeat pattern
78 init(); 100 init();
79 switch ( rp.type ) { 101 switch ( rp.type ) {
80 default: 102 default:
81 case Event::NoRepeat: 103 case Event::NoRepeat:
82 currInterval = NONE; 104 currInterval = NONE;
83 setupNone(); 105 setupNone();
84 break; 106 break;
85 case Event::Daily: 107 case Event::Daily:
86 currInterval = DAY; 108 currInterval = DAY;
87 setupDaily(); 109 setupDaily();
88 break; 110 break;
89 case Event::Weekly: 111 case Event::Weekly:
90 currInterval = WEEK; 112 currInterval = WEEK;
91 setupWeekly(); 113 setupWeekly();
92 int day, buttons; 114 int day, buttons;
93 for ( day = 0x01, buttons = 0; buttons < 7; 115 for ( day = 0x01, buttons = 0; buttons < 7;
94 day = day << 1, buttons++ ) { 116 day = day << 1, buttons++ ) {
95 if ( rp.days & day ) { 117 if ( rp.days & day ) {
96 if ( startWeekOnMonday ) 118 if ( startWeekOnMonday )
97 fraExtra->setButton( buttons ); 119 fraExtra->setButton( buttons );
98 else { 120 else {
99 if ( buttons == 7 ) 121 if ( buttons == 7 )
100 fraExtra->setButton( 0 ); 122 fraExtra->setButton( 0 );
@@ -479,49 +501,49 @@ void RepeatEntry::slotWeekLabel()
479 QStringList::Iterator itStr; 501 QStringList::Iterator itStr;
480 for ( i = 0, itStr = list.begin(); itStr != list.end(); ++itStr, i++ ) { 502 for ( i = 0, itStr = list.begin(); itStr != list.end(); ++itStr, i++ ) {
481 if ( i == 3 ) 503 if ( i == 3 )
482 bNeedCarriage = TRUE; 504 bNeedCarriage = TRUE;
483 else 505 else
484 bNeedCarriage = FALSE; 506 bNeedCarriage = FALSE;
485 if ( str.isNull() ) 507 if ( str.isNull() )
486 str = *itStr; 508 str = *itStr;
487 else if ( i == list.count() - 1 ) { 509 else if ( i == list.count() - 1 ) {
488 if ( i < 2 ) 510 if ( i < 2 )
489 str += tr(" and ") + *itStr; 511 str += tr(" and ") + *itStr;
490 else { 512 else {
491 if ( bNeedCarriage ) 513 if ( bNeedCarriage )
492 str += tr( ",\nand " ) + *itStr; 514 str += tr( ",\nand " ) + *itStr;
493 else 515 else
494 str += tr( ", and " ) + *itStr; 516 str += tr( ", and " ) + *itStr;
495 } 517 }
496 } else { 518 } else {
497 if ( bNeedCarriage ) 519 if ( bNeedCarriage )
498 str += ",\n" + *itStr; 520 str += ",\n" + *itStr;
499 else 521 else
500 str += ", " + *itStr; 522 str += ", " + *itStr;
501 } 523 }
502 } 524 }
503 str = str.prepend( "on " ); 525 str = str.prepend( tr("on ") );
504 lblWeekVar->setText( str ); 526 lblWeekVar->setText( str );
505} 527}
506 528
507void RepeatEntry::slotMonthLabel( int type ) 529void RepeatEntry::slotMonthLabel( int type )
508{ 530{
509 QString str; 531 QString str;
510 if ( currInterval != MONTH || type > 1 ) 532 if ( currInterval != MONTH || type > 1 )
511 return; 533 return;
512 if ( type == 1 ) 534 if ( type == 1 )
513 str = strMonthDateTemplate.arg( numberPlacing(start.day()) ); 535 str = strMonthDateTemplate.arg( numberPlacing(start.day()) );
514 else 536 else
515 str = strMonthDayTemplate.arg( numberPlacing(week(start))) 537 str = strMonthDayTemplate.arg( numberPlacing(week(start)))
516 .arg( dayLabel[start.dayOfWeek() - 1] ); 538 .arg( dayLabel[start.dayOfWeek() - 1] );
517 lblRepeat->setText( str ); 539 lblRepeat->setText( str );
518} 540}
519 541
520void RepeatEntry::slotChangeStartOfWeek( bool onMonday ) 542void RepeatEntry::slotChangeStartOfWeek( bool onMonday )
521{ 543{
522 startWeekOnMonday = onMonday; 544 startWeekOnMonday = onMonday;
523 // we need to make this unintrusive as possible... 545 // we need to make this unintrusive as possible...
524 int saveSpin = spinFreq->value(); 546 int saveSpin = spinFreq->value();
525 char days = 0; 547 char days = 0;
526 int day; 548 int day;
527 QListIterator<QToolButton> itExtra( listExtra ); 549 QListIterator<QToolButton> itExtra( listExtra );