289
282
QString iconPath;
290
283
switch ( status ) {
291
284
case Attendee::Accepted:
292
iconPath = KIconLoader::global()->iconPath( "dialog-ok-apply", KIconLoader::Small );
285
iconPath = KIconLoader::global()->iconPath( QLatin1String("dialog-ok-apply"), KIconLoader::Small );
294
287
case Attendee::Declined:
295
iconPath = KIconLoader::global()->iconPath( "dialog-cancel", KIconLoader::Small );
288
iconPath = KIconLoader::global()->iconPath( QLatin1String("dialog-cancel"), KIconLoader::Small );
297
290
case Attendee::NeedsAction:
298
iconPath = KIconLoader::global()->iconPath( "help-about", KIconLoader::Small );
291
iconPath = KIconLoader::global()->iconPath( QLatin1String("help-about"), KIconLoader::Small );
300
293
case Attendee::InProcess:
301
iconPath = KIconLoader::global()->iconPath( "help-about", KIconLoader::Small );
294
iconPath = KIconLoader::global()->iconPath( QLatin1String("help-about"), KIconLoader::Small );
303
296
case Attendee::Tentative:
304
iconPath = KIconLoader::global()->iconPath( "dialog-ok", KIconLoader::Small );
297
iconPath = KIconLoader::global()->iconPath( QLatin1String("dialog-ok"), KIconLoader::Small );
306
299
case Attendee::Delegated:
307
iconPath = KIconLoader::global()->iconPath( "mail-forward", KIconLoader::Small );
300
iconPath = KIconLoader::global()->iconPath( QLatin1String("mail-forward"), KIconLoader::Small );
309
302
case Attendee::Completed:
310
iconPath = KIconLoader::global()->iconPath( "mail-mark-read", KIconLoader::Small );
303
iconPath = KIconLoader::global()->iconPath( QLatin1String("mail-mark-read"), KIconLoader::Small );
432
425
str = displayViewFormatAttendeeRoleList( incidence, Attendee::Chair, showStatus );
433
426
if ( !str.isEmpty() ) {
435
tmpStr += "<td><b>" + i18n( "Chair:" ) + "</b></td>";
436
tmpStr += "<td>" + str + "</td>";
427
tmpStr += QLatin1String("<tr>");
428
tmpStr += QLatin1String("<td><b>") + i18n( "Chair:" ) + QLatin1String("</b></td>");
429
tmpStr += QLatin1String("<td>") + str + QLatin1String("</td>");
430
tmpStr += QLatin1String("</tr>");
440
433
// Add required participants
441
434
str = displayViewFormatAttendeeRoleList( incidence, Attendee::ReqParticipant, showStatus );
442
435
if ( !str.isEmpty() ) {
444
tmpStr += "<td><b>" + i18n( "Required Participants:" ) + "</b></td>";
445
tmpStr += "<td>" + str + "</td>";
436
tmpStr += QLatin1String("<tr>");
437
tmpStr += QLatin1String("<td><b>") + i18n( "Required Participants:" ) + QLatin1String("</b></td>");
438
tmpStr += QLatin1String("<td>") + str + QLatin1String("</td>");
439
tmpStr += QLatin1String("</tr>");
449
442
// Add optional participants
450
443
str = displayViewFormatAttendeeRoleList( incidence, Attendee::OptParticipant, showStatus );
451
444
if ( !str.isEmpty() ) {
453
tmpStr += "<td><b>" + i18n( "Optional Participants:" ) + "</b></td>";
454
tmpStr += "<td>" + str + "</td>";
445
tmpStr += QLatin1String("<tr>");
446
tmpStr += QLatin1String("<td><b>") + i18n( "Optional Participants:" ) + QLatin1String("</b></td>");
447
tmpStr += QLatin1String("<td>") + str + QLatin1String("</td>");
448
tmpStr += QLatin1String("</tr>");
459
452
str = displayViewFormatAttendeeRoleList( incidence, Attendee::NonParticipant, showStatus );
460
453
if ( !str.isEmpty() ) {
462
tmpStr += "<td><b>" + i18n( "Observers:" ) + "</b></td>";
463
tmpStr += "<td>" + str + "</td>";
454
tmpStr += QLatin1String("<tr>");
455
tmpStr += QLatin1String("<td><b>") + i18n( "Observers:" ) + QLatin1String("</b></td>");
456
tmpStr += QLatin1String("<td>") + str + QLatin1String("</td>");
457
tmpStr += QLatin1String("</tr>");
532
525
static QString displayViewFormatHeader( Incidence::Ptr incidence )
534
QString tmpStr = "<table><tr>";
527
QString tmpStr = QLatin1String( "<table><tr>" );
537
530
KIconLoader *iconLoader = KIconLoader::global();
531
tmpStr += QLatin1String("<td>");
540
533
QString iconPath;
541
if ( incidence->customProperty( "KABC", "BIRTHDAY" ) == "YES" ) {
542
iconPath = iconLoader->iconPath( "view-calendar-birthday", KIconLoader::Small );
543
} else if ( incidence->customProperty( "KABC", "ANNIVERSARY" ) == "YES" ) {
544
iconPath = iconLoader->iconPath( "view-calendar-wedding-anniversary", KIconLoader::Small );
534
if ( incidence->customProperty( "KABC", "BIRTHDAY" ) == QLatin1String("YES") ) {
535
iconPath = iconLoader->iconPath( QLatin1String("view-calendar-birthday"), KIconLoader::Small );
536
} else if ( incidence->customProperty( "KABC", "ANNIVERSARY" ) == QLatin1String("YES") ) {
537
iconPath = iconLoader->iconPath( QLatin1String("view-calendar-wedding-anniversary"), KIconLoader::Small );
546
539
iconPath = iconLoader->iconPath( incidence->iconName(), KIconLoader::Small );
548
tmpStr += "<img valign=\"top\" src=\"" + iconPath + "\">";
541
tmpStr += QLatin1String("<img valign=\"top\" src=\"") + iconPath + QLatin1String("\">");
550
543
if ( incidence->hasEnabledAlarms() ) {
551
tmpStr += "<img valign=\"top\" src=\"" +
552
iconLoader->iconPath( "preferences-desktop-notification-bell", KIconLoader::Small ) +
544
tmpStr += QLatin1String("<img valign=\"top\" src=\"") +
545
iconLoader->iconPath( QLatin1String("preferences-desktop-notification-bell"), KIconLoader::Small ) +
546
QLatin1String("\">");
555
548
if ( incidence->recurs() ) {
556
tmpStr += "<img valign=\"top\" src=\"" +
557
iconLoader->iconPath( "edit-redo", KIconLoader::Small ) +
549
tmpStr += QLatin1String("<img valign=\"top\" src=\"") +
550
iconLoader->iconPath( QLatin1String("edit-redo"), KIconLoader::Small ) +
551
QLatin1String("\">");
560
553
if ( incidence->isReadOnly() ) {
561
tmpStr += "<img valign=\"top\" src=\"" +
562
iconLoader->iconPath( "object-locked", KIconLoader::Small ) +
554
tmpStr += QLatin1String("<img valign=\"top\" src=\"") +
555
iconLoader->iconPath( QLatin1String("object-locked"), KIconLoader::Small ) +
556
QLatin1String("\">");
568
tmpStr += "<b><u>" + incidence->richSummary() + "</u></b>";
571
tmpStr += "</tr></table>";
558
tmpStr += QLatin1String("</td>");
560
tmpStr += QLatin1String("<td>");
561
tmpStr += QLatin1String("<b><u>") + incidence->richSummary() + QLatin1String("</u></b>");
562
tmpStr += QLatin1String("</td>");
564
tmpStr += QLatin1String("</tr></table>");
616
tmpStr += QLatin1String("<tr>");
624
617
if ( event->allDay() ) {
625
618
if ( event->isMultiDay() ) {
626
tmpStr += "<td><b>" + i18n( "Date:" ) + "</b></td>";
619
tmpStr += QLatin1String("<td><b>") + i18n( "Date:" ) + QLatin1String("</b></td>");
620
tmpStr += QLatin1String("<td>") +
628
621
i18nc( "<beginTime> - <endTime>","%1 - %2",
629
622
dateToString( startDt, false, spec ),
630
623
dateToString( endDt, false, spec ) ) +
624
QLatin1String("</td>");
633
tmpStr += "<td><b>" + i18n( "Date:" ) + "</b></td>";
626
tmpStr += QLatin1String("<td><b>") + i18n( "Date:" ) + QLatin1String("</b></td>");
627
tmpStr += QLatin1String("<td>") +
635
628
i18nc( "date as string","%1",
636
629
dateToString( startDt, false, spec ) ) +
630
QLatin1String("</td>");
640
633
if ( event->isMultiDay() ) {
641
tmpStr += "<td><b>" + i18n( "Date:" ) + "</b></td>";
634
tmpStr += QLatin1String("<td><b>") + i18n( "Date:" ) + QLatin1String("</b></td>");
635
tmpStr += QLatin1String("<td>") +
643
636
i18nc( "<beginTime> - <endTime>","%1 - %2",
644
637
dateToString( startDt, false, spec ),
645
638
dateToString( endDt, false, spec ) ) +
639
QLatin1String("</td>");
648
tmpStr += "<td><b>" + i18n( "Date:" ) + "</b></td>";
641
tmpStr += QLatin1String("<td><b>") + i18n( "Date:" ) + QLatin1String("</b></td>");
642
tmpStr += QLatin1String("<td>") +
650
643
i18nc( "date as string", "%1",
651
644
dateToString( startDt, false, spec ) ) +
645
QLatin1String("</td>");
654
tmpStr += "</tr><tr>";
655
tmpStr += "<td><b>" + i18n( "Time:" ) + "</b></td>";
647
tmpStr += QLatin1String("</tr><tr>");
648
tmpStr += QLatin1String("<td><b>") + i18n( "Time:" ) + QLatin1String("</b></td>");
656
649
if ( event->hasEndDate() && startDt != endDt ) {
650
tmpStr += QLatin1String("<td>") +
658
651
i18nc( "<beginTime> - <endTime>","%1 - %2",
659
652
timeToString( startDt, true, spec ),
660
653
timeToString( endDt, true, spec ) ) +
654
QLatin1String("</td>");
656
tmpStr += QLatin1String("<td>") +
664
657
timeToString( startDt, true, spec ) +
658
QLatin1String("</td>");
662
tmpStr += QLatin1String("</tr>");
671
664
QString durStr = durationString( event );
672
665
if ( !durStr.isEmpty() ) {
674
tmpStr += "<td><b>" + i18n( "Duration:" ) + "</b></td>";
675
tmpStr += "<td>" + durStr + "</td>";
666
tmpStr += QLatin1String("<tr>");
667
tmpStr += QLatin1String("<td><b>") + i18n( "Duration:" ) + QLatin1String("</b></td>");
668
tmpStr += QLatin1String("<td>") + durStr + QLatin1String("</td>");
669
tmpStr += QLatin1String("</tr>");
679
672
if ( event->recurs() || event->hasRecurrenceId() ) {
681
tmpStr += "<td><b>" + i18n( "Recurrence:" ) + "</b></td>";
673
tmpStr += QLatin1String("<tr>");
674
tmpStr += QLatin1String("<td><b>") + i18n( "Recurrence:" ) + QLatin1String("</b></td>");
684
677
if ( event->hasRecurrenceId() ) {
721
714
descStr = event->description();
725
tmpStr += "<td><b>" + i18n( "Description:" ) + "</b></td>";
726
tmpStr += "<td>" + descStr + "</td>";
717
tmpStr += QLatin1String("<tr>");
718
tmpStr += QLatin1String("<td><b>") + i18n( "Description:" ) + QLatin1String("</b></td>");
719
tmpStr += QLatin1String("<td>") + descStr + QLatin1String("</td>");
720
tmpStr += QLatin1String("</tr>");
730
723
// TODO: print comments?
732
725
int reminderCount = event->alarms().count();
733
726
if ( reminderCount > 0 && event->hasEnabledAlarms() ) {
735
tmpStr += "<td><b>" +
727
tmpStr += QLatin1String("<tr>");
728
tmpStr += QLatin1String("<td><b>") +
736
729
i18np( "Reminder:", "Reminders:", reminderCount ) +
738
tmpStr += "<td>" + reminderStringList( event ).join( "<br>" ) + "</td>";
730
QLatin1String("</b></td>");
731
tmpStr += QLatin1String("<td>") + reminderStringList( event ).join( QLatin1String("<br>") ) + QLatin1String("</td>");
732
tmpStr += QLatin1String("</tr>");
742
735
tmpStr += displayViewFormatAttendees( calendar, event );
744
737
int categoryCount = event->categories().count();
745
738
if ( categoryCount > 0 ) {
739
tmpStr += QLatin1String("<tr>");
740
tmpStr += QLatin1String("<td><b>");
748
741
tmpStr += i18np( "Category:", "Categories:", categoryCount ) +
750
tmpStr += "<td>" + displayViewFormatCategories( event ) + "</td>";
742
QLatin1String("</b></td>");
743
tmpStr += QLatin1String("<td>") + displayViewFormatCategories( event ) + QLatin1String("</td>");
744
tmpStr += QLatin1String("</tr>");
754
747
int attachmentCount = event->attachments().count();
755
748
if ( attachmentCount > 0 ) {
757
tmpStr += "<td><b>" +
749
tmpStr += QLatin1String("<tr>");
750
tmpStr += QLatin1String("<td><b>") +
758
751
i18np( "Attachment:", "Attachments:", attachmentCount ) +
760
tmpStr += "<td>" + displayViewFormatAttachments( event ) + "</td>";
752
QLatin1String("</b></td>");
753
tmpStr += QLatin1String("<td>") + displayViewFormatAttachments( event ) + QLatin1String("</td>");
754
tmpStr += QLatin1String("</tr>");
763
tmpStr += "</table>";
756
tmpStr += QLatin1String("</table>");
765
tmpStr += "<p><em>" + displayViewFormatCreationDate( event, spec ) + "</em>";
758
tmpStr += QLatin1String("<p><em>") + displayViewFormatCreationDate( event, spec ) + QLatin1String("</em>");
770
763
static QString displayViewFormatTodo( const Calendar::Ptr &calendar, const QString &sourceName,
771
764
const Todo::Ptr &todo,
772
const QDate &date, KDateTime::Spec spec )
765
const QDate &ocurrenceDueDate, KDateTime::Spec spec )
775
768
kDebug() << "IncidenceFormatter::displayViewFormatTodo was called without to-do, quitting";
779
772
QString tmpStr = displayViewFormatHeader( todo );
782
tmpStr += "<col width=\"25%\"/>";
783
tmpStr += "<col width=\"75%\"/>";
774
tmpStr += QLatin1String("<table>");
775
tmpStr += QLatin1String("<col width=\"25%\"/>");
776
tmpStr += QLatin1String("<col width=\"75%\"/>");
785
778
const QString calStr = calendar ? resourceString( calendar, todo ) : sourceName;
786
779
if ( !calStr.isEmpty() ) {
788
tmpStr += "<td><b>" + i18n( "Calendar:" ) + "</b></td>";
789
tmpStr += "<td>" + calStr + "</td>";
780
tmpStr += QLatin1String("<tr>");
781
tmpStr += QLatin1String("<td><b>") + i18n( "Calendar:" ) + QLatin1String("</b></td>");
782
tmpStr += QLatin1String("<td>") + calStr + QLatin1String("</td>");
783
tmpStr += QLatin1String("</tr>");
793
786
if ( !todo->location().isEmpty() ) {
795
tmpStr += "<td><b>" + i18n( "Location:" ) + "</b></td>";
796
tmpStr += "<td>" + todo->richLocation() + "</td>";
787
tmpStr += QLatin1String("<tr>");
788
tmpStr += QLatin1String("<td><b>") + i18n( "Location:" ) + QLatin1String("</b></td>");
789
tmpStr += QLatin1String("<td>") + todo->richLocation() + QLatin1String("</td>");
790
tmpStr += QLatin1String("</tr>");
800
const bool hastStartDate = todo->hasStartDate() && todo->dtStart().isValid();
801
const bool hasDueDate = todo->hasDueDate() && todo->dtDue().isValid();
793
const bool hastStartDate = todo->hasStartDate();
794
const bool hasDueDate = todo->hasDueDate();
803
796
if ( hastStartDate ) {
804
797
KDateTime startDt = todo->dtStart( true /**first*/);
805
if ( todo->recurs() ) {
806
if ( date.isValid() ) {
808
// In kdepim all recuring to-dos have due date.
809
const int length = startDt.daysTo( todo->dtDue( true /**first*/) );
811
startDt.setDate( date.addDays( -length ) );
813
kError() << "DTSTART is bigger than DTDUE, todo->uid() is " << todo->uid();
814
startDt.setDate( date );
798
if ( todo->recurs() && ocurrenceDueDate.isValid() ) {
800
// In kdepim all recuring to-dos have due date.
801
const int length = startDt.daysTo( todo->dtDue( true /**first*/) );
803
startDt.setDate( ocurrenceDueDate.addDays( -length ) );
817
kError() << "To-do is recurring but has no DTDUE set, todo->uid() is " << todo->uid();
818
startDt.setDate( date );
805
kError() << "DTSTART is bigger than DTDUE, todo->uid() is " << todo->uid();
806
startDt.setDate( ocurrenceDueDate );
809
kError() << "To-do is recurring but has no DTDUE set, todo->uid() is " << todo->uid();
810
startDt.setDate( ocurrenceDueDate );
823
tmpStr += "<td><b>" +
813
tmpStr += QLatin1String("<tr>");
814
tmpStr += QLatin1String("<td><b>") +
824
815
i18nc( "to-do start date/time", "Start:" ) +
816
QLatin1String("</b></td>");
817
tmpStr += QLatin1String("<td>") +
827
818
dateTimeToString( startDt, todo->allDay(), false, spec ) +
819
QLatin1String("</td>");
820
tmpStr += QLatin1String("</tr>");
832
823
if ( hasDueDate ) {
833
824
KDateTime dueDt = todo->dtDue();
834
825
if ( todo->recurs() ) {
835
if ( date.isValid() ) {
836
KDateTime kdt( date, QTime( 0, 0, 0 ), KSystemTimeZones::local() );
826
if ( ocurrenceDueDate.isValid() ) {
827
KDateTime kdt( ocurrenceDueDate, QTime( 0, 0, 0 ), KSystemTimeZones::local() );
837
828
kdt = kdt.addSecs( -1 );
838
829
dueDt.setDate( todo->recurrence()->getNextDateTime( kdt ).date() );
842
tmpStr += "<td><b>" +
832
tmpStr += QLatin1String("<tr>");
833
tmpStr += QLatin1String("<td><b>") +
843
834
i18nc( "to-do due date/time", "Due:" ) +
835
QLatin1String("</b></td>");
836
tmpStr += QLatin1String("<td>") +
846
837
dateTimeToString( dueDt, todo->allDay(), false, spec ) +
838
QLatin1String("</td>");
839
tmpStr += QLatin1String("</tr>");
851
842
QString durStr = durationString( todo );
852
843
if ( !durStr.isEmpty() ) {
854
tmpStr += "<td><b>" + i18n( "Duration:" ) + "</b></td>";
855
tmpStr += "<td>" + durStr + "</td>";
844
tmpStr += QLatin1String("<tr>");
845
tmpStr += QLatin1String("<td><b>") + i18n( "Duration:" ) + QLatin1String("</b></td>");
846
tmpStr += QLatin1String("<td>") + durStr + QLatin1String("</td>");
847
tmpStr += QLatin1String("</tr>");
859
850
if ( todo->recurs() || todo->hasRecurrenceId() ) {
861
tmpStr += "<td><b>" + i18n( "Recurrence:" ) + "</b></td>";
851
tmpStr += QLatin1String("<tr>");
852
tmpStr += QLatin1String("<td><b>" )+ i18n( "Recurrence:" ) + QLatin1String("</b></td>");
863
854
if ( todo->hasRecurrenceId() ) {
864
855
str = i18n( "Exception" );
866
857
str = recurrenceString( todo );
859
tmpStr += QLatin1String("<td>") +
861
QLatin1String("</td>");
862
tmpStr += QLatin1String("</tr>");
874
865
if ( !todo->description().isEmpty() ) {
876
tmpStr += "<td><b>" + i18n( "Description:" ) + "</b></td>";
877
tmpStr += "<td>" + todo->richDescription() + "</td>";
866
tmpStr += QLatin1String("<tr>");
867
tmpStr += QLatin1String("<td><b>") + i18n( "Description:" ) + QLatin1String("</b></td>");
868
tmpStr += QLatin1String("<td>") + todo->richDescription() + QLatin1String("</td>");
869
tmpStr += QLatin1String("</tr>");
881
872
// TODO: print comments?
883
874
int reminderCount = todo->alarms().count();
884
875
if ( reminderCount > 0 && todo->hasEnabledAlarms() ) {
886
tmpStr += "<td><b>" +
876
tmpStr += QLatin1String("<tr>");
877
tmpStr += QLatin1String("<td><b>") +
887
878
i18np( "Reminder:", "Reminders:", reminderCount ) +
889
tmpStr += "<td>" + reminderStringList( todo ).join( "<br>" ) + "</td>";
879
QLatin1String("</b></td>");
880
tmpStr += QLatin1String("<td>") + reminderStringList( todo ).join( QLatin1String("<br>") ) + QLatin1String("</td>");
881
tmpStr += QLatin1String("</tr>");
893
884
tmpStr += displayViewFormatAttendees( calendar, todo );
895
886
int categoryCount = todo->categories().count();
896
887
if ( categoryCount > 0 ) {
898
tmpStr += "<td><b>" +
888
tmpStr += QLatin1String("<tr>");
889
tmpStr += QLatin1String("<td><b>") +
899
890
i18np( "Category:", "Categories:", categoryCount ) +
901
tmpStr += "<td>" + displayViewFormatCategories( todo ) + "</td>";
891
QLatin1String("</b></td>");
892
tmpStr += QLatin1String("<td>") + displayViewFormatCategories( todo ) + QLatin1String("</td>");
893
tmpStr += QLatin1String("</tr>");
905
896
if ( todo->priority() > 0 ) {
907
tmpStr += "<td><b>" + i18n( "Priority:" ) + "</b></td>";
897
tmpStr += QLatin1String("<tr>");
898
tmpStr += QLatin1String("<td><b>") + i18n( "Priority:" ) + QLatin1String("</b></td>");
899
tmpStr += QLatin1String("<td>");
909
900
tmpStr += QString::number( todo->priority() );
901
tmpStr += QLatin1String("</td>");
902
tmpStr += QLatin1String("</tr>");
905
tmpStr += QLatin1String("<tr>");
915
906
if ( todo->isCompleted() ) {
916
tmpStr += "<td><b>" + i18nc( "Completed: date", "Completed:" ) + "</b></td>";
907
tmpStr += QLatin1String("<td><b>") + i18nc( "Completed: date", "Completed:" ) + QLatin1String("</b></td>");
908
tmpStr += QLatin1String("<td>");
918
909
tmpStr += Stringify::todoCompletedDateTime( todo );
920
tmpStr += "<td><b>" + i18n( "Percent Done:" ) + "</b></td>";
911
tmpStr += QLatin1String("<td><b>") + i18n( "Percent Done:" ) + QLatin1String("</b></td>");
912
tmpStr += QLatin1String("<td>");
922
913
tmpStr += i18n( "%1%", todo->percentComplete() );
915
tmpStr += QLatin1String("</td>");
916
tmpStr += QLatin1String("</tr>");
927
918
int attachmentCount = todo->attachments().count();
928
919
if ( attachmentCount > 0 ) {
930
tmpStr += "<td><b>" +
920
tmpStr += QLatin1String("<tr>");
921
tmpStr += QLatin1String("<td><b>") +
931
922
i18np( "Attachment:", "Attachments:", attachmentCount ) +
933
tmpStr += "<td>" + displayViewFormatAttachments( todo ) + "</td>";
923
QLatin1String("</b></td>");
924
tmpStr += QLatin1String("<td>") + displayViewFormatAttachments( todo ) + QLatin1String("</td>");
925
tmpStr += QLatin1String("</tr>");
936
tmpStr += "</table>";
927
tmpStr += QLatin1String("</table>");
938
tmpStr += "<p><em>" + displayViewFormatCreationDate( todo, spec ) + "</em>";
929
tmpStr += QLatin1String("<p><em>")+ displayViewFormatCreationDate( todo, spec ) + QLatin1String("</em>");
950
941
QString tmpStr = displayViewFormatHeader( journal );
953
tmpStr += "<col width=\"25%\"/>";
954
tmpStr += "<col width=\"75%\"/>";
943
tmpStr += QLatin1String("<table>");
944
tmpStr += QLatin1String("<col width=\"25%\"/>");
945
tmpStr += QLatin1String("<col width=\"75%\"/>");
956
947
const QString calStr = calendar ? resourceString( calendar, journal ) : sourceName;
957
948
if ( !calStr.isEmpty() ) {
959
tmpStr += "<td><b>" + i18n( "Calendar:" ) + "</b></td>";
960
tmpStr += "<td>" + calStr + "</td>";
949
tmpStr += QLatin1String("<tr>");
950
tmpStr += QLatin1String("<td><b>") + i18n( "Calendar:" ) + QLatin1String("</b></td>");
951
tmpStr += QLatin1String("<td>") + calStr + QLatin1String("</td>");
952
tmpStr += QLatin1String("</tr>");
965
tmpStr += "<td><b>" + i18n( "Date:" ) + "</b></td>";
955
tmpStr += QLatin1String("<tr>");
956
tmpStr += QLatin1String("<td><b>") + i18n( "Date:" ) + QLatin1String("</b></td>");
957
tmpStr += QLatin1String("<td>") +
967
958
dateToString( journal->dtStart(), false, spec ) +
959
QLatin1String("</td>");
960
tmpStr += QLatin1String("</tr>");
971
962
if ( !journal->description().isEmpty() ) {
973
tmpStr += "<td><b>" + i18n( "Description:" ) + "</b></td>";
974
tmpStr += "<td>" + journal->richDescription() + "</td>";
963
tmpStr += QLatin1String("<tr>");
964
tmpStr += QLatin1String("<td><b>") + i18n( "Description:" ) + QLatin1String("</b></td>");
965
tmpStr += QLatin1String("<td>") + journal->richDescription() + QLatin1String("</td>");
966
tmpStr += QLatin1String("</tr>");
978
969
int categoryCount = journal->categories().count();
979
970
if ( categoryCount > 0 ) {
981
tmpStr += "<td><b>" +
971
tmpStr += QLatin1String("<tr>");
972
tmpStr += QLatin1String("<td><b>") +
982
973
i18np( "Category:", "Categories:", categoryCount ) +
984
tmpStr += "<td>" + displayViewFormatCategories( journal ) + "</td>";
974
QLatin1String("</b></td>");
975
tmpStr += QLatin1String("<td>") + displayViewFormatCategories( journal ) + QLatin1String("</td>");
976
tmpStr += QLatin1String("</tr>");
988
tmpStr += "</table>";
979
tmpStr += QLatin1String("</table>");
990
tmpStr += "<p><em>" + displayViewFormatCreationDate( journal, spec ) + "</em>";
981
tmpStr += QLatin1String("<p><em>") + displayViewFormatCreationDate( journal, spec ) + QLatin1String("</em>");
1286
1277
// if 'value' has changed, then make a special print
1287
1278
QString color = diffColor();
1288
QString newtitle = "<font color=\"" + color + "\">" + title + "</font>";
1289
QString newvalue = "<font color=\"" + color + "\">" + value + "</font>" +
1291
"(<strike>" + oldvalue + "</strike>)";
1279
QString newtitle = QLatin1String("<font color=\"") + color + QLatin1String("\">") + title + QLatin1String("</font>");
1280
QString newvalue = QLatin1String("<font color=\"") + color + QLatin1String("\">") + value + QLatin1String("</font>") +
1281
QLatin1String(" " )+
1282
QLatin1String("(<strike>") + oldvalue + QLatin1String("</strike>");
1292
1283
return htmlRow( newtitle, newvalue );
1296
1287
static Attendee::Ptr findDelegatedFromMyAttendee( const Incidence::Ptr &incidence )
1298
// Return the first attendee that was delegated-from me
1289
// Return the first attendee that was delegated-from the user
1300
1291
Attendee::Ptr attendee;
1301
1292
if ( !incidence ) {
1302
1293
return attendee;
1305
KEMailSettings settings;
1306
QStringList profiles = settings.profiles();
1307
for ( QStringList::Iterator it=profiles.begin(); it != profiles.end(); ++it ) {
1308
settings.setProfile( *it );
1310
QString delegatorName, delegatorEmail;
1311
Attendee::List attendees = incidence->attendees();
1312
Attendee::List::ConstIterator it2;
1313
for ( it2 = attendees.constBegin(); it2 != attendees.constEnd(); ++it2 ) {
1314
Attendee::Ptr a = *it2;
1315
KPIMUtils::extractEmailAddressAndName( a->delegator(), delegatorEmail, delegatorName );
1316
if ( settings.getSetting( KEMailSettings::EmailAddress ) == delegatorEmail ) {
1296
QString delegatorName, delegatorEmail;
1297
Attendee::List attendees = incidence->attendees();
1298
Attendee::List::ConstIterator it;
1299
for ( it = attendees.constBegin(); it != attendees.constEnd(); ++it ) {
1300
Attendee::Ptr a = *it;
1301
KPIMUtils::extractEmailAddressAndName( a->delegator(), delegatorEmail, delegatorName );
1302
if ( thatIsMe( delegatorEmail ) ) {
1322
1308
return attendee;
1325
1311
static Attendee::Ptr findMyAttendee( const Incidence::Ptr &incidence )
1327
// Return the attendee for the incidence that is probably me
1313
// Return the attendee for the incidence that is probably the user
1329
1315
Attendee::Ptr attendee;
1330
1316
if ( !incidence ) {
1331
1317
return attendee;
1334
KEMailSettings settings;
1335
QStringList profiles = settings.profiles();
1336
for ( QStringList::Iterator it=profiles.begin(); it != profiles.end(); ++it ) {
1337
settings.setProfile( *it );
1339
Attendee::List attendees = incidence->attendees();
1340
Attendee::List::ConstIterator it2;
1341
for ( it2 = attendees.constBegin(); it2 != attendees.constEnd(); ++it2 ) {
1342
Attendee::Ptr a = *it2;
1343
if ( settings.getSetting( KEMailSettings::EmailAddress ) == a->email() ) {
1320
Attendee::List attendees = incidence->attendees();
1321
Attendee::List::ConstIterator it;
1322
for ( it = attendees.constBegin(); it != attendees.constEnd(); ++it ) {
1323
Attendee::Ptr a = *it;
1324
if ( thatIsMe( a->email() ) ) {
1349
1330
return attendee;
1539
1520
if ( noHtmlMode ) {
1540
1521
descr = cleanHtml( descr );
1542
descr = htmlAddTag( "p", descr );
1523
descr = htmlAddTag( QLatin1String("p"), descr );
1547
1528
if( !descr.isEmpty() ) {
1549
html += "<table border=\"0\" style=\"margin-top:4px;\">";
1550
html += "<tr><td><center>" +
1551
htmlAddTag( "u", i18n( "Description:" ) ) +
1552
"</center></td></tr>";
1553
html += "<tr><td>" + descr + "</td></tr>";
1529
html += QLatin1String("<p>");
1530
html += QLatin1String("<table border=\"0\" style=\"margin-top:4px;\">");
1531
html += QLatin1String("<tr><td><center>") +
1532
htmlAddTag( QLatin1String("u"), i18n( "Description:" ) ) +
1533
QLatin1String("</center></td></tr>");
1534
html += QLatin1String("<tr><td>") + descr + QLatin1String("</td></tr>");
1535
html += QLatin1String("</table>");
1557
1538
if ( !comments.isEmpty() ) {
1559
html += "<table border=\"0\" style=\"margin-top:4px;\">";
1560
html += "<tr><td><center>" +
1561
htmlAddTag( "u", i18n( "Comments:" ) ) +
1562
"</center></td></tr>";
1539
html += QLatin1String("<p>");
1540
html += QLatin1String("<table border=\"0\" style=\"margin-top:4px;\">");
1541
html += QLatin1String("<tr><td><center>") +
1542
htmlAddTag( QLatin1String("u"), i18n( "Comments:" ) ) +
1543
QLatin1String("</center></td></tr>");
1544
html += QLatin1String("<tr><td>");
1564
1545
if ( comments.count() > 1 ) {
1546
html += QLatin1String("<ul>");
1566
1547
for ( int i=0; i < comments.count(); ++i ) {
1567
html += "<li>" + comments[i] + "</li>";
1548
html += QLatin1String("<li>") + comments[i] + QLatin1String("</li>");
1550
html += QLatin1String("</ul>");
1571
1552
html += comments[0];
1573
html += "</td></tr>";
1554
html += QLatin1String("</td></tr>");
1555
html += QLatin1String("</table>");
2892
2873
if ( !rsvpReq && ( incidence && incidence->revision() == 0 ) ) {
2894
html += inviteButton( helper, "record", i18n( "Record" ) );
2875
html += inviteButton( helper, QLatin1String("record"), i18n( "Record" ) );
2896
2877
// Move to trash
2897
html += inviteButton( helper, "delete", i18n( "Move to Trash" ) );
2878
html += inviteButton( helper, QLatin1String("delete"), i18n( "Move to Trash" ) );
2902
html += inviteButton( helper, "accept",
2883
html += inviteButton( helper, QLatin1String("accept"),
2903
2884
i18nc( "accept invitation", "Accept" ) );
2906
html += inviteButton( helper, "accept_conditionally",
2887
html += inviteButton( helper, QLatin1String("accept_conditionally"),
2907
2888
i18nc( "Accept invitation conditionally", "Accept cond." ) );
2909
2890
// Counter proposal
2910
html += inviteButton( helper, "counter",
2891
html += inviteButton( helper, QLatin1String("counter"),
2911
2892
i18nc( "invitation counter proposal", "Counter proposal" ) );
2914
html += inviteButton( helper, "decline",
2895
html += inviteButton( helper, QLatin1String("decline"),
2915
2896
i18nc( "decline invitation", "Decline" ) );
2918
2899
if ( !rsvpRec || ( incidence && incidence->revision() > 0 ) ) {
2920
html += inviteButton( helper, "delegate",
2901
html += inviteButton( helper, QLatin1String("delegate"),
2921
2902
i18nc( "delegate inviation to another", "Delegate" ) );
2924
html += inviteButton( helper, "forward", i18nc( "forward request to another", "Forward" ) );
2905
html += inviteButton( helper, QLatin1String("forward"), i18nc( "forward request to another", "Forward" ) );
2926
2907
// Check calendar
2927
2908
if ( incidence && incidence->type() == Incidence::TypeEvent ) {
2928
html += inviteButton( helper, "check_calendar",
2909
html += inviteButton( helper, QLatin1String("check_calendar"),
2929
2910
i18nc( "look for scheduling conflicts", "Check my calendar" ) );
3446
3426
if ( event->isMultiDay() ) {
3447
3427
tmp = dateToString( startDt, true, mSpec );
3448
ret += "<br>" + i18nc( "Event start", "<i>From:</i> %1", tmp );
3428
ret += QLatin1String("<br>") + i18nc( "Event start", "<i>From:</i> %1", tmp );
3450
3430
tmp = dateToString( endDt, true, mSpec );
3451
ret += "<br>" + i18nc( "Event end","<i>To:</i> %1", tmp );
3431
ret += QLatin1String("<br>") + i18nc( "Event end","<i>To:</i> %1", tmp );
3435
ret += QLatin1String("<br>") +
3456
3436
i18n( "<i>Date:</i> %1", dateToString( startDt, false, mSpec ) );
3457
3437
if ( !event->allDay() ) {
3458
3438
const QString dtStartTime = timeToString( startDt, true, mSpec );
3459
3439
const QString dtEndTime = timeToString( endDt, true, mSpec );
3460
3440
if ( dtStartTime == dtEndTime ) {
3461
3441
// to prevent 'Time: 17:00 - 17:00'
3442
tmp = QLatin1String("<br>") +
3463
3443
i18nc( "time for event", "<i>Time:</i> %1",
3446
tmp = QLatin1String("<br>") +
3467
3447
i18nc( "time range for event",
3468
3448
"<i>Time:</i> %1 - %2",
3469
3449
dtStartTime, dtEndTime );
3718
3694
return QString();
3721
QString tmp = "<qt>";
3697
QString tmp = QLatin1String("<qt>");
3724
tmp += "<b>" + incidence->richSummary() + "</b>";
3700
tmp += QLatin1String("<b>") + incidence->richSummary() + QLatin1String("</b>");
3701
tmp += QLatin1String("<hr>");
3727
3703
QString calStr = mLocation;
3728
3704
if ( mCalendar ) {
3729
3705
calStr = resourceString( mCalendar, incidence );
3731
3707
if ( !calStr.isEmpty() ) {
3732
tmp += "<i>" + i18n( "Calendar:" ) + "</i>" + " ";
3708
tmp += QLatin1String("<i>") + i18n( "Calendar:" ) + QLatin1String("</i>") + QLatin1String(" ");
3736
3712
tmp += dtRangeText;
3738
3714
if ( !incidence->location().isEmpty() ) {
3740
tmp += "<i>" + i18n( "Location:" ) + "</i>" + " ";
3715
tmp += QLatin1String("<br>");
3716
tmp += QLatin1String("<i>") + i18n( "Location:" ) + QLatin1String("</i>") + QLatin1String(" ");
3741
3717
tmp += incidence->richLocation();
3744
3720
QString durStr = durationString( incidence );
3745
3721
if ( !durStr.isEmpty() ) {
3747
tmp += "<i>" + i18n( "Duration:" ) + "</i>" + " ";
3722
tmp += QLatin1String("<br>");
3723
tmp += QLatin1String("<i>") + i18n( "Duration:" ) + QLatin1String("</i>") + QLatin1String(" ");
3751
3727
if ( incidence->recurs() ) {
3753
tmp += "<i>" + i18n( "Recurrence:" ) + "</i>" + " ";
3728
tmp += QLatin1String("<br>");
3729
tmp += QLatin1String("<i>") + i18n( "Recurrence:" ) + QLatin1String("</i>") + QLatin1String(" ");
3754
3730
tmp += recurrenceString( incidence );
3757
3733
if ( incidence->hasRecurrenceId() ) {
3759
tmp += "<i>" + i18n( "Recurrence:" ) + "</i>" + " ";
3734
tmp += QLatin1String("<br>");
3735
tmp += QLatin1String("<i>") + i18n( "Recurrence:" ) + QLatin1String("</i>") + QLatin1String(" ");
3760
3736
tmp += i18n( "Exception" );
3766
3742
if ( desc.length() > maxDescLen ) {
3767
3743
desc = desc.left( maxDescLen ) + i18nc( "elipsis", "..." );
3769
desc = Qt::escape( desc ).replace( '\n', "<br>" );
3745
desc = Qt::escape( desc ).replace( QLatin1Char('\n'), QLatin1String("<br>") );
3771
3747
// TODO: truncate the description when it's rich text
3774
tmp += "<i>" + i18n( "Description:" ) + "</i>" + "<br>";
3749
tmp += QLatin1String("<hr>");
3750
tmp += QLatin1String("<i>") + i18n( "Description:" ) + QLatin1String("</i>") + QLatin1String("<br>");
3752
tmp += QLatin1String("<hr>");
3779
3755
int reminderCount = incidence->alarms().count();
3780
3756
if ( reminderCount > 0 && incidence->hasEnabledAlarms() ) {
3782
tmp += "<i>" + i18np( "Reminder:", "Reminders:", reminderCount ) + "</i>" + " ";
3783
tmp += reminderStringList( incidence ).join( ", " );
3757
tmp += QLatin1String("<br>");
3758
tmp += QLatin1String("<i>") + i18np( "Reminder:", "Reminders:", reminderCount ) + QLatin1String("</i>") + QLatin1String(" ");
3759
tmp += reminderStringList( incidence ).join( QLatin1String(", ") );
3762
tmp += QLatin1String("<br>");
3787
3763
tmp += tooltipFormatAttendees( mCalendar, incidence );
3789
3765
int categoryCount = incidence->categories().count();
3790
3766
if ( categoryCount > 0 ) {
3792
tmp += "<i>" + i18np( "Category:", "Categories:", categoryCount ) + "</i>" + " ";
3793
tmp += incidence->categories().join( ", " );
3767
tmp += QLatin1String("<br>");
3768
tmp += QLatin1String("<i>") + i18np( "Category:", "Categories:", categoryCount ) + QLatin1String("</i>") +QLatin1String( " ");
3769
tmp += incidence->categories().join( QLatin1String(", ") );
3772
tmp += QLatin1String("</qt>");