summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--korganizer/calendarview.cpp14
-rw-r--r--korganizer/koagendaview.cpp17
-rw-r--r--korganizer/koeventviewer.cpp7
-rw-r--r--korganizer/kolistview.cpp2
-rw-r--r--korganizer/komonthview.cpp3
-rw-r--r--korganizer/kowhatsnextview.cpp6
-rw-r--r--libkcal/icalformatimpl.cpp2
-rw-r--r--libkcal/incidence.cpp16
-rw-r--r--libkcal/kincidenceformatter.cpp12
-rw-r--r--libkcal/todo.cpp4
11 files changed, 74 insertions, 13 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index c85ca35..2d4cb74 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -504,781 +504,781 @@
504{ "Toggle FilterView","Filteransicht umschalten" }, 504{ "Toggle FilterView","Filteransicht umschalten" },
505{ "Prev. month","Vorheriger Monat" }, 505{ "Prev. month","Vorheriger Monat" },
506{ "Go backward","Gehe zurück" }, 506{ "Go backward","Gehe zurück" },
507{ "Go forward","Gehe weiter" }, 507{ "Go forward","Gehe weiter" },
508{ "Synchronize","Synchronisieren" }, 508{ "Synchronize","Synchronisieren" },
509{ "AgendaSize","Agendagröße" }, 509{ "AgendaSize","Agendagröße" },
510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
511{ "Import last file","Importiere letzte Datei" }, 511{ "Import last file","Importiere letzte Datei" },
512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
513{ "Load Calendar Backup","Lade Kalender Backup" }, 513{ "Load Calendar Backup","Lade Kalender Backup" },
514{ "Save Calendar Backup","Speichere Kalender Backup" }, 514{ "Save Calendar Backup","Speichere Kalender Backup" },
515{ "Export VCalendar","Exportiere VCalendar" }, 515{ "Export VCalendar","Exportiere VCalendar" },
516{ "Manage new categories...","Verwalte neue Kategorien..." }, 516{ "Manage new categories...","Verwalte neue Kategorien..." },
517{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 517{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
519{ "Remote via ssh","Über Netzwerk via ssh" }, 519{ "Remote via ssh","Über Netzwerk via ssh" },
520{ "With local file","Mit lokaler Datei" }, 520{ "With local file","Mit lokaler Datei" },
521{ "With last file","Mit letzter Datei" }, 521{ "With last file","Mit letzter Datei" },
522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
524{ "Save filename","Speichern: Dateinamen wählen" }, 524{ "Save filename","Speichern: Dateinamen wählen" },
525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
526{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 526{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
527{ "Overwrite!","Überschreibe!" }, 527{ "Overwrite!","Überschreibe!" },
528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" }, 529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" },
530{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 530{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
532{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 532{ "Deleting item %d ...","Lösche Eintrag %d ..." },
533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
534{ "Size","Größe" }, 534{ "Size","Größe" },
535{ "Date","Datum" }, 535{ "Date","Datum" },
536{ "Mime Type","Datei Typ" }, 536{ "Mime Type","Datei Typ" },
537{ "All Files","Alle Dateien" }, 537{ "All Files","Alle Dateien" },
538{ "Files","Dateien" }, 538{ "Files","Dateien" },
539{ "Documents","DoKumente" }, 539{ "Documents","DoKumente" },
540{ "Select Categories","Selektiere Kategorien" }, 540{ "Select Categories","Selektiere Kategorien" },
541{ " &Deselect All "," Auswahl aufheben " }, 541{ " &Deselect All "," Auswahl aufheben " },
542{ "A&dd","Hinzu" }, 542{ "A&dd","Hinzu" },
543{ "&Modify","Ändern" }, 543{ "&Modify","Ändern" },
544{ "Edit Categories","Editiere Kategorien" }, 544{ "Edit Categories","Editiere Kategorien" },
545{ " &Edit Categories "," &Editiere Kategorien " }, 545{ " &Edit Categories "," &Editiere Kategorien " },
546{ "Beam Options","Beam Einstellungen" }, 546{ "Beam Options","Beam Einstellungen" },
547{ " With timezone "," Mit Zeitzone " }, 547{ " With timezone "," Mit Zeitzone " },
548{ " Local time ", " Lokale Zeit " }, 548{ " Local time ", " Lokale Zeit " },
549{ "Manage new Categories","Verwalte neue Kategorien" }, 549{ "Manage new Categories","Verwalte neue Kategorien" },
550{ "Add to category list","Füge zur Kategorieliste hinzu" }, 550{ "Add to category list","Füge zur Kategorieliste hinzu" },
551{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 551{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
554{ "File format","Datei Format" }, 554{ "File format","Datei Format" },
555{ "Time format","Zeit Format" }, 555{ "Time format","Zeit Format" },
556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" }, 556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" },
557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
559{ "h","Std" }, 559{ "h","Std" },
560{ "min","Min" }, 560{ "min","Min" },
561{ "hou","Std" }, 561{ "hou","Std" },
562{ "day","Tag" }, 562{ "day","Tag" },
563{ "French","Französich" }, 563{ "French","Französich" },
564{ "Time","Zeit" }, 564{ "Time","Zeit" },
565{ "Event Viewer","Termin Ansicht" }, 565{ "Event Viewer","Termin Ansicht" },
566{ "Cancel Sync","Sync Abbrechen" }, 566{ "Cancel Sync","Sync Abbrechen" },
567{ "Remote","Fern" }, 567{ "Remote","Fern" },
568{ "Local","Lokal" }, 568{ "Local","Lokal" },
569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
570{ "Local: ","Lokal: " }, 570{ "Local: ","Lokal: " },
571{ "Remote: ","Fern: " }, 571{ "Remote: ","Fern: " },
572{ "Last modified: ","Zuletzt geändert: " }, 572{ "Last modified: ","Zuletzt geändert: " },
573{ "Location: ","Ort: " }, 573{ "Location: ","Ort: " },
574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
583{ "( %1 min before )","( %1 min vorher )" }, 583{ "( %1 min before )","( %1 min vorher )" },
584{ "<b>Alarm on: ","<b>Alarm am: " }, 584{ "<b>Alarm on: ","<b>Alarm am: " },
585{ "<b>Details: </b>","<b>Details: </b>" }, 585{ "<b>Details: </b>","<b>Details: </b>" },
586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
588{ "Organizer","Organisator" }, 588{ "Organizer","Organisator" },
589{ "Save","Speichern" }, 589{ "Save","Speichern" },
590{ "Exit (+save)","Beenden (+ speichern)" }, 590{ "Exit (+save)","Beenden (+ speichern)" },
591{ "Home","Zuhause" }, 591{ "Home","Zuhause" },
592{ "Office","Büro" }, 592{ "Office","Büro" },
593{ "Libary","Bücherei" }, 593{ "Libary","Bücherei" },
594{ "Doctor","Arzt" }, 594{ "Doctor","Arzt" },
595{ "Beach","Strand" }, 595{ "Beach","Strand" },
596{ "Conference room","Konferenzraum" }, 596{ "Conference room","Konferenzraum" },
597{ "Drive Home","Heimfahrt" }, 597{ "Drive Home","Heimfahrt" },
598{ "Watch TV","Tv gucken" }, 598{ "Watch TV","Tv gucken" },
599{ "Phone call","Telefonanruf" }, 599{ "Phone call","Telefonanruf" },
600{ "Pay bill","Rechnung bezahlen" }, 600{ "Pay bill","Rechnung bezahlen" },
601{ "Read book","Buch lesen" }, 601{ "Read book","Buch lesen" },
602{ "Watering plants","Pflanzen giessen" }, 602{ "Watering plants","Pflanzen giessen" },
603{"Appointment","Verabredung" }, 603{"Appointment","Verabredung" },
604{"Birthday","Geburtstag" }, 604{"Birthday","Geburtstag" },
605{"Business","Geschäft" }, 605{"Business","Geschäft" },
606{"Business Travel","Geschäftsreise" }, 606{"Business Travel","Geschäftsreise" },
607{"Cinema","Kino" }, 607{"Cinema","Kino" },
608{"Customer","Kunde" }, 608{"Customer","Kunde" },
609{"Break","Pause" }, 609{"Break","Pause" },
610{"Breakfast","Frühstück" }, 610{"Breakfast","Frühstück" },
611{"Competition","Wettkampf" }, 611{"Competition","Wettkampf" },
612{"Dinner","Abendessen" }, 612{"Dinner","Abendessen" },
613{"Education","Erziehung" }, 613{"Education","Erziehung" },
614{"Family","Familie" }, 614{"Family","Familie" },
615{"Favorites","Favoriten" }, 615{"Favorites","Favoriten" },
616{"Festival","Festival" }, 616{"Festival","Festival" },
617{"Fishing","Angeln" }, 617{"Fishing","Angeln" },
618{"Flight","Flug" }, 618{"Flight","Flug" },
619{"Gifts","Geschenk" }, 619{"Gifts","Geschenk" },
620{"Holiday","Feiertag" }, 620{"Holiday","Feiertag" },
621{"Holiday Cards","Ansichtskarten" }, 621{"Holiday Cards","Ansichtskarten" },
622{"Hot Contacts","Heisse Kontakte" }, 622{"Hot Contacts","Heisse Kontakte" },
623{"Hiking","Wandern" }, 623{"Hiking","Wandern" },
624{"Hunting","Jagen" }, 624{"Hunting","Jagen" },
625{"Key Customer","Wichtiger Kunde" }, 625{"Key Customer","Wichtiger Kunde" },
626{"Kids","Kinder" }, 626{"Kids","Kinder" },
627{"Lunch","Mittagessen" }, 627{"Lunch","Mittagessen" },
628{"Meeting","Treffen" }, 628{"Meeting","Treffen" },
629{"Miscellaneous","Verschiedenes" }, 629{"Miscellaneous","Verschiedenes" },
630{"Partner","Partner" }, 630{"Partner","Partner" },
631{"Party","Partie" }, 631{"Party","Partie" },
632{"Personal","Privat" }, 632{"Personal","Privat" },
633{"Personal Travel","Privatreise"}, 633{"Personal Travel","Privatreise"},
634{"PHB","PHB" }, 634{"PHB","PHB" },
635{"Phone Calls","Telefonanruf" }, 635{"Phone Calls","Telefonanruf" },
636{"Projects","Projekt" }, 636{"Projects","Projekt" },
637{"Recurring","Wiederholend" }, 637{"Recurring","Wiederholend" },
638{"School","Schule" }, 638{"School","Schule" },
639{"Shopping","Einkaufen" }, 639{"Shopping","Einkaufen" },
640{"Speach","Rede" }, 640{"Speach","Rede" },
641{"Special Occasion","Spez.Gelegenheit" }, 641{"Special Occasion","Spez.Gelegenheit" },
642{"Sports","Sport" }, 642{"Sports","Sport" },
643{"Talk","Vortrag" }, 643{"Talk","Vortrag" },
644{"Travel","Reise" }, 644{"Travel","Reise" },
645{"TV","TV" }, 645{"TV","TV" },
646{"Germany","Deutschland" }, 646{"Germany","Deutschland" },
647{"Sweden","Schweden" }, 647{"Sweden","Schweden" },
648{"Forest","Wald" }, 648{"Forest","Wald" },
649{ "Desert","Wüste" }, 649{ "Desert","Wüste" },
650{ "Kitchen","Küche" }, 650{ "Kitchen","Küche" },
651{ "Lake","See" }, 651{ "Lake","See" },
652{"University","Universität"}, 652{"University","Universität"},
653{"Vacation","Urlaub" }, 653{"Vacation","Urlaub" },
654{"VIP","VIP" }, 654{"VIP","VIP" },
655{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 655{ "Import Sharp Calendar","Importiere Sharp Kalender" },
656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
658{ "Cancelled","Gecancelt" }, 658{ "Cancelled","Gecancelt" },
659{ "Multiple sync","Mehrfach Sync" }, 659{ "Multiple sync","Mehrfach Sync" },
660{ "Local file","Lokale Datei" }, 660{ "Local file","Lokale Datei" },
661{ "Last file","Letzte Datei" }, 661{ "Last file","Letzte Datei" },
662{ "Keys + Colors...","Tasten + Farben..." }, 662{ "Keys + Colors...","Tasten + Farben..." },
663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
665{ "Choose...","Wähle..." }, 665{ "Choose...","Wähle..." },
666{ "Use colors for application:","Setze Farben für Programm:" }, 666{ "Use colors for application:","Setze Farben für Programm:" },
667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." }, 669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." },
670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." }, 670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." },
671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
672{ "Show in every cell ","Zeige in jeder Zelle " }, 672{ "Show in every cell ","Zeige in jeder Zelle " },
673{ "short month","kurzen Monat" }, 673{ "short month","kurzen Monat" },
674{ "icons","Icons" }, 674{ "icons","Icons" },
675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
676{ "Categorie colors are applied to text","Kategorie Farben färben Text" }, 676{ "Categorie colors are applied to text","Kategorie Farben färben Text" },
677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
678{ "Day color odd months","Tagesfarbe ungerade Monate" }, 678{ "Day color odd months","Tagesfarbe ungerade Monate" },
679{ "Day color even months","Tagesfarbe gerade Monate" }, 679{ "Day color even months","Tagesfarbe gerade Monate" },
680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
683{ "Colors are applied to text","Farben werden auf Text angewendet" }, 683{ "Colors are applied to text","Farben werden auf Text angewendet" },
684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
686{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 686{ "Play beeps count:","Anzahl der Alarmpiepse: " },
687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
688{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 688{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
689{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 689{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
691{ "New profile","Neues Profil" }, 691{ "New profile","Neues Profil" },
692{ "Clone profile","Klone Profil" }, 692{ "Clone profile","Klone Profil" },
693{ "Delete profile","Lösche Profil" }, 693{ "Delete profile","Lösche Profil" },
694{ "Profile:","Profil:" }, 694{ "Profile:","Profil:" },
695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
699{ "Write back file","Schreibe Datei zurück" }, 699{ "Write back file","Schreibe Datei zurück" },
700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
702{ "Local device name:","Name dieses Gerätes:" }, 702{ "Local device name:","Name dieses Gerätes:" },
703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
704{ "Sync preferences","Synchronisations Einstellungen" }, 704{ "Sync preferences","Synchronisations Einstellungen" },
705{ "Profile kind","Profil Art" }, 705{ "Profile kind","Profil Art" },
706{ "Local file","Lokale Datei" }, 706{ "Local file","Lokale Datei" },
707{ "Local file:","Lokale Datei:" }, 707{ "Local file:","Lokale Datei:" },
708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
709{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 709{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
712{ "Device","Gerät:" }, 712{ "Device","Gerät:" },
713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
715{ "Synchronization successful","Synchronisation erfolgreich" }, 715{ "Synchronization successful","Synchronisation erfolgreich" },
716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
719{ "Enter password","Passwort eingeben" }, 719{ "Enter password","Passwort eingeben" },
720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
725{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 725{ "Edit Calendar Filters","Editiere Kalendar Filter" },
726{ "Enter filter name:","Neuer Filter Name:" }, 726{ "Enter filter name:","Neuer Filter Name:" },
727{ "Add Filter","Filter hinzufügen" }, 727{ "Add Filter","Filter hinzufügen" },
728{ "Question","Frage" }, 728{ "Question","Frage" },
729{ "Filter position: ","Filter Position: " }, 729{ "Filter position: ","Filter Position: " },
730{ "Month View","Monatsansicht" }, 730{ "Month View","Monatsansicht" },
731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
732{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 732{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
735{ "Access: ","Zugriff: " }, 735{ "Access: ","Zugriff: " },
736{ "Needs Action","Aktion notwendig" }, 736{ "Needs Action","Aktion notwendig" },
737{ "Accepted","Akzeptiert" }, 737{ "Accepted","Akzeptiert" },
738{ "Declined","Abgelehnt" }, 738{ "Declined","Abgelehnt" },
739{ "Tentative","Vorläufig" }, 739{ "Tentative","Vorläufig" },
740{ "Delegated","Beauftragt" }, 740{ "Delegated","Beauftragt" },
741{ "Completed","Vollständig" }, 741{ "Completed","Vollständig" },
742{ "In Process","In Bearbeitung" }, 742{ "In Process","In Bearbeitung" },
743{ "Participant","Teilnehmer" }, 743{ "Participant","Teilnehmer" },
744{ "Optional Participant","Möglicher Teilnehmer" }, 744{ "Optional Participant","Möglicher Teilnehmer" },
745{ "Observer","Beobachter" }, 745{ "Observer","Beobachter" },
746{ "Chair","Vorsitzender" }, 746{ "Chair","Vorsitzender" },
747{ "Not supported \non desktop!\n","" }, 747{ "Not supported \non desktop!\n","" },
748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " }, 748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " },
749{ "Date range: ","Datums Zeitspanne: " }, 749{ "Date range: ","Datums Zeitspanne: " },
750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
752{ "Add / remove events","Add./entferne Termine" }, 752{ "Add / remove events","Add./entferne Termine" },
753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
756{ "Overwrite","Überschreiben" }, 756{ "Overwrite","Überschreiben" },
757{ "Sync+save","Syncen+speichern" }, 757{ "Sync+save","Syncen+speichern" },
758{ "Default","Standard" }, 758{ "Default","Standard" },
759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
760{ " %d items?"," %d Einträge?" }, 760{ " %d items?"," %d Einträge?" },
761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
763{ "Current","Aktuelle" }, 763{ "Current","Aktuelle" },
764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
765{ "All","Alle" }, 765{ "All","Alle" },
766{ "Data Loss Warning","Datenverlust Warnung" }, 766{ "Data Loss Warning","Datenverlust Warnung" },
767{ "Proceed","Weitermachen" }, 767{ "Proceed","Weitermachen" },
768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
769{ "Filter disabled ","Filter abgeschaltet" }, 769{ "Filter disabled ","Filter abgeschaltet" },
770{ "Filter selected: ","Gewählter Filter: " }, 770{ "Filter selected: ","Gewählter Filter: " },
771{ "Toggle Cancel","Gecancelt ändern" }, 771{ "Toggle Cancel","Gecancelt ändern" },
772{ "&Toggle Cancel","Gecancel&t ändern" }, 772{ "&Toggle Cancel","Gecancel&t ändern" },
773{ "Configure Toolbar","Konfiguriere Toolbar" }, 773{ "Configure Toolbar","Konfiguriere Toolbar" },
774{ "Stretched TB","Gedehnte TB" }, 774{ "Stretched TB","Gedehnte TB" },
775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
779{ "Imported file successfully","Datei erfolgreich importiert" }, 779{ "Imported file successfully","Datei erfolgreich importiert" },
780{ "Error importing file","Fehler beim Importieren der Datei" }, 780{ "Error importing file","Fehler beim Importieren der Datei" },
781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
783{ "Overwrite!","Überschreiben!" }, 783{ "Overwrite!","Überschreiben!" },
784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
785{ "Load backup filename","Lade Backup Dateiname" }, 785{ "Load backup filename","Lade Backup Dateiname" },
786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
788{ "Save backup filename","Speichere Backup Dateiname" }, 788{ "Save backup filename","Speichere Backup Dateiname" },
789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
791{ "Details of attendee","Teilnehmerdetails" }, 791{ "Details of attendee","Teilnehmerdetails" },
792{ "Work phone:\n","Telefon Arbeit:\n" }, 792{ "Work phone:\n","Telefon Arbeit:\n" },
793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
794{ "Home phone:\n","Telefon privat:\n" }, 794{ "Home phone:\n","Telefon privat:\n" },
795{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 795{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
796{ "Email:\n","Email:\n" }, 796{ "Email:\n","Email:\n" },
797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
798{ "Audio Al.: ","Audio Al.: " }, 798{ "Audio Al.: ","Audio Al.: " },
799{ "Proc.Al.: ","Proz.Al.: " }, 799{ "Proc.Al.: ","Proz.Al.: " },
800{ "No sound set","Kein Sound definiert" }, 800{ "No sound set","Kein Sound definiert" },
801{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 801{ "*.wav|Wav Files","*.wav|Wav Dateien" },
802{ "No program set","Kein Programm definiert" }, 802{ "No program set","Kein Programm definiert" },
803{ "Running '%1'","Ausführen '%1'" }, 803{ "Running '%1'","Ausführen '%1'" },
804{ "Playing '%1'","Abspielen '%1'" }, 804{ "Playing '%1'","Abspielen '%1'" },
805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
807{ "Load!","Laden!" }, 807{ "Load!","Laden!" },
808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
812{ "Features + hints...","Eigenschaften + Tipps..." }, 812{ "Features + hints...","Eigenschaften + Tipps..." },
813{ "User translation...","Benutzer Übersetzung..." }, 813{ "User translation...","Benutzer Übersetzung..." },
814{ "Sync HowTo...","Synchronisation HowTo..." }, 814{ "Sync HowTo...","Synchronisation HowTo..." },
815{ "Print calendar...","Drucke Kalender..." }, 815{ "Print calendar...","Drucke Kalender..." },
816{ "Anniversary","Jahrestag" }, 816{ "Anniversary","Jahrestag" },
817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
821{ "<b>Access: </b>","<b>Zugriff: </b>" }, 821{ "<b>Access: </b>","<b>Zugriff: </b>" },
822{ "(%1 min before)","(%1 min vorher)" }, 822{ "(%1 min before)","(%1 min vorher)" },
823{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 823{ "<b>Categories: </b>","<b>Kategorien: </b>" },
824{ "Save Journal/Description...","Speichere Journal/Details..." }, 824{ "Save Journal/Description...","Speichere Journal/Details..." },
825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
826{ "Continue","Weitermachen" }, 826{ "Continue","Weitermachen" },
827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
828{ "Attendee:","Teilnehmer:" }, 828{ "Attendee:","Teilnehmer:" },
829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
830{ "On day ","Am Tag " }, 830{ "On day ","Am Tag " },
831{ "%1 of ","%1 des Monats" }, 831{ "%1 of ","%1 des Monats" },
832{ "%1 of the year","%1 des Jahres" }, 832{ "%1 of the year","%1 des Jahres" },
833{ "Anonymous","Anonymo" }, 833{ "Anonymous","Anonymo" },
834{ "nobody@nowhere","niemand@nirgendwo" }, 834{ "nobody@nowhere","niemand@nirgendwo" },
835{ "calendar.html","calendar.html" }, 835{ "calendar.html","calendar.html" },
836{ " Local Time"," Locale Zeit" }, 836{ " Local Time"," Locale Zeit" },
837{ "Unknown Name","Unbekannter Name" }, 837{ "Unknown Name","Unbekannter Name" },
838{ "unknown@nowhere","unbekannt@nirgendwo" }, 838{ "unknown@nowhere","unbekannt@nirgendwo" },
839{ "Beam via IR!","Beam via IR!" }, 839{ "Beam via IR!","Beam via IR!" },
840{ "Next Month","Nächster Monat" }, 840{ "Next Month","Nächster Monat" },
841{ "Prio","Prio" }, 841{ "Prio","Prio" },
842{ "Reparent Todo","Mache Sub-Todo" }, 842{ "Reparent Todo","Mache Sub-Todo" },
843{ "tomorrow","morgen" }, 843{ "tomorrow","morgen" },
844{ "today","heute" }, 844{ "today","heute" },
845{ "yesterday","gestern" }, 845{ "yesterday","gestern" },
846{ "Ok","Ok" }, 846{ "Ok","Ok" },
847{ "Ok+Agenda","Ok+Agenda" }, 847{ "Ok+Agenda","Ok+Agenda" },
848{ "Email","Email" }, 848{ "Email","Email" },
849{ "RSVP","RSVP" }, 849{ "RSVP","RSVP" },
850{ "Email:","Email:" }, 850{ "Email:","Email:" },
851{ "Appointment Time ","Termin Zeit " }, 851{ "Appointment Time ","Termin Zeit " },
852{ "2","2" }, 852{ "2","2" },
853{ "3","3" }, 853{ "3","3" },
854{ "4","4" }, 854{ "4","4" },
855{ " 0 %"," 0 %" }, 855{ " 0 %"," 0 %" },
856{ " 20 %"," 20 %" }, 856{ " 20 %"," 20 %" },
857{ " 40 %"," 40 %" }, 857{ " 40 %"," 40 %" },
858{ " 60 %"," 60 %" }, 858{ " 60 %"," 60 %" },
859{ " 80 %"," 80 %" }, 859{ " 80 %"," 80 %" },
860{ "100 %","100 %" }, 860{ "100 %","100 %" },
861{ "Filter","Filter" }, 861{ "Filter","Filter" },
862{ "Configure","Konfiguriere" }, 862{ "Configure","Konfiguriere" },
863{ "What's Next","What's Next" }, 863{ "What's Next","What's Next" },
864{ "Complete calendar...","Kompletten Kalender..." }, 864{ "Complete calendar...","Kompletten Kalender..." },
865{ "Filtered calendar...","Gefilterten Kalender..." }, 865{ "Filtered calendar...","Gefilterten Kalender..." },
866{ "Export to phone","Exportiere zum Handy" }, 866{ "Export to phone","Exportiere zum Handy" },
867{ "Beam receive enabled","Beam Empfang an" }, 867{ "Beam receive enabled","Beam Empfang an" },
868{ "What's new?","Was ist neu?" }, 868{ "What's new?","Was ist neu?" },
869{ "FAQ...","FAQ..." }, 869{ "FAQ...","FAQ..." },
870{ "Licence...","Licence..." }, 870{ "Licence...","Licence..." },
871{ "What's This?","What's This?" }, 871{ "What's This?","What's This?" },
872{ "&Edit...","&Editiere..." }, 872{ "&Edit...","&Editiere..." },
873{ "Oktober","Oktober" }, 873{ "Oktober","Oktober" },
874{ "Title","Titel" }, 874{ "Title","Titel" },
875{ "%1 %","%1 %" }, 875{ "%1 %","%1 %" },
876{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 876{ "Enable Pi-Sync","Schalte Pi-Sync an" },
877{ "Import!","Importiere!" }, 877{ "Import!","Importiere!" },
878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
879{ "Export to phone options","Export ans Handy Optionen" }, 879{ "Export to phone options","Export ans Handy Optionen" },
880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
881{ "I/O device: ","I/O device: " }, 881{ "I/O device: ","I/O device: " },
882{ "Connection: ","Connection: " }, 882{ "Connection: ","Connection: " },
883{ "Model(opt.): ","Model(opt.): " }, 883{ "Model(opt.): ","Model(opt.): " },
884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
887{ "Export to mobile phone!","Exportiere auf das Handy!" }, 887{ "Export to mobile phone!","Exportiere auf das Handy!" },
888{ "Export complete calendar","Exportiere kompletten Kalender" }, 888{ "Export complete calendar","Exportiere kompletten Kalender" },
889{ "Writing to phone...","Sende Daten ans Handy..." }, 889{ "Writing to phone...","Sende Daten ans Handy..." },
890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
891{ "Retry","Nochmal versuchen" }, 891{ "Retry","Nochmal versuchen" },
892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
895{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 895{ "Export filtered calendar","Exportiere gefilterten Kalender" },
896{ "Preferences","Vorlieben" }, 896{ "Preferences","Vorlieben" },
897{ "Global","Global" }, 897{ "Global","Global" },
898{ "Phone","Phone" }, 898{ "Phone","Phone" },
899{ "SMS","SMS" }, 899{ "SMS","SMS" },
900{ "Fax","Fax" }, 900{ "Fax","Fax" },
901{ "Pager","Pager" }, 901{ "Pager","Pager" },
902{ "SIP","SIP" }, 902{ "SIP","SIP" },
903{ "Italian","Italienisch" }, 903{ "Italian","Italienisch" },
904{ "24:00","24:00" }, 904{ "24:00","24:00" },
905{ "12:00am","12:00am" }, 905{ "12:00am","12:00am" },
906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
912{ "Used Mail Client","Benutzter Mail Client" }, 912{ "Used Mail Client","Benutzter Mail Client" },
913{ "Channel:","Channel:" }, 913{ "Channel:","Channel:" },
914{ "Message:","Message:" }, 914{ "Message:","Message:" },
915{ "Parameters:","Parameter:" }, 915{ "Parameters:","Parameter:" },
916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
917{ "extra Message:","extra Message:" }, 917{ "extra Message:","extra Message:" },
918{ "extra Parameters:","extra Parameter:" }, 918{ "extra Parameters:","extra Parameter:" },
919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
920{ "External Apps.","Externe Appl." }, 920{ "External Apps.","Externe Appl." },
921{ "24 hours","24 Std." }, 921{ "24 hours","24 Std." },
922{ "3 hours","3 Std." }, 922{ "3 hours","3 Std." },
923{ "1 hour","1 Std." }, 923{ "1 hour","1 Std." },
924{ "15 minutes","15 Min." }, 924{ "15 minutes","15 Min." },
925{ "5 minutes","5 Min." }, 925{ "5 minutes","5 Min." },
926{ "1 minute","1 Min." }, 926{ "1 minute","1 Min." },
927{ "23","23" }, 927{ "23","23" },
928{ "Mon 15","Mon 15" }, 928{ "Mon 15","Mon 15" },
929{ "Configure KO","Konfiguriere KO" }, 929{ "Configure KO","Konfiguriere KO" },
930{ "Event text","Termin Text" }, 930{ "Event text","Termin Text" },
931{ "ToDo","ToDo" }, 931{ "ToDo","ToDo" },
932{ "Today","Heute" }, 932{ "Today","Heute" },
933{ "What's Next View","What's Next Ansicht" }, 933{ "What's Next View","What's Next Ansicht" },
934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, 934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" },
935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, 935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" },
936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
937{ "Alarm","Alarm" }, 937{ "Alarm","Alarm" },
938{ "Used %1 Client","Benutzter %1 Client" }, 938{ "Used %1 Client","Benutzter %1 Client" },
939{ "No email client installed","Kein Email Klient installiert" }, 939{ "No email client installed","Kein Email Klient installiert" },
940{ "Userdefined email client","Benutzerdef. Email Klient" }, 940{ "Userdefined email client","Benutzerdef. Email Klient" },
941{ "OM/Pi email client","OM/Pi Email Klient" }, 941{ "OM/Pi email client","OM/Pi Email Klient" },
942{ "Include in multiple ","Beziehe in multiple " }, 942{ "Include in multiple ","Beziehe in multiple " },
943{ "calendar ","Kalender " }, 943{ "calendar ","Kalender " },
944{ "addressbook ","Adressbuch " }, 944{ "addressbook ","Adressbuch " },
945{ "pwmanager","PWmanager" }, 945{ "pwmanager","PWmanager" },
946{ " sync"," Sync ein" }, 946{ " sync"," Sync ein" },
947{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 947{ "Write back synced data","Schreibe gesyncte Daten zurück" },
948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
953{ "Help...","Hilfe..." }, 953{ "Help...","Hilfe..." },
954{ "Local file Cal:","Lokale Datei Kal:" }, 954{ "Local file Cal:","Lokale Datei Kal:" },
955{ "Local file ABook:","Lokale Datei ABuch:" }, 955{ "Local file ABook:","Lokale Datei ABuch:" },
956{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 956{ "Local file PWMgr:","Lokale Datei PWMgr:" },
957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
958{ "Calendar:","Kalender:" }, 958{ "Calendar:","Kalender:" },
959{ "AddressBook:","AdressBuch:" }, 959{ "AddressBook:","AdressBuch:" },
960{ "PWManager:","PWManager:" }, 960{ "PWManager:","PWManager:" },
961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
962{ "ssh/scp","ssh/scp" }, 962{ "ssh/scp","ssh/scp" },
963{ "ftp","ftp" }, 963{ "ftp","ftp" },
964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
970{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 970{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
973{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 973{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
978{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 978{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
980{ "KDE-Pim Sync","KDE-Pim Sync" }, 980{ "KDE-Pim Sync","KDE-Pim Sync" },
981{ "Multiple profiles","Multi-Sync Profile" }, 981{ "Multiple profiles","Multi-Sync Profile" },
982{ "Device: ","Gerät: " }, 982{ "Device: ","Gerät: " },
983{ "Multiple sync started.","Multi-Sync gestartet." }, 983{ "Multiple sync started.","Multi-Sync gestartet." },
984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
985{ "Turn filter on","Schalte Filter an" }, 985{ "Turn filter on","Schalte Filter an" },
986{ "Turn filter off","Schalte Filter aus" }, 986{ "Turn filter off","Schalte Filter aus" },
987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" }, 1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" },
1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" }, 1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" },
1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" }, 1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" },
1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " }, 1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " },
1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, 1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" },
1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" }, 1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" },
1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1046{ "KO/Pi FAQ","KO/Pi FAQ" }, 1046{ "KO/Pi FAQ","KO/Pi FAQ" },
1047{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1047{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1048{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1048{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1049{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1049{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1050{ "From: ","Von: " }, 1050{ "From: ","Von: " },
1051{ "Remove sync info","Entferne Sync Info" }, 1051{ "Remove sync info","Entferne Sync Info" },
1052{ "For all profiles","Für alle Profile" }, 1052{ "For all profiles","Für alle Profile" },
1053{ "Hide not Running","Verstecke nicht Laufende" }, 1053{ "Hide not Running","Verstecke nicht Laufende" },
1054{ "ME","ME" }, 1054{ "ME","ME" },
1055{ "Toolbar","Toolbar" }, 1055{ "Toolbar","Toolbar" },
1056{ "Undo Delete...","Löschen rückgängig machen..." }, 1056{ "Undo Delete...","Löschen rückgängig machen..." },
1057{ "Undo Delete","Löschen rückgängig machen" }, 1057{ "Undo Delete","Löschen rückgängig machen" },
1058{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1058{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1059{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1059{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1060{ "Januar","Januar" }, 1060{ "Januar","Januar" },
1061{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1061{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1062{ "No Filter","Kein Filter" }, 1062{ "No Filter","Kein Filter" },
1063{ "Multiple Sync options","Multi Sync Optionen" }, 1063{ "Multiple Sync options","Multi Sync Optionen" },
1064{ "Sync algo options","Sync Ablauf Optionen" }, 1064{ "Sync algo options","Sync Ablauf Optionen" },
1065{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1065{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1066{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1066{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1067{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1067{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1068{ "Write back options","Optionen zum Zurückschreiben" }, 1068{ "Write back options","Optionen zum Zurückschreiben" },
1069{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1069{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1070{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1070{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1071{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1071{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1072{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1072{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1073{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1073{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1074{ "Time period","Zeitspanne" }, 1074{ "Time period","Zeitspanne" },
1075{ "From ","Von " }, 1075{ "From ","Von " },
1076{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1076{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1077{ " weeks in the future "," Wochen in der Zukunft " }, 1077{ " weeks in the future "," Wochen in der Zukunft " },
1078{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1078{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1079{ "Local temp file:","Lokale temp Datei:" }, 1079{ "Local temp file:","Lokale temp Datei:" },
1080{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1080{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1081{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1081{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1082{ "Language","Sprache" }, 1082{ "Language","Sprache" },
1083{ "Time Format","Zeit Format" }, 1083{ "Time Format","Zeit Format" },
1084{ "Time Zone","Zeit Zone" }, 1084{ "Time Zone","Zeit Zone" },
1085{ "%1 groups subscribed","%1 Guppen abboniert" }, 1085{ "%1 groups subscribed","%1 Guppen abboniert" },
1086{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1086{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1087{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1087{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1088{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1088{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1089{ "Save settings","Speichere Einstellungen" }, 1089{ "Save settings","Speichere Einstellungen" },
1090{ "Save standard","Speichere Standard" }, 1090{ "Save standard","Speichere Standard" },
1091{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1091{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1092{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1092{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1093{ "Data storage path","Daten Speicherpfad" }, 1093{ "Data storage path","Daten Speicherpfad" },
1094{ "Language","Sprache" }, 1094{ "Language","Sprache" },
1095{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1095{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1096{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1096{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1097{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1097{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1098{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1098{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1099{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1099{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1100{ "KO/Pi","KO/Pi" }, 1100{ "KO/Pi","KO/Pi" },
1101{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1101{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1102{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1102{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1103{ "Sound.Al.: ","Sound.Al.: " }, 1103{ "Sound.Al.: ","Sound.Al.: " },
1104{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1104{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1105{ "Restore","Wiederherstellen" }, 1105{ "Restore","Wiederherstellen" },
1106{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1106{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1107{ "% completed","% komplett" }, 1107{ "% completed","% komplett" },
1108{ "%d item(s) found.","%d Item(s) gefunden." }, 1108{ "%d item(s) found.","%d Item(s) gefunden." },
1109{ "Set complete","Setze auf erledigt" }, 1109{ "Set complete","Setze auf erledigt" },
1110{ "(cancelled)","(gecancelt)" }, 1110{ "(cancelled)","(gecancelt)" },
1111{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1111{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1112{ " Local time "," Locale Zeit " }, 1112{ " Local time "," Locale Zeit " },
1113{ "Form2","Form2" }, 1113{ "Form2","Form2" },
1114{ "Filter enabled","Filter angeschaltet" }, 1114{ "Filter enabled","Filter angeschaltet" },
1115{ "Edit Filters","Ändere Filter" }, 1115{ "Edit Filters","Ändere Filter" },
1116{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1116{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1117{ "Agenda","Agenda" }, 1117{ "Agenda","Agenda" },
1118{ " ("," (" }, 1118{ " ("," (" },
1119{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1119{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1120{ "Print","Print" }, 1120{ "Print","Print" },
1121{ "&Setup Printer...","Drucker &Setup..." }, 1121{ "&Setup Printer...","Drucker &Setup..." },
1122{ "View Type","Zeige Typ" }, 1122{ "View Type","Zeige Typ" },
1123{ "Page &orientation:","Seiten Ausrichtung:" }, 1123{ "Page &orientation:","Seiten Ausrichtung:" },
1124{ "Use Default of Selected Style","Default des selektierten Stils" }, 1124{ "Use Default of Selected Style","Default des selektierten Stils" },
1125{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1125{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1126{ "Portrait","Portrait" }, 1126{ "Portrait","Portrait" },
1127{ "Landscape","Landschaft" }, 1127{ "Landscape","Landschaft" },
1128{ "Print day","Drucke Tag" }, 1128{ "Print day","Drucke Tag" },
1129{ "CalPrintDay_Base","CalPrintDay_Base" }, 1129{ "CalPrintDay_Base","CalPrintDay_Base" },
1130{ "Date && Time Range","Datum && Zeitspanne" }, 1130{ "Date && Time Range","Datum && Zeitspanne" },
1131{ "&End date:","&Enddatum:" }, 1131{ "&End date:","&Enddatum:" },
1132{ "&Start date:","&Startdatum:" }, 1132{ "&Start date:","&Startdatum:" },
1133{ "Start &time:","Startzeit:" }, 1133{ "Start &time:","Startzeit:" },
1134{ "End ti&me:","Endzeit:" }, 1134{ "End ti&me:","Endzeit:" },
1135{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1135{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1136{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1136{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1137{ "Alt+D","Alt+D" }, 1137{ "Alt+D","Alt+D" },
1138{ "&Use colors","Nutze Farben" }, 1138{ "&Use colors","Nutze Farben" },
1139{ "Alt+U","Alt+U" }, 1139{ "Alt+U","Alt+U" },
1140{ "Print week","Drucke Woche" }, 1140{ "Print week","Drucke Woche" },
1141{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1141{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1142{ "Use &colors","Nutze Farben" }, 1142{ "Use &colors","Nutze Farben" },
1143{ "Type of View","Typ der Ansicht" }, 1143{ "Type of View","Typ der Ansicht" },
1144{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1144{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1145{ "Alt+F","Alt+F" }, 1145{ "Alt+F","Alt+F" },
1146{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1146{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1147{ "Alt+T","Alt+T" }, 1147{ "Alt+T","Alt+T" },
1148{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1148{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1149{ "Print month","Drucke Monat" }, 1149{ "Print month","Drucke Monat" },
1150{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1150{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1151{ "&Start month:","&Startmonat:" }, 1151{ "&Start month:","&Startmonat:" },
1152{ "&End month:","&Endmonat:" }, 1152{ "&End month:","&Endmonat:" },
1153{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1153{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1154{ "Print todos","Drucke Todos" }, 1154{ "Print todos","Drucke Todos" },
1155{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1155{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1156{ "Include &description of the item","Inclusive Itembeschreibung" }, 1156{ "Include &description of the item","Inclusive Itembeschreibung" },
1157{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1157{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1158{ "Include &priority of the item","Inclusive Priorität des Items" }, 1158{ "Include &priority of the item","Inclusive Priorität des Items" },
1159{ "Items to Print","Zu druckende Items" }, 1159{ "Items to Print","Zu druckende Items" },
1160{ "&From:","Von:" }, 1160{ "&From:","Von:" },
1161{ "&To:","Bis:" }, 1161{ "&To:","Bis:" },
1162{ "Print &all todo items","Drucke alle Todo Items" }, 1162{ "Print &all todo items","Drucke alle Todo Items" },
1163{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1163{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1164{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1164{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1165{ "Todo List","Todo Liste" }, 1165{ "Todo List","Todo Liste" },
1166{ "&Title:","&Titel:" }, 1166{ "&Title:","&Titel:" },
1167{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1167{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1168{ "Todo list","Todo Liste" }, 1168{ "Todo list","Todo Liste" },
1169{ "&Print...","Drucke..." }, 1169{ "&Print...","Drucke..." },
1170{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1170{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1171{ "[Unconfigured]","[Unkonfiguriert]" }, 1171{ "[Unconfigured]","[Unkonfiguriert]" },
1172{ "OK","OK" }, 1172{ "OK","OK" },
1173{ "FilterEditor","FilterEditor" }, 1173{ "FilterEditor","FilterEditor" },
1174{ "Include","Inclusive" }, 1174{ "Include","Inclusive" },
1175{ "Exclude","Exclusive" }, 1175{ "Exclude","Exclusive" },
1176{ "Edit Selection...","Editiere Auswahl" }, 1176{ "Edit Selection...","Editiere Auswahl" },
1177{ "recurring events","wiederholende Termine" }, 1177{ "recurring events","wiederholende Termine" },
1178{ "recurr. events","wiederh.Termine" }, 1178{ "recurr. events","wiederh.Termine" },
1179{ "completed to-dos","erledigte Todos" }, 1179{ "completed to-dos","erledigte Todos" },
1180{ "events","Termine" }, 1180{ "events","Termine" },
1181{ "todos","Todos" }, 1181{ "todos","Todos" },
1182{ "journals","Journale" }, 1182{ "journals","Journale" },
1183{ "public","öffentl." }, 1183{ "public","öffentl." },
1184{ "private","privat" }, 1184{ "private","privat" },
1185{ "confidential","vertraul." }, 1185{ "confidential","vertraul." },
1186{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, 1186{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1187{ "Yesterday","Gestern" }, 1187{ "Yesterday","Gestern" },
1188{ "Day after tomorrow","Übermorgen" }, 1188{ "Day after tomorrow","Übermorgen" },
1189{ "Tomorrow","Morgen" }, 1189{ "Tomorrow","Morgen" },
1190{ "Day before yesterday","Vorgestern" }, 1190{ "Day before yesterday","Vorgestern" },
1191{ "Size %1","Größe %1" }, 1191{ "Size %1","Größe %1" },
1192{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1192{ "New Agendasize: %1","Neue Agendagröße: %1" },
1193{ " (%1 y.)"," (%1 J.)" }, 1193{ " (%1 y.)"," (%1 J.)" },
1194{ "Allday:","Ganztägig:" }, 1194{ "Allday:","Ganztägig:" },
1195{ "compl.todos","erled.Todos" }, 1195{ "compl.todos","erled.Todos" },
1196{ "Day view","Tagesansicht" }, 1196{ "Day view","Tagesansicht" },
1197{ "Next days","Nächste Tage" }, 1197{ "Next days","Nächste Tage" },
1198{ "Next week","Nächste Woche" }, 1198{ "Next week","Nächste Woche" },
1199{ "Next two weeks","Nächste zwei Wochen" }, 1199{ "Next two weeks","Nächste zwei Wochen" },
1200{ "Next month","Nächster Monat" }, 1200{ "Next month","Nächster Monat" },
1201{ "Journal view","Journal" }, 1201{ "Journal view","Journal" },
1202{ "Display all opened","Zeige alle geöffnet" }, 1202{ "Display all opened","Zeige alle geöffnet" },
1203{ "Display all closed","Zeige alle geschlossen" }, 1203{ "Display all closed","Zeige alle geschlossen" },
1204{ "Display all flat","Zeige alle flach" }, 1204{ "Display all flat","Zeige alle flach" },
1205{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1205{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1206{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1206{ "Default todo done color:","Standard Todo erledigt Farbe" },
1207{ "Select week %1-%2","Wähle Woche %1-%2" }, 1207{ "Select week %1-%2","Wähle Woche %1-%2" },
1208{ "Select Week","Wähle Woche" }, 1208{ "Select Week","Wähle Woche" },
1209{ "Set alarm for selected...","Setze Alarm für Selekt..." }, 1209{ "Set alarm for selected...","Setze Alarm für Selekt..." },
1210{ "Set Alarm!","Setze Alarm!" }, 1210{ "Set Alarm!","Setze Alarm!" },
1211{ "Canged alarm for %1 items","Alarm für %1 Items geändert" }, 1211{ "Canged alarm for %1 items","Alarm für %1 Items geändert" },
1212{ " and "," und " }, 1212{ " and "," und " },
1213{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1213{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1214{ "Mail to selected","Mail an Ausgewählte" }, 1214{ "Mail to selected","Mail an Ausgewählte" },
1215{ "Mail to all","Mail an Alle" }, 1215{ "Mail to all","Mail an Alle" },
1216{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1216{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1217{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1217{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1218{ " on"," am" }, 1218{ " on"," am" },
1219{ " completed on "," erledigt am " }, 1219{ " completed on "," erledigt am " },
1220{ "Save as Event template","Speichere als Vorlage" }, 1220{ "Save as Event template","Speichere als Vorlage" },
1221{ "Load Event template","Lade Termin Vorlage" }, 1221{ "Load Event template","Lade Termin Vorlage" },
1222{ "Save as Journal template","Speichere als Journal Vorlage" }, 1222{ "Save as Journal template","Speichere als Journal Vorlage" },
1223{ "Insert Journal template","Füge Journal Vorlage ein" }, 1223{ "Insert Journal template","Füge Journal Vorlage ein" },
1224{ "Sub todos:<br>","Unter Todos:<br>" }, 1224{ "Sub todos:<br>","Unter Todos:<br>" },
1225{ "Parent todo:<br>","Über Todo:<br>" }, 1225{ "Parent todo:<br>","Über Todo:<br>" },
1226{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1226{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1227{ " completed"," erledigt" }, 1227{ " completed"," erledigt" },
1228{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.net --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.net --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" }, 1228{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.net --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.net --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" },
1229{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1229{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1230{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1230{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1231{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1231{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1232{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 1232{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
1233{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1233{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1234{ "Error","Fehler" }, 1234{ "Error","Fehler" },
1235{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1235{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1236{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1236{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1237{ "Warning","Warnung" }, 1237{ "Warning","Warnung" },
1238{ "Select week number","Wähle Wochen Nummer" }, 1238{ "Select week number","Wähle Wochen Nummer" },
1239{ "Februar","Februar" }, 1239{ "Februar","Februar" },
1240{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1240{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1241{ "W","W" }, 1241{ "W","W" },
1242{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1242{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1243{ "T: %1","T: %1" }, 1243{ "T: %1","T: %1" },
1244{ "Start: ","Start: " }, 1244{ "Start: ","Start: " },
1245{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1245{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1246{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1246{ "Password for remote access:","Passwort für fernen Zugriff:" },
1247{ "Remote IP address:","Ferne IP Adresse:" }, 1247{ "Remote IP address:","Ferne IP Adresse:" },
1248{ "Remote port number:","Ferne Port Nummer:" }, 1248{ "Remote port number:","Ferne Port Nummer:" },
1249{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1249{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1250{ "Remote from: ","Fern von: " }, 1250{ "Remote from: ","Fern von: " },
1251{ "Local from: ","Lokal von: " }, 1251{ "Local from: ","Lokal von: " },
1252{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 1252{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
1253{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1253{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1254{ "Write back","Schreibe zurück" }, 1254{ "Write back","Schreibe zurück" },
1255{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1255{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1256{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1256{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1257{ "Received sync request","Sync Anfrage erhalten" }, 1257{ "Received sync request","Sync Anfrage erhalten" },
1258{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 1258{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
1259{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1259{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1260{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1260{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1261{ "Sending file...","Sende Datei..." }, 1261{ "Sending file...","Sende Datei..." },
1262{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1262{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1263{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1263{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1264{ "Received %1 bytes","%1 Bytes erhalten" }, 1264{ "Received %1 bytes","%1 Bytes erhalten" },
1265{ "Writing file to disk...","Speichere Datei..." }, 1265{ "Writing file to disk...","Speichere Datei..." },
1266{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1266{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1267{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1267{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1268{ "Synchronize!","Synchronisiere!" }, 1268{ "Synchronize!","Synchronisiere!" },
1269{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1269{ "High clock skew!","Großer Uhrzeitunterschied!" },
1270{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1270{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1271{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 1271{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
1272{ "","" }, 1272{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1273{ "","" }, 1273{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1274{ "","" }, 1274{ "","" },
1275{ "","" }, 1275{ "","" },
1276{ "","" }, 1276{ "","" },
1277{ "","" }, 1277{ "","" },
1278{ "","" }, 1278{ "","" },
1279{ "","" }, 1279{ "","" },
1280{ "","" }, 1280{ "","" },
1281{ "","" }, 1281{ "","" },
1282{ "","" }, 1282{ "","" },
1283{ "","" }, 1283{ "","" },
1284{ "","" }, \ No newline at end of file 1284{ "","" }, \ No newline at end of file
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 7c8316f..3dac20b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1498,1545 +1498,1557 @@ void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthd
1498} 1498}
1499 1499
1500 1500
1501 1501
1502bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1502bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1503{ 1503{
1504 //qDebug("addAnni "); 1504 //qDebug("addAnni ");
1505 Event * ev = new Event(); 1505 Event * ev = new Event();
1506 ev->setOrganizer(KOPrefs::instance()->email()); 1506 ev->setOrganizer(KOPrefs::instance()->email());
1507 if ( a ) { 1507 if ( a ) {
1508 ev->addAttendee( a ); 1508 ev->addAttendee( a );
1509 } 1509 }
1510 QString kind; 1510 QString kind;
1511 if ( birthday ) { 1511 if ( birthday ) {
1512 kind = i18n( "Birthday" ); 1512 kind = i18n( "Birthday" );
1513 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 1513 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1514 } 1514 }
1515 else { 1515 else {
1516 kind = i18n( "Anniversary" ); 1516 kind = i18n( "Anniversary" );
1517 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 1517 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1518 } 1518 }
1519 ev->setCategories( kind ); 1519 ev->setCategories( kind );
1520 ev->setDtStart( QDateTime(date) ); 1520 ev->setDtStart( QDateTime(date) );
1521 ev->setDtEnd( QDateTime(date) ); 1521 ev->setDtEnd( QDateTime(date) );
1522 ev->setFloats( true ); 1522 ev->setFloats( true );
1523 Recurrence * rec = ev->recurrence(); 1523 Recurrence * rec = ev->recurrence();
1524 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1524 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1525 rec->addYearlyNum( date.month() ); 1525 rec->addYearlyNum( date.month() );
1526 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1526 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1527 delete ev; 1527 delete ev;
1528 return false; 1528 return false;
1529 } 1529 }
1530 return true; 1530 return true;
1531 1531
1532} 1532}
1533bool CalendarView::importQtopia( const QString &categories, 1533bool CalendarView::importQtopia( const QString &categories,
1534 const QString &datebook, 1534 const QString &datebook,
1535 const QString &todolist ) 1535 const QString &todolist )
1536{ 1536{
1537 1537
1538 QtopiaFormat qtopiaFormat; 1538 QtopiaFormat qtopiaFormat;
1539 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1539 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1540 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1540 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1541 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1541 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1542 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1542 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1543 1543
1544 updateView(); 1544 updateView();
1545 return true; 1545 return true;
1546 1546
1547#if 0 1547#if 0
1548 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1548 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1549 mCurrentSyncDevice = "qtopia-XML"; 1549 mCurrentSyncDevice = "qtopia-XML";
1550 if ( mSyncManager->mAskForPreferences ) 1550 if ( mSyncManager->mAskForPreferences )
1551 edit_sync_options(); 1551 edit_sync_options();
1552 qApp->processEvents(); 1552 qApp->processEvents();
1553 CalendarLocal* calendar = new CalendarLocal(); 1553 CalendarLocal* calendar = new CalendarLocal();
1554 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1554 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1555 bool syncOK = false; 1555 bool syncOK = false;
1556 QtopiaFormat qtopiaFormat; 1556 QtopiaFormat qtopiaFormat;
1557 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1557 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1558 bool loadOk = true; 1558 bool loadOk = true;
1559 if ( !categories.isEmpty() ) 1559 if ( !categories.isEmpty() )
1560 loadOk = qtopiaFormat.load( calendar, categories ); 1560 loadOk = qtopiaFormat.load( calendar, categories );
1561 if ( loadOk && !datebook.isEmpty() ) 1561 if ( loadOk && !datebook.isEmpty() )
1562 loadOk = qtopiaFormat.load( calendar, datebook ); 1562 loadOk = qtopiaFormat.load( calendar, datebook );
1563 if ( loadOk && !todolist.isEmpty() ) 1563 if ( loadOk && !todolist.isEmpty() )
1564 loadOk = qtopiaFormat.load( calendar, todolist ); 1564 loadOk = qtopiaFormat.load( calendar, todolist );
1565 1565
1566 if ( loadOk ) { 1566 if ( loadOk ) {
1567 getEventViewerDialog()->setSyncMode( true ); 1567 getEventViewerDialog()->setSyncMode( true );
1568 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1568 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1569 getEventViewerDialog()->setSyncMode( false ); 1569 getEventViewerDialog()->setSyncMode( false );
1570 qApp->processEvents(); 1570 qApp->processEvents();
1571 if ( syncOK ) { 1571 if ( syncOK ) {
1572 if ( mSyncManager->mWriteBackFile ) 1572 if ( mSyncManager->mWriteBackFile )
1573 { 1573 {
1574 // write back XML file 1574 // write back XML file
1575 1575
1576 } 1576 }
1577 setModified( true ); 1577 setModified( true );
1578 } 1578 }
1579 } else { 1579 } else {
1580 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1580 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1581 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1581 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1582 question, i18n("Ok")) ; 1582 question, i18n("Ok")) ;
1583 } 1583 }
1584 delete calendar; 1584 delete calendar;
1585 updateView(); 1585 updateView();
1586 return syncOK; 1586 return syncOK;
1587 1587
1588 1588
1589#endif 1589#endif
1590 1590
1591} 1591}
1592 1592
1593void CalendarView::setSyncEventsReadOnly() 1593void CalendarView::setSyncEventsReadOnly()
1594{ 1594{
1595 Event * ev; 1595 Event * ev;
1596 QPtrList<Event> eL = mCalendar->rawEvents(); 1596 QPtrList<Event> eL = mCalendar->rawEvents();
1597 ev = eL.first(); 1597 ev = eL.first();
1598 while ( ev ) { 1598 while ( ev ) {
1599 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1599 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1600 ev->setReadOnly( true ); 1600 ev->setReadOnly( true );
1601 ev = eL.next(); 1601 ev = eL.next();
1602 } 1602 }
1603} 1603}
1604bool CalendarView::openCalendar(QString filename, bool merge) 1604bool CalendarView::openCalendar(QString filename, bool merge)
1605{ 1605{
1606 1606
1607 if (filename.isEmpty()) { 1607 if (filename.isEmpty()) {
1608 return false; 1608 return false;
1609 } 1609 }
1610 1610
1611 if (!QFile::exists(filename)) { 1611 if (!QFile::exists(filename)) {
1612 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1612 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1613 return false; 1613 return false;
1614 } 1614 }
1615 1615
1616 globalFlagBlockAgenda = 1; 1616 globalFlagBlockAgenda = 1;
1617 if (!merge) mCalendar->close(); 1617 if (!merge) mCalendar->close();
1618 1618
1619 mStorage->setFileName( filename ); 1619 mStorage->setFileName( filename );
1620 1620
1621 if ( mStorage->load() ) { 1621 if ( mStorage->load() ) {
1622 if ( merge ) ;//setModified( true ); 1622 if ( merge ) ;//setModified( true );
1623 else { 1623 else {
1624 //setModified( true ); 1624 //setModified( true );
1625 mViewManager->setDocumentId( filename ); 1625 mViewManager->setDocumentId( filename );
1626 mDialogManager->setDocumentId( filename ); 1626 mDialogManager->setDocumentId( filename );
1627 mTodoList->setDocumentId( filename ); 1627 mTodoList->setDocumentId( filename );
1628 } 1628 }
1629 globalFlagBlockAgenda = 2; 1629 globalFlagBlockAgenda = 2;
1630 // if ( getLastSyncEvent() ) 1630 // if ( getLastSyncEvent() )
1631 // getLastSyncEvent()->setReadOnly( true ); 1631 // getLastSyncEvent()->setReadOnly( true );
1632 mCalendar->reInitAlarmSettings(); 1632 mCalendar->reInitAlarmSettings();
1633 setSyncEventsReadOnly(); 1633 setSyncEventsReadOnly();
1634 updateUnmanagedViews(); 1634 updateUnmanagedViews();
1635 updateView(); 1635 updateView();
1636 if ( filename != MainWindow::defaultFileName() ) { 1636 if ( filename != MainWindow::defaultFileName() ) {
1637 saveCalendar( MainWindow::defaultFileName() ); 1637 saveCalendar( MainWindow::defaultFileName() );
1638 } else { 1638 } else {
1639 QFileInfo finf ( MainWindow::defaultFileName()); 1639 QFileInfo finf ( MainWindow::defaultFileName());
1640 if ( finf.exists() ) { 1640 if ( finf.exists() ) {
1641 setLoadedFileVersion( finf.lastModified () ); 1641 setLoadedFileVersion( finf.lastModified () );
1642 } 1642 }
1643 } 1643 }
1644 return true; 1644 return true;
1645 } else { 1645 } else {
1646 // while failing to load, the calendar object could 1646 // while failing to load, the calendar object could
1647 // have become partially populated. Clear it out. 1647 // have become partially populated. Clear it out.
1648 if ( !merge ) { 1648 if ( !merge ) {
1649 mCalendar->close(); 1649 mCalendar->close();
1650 mViewManager->setDocumentId( filename ); 1650 mViewManager->setDocumentId( filename );
1651 mDialogManager->setDocumentId( filename ); 1651 mDialogManager->setDocumentId( filename );
1652 mTodoList->setDocumentId( filename ); 1652 mTodoList->setDocumentId( filename );
1653 } 1653 }
1654 1654
1655 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1655 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1656 1656
1657 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 1657 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
1658 globalFlagBlockAgenda = 2; 1658 globalFlagBlockAgenda = 2;
1659 mCalendar->reInitAlarmSettings(); 1659 mCalendar->reInitAlarmSettings();
1660 setSyncEventsReadOnly(); 1660 setSyncEventsReadOnly();
1661 updateUnmanagedViews(); 1661 updateUnmanagedViews();
1662 updateView(); 1662 updateView();
1663 } 1663 }
1664 return false; 1664 return false;
1665} 1665}
1666void CalendarView::showOpenError() 1666void CalendarView::showOpenError()
1667{ 1667{
1668 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 1668 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
1669} 1669}
1670void CalendarView::setLoadedFileVersion(QDateTime dt) 1670void CalendarView::setLoadedFileVersion(QDateTime dt)
1671{ 1671{
1672 loadedFileVersion = dt; 1672 loadedFileVersion = dt;
1673} 1673}
1674bool CalendarView::checkFileChanged(QString fn) 1674bool CalendarView::checkFileChanged(QString fn)
1675{ 1675{
1676 QFileInfo finf ( fn ); 1676 QFileInfo finf ( fn );
1677 if ( !finf.exists() ) 1677 if ( !finf.exists() )
1678 return true; 1678 return true;
1679 QDateTime dt = finf.lastModified (); 1679 QDateTime dt = finf.lastModified ();
1680 if ( dt <= loadedFileVersion ) 1680 if ( dt <= loadedFileVersion )
1681 return false; 1681 return false;
1682 return true; 1682 return true;
1683 1683
1684} 1684}
1685void CalendarView::watchSavedFile() 1685void CalendarView::watchSavedFile()
1686{ 1686{
1687 QFileInfo finf ( MainWindow::defaultFileName()); 1687 QFileInfo finf ( MainWindow::defaultFileName());
1688 if ( !finf.exists() ) 1688 if ( !finf.exists() )
1689 return; 1689 return;
1690 QDateTime dt = finf.lastModified (); 1690 QDateTime dt = finf.lastModified ();
1691 if ( dt < loadedFileVersion ) { 1691 if ( dt < loadedFileVersion ) {
1692 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 1692 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
1693 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 1693 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
1694 return; 1694 return;
1695 } 1695 }
1696 loadedFileVersion = dt; 1696 loadedFileVersion = dt;
1697} 1697}
1698 1698
1699bool CalendarView::checkFileVersion(QString fn) 1699bool CalendarView::checkFileVersion(QString fn)
1700{ 1700{
1701 QFileInfo finf ( fn ); 1701 QFileInfo finf ( fn );
1702 if ( !finf.exists() ) 1702 if ( !finf.exists() )
1703 return true; 1703 return true;
1704 QDateTime dt = finf.lastModified (); 1704 QDateTime dt = finf.lastModified ();
1705 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1705 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1706 //qDebug("file on disk version %s",dt.toString().latin1()); 1706 //qDebug("file on disk version %s",dt.toString().latin1());
1707 if ( dt <= loadedFileVersion ) 1707 if ( dt <= loadedFileVersion )
1708 return true; 1708 return true;
1709 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 1709 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
1710 i18n("KO/Pi Warning"),i18n("Overwrite"), 1710 i18n("KO/Pi Warning"),i18n("Overwrite"),
1711 i18n("Sync+save")); 1711 i18n("Sync+save"));
1712 1712
1713 if ( km == KMessageBox::Cancel ) 1713 if ( km == KMessageBox::Cancel )
1714 return false; 1714 return false;
1715 if ( km == KMessageBox::Yes ) 1715 if ( km == KMessageBox::Yes )
1716 return true; 1716 return true;
1717 1717
1718 setSyncDevice("deleteaftersync" ); 1718 setSyncDevice("deleteaftersync" );
1719 mSyncManager->mAskForPreferences = true; 1719 mSyncManager->mAskForPreferences = true;
1720 mSyncManager->mSyncAlgoPrefs = 3; 1720 mSyncManager->mSyncAlgoPrefs = 3;
1721 mSyncManager->mWriteBackFile = false; 1721 mSyncManager->mWriteBackFile = false;
1722 mSyncManager->mWriteBackExistingOnly = false; 1722 mSyncManager->mWriteBackExistingOnly = false;
1723 mSyncManager->mShowSyncSummary = false; 1723 mSyncManager->mShowSyncSummary = false;
1724 syncCalendar( fn, 3 ); 1724 syncCalendar( fn, 3 );
1725 Event * e = getLastSyncEvent(); 1725 Event * e = getLastSyncEvent();
1726 mCalendar->deleteEvent ( e ); 1726 mCalendar->deleteEvent ( e );
1727 updateView(); 1727 updateView();
1728 return true; 1728 return true;
1729} 1729}
1730 1730
1731bool CalendarView::saveCalendar( QString filename ) 1731bool CalendarView::saveCalendar( QString filename )
1732{ 1732{
1733 1733
1734 // Store back all unsaved data into calendar object 1734 // Store back all unsaved data into calendar object
1735 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1735 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1736 if ( mViewManager->currentView() ) 1736 if ( mViewManager->currentView() )
1737 mViewManager->currentView()->flushView(); 1737 mViewManager->currentView()->flushView();
1738 1738
1739 1739
1740 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 1740 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
1741 mStorage->setSaveFormat( new ICalFormat() ); 1741 mStorage->setSaveFormat( new ICalFormat() );
1742 mStorage->setFileName( filename ); 1742 mStorage->setFileName( filename );
1743 bool success; 1743 bool success;
1744 success = mStorage->save(); 1744 success = mStorage->save();
1745 if ( !success ) { 1745 if ( !success ) {
1746 return false; 1746 return false;
1747 } 1747 }
1748 if ( filename == MainWindow::defaultFileName() ) { 1748 if ( filename == MainWindow::defaultFileName() ) {
1749 setLoadedFileVersion( lfv ); 1749 setLoadedFileVersion( lfv );
1750 watchSavedFile(); 1750 watchSavedFile();
1751 } 1751 }
1752 return true; 1752 return true;
1753} 1753}
1754 1754
1755void CalendarView::closeCalendar() 1755void CalendarView::closeCalendar()
1756{ 1756{
1757 1757
1758 // child windows no longer valid 1758 // child windows no longer valid
1759 emit closingDown(); 1759 emit closingDown();
1760 1760
1761 mCalendar->close(); 1761 mCalendar->close();
1762 setModified(false); 1762 setModified(false);
1763 updateView(); 1763 updateView();
1764} 1764}
1765 1765
1766void CalendarView::archiveCalendar() 1766void CalendarView::archiveCalendar()
1767{ 1767{
1768 mDialogManager->showArchiveDialog(); 1768 mDialogManager->showArchiveDialog();
1769} 1769}
1770 1770
1771 1771
1772void CalendarView::readSettings() 1772void CalendarView::readSettings()
1773{ 1773{
1774 1774
1775 1775
1776 // mViewManager->showAgendaView(); 1776 // mViewManager->showAgendaView();
1777 QString str; 1777 QString str;
1778 //qDebug("CalendarView::readSettings() "); 1778 //qDebug("CalendarView::readSettings() ");
1779 // read settings from the KConfig, supplying reasonable 1779 // read settings from the KConfig, supplying reasonable
1780 // defaults where none are to be found 1780 // defaults where none are to be found
1781 KConfig *config = KOGlobals::config(); 1781 KConfig *config = KOGlobals::config();
1782#ifndef KORG_NOSPLITTER 1782#ifndef KORG_NOSPLITTER
1783 config->setGroup("KOrganizer Geometry"); 1783 config->setGroup("KOrganizer Geometry");
1784 1784
1785 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1785 QValueList<int> sizes = config->readIntListEntry("Separator1");
1786 if (sizes.count() != 2) { 1786 if (sizes.count() != 2) {
1787 sizes << mDateNavigator->minimumSizeHint().width(); 1787 sizes << mDateNavigator->minimumSizeHint().width();
1788 sizes << 300; 1788 sizes << 300;
1789 } 1789 }
1790 mPanner->setSizes(sizes); 1790 mPanner->setSizes(sizes);
1791 1791
1792 sizes = config->readIntListEntry("Separator2"); 1792 sizes = config->readIntListEntry("Separator2");
1793 if ( ( mResourceView && sizes.count() == 4 ) || 1793 if ( ( mResourceView && sizes.count() == 4 ) ||
1794 ( !mResourceView && sizes.count() == 3 ) ) { 1794 ( !mResourceView && sizes.count() == 3 ) ) {
1795 mLeftSplitter->setSizes(sizes); 1795 mLeftSplitter->setSizes(sizes);
1796 } 1796 }
1797#endif 1797#endif
1798 globalFlagBlockAgenda = 1; 1798 globalFlagBlockAgenda = 1;
1799 mViewManager->showAgendaView(); 1799 mViewManager->showAgendaView();
1800 //mViewManager->readSettings( config ); 1800 //mViewManager->readSettings( config );
1801 mTodoList->restoreLayout(config,QString("Todo Layout")); 1801 mTodoList->restoreLayout(config,QString("Todo Layout"));
1802 readFilterSettings(config); 1802 readFilterSettings(config);
1803 config->setGroup( "Views" ); 1803 config->setGroup( "Views" );
1804 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1804 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1805 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1805 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1806 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1806 else if ( dateCount == 7 ) mNavigator->selectWeek();
1807 else mNavigator->selectDates( dateCount ); 1807 else mNavigator->selectDates( dateCount );
1808 // mViewManager->readSettings( config ); 1808 // mViewManager->readSettings( config );
1809 updateConfig(); 1809 updateConfig();
1810 globalFlagBlockAgenda = 2; 1810 globalFlagBlockAgenda = 2;
1811 mViewManager->readSettings( config ); 1811 mViewManager->readSettings( config );
1812#ifdef DESKTOP_VERSION 1812#ifdef DESKTOP_VERSION
1813 config->setGroup("WidgetLayout"); 1813 config->setGroup("WidgetLayout");
1814 QStringList list; 1814 QStringList list;
1815 list = config->readListEntry("MainLayout"); 1815 list = config->readListEntry("MainLayout");
1816 int x,y,w,h; 1816 int x,y,w,h;
1817 if ( ! list.isEmpty() ) { 1817 if ( ! list.isEmpty() ) {
1818 x = list[0].toInt(); 1818 x = list[0].toInt();
1819 y = list[1].toInt(); 1819 y = list[1].toInt();
1820 w = list[2].toInt(); 1820 w = list[2].toInt();
1821 h = list[3].toInt(); 1821 h = list[3].toInt();
1822 topLevelWidget()->setGeometry(x,y,w,h); 1822 topLevelWidget()->setGeometry(x,y,w,h);
1823 1823
1824 } else { 1824 } else {
1825 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1825 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1826 } 1826 }
1827 list = config->readListEntry("EditEventLayout"); 1827 list = config->readListEntry("EditEventLayout");
1828 if ( ! list.isEmpty() ) { 1828 if ( ! list.isEmpty() ) {
1829 x = list[0].toInt(); 1829 x = list[0].toInt();
1830 y = list[1].toInt(); 1830 y = list[1].toInt();
1831 w = list[2].toInt(); 1831 w = list[2].toInt();
1832 h = list[3].toInt(); 1832 h = list[3].toInt();
1833 mEventEditor->setGeometry(x,y,w,h); 1833 mEventEditor->setGeometry(x,y,w,h);
1834 1834
1835 } 1835 }
1836 list = config->readListEntry("EditTodoLayout"); 1836 list = config->readListEntry("EditTodoLayout");
1837 if ( ! list.isEmpty() ) { 1837 if ( ! list.isEmpty() ) {
1838 x = list[0].toInt(); 1838 x = list[0].toInt();
1839 y = list[1].toInt(); 1839 y = list[1].toInt();
1840 w = list[2].toInt(); 1840 w = list[2].toInt();
1841 h = list[3].toInt(); 1841 h = list[3].toInt();
1842 mTodoEditor->setGeometry(x,y,w,h); 1842 mTodoEditor->setGeometry(x,y,w,h);
1843 1843
1844 } 1844 }
1845 list = config->readListEntry("ViewerLayout"); 1845 list = config->readListEntry("ViewerLayout");
1846 if ( ! list.isEmpty() ) { 1846 if ( ! list.isEmpty() ) {
1847 x = list[0].toInt(); 1847 x = list[0].toInt();
1848 y = list[1].toInt(); 1848 y = list[1].toInt();
1849 w = list[2].toInt(); 1849 w = list[2].toInt();
1850 h = list[3].toInt(); 1850 h = list[3].toInt();
1851 getEventViewerDialog()->setGeometry(x,y,w,h); 1851 getEventViewerDialog()->setGeometry(x,y,w,h);
1852 } 1852 }
1853#endif 1853#endif
1854 1854
1855} 1855}
1856 1856
1857 1857
1858void CalendarView::writeSettings() 1858void CalendarView::writeSettings()
1859{ 1859{
1860 // kdDebug() << "CalendarView::writeSettings" << endl; 1860 // kdDebug() << "CalendarView::writeSettings" << endl;
1861 1861
1862 KConfig *config = KOGlobals::config(); 1862 KConfig *config = KOGlobals::config();
1863 1863
1864#ifndef KORG_NOSPLITTER 1864#ifndef KORG_NOSPLITTER
1865 config->setGroup("KOrganizer Geometry"); 1865 config->setGroup("KOrganizer Geometry");
1866 1866
1867 QValueList<int> list = mPanner->sizes(); 1867 QValueList<int> list = mPanner->sizes();
1868 config->writeEntry("Separator1",list); 1868 config->writeEntry("Separator1",list);
1869 1869
1870 list = mLeftSplitter->sizes(); 1870 list = mLeftSplitter->sizes();
1871 config->writeEntry("Separator2",list); 1871 config->writeEntry("Separator2",list);
1872#endif 1872#endif
1873 1873
1874 mViewManager->writeSettings( config ); 1874 mViewManager->writeSettings( config );
1875 mTodoList->saveLayout(config,QString("Todo Layout")); 1875 mTodoList->saveLayout(config,QString("Todo Layout"));
1876 mDialogManager->writeSettings( config ); 1876 mDialogManager->writeSettings( config );
1877 //KOPrefs::instance()->usrWriteConfig(); 1877 //KOPrefs::instance()->usrWriteConfig();
1878 KOPrefs::instance()->writeConfig(); 1878 KOPrefs::instance()->writeConfig();
1879 1879
1880 writeFilterSettings(config); 1880 writeFilterSettings(config);
1881 1881
1882 config->setGroup( "Views" ); 1882 config->setGroup( "Views" );
1883 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1883 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1884 1884
1885#ifdef DESKTOP_VERSION 1885#ifdef DESKTOP_VERSION
1886 config->setGroup("WidgetLayout"); 1886 config->setGroup("WidgetLayout");
1887 QStringList list ;//= config->readListEntry("MainLayout"); 1887 QStringList list ;//= config->readListEntry("MainLayout");
1888 int x,y,w,h; 1888 int x,y,w,h;
1889 QWidget* wid; 1889 QWidget* wid;
1890 wid = topLevelWidget(); 1890 wid = topLevelWidget();
1891 x = wid->geometry().x(); 1891 x = wid->geometry().x();
1892 y = wid->geometry().y(); 1892 y = wid->geometry().y();
1893 w = wid->width(); 1893 w = wid->width();
1894 h = wid->height(); 1894 h = wid->height();
1895 list.clear(); 1895 list.clear();
1896 list << QString::number( x ); 1896 list << QString::number( x );
1897 list << QString::number( y ); 1897 list << QString::number( y );
1898 list << QString::number( w ); 1898 list << QString::number( w );
1899 list << QString::number( h ); 1899 list << QString::number( h );
1900 config->writeEntry("MainLayout",list ); 1900 config->writeEntry("MainLayout",list );
1901 1901
1902 wid = mEventEditor; 1902 wid = mEventEditor;
1903 x = wid->geometry().x(); 1903 x = wid->geometry().x();
1904 y = wid->geometry().y(); 1904 y = wid->geometry().y();
1905 w = wid->width(); 1905 w = wid->width();
1906 h = wid->height(); 1906 h = wid->height();
1907 list.clear(); 1907 list.clear();
1908 list << QString::number( x ); 1908 list << QString::number( x );
1909 list << QString::number( y ); 1909 list << QString::number( y );
1910 list << QString::number( w ); 1910 list << QString::number( w );
1911 list << QString::number( h ); 1911 list << QString::number( h );
1912 config->writeEntry("EditEventLayout",list ); 1912 config->writeEntry("EditEventLayout",list );
1913 1913
1914 wid = mTodoEditor; 1914 wid = mTodoEditor;
1915 x = wid->geometry().x(); 1915 x = wid->geometry().x();
1916 y = wid->geometry().y(); 1916 y = wid->geometry().y();
1917 w = wid->width(); 1917 w = wid->width();
1918 h = wid->height(); 1918 h = wid->height();
1919 list.clear(); 1919 list.clear();
1920 list << QString::number( x ); 1920 list << QString::number( x );
1921 list << QString::number( y ); 1921 list << QString::number( y );
1922 list << QString::number( w ); 1922 list << QString::number( w );
1923 list << QString::number( h ); 1923 list << QString::number( h );
1924 config->writeEntry("EditTodoLayout",list ); 1924 config->writeEntry("EditTodoLayout",list );
1925 wid = getEventViewerDialog(); 1925 wid = getEventViewerDialog();
1926 x = wid->geometry().x(); 1926 x = wid->geometry().x();
1927 y = wid->geometry().y(); 1927 y = wid->geometry().y();
1928 w = wid->width(); 1928 w = wid->width();
1929 h = wid->height(); 1929 h = wid->height();
1930 list.clear(); 1930 list.clear();
1931 list << QString::number( x ); 1931 list << QString::number( x );
1932 list << QString::number( y ); 1932 list << QString::number( y );
1933 list << QString::number( w ); 1933 list << QString::number( w );
1934 list << QString::number( h ); 1934 list << QString::number( h );
1935 config->writeEntry("ViewerLayout",list ); 1935 config->writeEntry("ViewerLayout",list );
1936 wid = mDialogManager->getSearchDialog(); 1936 wid = mDialogManager->getSearchDialog();
1937 if ( wid ) { 1937 if ( wid ) {
1938 x = wid->geometry().x(); 1938 x = wid->geometry().x();
1939 y = wid->geometry().y(); 1939 y = wid->geometry().y();
1940 w = wid->width(); 1940 w = wid->width();
1941 h = wid->height(); 1941 h = wid->height();
1942 list.clear(); 1942 list.clear();
1943 list << QString::number( x ); 1943 list << QString::number( x );
1944 list << QString::number( y ); 1944 list << QString::number( y );
1945 list << QString::number( w ); 1945 list << QString::number( w );
1946 list << QString::number( h ); 1946 list << QString::number( h );
1947 config->writeEntry("SearchLayout",list ); 1947 config->writeEntry("SearchLayout",list );
1948 } 1948 }
1949#endif 1949#endif
1950 1950
1951 1951
1952 config->sync(); 1952 config->sync();
1953} 1953}
1954 1954
1955void CalendarView::readFilterSettings(KConfig *config) 1955void CalendarView::readFilterSettings(KConfig *config)
1956{ 1956{
1957 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1957 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1958 1958
1959 mFilters.clear(); 1959 mFilters.clear();
1960 1960
1961 config->setGroup("General"); 1961 config->setGroup("General");
1962 QStringList filterList = config->readListEntry("CalendarFilters"); 1962 QStringList filterList = config->readListEntry("CalendarFilters");
1963 1963
1964 QStringList::ConstIterator it = filterList.begin(); 1964 QStringList::ConstIterator it = filterList.begin();
1965 QStringList::ConstIterator end = filterList.end(); 1965 QStringList::ConstIterator end = filterList.end();
1966 while(it != end) { 1966 while(it != end) {
1967 // kdDebug() << " filter: " << (*it) << endl; 1967 // kdDebug() << " filter: " << (*it) << endl;
1968 1968
1969 CalFilter *filter; 1969 CalFilter *filter;
1970 filter = new CalFilter(*it); 1970 filter = new CalFilter(*it);
1971 config->setGroup("Filter_" + (*it)); 1971 config->setGroup("Filter_" + (*it));
1972 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1972 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1973 filter->setCriteria(config->readNumEntry("Criteria",0)); 1973 filter->setCriteria(config->readNumEntry("Criteria",0));
1974 filter->setCategoryList(config->readListEntry("CategoryList")); 1974 filter->setCategoryList(config->readListEntry("CategoryList"));
1975 mFilters.append(filter); 1975 mFilters.append(filter);
1976 1976
1977 ++it; 1977 ++it;
1978 } 1978 }
1979 1979
1980 if (mFilters.count() == 0) { 1980 if (mFilters.count() == 0) {
1981 CalFilter *filter = new CalFilter(i18n("Default")); 1981 CalFilter *filter = new CalFilter(i18n("Default"));
1982 mFilters.append(filter); 1982 mFilters.append(filter);
1983 } 1983 }
1984 mFilterView->updateFilters(); 1984 mFilterView->updateFilters();
1985 config->setGroup("FilterView"); 1985 config->setGroup("FilterView");
1986 1986
1987 mFilterView->blockSignals(true); 1987 mFilterView->blockSignals(true);
1988 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1988 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1989 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1989 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1990 mFilterView->blockSignals(false); 1990 mFilterView->blockSignals(false);
1991 // We do it manually to avoid it being done twice by the above calls 1991 // We do it manually to avoid it being done twice by the above calls
1992 updateFilter(); 1992 updateFilter();
1993} 1993}
1994 1994
1995void CalendarView::writeFilterSettings(KConfig *config) 1995void CalendarView::writeFilterSettings(KConfig *config)
1996{ 1996{
1997 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1997 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1998 1998
1999 QStringList filterList; 1999 QStringList filterList;
2000 2000
2001 CalFilter *filter = mFilters.first(); 2001 CalFilter *filter = mFilters.first();
2002 while(filter) { 2002 while(filter) {
2003 // kdDebug() << " fn: " << filter->name() << endl; 2003 // kdDebug() << " fn: " << filter->name() << endl;
2004 filterList << filter->name(); 2004 filterList << filter->name();
2005 config->setGroup("Filter_" + filter->name()); 2005 config->setGroup("Filter_" + filter->name());
2006 config->writeEntry("Criteria",filter->criteria()); 2006 config->writeEntry("Criteria",filter->criteria());
2007 config->writeEntry("CategoryList",filter->categoryList()); 2007 config->writeEntry("CategoryList",filter->categoryList());
2008 filter = mFilters.next(); 2008 filter = mFilters.next();
2009 } 2009 }
2010 config->setGroup("General"); 2010 config->setGroup("General");
2011 config->writeEntry("CalendarFilters",filterList); 2011 config->writeEntry("CalendarFilters",filterList);
2012 2012
2013 config->setGroup("FilterView"); 2013 config->setGroup("FilterView");
2014 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2014 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2015 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2015 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2016} 2016}
2017 2017
2018 2018
2019void CalendarView::goToday() 2019void CalendarView::goToday()
2020{ 2020{
2021 if ( mViewManager->currentView()->isMonthView() ) 2021 if ( mViewManager->currentView()->isMonthView() )
2022 mNavigator->selectTodayMonth(); 2022 mNavigator->selectTodayMonth();
2023 else 2023 else
2024 mNavigator->selectToday(); 2024 mNavigator->selectToday();
2025} 2025}
2026 2026
2027void CalendarView::goNext() 2027void CalendarView::goNext()
2028{ 2028{
2029 mNavigator->selectNext(); 2029 mNavigator->selectNext();
2030} 2030}
2031 2031
2032void CalendarView::goPrevious() 2032void CalendarView::goPrevious()
2033{ 2033{
2034 mNavigator->selectPrevious(); 2034 mNavigator->selectPrevious();
2035} 2035}
2036void CalendarView::goNextMonth() 2036void CalendarView::goNextMonth()
2037{ 2037{
2038 mNavigator->selectNextMonth(); 2038 mNavigator->selectNextMonth();
2039} 2039}
2040 2040
2041void CalendarView::goPreviousMonth() 2041void CalendarView::goPreviousMonth()
2042{ 2042{
2043 mNavigator->selectPreviousMonth(); 2043 mNavigator->selectPreviousMonth();
2044} 2044}
2045void CalendarView::writeLocale() 2045void CalendarView::writeLocale()
2046{ 2046{
2047 //KPimGlobalPrefs::instance()->setGlobalConfig(); 2047 //KPimGlobalPrefs::instance()->setGlobalConfig();
2048#if 0 2048#if 0
2049 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 2049 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
2050 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 2050 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
2051 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 2051 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
2052 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 2052 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
2053 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 2053 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
2054 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 2054 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
2055 dummy = KOPrefs::instance()->mUserDateFormatShort; 2055 dummy = KOPrefs::instance()->mUserDateFormatShort;
2056 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 2056 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
2057 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 2057 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
2058 KOPrefs::instance()->mDaylightsavingStart, 2058 KOPrefs::instance()->mDaylightsavingStart,
2059 KOPrefs::instance()->mDaylightsavingEnd ); 2059 KOPrefs::instance()->mDaylightsavingEnd );
2060 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId ); 2060 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId );
2061#endif 2061#endif
2062} 2062}
2063void CalendarView::updateConfig() 2063void CalendarView::updateConfig()
2064{ 2064{
2065 writeLocale(); 2065 writeLocale();
2066 if ( KOPrefs::instance()->mUseAppColors ) 2066 if ( KOPrefs::instance()->mUseAppColors )
2067 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2067 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2068 emit configChanged(); 2068 emit configChanged();
2069 mTodoList->updateConfig(); 2069 mTodoList->updateConfig();
2070 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2070 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2071 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2071 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2072 // To make the "fill window" configurations work 2072 // To make the "fill window" configurations work
2073 //mViewManager->raiseCurrentView(); 2073 //mViewManager->raiseCurrentView();
2074} 2074}
2075 2075
2076 2076
2077void CalendarView::eventChanged(Event *event) 2077void CalendarView::eventChanged(Event *event)
2078{ 2078{
2079 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2079 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2080 //updateUnmanagedViews(); 2080 //updateUnmanagedViews();
2081} 2081}
2082 2082
2083void CalendarView::eventAdded(Event *event) 2083void CalendarView::eventAdded(Event *event)
2084{ 2084{
2085 changeEventDisplay(event,KOGlobals::EVENTADDED); 2085 changeEventDisplay(event,KOGlobals::EVENTADDED);
2086} 2086}
2087 2087
2088void CalendarView::eventToBeDeleted(Event *) 2088void CalendarView::eventToBeDeleted(Event *)
2089{ 2089{
2090 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2090 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2091} 2091}
2092 2092
2093void CalendarView::eventDeleted() 2093void CalendarView::eventDeleted()
2094{ 2094{
2095 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2095 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2096} 2096}
2097void CalendarView::changeTodoDisplay(Todo *which, int action) 2097void CalendarView::changeTodoDisplay(Todo *which, int action)
2098{ 2098{
2099 changeIncidenceDisplay((Incidence *)which, action); 2099 changeIncidenceDisplay((Incidence *)which, action);
2100 mDateNavigator->updateView(); //LR 2100 mDateNavigator->updateView(); //LR
2101 //mDialogManager->updateSearchDialog(); 2101 //mDialogManager->updateSearchDialog();
2102 2102
2103 if (which) { 2103 if (which) {
2104 mViewManager->updateWNview(); 2104 mViewManager->updateWNview();
2105 //mTodoList->updateView(); 2105 //mTodoList->updateView();
2106 } 2106 }
2107 2107
2108} 2108}
2109 2109
2110void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2110void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2111{ 2111{
2112 updateUnmanagedViews(); 2112 updateUnmanagedViews();
2113 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2113 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2114 if ( action == KOGlobals::EVENTDELETED ) { //delete 2114 if ( action == KOGlobals::EVENTDELETED ) { //delete
2115 mCalendar->checkAlarmForIncidence( 0, true ); 2115 mCalendar->checkAlarmForIncidence( 0, true );
2116 if ( mEventViewerDialog ) 2116 if ( mEventViewerDialog )
2117 mEventViewerDialog->hide(); 2117 mEventViewerDialog->hide();
2118 } 2118 }
2119 else 2119 else
2120 mCalendar->checkAlarmForIncidence( which , false ); 2120 mCalendar->checkAlarmForIncidence( which , false );
2121} 2121}
2122 2122
2123// most of the changeEventDisplays() right now just call the view's 2123// most of the changeEventDisplays() right now just call the view's
2124// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2124// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2125void CalendarView::changeEventDisplay(Event *which, int action) 2125void CalendarView::changeEventDisplay(Event *which, int action)
2126{ 2126{
2127 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2127 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2128 changeIncidenceDisplay((Incidence *)which, action); 2128 changeIncidenceDisplay((Incidence *)which, action);
2129 mDateNavigator->updateView(); 2129 mDateNavigator->updateView();
2130 //mDialogManager->updateSearchDialog(); 2130 //mDialogManager->updateSearchDialog();
2131 2131
2132 if (which) { 2132 if (which) {
2133 // If there is an event view visible update the display 2133 // If there is an event view visible update the display
2134 mViewManager->currentView()->changeEventDisplay(which,action); 2134 mViewManager->currentView()->changeEventDisplay(which,action);
2135 // TODO: check, if update needed 2135 // TODO: check, if update needed
2136 // if (which->getTodoStatus()) { 2136 // if (which->getTodoStatus()) {
2137 mTodoList->updateView(); 2137 mTodoList->updateView();
2138 // } 2138 // }
2139 } else { 2139 } else {
2140 mViewManager->currentView()->updateView(); 2140 mViewManager->currentView()->updateView();
2141 } 2141 }
2142} 2142}
2143 2143
2144 2144
2145void CalendarView::updateTodoViews() 2145void CalendarView::updateTodoViews()
2146{ 2146{
2147 mTodoList->updateView(); 2147 mTodoList->updateView();
2148 mViewManager->currentView()->updateView(); 2148 mViewManager->currentView()->updateView();
2149 2149
2150} 2150}
2151 2151
2152 2152
2153void CalendarView::updateView(const QDate &start, const QDate &end) 2153void CalendarView::updateView(const QDate &start, const QDate &end)
2154{ 2154{
2155 mTodoList->updateView(); 2155 mTodoList->updateView();
2156 mViewManager->updateView(start, end); 2156 mViewManager->updateView(start, end);
2157 //mDateNavigator->updateView(); 2157 //mDateNavigator->updateView();
2158} 2158}
2159 2159
2160void CalendarView::updateView() 2160void CalendarView::updateView()
2161{ 2161{
2162 DateList tmpList = mNavigator->selectedDates(); 2162 DateList tmpList = mNavigator->selectedDates();
2163 2163
2164 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2164 if ( KOPrefs::instance()->mHideNonStartedTodos )
2165 mTodoList->updateView(); 2165 mTodoList->updateView();
2166 // We assume that the navigator only selects consecutive days. 2166 // We assume that the navigator only selects consecutive days.
2167 updateView( tmpList.first(), tmpList.last() ); 2167 updateView( tmpList.first(), tmpList.last() );
2168} 2168}
2169 2169
2170void CalendarView::updateUnmanagedViews() 2170void CalendarView::updateUnmanagedViews()
2171{ 2171{
2172 mDateNavigator->updateDayMatrix(); 2172 mDateNavigator->updateDayMatrix();
2173} 2173}
2174 2174
2175int CalendarView::msgItemDelete(const QString name) 2175int CalendarView::msgItemDelete(const QString name)
2176{ 2176{
2177 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 2177 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2178 i18n("This item will be\npermanently deleted."), 2178 i18n("This item will be\npermanently deleted."),
2179 i18n("KO/Pi Confirmation"),i18n("Delete")); 2179 i18n("KO/Pi Confirmation"),i18n("Delete"));
2180} 2180}
2181 2181
2182 2182
2183void CalendarView::edit_cut() 2183void CalendarView::edit_cut()
2184{ 2184{
2185 Event *anEvent=0; 2185 Event *anEvent=0;
2186 2186
2187 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2187 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2188 2188
2189 if (mViewManager->currentView()->isEventView()) { 2189 if (mViewManager->currentView()->isEventView()) {
2190 if ( incidence && incidence->type() == "Event" ) { 2190 if ( incidence && incidence->type() == "Event" ) {
2191 anEvent = static_cast<Event *>(incidence); 2191 anEvent = static_cast<Event *>(incidence);
2192 } 2192 }
2193 } 2193 }
2194 2194
2195 if (!anEvent) { 2195 if (!anEvent) {
2196 KNotifyClient::beep(); 2196 KNotifyClient::beep();
2197 return; 2197 return;
2198 } 2198 }
2199 DndFactory factory( mCalendar ); 2199 DndFactory factory( mCalendar );
2200 factory.cutIncidence(anEvent); 2200 factory.cutIncidence(anEvent);
2201 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2201 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2202} 2202}
2203 2203
2204void CalendarView::edit_copy() 2204void CalendarView::edit_copy()
2205{ 2205{
2206 Event *anEvent=0; 2206 Event *anEvent=0;
2207 2207
2208 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2208 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2209 2209
2210 if (mViewManager->currentView()->isEventView()) { 2210 if (mViewManager->currentView()->isEventView()) {
2211 if ( incidence && incidence->type() == "Event" ) { 2211 if ( incidence && incidence->type() == "Event" ) {
2212 anEvent = static_cast<Event *>(incidence); 2212 anEvent = static_cast<Event *>(incidence);
2213 } 2213 }
2214 } 2214 }
2215 2215
2216 if (!anEvent) { 2216 if (!anEvent) {
2217 KNotifyClient::beep(); 2217 KNotifyClient::beep();
2218 return; 2218 return;
2219 } 2219 }
2220 DndFactory factory( mCalendar ); 2220 DndFactory factory( mCalendar );
2221 factory.copyIncidence(anEvent); 2221 factory.copyIncidence(anEvent);
2222} 2222}
2223 2223
2224void CalendarView::edit_paste() 2224void CalendarView::edit_paste()
2225{ 2225{
2226 QDate date = mNavigator->selectedDates().first(); 2226 QDate date = mNavigator->selectedDates().first();
2227 2227
2228 DndFactory factory( mCalendar ); 2228 DndFactory factory( mCalendar );
2229 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 2229 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2230 2230
2231 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2231 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2232} 2232}
2233 2233
2234void CalendarView::edit_options() 2234void CalendarView::edit_options()
2235{ 2235{
2236 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 2236 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2237 emit save(); 2237 emit save();
2238 emit saveStopTimer(); 2238 emit saveStopTimer();
2239 mDialogManager->showOptionsDialog(); 2239 mDialogManager->showOptionsDialog();
2240 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 2240 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2241 emit saveStopTimer(); 2241 emit saveStopTimer();
2242 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto apply timezone changes?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 2242 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto apply timezone changes?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
2243 i18n("Timezone settings"),i18n("Reload"))) { 2243 i18n("Timezone settings"),i18n("Reload"))) {
2244 qDebug("KO: TZ reload cancelled "); 2244 qDebug("KO: TZ reload cancelled ");
2245 return; 2245 return;
2246 } 2246 }
2247 qDebug("KO: Timezone change "); 2247 qDebug("KO: Timezone change ");
2248 openCalendar( MainWindow::defaultFileName() ); 2248 openCalendar( MainWindow::defaultFileName() );
2249 setModified(true); 2249 setModified(true);
2250 } 2250 }
2251 else 2251 else
2252 qDebug("KO: No tz change "); 2252 qDebug("KO: No tz change ");
2253 2253
2254} 2254}
2255 2255
2256 2256
2257void CalendarView::slotSelectPickerDate( QDate d) 2257void CalendarView::slotSelectPickerDate( QDate d)
2258{ 2258{
2259 mDateFrame->hide(); 2259 mDateFrame->hide();
2260 if ( mDatePickerMode == 1 ) { 2260 if ( mDatePickerMode == 1 ) {
2261 mNavigator->slotDaySelect( d ); 2261 mNavigator->slotDaySelect( d );
2262 } else if ( mDatePickerMode == 2 ) { 2262 } else if ( mDatePickerMode == 2 ) {
2263 if ( mMoveIncidence->type() == "Todo" ) { 2263 if ( mMoveIncidence->type() == "Todo" ) {
2264 Todo * to = (Todo *) mMoveIncidence; 2264 Todo * to = (Todo *) mMoveIncidence;
2265 QTime tim; 2265 QTime tim;
2266 int len = 0;
2267 if ( to->hasStartDate() && to->hasDueDate() )
2268 len = to->dtStart().secsTo( to->dtDue());
2266 if ( to->hasDueDate() ) 2269 if ( to->hasDueDate() )
2267 tim = to->dtDue().time(); 2270 tim = to->dtDue().time();
2268 else { 2271 else {
2269 tim = QTime ( 0,0,0 ); 2272 tim = QTime ( 0,0,0 );
2270 to->setFloats( true ); 2273 to->setFloats( true );
2271 to->setHasDueDate( true ); 2274 to->setHasDueDate( true );
2272 } 2275 }
2273 QDateTime dt ( d,tim ); 2276 QDateTime dt ( d,tim );
2274 to->setDtDue( dt ); 2277 to->setDtDue( dt );
2278
2279 if ( to->hasStartDate() ) {
2280 if ( len>0 )
2281 to->setDtStart(to->dtDue().addSecs( -len ));
2282 else
2283 if (to->dtStart() > to->dtDue() )
2284 to->setDtStart(to->dtDue().addDays( -3 ));
2285 }
2286
2275 todoChanged( to ); 2287 todoChanged( to );
2276 } else { 2288 } else {
2277 if ( mMoveIncidence->doesRecur() ) { 2289 if ( mMoveIncidence->doesRecur() ) {
2278#if 0 2290#if 0
2279 // PENDING implement this 2291 // PENDING implement this
2280 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2292 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2281 mCalendar()->addIncidence( newInc ); 2293 mCalendar()->addIncidence( newInc );
2282 if ( mMoveIncidence->type() == "Todo" ) 2294 if ( mMoveIncidence->type() == "Todo" )
2283 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2295 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2284 else 2296 else
2285 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2297 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2286 mMoveIncidence = newInc; 2298 mMoveIncidence = newInc;
2287 2299
2288#endif 2300#endif
2289 } 2301 }
2290 QTime tim = mMoveIncidence->dtStart().time(); 2302 QTime tim = mMoveIncidence->dtStart().time();
2291 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2303 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2292 QDateTime dt ( d,tim ); 2304 QDateTime dt ( d,tim );
2293 mMoveIncidence->setDtStart( dt ); 2305 mMoveIncidence->setDtStart( dt );
2294 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2306 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2295 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2307 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2296 } 2308 }
2297 2309
2298 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2310 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2299 } 2311 }
2300} 2312}
2301 2313
2302void CalendarView::removeCategories() 2314void CalendarView::removeCategories()
2303{ 2315{
2304 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2316 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2305 QStringList catList = KOPrefs::instance()->mCustomCategories; 2317 QStringList catList = KOPrefs::instance()->mCustomCategories;
2306 QStringList catIncList; 2318 QStringList catIncList;
2307 QStringList newCatList; 2319 QStringList newCatList;
2308 Incidence* inc = incList.first(); 2320 Incidence* inc = incList.first();
2309 int i; 2321 int i;
2310 int count = 0; 2322 int count = 0;
2311 while ( inc ) { 2323 while ( inc ) {
2312 newCatList.clear(); 2324 newCatList.clear();
2313 catIncList = inc->categories() ; 2325 catIncList = inc->categories() ;
2314 for( i = 0; i< catIncList.count(); ++i ) { 2326 for( i = 0; i< catIncList.count(); ++i ) {
2315 if ( catList.contains (catIncList[i])) 2327 if ( catList.contains (catIncList[i]))
2316 newCatList.append( catIncList[i] ); 2328 newCatList.append( catIncList[i] );
2317 } 2329 }
2318 newCatList.sort(); 2330 newCatList.sort();
2319 inc->setCategories( newCatList.join(",") ); 2331 inc->setCategories( newCatList.join(",") );
2320 inc = incList.next(); 2332 inc = incList.next();
2321 } 2333 }
2322} 2334}
2323 2335
2324int CalendarView::addCategories() 2336int CalendarView::addCategories()
2325{ 2337{
2326 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2338 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2327 QStringList catList = KOPrefs::instance()->mCustomCategories; 2339 QStringList catList = KOPrefs::instance()->mCustomCategories;
2328 QStringList catIncList; 2340 QStringList catIncList;
2329 Incidence* inc = incList.first(); 2341 Incidence* inc = incList.first();
2330 int i; 2342 int i;
2331 int count = 0; 2343 int count = 0;
2332 while ( inc ) { 2344 while ( inc ) {
2333 catIncList = inc->categories() ; 2345 catIncList = inc->categories() ;
2334 for( i = 0; i< catIncList.count(); ++i ) { 2346 for( i = 0; i< catIncList.count(); ++i ) {
2335 if ( !catList.contains (catIncList[i])) { 2347 if ( !catList.contains (catIncList[i])) {
2336 catList.append( catIncList[i] ); 2348 catList.append( catIncList[i] );
2337 //qDebug("add cat %s ", catIncList[i].latin1()); 2349 //qDebug("add cat %s ", catIncList[i].latin1());
2338 ++count; 2350 ++count;
2339 } 2351 }
2340 } 2352 }
2341 inc = incList.next(); 2353 inc = incList.next();
2342 } 2354 }
2343 catList.sort(); 2355 catList.sort();
2344 KOPrefs::instance()->mCustomCategories = catList; 2356 KOPrefs::instance()->mCustomCategories = catList;
2345 return count; 2357 return count;
2346} 2358}
2347 2359
2348void CalendarView::manageCategories() 2360void CalendarView::manageCategories()
2349{ 2361{
2350 KOCatPrefs* cp = new KOCatPrefs(); 2362 KOCatPrefs* cp = new KOCatPrefs();
2351 cp->show(); 2363 cp->show();
2352 int w =cp->sizeHint().width() ; 2364 int w =cp->sizeHint().width() ;
2353 int h = cp->sizeHint().height() ; 2365 int h = cp->sizeHint().height() ;
2354 int dw = QApplication::desktop()->width(); 2366 int dw = QApplication::desktop()->width();
2355 int dh = QApplication::desktop()->height(); 2367 int dh = QApplication::desktop()->height();
2356 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2368 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2357 if ( !cp->exec() ) { 2369 if ( !cp->exec() ) {
2358 delete cp; 2370 delete cp;
2359 return; 2371 return;
2360 } 2372 }
2361 int count = 0; 2373 int count = 0;
2362 if ( cp->addCat() ) { 2374 if ( cp->addCat() ) {
2363 count = addCategories(); 2375 count = addCategories();
2364 if ( count ) { 2376 if ( count ) {
2365 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2377 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2366 writeSettings(); 2378 writeSettings();
2367 } else 2379 } else
2368 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 2380 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
2369 } else { 2381 } else {
2370 removeCategories(); 2382 removeCategories();
2371 updateView(); 2383 updateView();
2372 } 2384 }
2373 delete cp; 2385 delete cp;
2374} 2386}
2375 2387
2376void CalendarView::beamIncidence(Incidence * Inc) 2388void CalendarView::beamIncidence(Incidence * Inc)
2377{ 2389{
2378 QPtrList<Incidence> delSel ; 2390 QPtrList<Incidence> delSel ;
2379 delSel.append(Inc); 2391 delSel.append(Inc);
2380 beamIncidenceList( delSel ); 2392 beamIncidenceList( delSel );
2381} 2393}
2382void CalendarView::beamCalendar() 2394void CalendarView::beamCalendar()
2383{ 2395{
2384 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2396 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2385 //qDebug("beamCalendar() "); 2397 //qDebug("beamCalendar() ");
2386 beamIncidenceList( delSel ); 2398 beamIncidenceList( delSel );
2387} 2399}
2388void CalendarView::beamFilteredCalendar() 2400void CalendarView::beamFilteredCalendar()
2389{ 2401{
2390 QPtrList<Incidence> delSel = mCalendar->incidences(); 2402 QPtrList<Incidence> delSel = mCalendar->incidences();
2391 //qDebug("beamFilteredCalendar() "); 2403 //qDebug("beamFilteredCalendar() ");
2392 beamIncidenceList( delSel ); 2404 beamIncidenceList( delSel );
2393} 2405}
2394void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2406void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2395{ 2407{
2396 if ( beamDialog->exec () == QDialog::Rejected ) 2408 if ( beamDialog->exec () == QDialog::Rejected )
2397 return; 2409 return;
2398#ifdef DESKTOP_VERSION 2410#ifdef DESKTOP_VERSION
2399 QString fn = locateLocal( "tmp", "kopibeamfile" ); 2411 QString fn = locateLocal( "tmp", "kopibeamfile" );
2400#else 2412#else
2401 QString fn = "/tmp/kopibeamfile"; 2413 QString fn = "/tmp/kopibeamfile";
2402#endif 2414#endif
2403 QString mes; 2415 QString mes;
2404 bool createbup = true; 2416 bool createbup = true;
2405 if ( createbup ) { 2417 if ( createbup ) {
2406 QString description = "\n"; 2418 QString description = "\n";
2407 CalendarLocal* cal = new CalendarLocal(); 2419 CalendarLocal* cal = new CalendarLocal();
2408 if ( beamDialog->beamLocal() ) 2420 if ( beamDialog->beamLocal() )
2409 cal->setLocalTime(); 2421 cal->setLocalTime();
2410 else 2422 else
2411 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2423 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2412 Incidence *incidence = delSel.first(); 2424 Incidence *incidence = delSel.first();
2413 bool addText = false; 2425 bool addText = false;
2414 if ( delSel.count() < 10 ) 2426 if ( delSel.count() < 10 )
2415 addText = true; 2427 addText = true;
2416 else { 2428 else {
2417 description.sprintf(i18n(" %d items?"),delSel.count() ); 2429 description.sprintf(i18n(" %d items?"),delSel.count() );
2418 } 2430 }
2419 while ( incidence ) { 2431 while ( incidence ) {
2420 Incidence *in = incidence->clone(); 2432 Incidence *in = incidence->clone();
2421 if ( ! in->summary().isEmpty() ) { 2433 if ( ! in->summary().isEmpty() ) {
2422 in->setDescription(""); 2434 in->setDescription("");
2423 } else { 2435 } else {
2424 in->setSummary( in->description().left(20)); 2436 in->setSummary( in->description().left(20));
2425 in->setDescription(""); 2437 in->setDescription("");
2426 } 2438 }
2427 if ( addText ) 2439 if ( addText )
2428 description += in->summary() + "\n"; 2440 description += in->summary() + "\n";
2429 cal->addIncidence( in ); 2441 cal->addIncidence( in );
2430 incidence = delSel.next(); 2442 incidence = delSel.next();
2431 } 2443 }
2432 if ( beamDialog->beamVcal() ) { 2444 if ( beamDialog->beamVcal() ) {
2433 fn += ".vcs"; 2445 fn += ".vcs";
2434 FileStorage storage( cal, fn, new VCalFormat ); 2446 FileStorage storage( cal, fn, new VCalFormat );
2435 storage.save(); 2447 storage.save();
2436 } else { 2448 } else {
2437 fn += ".ics"; 2449 fn += ".ics";
2438 FileStorage storage( cal, fn, new ICalFormat( ) ); 2450 FileStorage storage( cal, fn, new ICalFormat( ) );
2439 storage.save(); 2451 storage.save();
2440 } 2452 }
2441 delete cal; 2453 delete cal;
2442 mes = i18n("KO/Pi: Ready for beaming"); 2454 mes = i18n("KO/Pi: Ready for beaming");
2443 topLevelWidget()->setCaption(mes); 2455 topLevelWidget()->setCaption(mes);
2444 KApplication::convert2latin1( fn ); 2456 KApplication::convert2latin1( fn );
2445#ifndef DESKTOP_VERSION 2457#ifndef DESKTOP_VERSION
2446 Ir *ir = new Ir( this ); 2458 Ir *ir = new Ir( this );
2447 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2459 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2448 ir->send( fn, description, "text/x-vCalendar" ); 2460 ir->send( fn, description, "text/x-vCalendar" );
2449#endif 2461#endif
2450 } 2462 }
2451} 2463}
2452void CalendarView::beamDone( Ir *ir ) 2464void CalendarView::beamDone( Ir *ir )
2453{ 2465{
2454#ifndef DESKTOP_VERSION 2466#ifndef DESKTOP_VERSION
2455 delete ir; 2467 delete ir;
2456#endif 2468#endif
2457 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 2469 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
2458 topLevelWidget()->raise(); 2470 topLevelWidget()->raise();
2459} 2471}
2460 2472
2461void CalendarView::moveIncidence(Incidence * inc ) 2473void CalendarView::moveIncidence(Incidence * inc )
2462{ 2474{
2463 if ( !inc ) return; 2475 if ( !inc ) return;
2464 showDatePickerPopup(); 2476 showDatePickerPopup();
2465 mDatePickerMode = 2; 2477 mDatePickerMode = 2;
2466 mMoveIncidence = inc ; 2478 mMoveIncidence = inc ;
2467 QDate da; 2479 QDate da;
2468 if ( mMoveIncidence->type() == "Todo" ) { 2480 if ( mMoveIncidence->type() == "Todo" ) {
2469 Todo * to = (Todo *) mMoveIncidence; 2481 Todo * to = (Todo *) mMoveIncidence;
2470 if ( to->hasDueDate() ) 2482 if ( to->hasDueDate() )
2471 da = to->dtDue().date(); 2483 da = to->dtDue().date();
2472 else 2484 else
2473 da = QDate::currentDate(); 2485 da = QDate::currentDate();
2474 } else { 2486 } else {
2475 da = mMoveIncidence->dtStart().date(); 2487 da = mMoveIncidence->dtStart().date();
2476 } 2488 }
2477 //PENDING set date for recurring incidence to date of recurrence 2489 //PENDING set date for recurring incidence to date of recurrence
2478 //mMoveIncidenceOldDate; 2490 //mMoveIncidenceOldDate;
2479 mDatePicker->setDate( da ); 2491 mDatePicker->setDate( da );
2480} 2492}
2481void CalendarView::showDatePickerPopup() 2493void CalendarView::showDatePickerPopup()
2482{ 2494{
2483 if ( mDateFrame->isVisible() ) 2495 if ( mDateFrame->isVisible() )
2484 mDateFrame->hide(); 2496 mDateFrame->hide();
2485 else { 2497 else {
2486 int offX = 0, offY = 0; 2498 int offX = 0, offY = 0;
2487#ifdef DESKTOP_VERSION 2499#ifdef DESKTOP_VERSION
2488 int w =mDatePicker->sizeHint().width() ; 2500 int w =mDatePicker->sizeHint().width() ;
2489 int h = mDatePicker->sizeHint().height() ; 2501 int h = mDatePicker->sizeHint().height() ;
2490 int dw = topLevelWidget()->width(); 2502 int dw = topLevelWidget()->width();
2491 int dh = topLevelWidget()->height(); 2503 int dh = topLevelWidget()->height();
2492 offX = topLevelWidget()->x(); 2504 offX = topLevelWidget()->x();
2493 offY = topLevelWidget()->y(); 2505 offY = topLevelWidget()->y();
2494#else 2506#else
2495 int w =mDatePicker->sizeHint().width() ; 2507 int w =mDatePicker->sizeHint().width() ;
2496 int h = mDatePicker->sizeHint().height() ; 2508 int h = mDatePicker->sizeHint().height() ;
2497 int dw = QApplication::desktop()->width(); 2509 int dw = QApplication::desktop()->width();
2498 int dh = QApplication::desktop()->height(); 2510 int dh = QApplication::desktop()->height();
2499#endif 2511#endif
2500 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 2512 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
2501 mDateFrame->show(); 2513 mDateFrame->show();
2502 } 2514 }
2503} 2515}
2504void CalendarView::showDatePicker( ) 2516void CalendarView::showDatePicker( )
2505{ 2517{
2506 showDatePickerPopup(); 2518 showDatePickerPopup();
2507 mDatePickerMode = 1; 2519 mDatePickerMode = 1;
2508 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2520 mDatePicker->setDate( mNavigator->selectedDates().first() );
2509} 2521}
2510 2522
2511void CalendarView::showEventEditor() 2523void CalendarView::showEventEditor()
2512{ 2524{
2513#ifdef DESKTOP_VERSION 2525#ifdef DESKTOP_VERSION
2514 mEventEditor->show(); 2526 mEventEditor->show();
2515#else 2527#else
2516 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 2528 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
2517 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2529 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2518 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 2530 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
2519 qApp->processEvents(); 2531 qApp->processEvents();
2520 delete mEventEditor; 2532 delete mEventEditor;
2521 mEventEditor = mDialogManager->getEventEditor(); 2533 mEventEditor = mDialogManager->getEventEditor();
2522 topLevelWidget()->setCaption( i18n("") ); 2534 topLevelWidget()->setCaption( i18n("") );
2523 } 2535 }
2524 mEventEditor->showMaximized(); 2536 mEventEditor->showMaximized();
2525#endif 2537#endif
2526} 2538}
2527void CalendarView::showTodoEditor() 2539void CalendarView::showTodoEditor()
2528{ 2540{
2529#ifdef DESKTOP_VERSION 2541#ifdef DESKTOP_VERSION
2530 mTodoEditor->show(); 2542 mTodoEditor->show();
2531#else 2543#else
2532 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 2544 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
2533 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2545 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2534 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 2546 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
2535 qApp->processEvents(); 2547 qApp->processEvents();
2536 delete mTodoEditor; 2548 delete mTodoEditor;
2537 mTodoEditor = mDialogManager->getTodoEditor(); 2549 mTodoEditor = mDialogManager->getTodoEditor();
2538 topLevelWidget()->setCaption( i18n("") ); 2550 topLevelWidget()->setCaption( i18n("") );
2539 } 2551 }
2540 mTodoEditor->showMaximized(); 2552 mTodoEditor->showMaximized();
2541#endif 2553#endif
2542} 2554}
2543 2555
2544void CalendarView::cloneIncidence() 2556void CalendarView::cloneIncidence()
2545{ 2557{
2546 Incidence *incidence = currentSelection(); 2558 Incidence *incidence = currentSelection();
2547 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2559 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2548 if ( incidence ) { 2560 if ( incidence ) {
2549 cloneIncidence(incidence); 2561 cloneIncidence(incidence);
2550 } 2562 }
2551} 2563}
2552void CalendarView::moveIncidence() 2564void CalendarView::moveIncidence()
2553{ 2565{
2554 Incidence *incidence = currentSelection(); 2566 Incidence *incidence = currentSelection();
2555 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2567 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2556 if ( incidence ) { 2568 if ( incidence ) {
2557 moveIncidence(incidence); 2569 moveIncidence(incidence);
2558 } 2570 }
2559} 2571}
2560void CalendarView::beamIncidence() 2572void CalendarView::beamIncidence()
2561{ 2573{
2562 Incidence *incidence = currentSelection(); 2574 Incidence *incidence = currentSelection();
2563 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2575 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2564 if ( incidence ) { 2576 if ( incidence ) {
2565 beamIncidence(incidence); 2577 beamIncidence(incidence);
2566 } 2578 }
2567} 2579}
2568void CalendarView::toggleCancelIncidence() 2580void CalendarView::toggleCancelIncidence()
2569{ 2581{
2570 Incidence *incidence = currentSelection(); 2582 Incidence *incidence = currentSelection();
2571 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2583 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2572 if ( incidence ) { 2584 if ( incidence ) {
2573 cancelIncidence(incidence); 2585 cancelIncidence(incidence);
2574 } 2586 }
2575} 2587}
2576 2588
2577 2589
2578void CalendarView::cancelIncidence(Incidence * inc ) 2590void CalendarView::cancelIncidence(Incidence * inc )
2579{ 2591{
2580 inc->setCancelled( ! inc->cancelled() ); 2592 inc->setCancelled( ! inc->cancelled() );
2581 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2593 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2582 updateView(); 2594 updateView();
2583} 2595}
2584void CalendarView::cloneIncidence(Incidence * orgInc ) 2596void CalendarView::cloneIncidence(Incidence * orgInc )
2585{ 2597{
2586 Incidence * newInc = orgInc->clone(); 2598 Incidence * newInc = orgInc->clone();
2587 newInc->recreate(); 2599 newInc->recreate();
2588 2600
2589 if ( newInc->type() == "Todo" ) { 2601 if ( newInc->type() == "Todo" ) {
2590 Todo* t = (Todo*) newInc; 2602 Todo* t = (Todo*) newInc;
2591 showTodoEditor(); 2603 showTodoEditor();
2592 mTodoEditor->editTodo( t ); 2604 mTodoEditor->editTodo( t );
2593 if ( mTodoEditor->exec() ) { 2605 if ( mTodoEditor->exec() ) {
2594 mCalendar->addTodo( t ); 2606 mCalendar->addTodo( t );
2595 updateView(); 2607 updateView();
2596 } else { 2608 } else {
2597 delete t; 2609 delete t;
2598 } 2610 }
2599 } 2611 }
2600 else { 2612 else {
2601 Event* e = (Event*) newInc; 2613 Event* e = (Event*) newInc;
2602 showEventEditor(); 2614 showEventEditor();
2603 mEventEditor->editEvent( e ); 2615 mEventEditor->editEvent( e );
2604 if ( mEventEditor->exec() ) { 2616 if ( mEventEditor->exec() ) {
2605 mCalendar->addEvent( e ); 2617 mCalendar->addEvent( e );
2606 updateView(); 2618 updateView();
2607 } else { 2619 } else {
2608 delete e; 2620 delete e;
2609 } 2621 }
2610 } 2622 }
2611} 2623}
2612 2624
2613void CalendarView::newEvent() 2625void CalendarView::newEvent()
2614{ 2626{
2615 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2627 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2616 KOAgendaView *aView = mViewManager->agendaView(); 2628 KOAgendaView *aView = mViewManager->agendaView();
2617 if (aView) { 2629 if (aView) {
2618 if (aView->selectionStart().isValid()) { 2630 if (aView->selectionStart().isValid()) {
2619 if (aView->selectedIsAllDay()) { 2631 if (aView->selectedIsAllDay()) {
2620 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2632 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2621 } else { 2633 } else {
2622 newEvent(aView->selectionStart(),aView->selectionEnd()); 2634 newEvent(aView->selectionStart(),aView->selectionEnd());
2623 } 2635 }
2624 return; 2636 return;
2625 } 2637 }
2626 } 2638 }
2627 2639
2628 QDate date = mNavigator->selectedDates().first(); 2640 QDate date = mNavigator->selectedDates().first();
2629 QDateTime current = QDateTime::currentDateTime(); 2641 QDateTime current = QDateTime::currentDateTime();
2630 if ( date <= current.date() ) { 2642 if ( date <= current.date() ) {
2631 int hour = current.time().hour() +1; 2643 int hour = current.time().hour() +1;
2632 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2644 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2633 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2645 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2634 } else 2646 } else
2635 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2647 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2636 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2648 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2637 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2649 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2638} 2650}
2639 2651
2640void CalendarView::newEvent(QDateTime fh) 2652void CalendarView::newEvent(QDateTime fh)
2641{ 2653{
2642 newEvent(fh, 2654 newEvent(fh,
2643 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2655 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2644} 2656}
2645 2657
2646void CalendarView::newEvent(QDate dt) 2658void CalendarView::newEvent(QDate dt)
2647{ 2659{
2648 newEvent(QDateTime(dt, QTime(0,0,0)), 2660 newEvent(QDateTime(dt, QTime(0,0,0)),
2649 QDateTime(dt, QTime(0,0,0)), true); 2661 QDateTime(dt, QTime(0,0,0)), true);
2650} 2662}
2651void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 2663void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
2652{ 2664{
2653 newEvent(fromHint, toHint, false); 2665 newEvent(fromHint, toHint, false);
2654} 2666}
2655void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2667void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2656{ 2668{
2657 2669
2658 showEventEditor(); 2670 showEventEditor();
2659 mEventEditor->newEvent(fromHint,toHint,allDay); 2671 mEventEditor->newEvent(fromHint,toHint,allDay);
2660 if ( mFilterView->filtersEnabled() ) { 2672 if ( mFilterView->filtersEnabled() ) {
2661 CalFilter *filter = mFilterView->selectedFilter(); 2673 CalFilter *filter = mFilterView->selectedFilter();
2662 if (filter && filter->showCategories()) { 2674 if (filter && filter->showCategories()) {
2663 mEventEditor->setCategories(filter->categoryList().join(",") ); 2675 mEventEditor->setCategories(filter->categoryList().join(",") );
2664 } 2676 }
2665 if ( filter ) 2677 if ( filter )
2666 mEventEditor->setSecrecy( filter->getSecrecy() ); 2678 mEventEditor->setSecrecy( filter->getSecrecy() );
2667 } 2679 }
2668} 2680}
2669void CalendarView::todoAdded(Todo * t) 2681void CalendarView::todoAdded(Todo * t)
2670{ 2682{
2671 2683
2672 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2684 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2673 updateTodoViews(); 2685 updateTodoViews();
2674} 2686}
2675void CalendarView::todoChanged(Todo * t) 2687void CalendarView::todoChanged(Todo * t)
2676{ 2688{
2677 emit todoModified( t, 4 ); 2689 emit todoModified( t, 4 );
2678 // updateTodoViews(); 2690 // updateTodoViews();
2679} 2691}
2680void CalendarView::todoToBeDeleted(Todo *) 2692void CalendarView::todoToBeDeleted(Todo *)
2681{ 2693{
2682 //qDebug("todoToBeDeleted(Todo *) "); 2694 //qDebug("todoToBeDeleted(Todo *) ");
2683 updateTodoViews(); 2695 updateTodoViews();
2684} 2696}
2685void CalendarView::todoDeleted() 2697void CalendarView::todoDeleted()
2686{ 2698{
2687 //qDebug(" todoDeleted()"); 2699 //qDebug(" todoDeleted()");
2688 updateTodoViews(); 2700 updateTodoViews();
2689} 2701}
2690 2702
2691 2703
2692void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 2704void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
2693{ 2705{
2694 showTodoEditor(); 2706 showTodoEditor();
2695 mTodoEditor->newTodo(dt,0,allday); 2707 mTodoEditor->newTodo(dt,0,allday);
2696 if ( mFilterView->filtersEnabled() ) { 2708 if ( mFilterView->filtersEnabled() ) {
2697 CalFilter *filter = mFilterView->selectedFilter(); 2709 CalFilter *filter = mFilterView->selectedFilter();
2698 if (filter && filter->showCategories()) { 2710 if (filter && filter->showCategories()) {
2699 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2711 mTodoEditor->setCategories(filter->categoryList().join(",") );
2700 } 2712 }
2701 if ( filter ) 2713 if ( filter )
2702 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2714 mTodoEditor->setSecrecy( filter->getSecrecy() );
2703 } 2715 }
2704} 2716}
2705 2717
2706void CalendarView::newTodo() 2718void CalendarView::newTodo()
2707{ 2719{
2708 newTodoDateTime( QDateTime(),true ); 2720 newTodoDateTime( QDateTime(),true );
2709} 2721}
2710 2722
2711void CalendarView::newSubTodo() 2723void CalendarView::newSubTodo()
2712{ 2724{
2713 Todo *todo = selectedTodo(); 2725 Todo *todo = selectedTodo();
2714 if ( todo ) newSubTodo( todo ); 2726 if ( todo ) newSubTodo( todo );
2715} 2727}
2716 2728
2717void CalendarView::newSubTodo(Todo *parentEvent) 2729void CalendarView::newSubTodo(Todo *parentEvent)
2718{ 2730{
2719 2731
2720 showTodoEditor(); 2732 showTodoEditor();
2721 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 2733 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
2722} 2734}
2723 2735
2724void CalendarView::newFloatingEvent() 2736void CalendarView::newFloatingEvent()
2725{ 2737{
2726 DateList tmpList = mNavigator->selectedDates(); 2738 DateList tmpList = mNavigator->selectedDates();
2727 QDate date = tmpList.first(); 2739 QDate date = tmpList.first();
2728 2740
2729 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2741 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2730 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2742 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2731} 2743}
2732 2744
2733 2745
2734void CalendarView::editEvent( Event *event ) 2746void CalendarView::editEvent( Event *event )
2735{ 2747{
2736 2748
2737 if ( !event ) return; 2749 if ( !event ) return;
2738 if ( event->isReadOnly() ) { 2750 if ( event->isReadOnly() ) {
2739 showEvent( event ); 2751 showEvent( event );
2740 return; 2752 return;
2741 } 2753 }
2742 showEventEditor(); 2754 showEventEditor();
2743 mEventEditor->editEvent( event , mFlagEditDescription); 2755 mEventEditor->editEvent( event , mFlagEditDescription);
2744} 2756}
2745void CalendarView::editJournal( Journal *jour ) 2757void CalendarView::editJournal( Journal *jour )
2746{ 2758{
2747 if ( !jour ) return; 2759 if ( !jour ) return;
2748 mDialogManager->hideSearchDialog(); 2760 mDialogManager->hideSearchDialog();
2749 mViewManager->showJournalView(); 2761 mViewManager->showJournalView();
2750 mNavigator->slotDaySelect( jour->dtStart().date() ); 2762 mNavigator->slotDaySelect( jour->dtStart().date() );
2751} 2763}
2752void CalendarView::editTodo( Todo *todo ) 2764void CalendarView::editTodo( Todo *todo )
2753{ 2765{
2754 if ( !todo ) return; 2766 if ( !todo ) return;
2755 2767
2756 if ( todo->isReadOnly() ) { 2768 if ( todo->isReadOnly() ) {
2757 showTodo( todo ); 2769 showTodo( todo );
2758 return; 2770 return;
2759 } 2771 }
2760 showTodoEditor(); 2772 showTodoEditor();
2761 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2773 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2762 2774
2763} 2775}
2764 2776
2765KOEventViewerDialog* CalendarView::getEventViewerDialog() 2777KOEventViewerDialog* CalendarView::getEventViewerDialog()
2766{ 2778{
2767 if ( !mEventViewerDialog ) { 2779 if ( !mEventViewerDialog ) {
2768 mEventViewerDialog = new KOEventViewerDialog(this); 2780 mEventViewerDialog = new KOEventViewerDialog(this);
2769 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2781 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2770 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2782 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2771 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2783 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2772 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2784 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2773 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2785 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2774 viewManager(), SLOT( showAgendaView( bool ) ) ); 2786 viewManager(), SLOT( showAgendaView( bool ) ) );
2775 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 2787 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
2776 this, SLOT( todoChanged(Todo *) ) ); 2788 this, SLOT( todoChanged(Todo *) ) );
2777 mEventViewerDialog->resize( 640, 480 ); 2789 mEventViewerDialog->resize( 640, 480 );
2778 2790
2779 } 2791 }
2780 return mEventViewerDialog; 2792 return mEventViewerDialog;
2781} 2793}
2782void CalendarView::showEvent(Event *event) 2794void CalendarView::showEvent(Event *event)
2783{ 2795{
2784 getEventViewerDialog()->setEvent(event); 2796 getEventViewerDialog()->setEvent(event);
2785 getEventViewerDialog()->showMe(); 2797 getEventViewerDialog()->showMe();
2786} 2798}
2787 2799
2788void CalendarView::showTodo(Todo *event) 2800void CalendarView::showTodo(Todo *event)
2789{ 2801{
2790 getEventViewerDialog()->setTodo(event); 2802 getEventViewerDialog()->setTodo(event);
2791 getEventViewerDialog()->showMe(); 2803 getEventViewerDialog()->showMe();
2792} 2804}
2793void CalendarView::showJournal( Journal *jour ) 2805void CalendarView::showJournal( Journal *jour )
2794{ 2806{
2795 getEventViewerDialog()->setJournal(jour); 2807 getEventViewerDialog()->setJournal(jour);
2796 getEventViewerDialog()->showMe(); 2808 getEventViewerDialog()->showMe();
2797 2809
2798} 2810}
2799// void CalendarView::todoModified (Todo *event, int changed) 2811// void CalendarView::todoModified (Todo *event, int changed)
2800// { 2812// {
2801// // if (mDialogList.find (event) != mDialogList.end ()) { 2813// // if (mDialogList.find (event) != mDialogList.end ()) {
2802// // kdDebug() << "Todo modified and open" << endl; 2814// // kdDebug() << "Todo modified and open" << endl;
2803// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2815// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2804// // temp->modified (changed); 2816// // temp->modified (changed);
2805 2817
2806// // } 2818// // }
2807 2819
2808// mViewManager->updateView(); 2820// mViewManager->updateView();
2809// } 2821// }
2810 2822
2811void CalendarView::appointment_show() 2823void CalendarView::appointment_show()
2812{ 2824{
2813 Event *anEvent = 0; 2825 Event *anEvent = 0;
2814 2826
2815 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2827 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2816 2828
2817 if (mViewManager->currentView()->isEventView()) { 2829 if (mViewManager->currentView()->isEventView()) {
2818 if ( incidence && incidence->type() == "Event" ) { 2830 if ( incidence && incidence->type() == "Event" ) {
2819 anEvent = static_cast<Event *>(incidence); 2831 anEvent = static_cast<Event *>(incidence);
2820 } 2832 }
2821 } 2833 }
2822 2834
2823 if (!anEvent) { 2835 if (!anEvent) {
2824 KNotifyClient::beep(); 2836 KNotifyClient::beep();
2825 return; 2837 return;
2826 } 2838 }
2827 2839
2828 showEvent(anEvent); 2840 showEvent(anEvent);
2829} 2841}
2830 2842
2831void CalendarView::appointment_edit() 2843void CalendarView::appointment_edit()
2832{ 2844{
2833 Event *anEvent = 0; 2845 Event *anEvent = 0;
2834 2846
2835 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2847 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2836 2848
2837 if (mViewManager->currentView()->isEventView()) { 2849 if (mViewManager->currentView()->isEventView()) {
2838 if ( incidence && incidence->type() == "Event" ) { 2850 if ( incidence && incidence->type() == "Event" ) {
2839 anEvent = static_cast<Event *>(incidence); 2851 anEvent = static_cast<Event *>(incidence);
2840 } 2852 }
2841 } 2853 }
2842 2854
2843 if (!anEvent) { 2855 if (!anEvent) {
2844 KNotifyClient::beep(); 2856 KNotifyClient::beep();
2845 return; 2857 return;
2846 } 2858 }
2847 2859
2848 editEvent(anEvent); 2860 editEvent(anEvent);
2849} 2861}
2850 2862
2851void CalendarView::appointment_delete() 2863void CalendarView::appointment_delete()
2852{ 2864{
2853 Event *anEvent = 0; 2865 Event *anEvent = 0;
2854 2866
2855 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2867 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2856 2868
2857 if (mViewManager->currentView()->isEventView()) { 2869 if (mViewManager->currentView()->isEventView()) {
2858 if ( incidence && incidence->type() == "Event" ) { 2870 if ( incidence && incidence->type() == "Event" ) {
2859 anEvent = static_cast<Event *>(incidence); 2871 anEvent = static_cast<Event *>(incidence);
2860 } 2872 }
2861 } 2873 }
2862 2874
2863 if (!anEvent) { 2875 if (!anEvent) {
2864 KNotifyClient::beep(); 2876 KNotifyClient::beep();
2865 return; 2877 return;
2866 } 2878 }
2867 2879
2868 deleteEvent(anEvent); 2880 deleteEvent(anEvent);
2869} 2881}
2870 2882
2871void CalendarView::todo_resub( Todo * parent, Todo * sub ) 2883void CalendarView::todo_resub( Todo * parent, Todo * sub )
2872{ 2884{
2873 if (!sub) return; 2885 if (!sub) return;
2874 if (!parent) return; 2886 if (!parent) return;
2875 if ( sub->relatedTo() ) 2887 if ( sub->relatedTo() )
2876 sub->relatedTo()->removeRelation(sub); 2888 sub->relatedTo()->removeRelation(sub);
2877 sub->setRelatedTo(parent); 2889 sub->setRelatedTo(parent);
2878 sub->setRelatedToUid(parent->uid()); 2890 sub->setRelatedToUid(parent->uid());
2879 parent->addRelation(sub); 2891 parent->addRelation(sub);
2880 sub->updated(); 2892 sub->updated();
2881 parent->updated(); 2893 parent->updated();
2882 setModified(true); 2894 setModified(true);
2883 updateView(); 2895 updateView();
2884} 2896}
2885void CalendarView::todo_unsub(Todo *anTodo ) 2897void CalendarView::todo_unsub(Todo *anTodo )
2886{ 2898{
2887 // Todo *anTodo = selectedTodo(); 2899 // Todo *anTodo = selectedTodo();
2888 if (!anTodo) return; 2900 if (!anTodo) return;
2889 if (!anTodo->relatedTo()) return; 2901 if (!anTodo->relatedTo()) return;
2890 anTodo->relatedTo()->removeRelation(anTodo); 2902 anTodo->relatedTo()->removeRelation(anTodo);
2891 anTodo->setRelatedTo(0); 2903 anTodo->setRelatedTo(0);
2892 anTodo->updated(); 2904 anTodo->updated();
2893 anTodo->setRelatedToUid(""); 2905 anTodo->setRelatedToUid("");
2894 setModified(true); 2906 setModified(true);
2895 updateView(); 2907 updateView();
2896} 2908}
2897 2909
2898void CalendarView::deleteTodo(Todo *todo) 2910void CalendarView::deleteTodo(Todo *todo)
2899{ 2911{
2900 if (!todo) { 2912 if (!todo) {
2901 KNotifyClient::beep(); 2913 KNotifyClient::beep();
2902 return; 2914 return;
2903 } 2915 }
2904 if (KOPrefs::instance()->mConfirm) { 2916 if (KOPrefs::instance()->mConfirm) {
2905 QString text = todo->summary().left(20); 2917 QString text = todo->summary().left(20);
2906 if (!todo->relations().isEmpty()) { 2918 if (!todo->relations().isEmpty()) {
2907 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 2919 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
2908 2920
2909 } 2921 }
2910 switch (msgItemDelete(text)) { 2922 switch (msgItemDelete(text)) {
2911 case KMessageBox::Continue: // OK 2923 case KMessageBox::Continue: // OK
2912 bool deleteT = false; 2924 bool deleteT = false;
2913 if (!todo->relations().isEmpty()) { 2925 if (!todo->relations().isEmpty()) {
2914 deleteT = removeCompletedSubTodos( todo ); 2926 deleteT = removeCompletedSubTodos( todo );
2915 } 2927 }
2916 // deleteT == true: todo already deleted in removeCompletedSubTodos 2928 // deleteT == true: todo already deleted in removeCompletedSubTodos
2917 if ( !deleteT ) { 2929 if ( !deleteT ) {
2918 checkExternalId( todo ); 2930 checkExternalId( todo );
2919 calendar()->deleteTodo(todo); 2931 calendar()->deleteTodo(todo);
2920 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2932 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2921 updateView(); 2933 updateView();
2922 } 2934 }
2923 break; 2935 break;
2924 } // switch 2936 } // switch
2925 } else { 2937 } else {
2926 checkExternalId( todo ); 2938 checkExternalId( todo );
2927 mCalendar->deleteTodo(todo); 2939 mCalendar->deleteTodo(todo);
2928 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2940 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2929 updateView(); 2941 updateView();
2930 } 2942 }
2931 2943
2932 emit updateSearchDialog(); 2944 emit updateSearchDialog();
2933} 2945}
2934void CalendarView::deleteJournal(Journal *jour) 2946void CalendarView::deleteJournal(Journal *jour)
2935{ 2947{
2936 if (!jour) { 2948 if (!jour) {
2937 KNotifyClient::beep(); 2949 KNotifyClient::beep();
2938 return; 2950 return;
2939 } 2951 }
2940 if (KOPrefs::instance()->mConfirm) { 2952 if (KOPrefs::instance()->mConfirm) {
2941 switch (msgItemDelete( jour->description().left(20))) { 2953 switch (msgItemDelete( jour->description().left(20))) {
2942 case KMessageBox::Continue: // OK 2954 case KMessageBox::Continue: // OK
2943 calendar()->deleteJournal(jour); 2955 calendar()->deleteJournal(jour);
2944 updateView(); 2956 updateView();
2945 break; 2957 break;
2946 } // switch 2958 } // switch
2947 } else { 2959 } else {
2948 calendar()->deleteJournal(jour);; 2960 calendar()->deleteJournal(jour);;
2949 updateView(); 2961 updateView();
2950 } 2962 }
2951 emit updateSearchDialog(); 2963 emit updateSearchDialog();
2952} 2964}
2953 2965
2954void CalendarView::deleteEvent(Event *anEvent) 2966void CalendarView::deleteEvent(Event *anEvent)
2955{ 2967{
2956 if (!anEvent) { 2968 if (!anEvent) {
2957 KNotifyClient::beep(); 2969 KNotifyClient::beep();
2958 return; 2970 return;
2959 } 2971 }
2960 2972
2961 if (anEvent->recurrence()->doesRecur()) { 2973 if (anEvent->recurrence()->doesRecur()) {
2962 QDate itemDate = mViewManager->currentSelectionDate(); 2974 QDate itemDate = mViewManager->currentSelectionDate();
2963 int km; 2975 int km;
2964 if (!itemDate.isValid()) { 2976 if (!itemDate.isValid()) {
2965 //kdDebug() << "Date Not Valid" << endl; 2977 //kdDebug() << "Date Not Valid" << endl;
2966 if (KOPrefs::instance()->mConfirm) { 2978 if (KOPrefs::instance()->mConfirm) {
2967 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 2979 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
2968 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2980 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2969 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2981 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2970 if ( km == KMessageBox::Continue ) 2982 if ( km == KMessageBox::Continue )
2971 km = KMessageBox::No; // No = all below 2983 km = KMessageBox::No; // No = all below
2972 } else 2984 } else
2973 km = KMessageBox::No; 2985 km = KMessageBox::No;
2974 } else { 2986 } else {
2975 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + 2987 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) +
2976 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2988 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2977 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2989 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2978 i18n("KO/Pi Confirmation"),i18n("Current"), 2990 i18n("KO/Pi Confirmation"),i18n("Current"),
2979 i18n("All")); 2991 i18n("All"));
2980 } 2992 }
2981 switch(km) { 2993 switch(km) {
2982 2994
2983 case KMessageBox::No: // Continue // all 2995 case KMessageBox::No: // Continue // all
2984 //qDebug("KMessageBox::No "); 2996 //qDebug("KMessageBox::No ");
2985 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2997 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2986 schedule(Scheduler::Cancel,anEvent); 2998 schedule(Scheduler::Cancel,anEvent);
2987 2999
2988 checkExternalId( anEvent); 3000 checkExternalId( anEvent);
2989 mCalendar->deleteEvent(anEvent); 3001 mCalendar->deleteEvent(anEvent);
2990 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 3002 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2991 break; 3003 break;
2992 3004
2993 // Disabled because it does not work 3005 // Disabled because it does not work
2994 //#if 0 3006 //#if 0
2995 case KMessageBox::Yes: // just this one 3007 case KMessageBox::Yes: // just this one
2996 //QDate qd = mNavigator->selectedDates().first(); 3008 //QDate qd = mNavigator->selectedDates().first();
2997 //if (!qd.isValid()) { 3009 //if (!qd.isValid()) {
2998 // kdDebug() << "no date selected, or invalid date" << endl; 3010 // kdDebug() << "no date selected, or invalid date" << endl;
2999 // KNotifyClient::beep(); 3011 // KNotifyClient::beep();
3000 // return; 3012 // return;
3001 //} 3013 //}
3002 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 3014 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
3003 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 3015 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
3004 anEvent->addExDate(itemDate); 3016 anEvent->addExDate(itemDate);
3005 int duration = anEvent->recurrence()->duration(); 3017 int duration = anEvent->recurrence()->duration();
3006 if ( duration > 0 ) { 3018 if ( duration > 0 ) {
3007 anEvent->recurrence()->setDuration( duration - 1 ); 3019 anEvent->recurrence()->setDuration( duration - 1 );
3008 } 3020 }
3009 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 3021 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
3010 } 3022 }
3011 break; 3023 break;
3012 //#endif 3024 //#endif
3013 } // switch 3025 } // switch
3014 } else { 3026 } else {
3015 if (KOPrefs::instance()->mConfirm) { 3027 if (KOPrefs::instance()->mConfirm) {
3016 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 3028 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
3017 i18n("\nAre you sure you want\nto delete this event?"), 3029 i18n("\nAre you sure you want\nto delete this event?"),
3018 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 3030 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3019 case KMessageBox::Continue: // OK 3031 case KMessageBox::Continue: // OK
3020 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3032 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3021 schedule(Scheduler::Cancel,anEvent); 3033 schedule(Scheduler::Cancel,anEvent);
3022 checkExternalId( anEvent); 3034 checkExternalId( anEvent);
3023 mCalendar->deleteEvent(anEvent); 3035 mCalendar->deleteEvent(anEvent);
3024 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3036 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3025 break; 3037 break;
3026 } // switch 3038 } // switch
3027 } else { 3039 } else {
3028 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3040 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3029 schedule(Scheduler::Cancel,anEvent); 3041 schedule(Scheduler::Cancel,anEvent);
3030 checkExternalId( anEvent); 3042 checkExternalId( anEvent);
3031 mCalendar->deleteEvent(anEvent); 3043 mCalendar->deleteEvent(anEvent);
3032 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3044 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3033 } 3045 }
3034 } // if-else 3046 } // if-else
3035 emit updateSearchDialog(); 3047 emit updateSearchDialog();
3036} 3048}
3037 3049
3038bool CalendarView::deleteEvent(const QString &uid) 3050bool CalendarView::deleteEvent(const QString &uid)
3039{ 3051{
3040 Event *ev = mCalendar->event(uid); 3052 Event *ev = mCalendar->event(uid);
3041 if (ev) { 3053 if (ev) {
3042 deleteEvent(ev); 3054 deleteEvent(ev);
@@ -3045,868 +3057,868 @@ bool CalendarView::deleteEvent(const QString &uid)
3045 return false; 3057 return false;
3046 } 3058 }
3047} 3059}
3048 3060
3049/*****************************************************************************/ 3061/*****************************************************************************/
3050 3062
3051void CalendarView::action_mail() 3063void CalendarView::action_mail()
3052{ 3064{
3053#ifndef KORG_NOMAIL 3065#ifndef KORG_NOMAIL
3054 KOMailClient mailClient; 3066 KOMailClient mailClient;
3055 3067
3056 Incidence *incidence = currentSelection(); 3068 Incidence *incidence = currentSelection();
3057 3069
3058 if (!incidence) { 3070 if (!incidence) {
3059 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3071 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3060 return; 3072 return;
3061 } 3073 }
3062 if(incidence->attendeeCount() == 0 ) { 3074 if(incidence->attendeeCount() == 0 ) {
3063 KMessageBox::sorry(this, 3075 KMessageBox::sorry(this,
3064 i18n("Can't generate mail:\nNo attendees defined.\n")); 3076 i18n("Can't generate mail:\nNo attendees defined.\n"));
3065 return; 3077 return;
3066 } 3078 }
3067 3079
3068 CalendarLocal cal_tmp; 3080 CalendarLocal cal_tmp;
3069 Event *event = 0; 3081 Event *event = 0;
3070 Event *ev = 0; 3082 Event *ev = 0;
3071 if ( incidence && incidence->type() == "Event" ) { 3083 if ( incidence && incidence->type() == "Event" ) {
3072 event = static_cast<Event *>(incidence); 3084 event = static_cast<Event *>(incidence);
3073 ev = new Event(*event); 3085 ev = new Event(*event);
3074 cal_tmp.addEvent(ev); 3086 cal_tmp.addEvent(ev);
3075 } 3087 }
3076 ICalFormat mForm(); 3088 ICalFormat mForm();
3077 QString attachment = mForm.toString( &cal_tmp ); 3089 QString attachment = mForm.toString( &cal_tmp );
3078 if (ev) delete(ev); 3090 if (ev) delete(ev);
3079 3091
3080 mailClient.mailAttendees(currentSelection(), attachment); 3092 mailClient.mailAttendees(currentSelection(), attachment);
3081 3093
3082#endif 3094#endif
3083 3095
3084#if 0 3096#if 0
3085 Event *anEvent = 0; 3097 Event *anEvent = 0;
3086 if (mViewManager->currentView()->isEventView()) { 3098 if (mViewManager->currentView()->isEventView()) {
3087 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 3099 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
3088 } 3100 }
3089 3101
3090 if (!anEvent) { 3102 if (!anEvent) {
3091 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3103 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3092 return; 3104 return;
3093 } 3105 }
3094 if(anEvent->attendeeCount() == 0 ) { 3106 if(anEvent->attendeeCount() == 0 ) {
3095 KMessageBox::sorry(this, 3107 KMessageBox::sorry(this,
3096 i18n("Can't generate mail:\nNo attendees defined.\n")); 3108 i18n("Can't generate mail:\nNo attendees defined.\n"));
3097 return; 3109 return;
3098 } 3110 }
3099 3111
3100 mailobject.emailEvent(anEvent); 3112 mailobject.emailEvent(anEvent);
3101#endif 3113#endif
3102} 3114}
3103 3115
3104 3116
3105void CalendarView::schedule_publish(Incidence *incidence) 3117void CalendarView::schedule_publish(Incidence *incidence)
3106{ 3118{
3107 Event *event = 0; 3119 Event *event = 0;
3108 Todo *todo = 0; 3120 Todo *todo = 0;
3109 3121
3110 if (incidence == 0) { 3122 if (incidence == 0) {
3111 incidence = mViewManager->currentView()->selectedIncidences().first(); 3123 incidence = mViewManager->currentView()->selectedIncidences().first();
3112 if (incidence == 0) { 3124 if (incidence == 0) {
3113 incidence = mTodoList->selectedIncidences().first(); 3125 incidence = mTodoList->selectedIncidences().first();
3114 } 3126 }
3115 } 3127 }
3116 if ( incidence && incidence->type() == "Event" ) { 3128 if ( incidence && incidence->type() == "Event" ) {
3117 event = static_cast<Event *>(incidence); 3129 event = static_cast<Event *>(incidence);
3118 } else { 3130 } else {
3119 if ( incidence && incidence->type() == "Todo" ) { 3131 if ( incidence && incidence->type() == "Todo" ) {
3120 todo = static_cast<Todo *>(incidence); 3132 todo = static_cast<Todo *>(incidence);
3121 } 3133 }
3122 } 3134 }
3123 3135
3124 if (!event && !todo) { 3136 if (!event && !todo) {
3125 KMessageBox::sorry(this,i18n("No event selected.")); 3137 KMessageBox::sorry(this,i18n("No event selected."));
3126 return; 3138 return;
3127 } 3139 }
3128 3140
3129 PublishDialog *publishdlg = new PublishDialog(); 3141 PublishDialog *publishdlg = new PublishDialog();
3130 if (incidence->attendeeCount()>0) { 3142 if (incidence->attendeeCount()>0) {
3131 QPtrList<Attendee> attendees = incidence->attendees(); 3143 QPtrList<Attendee> attendees = incidence->attendees();
3132 attendees.first(); 3144 attendees.first();
3133 while ( attendees.current()!=0 ) { 3145 while ( attendees.current()!=0 ) {
3134 publishdlg->addAttendee(attendees.current()); 3146 publishdlg->addAttendee(attendees.current());
3135 attendees.next(); 3147 attendees.next();
3136 } 3148 }
3137 } 3149 }
3138 bool send = true; 3150 bool send = true;
3139 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 3151 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3140 if ( publishdlg->exec() != QDialog::Accepted ) 3152 if ( publishdlg->exec() != QDialog::Accepted )
3141 send = false; 3153 send = false;
3142 } 3154 }
3143 if ( send ) { 3155 if ( send ) {
3144 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3156 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3145 if ( event ) { 3157 if ( event ) {
3146 Event *ev = new Event(*event); 3158 Event *ev = new Event(*event);
3147 ev->registerObserver(0); 3159 ev->registerObserver(0);
3148 ev->clearAttendees(); 3160 ev->clearAttendees();
3149 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3161 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3150 delete(ev); 3162 delete(ev);
3151 } 3163 }
3152 } else { 3164 } else {
3153 if ( todo ) { 3165 if ( todo ) {
3154 Todo *ev = new Todo(*todo); 3166 Todo *ev = new Todo(*todo);
3155 ev->registerObserver(0); 3167 ev->registerObserver(0);
3156 ev->clearAttendees(); 3168 ev->clearAttendees();
3157 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3169 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3158 delete(ev); 3170 delete(ev);
3159 } 3171 }
3160 } 3172 }
3161 } 3173 }
3162 } 3174 }
3163 delete publishdlg; 3175 delete publishdlg;
3164} 3176}
3165 3177
3166void CalendarView::schedule_request(Incidence *incidence) 3178void CalendarView::schedule_request(Incidence *incidence)
3167{ 3179{
3168 schedule(Scheduler::Request,incidence); 3180 schedule(Scheduler::Request,incidence);
3169} 3181}
3170 3182
3171void CalendarView::schedule_refresh(Incidence *incidence) 3183void CalendarView::schedule_refresh(Incidence *incidence)
3172{ 3184{
3173 schedule(Scheduler::Refresh,incidence); 3185 schedule(Scheduler::Refresh,incidence);
3174} 3186}
3175 3187
3176void CalendarView::schedule_cancel(Incidence *incidence) 3188void CalendarView::schedule_cancel(Incidence *incidence)
3177{ 3189{
3178 schedule(Scheduler::Cancel,incidence); 3190 schedule(Scheduler::Cancel,incidence);
3179} 3191}
3180 3192
3181void CalendarView::schedule_add(Incidence *incidence) 3193void CalendarView::schedule_add(Incidence *incidence)
3182{ 3194{
3183 schedule(Scheduler::Add,incidence); 3195 schedule(Scheduler::Add,incidence);
3184} 3196}
3185 3197
3186void CalendarView::schedule_reply(Incidence *incidence) 3198void CalendarView::schedule_reply(Incidence *incidence)
3187{ 3199{
3188 schedule(Scheduler::Reply,incidence); 3200 schedule(Scheduler::Reply,incidence);
3189} 3201}
3190 3202
3191void CalendarView::schedule_counter(Incidence *incidence) 3203void CalendarView::schedule_counter(Incidence *incidence)
3192{ 3204{
3193 schedule(Scheduler::Counter,incidence); 3205 schedule(Scheduler::Counter,incidence);
3194} 3206}
3195 3207
3196void CalendarView::schedule_declinecounter(Incidence *incidence) 3208void CalendarView::schedule_declinecounter(Incidence *incidence)
3197{ 3209{
3198 schedule(Scheduler::Declinecounter,incidence); 3210 schedule(Scheduler::Declinecounter,incidence);
3199} 3211}
3200 3212
3201void CalendarView::schedule_publish_freebusy(int daysToPublish) 3213void CalendarView::schedule_publish_freebusy(int daysToPublish)
3202{ 3214{
3203 QDateTime start = QDateTime::currentDateTime(); 3215 QDateTime start = QDateTime::currentDateTime();
3204 QDateTime end = start.addDays(daysToPublish); 3216 QDateTime end = start.addDays(daysToPublish);
3205 3217
3206 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 3218 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
3207 freebusy->setOrganizer(KOPrefs::instance()->email()); 3219 freebusy->setOrganizer(KOPrefs::instance()->email());
3208 3220
3209 3221
3210 PublishDialog *publishdlg = new PublishDialog(); 3222 PublishDialog *publishdlg = new PublishDialog();
3211 if ( publishdlg->exec() == QDialog::Accepted ) { 3223 if ( publishdlg->exec() == QDialog::Accepted ) {
3212 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3224 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3213 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 3225 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
3214 delete(freebusy); 3226 delete(freebusy);
3215 } 3227 }
3216 } 3228 }
3217 delete publishdlg; 3229 delete publishdlg;
3218} 3230}
3219 3231
3220void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 3232void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
3221{ 3233{
3222 Event *event = 0; 3234 Event *event = 0;
3223 Todo *todo = 0; 3235 Todo *todo = 0;
3224 3236
3225 if (incidence == 0) { 3237 if (incidence == 0) {
3226 incidence = mViewManager->currentView()->selectedIncidences().first(); 3238 incidence = mViewManager->currentView()->selectedIncidences().first();
3227 if (incidence == 0) { 3239 if (incidence == 0) {
3228 incidence = mTodoList->selectedIncidences().first(); 3240 incidence = mTodoList->selectedIncidences().first();
3229 } 3241 }
3230 } 3242 }
3231 if ( incidence && incidence->type() == "Event" ) { 3243 if ( incidence && incidence->type() == "Event" ) {
3232 event = static_cast<Event *>(incidence); 3244 event = static_cast<Event *>(incidence);
3233 } 3245 }
3234 if ( incidence && incidence->type() == "Todo" ) { 3246 if ( incidence && incidence->type() == "Todo" ) {
3235 todo = static_cast<Todo *>(incidence); 3247 todo = static_cast<Todo *>(incidence);
3236 } 3248 }
3237 3249
3238 if (!event && !todo) { 3250 if (!event && !todo) {
3239 KMessageBox::sorry(this,i18n("No event selected.")); 3251 KMessageBox::sorry(this,i18n("No event selected."));
3240 return; 3252 return;
3241 } 3253 }
3242 3254
3243 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3255 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3244 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3256 KMessageBox::sorry(this,i18n("The event has no attendees."));
3245 return; 3257 return;
3246 } 3258 }
3247 3259
3248 Event *ev = 0; 3260 Event *ev = 0;
3249 if (event) ev = new Event(*event); 3261 if (event) ev = new Event(*event);
3250 Todo *to = 0; 3262 Todo *to = 0;
3251 if (todo) to = new Todo(*todo); 3263 if (todo) to = new Todo(*todo);
3252 3264
3253 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3265 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3254 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3266 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3255 if (!me) { 3267 if (!me) {
3256 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3268 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3257 return; 3269 return;
3258 } 3270 }
3259 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3271 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3260 StatusDialog *statdlg = new StatusDialog(this); 3272 StatusDialog *statdlg = new StatusDialog(this);
3261 if (!statdlg->exec()==QDialog::Accepted) return; 3273 if (!statdlg->exec()==QDialog::Accepted) return;
3262 me->setStatus( statdlg->status() ); 3274 me->setStatus( statdlg->status() );
3263 delete(statdlg); 3275 delete(statdlg);
3264 } 3276 }
3265 Attendee *menew = new Attendee(*me); 3277 Attendee *menew = new Attendee(*me);
3266 if (ev) { 3278 if (ev) {
3267 ev->clearAttendees(); 3279 ev->clearAttendees();
3268 ev->addAttendee(menew,false); 3280 ev->addAttendee(menew,false);
3269 } else { 3281 } else {
3270 if (to) { 3282 if (to) {
3271 todo->clearAttendees(); 3283 todo->clearAttendees();
3272 todo->addAttendee(menew,false); 3284 todo->addAttendee(menew,false);
3273 } 3285 }
3274 } 3286 }
3275 } 3287 }
3276 3288
3277 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3289 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3278 if (ev) { 3290 if (ev) {
3279 if ( !dlg->addMessage(ev,method) ) delete(ev); 3291 if ( !dlg->addMessage(ev,method) ) delete(ev);
3280 } else { 3292 } else {
3281 if (to) { 3293 if (to) {
3282 if ( !dlg->addMessage(to,method) ) delete(to); 3294 if ( !dlg->addMessage(to,method) ) delete(to);
3283 } 3295 }
3284 } 3296 }
3285} 3297}
3286 3298
3287void CalendarView::openAddressbook() 3299void CalendarView::openAddressbook()
3288{ 3300{
3289 KRun::runCommand("kaddressbook"); 3301 KRun::runCommand("kaddressbook");
3290} 3302}
3291 3303
3292void CalendarView::setModified(bool modified) 3304void CalendarView::setModified(bool modified)
3293{ 3305{
3294 if ( modified ) 3306 if ( modified )
3295 emit signalmodified(); 3307 emit signalmodified();
3296 if (mModified != modified) { 3308 if (mModified != modified) {
3297 mModified = modified; 3309 mModified = modified;
3298 emit modifiedChanged(mModified); 3310 emit modifiedChanged(mModified);
3299 } 3311 }
3300} 3312}
3301 3313
3302bool CalendarView::isReadOnly() 3314bool CalendarView::isReadOnly()
3303{ 3315{
3304 return mReadOnly; 3316 return mReadOnly;
3305} 3317}
3306 3318
3307void CalendarView::setReadOnly(bool readOnly) 3319void CalendarView::setReadOnly(bool readOnly)
3308{ 3320{
3309 if (mReadOnly != readOnly) { 3321 if (mReadOnly != readOnly) {
3310 mReadOnly = readOnly; 3322 mReadOnly = readOnly;
3311 emit readOnlyChanged(mReadOnly); 3323 emit readOnlyChanged(mReadOnly);
3312 } 3324 }
3313} 3325}
3314 3326
3315bool CalendarView::isModified() 3327bool CalendarView::isModified()
3316{ 3328{
3317 return mModified; 3329 return mModified;
3318} 3330}
3319 3331
3320void CalendarView::printSetup() 3332void CalendarView::printSetup()
3321{ 3333{
3322#ifndef KORG_NOPRINTER 3334#ifndef KORG_NOPRINTER
3323 createPrinter(); 3335 createPrinter();
3324 3336
3325 mCalPrinter->setupPrinter(); 3337 mCalPrinter->setupPrinter();
3326#endif 3338#endif
3327} 3339}
3328 3340
3329void CalendarView::print() 3341void CalendarView::print()
3330{ 3342{
3331#ifndef KORG_NOPRINTER 3343#ifndef KORG_NOPRINTER
3332 createPrinter(); 3344 createPrinter();
3333 3345
3334 DateList tmpDateList = mNavigator->selectedDates(); 3346 DateList tmpDateList = mNavigator->selectedDates();
3335 mCalPrinter->print(CalPrinter::Month, 3347 mCalPrinter->print(CalPrinter::Month,
3336 tmpDateList.first(), tmpDateList.last()); 3348 tmpDateList.first(), tmpDateList.last());
3337#endif 3349#endif
3338} 3350}
3339 3351
3340void CalendarView::printPreview() 3352void CalendarView::printPreview()
3341{ 3353{
3342#ifndef KORG_NOPRINTER 3354#ifndef KORG_NOPRINTER
3343 kdDebug() << "CalendarView::printPreview()" << endl; 3355 kdDebug() << "CalendarView::printPreview()" << endl;
3344 3356
3345 createPrinter(); 3357 createPrinter();
3346 3358
3347 DateList tmpDateList = mNavigator->selectedDates(); 3359 DateList tmpDateList = mNavigator->selectedDates();
3348 3360
3349 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3361 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3350 tmpDateList.last()); 3362 tmpDateList.last());
3351#endif 3363#endif
3352} 3364}
3353 3365
3354void CalendarView::exportICalendar() 3366void CalendarView::exportICalendar()
3355{ 3367{
3356 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3368 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3357 3369
3358 // Force correct extension 3370 // Force correct extension
3359 if (filename.right(4) != ".ics") filename += ".ics"; 3371 if (filename.right(4) != ".ics") filename += ".ics";
3360 3372
3361 FileStorage storage( mCalendar, filename, new ICalFormat() ); 3373 FileStorage storage( mCalendar, filename, new ICalFormat() );
3362 storage.save(); 3374 storage.save();
3363} 3375}
3364 3376
3365bool CalendarView::exportVCalendar( QString filename ) 3377bool CalendarView::exportVCalendar( QString filename )
3366{ 3378{
3367 if (mCalendar->journals().count() > 0) { 3379 if (mCalendar->journals().count() > 0) {
3368 int result = KMessageBox::warningContinueCancel(this, 3380 int result = KMessageBox::warningContinueCancel(this,
3369 i18n("The journal entries can not be\nexported to a vCalendar file."), 3381 i18n("The journal entries can not be\nexported to a vCalendar file."),
3370 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3382 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3371 true); 3383 true);
3372 if (result != KMessageBox::Continue) return false; 3384 if (result != KMessageBox::Continue) return false;
3373 } 3385 }
3374 3386
3375 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3387 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3376 3388
3377 // Force correct extension 3389 // Force correct extension
3378 if (filename.right(4) != ".vcs") filename += ".vcs"; 3390 if (filename.right(4) != ".vcs") filename += ".vcs";
3379 3391
3380 FileStorage storage( mCalendar, filename, new VCalFormat ); 3392 FileStorage storage( mCalendar, filename, new VCalFormat );
3381 return storage.save(); 3393 return storage.save();
3382 3394
3383} 3395}
3384 3396
3385void CalendarView::eventUpdated(Incidence *) 3397void CalendarView::eventUpdated(Incidence *)
3386{ 3398{
3387 setModified(); 3399 setModified();
3388 // Don't call updateView here. The code, which has caused the update of the 3400 // Don't call updateView here. The code, which has caused the update of the
3389 // event is responsible for updating the view. 3401 // event is responsible for updating the view.
3390 // updateView(); 3402 // updateView();
3391} 3403}
3392 3404
3393void CalendarView::adaptNavigationUnits() 3405void CalendarView::adaptNavigationUnits()
3394{ 3406{
3395 if (mViewManager->currentView()->isEventView()) { 3407 if (mViewManager->currentView()->isEventView()) {
3396 int days = mViewManager->currentView()->currentDateCount(); 3408 int days = mViewManager->currentView()->currentDateCount();
3397 if (days == 1) { 3409 if (days == 1) {
3398 emit changeNavStringPrev(i18n("&Previous Day")); 3410 emit changeNavStringPrev(i18n("&Previous Day"));
3399 emit changeNavStringNext(i18n("&Next Day")); 3411 emit changeNavStringNext(i18n("&Next Day"));
3400 } else { 3412 } else {
3401 emit changeNavStringPrev(i18n("&Previous Week")); 3413 emit changeNavStringPrev(i18n("&Previous Week"));
3402 emit changeNavStringNext(i18n("&Next Week")); 3414 emit changeNavStringNext(i18n("&Next Week"));
3403 } 3415 }
3404 } 3416 }
3405} 3417}
3406 3418
3407void CalendarView::processMainViewSelection( Incidence *incidence ) 3419void CalendarView::processMainViewSelection( Incidence *incidence )
3408{ 3420{
3409 if ( incidence ) mTodoList->clearSelection(); 3421 if ( incidence ) mTodoList->clearSelection();
3410 processIncidenceSelection( incidence ); 3422 processIncidenceSelection( incidence );
3411} 3423}
3412 3424
3413void CalendarView::processTodoListSelection( Incidence *incidence ) 3425void CalendarView::processTodoListSelection( Incidence *incidence )
3414{ 3426{
3415 if ( incidence && mViewManager->currentView() ) { 3427 if ( incidence && mViewManager->currentView() ) {
3416 mViewManager->currentView()->clearSelection(); 3428 mViewManager->currentView()->clearSelection();
3417 } 3429 }
3418 processIncidenceSelection( incidence ); 3430 processIncidenceSelection( incidence );
3419} 3431}
3420 3432
3421void CalendarView::processIncidenceSelection( Incidence *incidence ) 3433void CalendarView::processIncidenceSelection( Incidence *incidence )
3422{ 3434{
3423 if ( incidence == mSelectedIncidence ) return; 3435 if ( incidence == mSelectedIncidence ) return;
3424 3436
3425 mSelectedIncidence = incidence; 3437 mSelectedIncidence = incidence;
3426 3438
3427 emit incidenceSelected( mSelectedIncidence ); 3439 emit incidenceSelected( mSelectedIncidence );
3428 3440
3429 if ( incidence && incidence->type() == "Event" ) { 3441 if ( incidence && incidence->type() == "Event" ) {
3430 Event *event = static_cast<Event *>( incidence ); 3442 Event *event = static_cast<Event *>( incidence );
3431 if ( event->organizer() == KOPrefs::instance()->email() ) { 3443 if ( event->organizer() == KOPrefs::instance()->email() ) {
3432 emit organizerEventsSelected( true ); 3444 emit organizerEventsSelected( true );
3433 } else { 3445 } else {
3434 emit organizerEventsSelected(false); 3446 emit organizerEventsSelected(false);
3435 } 3447 }
3436 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3448 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3437 KOPrefs::instance()->email() ) ) { 3449 KOPrefs::instance()->email() ) ) {
3438 emit groupEventsSelected( true ); 3450 emit groupEventsSelected( true );
3439 } else { 3451 } else {
3440 emit groupEventsSelected(false); 3452 emit groupEventsSelected(false);
3441 } 3453 }
3442 return; 3454 return;
3443 } else { 3455 } else {
3444 if ( incidence && incidence->type() == "Todo" ) { 3456 if ( incidence && incidence->type() == "Todo" ) {
3445 emit todoSelected( true ); 3457 emit todoSelected( true );
3446 Todo *event = static_cast<Todo *>( incidence ); 3458 Todo *event = static_cast<Todo *>( incidence );
3447 if ( event->organizer() == KOPrefs::instance()->email() ) { 3459 if ( event->organizer() == KOPrefs::instance()->email() ) {
3448 emit organizerEventsSelected( true ); 3460 emit organizerEventsSelected( true );
3449 } else { 3461 } else {
3450 emit organizerEventsSelected(false); 3462 emit organizerEventsSelected(false);
3451 } 3463 }
3452 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3464 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3453 KOPrefs::instance()->email() ) ) { 3465 KOPrefs::instance()->email() ) ) {
3454 emit groupEventsSelected( true ); 3466 emit groupEventsSelected( true );
3455 } else { 3467 } else {
3456 emit groupEventsSelected(false); 3468 emit groupEventsSelected(false);
3457 } 3469 }
3458 return; 3470 return;
3459 } else { 3471 } else {
3460 emit todoSelected( false ); 3472 emit todoSelected( false );
3461 emit organizerEventsSelected(false); 3473 emit organizerEventsSelected(false);
3462 emit groupEventsSelected(false); 3474 emit groupEventsSelected(false);
3463 } 3475 }
3464 return; 3476 return;
3465 } 3477 }
3466 3478
3467 /* if ( incidence && incidence->type() == "Todo" ) { 3479 /* if ( incidence && incidence->type() == "Todo" ) {
3468 emit todoSelected( true ); 3480 emit todoSelected( true );
3469 } else { 3481 } else {
3470 emit todoSelected( false ); 3482 emit todoSelected( false );
3471 }*/ 3483 }*/
3472} 3484}
3473 3485
3474 3486
3475void CalendarView::checkClipboard() 3487void CalendarView::checkClipboard()
3476{ 3488{
3477#ifndef KORG_NODND 3489#ifndef KORG_NODND
3478 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3490 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3479 emit pasteEnabled(true); 3491 emit pasteEnabled(true);
3480 } else { 3492 } else {
3481 emit pasteEnabled(false); 3493 emit pasteEnabled(false);
3482 } 3494 }
3483#endif 3495#endif
3484} 3496}
3485 3497
3486void CalendarView::showDates(const DateList &selectedDates) 3498void CalendarView::showDates(const DateList &selectedDates)
3487{ 3499{
3488 // kdDebug() << "CalendarView::selectDates()" << endl; 3500 // kdDebug() << "CalendarView::selectDates()" << endl;
3489 3501
3490 3502
3491 if ( !mBlockShowDates ) { 3503 if ( !mBlockShowDates ) {
3492 if ( mViewManager->currentView() ) { 3504 if ( mViewManager->currentView() ) {
3493 updateView( selectedDates.first(), selectedDates.last() ); 3505 updateView( selectedDates.first(), selectedDates.last() );
3494 } else { 3506 } else {
3495 mViewManager->showAgendaView(); 3507 mViewManager->showAgendaView();
3496 } 3508 }
3497 } 3509 }
3498 3510
3499 QString selDates; 3511 QString selDates;
3500 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3512 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3501 if (selectedDates.first() < selectedDates.last() ) 3513 if (selectedDates.first() < selectedDates.last() )
3502 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3514 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3503 else { 3515 else {
3504 QString addString; 3516 QString addString;
3505 if ( selectedDates.first() == QDateTime::currentDateTime().date() ) 3517 if ( selectedDates.first() == QDateTime::currentDateTime().date() )
3506 addString = i18n("Today"); 3518 addString = i18n("Today");
3507 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 3519 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
3508 addString = i18n("Tomorrow"); 3520 addString = i18n("Tomorrow");
3509 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 3521 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
3510 addString = i18n("Yesterday"); 3522 addString = i18n("Yesterday");
3511 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 3523 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
3512 addString = i18n("Day before yesterday"); 3524 addString = i18n("Day before yesterday");
3513 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 3525 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
3514 addString = i18n("Day after tomorrow"); 3526 addString = i18n("Day after tomorrow");
3515 if ( !addString.isEmpty() ) { 3527 if ( !addString.isEmpty() ) {
3516 topLevelWidget()->setCaption( addString+", " + selDates ); 3528 topLevelWidget()->setCaption( addString+", " + selDates );
3517 return; 3529 return;
3518 } 3530 }
3519 } 3531 }
3520 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3532 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3521 3533
3522} 3534}
3523 3535
3524QPtrList<CalFilter> CalendarView::filters() 3536QPtrList<CalFilter> CalendarView::filters()
3525{ 3537{
3526 return mFilters; 3538 return mFilters;
3527 3539
3528} 3540}
3529void CalendarView::editFilters() 3541void CalendarView::editFilters()
3530{ 3542{
3531 // kdDebug() << "CalendarView::editFilters()" << endl; 3543 // kdDebug() << "CalendarView::editFilters()" << endl;
3532 3544
3533 CalFilter *filter = mFilters.first(); 3545 CalFilter *filter = mFilters.first();
3534 while(filter) { 3546 while(filter) {
3535 kdDebug() << " Filter: " << filter->name() << endl; 3547 kdDebug() << " Filter: " << filter->name() << endl;
3536 filter = mFilters.next(); 3548 filter = mFilters.next();
3537 } 3549 }
3538 3550
3539 mDialogManager->showFilterEditDialog(&mFilters); 3551 mDialogManager->showFilterEditDialog(&mFilters);
3540} 3552}
3541void CalendarView::toggleFilter() 3553void CalendarView::toggleFilter()
3542{ 3554{
3543 showFilter(! mFilterView->isVisible()); 3555 showFilter(! mFilterView->isVisible());
3544} 3556}
3545 3557
3546KOFilterView *CalendarView::filterView() 3558KOFilterView *CalendarView::filterView()
3547{ 3559{
3548 return mFilterView; 3560 return mFilterView;
3549} 3561}
3550void CalendarView::selectFilter( int fil ) 3562void CalendarView::selectFilter( int fil )
3551{ 3563{
3552 mFilterView->setSelectedFilter( fil ); 3564 mFilterView->setSelectedFilter( fil );
3553} 3565}
3554void CalendarView::showFilter(bool visible) 3566void CalendarView::showFilter(bool visible)
3555{ 3567{
3556 if (visible) mFilterView->show(); 3568 if (visible) mFilterView->show();
3557 else mFilterView->hide(); 3569 else mFilterView->hide();
3558} 3570}
3559void CalendarView::toggleFilerEnabled( ) 3571void CalendarView::toggleFilerEnabled( )
3560{ 3572{
3561 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3573 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3562 if ( !mFilterView->filtersEnabled() ) 3574 if ( !mFilterView->filtersEnabled() )
3563 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3575 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3564 3576
3565} 3577}
3566void CalendarView::updateFilter() 3578void CalendarView::updateFilter()
3567{ 3579{
3568 CalFilter *filter = mFilterView->selectedFilter(); 3580 CalFilter *filter = mFilterView->selectedFilter();
3569 if (filter) { 3581 if (filter) {
3570 if (mFilterView->filtersEnabled()) { 3582 if (mFilterView->filtersEnabled()) {
3571 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3583 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3572 filter->setEnabled(true); 3584 filter->setEnabled(true);
3573 } 3585 }
3574 else filter->setEnabled(false); 3586 else filter->setEnabled(false);
3575 mCalendar->setFilter(filter); 3587 mCalendar->setFilter(filter);
3576 updateView(); 3588 updateView();
3577 } 3589 }
3578} 3590}
3579 3591
3580void CalendarView::filterEdited() 3592void CalendarView::filterEdited()
3581{ 3593{
3582 mFilterView->updateFilters(); 3594 mFilterView->updateFilters();
3583 updateFilter(); 3595 updateFilter();
3584 writeSettings(); 3596 writeSettings();
3585} 3597}
3586 3598
3587 3599
3588void CalendarView::takeOverEvent() 3600void CalendarView::takeOverEvent()
3589{ 3601{
3590 Incidence *incidence = currentSelection(); 3602 Incidence *incidence = currentSelection();
3591 3603
3592 if (!incidence) return; 3604 if (!incidence) return;
3593 3605
3594 incidence->setOrganizer(KOPrefs::instance()->email()); 3606 incidence->setOrganizer(KOPrefs::instance()->email());
3595 incidence->recreate(); 3607 incidence->recreate();
3596 incidence->setReadOnly(false); 3608 incidence->setReadOnly(false);
3597 3609
3598 updateView(); 3610 updateView();
3599} 3611}
3600 3612
3601void CalendarView::takeOverCalendar() 3613void CalendarView::takeOverCalendar()
3602{ 3614{
3603 // TODO: Create Calendar::allIncidences() function and use it here 3615 // TODO: Create Calendar::allIncidences() function and use it here
3604 3616
3605 QPtrList<Event> events = mCalendar->events(); 3617 QPtrList<Event> events = mCalendar->events();
3606 for(uint i=0; i<events.count(); ++i) { 3618 for(uint i=0; i<events.count(); ++i) {
3607 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3619 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3608 events.at(i)->recreate(); 3620 events.at(i)->recreate();
3609 events.at(i)->setReadOnly(false); 3621 events.at(i)->setReadOnly(false);
3610 } 3622 }
3611 3623
3612 QPtrList<Todo> todos = mCalendar->todos(); 3624 QPtrList<Todo> todos = mCalendar->todos();
3613 for(uint i=0; i<todos.count(); ++i) { 3625 for(uint i=0; i<todos.count(); ++i) {
3614 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3626 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3615 todos.at(i)->recreate(); 3627 todos.at(i)->recreate();
3616 todos.at(i)->setReadOnly(false); 3628 todos.at(i)->setReadOnly(false);
3617 } 3629 }
3618 3630
3619 QPtrList<Journal> journals = mCalendar->journals(); 3631 QPtrList<Journal> journals = mCalendar->journals();
3620 for(uint i=0; i<journals.count(); ++i) { 3632 for(uint i=0; i<journals.count(); ++i) {
3621 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3633 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3622 journals.at(i)->recreate(); 3634 journals.at(i)->recreate();
3623 journals.at(i)->setReadOnly(false); 3635 journals.at(i)->setReadOnly(false);
3624 } 3636 }
3625 3637
3626 updateView(); 3638 updateView();
3627} 3639}
3628 3640
3629void CalendarView::showIntro() 3641void CalendarView::showIntro()
3630{ 3642{
3631 kdDebug() << "To be implemented." << endl; 3643 kdDebug() << "To be implemented." << endl;
3632} 3644}
3633 3645
3634QWidgetStack *CalendarView::viewStack() 3646QWidgetStack *CalendarView::viewStack()
3635{ 3647{
3636 return mRightFrame; 3648 return mRightFrame;
3637} 3649}
3638 3650
3639QWidget *CalendarView::leftFrame() 3651QWidget *CalendarView::leftFrame()
3640{ 3652{
3641 return mLeftFrame; 3653 return mLeftFrame;
3642} 3654}
3643 3655
3644DateNavigator *CalendarView::dateNavigator() 3656DateNavigator *CalendarView::dateNavigator()
3645{ 3657{
3646 return mNavigator; 3658 return mNavigator;
3647} 3659}
3648 3660
3649KDateNavigator* CalendarView::dateNavigatorWidget() 3661KDateNavigator* CalendarView::dateNavigatorWidget()
3650{ 3662{
3651 return mDateNavigator; 3663 return mDateNavigator;
3652} 3664}
3653void CalendarView::toggleDateNavigatorWidget() 3665void CalendarView::toggleDateNavigatorWidget()
3654{ 3666{
3655 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 3667 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
3656 if (!KOPrefs::instance()->mShowDateNavigator ) 3668 if (!KOPrefs::instance()->mShowDateNavigator )
3657 mDateNavigator->hide(); 3669 mDateNavigator->hide();
3658 else 3670 else
3659 mDateNavigator->show(); 3671 mDateNavigator->show();
3660} 3672}
3661void CalendarView::addView(KOrg::BaseView *view) 3673void CalendarView::addView(KOrg::BaseView *view)
3662{ 3674{
3663 mViewManager->addView(view); 3675 mViewManager->addView(view);
3664} 3676}
3665 3677
3666void CalendarView::showView(KOrg::BaseView *view) 3678void CalendarView::showView(KOrg::BaseView *view)
3667{ 3679{
3668 mViewManager->showView(view, mLeftFrame->isVisible()); 3680 mViewManager->showView(view, mLeftFrame->isVisible());
3669} 3681}
3670 3682
3671Incidence *CalendarView::currentSelection() 3683Incidence *CalendarView::currentSelection()
3672{ 3684{
3673 return mViewManager->currentSelection(); 3685 return mViewManager->currentSelection();
3674} 3686}
3675void CalendarView::toggleAllDaySize() 3687void CalendarView::toggleAllDaySize()
3676{ 3688{
3677 /* 3689 /*
3678 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3690 if ( KOPrefs::instance()->mAllDaySize > 47 )
3679 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3691 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3680 else 3692 else
3681 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3693 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3682 */ 3694 */
3683 viewManager()->agendaView()->toggleAllDay(); 3695 viewManager()->agendaView()->toggleAllDay();
3684} 3696}
3685void CalendarView::toggleExpand() 3697void CalendarView::toggleExpand()
3686{ 3698{
3687 // if ( mLeftFrame->isHidden() ) { 3699 // if ( mLeftFrame->isHidden() ) {
3688 // mLeftFrame->show(); 3700 // mLeftFrame->show();
3689 // emit calendarViewExpanded( false ); 3701 // emit calendarViewExpanded( false );
3690 // } else { 3702 // } else {
3691 // mLeftFrame->hide(); 3703 // mLeftFrame->hide();
3692 // emit calendarViewExpanded( true ); 3704 // emit calendarViewExpanded( true );
3693 // } 3705 // }
3694 //qDebug(" CalendarView::toggleExpand()"); 3706 //qDebug(" CalendarView::toggleExpand()");
3695 globalFlagBlockAgenda = 1; 3707 globalFlagBlockAgenda = 1;
3696 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3708 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3697 globalFlagBlockAgenda = 5; 3709 globalFlagBlockAgenda = 5;
3698 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3710 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3699 //mViewManager->showView( 0, true ); 3711 //mViewManager->showView( 0, true );
3700} 3712}
3701 3713
3702void CalendarView::calendarModified( bool modified, Calendar * ) 3714void CalendarView::calendarModified( bool modified, Calendar * )
3703{ 3715{
3704 setModified( modified ); 3716 setModified( modified );
3705} 3717}
3706 3718
3707Todo *CalendarView::selectedTodo() 3719Todo *CalendarView::selectedTodo()
3708{ 3720{
3709 Incidence *incidence = currentSelection(); 3721 Incidence *incidence = currentSelection();
3710 if ( incidence && incidence->type() == "Todo" ) { 3722 if ( incidence && incidence->type() == "Todo" ) {
3711 return static_cast<Todo *>( incidence ); 3723 return static_cast<Todo *>( incidence );
3712 } 3724 }
3713 3725
3714 incidence = mTodoList->selectedIncidences().first(); 3726 incidence = mTodoList->selectedIncidences().first();
3715 if ( incidence && incidence->type() == "Todo" ) { 3727 if ( incidence && incidence->type() == "Todo" ) {
3716 return static_cast<Todo *>( incidence ); 3728 return static_cast<Todo *>( incidence );
3717 } 3729 }
3718 3730
3719 return 0; 3731 return 0;
3720} 3732}
3721 3733
3722void CalendarView::dialogClosing(Incidence *in) 3734void CalendarView::dialogClosing(Incidence *in)
3723{ 3735{
3724 // mDialogList.remove(in); 3736 // mDialogList.remove(in);
3725} 3737}
3726 3738
3727void CalendarView::showIncidence() 3739void CalendarView::showIncidence()
3728{ 3740{
3729 Incidence *incidence = currentSelection(); 3741 Incidence *incidence = currentSelection();
3730 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3742 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3731 if ( incidence ) { 3743 if ( incidence ) {
3732 ShowIncidenceVisitor v; 3744 ShowIncidenceVisitor v;
3733 v.act( incidence, this ); 3745 v.act( incidence, this );
3734 } 3746 }
3735} 3747}
3736void CalendarView::editIncidenceDescription() 3748void CalendarView::editIncidenceDescription()
3737{ 3749{
3738 mFlagEditDescription = true; 3750 mFlagEditDescription = true;
3739 editIncidence(); 3751 editIncidence();
3740 mFlagEditDescription = false; 3752 mFlagEditDescription = false;
3741} 3753}
3742void CalendarView::editIncidence() 3754void CalendarView::editIncidence()
3743{ 3755{
3744 // qDebug("editIncidence() "); 3756 // qDebug("editIncidence() ");
3745 Incidence *incidence = currentSelection(); 3757 Incidence *incidence = currentSelection();
3746 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3758 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3747 if ( incidence ) { 3759 if ( incidence ) {
3748 EditIncidenceVisitor v; 3760 EditIncidenceVisitor v;
3749 v.act( incidence, this ); 3761 v.act( incidence, this );
3750 } 3762 }
3751} 3763}
3752 3764
3753void CalendarView::deleteIncidence() 3765void CalendarView::deleteIncidence()
3754{ 3766{
3755 Incidence *incidence = currentSelection(); 3767 Incidence *incidence = currentSelection();
3756 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3768 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3757 if ( incidence ) { 3769 if ( incidence ) {
3758 deleteIncidence(incidence); 3770 deleteIncidence(incidence);
3759 } 3771 }
3760} 3772}
3761 3773
3762void CalendarView::showIncidence(Incidence *incidence) 3774void CalendarView::showIncidence(Incidence *incidence)
3763{ 3775{
3764 if ( incidence ) { 3776 if ( incidence ) {
3765 ShowIncidenceVisitor v; 3777 ShowIncidenceVisitor v;
3766 v.act( incidence, this ); 3778 v.act( incidence, this );
3767 } 3779 }
3768} 3780}
3769 3781
3770void CalendarView::editIncidence(Incidence *incidence) 3782void CalendarView::editIncidence(Incidence *incidence)
3771{ 3783{
3772 if ( incidence ) { 3784 if ( incidence ) {
3773 3785
3774 EditIncidenceVisitor v; 3786 EditIncidenceVisitor v;
3775 v.act( incidence, this ); 3787 v.act( incidence, this );
3776 3788
3777 } 3789 }
3778} 3790}
3779 3791
3780void CalendarView::deleteIncidence(Incidence *incidence) 3792void CalendarView::deleteIncidence(Incidence *incidence)
3781{ 3793{
3782 //qDebug(" CalendarView::deleteIncidence "); 3794 //qDebug(" CalendarView::deleteIncidence ");
3783 if ( incidence ) { 3795 if ( incidence ) {
3784 DeleteIncidenceVisitor v; 3796 DeleteIncidenceVisitor v;
3785 v.act( incidence, this ); 3797 v.act( incidence, this );
3786 } 3798 }
3787} 3799}
3788 3800
3789 3801
3790void CalendarView::lookForOutgoingMessages() 3802void CalendarView::lookForOutgoingMessages()
3791{ 3803{
3792 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3804 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3793 ogd->loadMessages(); 3805 ogd->loadMessages();
3794} 3806}
3795 3807
3796void CalendarView::lookForIncomingMessages() 3808void CalendarView::lookForIncomingMessages()
3797{ 3809{
3798 IncomingDialog *icd = mDialogManager->incomingDialog(); 3810 IncomingDialog *icd = mDialogManager->incomingDialog();
3799 icd->retrieve(); 3811 icd->retrieve();
3800} 3812}
3801 3813
3802bool CalendarView::removeCompletedSubTodos( Todo* t ) 3814bool CalendarView::removeCompletedSubTodos( Todo* t )
3803{ 3815{
3804 bool deleteTodo = true; 3816 bool deleteTodo = true;
3805 QPtrList<Incidence> subTodos; 3817 QPtrList<Incidence> subTodos;
3806 Incidence *aTodo; 3818 Incidence *aTodo;
3807 subTodos = t->relations(); 3819 subTodos = t->relations();
3808 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3820 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3809 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3821 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3810 deleteTodo = false; 3822 deleteTodo = false;
3811 } 3823 }
3812 if ( deleteTodo ) { 3824 if ( deleteTodo ) {
3813 if ( t->isCompleted() ) { 3825 if ( t->isCompleted() && !t->doesRecur()) {
3814 checkExternalId( t ); 3826 checkExternalId( t );
3815 mCalendar->deleteTodo( t ); 3827 mCalendar->deleteTodo( t );
3816 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3828 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3817 } 3829 }
3818 else 3830 else
3819 deleteTodo = false; 3831 deleteTodo = false;
3820 } 3832 }
3821 return deleteTodo; 3833 return deleteTodo;
3822 3834
3823} 3835}
3824void CalendarView::purgeCompleted() 3836void CalendarView::purgeCompleted()
3825{ 3837{
3826 int result = KMessageBox::warningContinueCancel(this, 3838 int result = KMessageBox::warningContinueCancel(this,
3827 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3839 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3828 3840
3829 if (result == KMessageBox::Continue) { 3841 if (result == KMessageBox::Continue) {
3830 3842
3831 QPtrList<Todo> todoCal; 3843 QPtrList<Todo> todoCal;
3832 QPtrList<Todo> rootTodos; 3844 QPtrList<Todo> rootTodos;
3833 //QPtrList<Incidence> rel; 3845 //QPtrList<Incidence> rel;
3834 Todo *aTodo;//, *rTodo; 3846 Todo *aTodo;//, *rTodo;
3835 Incidence *rIncidence; 3847 Incidence *rIncidence;
3836 bool childDelete = false; 3848 bool childDelete = false;
3837 bool deletedOne = true; 3849 bool deletedOne = true;
3838 todoCal = calendar()->todos(); 3850 todoCal = calendar()->todos();
3839 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3851 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3840 if ( !aTodo->relatedTo() ) 3852 if ( !aTodo->relatedTo() )
3841 rootTodos.append( aTodo ); 3853 rootTodos.append( aTodo );
3842 } 3854 }
3843 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3855 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3844 removeCompletedSubTodos( aTodo ); 3856 removeCompletedSubTodos( aTodo );
3845 } 3857 }
3846 3858
3847 updateView(); 3859 updateView();
3848 } 3860 }
3849} 3861}
3850 3862
3851void CalendarView::slotCalendarChanged() 3863void CalendarView::slotCalendarChanged()
3852{ 3864{
3853 ; 3865 ;
3854} 3866}
3855 3867
3856void CalendarView::keyPressEvent ( QKeyEvent *e) 3868void CalendarView::keyPressEvent ( QKeyEvent *e)
3857{ 3869{
3858 //qDebug(" alendarView::keyPressEvent "); 3870 //qDebug(" alendarView::keyPressEvent ");
3859 e->ignore(); 3871 e->ignore();
3860} 3872}
3861 3873
3862 3874
3863bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 3875bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
3864{ 3876{
3865 // mSyncManager = manager; 3877 // mSyncManager = manager;
3866 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 3878 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
3867 qDebug("KO: SyncKDE request detected!"); 3879 qDebug("KO: SyncKDE request detected!");
3868 } 3880 }
3869 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3881 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3870 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3882 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3871 return syncCalendar( filename, mode ); 3883 return syncCalendar( filename, mode );
3872} 3884}
3873bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 3885bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
3874{ 3886{
3875 //mSyncManager = manager; 3887 //mSyncManager = manager;
3876 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3888 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3877 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3889 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3878 if ( resource == "sharp" ) 3890 if ( resource == "sharp" )
3879 syncExternal( 0 ); 3891 syncExternal( 0 );
3880 if ( resource == "phone" ) 3892 if ( resource == "phone" )
3881 syncExternal( 1 ); 3893 syncExternal( 1 );
3882 // pending setmodified 3894 // pending setmodified
3883 return true; 3895 return true;
3884} 3896}
3885void CalendarView::setSyncManager(KSyncManager* manager) 3897void CalendarView::setSyncManager(KSyncManager* manager)
3886{ 3898{
3887 mSyncManager = manager; 3899 mSyncManager = manager;
3888} 3900}
3889 3901
3890void CalendarView::removeSyncInfo( QString syncProfile) 3902void CalendarView::removeSyncInfo( QString syncProfile)
3891{ 3903{
3892 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 3904 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
3893 mCalendar->removeSyncInfo( syncProfile ); 3905 mCalendar->removeSyncInfo( syncProfile );
3894 3906
3895} 3907}
3896 3908
3897void CalendarView::undo_delete() 3909void CalendarView::undo_delete()
3898{ 3910{
3899 //qDebug("undo_delete() "); 3911 //qDebug("undo_delete() ");
3900 Incidence* undo = mCalendar->undoIncidence(); 3912 Incidence* undo = mCalendar->undoIncidence();
3901 if ( !undo ) { 3913 if ( !undo ) {
3902 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 3914 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
3903 i18n("KO/Pi")); 3915 i18n("KO/Pi"));
3904 return; 3916 return;
3905 } 3917 }
3906 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + 3918 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) +
3907 i18n("\nAre you sure you want\nto restore this?"), 3919 i18n("\nAre you sure you want\nto restore this?"),
3908 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 3920 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
3909 mCalendar->undoDeleteIncidence(); 3921 mCalendar->undoDeleteIncidence();
3910 updateView(); 3922 updateView();
3911 } 3923 }
3912} 3924}
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 13d8398..4ff6899 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -234,1356 +234,1369 @@ void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e )
234 if ( tSize < 4 ) 234 if ( tSize < 4 )
235 tSize = 4; 235 tSize = 4;
236 if ( tSize > 22 ) 236 if ( tSize > 22 )
237 tSize = 22; 237 tSize = 22;
238 tSize = (tSize/2)*2; 238 tSize = (tSize/2)*2;
239 if ( tSize == KOPrefs::instance()->mHourSize ) 239 if ( tSize == KOPrefs::instance()->mHourSize )
240 return; 240 return;
241 KOPrefs::instance()->mHourSize = tSize; 241 KOPrefs::instance()->mHourSize = tSize;
242 emit scaleChanged(); 242 emit scaleChanged();
243} 243}
244 244
245/** This is called in response to repaint() */ 245/** This is called in response to repaint() */
246void TimeLabels::paintEvent(QPaintEvent*) 246void TimeLabels::paintEvent(QPaintEvent*)
247{ 247{
248 248
249 // kdDebug() << "paintevent..." << endl; 249 // kdDebug() << "paintevent..." << endl;
250 // this is another hack! 250 // this is another hack!
251 // QPainter painter(this); 251 // QPainter painter(this);
252 //QString c 252 //QString c
253 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); 253 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight());
254} 254}
255 255
256//////////////////////////////////////////////////////////////////////////// 256////////////////////////////////////////////////////////////////////////////
257 257
258EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) 258EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name)
259 : QFrame(parent,name) 259 : QFrame(parent,name)
260{ 260{
261 mColumns = 1; 261 mColumns = 1;
262 mTopBox = 0; 262 mTopBox = 0;
263 mLocation = loc; 263 mLocation = loc;
264 mTopLayout = 0; 264 mTopLayout = 0;
265 mPaintWidget = 0; 265 mPaintWidget = 0;
266 mXOffset = 0; 266 mXOffset = 0;
267 if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); 267 if (mLocation == Top) mPixmap = SmallIcon("1uparrow");
268 else mPixmap = SmallIcon("1downarrow"); 268 else mPixmap = SmallIcon("1downarrow");
269 mEnabled.resize(mColumns); 269 mEnabled.resize(mColumns);
270 if (mLocation == Top) 270 if (mLocation == Top)
271 setMaximumHeight(0); 271 setMaximumHeight(0);
272 else 272 else
273 setMinimumHeight(mPixmap.height()); 273 setMinimumHeight(mPixmap.height());
274} 274}
275 275
276EventIndicator::~EventIndicator() 276EventIndicator::~EventIndicator()
277{ 277{
278} 278}
279 279
280void EventIndicator::drawContents(QPainter *p) 280void EventIndicator::drawContents(QPainter *p)
281{ 281{
282 282
283 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; 283 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl;
284 KDGanttSplitterHandle* han = 0; 284 KDGanttSplitterHandle* han = 0;
285 if ( mPaintWidget ) 285 if ( mPaintWidget )
286 han = mPaintWidget->firstHandle(); 286 han = mPaintWidget->firstHandle();
287 if ( ! han ) { 287 if ( ! han ) {
288 int i; 288 int i;
289 for(i=0;i<mColumns;++i) { 289 for(i=0;i<mColumns;++i) {
290 if (mEnabled[i]) { 290 if (mEnabled[i]) {
291 int cellWidth = contentsRect().right()/mColumns; 291 int cellWidth = contentsRect().right()/mColumns;
292 int xOffset = KOGlobals::self()->reverseLayout() ? 292 int xOffset = KOGlobals::self()->reverseLayout() ?
293 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 293 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
294 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 294 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
295 p->drawPixmap(QPoint(xOffset,0),mPixmap); 295 p->drawPixmap(QPoint(xOffset,0),mPixmap);
296 } 296 }
297 } 297 }
298 } else { 298 } else {
299 han->repaint(); 299 han->repaint();
300 //mPaintWidget->setBackgroundColor( red ); 300 //mPaintWidget->setBackgroundColor( red );
301 301
302 QPainter pa( han ); 302 QPainter pa( han );
303 int i; 303 int i;
304 bool setColor = false; 304 bool setColor = false;
305 for(i=0;i<mColumns;++i) { 305 for(i=0;i<mColumns;++i) {
306 if (mEnabled[i]) { 306 if (mEnabled[i]) {
307 setColor = true; 307 setColor = true;
308 308
309 int cellWidth = contentsRect().right()/mColumns; 309 int cellWidth = contentsRect().right()/mColumns;
310 int xOffset = KOGlobals::self()->reverseLayout() ? 310 int xOffset = KOGlobals::self()->reverseLayout() ?
311 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 311 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
312 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 312 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
313 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); 313 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap);
314 //qDebug("222draw pix %d ",xOffset ); 314 //qDebug("222draw pix %d ",xOffset );
315 315
316 } 316 }
317 317
318 } 318 }
319 pa.end(); 319 pa.end();
320 320
321 } 321 }
322} 322}
323 323
324void EventIndicator::setXOffset( int x ) 324void EventIndicator::setXOffset( int x )
325{ 325{
326 mXOffset = x; 326 mXOffset = x;
327} 327}
328void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) 328void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
329{ 329{
330 mPaintWidget = w; 330 mPaintWidget = w;
331} 331}
332void EventIndicator::changeColumns(int columns) 332void EventIndicator::changeColumns(int columns)
333{ 333{
334 mColumns = columns; 334 mColumns = columns;
335 mEnabled.resize(mColumns); 335 mEnabled.resize(mColumns);
336 336
337 update(); 337 update();
338} 338}
339 339
340void EventIndicator::enableColumn(int column, bool enable) 340void EventIndicator::enableColumn(int column, bool enable)
341{ 341{
342 mEnabled[column] = enable; 342 mEnabled[column] = enable;
343} 343}
344 344
345 345
346//////////////////////////////////////////////////////////////////////////// 346////////////////////////////////////////////////////////////////////////////
347//////////////////////////////////////////////////////////////////////////// 347////////////////////////////////////////////////////////////////////////////
348//////////////////////////////////////////////////////////////////////////// 348////////////////////////////////////////////////////////////////////////////
349 349
350KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 350KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
351 KOEventView (cal,parent,name) 351 KOEventView (cal,parent,name)
352{ 352{
353 mBlockUpdating = true; 353 mBlockUpdating = true;
354 mStartHour = 8; 354 mStartHour = 8;
355 mSelectedDates.append(QDate::currentDate()); 355 mSelectedDates.append(QDate::currentDate());
356 356
357 mLayoutDayLabels = 0; 357 mLayoutDayLabels = 0;
358 mDayLabelsFrame = 0; 358 mDayLabelsFrame = 0;
359 mDayLabels = 0; 359 mDayLabels = 0;
360 bool isRTL = KOGlobals::self()->reverseLayout(); 360 bool isRTL = KOGlobals::self()->reverseLayout();
361 361
362 if ( KOPrefs::instance()->mVerticalScreen ) { 362 if ( KOPrefs::instance()->mVerticalScreen ) {
363 mExpandedPixmap = SmallIcon( "1downarrow" ); 363 mExpandedPixmap = SmallIcon( "1downarrow" );
364 mNotExpandedPixmap = SmallIcon( "1uparrow" ); 364 mNotExpandedPixmap = SmallIcon( "1uparrow" );
365 } else { 365 } else {
366 mExpandedPixmap = SmallIcon( isRTL ? "1leftarrow" : "1rightarrow" ); 366 mExpandedPixmap = SmallIcon( isRTL ? "1leftarrow" : "1rightarrow" );
367 mNotExpandedPixmap = SmallIcon( isRTL ? "1rightarrow" : "1leftarrow" ); 367 mNotExpandedPixmap = SmallIcon( isRTL ? "1rightarrow" : "1leftarrow" );
368 } 368 }
369 369
370 QBoxLayout *topLayout = new QVBoxLayout(this); 370 QBoxLayout *topLayout = new QVBoxLayout(this);
371 371
372 // Create day name labels for agenda columns 372 // Create day name labels for agenda columns
373 mDayLabelsFrame = new QHBox(this); 373 mDayLabelsFrame = new QHBox(this);
374 topLayout->addWidget(mDayLabelsFrame); 374 topLayout->addWidget(mDayLabelsFrame);
375 mDayLabels = new QFrame (mDayLabelsFrame); 375 mDayLabels = new QFrame (mDayLabelsFrame);
376 mLayoutDayLabels = new QHBoxLayout(mDayLabels); 376 mLayoutDayLabels = new QHBoxLayout(mDayLabels);
377 // Create agenda splitter 377 // Create agenda splitter
378#ifndef KORG_NOSPLITTER 378#ifndef KORG_NOSPLITTER
379 mSplitterAgenda = new QSplitter(Vertical,this); 379 mSplitterAgenda = new QSplitter(Vertical,this);
380 topLayout->addWidget(mSplitterAgenda); 380 topLayout->addWidget(mSplitterAgenda);
381 mSplitterAgenda->setOpaqueResize(); 381 mSplitterAgenda->setOpaqueResize();
382 382
383 mAllDayFrame = new QHBox(mSplitterAgenda); 383 mAllDayFrame = new QHBox(mSplitterAgenda);
384 384
385 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 385 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
386#else 386#else
387#if 0 387#if 0
388 QWidget *mainBox = new QWidget( this ); 388 QWidget *mainBox = new QWidget( this );
389 topLayout->addWidget( mainBox ); 389 topLayout->addWidget( mainBox );
390 QBoxLayout *mainLayout = new QVBoxLayout(mainBox); 390 QBoxLayout *mainLayout = new QVBoxLayout(mainBox);
391 mAllDayFrame = new QHBox(mainBox); 391 mAllDayFrame = new QHBox(mainBox);
392 mainLayout->addWidget(mAllDayFrame); 392 mainLayout->addWidget(mAllDayFrame);
393 mainLayout->setStretchFactor( mAllDayFrame, 0 ); 393 mainLayout->setStretchFactor( mAllDayFrame, 0 );
394 mAllDayFrame->setFocusPolicy(NoFocus); 394 mAllDayFrame->setFocusPolicy(NoFocus);
395 QWidget *agendaFrame = new QWidget(mainBox); 395 QWidget *agendaFrame = new QWidget(mainBox);
396 mainLayout->addWidget(agendaFrame); 396 mainLayout->addWidget(agendaFrame);
397 mainLayout->setStretchFactor( agendaFrame, 10 ); 397 mainLayout->setStretchFactor( agendaFrame, 10 );
398 398
399 agendaFrame->setFocusPolicy(NoFocus); 399 agendaFrame->setFocusPolicy(NoFocus);
400#endif 400#endif
401 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 401 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
402 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 402 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
403 topLayout->addWidget( mSplitterAgenda ); 403 topLayout->addWidget( mSplitterAgenda );
404 mAllDayFrame = new QHBox(mSplitterAgenda); 404 mAllDayFrame = new QHBox(mSplitterAgenda);
405 mAllDayFrame->setFocusPolicy(NoFocus); 405 mAllDayFrame->setFocusPolicy(NoFocus);
406 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 406 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
407 agendaFrame->setFocusPolicy(NoFocus); 407 agendaFrame->setFocusPolicy(NoFocus);
408 408
409#endif 409#endif
410 410
411 // Create all-day agenda widget 411 // Create all-day agenda widget
412 mDummyAllDayLeft = new QVBox( mAllDayFrame ); 412 mDummyAllDayLeft = new QVBox( mAllDayFrame );
413 413
414 mExpandButton = new QPushButton(mDummyAllDayLeft); 414 mExpandButton = new QPushButton(mDummyAllDayLeft);
415 mExpandButton->setPixmap( mNotExpandedPixmap ); 415 mExpandButton->setPixmap( mNotExpandedPixmap );
416 int widebut = mExpandButton->sizeHint().width(); 416 int widebut = mExpandButton->sizeHint().width();
417 if ( QApplication::desktop()->width() < 480 ) 417 if ( QApplication::desktop()->width() < 480 )
418 widebut = widebut*2; 418 widebut = widebut*2;
419 else 419 else
420 widebut = (widebut*3) / 2; 420 widebut = (widebut*3) / 2;
421 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, 421 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed,
422 // QSizePolicy::Fixed ) ); 422 // QSizePolicy::Fixed ) );
423 mExpandButton->setFixedSize( widebut, widebut); 423 mExpandButton->setFixedSize( widebut, widebut);
424 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); 424 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) );
425 mExpandButton->setFocusPolicy(NoFocus); 425 mExpandButton->setFocusPolicy(NoFocus);
426 mAllDayAgenda = new KOAgenda(1,mAllDayFrame); 426 mAllDayAgenda = new KOAgenda(1,mAllDayFrame);
427 mAllDayAgenda->setFocusPolicy(NoFocus); 427 mAllDayAgenda->setFocusPolicy(NoFocus);
428 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); 428 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
429 429
430 // Create event context menu for all day agenda 430 // Create event context menu for all day agenda
431 mAllDayAgendaPopup = eventPopup(); 431 mAllDayAgendaPopup = eventPopup();
432 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 432 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
433 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 433 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
434 434
435 // Create agenda frame 435 // Create agenda frame
436 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,3,3); 436 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,3,3);
437 // QHBox *agendaFrame = new QHBox(splitterAgenda); 437 // QHBox *agendaFrame = new QHBox(splitterAgenda);
438 438
439 // create event indicator bars 439 // create event indicator bars
440 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); 440 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
441 agendaLayout->addWidget(mEventIndicatorTop,0,1); 441 agendaLayout->addWidget(mEventIndicatorTop,0,1);
442 mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); 442 mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
443 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, 443 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
444 agendaFrame); 444 agendaFrame);
445 agendaLayout->addWidget(mEventIndicatorBottom,2,1); 445 agendaLayout->addWidget(mEventIndicatorBottom,2,1);
446 QWidget *dummyAgendaRight = new QWidget(agendaFrame); 446 QWidget *dummyAgendaRight = new QWidget(agendaFrame);
447 agendaLayout->addWidget(dummyAgendaRight,0,2); 447 agendaLayout->addWidget(dummyAgendaRight,0,2);
448 448
449 // Create time labels 449 // Create time labels
450 mTimeLabels = new TimeLabels(24,agendaFrame); 450 mTimeLabels = new TimeLabels(24,agendaFrame);
451 agendaLayout->addWidget(mTimeLabels,1,0); 451 agendaLayout->addWidget(mTimeLabels,1,0);
452 connect(mTimeLabels,SIGNAL( scaleChanged()), 452 connect(mTimeLabels,SIGNAL( scaleChanged()),
453 this,SLOT(updateConfig())); 453 this,SLOT(updateConfig()));
454 454
455 // Create agenda 455 // Create agenda
456 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); 456 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame);
457 agendaLayout->addMultiCellWidget(mAgenda,1,1,1,2); 457 agendaLayout->addMultiCellWidget(mAgenda,1,1,1,2);
458 agendaLayout->setColStretch(1,1); 458 agendaLayout->setColStretch(1,1);
459 mAgenda->setFocusPolicy(NoFocus); 459 mAgenda->setFocusPolicy(NoFocus);
460 // Create event context menu for agenda 460 // Create event context menu for agenda
461 mAgendaPopup = eventPopup(); 461 mAgendaPopup = eventPopup();
462 462
463 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), 463 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")),
464 i18n("Toggle Alarm"),mAgenda, 464 i18n("Toggle Alarm"),mAgenda,
465 SLOT(popupAlarm()),true); 465 SLOT(popupAlarm()),true);
466 466
467 467
468 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 468 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
469 mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 469 mAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
470 470
471 // make connections between dependent widgets 471 // make connections between dependent widgets
472 mTimeLabels->setAgenda(mAgenda); 472 mTimeLabels->setAgenda(mAgenda);
473 473
474 // Update widgets to reflect user preferences 474 // Update widgets to reflect user preferences
475 // updateConfig(); 475 // updateConfig();
476 476
477 // createDayLabels(); 477 // createDayLabels();
478 478
479 // these blank widgets make the All Day Event box line up with the agenda 479 // these blank widgets make the All Day Event box line up with the agenda
480 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 480 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
481 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 481 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
482 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 482 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
483 483
484 // Scrolling 484 // Scrolling
485 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), 485 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)),
486 mTimeLabels, SLOT(positionChanged())); 486 mTimeLabels, SLOT(positionChanged()));
487 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), 487 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)),
488 SLOT(setContentsPos(int))); 488 SLOT(setContentsPos(int)));
489 489
490 connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); 490 connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate )));
491 connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); 491 connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate )));
492 492
493 // Create/Show/Edit/Delete Event 493 // Create/Show/Edit/Delete Event
494 connect(mAgenda,SIGNAL(newEventSignal(int,int)), 494 connect(mAgenda,SIGNAL(newEventSignal(int,int)),
495 SLOT(newEvent(int,int))); 495 SLOT(newEvent(int,int)));
496 connect(mAgenda,SIGNAL(newTodoSignal(int,int)), 496 connect(mAgenda,SIGNAL(newTodoSignal(int,int)),
497 SLOT(newTodo(int,int))); 497 SLOT(newTodo(int,int)));
498 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), 498 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)),
499 SLOT(newEvent(int,int,int,int))); 499 SLOT(newEvent(int,int,int,int)));
500 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), 500 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)),
501 SLOT(newEventAllDay(int,int))); 501 SLOT(newEventAllDay(int,int)));
502 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), 502 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)),
503 SLOT(newTodoAllDay(int,int))); 503 SLOT(newTodoAllDay(int,int)));
504 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), 504 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)),
505 SLOT(newEventAllDay(int,int))); 505 SLOT(newEventAllDay(int,int)));
506 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 506 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
507 SLOT(newTimeSpanSelected(int,int,int,int))); 507 SLOT(newTimeSpanSelected(int,int,int,int)));
508 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 508 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
509 SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); 509 SLOT(newTimeSpanSelectedAllDay(int,int,int,int)));
510 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 510 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
511 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 511 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
512 512
513 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 513 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
514 SIGNAL(editIncidenceSignal(Incidence *))); 514 SIGNAL(editIncidenceSignal(Incidence *)));
515 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 515 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
516 SIGNAL(editIncidenceSignal(Incidence *))); 516 SIGNAL(editIncidenceSignal(Incidence *)));
517 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 517 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
518 SIGNAL(showIncidenceSignal(Incidence *))); 518 SIGNAL(showIncidenceSignal(Incidence *)));
519 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 519 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
520 SIGNAL(showIncidenceSignal(Incidence *))); 520 SIGNAL(showIncidenceSignal(Incidence *)));
521 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 521 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
522 SIGNAL(deleteIncidenceSignal(Incidence *))); 522 SIGNAL(deleteIncidenceSignal(Incidence *)));
523 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 523 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
524 SIGNAL(deleteIncidenceSignal(Incidence *))); 524 SIGNAL(deleteIncidenceSignal(Incidence *)));
525 525
526 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 526 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
527 SLOT(updateEventDates(KOAgendaItem *, int ))); 527 SLOT(updateEventDates(KOAgendaItem *, int )));
528 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 528 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
529 SLOT(updateEventDates(KOAgendaItem *, int))); 529 SLOT(updateEventDates(KOAgendaItem *, int)));
530 530
531 // event indicator update 531 // event indicator update
532 connect(mAgenda,SIGNAL(lowerYChanged(int)), 532 connect(mAgenda,SIGNAL(lowerYChanged(int)),
533 SLOT(updateEventIndicatorTop(int))); 533 SLOT(updateEventIndicatorTop(int)));
534 connect(mAgenda,SIGNAL(upperYChanged(int)), 534 connect(mAgenda,SIGNAL(upperYChanged(int)),
535 SLOT(updateEventIndicatorBottom(int))); 535 SLOT(updateEventIndicatorBottom(int)));
536 // drag signals 536 // drag signals
537 /* 537 /*
538 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 538 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
539 SLOT(startDrag(Event *))); 539 SLOT(startDrag(Event *)));
540 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 540 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
541 SLOT(startDrag(Event *))); 541 SLOT(startDrag(Event *)));
542 */ 542 */
543 // synchronize selections 543 // synchronize selections
544 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 544 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
545 mAllDayAgenda, SLOT( deselectItem() ) ); 545 mAllDayAgenda, SLOT( deselectItem() ) );
546 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 546 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
547 mAgenda, SLOT( deselectItem() ) ); 547 mAgenda, SLOT( deselectItem() ) );
548 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 548 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
549 SIGNAL( incidenceSelected( Incidence * ) ) ); 549 SIGNAL( incidenceSelected( Incidence * ) ) );
550 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 550 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
551 SIGNAL( incidenceSelected( Incidence * ) ) ); 551 SIGNAL( incidenceSelected( Incidence * ) ) );
552 connect( mAgenda, SIGNAL( resizedSignal() ), 552 connect( mAgenda, SIGNAL( resizedSignal() ),
553 SLOT( updateConfig( ) ) ); 553 SLOT( updateConfig( ) ) );
554 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 554 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
555 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 555 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
556 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 556 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
557 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 557 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
558 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 558 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
559 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 559 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
560 560
561 561
562} 562}
563 563
564void KOAgendaView::toggleAllDay() 564void KOAgendaView::toggleAllDay()
565{ 565{
566 if ( mSplitterAgenda->firstHandle() ) 566 if ( mSplitterAgenda->firstHandle() )
567 mSplitterAgenda->firstHandle()->toggle(); 567 mSplitterAgenda->firstHandle()->toggle();
568} 568}
569void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 569void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
570{ 570{
571 calendar()->addIncidence( inc ); 571 calendar()->addIncidence( inc );
572 572
573 if ( incOld ) { 573 if ( incOld ) {
574 if ( incOld->type() == "Todo" ) 574 if ( incOld->type() == "Todo" )
575 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 575 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
576 else 576 else
577 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 577 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
578 } 578 }
579 579
580} 580}
581 581
582KOAgendaView::~KOAgendaView() 582KOAgendaView::~KOAgendaView()
583{ 583{
584 delete mAgendaPopup; 584 delete mAgendaPopup;
585 delete mAllDayAgendaPopup; 585 delete mAllDayAgendaPopup;
586 delete KOAgendaItem::paintPix(); 586 delete KOAgendaItem::paintPix();
587 delete KOAgendaItem::paintPixSel(); 587 delete KOAgendaItem::paintPixSel();
588} 588}
589void KOAgendaView::resizeEvent( QResizeEvent* e ) 589void KOAgendaView::resizeEvent( QResizeEvent* e )
590{ 590{
591 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 591 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
592 bool uc = false; 592 bool uc = false;
593 int ow = e->oldSize().width(); 593 int ow = e->oldSize().width();
594 int oh = e->oldSize().height(); 594 int oh = e->oldSize().height();
595 int w = e->size().width(); 595 int w = e->size().width();
596 int h = e->size().height(); 596 int h = e->size().height();
597 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { 597 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) {
598 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) 598 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda )
599 uc = true; 599 uc = true;
600 //qDebug("view changed %d %d %d %d ", ow, oh , w , h); 600 //qDebug("view changed %d %d %d %d ", ow, oh , w , h);
601 } 601 }
602 mUpcomingWidth = e->size().width() ; 602 mUpcomingWidth = e->size().width() ;
603 if ( mBlockUpdating || uc ) { 603 if ( mBlockUpdating || uc ) {
604 mBlockUpdating = false; 604 mBlockUpdating = false;
605 //mAgenda->setMinimumSize(800 , 600 ); 605 //mAgenda->setMinimumSize(800 , 600 );
606 //qDebug("mAgenda->resize+++++++++++++++ "); 606 //qDebug("mAgenda->resize+++++++++++++++ ");
607 updateConfig(); 607 updateConfig();
608 //qDebug("KOAgendaView::Updating now possible "); 608 //qDebug("KOAgendaView::Updating now possible ");
609 } else 609 } else
610 createDayLabels(); 610 createDayLabels();
611 //qDebug("resizeEvent end "); 611 //qDebug("resizeEvent end ");
612 612
613} 613}
614void KOAgendaView::slotDaylabelClicked( int num ) 614void KOAgendaView::slotDaylabelClicked( int num )
615{ 615{
616 616
617 QDate firstDate = mSelectedDates.first(); 617 QDate firstDate = mSelectedDates.first();
618 if ( num == -1 ) 618 if ( num == -1 )
619 emit showDateView( 6, firstDate ); 619 emit showDateView( 6, firstDate );
620 else if (num >= 0 ) { 620 else if (num >= 0 ) {
621 if ( mSelectedDates.count() == 1) 621 if ( mSelectedDates.count() == 1)
622 emit showDateView( 9, firstDate.addDays( num ) ); 622 emit showDateView( 9, firstDate.addDays( num ) );
623 else 623 else
624 emit showDateView( 3, firstDate.addDays( num ) ); 624 emit showDateView( 3, firstDate.addDays( num ) );
625 } 625 }
626 else 626 else
627 showDateView( 10, firstDate.addDays(1) ); 627 showDateView( 10, firstDate.addDays(1) );
628} 628}
629 629
630KOAgendaButton* KOAgendaView::getNewDaylabel() 630KOAgendaButton* KOAgendaView::getNewDaylabel()
631{ 631{
632 632
633 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); 633 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels);
634 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); 634 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) );
635 mDayLabelsList.append( dayLabel ); 635 mDayLabelsList.append( dayLabel );
636 mLayoutDayLabels->addWidget(dayLabel); 636 mLayoutDayLabels->addWidget(dayLabel);
637 return dayLabel ; 637 return dayLabel ;
638} 638}
639 639
640void KOAgendaView::createDayLabels() 640void KOAgendaView::createDayLabels()
641{ 641{
642 642
643 if ( mBlockUpdating || globalFlagBlockLabel == 1) { 643 if ( mBlockUpdating || globalFlagBlockLabel == 1) {
644 // qDebug(" KOAgendaView::createDayLabels() blocked "); 644 // qDebug(" KOAgendaView::createDayLabels() blocked ");
645 return; 645 return;
646 646
647 } 647 }
648 int newHight; 648 int newHight;
649 649
650 // ### Before deleting and recreating we could check if mSelectedDates changed... 650 // ### Before deleting and recreating we could check if mSelectedDates changed...
651 // It would remove some flickering and gain speed (since this is called by 651 // It would remove some flickering and gain speed (since this is called by
652 // each updateView() call) 652 // each updateView() call)
653 653
654 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; 654 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2;
655 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); 655 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth );
656 if ( maxWid < 0 ) 656 if ( maxWid < 0 )
657 maxWid = 20; 657 maxWid = 20;
658 658
659 QFont dlf = KOPrefs::instance()->mTimeLabelsFont; 659 QFont dlf = KOPrefs::instance()->mTimeLabelsFont;
660 QFontMetrics fm ( dlf ); 660 QFontMetrics fm ( dlf );
661 int selCount = mSelectedDates.count(); 661 int selCount = mSelectedDates.count();
662 QString dayTest = "Mon 20"; 662 QString dayTest = "Mon 20";
663 //QString dayTest = "Mon 20"; 663 //QString dayTest = "Mon 20";
664 int wid = fm.width( dayTest ); 664 int wid = fm.width( dayTest );
665 //maxWid -= ( selCount * 3 ); //working for QLabels 665 //maxWid -= ( selCount * 3 ); //working for QLabels
666 maxWid -= ( selCount * 3 ); //working for QPushButton 666 maxWid -= ( selCount * 3 ); //working for QPushButton
667 if ( maxWid < 0 ) 667 if ( maxWid < 0 )
668 maxWid = 20; 668 maxWid = 20;
669 int needWid = wid * selCount; 669 int needWid = wid * selCount;
670 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); 670 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid );
671 //if ( needWid > maxWid ) 671 //if ( needWid > maxWid )
672 // qDebug("DAYLABELS TOOOOOOO BIG "); 672 // qDebug("DAYLABELS TOOOOOOO BIG ");
673 while ( needWid > maxWid ) { 673 while ( needWid > maxWid ) {
674 dayTest = dayTest.left( dayTest.length() - 1 ); 674 dayTest = dayTest.left( dayTest.length() - 1 );
675 wid = fm.width( dayTest ); 675 wid = fm.width( dayTest );
676 needWid = wid * selCount; 676 needWid = wid * selCount;
677 } 677 }
678 int maxLen = dayTest.length(); 678 int maxLen = dayTest.length();
679 int fontPoint = dlf.pointSize(); 679 int fontPoint = dlf.pointSize();
680 if ( maxLen < 2 ) { 680 if ( maxLen < 2 ) {
681 int fontPoint = dlf.pointSize(); 681 int fontPoint = dlf.pointSize();
682 while ( fontPoint > 4 ) { 682 while ( fontPoint > 4 ) {
683 --fontPoint; 683 --fontPoint;
684 dlf.setPointSize( fontPoint ); 684 dlf.setPointSize( fontPoint );
685 QFontMetrics f( dlf ); 685 QFontMetrics f( dlf );
686 wid = f.width( "30" ); 686 wid = f.width( "30" );
687 needWid = wid * selCount; 687 needWid = wid * selCount;
688 if ( needWid < maxWid ) 688 if ( needWid < maxWid )
689 break; 689 break;
690 } 690 }
691 maxLen = 2; 691 maxLen = 2;
692 } 692 }
693 //qDebug("Max len %d ", dayTest.length() ); 693 //qDebug("Max len %d ", dayTest.length() );
694 694
695 QFontMetrics tempF( dlf ); 695 QFontMetrics tempF( dlf );
696 newHight = tempF.height(); 696 newHight = tempF.height();
697 mDayLabels->setFont( dlf ); 697 mDayLabels->setFont( dlf );
698 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; 698 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);;
699 // mLayoutDayLabels->addSpacing(mTimeLabels->width()); 699 // mLayoutDayLabels->addSpacing(mTimeLabels->width());
700 //mLayoutDayLabels->addSpacing( 2 ); 700 //mLayoutDayLabels->addSpacing( 2 );
701 // QFont lFont = dlf; 701 // QFont lFont = dlf;
702 bool appendLabels = false; 702 bool appendLabels = false;
703 KOAgendaButton *dayLabel; 703 KOAgendaButton *dayLabel;
704 dayLabel = mDayLabelsList.first(); 704 dayLabel = mDayLabelsList.first();
705 if ( !dayLabel ) { 705 if ( !dayLabel ) {
706 appendLabels = true; 706 appendLabels = true;
707 dayLabel = getNewDaylabel(); 707 dayLabel = getNewDaylabel();
708 } 708 }
709 dayLabel->setFixedWidth( mTimeLabels->width()+2 ); 709 dayLabel->setFixedWidth( mTimeLabels->width()+2 );
710 dayLabel->setFont( dlf ); 710 dayLabel->setFont( dlf );
711 dayLabel->setNum( -1 ); 711 dayLabel->setNum( -1 );
712 //dayLabel->setAlignment(QLabel::AlignHCenter); 712 //dayLabel->setAlignment(QLabel::AlignHCenter);
713 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); 713 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
714 dayLabel->show(); 714 dayLabel->show();
715 DateList::ConstIterator dit; 715 DateList::ConstIterator dit;
716 bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); 716 bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
717 int counter = -1; 717 int counter = -1;
718 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 718 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
719 ++counter; 719 ++counter;
720 QDate date = *dit; 720 QDate date = *dit;
721 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); 721 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
722 if ( ! appendLabels ) { 722 if ( ! appendLabels ) {
723 dayLabel = mDayLabelsList.next(); 723 dayLabel = mDayLabelsList.next();
724 if ( !dayLabel ) 724 if ( !dayLabel )
725 appendLabels = true; 725 appendLabels = true;
726 } 726 }
727 if ( appendLabels ) { 727 if ( appendLabels ) {
728 dayLabel = getNewDaylabel(); 728 dayLabel = getNewDaylabel();
729 } 729 }
730 dayLabel->setMinimumWidth( 1 ); 730 dayLabel->setMinimumWidth( 1 );
731 dayLabel->setMaximumWidth( 1024 ); 731 dayLabel->setMaximumWidth( 1024 );
732 dayLabel->setFont( dlf ); 732 dayLabel->setFont( dlf );
733 dayLabel->show(); 733 dayLabel->show();
734 dayLabel->setNum( counter ); 734 dayLabel->setNum( counter );
735 QString str; 735 QString str;
736 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 736 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
737 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 737 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
738 switch ( maxLen ) { 738 switch ( maxLen ) {
739 case 2: 739 case 2:
740 str = QString::number( date.day() ); 740 str = QString::number( date.day() );
741 break; 741 break;
742 742
743 case 3: 743 case 3:
744 str = dayName.left( 1 ) +QString::number( date.day()); 744 str = dayName.left( 1 ) +QString::number( date.day());
745 745
746 break; 746 break;
747 case 4: 747 case 4:
748 str = dayName.left( 1 ) + " " +QString::number( date.day()); 748 str = dayName.left( 1 ) + " " +QString::number( date.day());
749 749
750 break; 750 break;
751 case 5: 751 case 5:
752 str = dayName.left( 2 ) + " " +QString::number( date.day()); 752 str = dayName.left( 2 ) + " " +QString::number( date.day());
753 753
754 break; 754 break;
755 case 6: 755 case 6:
756 str = dayName.left( 3 ) + " " +QString::number( date.day()); 756 str = dayName.left( 3 ) + " " +QString::number( date.day());
757 break; 757 break;
758 758
759 default: 759 default:
760 break; 760 break;
761 } 761 }
762 if ( oneday ) { 762 if ( oneday ) {
763 QString addString; 763 QString addString;
764 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 764 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
765 addString = i18n("Today"); 765 addString = i18n("Today");
766 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 766 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
767 addString = i18n("Tomorrow"); 767 addString = i18n("Tomorrow");
768 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 768 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
769 addString = i18n("Yesterday"); 769 addString = i18n("Yesterday");
770 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 770 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
771 addString = i18n("Day before yesterday"); 771 addString = i18n("Day before yesterday");
772 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 772 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
773 addString = i18n("Day after tomorrow"); 773 addString = i18n("Day after tomorrow");
774 if ( !addString.isEmpty() ) { 774 if ( !addString.isEmpty() ) {
775 str = addString+", " + str; 775 str = addString+", " + str;
776 } 776 }
777 } 777 }
778 dayLabel->setText(str); 778 dayLabel->setText(str);
779 //dayLabel->setAlignment(QLabel::AlignHCenter); 779 //dayLabel->setAlignment(QLabel::AlignHCenter);
780 if (date == QDate::currentDate()) { 780 if (date == QDate::currentDate()) {
781 QFont bFont = dlf; 781 QFont bFont = dlf;
782 bFont.setBold( true ); 782 bFont.setBold( true );
783 dayLabel->setFont(bFont); 783 dayLabel->setFont(bFont);
784 } 784 }
785 //dayLayout->addWidget(dayLabel); 785 //dayLayout->addWidget(dayLabel);
786 786
787#ifndef KORG_NOPLUGINS 787#ifndef KORG_NOPLUGINS
788 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 788 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
789 CalendarDecoration *it; 789 CalendarDecoration *it;
790 for(it = cds.first(); it; it = cds.next()) { 790 for(it = cds.first(); it; it = cds.next()) {
791 QString text = it->shortText( date ); 791 QString text = it->shortText( date );
792 if ( !text.isEmpty() ) { 792 if ( !text.isEmpty() ) {
793 QLabel *label = new QLabel(text,mDayLabels); 793 QLabel *label = new QLabel(text,mDayLabels);
794 label->setAlignment(AlignCenter); 794 label->setAlignment(AlignCenter);
795 dayLayout->addWidget(label); 795 dayLayout->addWidget(label);
796 } 796 }
797 } 797 }
798 798
799 for(it = cds.first(); it; it = cds.next()) { 799 for(it = cds.first(); it; it = cds.next()) {
800 QWidget *wid = it->smallWidget(mDayLabels,date); 800 QWidget *wid = it->smallWidget(mDayLabels,date);
801 if ( wid ) { 801 if ( wid ) {
802 // wid->setHeight(20); 802 // wid->setHeight(20);
803 dayLayout->addWidget(wid); 803 dayLayout->addWidget(wid);
804 } 804 }
805 } 805 }
806#endif 806#endif
807 } 807 }
808 if ( ! appendLabels ) { 808 if ( ! appendLabels ) {
809 dayLabel = mDayLabelsList.next(); 809 dayLabel = mDayLabelsList.next();
810 if ( !dayLabel ) 810 if ( !dayLabel )
811 appendLabels = true; 811 appendLabels = true;
812 } 812 }
813 if ( appendLabels ) { 813 if ( appendLabels ) {
814 dayLabel = getNewDaylabel(); 814 dayLabel = getNewDaylabel();
815 } 815 }
816 //dayLabel->hide();//test only 816 //dayLabel->hide();//test only
817 817
818 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; 818 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ;
819 if ( offset < 0 ) offset = 0; 819 if ( offset < 0 ) offset = 0;
820 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); 820 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 );
821 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) ); 821 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) );
822 dayLabel->setFont( dlf ); 822 dayLabel->setFont( dlf );
823 dayLabel->show(); 823 dayLabel->show();
824 dayLabel->setNum( -2 ); 824 dayLabel->setNum( -2 );
825 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); 825 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset );
826 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); 826 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2);
827 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 827 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
828 if ( !appendLabels ) { 828 if ( !appendLabels ) {
829 dayLabel = mDayLabelsList.next(); 829 dayLabel = mDayLabelsList.next();
830 while ( dayLabel ) { 830 while ( dayLabel ) {
831 //qDebug("!dayLabel %d",dayLabel ); 831 //qDebug("!dayLabel %d",dayLabel );
832 dayLabel->hide(); 832 dayLabel->hide();
833 dayLabel = mDayLabelsList.next(); 833 dayLabel = mDayLabelsList.next();
834 } 834 }
835 } 835 }
836 //mDayLabelsFrame->show(); 836 //mDayLabelsFrame->show();
837 //mDayLabels->show(); 837 //mDayLabels->show();
838 //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight); 838 //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight);
839 //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight ); 839 //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight );
840 mDayLabelsFrame->setFixedHeight( newHight ); 840 mDayLabelsFrame->setFixedHeight( newHight );
841} 841}
842 842
843int KOAgendaView::maxDatesHint() 843int KOAgendaView::maxDatesHint()
844{ 844{
845 // Not sure about the max number of events, so return 0 for now. 845 // Not sure about the max number of events, so return 0 for now.
846 return 0; 846 return 0;
847} 847}
848 848
849int KOAgendaView::currentDateCount() 849int KOAgendaView::currentDateCount()
850{ 850{
851 return mSelectedDates.count(); 851 return mSelectedDates.count();
852} 852}
853 853
854QPtrList<Incidence> KOAgendaView::selectedIncidences() 854QPtrList<Incidence> KOAgendaView::selectedIncidences()
855{ 855{
856 QPtrList<Incidence> selected; 856 QPtrList<Incidence> selected;
857 Incidence *incidence; 857 Incidence *incidence;
858 858
859 incidence = mAgenda->selectedIncidence(); 859 incidence = mAgenda->selectedIncidence();
860 if (incidence) selected.append(incidence); 860 if (incidence) selected.append(incidence);
861 861
862 incidence = mAllDayAgenda->selectedIncidence(); 862 incidence = mAllDayAgenda->selectedIncidence();
863 if (incidence) selected.append(incidence); 863 if (incidence) selected.append(incidence);
864 864
865 return selected; 865 return selected;
866} 866}
867 867
868DateList KOAgendaView::selectedDates() 868DateList KOAgendaView::selectedDates()
869{ 869{
870 DateList selected; 870 DateList selected;
871 QDate qd; 871 QDate qd;
872 872
873 qd = mAgenda->selectedIncidenceDate(); 873 qd = mAgenda->selectedIncidenceDate();
874 if (qd.isValid()) selected.append(qd); 874 if (qd.isValid()) selected.append(qd);
875 875
876 qd = mAllDayAgenda->selectedIncidenceDate(); 876 qd = mAllDayAgenda->selectedIncidenceDate();
877 if (qd.isValid()) selected.append(qd); 877 if (qd.isValid()) selected.append(qd);
878 878
879 return selected; 879 return selected;
880} 880}
881 881
882 882
883void KOAgendaView::updateView() 883void KOAgendaView::updateView()
884{ 884{
885 if ( mBlockUpdating ) 885 if ( mBlockUpdating )
886 return; 886 return;
887 // kdDebug() << "KOAgendaView::updateView()" << endl; 887 // kdDebug() << "KOAgendaView::updateView()" << endl;
888 fillAgenda(); 888 fillAgenda();
889 889
890} 890}
891 891
892 892
893/* 893/*
894 Update configuration settings for the agenda view. This method is not 894 Update configuration settings for the agenda view. This method is not
895 complete. 895 complete.
896*/ 896*/
897void KOAgendaView::updateConfig() 897void KOAgendaView::updateConfig()
898{ 898{
899 if ( mBlockUpdating ) 899 if ( mBlockUpdating )
900 return; 900 return;
901 901
902 902
903 903
904 // update config for children 904 // update config for children
905 mTimeLabels->updateConfig(); 905 mTimeLabels->updateConfig();
906 mAgenda->storePosition(); 906 mAgenda->storePosition();
907 mAgenda->updateConfig(); 907 mAgenda->updateConfig();
908 mAllDayAgenda->updateConfig(); 908 mAllDayAgenda->updateConfig();
909 // widget synchronization 909 // widget synchronization
910 //TODO: find a better way, maybe signal/slot 910 //TODO: find a better way, maybe signal/slot
911 mTimeLabels->positionChanged(); 911 mTimeLabels->positionChanged();
912 912
913 // for some reason, this needs to be called explicitly 913 // for some reason, this needs to be called explicitly
914 mTimeLabels->repaint(); 914 mTimeLabels->repaint();
915 915
916 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 916 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
917 917
918 // ToolTips displaying summary of events 918 // ToolTips displaying summary of events
919 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 919 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
920 ->mEnableToolTips); 920 ->mEnableToolTips);
921 921
922 //setHolidayMasks(); 922 //setHolidayMasks();
923 923
924 //createDayLabels(); called by via updateView(); 924 //createDayLabels(); called by via updateView();
925 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 925 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
926 updateView(); 926 updateView();
927 mAgenda->restorePosition(); 927 mAgenda->restorePosition();
928} 928}
929 929
930 930
931void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 931void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
932{ 932{
933 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; 933 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl;
934 //qDebug("KOAgendaView::updateEventDates "); 934 //qDebug("KOAgendaView::updateEventDates ");
935 QDateTime startDt,endDt; 935 QDateTime startDt,endDt;
936 QDate startDate; 936 QDate startDate;
937 int lenInSecs; 937 int lenInSecs;
938 // if ( type == KOAgenda::RESIZETOP ) 938 // if ( type == KOAgenda::RESIZETOP )
939 // qDebug("RESIZETOP "); 939 // qDebug("RESIZETOP ");
940 // if ( type == KOAgenda::RESIZEBOTTOM ) 940 // if ( type == KOAgenda::RESIZEBOTTOM )
941 // qDebug("RESIZEBOTTOM "); 941 // qDebug("RESIZEBOTTOM ");
942 // if ( type == KOAgenda::MOVE ) 942 // if ( type == KOAgenda::MOVE )
943 // qDebug("MOVE "); 943 // qDebug("MOVE ");
944 if ( item->incidence()->type() == "Event" ) { 944 if ( item->incidence()->type() == "Event" ) {
945 startDt =item->incidence()->dtStart(); 945 startDt =item->incidence()->dtStart();
946 endDt = item->incidence()->dtEnd(); 946 endDt = item->incidence()->dtEnd();
947 lenInSecs = startDt.secsTo( endDt ); 947 lenInSecs = startDt.secsTo( endDt );
948 } 948 }
949 949
950 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 950 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
951 951
952 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { 952 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) {
953 startDate = mSelectedDates[item->mLastMoveXPos]; 953 startDate = mSelectedDates[item->mLastMoveXPos];
954 } else { 954 } else {
955 if (item->cellX() < 0) { 955 if (item->cellX() < 0) {
956 startDate = (mSelectedDates.first()).addDays(item->cellX()); 956 startDate = (mSelectedDates.first()).addDays(item->cellX());
957 } else { 957 } else {
958 startDate = mSelectedDates[item->cellX()]; 958 startDate = mSelectedDates[item->cellX()];
959 } 959 }
960 } 960 }
961 startDt.setDate(startDate); 961 startDt.setDate(startDate);
962 962
963 if (item->incidence()->doesFloat()) { 963 if (item->incidence()->doesFloat()) {
964 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 964 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
965 } else { 965 } else {
966 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 966 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
967 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 967 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
968 if ( item->incidence()->type() == "Event" ) { 968 if ( item->incidence()->type() == "Event" ) {
969 if ( type == KOAgenda::MOVE ) { 969 if ( type == KOAgenda::MOVE ) {
970 endDt = startDt.addSecs(lenInSecs); 970 endDt = startDt.addSecs(lenInSecs);
971 971
972 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 972 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
973 if (item->lastMultiItem()) { 973 if (item->lastMultiItem()) {
974 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 974 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
975 endDt.setDate(startDate. 975 endDt.setDate(startDate.
976 addDays(item->lastMultiItem()->cellX() - item->cellX())); 976 addDays(item->lastMultiItem()->cellX() - item->cellX()));
977 } else { 977 } else {
978 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 978 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
979 endDt.setDate(startDate); 979 endDt.setDate(startDate);
980 } 980 }
981 } 981 }
982 } else { 982 } else {
983 // todo 983 // todo
984 if (item->lastMultiItem()) { 984 if (item->lastMultiItem()) {
985 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 985 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
986 endDt.setDate(startDate. 986 endDt.setDate(startDate.
987 addDays(item->lastMultiItem()->cellX() - item->cellX())); 987 addDays(item->lastMultiItem()->cellX() - item->cellX()));
988 } else { 988 } else {
989 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 989 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
990 if ( item->cellYBottom() > 0 ) 990 if ( item->cellYBottom() > 0 )
991 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 991 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
992 else 992 else
993 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 993 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
994 endDt.setDate(startDate); 994 endDt.setDate(startDate);
995 } 995 }
996 } 996 }
997 } 997 }
998 if ( item->incidence()->type() == "Event" ) { 998 if ( item->incidence()->type() == "Event" ) {
999 item->incidence()->setDtStart(startDt); 999 item->incidence()->setDtStart(startDt);
1000 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 1000 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
1001 } else if ( item->incidence()->type() == "Todo" ) { 1001 } else if ( item->incidence()->type() == "Todo" ) {
1002 (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); 1002 Todo* to = static_cast<Todo*>(item->incidence());
1003
1004 int len = 0;
1005 if ( to->hasStartDate() && to->hasDueDate() )
1006 len = to->dtStart().secsTo( to->dtDue());
1007 to->setDtDue(endDt);
1008 if ( to->hasStartDate() ) {
1009 if ( len>0 )
1010 to->setDtStart(to->dtDue().addSecs( -len ));
1011 else
1012 if (to->dtStart() > to->dtDue() )
1013 to->setDtStart(to->dtDue().addDays( -3 ));
1014 }
1015
1003 } 1016 }
1004 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 1017 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
1005 item->incidence()->setRevision(item->incidence()->revision()+1); 1018 item->incidence()->setRevision(item->incidence()->revision()+1);
1006 item->setItemDate(startDt.date()); 1019 item->setItemDate(startDt.date());
1007 //item->updateItem(); 1020 //item->updateItem();
1008 if ( item->incidence()->type() == "Todo" ) { 1021 if ( item->incidence()->type() == "Todo" ) {
1009 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 1022 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
1010 1023
1011 } 1024 }
1012 else 1025 else
1013 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); 1026 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED);
1014 item->updateItem(); 1027 item->updateItem();
1015} 1028}
1016 1029
1017void KOAgendaView::showDates( const QDate &start, const QDate &end ) 1030void KOAgendaView::showDates( const QDate &start, const QDate &end )
1018{ 1031{
1019 // kdDebug() << "KOAgendaView::selectDates" << endl; 1032 // kdDebug() << "KOAgendaView::selectDates" << endl;
1020 1033
1021 mSelectedDates.clear(); 1034 mSelectedDates.clear();
1022 // qDebug("KOAgendaView::showDates "); 1035 // qDebug("KOAgendaView::showDates ");
1023 QDate d = start; 1036 QDate d = start;
1024 while (d <= end) { 1037 while (d <= end) {
1025 mSelectedDates.append(d); 1038 mSelectedDates.append(d);
1026 d = d.addDays( 1 ); 1039 d = d.addDays( 1 );
1027 } 1040 }
1028 1041
1029 // and update the view 1042 // and update the view
1030 fillAgenda(); 1043 fillAgenda();
1031} 1044}
1032 1045
1033 1046
1034void KOAgendaView::showEvents(QPtrList<Event>) 1047void KOAgendaView::showEvents(QPtrList<Event>)
1035{ 1048{
1036 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; 1049 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl;
1037} 1050}
1038 1051
1039void KOAgendaView::changeEventDisplay(Event *, int) 1052void KOAgendaView::changeEventDisplay(Event *, int)
1040{ 1053{
1041 // qDebug("KOAgendaView::changeEventDisplay "); 1054 // qDebug("KOAgendaView::changeEventDisplay ");
1042 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; 1055 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl;
1043 // this should be re-written to be MUCH smarter. Right now we 1056 // this should be re-written to be MUCH smarter. Right now we
1044 // are just playing dumb. 1057 // are just playing dumb.
1045 fillAgenda(); 1058 fillAgenda();
1046} 1059}
1047 1060
1048void KOAgendaView::fillAgenda(const QDate &) 1061void KOAgendaView::fillAgenda(const QDate &)
1049{ 1062{
1050 // qDebug("KOAgendaView::fillAgenda "); 1063 // qDebug("KOAgendaView::fillAgenda ");
1051 fillAgenda(); 1064 fillAgenda();
1052} 1065}
1053 1066
1054void KOAgendaView::fillAgenda() 1067void KOAgendaView::fillAgenda()
1055{ 1068{
1056 if ( globalFlagBlockStartup ) 1069 if ( globalFlagBlockStartup )
1057 return; 1070 return;
1058 if ( globalFlagBlockAgenda == 1 ) 1071 if ( globalFlagBlockAgenda == 1 )
1059 return; 1072 return;
1060 //if ( globalFlagBlockAgenda == 2 ) 1073 //if ( globalFlagBlockAgenda == 2 )
1061 //globalFlagBlockAgenda = 0; 1074 //globalFlagBlockAgenda = 0;
1062 // globalFlagBlockPainting = false; 1075 // globalFlagBlockPainting = false;
1063 if ( globalFlagBlockAgenda == 0 ) 1076 if ( globalFlagBlockAgenda == 0 )
1064 globalFlagBlockAgenda = 1; 1077 globalFlagBlockAgenda = 1;
1065 // clearView(); 1078 // clearView();
1066 //qDebug("fillAgenda()++++ "); 1079 //qDebug("fillAgenda()++++ ");
1067 globalFlagBlockAgendaItemPaint = 1; 1080 globalFlagBlockAgendaItemPaint = 1;
1068 1081
1069 mAllDayAgenda->changeColumns(mSelectedDates.count()); 1082 mAllDayAgenda->changeColumns(mSelectedDates.count());
1070 mAgenda->changeColumns(mSelectedDates.count()); 1083 mAgenda->changeColumns(mSelectedDates.count());
1071 qApp->processEvents(); 1084 qApp->processEvents();
1072 mEventIndicatorTop->changeColumns(mSelectedDates.count()); 1085 mEventIndicatorTop->changeColumns(mSelectedDates.count());
1073 mEventIndicatorBottom->changeColumns(mSelectedDates.count()); 1086 mEventIndicatorBottom->changeColumns(mSelectedDates.count());
1074 setHolidayMasks(); 1087 setHolidayMasks();
1075 1088
1076 //mAgenda->hideUnused(); 1089 //mAgenda->hideUnused();
1077 //mAllDayAgenda->hideUnused(); 1090 //mAllDayAgenda->hideUnused();
1078 1091
1079 // mAgenda->blockNextRepaint( false ); 1092 // mAgenda->blockNextRepaint( false );
1080 // mAgenda->viewport()->repaint(); 1093 // mAgenda->viewport()->repaint();
1081 // mAgenda->blockNextRepaint( true ); 1094 // mAgenda->blockNextRepaint( true );
1082 mMinY.resize(mSelectedDates.count()); 1095 mMinY.resize(mSelectedDates.count());
1083 mMaxY.resize(mSelectedDates.count()); 1096 mMaxY.resize(mSelectedDates.count());
1084 1097
1085 QPtrList<Event> dayEvents; 1098 QPtrList<Event> dayEvents;
1086 1099
1087 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1100 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1088 // Therefore, gtodoset all of them. 1101 // Therefore, gtodoset all of them.
1089 QPtrList<Todo> todos = calendar()->todos(); 1102 QPtrList<Todo> todos = calendar()->todos();
1090 1103
1091 mAgenda->setDateList(mSelectedDates); 1104 mAgenda->setDateList(mSelectedDates);
1092 1105
1093 QDate today = QDate::currentDate(); 1106 QDate today = QDate::currentDate();
1094 1107
1095 DateList::ConstIterator dit; 1108 DateList::ConstIterator dit;
1096 int curCol = 0; 1109 int curCol = 0;
1097 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 1110 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
1098 QDate currentDate = *dit; 1111 QDate currentDate = *dit;
1099 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() 1112 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString()
1100 // << endl; 1113 // << endl;
1101 1114
1102 dayEvents = calendar()->events(currentDate,true); 1115 dayEvents = calendar()->events(currentDate,true);
1103 1116
1104 // Default values, which can never be reached 1117 // Default values, which can never be reached
1105 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; 1118 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1;
1106 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; 1119 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1;
1107 1120
1108 unsigned int numEvent; 1121 unsigned int numEvent;
1109 for(numEvent=0;numEvent<dayEvents.count();++numEvent) { 1122 for(numEvent=0;numEvent<dayEvents.count();++numEvent) {
1110 Event *event = dayEvents.at(numEvent); 1123 Event *event = dayEvents.at(numEvent);
1111 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1124 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1112 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1125 if ( event->uid().left(15) == QString("last-syncEvent-") )
1113 continue; 1126 continue;
1114 // kdDebug() << " Event: " << event->summary() << endl; 1127 // kdDebug() << " Event: " << event->summary() << endl;
1115 1128
1116 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; 1129 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol;
1117 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; 1130 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol;
1118 1131
1119 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; 1132 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl;
1120 1133
1121 if (event->doesFloat()) { 1134 if (event->doesFloat()) {
1122 if (event->recurrence()->doesRecur()) { 1135 if (event->recurrence()->doesRecur()) {
1123 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); 1136 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
1124 } else { 1137 } else {
1125 if (beginX <= 0 && curCol == 0) { 1138 if (beginX <= 0 && curCol == 0) {
1126 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1139 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1127 } else if (beginX == curCol) { 1140 } else if (beginX == curCol) {
1128 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1141 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1129 } 1142 }
1130 } 1143 }
1131 } else if (event->isMultiDay()) { 1144 } else if (event->isMultiDay()) {
1132 if ( event->doesRecur () ) { 1145 if ( event->doesRecur () ) {
1133 QDate dateit = currentDate; 1146 QDate dateit = currentDate;
1134 int count = 0; 1147 int count = 0;
1135 int max = event->dtStart().daysTo( event->dtEnd() ) +2; 1148 int max = event->dtStart().daysTo( event->dtEnd() ) +2;
1136 while (! event->recursOn( dateit ) && count <= max ) { 1149 while (! event->recursOn( dateit ) && count <= max ) {
1137 ++count; 1150 ++count;
1138 dateit = dateit.addDays( -1 ); 1151 dateit = dateit.addDays( -1 );
1139 } 1152 }
1140 bool ok; 1153 bool ok;
1141 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); 1154 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok );
1142 if ( ok ) 1155 if ( ok )
1143 { 1156 {
1144 int secs = event->dtStart().secsTo( event->dtEnd() ); 1157 int secs = event->dtStart().secsTo( event->dtEnd() );
1145 QDateTime nextOcend =nextOcstart.addSecs( secs ); ; 1158 QDateTime nextOcend =nextOcstart.addSecs( secs ); ;
1146 beginX = currentDate.daysTo(nextOcstart.date()) + curCol; 1159 beginX = currentDate.daysTo(nextOcstart.date()) + curCol;
1147 endX = currentDate.daysTo(nextOcend.date()) + curCol; 1160 endX = currentDate.daysTo(nextOcend.date()) + curCol;
1148 1161
1149 } 1162 }
1150 } 1163 }
1151 int startY = mAgenda->timeToY(event->dtStart().time()); 1164 int startY = mAgenda->timeToY(event->dtStart().time());
1152 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1165 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1153 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); 1166 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol );
1154 if ((beginX <= 0 && curCol == 0) || beginX == curCol) { 1167 if ((beginX <= 0 && curCol == 0) || beginX == curCol) {
1155 //qDebug("insert!!! "); 1168 //qDebug("insert!!! ");
1156 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); 1169 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY);
1157 } 1170 }
1158 if (beginX == curCol) { 1171 if (beginX == curCol) {
1159 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1172 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1160 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1173 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1161 } else if (endX == curCol) { 1174 } else if (endX == curCol) {
1162 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1175 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1163 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1176 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1164 } else { 1177 } else {
1165 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1178 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1166 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1179 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1167 } 1180 }
1168 } else { 1181 } else {
1169 int startY = mAgenda->timeToY(event->dtStart().time()); 1182 int startY = mAgenda->timeToY(event->dtStart().time());
1170 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1183 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1171 if (endY < startY) endY = startY; 1184 if (endY < startY) endY = startY;
1172 mAgenda->insertItem(event,currentDate,curCol,startY,endY); 1185 mAgenda->insertItem(event,currentDate,curCol,startY,endY);
1173 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1186 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1174 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1187 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1175 } 1188 }
1176 } 1189 }
1177 // ---------- [display Todos -------------- 1190 // ---------- [display Todos --------------
1178 unsigned int numTodo; 1191 unsigned int numTodo;
1179 for (numTodo = 0; numTodo < todos.count(); ++numTodo) { 1192 for (numTodo = 0; numTodo < todos.count(); ++numTodo) {
1180 Todo *todo = todos.at(numTodo); 1193 Todo *todo = todos.at(numTodo);
1181 1194
1182 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date 1195 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date
1183 1196
1184 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1197 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1185 // Already completed items can be displayed on their original due date 1198 // Already completed items can be displayed on their original due date
1186 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda 1199 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda
1187 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; 1200 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda;
1188 bool fillIn = false; 1201 bool fillIn = false;
1189 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) 1202 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate )
1190 fillIn = true; 1203 fillIn = true;
1191 if ( ! fillIn && !todo->hasCompletedDate() ) 1204 if ( ! fillIn && !todo->hasCompletedDate() )
1192 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); 1205 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue);
1193 if ( fillIn ) { 1206 if ( fillIn ) {
1194 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue 1207 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue
1195 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1208 if ( KOPrefs::instance()->mShowTodoInAgenda )
1196 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); 1209 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol);
1197 } 1210 }
1198 else { 1211 else {
1199 QDateTime dt; 1212 QDateTime dt;
1200 if ( todo->hasCompletedDate() ) 1213 if ( todo->hasCompletedDate() )
1201 dt = todo->completed(); 1214 dt = todo->completed();
1202 else 1215 else
1203 dt = todo->dtDue();; 1216 dt = todo->dtDue();;
1204 1217
1205 1218
1206 int endY = mAgenda->timeToY(dt.time()) - 1; 1219 int endY = mAgenda->timeToY(dt.time()) - 1;
1207 int hi = (18/KOPrefs::instance()->mHourSize); 1220 int hi = (18/KOPrefs::instance()->mHourSize);
1208 //qDebug("hei %d ",KOPrefs::instance()->mHourSize); 1221 //qDebug("hei %d ",KOPrefs::instance()->mHourSize);
1209 int startY = endY -hi; 1222 int startY = endY -hi;
1210 1223
1211 mAgenda->insertItem(todo,currentDate,curCol,startY,endY); 1224 mAgenda->insertItem(todo,currentDate,curCol,startY,endY);
1212 1225
1213 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1226 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1214 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1227 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1215 } 1228 }
1216 } 1229 }
1217 } 1230 }
1218 // ---------- display Todos] -------------- 1231 // ---------- display Todos] --------------
1219 1232
1220 ++curCol; 1233 ++curCol;
1221 } 1234 }
1222 mAgenda->hideUnused(); 1235 mAgenda->hideUnused();
1223 mAllDayAgenda->hideUnused(); 1236 mAllDayAgenda->hideUnused();
1224 mAgenda->checkScrollBoundaries(); 1237 mAgenda->checkScrollBoundaries();
1225 1238
1226 deleteSelectedDateTime(); 1239 deleteSelectedDateTime();
1227 1240
1228 createDayLabels(); 1241 createDayLabels();
1229 emit incidenceSelected( 0 ); 1242 emit incidenceSelected( 0 );
1230 1243
1231 if ( globalFlagBlockAgenda == 2 ) { 1244 if ( globalFlagBlockAgenda == 2 ) {
1232 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 1245 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
1233 setStartHour( KOPrefs::instance()->mDayBegins ); 1246 setStartHour( KOPrefs::instance()->mDayBegins );
1234 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1247 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
1235 setStartHour( QTime::currentTime ().hour() ); 1248 setStartHour( QTime::currentTime ().hour() );
1236 // qApp->processEvents(); 1249 // qApp->processEvents();
1237 } 1250 }
1238 qApp->processEvents(); 1251 qApp->processEvents();
1239 //qDebug("qApp->processEvents(); END "); 1252 //qDebug("qApp->processEvents(); END ");
1240 globalFlagBlockAgenda = 0; 1253 globalFlagBlockAgenda = 0;
1241 1254
1242 // mAgenda->hideUnused(); 1255 // mAgenda->hideUnused();
1243 //mAllDayAgenda->hideUnused(); 1256 //mAllDayAgenda->hideUnused();
1244 mAllDayAgenda->drawContentsToPainter(); 1257 mAllDayAgenda->drawContentsToPainter();
1245 mAgenda->drawContentsToPainter(); 1258 mAgenda->drawContentsToPainter();
1246 repaintAgenda(); 1259 repaintAgenda();
1247 // mAgenda->finishUpdate(); 1260 // mAgenda->finishUpdate();
1248 //mAllDayAgenda->finishUpdate(); 1261 //mAllDayAgenda->finishUpdate();
1249 1262
1250 // repaintAgenda(); 1263 // repaintAgenda();
1251 //qApp->processEvents(); 1264 //qApp->processEvents();
1252 // globalFlagBlockAgenda = 0; 1265 // globalFlagBlockAgenda = 0;
1253} 1266}
1254void KOAgendaView::repaintAgenda() 1267void KOAgendaView::repaintAgenda()
1255{ 1268{
1256 // mAllDayAgenda->drawContentsToPainter(); 1269 // mAllDayAgenda->drawContentsToPainter();
1257// mAllDayAgenda->viewport()->repaint( false ); 1270// mAllDayAgenda->viewport()->repaint( false );
1258// mAgenda->drawContentsToPainter(); 1271// mAgenda->drawContentsToPainter();
1259// mAgenda->viewport()->repaint( false ); 1272// mAgenda->viewport()->repaint( false );
1260// qApp->processEvents(); 1273// qApp->processEvents();
1261 1274
1262 //qDebug("KOAgendaView::repaintAgenda() "); 1275 //qDebug("KOAgendaView::repaintAgenda() ");
1263 //qApp->processEvents(); 1276 //qApp->processEvents();
1264 mAgenda->viewport()->repaint( false ); 1277 mAgenda->viewport()->repaint( false );
1265 mAllDayAgenda->viewport()->repaint( false ); 1278 mAllDayAgenda->viewport()->repaint( false );
1266 mAgenda->finishUpdate(); 1279 mAgenda->finishUpdate();
1267 mAllDayAgenda->finishUpdate(); 1280 mAllDayAgenda->finishUpdate();
1268} 1281}
1269 1282
1270 1283
1271void KOAgendaView::clearView() 1284void KOAgendaView::clearView()
1272{ 1285{
1273 // kdDebug() << "ClearView" << endl; 1286 // kdDebug() << "ClearView" << endl;
1274 mAllDayAgenda->clear(); 1287 mAllDayAgenda->clear();
1275 mAgenda->clear(); 1288 mAgenda->clear();
1276} 1289}
1277 1290
1278void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1291void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1279 const QDate &td) 1292 const QDate &td)
1280{ 1293{
1281#ifndef KORG_NOPRINTER 1294#ifndef KORG_NOPRINTER
1282 if (fd == td) 1295 if (fd == td)
1283 calPrinter->preview(CalPrinter::Day, fd, td); 1296 calPrinter->preview(CalPrinter::Day, fd, td);
1284 else 1297 else
1285 calPrinter->preview(CalPrinter::Week, fd, td); 1298 calPrinter->preview(CalPrinter::Week, fd, td);
1286#endif 1299#endif
1287} 1300}
1288 1301
1289// void KOAgendaView::updateMovedTodo() 1302// void KOAgendaView::updateMovedTodo()
1290// { 1303// {
1291// // updateConfig(); 1304// // updateConfig();
1292// // emit updateTodoViews(); 1305// // emit updateTodoViews();
1293// } 1306// }
1294 1307
1295void KOAgendaView::newEvent(int gx, int gy) 1308void KOAgendaView::newEvent(int gx, int gy)
1296{ 1309{
1297 if (!mSelectedDates.count()) return; 1310 if (!mSelectedDates.count()) return;
1298 1311
1299 QDate day = mSelectedDates[gx]; 1312 QDate day = mSelectedDates[gx];
1300 1313
1301 QTime time = mAgenda->gyToTime(gy); 1314 QTime time = mAgenda->gyToTime(gy);
1302 QDateTime dt(day,time); 1315 QDateTime dt(day,time);
1303 // if ( dt < QDateTime::currentDateTime () ) 1316 // if ( dt < QDateTime::currentDateTime () )
1304 // dt = QDateTime::currentDateTime ().addSecs( 3600 ); 1317 // dt = QDateTime::currentDateTime ().addSecs( 3600 );
1305 emit newEventSignal(dt); 1318 emit newEventSignal(dt);
1306} 1319}
1307 1320
1308void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd) 1321void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd)
1309{ 1322{
1310 if (!mSelectedDates.count()) return; 1323 if (!mSelectedDates.count()) return;
1311 1324
1312 QDate dayStart = mSelectedDates[gxStart]; 1325 QDate dayStart = mSelectedDates[gxStart];
1313 QDate dayEnd = mSelectedDates[gxEnd]; 1326 QDate dayEnd = mSelectedDates[gxEnd];
1314 1327
1315 QTime timeStart = mAgenda->gyToTime(gyStart); 1328 QTime timeStart = mAgenda->gyToTime(gyStart);
1316 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1329 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1317 1330
1318 QDateTime dtStart(dayStart,timeStart); 1331 QDateTime dtStart(dayStart,timeStart);
1319 QDateTime dtEnd(dayEnd,timeEnd); 1332 QDateTime dtEnd(dayEnd,timeEnd);
1320 1333
1321 emit newEventSignal(dtStart,dtEnd); 1334 emit newEventSignal(dtStart,dtEnd);
1322} 1335}
1323 1336
1324void KOAgendaView::newEventAllDay(int gx, int ) 1337void KOAgendaView::newEventAllDay(int gx, int )
1325{ 1338{
1326 if (!mSelectedDates.count()) return; 1339 if (!mSelectedDates.count()) return;
1327 1340
1328 QDate day = mSelectedDates[gx]; 1341 QDate day = mSelectedDates[gx];
1329 1342
1330 emit newEventSignal(day); 1343 emit newEventSignal(day);
1331} 1344}
1332void KOAgendaView::newTodoAllDay(int gx, int ) 1345void KOAgendaView::newTodoAllDay(int gx, int )
1333{ 1346{
1334 if (!mSelectedDates.count()) return; 1347 if (!mSelectedDates.count()) return;
1335 1348
1336 QDateTime day (mSelectedDates[gx] ); 1349 QDateTime day (mSelectedDates[gx] );
1337 emit newTodoSignal(day, true); 1350 emit newTodoSignal(day, true);
1338} 1351}
1339void KOAgendaView::newTodo(int gx, int gy ) 1352void KOAgendaView::newTodo(int gx, int gy )
1340{ 1353{
1341 if (!mSelectedDates.count()) return; 1354 if (!mSelectedDates.count()) return;
1342 QDate dayStart = mSelectedDates[gx]; 1355 QDate dayStart = mSelectedDates[gx];
1343 QTime timeStart = mAgenda->gyToTime(gy); 1356 QTime timeStart = mAgenda->gyToTime(gy);
1344 QDateTime dt (dayStart,timeStart); 1357 QDateTime dt (dayStart,timeStart);
1345 emit newTodoSignal( dt, false ); 1358 emit newTodoSignal( dt, false );
1346} 1359}
1347 1360
1348void KOAgendaView::updateEventIndicatorTop(int newY) 1361void KOAgendaView::updateEventIndicatorTop(int newY)
1349{ 1362{
1350 uint i; 1363 uint i;
1351 for(i=0;i<mMinY.size();++i) { 1364 for(i=0;i<mMinY.size();++i) {
1352 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true); 1365 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true);
1353 else mEventIndicatorTop->enableColumn(i,false); 1366 else mEventIndicatorTop->enableColumn(i,false);
1354 } 1367 }
1355 1368
1356 mEventIndicatorTop->update(); 1369 mEventIndicatorTop->update();
1357} 1370}
1358 1371
1359void KOAgendaView::updateEventIndicatorBottom(int newY) 1372void KOAgendaView::updateEventIndicatorBottom(int newY)
1360{ 1373{
1361 uint i; 1374 uint i;
1362 for(i=0;i<mMaxY.size();++i) { 1375 for(i=0;i<mMaxY.size();++i) {
1363 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true); 1376 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true);
1364 else mEventIndicatorBottom->enableColumn(i,false); 1377 else mEventIndicatorBottom->enableColumn(i,false);
1365 } 1378 }
1366 1379
1367 mEventIndicatorBottom->update(); 1380 mEventIndicatorBottom->update();
1368} 1381}
1369 1382
1370void KOAgendaView::startDrag(Event *event) 1383void KOAgendaView::startDrag(Event *event)
1371{ 1384{
1372#ifndef KORG_NODND 1385#ifndef KORG_NODND
1373 DndFactory factory( calendar() ); 1386 DndFactory factory( calendar() );
1374 ICalDrag *vd = factory.createDrag(event,this); 1387 ICalDrag *vd = factory.createDrag(event,this);
1375 if (vd->drag()) { 1388 if (vd->drag()) {
1376 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl; 1389 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl;
1377 } 1390 }
1378#endif 1391#endif
1379} 1392}
1380 1393
1381void KOAgendaView::readSettings() 1394void KOAgendaView::readSettings()
1382{ 1395{
1383 readSettings(KOGlobals::config()); 1396 readSettings(KOGlobals::config());
1384} 1397}
1385 1398
1386void KOAgendaView::readSettings(KConfig *config) 1399void KOAgendaView::readSettings(KConfig *config)
1387{ 1400{
1388 // kdDebug() << "KOAgendaView::readSettings()" << endl; 1401 // kdDebug() << "KOAgendaView::readSettings()" << endl;
1389 1402
1390 config->setGroup("Views"); 1403 config->setGroup("Views");
1391 1404
1392 //#ifndef KORG_NOSPLITTER 1405 //#ifndef KORG_NOSPLITTER
1393 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView"); 1406 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView");
1394 if (sizes.count() == 2) { 1407 if (sizes.count() == 2) {
1395 if ( sizes[0] < 20 ) { 1408 if ( sizes[0] < 20 ) {
1396 sizes[1] = sizes[1] +20 - sizes[0]; 1409 sizes[1] = sizes[1] +20 - sizes[0];
1397 sizes[0] = 20; 1410 sizes[0] = 20;
1398 } 1411 }
1399 mSplitterAgenda->setSizes(sizes); 1412 mSplitterAgenda->setSizes(sizes);
1400 // qDebug("read %d %d ",sizes[0],sizes[1] ); 1413 // qDebug("read %d %d ",sizes[0],sizes[1] );
1401 } 1414 }
1402 //#endif 1415 //#endif
1403 1416
1404 // updateConfig(); 1417 // updateConfig();
1405} 1418}
1406 1419
1407void KOAgendaView::writeSettings(KConfig *config) 1420void KOAgendaView::writeSettings(KConfig *config)
1408{ 1421{
1409 // kdDebug() << "KOAgendaView::writeSettings()" << endl; 1422 // kdDebug() << "KOAgendaView::writeSettings()" << endl;
1410 1423
1411 config->setGroup("Views"); 1424 config->setGroup("Views");
1412 1425
1413 //#ifndef KORG_NOSPLITTER 1426 //#ifndef KORG_NOSPLITTER
1414 QValueList<int> list = mSplitterAgenda->sizes(); 1427 QValueList<int> list = mSplitterAgenda->sizes();
1415 config->writeEntry("Separator AgendaView",list); 1428 config->writeEntry("Separator AgendaView",list);
1416 //qDebug("write %d %d ", list[0],list[1] ); 1429 //qDebug("write %d %d ", list[0],list[1] );
1417 //#endif 1430 //#endif
1418} 1431}
1419 1432
1420void KOAgendaView::setHolidayMasks() 1433void KOAgendaView::setHolidayMasks()
1421{ 1434{
1422 mHolidayMask.resize(mSelectedDates.count()); 1435 mHolidayMask.resize(mSelectedDates.count());
1423 1436
1424 uint i; 1437 uint i;
1425 for(i=0;i<mSelectedDates.count();++i) { 1438 for(i=0;i<mSelectedDates.count();++i) {
1426 QDate date = mSelectedDates[i]; 1439 QDate date = mSelectedDates[i];
1427 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6); 1440 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6);
1428 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7); 1441 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7);
1429 bool showHoliday = false; 1442 bool showHoliday = false;
1430 if ( KOPrefs::instance()->mExcludeHolidays ) { 1443 if ( KOPrefs::instance()->mExcludeHolidays ) {
1431 QPtrList<Event> events = calendar()->events( date, true ); 1444 QPtrList<Event> events = calendar()->events( date, true );
1432 Event *event; 1445 Event *event;
1433 for( event = events.first(); event; event = events.next() ) { 1446 for( event = events.first(); event; event = events.next() ) {
1434 if ( event->categories().contains("Holiday") || 1447 if ( event->categories().contains("Holiday") ||
1435 event->categories().contains(i18n("Holiday"))) { 1448 event->categories().contains(i18n("Holiday"))) {
1436 showHoliday = true; 1449 showHoliday = true;
1437 break; 1450 break;
1438 } 1451 }
1439 } 1452 }
1440 1453
1441 } 1454 }
1442 1455
1443#ifndef KORG_NOPLUGINS 1456#ifndef KORG_NOPLUGINS
1444 bool showHoliday = KOPrefs::instance()->mExcludeHolidays && 1457 bool showHoliday = KOPrefs::instance()->mExcludeHolidays &&
1445 !KOCore::self()->holiday(date).isEmpty(); 1458 !KOCore::self()->holiday(date).isEmpty();
1446#endif 1459#endif
1447 bool showDay = showSaturday || showSunday || showHoliday; 1460 bool showDay = showSaturday || showSunday || showHoliday;
1448 1461
1449 if (showDay) { 1462 if (showDay) {
1450 mHolidayMask.at(i) = true; 1463 mHolidayMask.at(i) = true;
1451 } else { 1464 } else {
1452 mHolidayMask.at(i) = false; 1465 mHolidayMask.at(i) = false;
1453 } 1466 }
1454 } 1467 }
1455 1468
1456 mAgenda->setHolidayMask(&mHolidayMask); 1469 mAgenda->setHolidayMask(&mHolidayMask);
1457 mAllDayAgenda->setHolidayMask(&mHolidayMask); 1470 mAllDayAgenda->setHolidayMask(&mHolidayMask);
1458} 1471}
1459 1472
1460void KOAgendaView::setContentsPos(int y) 1473void KOAgendaView::setContentsPos(int y)
1461{ 1474{
1462 mAgenda->setContentsPos(0,y); 1475 mAgenda->setContentsPos(0,y);
1463} 1476}
1464 1477
1465void KOAgendaView::setExpandedButton( bool expanded ) 1478void KOAgendaView::setExpandedButton( bool expanded )
1466{ 1479{
1467 if ( expanded ) { 1480 if ( expanded ) {
1468 mExpandButton->setPixmap( mExpandedPixmap ); 1481 mExpandButton->setPixmap( mExpandedPixmap );
1469 } else { 1482 } else {
1470 mExpandButton->setPixmap( mNotExpandedPixmap ); 1483 mExpandButton->setPixmap( mNotExpandedPixmap );
1471 } 1484 }
1472} 1485}
1473 1486
1474void KOAgendaView::clearSelection() 1487void KOAgendaView::clearSelection()
1475{ 1488{
1476 mAgenda->deselectItem(); 1489 mAgenda->deselectItem();
1477 mAllDayAgenda->deselectItem(); 1490 mAllDayAgenda->deselectItem();
1478} 1491}
1479 1492
1480void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart, 1493void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart,
1481 int gxEnd, int gyEnd) 1494 int gxEnd, int gyEnd)
1482{ 1495{
1483 mTimeSpanInAllDay = true; 1496 mTimeSpanInAllDay = true;
1484 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd); 1497 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd);
1485} 1498}
1486 1499
1487 1500
1488 1501
1489 1502
1490void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, 1503void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart,
1491 int gxEnd, int gyEnd) 1504 int gxEnd, int gyEnd)
1492{ 1505{
1493 if (!mSelectedDates.count()) return; 1506 if (!mSelectedDates.count()) return;
1494 1507
1495 QDate dayStart = mSelectedDates[gxStart]; 1508 QDate dayStart = mSelectedDates[gxStart];
1496 QDate dayEnd = mSelectedDates[gxEnd]; 1509 QDate dayEnd = mSelectedDates[gxEnd];
1497 1510
1498 QTime timeStart = mAgenda->gyToTime(gyStart); 1511 QTime timeStart = mAgenda->gyToTime(gyStart);
1499 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1512 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1500 1513
1501 QDateTime dtStart(dayStart,timeStart); 1514 QDateTime dtStart(dayStart,timeStart);
1502 QDateTime dtEnd(dayEnd,timeEnd); 1515 QDateTime dtEnd(dayEnd,timeEnd);
1503 1516
1504 mTimeSpanBegin = dtStart; 1517 mTimeSpanBegin = dtStart;
1505 mTimeSpanEnd = dtEnd; 1518 mTimeSpanEnd = dtEnd;
1506 1519
1507} 1520}
1508 1521
1509void KOAgendaView::deleteSelectedDateTime() 1522void KOAgendaView::deleteSelectedDateTime()
1510{ 1523{
1511 mTimeSpanBegin.setDate(QDate()); 1524 mTimeSpanBegin.setDate(QDate());
1512 mTimeSpanEnd.setDate(QDate()); 1525 mTimeSpanEnd.setDate(QDate());
1513 mTimeSpanInAllDay = false; 1526 mTimeSpanInAllDay = false;
1514} 1527}
1515 1528
1516void KOAgendaView::keyPressEvent ( QKeyEvent * e ) 1529void KOAgendaView::keyPressEvent ( QKeyEvent * e )
1517{ 1530{
1518 e->ignore(); 1531 e->ignore();
1519} 1532}
1520 1533
1521void KOAgendaView::scrollOneHourUp() 1534void KOAgendaView::scrollOneHourUp()
1522{ 1535{
1523 1536
1524 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); 1537 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 );
1525} 1538}
1526void KOAgendaView::scrollOneHourDown() 1539void KOAgendaView::scrollOneHourDown()
1527{ 1540{
1528 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); 1541 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 );
1529} 1542}
1530 1543
1531void KOAgendaView::setStartHour( int h ) 1544void KOAgendaView::setStartHour( int h )
1532{ 1545{
1533 mAgenda->setStartHour( h ); 1546 mAgenda->setStartHour( h );
1534 1547
1535} 1548}
1536void KOAgendaView::setInitStartHour() 1549void KOAgendaView::setInitStartHour()
1537{ 1550{
1538 1551
1539 if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1552 if ( KOPrefs::instance()->mCenterOnCurrentTime )
1540 setStartHour( QTime::currentTime ().hour() ); 1553 setStartHour( QTime::currentTime ().hour() );
1541 else 1554 else
1542 setStartHour( KOPrefs::instance()->mDayBegins ); 1555 setStartHour( KOPrefs::instance()->mDayBegins );
1543 1556
1544} 1557}
1545 1558
1546 1559
1547void KOAgendaView::updateTodo( Todo * t, int ) 1560void KOAgendaView::updateTodo( Todo * t, int )
1548{ 1561{
1549 if ( !isVisible() ) 1562 if ( !isVisible() )
1550 return; 1563 return;
1551 bool remove = false; 1564 bool remove = false;
1552 bool removeAD = false; 1565 bool removeAD = false;
1553 QDate da; 1566 QDate da;
1554 if ( t->hasCompletedDate() ) 1567 if ( t->hasCompletedDate() )
1555 da = t->completed().date(); 1568 da = t->completed().date();
1556 else 1569 else
1557 da = t->dtDue().date(); 1570 da = t->dtDue().date();
1558 if ( ! t->hasDueDate() && !t->hasCompletedDate() ) { 1571 if ( ! t->hasDueDate() && !t->hasCompletedDate() ) {
1559 remove = true; 1572 remove = true;
1560 removeAD = true; 1573 removeAD = true;
1561 } 1574 }
1562 else { 1575 else {
1563 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; 1576 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ;
1564 if ( overdue && 1577 if ( overdue &&
1565 QDate::currentDate() >= mSelectedDates.first() && 1578 QDate::currentDate() >= mSelectedDates.first() &&
1566 QDate::currentDate() <= mSelectedDates.last()) { 1579 QDate::currentDate() <= mSelectedDates.last()) {
1567 removeAD = false; 1580 removeAD = false;
1568 remove = true; 1581 remove = true;
1569 } 1582 }
1570 else { 1583 else {
1571 1584
1572 if ( da < mSelectedDates.first() || 1585 if ( da < mSelectedDates.first() ||
1573 da > mSelectedDates.last() ) { 1586 da > mSelectedDates.last() ) {
1574 remove = true; 1587 remove = true;
1575 removeAD = true; 1588 removeAD = true;
1576 } else { 1589 } else {
1577 remove = t->doesFloat() && !t->hasCompletedDate(); 1590 remove = t->doesFloat() && !t->hasCompletedDate();
1578 removeAD = !remove; 1591 removeAD = !remove;
1579 } 1592 }
1580 } 1593 }
1581 } 1594 }
1582 int days = mSelectedDates.first().daysTo( da ); 1595 int days = mSelectedDates.first().daysTo( da );
1583 //qDebug("daysto %d %d %d", days, remove,removeAD ); 1596 //qDebug("daysto %d %d %d", days, remove,removeAD );
1584 mAgenda->updateTodo( t , days, remove); 1597 mAgenda->updateTodo( t , days, remove);
1585 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1598 if ( KOPrefs::instance()->mShowTodoInAgenda )
1586 mAllDayAgenda->updateTodo( t , days, removeAD); 1599 mAllDayAgenda->updateTodo( t , days, removeAD);
1587 //qDebug("KOAgendaView::updateTodo( Todo *, int ) "); 1600 //qDebug("KOAgendaView::updateTodo( Todo *, int ) ");
1588 1601
1589} 1602}
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 39921a0..f6c9624 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -1,663 +1,670 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qcstring.h> 20#include <qcstring.h>
21#include <qwhatsthis.h> 21#include <qwhatsthis.h>
22#include <qdialog.h> 22#include <qdialog.h>
23#include <qapplication.h> 23#include <qapplication.h>
24#include <qlabel.h> 24#include <qlabel.h>
25#include <qlayout.h> 25#include <qlayout.h>
26 26
27#include <klocale.h> 27#include <klocale.h>
28#include <kapplication.h> 28#include <kapplication.h>
29#include <libkcal/event.h> 29#include <libkcal/event.h>
30#include <libkcal/todo.h> 30#include <libkcal/todo.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kiconloader.h> 32#include <kiconloader.h>
33#include <krun.h> 33#include <krun.h>
34#include <kglobal.h> 34#include <kglobal.h>
35#include <kprocess.h> 35#include <kprocess.h>
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38#include <kabc/stdaddressbook.h> 38#include <kabc/stdaddressbook.h>
39 39
40#ifndef KORG_NODCOP 40#ifndef KORG_NODCOP
41#include <dcopclient.h> 41#include <dcopclient.h>
42#include "korganizer.h" 42#include "korganizer.h"
43#include "koprefs.h" 43#include "koprefs.h"
44#include "actionmanager.h" 44#include "actionmanager.h"
45#endif 45#endif
46 46
47#include "koeventviewer.h" 47#include "koeventviewer.h"
48//#ifndef KORG_NOKABC 48//#ifndef KORG_NOKABC
49//#include <kabc/stdaddressbook.h> 49//#include <kabc/stdaddressbook.h>
50//#define size count 50//#define size count
51//#endif 51//#endif
52 52
53#ifdef DESKTOP_VERSION 53#ifdef DESKTOP_VERSION
54#include <kabc/addresseedialog.h> 54#include <kabc/addresseedialog.h>
55#include <kabc/addresseeview.h> 55#include <kabc/addresseeview.h>
56#else //DESKTOP_VERSION 56#else //DESKTOP_VERSION
57#include <externalapphandler.h> 57#include <externalapphandler.h>
58#include <qtopia/qcopenvelope_qws.h> 58#include <qtopia/qcopenvelope_qws.h>
59#endif //DESKTOP_VERSION 59#endif //DESKTOP_VERSION
60 60
61KOEventViewer::KOEventViewer(QWidget *parent,const char *name) 61KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
62 : QTextBrowser(parent,name) 62 : QTextBrowser(parent,name)
63{ 63{
64 mSyncMode = false; 64 mSyncMode = false;
65 mColorMode = 0; 65 mColorMode = 0;
66} 66}
67 67
68KOEventViewer::~KOEventViewer() 68KOEventViewer::~KOEventViewer()
69{ 69{
70} 70}
71 71
72void KOEventViewer::setSource(const QString& n) 72void KOEventViewer::setSource(const QString& n)
73{ 73{
74 74
75 if ( n.left(3) == "uid" ) 75 if ( n.left(3) == "uid" )
76#ifdef DESKTOP_VERSION 76#ifdef DESKTOP_VERSION
77 { 77 {
78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
79 KABC::AddressBook::Iterator it; 79 KABC::AddressBook::Iterator it;
80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
81 // LR I do not understand, why the uid string is different on zaurus and desktop 81 // LR I do not understand, why the uid string is different on zaurus and desktop
82 QString uid = "uid://"+(*it).uid(); 82 QString uid = "uid://"+(*it).uid();
83 83
84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); 84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
85 if (n == uid ) { 85 if (n == uid ) {
86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); 86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
87 QDialog dia( this,"dia123", true ); 87 QDialog dia( this,"dia123", true );
88 dia.setCaption( i18n("Details of attendee") ); 88 dia.setCaption( i18n("Details of attendee") );
89 QVBoxLayout lay ( &dia ); 89 QVBoxLayout lay ( &dia );
90 KABC::AddresseeView av ( &dia ); 90 KABC::AddresseeView av ( &dia );
91 av.setAddressee( (*it) ); 91 av.setAddressee( (*it) );
92 lay.addWidget( &av ); 92 lay.addWidget( &av );
93 if ( QApplication::desktop()->width() < 480 ) 93 if ( QApplication::desktop()->width() < 480 )
94 dia.resize( 220, 240); 94 dia.resize( 220, 240);
95 else { 95 else {
96 dia.resize( 400,400); 96 dia.resize( 400,400);
97 } 97 }
98 dia.exec(); 98 dia.exec();
99 break; 99 break;
100 } 100 }
101 } 101 }
102 return; 102 return;
103 } 103 }
104#else 104#else
105 { 105 {
106 if ( "uid:organizer" == n ) { 106 if ( "uid:organizer" == n ) {
107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
108 return; 108 return;
109 } 109 }
110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
111 if (attendees.count()) { 111 if (attendees.count()) {
112 Attendee *a; 112 Attendee *a;
113 for(a=attendees.first();a;a=attendees.next()) { 113 for(a=attendees.first();a;a=attendees.next()) {
114 if ( "uid:"+a->uid() == n ) { 114 if ( "uid:"+a->uid() == n ) {
115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
116 return; 116 return;
117 } 117 }
118 } 118 }
119 } 119 }
120 return; 120 return;
121 } 121 }
122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
123 // the result should now arrive through method insertAttendees 123 // the result should now arrive through method insertAttendees
124 //QString uid = "uid:"+(*it).uid(); 124 //QString uid = "uid:"+(*it).uid();
125#endif 125#endif
126 if ( n.left(6) == "mailto" ) { 126 if ( n.left(6) == "mailto" ) {
127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
128#ifndef DESKTOP_VERSION 128#ifndef DESKTOP_VERSION
129 if ( n.mid(7,3) == "ALL" ) { 129 if ( n.mid(7,3) == "ALL" ) {
130 qDebug("all "); 130 qDebug("all ");
131 mailToAttendees( true ); 131 mailToAttendees( true );
132 } else if ( n.mid(7,4) == "RSVP" ) { 132 } else if ( n.mid(7,4) == "RSVP" ) {
133 mailToAttendees( false ); 133 mailToAttendees( false );
134 qDebug("rsvp "); 134 qDebug("rsvp ");
135 } else { 135 } else {
136 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 136 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
137 e << n.mid(7); 137 e << n.mid(7);
138 } 138 }
139#endif 139#endif
140 140
141 } 141 }
142 142
143 143
144#ifndef KORG_NODCOP 144#ifndef KORG_NODCOP
145 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 145 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
146 QString tmpStr; 146 QString tmpStr;
147 if (n.startsWith("mailto:")) { 147 if (n.startsWith("mailto:")) {
148 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 148 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
149 //emit showIncidence(n); 149 //emit showIncidence(n);
150 return; 150 return;
151 } else if (n.startsWith("uid:")) { 151 } else if (n.startsWith("uid:")) {
152 DCOPClient *client = KApplication::kApplication()->dcopClient(); 152 DCOPClient *client = KApplication::kApplication()->dcopClient();
153 const QByteArray noParamData; 153 const QByteArray noParamData;
154 const QByteArray paramData; 154 const QByteArray paramData;
155 QByteArray replyData; 155 QByteArray replyData;
156 QCString replyTypeStr; 156 QCString replyTypeStr;
157#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 157#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
158 bool foundAbbrowser = PING_ABBROWSER; 158 bool foundAbbrowser = PING_ABBROWSER;
159 159
160 if (foundAbbrowser) { 160 if (foundAbbrowser) {
161 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 161 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
162 //client->send("kaddressbook","KAddressBookIface", 162 //client->send("kaddressbook","KAddressBookIface",
163 QDataStream arg(paramData, IO_WriteOnly); 163 QDataStream arg(paramData, IO_WriteOnly);
164 arg << n.mid(6); 164 arg << n.mid(6);
165 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 165 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
166 return; 166 return;
167 } else { 167 } else {
168 /* 168 /*
169 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 169 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
170 We start it without its main interface 170 We start it without its main interface
171 */ 171 */
172 KIconLoader* iconLoader = new KIconLoader(); 172 KIconLoader* iconLoader = new KIconLoader();
173 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 173 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
174 ActionManager::setStartedKAddressBook(true); 174 ActionManager::setStartedKAddressBook(true);
175 tmpStr = "kaddressbook --editor-only --uid "; 175 tmpStr = "kaddressbook --editor-only --uid ";
176 tmpStr += KProcess::quote(n.mid(6)); 176 tmpStr += KProcess::quote(n.mid(6));
177 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 177 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
178 return; 178 return;
179 } 179 }
180 } else { 180 } else {
181 //QTextBrowser::setSource(n); 181 //QTextBrowser::setSource(n);
182 } 182 }
183#endif 183#endif
184} 184}
185void KOEventViewer::mailToAttendees( bool all ) 185void KOEventViewer::mailToAttendees( bool all )
186{ 186{
187 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 187 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
188 if (attendees.count() == 0) return; 188 if (attendees.count() == 0) return;
189 QStringList nameList; 189 QStringList nameList;
190 QStringList emailList; 190 QStringList emailList;
191 QStringList uidList; 191 QStringList uidList;
192 Attendee* a; 192 Attendee* a;
193 for(a=attendees.first();a;a=attendees.next()) { 193 for(a=attendees.first();a;a=attendees.next()) {
194 if ( !all && !a->RSVP() ) continue; 194 if ( !all && !a->RSVP() ) continue;
195 if (!a->email().isEmpty()) { 195 if (!a->email().isEmpty()) {
196 nameList.append (a->name() ); 196 nameList.append (a->name() );
197 emailList.append (a->email() ); 197 emailList.append (a->email() );
198 uidList.append (a->uid() ); 198 uidList.append (a->uid() );
199 } 199 }
200 } 200 }
201 QString uid = "ComposeMailUIpick2"+mMailSubject; 201 QString uid = "ComposeMailUIpick2"+mMailSubject;
202#ifndef DESKTOP_VERSION 202#ifndef DESKTOP_VERSION
203 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 203 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
204#endif 204#endif
205 205
206} 206}
207void KOEventViewer::addTag(const QString & tag,const QString & text) 207void KOEventViewer::addTag(const QString & tag,const QString & text)
208{ 208{
209 int number=text.contains("\n"); 209 int number=text.contains("\n");
210 QString str = "<" + tag + ">"; 210 QString str = "<" + tag + ">";
211 QString tmpText=text; 211 QString tmpText=text;
212 QString tmpStr=str; 212 QString tmpStr=str;
213 if(number !=-1) 213 if(number !=-1)
214 { 214 {
215 if (number > 0) { 215 if (number > 0) {
216 int pos=0; 216 int pos=0;
217 QString tmp; 217 QString tmp;
218 for(int i=0;i<=number;i++) { 218 for(int i=0;i<=number;i++) {
219 pos=tmpText.find("\n"); 219 pos=tmpText.find("\n");
220 tmp=tmpText.left(pos); 220 tmp=tmpText.left(pos);
221 tmpText=tmpText.right(tmpText.length()-pos-1); 221 tmpText=tmpText.right(tmpText.length()-pos-1);
222 tmpStr+=tmp+"<br>"; 222 tmpStr+=tmp+"<br>";
223 } 223 }
224 } 224 }
225 else tmpStr += tmpText; 225 else tmpStr += tmpText;
226 tmpStr+="</" + tag + ">"; 226 tmpStr+="</" + tag + ">";
227 mText.append(tmpStr); 227 mText.append(tmpStr);
228 } 228 }
229 else 229 else
230 { 230 {
231 str += text + "</" + tag + ">"; 231 str += text + "</" + tag + ">";
232 mText.append(str); 232 mText.append(str);
233 } 233 }
234} 234}
235 235
236void KOEventViewer::setColorMode( int m ) 236void KOEventViewer::setColorMode( int m )
237{ 237{
238 mColorMode = m; 238 mColorMode = m;
239} 239}
240void KOEventViewer::appendEvent(Event *event, int mode ) 240void KOEventViewer::appendEvent(Event *event, int mode )
241{ 241{
242 mMailSubject = ""; 242 mMailSubject = "";
243 mCurrentIncidence = event; 243 mCurrentIncidence = event;
244 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 244 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
245 topLevelWidget()->setCaption(i18n("Event Viewer")); 245 topLevelWidget()->setCaption(i18n("Event Viewer"));
246 if ( mode == 0 ) { 246 if ( mode == 0 ) {
247 addTag("h2",event->summary()); 247 addTag("h2",event->summary());
248 } 248 }
249 else { 249 else {
250 if ( mColorMode == 1 ) { 250 if ( mColorMode == 1 ) {
251 mText +="<font color=\"#00A000\">"; 251 mText +="<font color=\"#00A000\">";
252 } 252 }
253 if ( mColorMode == 2 ) { 253 if ( mColorMode == 2 ) {
254 mText +="<font color=\"#C00000\">"; 254 mText +="<font color=\"#C00000\">";
255 } 255 }
256 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 256 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
257 if ( mode == 1 ) { 257 if ( mode == 1 ) {
258 addTag("h2",i18n( "Local: " ) +event->summary()); 258 addTag("h2",i18n( "Local: " ) +event->summary());
259 } else { 259 } else {
260 addTag("h2",i18n( "Remote: " ) +event->summary()); 260 addTag("h2",i18n( "Remote: " ) +event->summary());
261 } 261 }
262 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 262 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
263 if ( mColorMode ) 263 if ( mColorMode )
264 mText += "</font>"; 264 mText += "</font>";
265 } 265 }
266 mMailSubject += i18n( "Meeting " )+ event->summary(); 266 mMailSubject += i18n( "Meeting " )+ event->summary();
267 if (event->cancelled ()) { 267 if (event->cancelled ()) {
268 mText +="<font color=\"#B00000\">"; 268 mText +="<font color=\"#B00000\">";
269 addTag("i",i18n("This event has been cancelled!")); 269 addTag("i",i18n("This event has been cancelled!"));
270 mText.append("<br>"); 270 mText.append("<br>");
271 mText += "</font>"; 271 mText += "</font>";
272 mMailSubject += i18n("(cancelled)"); 272 mMailSubject += i18n("(cancelled)");
273 } 273 }
274 if (!event->location().isEmpty()) { 274 if (!event->location().isEmpty()) {
275 addTag("b",i18n("Location: ")); 275 addTag("b",i18n("Location: "));
276 mText.append(event->location()+"<br>"); 276 mText.append(event->location()+"<br>");
277 mMailSubject += i18n(" at ") + event->location(); 277 mMailSubject += i18n(" at ") + event->location();
278 } 278 }
279 if (event->doesFloat()) { 279 if (event->doesFloat()) {
280 if (event->isMultiDay()) { 280 if (event->isMultiDay()) {
281 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 281 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
282 .arg(event->dtStartDateStr(shortDate)) 282 .arg(event->dtStartDateStr(shortDate))
283 .arg(event->dtEndDateStr(shortDate))); 283 .arg(event->dtEndDateStr(shortDate)));
284 } else { 284 } else {
285 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 285 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
286 } 286 }
287 } else { 287 } else {
288 if (event->isMultiDay()) { 288 if (event->isMultiDay()) {
289 mText.append(i18n("<p><b>From:</b> %1</p> ") 289 mText.append(i18n("<p><b>From:</b> %1</p> ")
290 .arg(event->dtStartStr( shortDate))); 290 .arg(event->dtStartStr( shortDate)));
291 mText.append(i18n("<p><b>To:</b> %1</p>") 291 mText.append(i18n("<p><b>To:</b> %1</p>")
292 .arg(event->dtEndStr(shortDate))); 292 .arg(event->dtEndStr(shortDate)));
293 } else { 293 } else {
294 mText.append(i18n("<p><b>On:</b> %1</p> ") 294 mText.append(i18n("<p><b>On:</b> %1</p> ")
295 .arg(event->dtStartDateStr( shortDate ))); 295 .arg(event->dtStartDateStr( shortDate )));
296 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 296 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
297 .arg(event->dtStartTimeStr()) 297 .arg(event->dtStartTimeStr())
298 .arg(event->dtEndTimeStr())); 298 .arg(event->dtEndTimeStr()));
299 } 299 }
300 } 300 }
301 301
302 if (event->recurrence()->doesRecur()) { 302 if (event->recurrence()->doesRecur()) {
303 303
304 QString recurText = event->recurrence()->recurrenceText(); 304 QString recurText = event->recurrence()->recurrenceText();
305 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 305 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
306 bool ok; 306 bool ok;
307 QDate start = QDate::currentDate(); 307 QDate start = QDate::currentDate();
308 QDateTime next; 308 QDateTime next;
309 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 309 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
310 if ( ok ) { 310 if ( ok ) {
311 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 311 addTag("p",i18n("<b>Next recurrence is on:</b>") );
312 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 312 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
313 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 313 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
314 314
315 } else { 315 } else {
316 bool last; 316 bool last;
317 QDate nextd; 317 QDate nextd;
318 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 318 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
319 if ( last ) { 319 if ( last ) {
320 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 320 addTag("p",i18n("<b>Last recurrence was on:</b>") );
321 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 321 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
322 } 322 }
323 } 323 }
324 } else { 324 } else {
325 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 325 mMailSubject += i18n(" - " )+event->dtStartStr( true );
326 326
327 } 327 }
328 328
329 329
330 if (event->isAlarmEnabled()) { 330 if (event->isAlarmEnabled()) {
331 Alarm *alarm =event->alarms().first() ; 331 Alarm *alarm =event->alarms().first() ;
332 QDateTime t = alarm->time(); 332 QDateTime t = alarm->time();
333 int min = t.secsTo( event->dtStart() )/60; 333 int min = t.secsTo( event->dtStart() )/60;
334 QString s =i18n("( %1 min before )").arg( min ); 334 QString s =i18n("( %1 min before )").arg( min );
335 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 335 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
336 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 336 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
337 //addTag("p",s); 337 //addTag("p",s);
338 } 338 }
339 339
340 addTag("b",i18n("Access: ")); 340 addTag("b",i18n("Access: "));
341 mText.append(event->secrecyStr()+"<br>"); 341 mText.append(event->secrecyStr()+"<br>");
342 if (!event->description().isEmpty()) { 342 if (!event->description().isEmpty()) {
343 addTag("p",i18n("<b>Details: </b>")); 343 addTag("p",i18n("<b>Details: </b>"));
344 addTag("p",event->description()); 344 addTag("p",event->description());
345 } 345 }
346 346
347 formatCategories(event); 347 formatCategories(event);
348 348
349 formatReadOnly(event); 349 formatReadOnly(event);
350 formatAttendees(event); 350 formatAttendees(event);
351 351
352 setText(mText); 352 setText(mText);
353 //QWhatsThis::add(this,mText); 353 //QWhatsThis::add(this,mText);
354 354
355} 355}
356 356
357void KOEventViewer::appendTodo(Todo *event, int mode ) 357void KOEventViewer::appendTodo(Todo *event, int mode )
358{ 358{
359 mMailSubject = ""; 359 mMailSubject = "";
360 mCurrentIncidence = event; 360 mCurrentIncidence = event;
361 topLevelWidget()->setCaption(i18n("Todo Viewer")); 361 topLevelWidget()->setCaption(i18n("Todo Viewer"));
362 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 362 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
363 if (mode == 0 ) 363 if (mode == 0 )
364 addTag("h2",event->summary()); 364 addTag("h2",event->summary());
365 else { 365 else {
366 if ( mColorMode == 1 ) { 366 if ( mColorMode == 1 ) {
367 mText +="<font color=\"#00A000\">"; 367 mText +="<font color=\"#00A000\">";
368 } 368 }
369 if ( mColorMode == 2 ) { 369 if ( mColorMode == 2 ) {
370 mText +="<font color=\"#B00000\">"; 370 mText +="<font color=\"#B00000\">";
371 } 371 }
372 if ( mode == 1 ) { 372 if ( mode == 1 ) {
373 addTag("h2",i18n( "Local: " ) +event->summary()); 373 addTag("h2",i18n( "Local: " ) +event->summary());
374 } else { 374 } else {
375 addTag("h2",i18n( "Remote: " ) +event->summary()); 375 addTag("h2",i18n( "Remote: " ) +event->summary());
376 } 376 }
377 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 377 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
378 if ( mColorMode ) 378 if ( mColorMode )
379 mText += "</font>"; 379 mText += "</font>";
380 } 380 }
381 mMailSubject += i18n( "Todo " )+ event->summary(); 381 mMailSubject += i18n( "Todo " )+ event->summary();
382 382
383 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 383 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
384 mText +="<font color=\"#B00000\">"; 384 mText +="<font color=\"#B00000\">";
385 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 385 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
386 mText += "</font>"; 386 mText += "</font>";
387 } else { 387 } else {
388 mText.append(i18n("<p><i>%1 % completed</i></p>") 388 mText.append(i18n("<p><i>%1 % completed</i></p>")
389 .arg(event->percentComplete())); 389 .arg(event->percentComplete()));
390 } 390 }
391 391
392 if (event->cancelled ()) { 392 if (event->cancelled ()) {
393 mText +="<font color=\"#B00000\">"; 393 mText +="<font color=\"#B00000\">";
394 addTag("i",i18n("This todo has been cancelled!")); 394 addTag("i",i18n("This todo has been cancelled!"));
395 mText.append("<br>"); 395 mText.append("<br>");
396 mText += "</font>"; 396 mText += "</font>";
397 mMailSubject += i18n("(cancelled)"); 397 mMailSubject += i18n("(cancelled)");
398 } 398 }
399 399
400 if (!event->location().isEmpty()) { 400 if (!event->location().isEmpty()) {
401 addTag("b",i18n("Location: ")); 401 addTag("b",i18n("Location: "));
402 mText.append(event->location()+"<br>"); 402 mText.append(event->location()+"<br>");
403 mMailSubject += i18n(" at ") + event->location(); 403 mMailSubject += i18n(" at ") + event->location();
404 } 404 }
405
406 if (event->recurrence()->doesRecur()) {
407
408 QString recurText = event->recurrence()->recurrenceText();
409 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
410
411 }
405 if (event->hasStartDate()) { 412 if (event->hasStartDate()) {
406 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 413 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
407 } 414 }
408 if (event->hasDueDate()) { 415 if (event->hasDueDate()) {
409 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 416 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
410 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 417 mMailSubject += i18n(" - " )+event->dtDueStr( true );
411 } 418 }
412 addTag("b",i18n("Access: ")); 419 addTag("b",i18n("Access: "));
413 mText.append(event->secrecyStr()+"<br>"); 420 mText.append(event->secrecyStr()+"<br>");
414 if (!event->description().isEmpty()) { 421 if (!event->description().isEmpty()) {
415 addTag("p",i18n("<b>Details: </b>")); 422 addTag("p",i18n("<b>Details: </b>"));
416 addTag("p",event->description()); 423 addTag("p",event->description());
417 } 424 }
418 425
419 formatCategories(event); 426 formatCategories(event);
420 427
421 mText.append(i18n("<p><b>Priority:</b> %2</p>") 428 mText.append(i18n("<p><b>Priority:</b> %2</p>")
422 .arg(QString::number(event->priority()))); 429 .arg(QString::number(event->priority())));
423 430
424 formatReadOnly(event); 431 formatReadOnly(event);
425 formatAttendees(event); 432 formatAttendees(event);
426 if ( event->relatedTo() ) { 433 if ( event->relatedTo() ) {
427 addTag("b",i18n("Parent todo:<br>")); 434 addTag("b",i18n("Parent todo:<br>"));
428 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 435 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
429 } 436 }
430 QPtrList<Incidence> Relations = event->relations(); 437 QPtrList<Incidence> Relations = event->relations();
431 Incidence *to; 438 Incidence *to;
432 if ( Relations.first() ) 439 if ( Relations.first() )
433 addTag("b",i18n("Sub todos:<br>")); 440 addTag("b",i18n("Sub todos:<br>"));
434 for (to=Relations.first();to;to=Relations.next()) { 441 for (to=Relations.first();to;to=Relations.next()) {
435 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 442 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
436 443
437 } 444 }
438 setText(mText); 445 setText(mText);
439} 446}
440 447
441void KOEventViewer::formatCategories(Incidence *event) 448void KOEventViewer::formatCategories(Incidence *event)
442{ 449{
443 if (!event->categoriesStr().isEmpty()) { 450 if (!event->categoriesStr().isEmpty()) {
444 if (event->categories().count() == 1) { 451 if (event->categories().count() == 1) {
445 addTag("h3",i18n("Category")); 452 addTag("h3",i18n("Category"));
446 } else { 453 } else {
447 addTag("h3",i18n("Categories")); 454 addTag("h3",i18n("Categories"));
448 } 455 }
449 addTag("p",event->categoriesStr()); 456 addTag("p",event->categoriesStr());
450 } 457 }
451} 458}
452void KOEventViewer::formatAttendees(Incidence *event) 459void KOEventViewer::formatAttendees(Incidence *event)
453{ 460{
454 QPtrList<Attendee> attendees = event->attendees(); 461 QPtrList<Attendee> attendees = event->attendees();
455 if (attendees.count()) { 462 if (attendees.count()) {
456 463
457 464
458 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 465 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
459 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 466 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
460 addTag("h3",i18n("Organizer")); 467 addTag("h3",i18n("Organizer"));
461 mText.append("<ul><li>"); 468 mText.append("<ul><li>");
462#ifndef KORG_NOKABC 469#ifndef KORG_NOKABC
463 470
464#ifdef DESKTOP_VERSION 471#ifdef DESKTOP_VERSION
465 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 472 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
466 KABC::Addressee::List addressList; 473 KABC::Addressee::List addressList;
467 addressList = add_book->findByEmail(event->organizer()); 474 addressList = add_book->findByEmail(event->organizer());
468 KABC::Addressee o = addressList.first(); 475 KABC::Addressee o = addressList.first();
469 if (!o.isEmpty() && addressList.size()<2) { 476 if (!o.isEmpty() && addressList.size()<2) {
470 mText += "<a href=\"uid:" + o.uid() + "\">"; 477 mText += "<a href=\"uid:" + o.uid() + "\">";
471 mText += o.formattedName(); 478 mText += o.formattedName();
472 mText += "</a>\n"; 479 mText += "</a>\n";
473 } else { 480 } else {
474 mText.append(event->organizer()); 481 mText.append(event->organizer());
475 } 482 }
476#else //DESKTOP_VERSION 483#else //DESKTOP_VERSION
477 mText += "<a href=\"uid:organizer\">"; 484 mText += "<a href=\"uid:organizer\">";
478 mText += event->organizer(); 485 mText += event->organizer();
479 mText += "</a>\n"; 486 mText += "</a>\n";
480#endif //DESKTOP_VERSION 487#endif //DESKTOP_VERSION
481 488
482 489
483#else 490#else
484 mText.append(event->organizer()); 491 mText.append(event->organizer());
485#endif 492#endif
486 493
487 if (iconPath) { 494 if (iconPath) {
488 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 495 mText += " <a href=\"mailto:" + event->organizer() + "\">";
489 mText += "<IMG src=\"" + iconPath + "\">"; 496 mText += "<IMG src=\"" + iconPath + "\">";
490 mText += "</a>\n"; 497 mText += "</a>\n";
491 } 498 }
492 mText.append("</li></ul>"); 499 mText.append("</li></ul>");
493 500
494 addTag("h3",i18n("Attendees")); 501 addTag("h3",i18n("Attendees"));
495 Attendee *a; 502 Attendee *a;
496 mText.append("<ul>"); 503 mText.append("<ul>");
497 int a_count = 0; 504 int a_count = 0;
498 int a_count_nr = 0; 505 int a_count_nr = 0;
499 506
500 for(a=attendees.first();a;a=attendees.next()) { 507 for(a=attendees.first();a;a=attendees.next()) {
501#ifndef KORG_NOKABC 508#ifndef KORG_NOKABC
502#ifdef DESKTOP_VERSION 509#ifdef DESKTOP_VERSION
503 if (a->name().isEmpty()) { 510 if (a->name().isEmpty()) {
504 addressList = add_book->findByEmail(a->email()); 511 addressList = add_book->findByEmail(a->email());
505 KABC::Addressee o = addressList.first(); 512 KABC::Addressee o = addressList.first();
506 if (!o.isEmpty() && addressList.size()<2) { 513 if (!o.isEmpty() && addressList.size()<2) {
507 mText += "<a href=\"uid:" + o.uid() + "\">"; 514 mText += "<a href=\"uid:" + o.uid() + "\">";
508 mText += o.formattedName(); 515 mText += o.formattedName();
509 mText += "</a>\n"; 516 mText += "</a>\n";
510 } else { 517 } else {
511 mText += "<li>"; 518 mText += "<li>";
512 mText.append(a->email()); 519 mText.append(a->email());
513 mText += "\n"; 520 mText += "\n";
514 } 521 }
515 } else { 522 } else {
516 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 523 mText += "<li><a href=\"uid:" + a->uid() + "\">";
517 if (!a->name().isEmpty()) mText += a->name(); 524 if (!a->name().isEmpty()) mText += a->name();
518 else mText += a->email(); 525 else mText += a->email();
519 mText += "</a>\n"; 526 mText += "</a>\n";
520 } 527 }
521#else //DESKTOP_VERSION 528#else //DESKTOP_VERSION
522 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 529 mText += "<li><a href=\"uid:" + a->uid() + "\">";
523 if (!a->name().isEmpty()) mText += a->name(); 530 if (!a->name().isEmpty()) mText += a->name();
524 else mText += a->email(); 531 else mText += a->email();
525 mText += "</a>\n"; 532 mText += "</a>\n";
526#endif //DESKTOP_VERSION 533#endif //DESKTOP_VERSION
527#else 534#else
528 //qDebug("nokabc "); 535 //qDebug("nokabc ");
529 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 536 mText += "<li><a href=\"uid:" + a->uid() + "\">";
530 if (!a->name().isEmpty()) mText += a->name(); 537 if (!a->name().isEmpty()) mText += a->name();
531 else mText += a->email(); 538 else mText += a->email();
532 mText += "</a>\n"; 539 mText += "</a>\n";
533#endif 540#endif
534 541
535 542
536 if (!a->email().isEmpty()) { 543 if (!a->email().isEmpty()) {
537 if (iconPath) { 544 if (iconPath) {
538 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 545 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
539 if ( a->RSVP() ) { 546 if ( a->RSVP() ) {
540 ++a_count_nr; 547 ++a_count_nr;
541 mText += "<IMG src=\"" + iconPath + "\">"; 548 mText += "<IMG src=\"" + iconPath + "\">";
542 } 549 }
543 else { 550 else {
544 ++a_count; 551 ++a_count;
545 mText += "<IMG src=\"" + NOiconPath + "\">"; 552 mText += "<IMG src=\"" + NOiconPath + "\">";
546 } 553 }
547 mText += "</a>\n"; 554 mText += "</a>\n";
548 } 555 }
549 } 556 }
550 if (a->status() != Attendee::NeedsAction ) 557 if (a->status() != Attendee::NeedsAction )
551 mText +="[" + a->statusStr() + "] "; 558 mText +="[" + a->statusStr() + "] ";
552 if (a->role() == Attendee::Chair ) 559 if (a->role() == Attendee::Chair )
553 mText +="(" + a->roleStr().left(1) + ".)"; 560 mText +="(" + a->roleStr().left(1) + ".)";
554 } 561 }
555 mText.append("</li></ul>"); 562 mText.append("</li></ul>");
556 if ( (a_count+a_count_nr) > 1 ) { 563 if ( (a_count+a_count_nr) > 1 ) {
557 mText += "<a href=\"mailto:ALL\">"; 564 mText += "<a href=\"mailto:ALL\">";
558 mText += i18n( "Mail to all" ); 565 mText += i18n( "Mail to all" );
559 mText += "</a> ( "; 566 mText += "</a> ( ";
560 mText += "<IMG src=\"" + iconPath + "\">"; 567 mText += "<IMG src=\"" + iconPath + "\">";
561 mText += i18n( " and " ); 568 mText += i18n( " and " );
562 mText += "<IMG src=\"" + NOiconPath + "\"> )"; 569 mText += "<IMG src=\"" + NOiconPath + "\"> )";
563 mText += "<br>\n"; 570 mText += "<br>\n";
564 571
565 572
566 } 573 }
567 if ( a_count_nr > 1 ) { 574 if ( a_count_nr > 1 ) {
568 mText += "<a href=\"mailto:RSVP\">"; 575 mText += "<a href=\"mailto:RSVP\">";
569 mText += i18n( "Mail to selected" ); 576 mText += i18n( "Mail to selected" );
570 mText += "</a> ( "; 577 mText += "</a> ( ";
571 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); 578 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
572 mText += "<br>\n"; 579 mText += "<br>\n";
573 } 580 }
574 } 581 }
575 582
576} 583}
577void KOEventViewer::appendJournal(Journal *jour, int mode ) 584void KOEventViewer::appendJournal(Journal *jour, int mode )
578{ 585{
579 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 586 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
580 if (mode == 0 ) { 587 if (mode == 0 ) {
581 addTag("h2",i18n("Journal from: ")); 588 addTag("h2",i18n("Journal from: "));
582 } 589 }
583 else { 590 else {
584 if ( mode == 1 ) { 591 if ( mode == 1 ) {
585 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 592 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
586 } else { 593 } else {
587 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 594 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
588 } 595 }
589 } 596 }
590 topLevelWidget()->setCaption("Journal Viewer"); 597 topLevelWidget()->setCaption("Journal Viewer");
591 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 598 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
592 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 599 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
593 if (!jour->description().isEmpty()) { 600 if (!jour->description().isEmpty()) {
594 addTag("p",jour->description()); 601 addTag("p",jour->description());
595 } 602 }
596 setText(mText); 603 setText(mText);
597} 604}
598 605
599void KOEventViewer::formatReadOnly(Incidence *event) 606void KOEventViewer::formatReadOnly(Incidence *event)
600{ 607{
601 if (event->isReadOnly()) { 608 if (event->isReadOnly()) {
602 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 609 addTag("p","<em>(" + i18n("read-only") + ")</em>");
603 } 610 }
604} 611}
605void KOEventViewer::setSyncMode( bool b ) 612void KOEventViewer::setSyncMode( bool b )
606{ 613{
607 mSyncMode = b; 614 mSyncMode = b;
608} 615}
609 616
610 617
611void KOEventViewer::setTodo(Todo *event, bool clearV ) 618void KOEventViewer::setTodo(Todo *event, bool clearV )
612{ 619{
613 if ( clearV ) 620 if ( clearV )
614 clearEvents(); 621 clearEvents();
615 if ( mSyncMode ) { 622 if ( mSyncMode ) {
616 if ( clearV ) 623 if ( clearV )
617 appendTodo(event,1 ); 624 appendTodo(event,1 );
618 else 625 else
619 appendTodo(event,2); 626 appendTodo(event,2);
620 } else 627 } else
621 appendTodo(event); 628 appendTodo(event);
622} 629}
623void KOEventViewer::setJournal(Journal *event, bool clearV ) 630void KOEventViewer::setJournal(Journal *event, bool clearV )
624{ 631{
625 if ( clearV ) 632 if ( clearV )
626 clearEvents(); 633 clearEvents();
627 if ( mSyncMode ) { 634 if ( mSyncMode ) {
628 if ( clearV ) 635 if ( clearV )
629 appendJournal(event, 1); 636 appendJournal(event, 1);
630 else 637 else
631 appendJournal(event, 2); 638 appendJournal(event, 2);
632 } else 639 } else
633 appendJournal(event); 640 appendJournal(event);
634} 641}
635 642
636void KOEventViewer::setEvent(Event *event) 643void KOEventViewer::setEvent(Event *event)
637{ 644{
638 clearEvents(); 645 clearEvents();
639 if ( mSyncMode ) 646 if ( mSyncMode )
640 appendEvent(event, 1); 647 appendEvent(event, 1);
641 else 648 else
642 appendEvent(event); 649 appendEvent(event);
643} 650}
644 651
645void KOEventViewer::addEvent(Event *event) 652void KOEventViewer::addEvent(Event *event)
646{ 653{
647 if ( mSyncMode ) 654 if ( mSyncMode )
648 appendEvent(event, 2); 655 appendEvent(event, 2);
649 else 656 else
650 appendEvent(event); 657 appendEvent(event);
651} 658}
652 659
653void KOEventViewer::clearEvents(bool now) 660void KOEventViewer::clearEvents(bool now)
654{ 661{
655 mText = ""; 662 mText = "";
656 if (now) setText(mText); 663 if (now) setText(mText);
657} 664}
658 665
659void KOEventViewer::addText(QString text) 666void KOEventViewer::addText(QString text)
660{ 667{
661 mText.append(text); 668 mText.append(text);
662 setText(mText); 669 setText(mText);
663} 670}
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index acd9265..d8e940b 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,927 +1,927 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qwhatsthis.h> 35#include <qwhatsthis.h>
36#include <qregexp.h> 36#include <qregexp.h>
37 37
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42 42
43#include <libkdepim/kpimglobalprefs.h> 43#include <libkdepim/kpimglobalprefs.h>
44#include <libkcal/calendar.h> 44#include <libkcal/calendar.h>
45#include <libkcal/calendarlocal.h> 45#include <libkcal/calendarlocal.h>
46#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
47#include <libkcal/vcalformat.h> 47#include <libkcal/vcalformat.h>
48#include <libkcal/recurrence.h> 48#include <libkcal/recurrence.h>
49#include <libkcal/filestorage.h> 49#include <libkcal/filestorage.h>
50#include <libkdepim/categoryselectdialog.h> 50#include <libkdepim/categoryselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 51#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 52#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 53#include <qpe/qpeapplication.h>
54#else 54#else
55#include <qapplication.h> 55#include <qapplication.h>
56#endif 56#endif
57 57
58#ifndef KORG_NOPRINTER 58#ifndef KORG_NOPRINTER
59#include "calprinter.h" 59#include "calprinter.h"
60#endif 60#endif
61#include "koglobals.h" 61#include "koglobals.h"
62#include "koprefs.h" 62#include "koprefs.h"
63#include "kfiledialog.h" 63#include "kfiledialog.h"
64 64
65#include "kolistview.h" 65#include "kolistview.h"
66 66
67 67
68 68
69 69
70class KOListViewWhatsThis :public QWhatsThis 70class KOListViewWhatsThis :public QWhatsThis
71{ 71{
72public: 72public:
73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
74 74
75protected: 75protected:
76 virtual QString text( const QPoint& p) 76 virtual QString text( const QPoint& p)
77 { 77 {
78 return _view->getWhatsThisText(p) ; 78 return _view->getWhatsThisText(p) ;
79 } 79 }
80private: 80private:
81 QWidget* _wid; 81 QWidget* _wid;
82 KOListView * _view; 82 KOListView * _view;
83}; 83};
84 84
85 85
86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
87{ 87{
88 mItem = item; 88 mItem = item;
89 mDate = date; 89 mDate = date;
90} 90}
91 91
92ListItemVisitor::~ListItemVisitor() 92ListItemVisitor::~ListItemVisitor()
93{ 93{
94} 94}
95 95
96bool ListItemVisitor::visit(Event *e) 96bool ListItemVisitor::visit(Event *e)
97{ 97{
98 98
99 bool ok = false; 99 bool ok = false;
100 QString start, end; 100 QString start, end;
101 QDate ds, de; 101 QDate ds, de;
102 if ( e->doesRecur() ) { 102 if ( e->doesRecur() ) {
103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
104 if ( ok ) { 104 if ( ok ) {
105 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 105 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
106 start = KGlobal::locale()->formatDate(ds,true); 106 start = KGlobal::locale()->formatDate(ds,true);
107 de = ds.addDays( days); 107 de = ds.addDays( days);
108 end = KGlobal::locale()->formatDate(de,true); 108 end = KGlobal::locale()->formatDate(de,true);
109 } 109 }
110 110
111 } 111 }
112 if ( ! ok ) { 112 if ( ! ok ) {
113 start =e->dtStartDateStr(); 113 start =e->dtStartDateStr();
114 end = e->dtEndDateStr(); 114 end = e->dtEndDateStr();
115 ds = e->dtStart().date(); 115 ds = e->dtStart().date();
116 de = e->dtEnd().date(); 116 de = e->dtEnd().date();
117 } 117 }
118 mItem->setText(0,e->summary()); 118 mItem->setText(0,e->summary());
119 mItem->setText(1,start); 119 mItem->setText(1,start);
120 mItem->setText(2,e->dtStartTimeStr()); 120 mItem->setText(2,e->dtStartTimeStr());
121 mItem->setText(3,end); 121 mItem->setText(3,end);
122 mItem->setText(4,e->dtEndTimeStr()); 122 mItem->setText(4,e->dtEndTimeStr());
123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No"));
124 mItem->setText(6, e->recurrence()->recurrenceText()); 124 mItem->setText(6, e->recurrence()->recurrenceText());
125 mItem->setText(7,"---"); 125 mItem->setText(7,"---");
126 mItem->setText(8,"---"); 126 mItem->setText(8,"---");
127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
128 mItem->setText(10,e->categoriesStr()); 128 mItem->setText(10,e->categoriesStr());
129 129
130 QString key; 130 QString key;
131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
133 mItem->setSortKey(1,key); 133 mItem->setSortKey(1,key);
134 134
135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
137 mItem->setSortKey(3,key); 137 mItem->setSortKey(3,key);
138 138
139 return true; 139 return true;
140} 140}
141 141
142bool ListItemVisitor::visit(Todo *t) 142bool ListItemVisitor::visit(Todo *t)
143{ 143{
144 mItem->setText(0,i18n("To-Do: %1").arg(t->summary())); 144 mItem->setText(0,i18n("To-Do: %1").arg(t->summary()));
145 if (t->hasStartDate()) { 145 if (t->hasStartDate()) {
146 mItem->setText(1,t->dtStartDateStr()); 146 mItem->setText(1,t->dtStartDateStr());
147 if (t->doesFloat()) { 147 if (t->doesFloat()) {
148 mItem->setText(2,"---"); 148 mItem->setText(2,"---");
149 } else { 149 } else {
150 mItem->setText(2,t->dtStartTimeStr()); 150 mItem->setText(2,t->dtStartTimeStr());
151 } 151 }
152 } else { 152 } else {
153 mItem->setText(1,"---"); 153 mItem->setText(1,"---");
154 mItem->setText(2,"---"); 154 mItem->setText(2,"---");
155 } 155 }
156 mItem->setText(3,"---"); 156 mItem->setText(3,"---");
157 mItem->setText(4,"---"); 157 mItem->setText(4,"---");
158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No"));
159 mItem->setText(6,"---"); 159 mItem->setText(6, t->recurrence()->recurrenceText());
160 if (t->hasDueDate()) { 160 if (t->hasDueDate()) {
161 mItem->setText(7,t->dtDueDateStr()); 161 mItem->setText(7,t->dtDueDateStr());
162 if (t->doesFloat()) { 162 if (t->doesFloat()) {
163 mItem->setText(8,"---"); 163 mItem->setText(8,"---");
164 } else { 164 } else {
165 mItem->setText(8,t->dtDueTimeStr()); 165 mItem->setText(8,t->dtDueTimeStr());
166 } 166 }
167 } else { 167 } else {
168 mItem->setText(7,"---"); 168 mItem->setText(7,"---");
169 mItem->setText(8,"---"); 169 mItem->setText(8,"---");
170 } 170 }
171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
172 mItem->setText(10,t->categoriesStr()); 172 mItem->setText(10,t->categoriesStr());
173 173
174 QString key; 174 QString key;
175 QDate d; 175 QDate d;
176 if (t->hasDueDate()) { 176 if (t->hasDueDate()) {
177 d = t->dtDue().date(); 177 d = t->dtDue().date();
178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
180 mItem->setSortKey(7,key); 180 mItem->setSortKey(7,key);
181 } 181 }
182 if ( t->hasStartDate() ) { 182 if ( t->hasStartDate() ) {
183 d = t->dtStart().date(); 183 d = t->dtStart().date();
184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
186 mItem->setSortKey(1,key); 186 mItem->setSortKey(1,key);
187 } 187 }
188 return true; 188 return true;
189} 189}
190 190
191bool ListItemVisitor::visit(Journal * j) 191bool ListItemVisitor::visit(Journal * j)
192{ 192{
193 QString des = j->description().left(50); 193 QString des = j->description().left(50);
194 des = des.simplifyWhiteSpace (); 194 des = des.simplifyWhiteSpace ();
195 des.replace (QRegExp ("\\n"),"" ); 195 des.replace (QRegExp ("\\n"),"" );
196 des.replace (QRegExp ("\\r"),"" ); 196 des.replace (QRegExp ("\\r"),"" );
197 mItem->setText(0,i18n("Journal")+": "+des.left(25)); 197 mItem->setText(0,i18n("Journal")+": "+des.left(25));
198 mItem->setText(1,j->dtStartDateStr()); 198 mItem->setText(1,j->dtStartDateStr());
199 mItem->setText(2,"---"); 199 mItem->setText(2,"---");
200 mItem->setText(3,"---"); 200 mItem->setText(3,"---");
201 mItem->setText(4,"---"); 201 mItem->setText(4,"---");
202 mItem->setText(5,"---"); 202 mItem->setText(5,"---");
203 mItem->setText(6,"---"); 203 mItem->setText(6,"---");
204 mItem->setText(7,j->dtStartDateStr()); 204 mItem->setText(7,j->dtStartDateStr());
205 mItem->setText(8,"---"); 205 mItem->setText(8,"---");
206 mItem->setText(9,"---"); 206 mItem->setText(9,"---");
207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
208 208
209 QString key; 209 QString key;
210 QDate d = j->dtStart().date(); 210 QDate d = j->dtStart().date();
211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
212 mItem->setSortKey(1,key); 212 mItem->setSortKey(1,key);
213 mItem->setSortKey(7,key); 213 mItem->setSortKey(7,key);
214 214
215 return true; 215 return true;
216} 216}
217 217
218KOListView::KOListView(Calendar *calendar, QWidget *parent, 218KOListView::KOListView(Calendar *calendar, QWidget *parent,
219 const char *name) 219 const char *name)
220 : KOEventView(calendar, parent, name) 220 : KOEventView(calendar, parent, name)
221{ 221{
222 mActiveItem = 0; 222 mActiveItem = 0;
223 mListView = new KOListViewListView(this); 223 mListView = new KOListViewListView(this);
224 mListView->addColumn(i18n("Summary")); 224 mListView->addColumn(i18n("Summary"));
225 mListView->addColumn(i18n("Start Date")); 225 mListView->addColumn(i18n("Start Date"));
226 mListView->addColumn(i18n("Start Time")); 226 mListView->addColumn(i18n("Start Time"));
227 mListView->addColumn(i18n("End Date")); 227 mListView->addColumn(i18n("End Date"));
228 mListView->addColumn(i18n("End Time")); 228 mListView->addColumn(i18n("End Time"));
229 mListView->addColumn(i18n("Alarm")); // alarm set? 229 mListView->addColumn(i18n("Alarm")); // alarm set?
230 mListView->addColumn(i18n("Recurs")); // recurs? 230 mListView->addColumn(i18n("Recurs")); // recurs?
231 mListView->addColumn(i18n("Due Date")); 231 mListView->addColumn(i18n("Due Date"));
232 mListView->addColumn(i18n("Due Time")); 232 mListView->addColumn(i18n("Due Time"));
233 mListView->addColumn(i18n("Cancelled")); 233 mListView->addColumn(i18n("Cancelled"));
234 mListView->addColumn(i18n("Categories")); 234 mListView->addColumn(i18n("Categories"));
235 235
236 mListView->setColumnAlignment(0,AlignLeft); 236 mListView->setColumnAlignment(0,AlignLeft);
237 mListView->setColumnAlignment(1,AlignLeft); 237 mListView->setColumnAlignment(1,AlignLeft);
238 mListView->setColumnAlignment(2,AlignHCenter); 238 mListView->setColumnAlignment(2,AlignHCenter);
239 mListView->setColumnAlignment(3,AlignLeft); 239 mListView->setColumnAlignment(3,AlignLeft);
240 mListView->setColumnAlignment(4,AlignHCenter); 240 mListView->setColumnAlignment(4,AlignHCenter);
241 mListView->setColumnAlignment(5,AlignLeft); 241 mListView->setColumnAlignment(5,AlignLeft);
242 mListView->setColumnAlignment(6,AlignLeft); 242 mListView->setColumnAlignment(6,AlignLeft);
243 mListView->setColumnAlignment(7,AlignLeft); 243 mListView->setColumnAlignment(7,AlignLeft);
244 mListView->setColumnAlignment(8,AlignLeft); 244 mListView->setColumnAlignment(8,AlignLeft);
245 mListView->setColumnAlignment(9,AlignLeft); 245 mListView->setColumnAlignment(9,AlignLeft);
246 mListView->setColumnAlignment(10,AlignLeft); 246 mListView->setColumnAlignment(10,AlignLeft);
247 mListView->setColumnWidthMode(10, QListView::Manual); 247 mListView->setColumnWidthMode(10, QListView::Manual);
248 new KOListViewWhatsThis(mListView->viewport(),this); 248 new KOListViewWhatsThis(mListView->viewport(),this);
249 249
250 int iii = 0; 250 int iii = 0;
251 for ( iii = 0; iii< 10 ; ++iii ) 251 for ( iii = 0; iii< 10 ; ++iii )
252 mListView->setColumnWidthMode( iii, QListView::Manual ); 252 mListView->setColumnWidthMode( iii, QListView::Manual );
253 253
254 QBoxLayout *layoutTop = new QVBoxLayout(this); 254 QBoxLayout *layoutTop = new QVBoxLayout(this);
255 layoutTop->addWidget(mListView); 255 layoutTop->addWidget(mListView);
256 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 256 mListView->setFont ( KOPrefs::instance()->mListViewFont );
257 mPopupMenu = eventPopup(); 257 mPopupMenu = eventPopup();
258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
259 i18n("Select all"),this, 259 i18n("Select all"),this,
260 SLOT(allSelection()),true); 260 SLOT(allSelection()),true);
261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
262 i18n("Deselect all"),this, 262 i18n("Deselect all"),this,
263 SLOT(clearSelection()),true); 263 SLOT(clearSelection()),true);
264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
265 i18n("Delete all selected"),this, 265 i18n("Delete all selected"),this,
266 SLOT(deleteAll()),true); 266 SLOT(deleteAll()),true);
267 mPopupMenu->insertSeparator(); 267 mPopupMenu->insertSeparator();
268 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 268 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
269 i18n("Save selected to file..."),this, 269 i18n("Save selected to file..."),this,
270 SLOT(saveToFile()),true); 270 SLOT(saveToFile()),true);
271 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 271 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
272 i18n("Save Journal/Description..."),this, 272 i18n("Save Journal/Description..."),this,
273 SLOT(saveDescriptionToFile()),true); 273 SLOT(saveDescriptionToFile()),true);
274 // mPopupMenu->insertSeparator(); 274 // mPopupMenu->insertSeparator();
275 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 275 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
276 i18n("Add Categ. to selected..."),this, 276 i18n("Add Categ. to selected..."),this,
277 SLOT(addCat()),true); 277 SLOT(addCat()),true);
278 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 278 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
279 i18n("Set Categ. for selected..."),this, 279 i18n("Set Categ. for selected..."),this,
280 SLOT(setCat()),true); 280 SLOT(setCat()),true);
281 //mPopupMenu->insertSeparator(); 281 //mPopupMenu->insertSeparator();
282 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 282 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
283 i18n("Set alarm for selected..."),this, 283 i18n("Set alarm for selected..."),this,
284 SLOT(setAlarm()),true); 284 SLOT(setAlarm()),true);
285 285
286 286
287#ifndef DESKTOP_VERSION 287#ifndef DESKTOP_VERSION
288 mPopupMenu->insertSeparator(); 288 mPopupMenu->insertSeparator();
289 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 289 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
290 i18n("Beam selected via IR"),this, 290 i18n("Beam selected via IR"),this,
291 SLOT(beamSelected()),true); 291 SLOT(beamSelected()),true);
292#endif 292#endif
293 /* 293 /*
294 mPopupMenu = new QPopupMenu; 294 mPopupMenu = new QPopupMenu;
295 mPopupMenu->insertItem(i18n("Edit Event"), this, 295 mPopupMenu->insertItem(i18n("Edit Event"), this,
296 SLOT (editEvent())); 296 SLOT (editEvent()));
297 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 297 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
298 SLOT (deleteEvent())); 298 SLOT (deleteEvent()));
299 mPopupMenu->insertSeparator(); 299 mPopupMenu->insertSeparator();
300 mPopupMenu->insertItem(i18n("Show Dates"), this, 300 mPopupMenu->insertItem(i18n("Show Dates"), this,
301 SLOT(showDates())); 301 SLOT(showDates()));
302 mPopupMenu->insertItem(i18n("Hide Dates"), this, 302 mPopupMenu->insertItem(i18n("Hide Dates"), this,
303 SLOT(hideDates())); 303 SLOT(hideDates()));
304 */ 304 */
305 QObject::connect(mListView,SIGNAL( newEvent()), 305 QObject::connect(mListView,SIGNAL( newEvent()),
306 this,SIGNAL(signalNewEvent())); 306 this,SIGNAL(signalNewEvent()));
307 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 307 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
308 this,SLOT(defaultItemAction(QListViewItem *))); 308 this,SLOT(defaultItemAction(QListViewItem *)));
309 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *, 309 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *,
310 const QPoint &, int )), 310 const QPoint &, int )),
311 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 311 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
312 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 312 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
313 SLOT(processSelectionChange(QListViewItem *))); 313 SLOT(processSelectionChange(QListViewItem *)));
314 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 314 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
315 SIGNAL(showIncidenceSignal(Incidence *)) ); 315 SIGNAL(showIncidenceSignal(Incidence *)) );
316 316
317 readSettings(KOGlobals::config(),"KOListView Layout"); 317 readSettings(KOGlobals::config(),"KOListView Layout");
318} 318}
319 319
320KOListView::~KOListView() 320KOListView::~KOListView()
321{ 321{
322 delete mPopupMenu; 322 delete mPopupMenu;
323} 323}
324QString KOListView::getWhatsThisText(QPoint p) 324QString KOListView::getWhatsThisText(QPoint p)
325{ 325{
326 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 326 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
327 if ( item ) 327 if ( item )
328 return KIncidenceFormatter::instance()->getFormattedText( item->data() ); 328 return KIncidenceFormatter::instance()->getFormattedText( item->data() );
329 return i18n("That is the list view" ); 329 return i18n("That is the list view" );
330 330
331} 331}
332 332
333void KOListView::updateList() 333void KOListView::updateList()
334{ 334{
335 // qDebug(" KOListView::updateList() "); 335 // qDebug(" KOListView::updateList() ");
336 336
337} 337}
338 338
339void KOListView::addCat( ) 339void KOListView::addCat( )
340{ 340{
341 setCategories( false ); 341 setCategories( false );
342} 342}
343void KOListView::setCat() 343void KOListView::setCat()
344{ 344{
345 setCategories( true ); 345 setCategories( true );
346} 346}
347void KOListView::setAlarm() 347void KOListView::setAlarm()
348{ 348{
349 KOAlarmPrefs kap( this); 349 KOAlarmPrefs kap( this);
350 if ( !kap.exec() ) 350 if ( !kap.exec() )
351 return; 351 return;
352 352
353 353
354 QStringList itemList; 354 QStringList itemList;
355 QPtrList<KOListViewItem> sel ; 355 QPtrList<KOListViewItem> sel ;
356 QListViewItem *qitem = mListView->firstChild (); 356 QListViewItem *qitem = mListView->firstChild ();
357 while ( qitem ) { 357 while ( qitem ) {
358 if ( qitem->isSelected() ) { 358 if ( qitem->isSelected() ) {
359 Incidence* inc = ((KOListViewItem *) qitem)->data(); 359 Incidence* inc = ((KOListViewItem *) qitem)->data();
360 if ( inc->type() != "Journal" ) { 360 if ( inc->type() != "Journal" ) {
361 if ( inc->type() == "Todo" ) { 361 if ( inc->type() == "Todo" ) {
362 if ( ((Todo*)inc)->hasDueDate() ) 362 if ( ((Todo*)inc)->hasDueDate() )
363 sel.append(((KOListViewItem *)qitem)); 363 sel.append(((KOListViewItem *)qitem));
364 } else 364 } else
365 sel.append(((KOListViewItem *)qitem)); 365 sel.append(((KOListViewItem *)qitem));
366 } 366 }
367 } 367 }
368 qitem = qitem->nextSibling(); 368 qitem = qitem->nextSibling();
369 } 369 }
370 int count = 0; 370 int count = 0;
371 KOListViewItem * item, *temp; 371 KOListViewItem * item, *temp;
372 item = sel.first(); 372 item = sel.first();
373 Incidence* inc; 373 Incidence* inc;
374 while ( item ) { 374 while ( item ) {
375 inc = item->data(); 375 inc = item->data();
376 ++count; 376 ++count;
377 if (kap.mAlarmButton->isChecked()) { 377 if (kap.mAlarmButton->isChecked()) {
378 if (inc->alarms().count() == 0) 378 if (inc->alarms().count() == 0)
379 inc->newAlarm(); 379 inc->newAlarm();
380 QPtrList<Alarm> alarms = inc->alarms(); 380 QPtrList<Alarm> alarms = inc->alarms();
381 Alarm *alarm; 381 Alarm *alarm;
382 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 382 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
383 alarm->setEnabled(true); 383 alarm->setEnabled(true);
384 int j = kap.mAlarmTimeEdit->value()* -60; 384 int j = kap.mAlarmTimeEdit->value()* -60;
385 if (kap.mAlarmIncrCombo->currentItem() == 1) 385 if (kap.mAlarmIncrCombo->currentItem() == 1)
386 j = j * 60; 386 j = j * 60;
387 else if (kap.mAlarmIncrCombo->currentItem() == 2) 387 else if (kap.mAlarmIncrCombo->currentItem() == 2)
388 j = j * (60 * 24); 388 j = j * (60 * 24);
389 alarm->setStartOffset( j ); 389 alarm->setStartOffset( j );
390 390
391 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 391 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
392 alarm->setProcedureAlarm(kap.mAlarmProgram); 392 alarm->setProcedureAlarm(kap.mAlarmProgram);
393 } 393 }
394 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 394 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
395 alarm->setAudioAlarm(kap.mAlarmSound); 395 alarm->setAudioAlarm(kap.mAlarmSound);
396 else 396 else
397 alarm->setType(Alarm::Invalid); 397 alarm->setType(Alarm::Invalid);
398 //alarm->setAudioAlarm("default"); 398 //alarm->setAudioAlarm("default");
399 // TODO: Deal with multiple alarms 399 // TODO: Deal with multiple alarms
400 break; // For now, stop after the first alarm 400 break; // For now, stop after the first alarm
401 } 401 }
402 } else { 402 } else {
403 Alarm* alarm = inc->alarms().first(); 403 Alarm* alarm = inc->alarms().first();
404 if ( alarm ) { 404 if ( alarm ) {
405 alarm->setEnabled(false); 405 alarm->setEnabled(false);
406 alarm->setType(Alarm::Invalid); 406 alarm->setType(Alarm::Invalid);
407 } 407 }
408 } 408 }
409 temp = item; 409 temp = item;
410 item = sel.next(); 410 item = sel.next();
411 mUidDict.remove( inc->uid() ); 411 mUidDict.remove( inc->uid() );
412 delete temp;; 412 delete temp;;
413 addIncidence( inc ); 413 addIncidence( inc );
414 } 414 }
415 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) ); 415 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) );
416 qDebug("KO: Set alarm for %d items", count); 416 qDebug("KO: Set alarm for %d items", count);
417 calendar()->reInitAlarmSettings(); 417 calendar()->reInitAlarmSettings();
418} 418}
419void KOListView::setCategories( bool removeOld ) 419void KOListView::setCategories( bool removeOld )
420{ 420{
421 421
422 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 422 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
423 if (! csd->exec()) { 423 if (! csd->exec()) {
424 delete csd; 424 delete csd;
425 return; 425 return;
426 } 426 }
427 QStringList catList = csd->selectedCategories(); 427 QStringList catList = csd->selectedCategories();
428 delete csd; 428 delete csd;
429 // if ( catList.count() == 0 ) 429 // if ( catList.count() == 0 )
430 // return; 430 // return;
431 catList.sort(); 431 catList.sort();
432 QString categoriesStr = catList.join(","); 432 QString categoriesStr = catList.join(",");
433 int i; 433 int i;
434 QStringList itemList; 434 QStringList itemList;
435 QPtrList<KOListViewItem> sel ; 435 QPtrList<KOListViewItem> sel ;
436 QListViewItem *qitem = mListView->firstChild (); 436 QListViewItem *qitem = mListView->firstChild ();
437 while ( qitem ) { 437 while ( qitem ) {
438 if ( qitem->isSelected() ) { 438 if ( qitem->isSelected() ) {
439 sel.append(((KOListViewItem *)qitem)); 439 sel.append(((KOListViewItem *)qitem));
440 } 440 }
441 qitem = qitem->nextSibling(); 441 qitem = qitem->nextSibling();
442 } 442 }
443 KOListViewItem * item, *temp; 443 KOListViewItem * item, *temp;
444 item = sel.first(); 444 item = sel.first();
445 Incidence* inc; 445 Incidence* inc;
446 while ( item ) { 446 while ( item ) {
447 inc = item->data(); 447 inc = item->data();
448 if ( removeOld ) { 448 if ( removeOld ) {
449 inc->setCategories( categoriesStr ); 449 inc->setCategories( categoriesStr );
450 } else { 450 } else {
451 itemList = QStringList::split (",", inc->categoriesStr() ); 451 itemList = QStringList::split (",", inc->categoriesStr() );
452 for( i = 0; i< catList.count(); ++i ) { 452 for( i = 0; i< catList.count(); ++i ) {
453 if ( !itemList.contains (catList[i])) 453 if ( !itemList.contains (catList[i]))
454 itemList.append( catList[i] ); 454 itemList.append( catList[i] );
455 } 455 }
456 itemList.sort(); 456 itemList.sort();
457 inc->setCategories( itemList.join(",") ); 457 inc->setCategories( itemList.join(",") );
458 } 458 }
459 temp = item; 459 temp = item;
460 item = sel.next(); 460 item = sel.next();
461 mUidDict.remove( inc->uid() ); 461 mUidDict.remove( inc->uid() );
462 delete temp;; 462 delete temp;;
463 addIncidence( inc ); 463 addIncidence( inc );
464 } 464 }
465} 465}
466 466
467void KOListView::beamSelected() 467void KOListView::beamSelected()
468{ 468{
469 int icount = 0; 469 int icount = 0;
470 QPtrList<Incidence> delSel ; 470 QPtrList<Incidence> delSel ;
471 QListViewItem *item = mListView->firstChild (); 471 QListViewItem *item = mListView->firstChild ();
472 while ( item ) { 472 while ( item ) {
473 if ( item->isSelected() ) { 473 if ( item->isSelected() ) {
474 delSel.append(((KOListViewItem *)item)->data()); 474 delSel.append(((KOListViewItem *)item)->data());
475 ++icount; 475 ++icount;
476 } 476 }
477 477
478 item = item->nextSibling(); 478 item = item->nextSibling();
479 } 479 }
480 if ( icount ) { 480 if ( icount ) {
481 emit beamIncidenceList( delSel ); 481 emit beamIncidenceList( delSel );
482 return; 482 return;
483 QString fn ; 483 QString fn ;
484 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 484 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
485 QString mes; 485 QString mes;
486 bool createbup = true; 486 bool createbup = true;
487 if ( createbup ) { 487 if ( createbup ) {
488 QString description = "\n"; 488 QString description = "\n";
489 CalendarLocal* cal = new CalendarLocal(); 489 CalendarLocal* cal = new CalendarLocal();
490 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 490 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
491 Incidence *incidence = delSel.first(); 491 Incidence *incidence = delSel.first();
492 while ( incidence ) { 492 while ( incidence ) {
493 Incidence *in = incidence->clone(); 493 Incidence *in = incidence->clone();
494 description += in->summary() + "\n"; 494 description += in->summary() + "\n";
495 cal->addIncidence( in ); 495 cal->addIncidence( in );
496 incidence = delSel.next(); 496 incidence = delSel.next();
497 } 497 }
498 FileStorage storage( cal, fn, new VCalFormat ); 498 FileStorage storage( cal, fn, new VCalFormat );
499 storage.save(); 499 storage.save();
500 delete cal; 500 delete cal;
501 mes = i18n("KO/Pi: Ready for beaming"); 501 mes = i18n("KO/Pi: Ready for beaming");
502 topLevelWidget()->setCaption(mes); 502 topLevelWidget()->setCaption(mes);
503 503
504#ifndef DESKTOP_VERSION 504#ifndef DESKTOP_VERSION
505 Ir *ir = new Ir( this ); 505 Ir *ir = new Ir( this );
506 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 506 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
507 ir->send( fn, description, "text/x-vCalendar" ); 507 ir->send( fn, description, "text/x-vCalendar" );
508#endif 508#endif
509 } 509 }
510 } 510 }
511} 511}
512void KOListView::beamDone( Ir *ir ) 512void KOListView::beamDone( Ir *ir )
513{ 513{
514#ifndef DESKTOP_VERSION 514#ifndef DESKTOP_VERSION
515 delete ir; 515 delete ir;
516#endif 516#endif
517 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 517 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
518} 518}
519 519
520void KOListView::saveDescriptionToFile() 520void KOListView::saveDescriptionToFile()
521{ 521{
522 522
523 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 523 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
524 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 524 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
525 i18n("Continue"), i18n("Cancel"), 0, 525 i18n("Continue"), i18n("Cancel"), 0,
526 0, 1 ); 526 0, 1 );
527 if ( result != 0 ) { 527 if ( result != 0 ) {
528 return; 528 return;
529 } 529 }
530 int icount = 0; 530 int icount = 0;
531 QPtrList<Incidence> delSel ; 531 QPtrList<Incidence> delSel ;
532 QListViewItem *item = mListView->firstChild (); 532 QListViewItem *item = mListView->firstChild ();
533 while ( item ) { 533 while ( item ) {
534 if ( item->isSelected() ) { 534 if ( item->isSelected() ) {
535 delSel.append(((KOListViewItem *)item)->data()); 535 delSel.append(((KOListViewItem *)item)->data());
536 ++icount; 536 ++icount;
537 } 537 }
538 538
539 item = item->nextSibling(); 539 item = item->nextSibling();
540 } 540 }
541 if ( icount ) { 541 if ( icount ) {
542 QString fn = KOPrefs::instance()->mLastSaveFile; 542 QString fn = KOPrefs::instance()->mLastSaveFile;
543 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 543 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
544 544
545 if ( fn == "" ) 545 if ( fn == "" )
546 return; 546 return;
547 QFileInfo info; 547 QFileInfo info;
548 info.setFile( fn ); 548 info.setFile( fn );
549 QString mes; 549 QString mes;
550 bool createbup = true; 550 bool createbup = true;
551 if ( info. exists() ) { 551 if ( info. exists() ) {
552 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 552 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
553 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 553 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
554 i18n("Overwrite!"), i18n("Cancel"), 0, 554 i18n("Overwrite!"), i18n("Cancel"), 0,
555 0, 1 ); 555 0, 1 );
556 if ( result != 0 ) { 556 if ( result != 0 ) {
557 createbup = false; 557 createbup = false;
558 } 558 }
559 } 559 }
560 if ( createbup ) { 560 if ( createbup ) {
561 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 561 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
562 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 562 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
563 Incidence *incidence = delSel.first(); 563 Incidence *incidence = delSel.first();
564 icount = 0; 564 icount = 0;
565 while ( incidence ) { 565 while ( incidence ) {
566 if ( incidence->type() == "Journal" ) { 566 if ( incidence->type() == "Journal" ) {
567 text += "\n************************************\n"; 567 text += "\n************************************\n";
568 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 568 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
569 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 569 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
570 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 570 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
571 ++icount; 571 ++icount;
572 572
573 } else { 573 } else {
574 if ( !incidence->description().isEmpty() ) { 574 if ( !incidence->description().isEmpty() ) {
575 text += "\n************************************\n"; 575 text += "\n************************************\n";
576 if ( incidence->type() == "Todo" ) 576 if ( incidence->type() == "Todo" )
577 text += i18n("To-Do: "); 577 text += i18n("To-Do: ");
578 text += incidence->summary(); 578 text += incidence->summary();
579 if ( incidence->hasStartDate() ) 579 if ( incidence->hasStartDate() )
580 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 580 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
581 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 581 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
582 if ( !incidence->location().isEmpty() ) 582 if ( !incidence->location().isEmpty() )
583 text += "\n" +i18n("Location: ") + incidence->location(); 583 text += "\n" +i18n("Location: ") + incidence->location();
584 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 584 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
585 ++icount; 585 ++icount;
586 586
587 } 587 }
588 } 588 }
589 incidence = delSel.next(); 589 incidence = delSel.next();
590 } 590 }
591 QFile file( fn ); 591 QFile file( fn );
592 if (!file.open( IO_WriteOnly ) ) { 592 if (!file.open( IO_WriteOnly ) ) {
593 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 593 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
594 return; 594 return;
595 } 595 }
596 QTextStream ts( &file ); 596 QTextStream ts( &file );
597 ts << text; 597 ts << text;
598 file.close(); 598 file.close();
599 //qDebug("%s ", text.latin1()); 599 //qDebug("%s ", text.latin1());
600 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 600 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
601 KOPrefs::instance()->mLastSaveFile = fn; 601 KOPrefs::instance()->mLastSaveFile = fn;
602 topLevelWidget()->setCaption(mes); 602 topLevelWidget()->setCaption(mes);
603 } 603 }
604 } 604 }
605} 605}
606void KOListView::saveToFile() 606void KOListView::saveToFile()
607{ 607{
608 608
609 int icount = 0; 609 int icount = 0;
610 QPtrList<Incidence> delSel ; 610 QPtrList<Incidence> delSel ;
611 QListViewItem *item = mListView->firstChild (); 611 QListViewItem *item = mListView->firstChild ();
612 while ( item ) { 612 while ( item ) {
613 if ( item->isSelected() ) { 613 if ( item->isSelected() ) {
614 delSel.append(((KOListViewItem *)item)->data()); 614 delSel.append(((KOListViewItem *)item)->data());
615 ++icount; 615 ++icount;
616 } 616 }
617 617
618 item = item->nextSibling(); 618 item = item->nextSibling();
619 } 619 }
620 if ( icount ) { 620 if ( icount ) {
621 QString fn = KOPrefs::instance()->mLastSaveFile; 621 QString fn = KOPrefs::instance()->mLastSaveFile;
622 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 622 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
623 623
624 if ( fn == "" ) 624 if ( fn == "" )
625 return; 625 return;
626 QFileInfo info; 626 QFileInfo info;
627 info.setFile( fn ); 627 info.setFile( fn );
628 QString mes; 628 QString mes;
629 bool createbup = true; 629 bool createbup = true;
630 if ( info. exists() ) { 630 if ( info. exists() ) {
631 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 631 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
632 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 632 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
633 i18n("Overwrite!"), i18n("Cancel"), 0, 633 i18n("Overwrite!"), i18n("Cancel"), 0,
634 0, 1 ); 634 0, 1 );
635 if ( result != 0 ) { 635 if ( result != 0 ) {
636 createbup = false; 636 createbup = false;
637 } 637 }
638 } 638 }
639 if ( createbup ) { 639 if ( createbup ) {
640 CalendarLocal cal; 640 CalendarLocal cal;
641 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 641 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
642 Incidence *incidence = delSel.first(); 642 Incidence *incidence = delSel.first();
643 while ( incidence ) { 643 while ( incidence ) {
644 cal.addIncidence( incidence->clone() ); 644 cal.addIncidence( incidence->clone() );
645 incidence = delSel.next(); 645 incidence = delSel.next();
646 } 646 }
647 ICalFormat format; 647 ICalFormat format;
648 format.save( &cal, fn ); 648 format.save( &cal, fn );
649 mes = i18n("KO/Pi:Saved %1").arg(fn ); 649 mes = i18n("KO/Pi:Saved %1").arg(fn );
650 KOPrefs::instance()->mLastSaveFile = fn; 650 KOPrefs::instance()->mLastSaveFile = fn;
651 topLevelWidget()->setCaption(mes); 651 topLevelWidget()->setCaption(mes);
652 } 652 }
653 } 653 }
654} 654}
655void KOListView::deleteAll() 655void KOListView::deleteAll()
656{ 656{
657 int icount = 0; 657 int icount = 0;
658 QPtrList<Incidence> delSel ; 658 QPtrList<Incidence> delSel ;
659 QListViewItem *item = mListView->firstChild (); 659 QListViewItem *item = mListView->firstChild ();
660 while ( item ) { 660 while ( item ) {
661 if ( item->isSelected() ) { 661 if ( item->isSelected() ) {
662 delSel.append(((KOListViewItem *)item)->data()); 662 delSel.append(((KOListViewItem *)item)->data());
663 ++icount; 663 ++icount;
664 } 664 }
665 665
666 item = item->nextSibling(); 666 item = item->nextSibling();
667 } 667 }
668 if ( icount ) { 668 if ( icount ) {
669 Incidence *incidence = delSel.first(); 669 Incidence *incidence = delSel.first();
670 Incidence *toDelete; 670 Incidence *toDelete;
671 KOPrefs *p = KOPrefs::instance(); 671 KOPrefs *p = KOPrefs::instance();
672 bool confirm = p->mConfirm; 672 bool confirm = p->mConfirm;
673 QString mess; 673 QString mess;
674 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 674 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
675 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { 675 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) {
676 p->mConfirm = false; 676 p->mConfirm = false;
677 int delCounter = 0; 677 int delCounter = 0;
678 QDialog dia ( this, "p-dialog", true ); 678 QDialog dia ( this, "p-dialog", true );
679 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 679 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
680 QVBoxLayout lay( &dia ); 680 QVBoxLayout lay( &dia );
681 lay.setMargin(7); 681 lay.setMargin(7);
682 lay.setSpacing(7); 682 lay.setSpacing(7);
683 lay.addWidget( &lab); 683 lay.addWidget( &lab);
684 QProgressBar bar( icount, &dia ); 684 QProgressBar bar( icount, &dia );
685 lay.addWidget( &bar); 685 lay.addWidget( &bar);
686 int w = 220; 686 int w = 220;
687 int h = 50; 687 int h = 50;
688 int dw = QApplication::desktop()->width(); 688 int dw = QApplication::desktop()->width();
689 int dh = QApplication::desktop()->height(); 689 int dh = QApplication::desktop()->height();
690 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 690 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
691 //dia.resize( 240,50 ); 691 //dia.resize( 240,50 );
692 dia.show(); 692 dia.show();
693 693
694 while ( incidence ) { 694 while ( incidence ) {
695 bar.setProgress( delCounter ); 695 bar.setProgress( delCounter );
696 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 696 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
697 dia.setCaption( mess ); 697 dia.setCaption( mess );
698 qApp->processEvents(); 698 qApp->processEvents();
699 toDelete = (incidence); 699 toDelete = (incidence);
700 incidence = delSel.next(); 700 incidence = delSel.next();
701 emit deleteIncidenceSignal(toDelete ); 701 emit deleteIncidenceSignal(toDelete );
702 if ( dia.result() != 0 ) 702 if ( dia.result() != 0 )
703 break; 703 break;
704 704
705 } 705 }
706 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 706 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
707 topLevelWidget ()->setCaption( mess ); 707 topLevelWidget ()->setCaption( mess );
708 p->mConfirm = confirm; 708 p->mConfirm = confirm;
709 } 709 }
710 } 710 }
711 711
712 712
713} 713}
714int KOListView::maxDatesHint() 714int KOListView::maxDatesHint()
715{ 715{
716 return 0; 716 return 0;
717} 717}
718 718
719int KOListView::currentDateCount() 719int KOListView::currentDateCount()
720{ 720{
721 return 0; 721 return 0;
722} 722}
723 723
724QPtrList<Incidence> KOListView::selectedIncidences() 724QPtrList<Incidence> KOListView::selectedIncidences()
725{ 725{
726 QPtrList<Incidence> eventList; 726 QPtrList<Incidence> eventList;
727 QListViewItem *item = mListView->firstChild (); 727 QListViewItem *item = mListView->firstChild ();
728 while ( item ) { 728 while ( item ) {
729 if ( item->isSelected() ) { 729 if ( item->isSelected() ) {
730 eventList.append(((KOListViewItem *)item)->data()); 730 eventList.append(((KOListViewItem *)item)->data());
731 } 731 }
732 732
733 item = item->nextSibling(); 733 item = item->nextSibling();
734 } 734 }
735 735
736 // // QListViewItem *item = mListView->selectedItem(); 736 // // QListViewItem *item = mListView->selectedItem();
737 //if (item) eventList.append(((KOListViewItem *)item)->data()); 737 //if (item) eventList.append(((KOListViewItem *)item)->data());
738 738
739 return eventList; 739 return eventList;
740} 740}
741 741
742DateList KOListView::selectedDates() 742DateList KOListView::selectedDates()
743{ 743{
744 DateList eventList; 744 DateList eventList;
745 return eventList; 745 return eventList;
746} 746}
747 747
748void KOListView::showDates(bool show) 748void KOListView::showDates(bool show)
749{ 749{
750 // Shouldn't we set it to a value greater 0? When showDates is called with 750 // Shouldn't we set it to a value greater 0? When showDates is called with
751 // show == true at first, then the columnwidths are set to zero. 751 // show == true at first, then the columnwidths are set to zero.
752 static int oldColWidth1 = 0; 752 static int oldColWidth1 = 0;
753 static int oldColWidth3 = 0; 753 static int oldColWidth3 = 0;
754 754
755 if (!show) { 755 if (!show) {
756 oldColWidth1 = mListView->columnWidth(1); 756 oldColWidth1 = mListView->columnWidth(1);
757 oldColWidth3 = mListView->columnWidth(3); 757 oldColWidth3 = mListView->columnWidth(3);
758 mListView->setColumnWidth(1, 0); 758 mListView->setColumnWidth(1, 0);
759 mListView->setColumnWidth(3, 0); 759 mListView->setColumnWidth(3, 0);
760 } else { 760 } else {
761 mListView->setColumnWidth(1, oldColWidth1); 761 mListView->setColumnWidth(1, oldColWidth1);
762 mListView->setColumnWidth(3, oldColWidth3); 762 mListView->setColumnWidth(3, oldColWidth3);
763 } 763 }
764 mListView->repaint(); 764 mListView->repaint();
765} 765}
766 766
767void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 767void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
768 const QDate &td) 768 const QDate &td)
769{ 769{
770#ifndef KORG_NOPRINTER 770#ifndef KORG_NOPRINTER
771 calPrinter->preview(CalPrinter::Day, fd, td); 771 calPrinter->preview(CalPrinter::Day, fd, td);
772#endif 772#endif
773} 773}
774 774
775void KOListView::showDates() 775void KOListView::showDates()
776{ 776{
777 showDates(true); 777 showDates(true);
778} 778}
779 779
780void KOListView::hideDates() 780void KOListView::hideDates()
781{ 781{
782 showDates(false); 782 showDates(false);
783} 783}
784 784
785void KOListView::updateView() 785void KOListView::updateView()
786{ 786{
787 mListView->setFocus(); 787 mListView->setFocus();
788 if ( mListView->firstChild () ) 788 if ( mListView->firstChild () )
789 mListView->setCurrentItem( mListView->firstChild () ); 789 mListView->setCurrentItem( mListView->firstChild () );
790} 790}
791void KOListView::updateConfig() 791void KOListView::updateConfig()
792{ 792{
793 793
794 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 794 mListView->setFont ( KOPrefs::instance()->mListViewFont );
795 updateView(); 795 updateView();
796 796
797} 797}
798void KOListView::setStartDate(const QDate &start) 798void KOListView::setStartDate(const QDate &start)
799{ 799{
800 mStartDate = start; 800 mStartDate = start;
801} 801}
802 802
803void KOListView::showDates(const QDate &start, const QDate &end) 803void KOListView::showDates(const QDate &start, const QDate &end)
804{ 804{
805 clear(); 805 clear();
806 mStartDate = start; 806 mStartDate = start;
807 QDate date = start; 807 QDate date = start;
808 QPtrList<Journal> j_list; 808 QPtrList<Journal> j_list;
809 while( date <= end ) { 809 while( date <= end ) {
810 addEvents(calendar()->events(date)); 810 addEvents(calendar()->events(date));
811 addTodos(calendar()->todos(date)); 811 addTodos(calendar()->todos(date));
812 Journal* jo = calendar()->journal(date); 812 Journal* jo = calendar()->journal(date);
813 if ( jo ) 813 if ( jo )
814 j_list.append( jo ); 814 j_list.append( jo );
815 date = date.addDays( 1 ); 815 date = date.addDays( 1 );
816 } 816 }
817 addJournals(j_list); 817 addJournals(j_list);
818 emit incidenceSelected( 0 ); 818 emit incidenceSelected( 0 );
819 updateView(); 819 updateView();
820 820
821} 821}
822 822
823void KOListView::addEvents(QPtrList<Event> eventList) 823void KOListView::addEvents(QPtrList<Event> eventList)
824{ 824{
825 Event *ev; 825 Event *ev;
826 for(ev = eventList.first(); ev; ev = eventList.next()) { 826 for(ev = eventList.first(); ev; ev = eventList.next()) {
827 addIncidence(ev); 827 addIncidence(ev);
828 } 828 }
829 if ( !mListView->currentItem() ){ 829 if ( !mListView->currentItem() ){
830 updateView(); 830 updateView();
831 } 831 }
832} 832}
833 833
834void KOListView::addTodos(QPtrList<Todo> eventList) 834void KOListView::addTodos(QPtrList<Todo> eventList)
835{ 835{
836 Todo *ev; 836 Todo *ev;
837 for(ev = eventList.first(); ev; ev = eventList.next()) { 837 for(ev = eventList.first(); ev; ev = eventList.next()) {
838 addIncidence(ev); 838 addIncidence(ev);
839 } 839 }
840 if ( !mListView->currentItem() ){ 840 if ( !mListView->currentItem() ){
841 updateView(); 841 updateView();
842 } 842 }
843} 843}
844void KOListView::addJournals(QPtrList<Journal> eventList) 844void KOListView::addJournals(QPtrList<Journal> eventList)
845{ 845{
846 Journal *ev; 846 Journal *ev;
847 for(ev = eventList.first(); ev; ev = eventList.next()) { 847 for(ev = eventList.first(); ev; ev = eventList.next()) {
848 addIncidence(ev); 848 addIncidence(ev);
849 } 849 }
850 if ( !mListView->currentItem() ){ 850 if ( !mListView->currentItem() ){
851 updateView(); 851 updateView();
852 } 852 }
853} 853}
854 854
855void KOListView::addIncidence(Incidence *incidence) 855void KOListView::addIncidence(Incidence *incidence)
856{ 856{
857 if ( mUidDict.find( incidence->uid() ) ) return; 857 if ( mUidDict.find( incidence->uid() ) ) return;
858 858
859 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 859 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
860 mUidDict.insert( incidence->uid(), incidence ); 860 mUidDict.insert( incidence->uid(), incidence );
861 861
862 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 862 KOListViewItem *item = new KOListViewItem( incidence, mListView );
863 ListItemVisitor v(item, mStartDate ); 863 ListItemVisitor v(item, mStartDate );
864 if (incidence->accept(v)) return; 864 if (incidence->accept(v)) return;
865 else delete item; 865 else delete item;
866 //qDebug("delete item "); 866 //qDebug("delete item ");
867} 867}
868 868
869void KOListView::showEvents(QPtrList<Event> eventList) 869void KOListView::showEvents(QPtrList<Event> eventList)
870{ 870{
871 clear(); 871 clear();
872 872
873 addEvents(eventList); 873 addEvents(eventList);
874 874
875 // After new creation of list view no events are selected. 875 // After new creation of list view no events are selected.
876 emit incidenceSelected( 0 ); 876 emit incidenceSelected( 0 );
877} 877}
878int KOListView::count() 878int KOListView::count()
879{ 879{
880 return mListView->childCount(); 880 return mListView->childCount();
881} 881}
882 882
883void KOListView::changeEventDisplay(Event *event, int action) 883void KOListView::changeEventDisplay(Event *event, int action)
884{ 884{
885 KOListViewItem *item; 885 KOListViewItem *item;
886 886
887 switch(action) { 887 switch(action) {
888 case KOGlobals::EVENTADDED: 888 case KOGlobals::EVENTADDED:
889 addIncidence( event ); 889 addIncidence( event );
890 break; 890 break;
891 case KOGlobals::EVENTEDITED: 891 case KOGlobals::EVENTEDITED:
892 item = getItemForEvent(event); 892 item = getItemForEvent(event);
893 if (item) { 893 if (item) {
894 mUidDict.remove( event->uid() ); 894 mUidDict.remove( event->uid() );
895 delete item; 895 delete item;
896 addIncidence( event ); 896 addIncidence( event );
897 } 897 }
898 break; 898 break;
899 case KOGlobals::EVENTDELETED: 899 case KOGlobals::EVENTDELETED:
900 item = getItemForEvent(event); 900 item = getItemForEvent(event);
901 if (item) { 901 if (item) {
902 mUidDict.remove( event->uid() ); 902 mUidDict.remove( event->uid() );
903 delete item; 903 delete item;
904 } 904 }
905 break; 905 break;
906 default: 906 default:
907 ; 907 ;
908 } 908 }
909} 909}
910 910
911KOListViewItem *KOListView::getItemForEvent(Event *event) 911KOListViewItem *KOListView::getItemForEvent(Event *event)
912{ 912{
913 KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); 913 KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
914 while (item) { 914 while (item) {
915 if (item->data() == event) return item; 915 if (item->data() == event) return item;
916 item = (KOListViewItem *)item->nextSibling(); 916 item = (KOListViewItem *)item->nextSibling();
917 } 917 }
918 return 0; 918 return 0;
919} 919}
920 920
921void KOListView::defaultItemAction(QListViewItem *i) 921void KOListView::defaultItemAction(QListViewItem *i)
922{ 922{
923 KOListViewItem *item = static_cast<KOListViewItem *>( i ); 923 KOListViewItem *item = static_cast<KOListViewItem *>( i );
924 if ( item ) defaultAction( item->data() ); 924 if ( item ) defaultAction( item->data() );
925 925
926} 926}
927 927
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index f595d35..d0380e3 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -1,1351 +1,1354 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qpopupmenu.h> 20#include <qpopupmenu.h>
21#include <qfont.h> 21#include <qfont.h>
22#include <qfontmetrics.h> 22#include <qfontmetrics.h>
23#include <qkeycode.h> 23#include <qkeycode.h>
24#include <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qwidgetstack.h> 26#include <qwidgetstack.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qtooltip.h> 28#include <qtooltip.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qtimer.h> 30#include <qtimer.h>
31#include <qwhatsthis.h> 31#include <qwhatsthis.h>
32#ifndef DESKTOP_VERSION 32#ifndef DESKTOP_VERSION
33#include <qpe/qpeapplication.h> 33#include <qpe/qpeapplication.h>
34#else 34#else
35#include <qapplication.h> 35#include <qapplication.h>
36#endif 36#endif
37 37
38#include <kdebug.h> 38#include <kdebug.h>
39#include <klocale.h> 39#include <klocale.h>
40#include <kglobal.h> 40#include <kglobal.h>
41#include <kconfig.h> 41#include <kconfig.h>
42#include <kiconloader.h> 42#include <kiconloader.h>
43 43
44#include <kcalendarsystem.h> 44#include <kcalendarsystem.h>
45 45
46#ifndef KORG_NOPRINTER 46#ifndef KORG_NOPRINTER
47#include "calprinter.h" 47#include "calprinter.h"
48#endif 48#endif
49#include "koprefs.h" 49#include "koprefs.h"
50#ifndef KORG_NOPLUGINS 50#ifndef KORG_NOPLUGINS
51#include "kocore.h" 51#include "kocore.h"
52#endif 52#endif
53#include "koglobals.h" 53#include "koglobals.h"
54#include <libkcal/kincidenceformatter.h> 54#include <libkcal/kincidenceformatter.h>
55 55
56#include "komonthview.h" 56#include "komonthview.h"
57 57
58#define PIXMAP_SIZE 5 58#define PIXMAP_SIZE 5
59#ifdef DESKTOP_VERSION 59#ifdef DESKTOP_VERSION
60QToolTipGroup *MonthViewCell::mToolTipGroup = 0; 60QToolTipGroup *MonthViewCell::mToolTipGroup = 0;
61#endif 61#endif
62class KNOWhatsThis :public QWhatsThis 62class KNOWhatsThis :public QWhatsThis
63{ 63{
64public: 64public:
65 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { }; 65 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { };
66 //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); }; 66 //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); };
67 67
68protected: 68protected:
69 virtual QString text( const QPoint& p) 69 virtual QString text( const QPoint& p)
70 { 70 {
71 return _wid->getWhatsThisText(p) ; 71 return _wid->getWhatsThisText(p) ;
72 }; 72 };
73private: 73private:
74 KNoScrollListBox* _wid; 74 KNoScrollListBox* _wid;
75 75
76}; 76};
77 77
78 78
79KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name) 79KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name)
80 : QListBox(parent, name, WRepaintNoErase) 80 : QListBox(parent, name, WRepaintNoErase)
81{ 81{
82#ifndef DESKTOP_VERSION 82#ifndef DESKTOP_VERSION
83 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 83 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
84#endif 84#endif
85 mWT = new KNOWhatsThis(this); 85 mWT = new KNOWhatsThis(this);
86} 86}
87KNoScrollListBox::~KNoScrollListBox() 87KNoScrollListBox::~KNoScrollListBox()
88{ 88{
89 89
90} 90}
91QString KNoScrollListBox::getWhatsThisText(QPoint p) 91QString KNoScrollListBox::getWhatsThisText(QPoint p)
92{ 92{
93 QListBoxItem* item = itemAt ( p ); 93 QListBoxItem* item = itemAt ( p );
94 if ( ! item ) { 94 if ( ! item ) {
95 return i18n("Click in the cell\nto add an event!"); 95 return i18n("Click in the cell\nto add an event!");
96 } 96 }
97 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence()); 97 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence());
98} 98}
99void KNoScrollListBox::keyPressEvent(QKeyEvent *e) 99void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
100{ 100{
101 101
102 switch(e->key()) { 102 switch(e->key()) {
103 case Key_Right: 103 case Key_Right:
104 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 104 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
105 { 105 {
106 e->ignore(); 106 e->ignore();
107 return; 107 return;
108 } 108 }
109 scrollBy(10,0); 109 scrollBy(10,0);
110 break; 110 break;
111 case Key_Left: 111 case Key_Left:
112 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 112 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
113 { 113 {
114 e->ignore(); 114 e->ignore();
115 return; 115 return;
116 } 116 }
117 scrollBy(-10,0); 117 scrollBy(-10,0);
118 break; 118 break;
119 case Key_Up: 119 case Key_Up:
120 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 120 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
121 e->ignore(); 121 e->ignore();
122 break; 122 break;
123 } 123 }
124 setCurrentItem((currentItem()+count()-1)%count()); 124 setCurrentItem((currentItem()+count()-1)%count());
125 if(!itemVisible(currentItem())) { 125 if(!itemVisible(currentItem())) {
126 if((unsigned int) currentItem() == (count()-1)) { 126 if((unsigned int) currentItem() == (count()-1)) {
127 setTopItem(currentItem()-numItemsVisible()+1); 127 setTopItem(currentItem()-numItemsVisible()+1);
128 } else { 128 } else {
129 setTopItem(topItem()-1); 129 setTopItem(topItem()-1);
130 } 130 }
131 } 131 }
132 break; 132 break;
133 case Key_Down: 133 case Key_Down:
134 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 134 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
135 e->ignore(); 135 e->ignore();
136 break; 136 break;
137 } 137 }
138 setCurrentItem((currentItem()+1)%count()); 138 setCurrentItem((currentItem()+1)%count());
139 if(!itemVisible(currentItem())) { 139 if(!itemVisible(currentItem())) {
140 if(currentItem() == 0) { 140 if(currentItem() == 0) {
141 setTopItem(0); 141 setTopItem(0);
142 } else { 142 } else {
143 setTopItem(topItem()+1); 143 setTopItem(topItem()+1);
144 } 144 }
145 } 145 }
146 break; 146 break;
147 case Key_I: 147 case Key_I:
148 QTimer::singleShot( 11, this, SLOT ( oneDown() ) ); 148 QTimer::singleShot( 11, this, SLOT ( oneDown() ) );
149 e->ignore(); 149 e->ignore();
150 break; 150 break;
151 case Key_Shift: 151 case Key_Shift:
152 emit shiftDown(); 152 emit shiftDown();
153 break; 153 break;
154 default: 154 default:
155 e->ignore(); 155 e->ignore();
156 break; 156 break;
157 } 157 }
158} 158}
159 159
160void KNoScrollListBox::oneDown() 160void KNoScrollListBox::oneDown()
161{ 161{
162 setCurrentItem((currentItem()+1)%count()); 162 setCurrentItem((currentItem()+1)%count());
163 if(!itemVisible(currentItem())) { 163 if(!itemVisible(currentItem())) {
164 if(currentItem() == 0) { 164 if(currentItem() == 0) {
165 setTopItem(0); 165 setTopItem(0);
166 } else { 166 } else {
167 setTopItem(topItem()+1); 167 setTopItem(topItem()+1);
168 } 168 }
169 } 169 }
170} 170}
171void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 171void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
172{ 172{
173 switch(e->key()) { 173 switch(e->key()) {
174 case Key_Shift: 174 case Key_Shift:
175 emit shiftUp(); 175 emit shiftUp();
176 break; 176 break;
177 default: 177 default:
178 break; 178 break;
179 } 179 }
180} 180}
181 181
182void KNoScrollListBox::mousePressEvent(QMouseEvent *e) 182void KNoScrollListBox::mousePressEvent(QMouseEvent *e)
183{ 183{
184 QListBox::mousePressEvent(e); 184 QListBox::mousePressEvent(e);
185 185
186 if(e->button() == RightButton) { 186 if(e->button() == RightButton) {
187 emit rightClick(); 187 emit rightClick();
188 } 188 }
189} 189}
190 190
191MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) 191MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s)
192 : QListBoxItem() 192 : QListBoxItem()
193{ 193{
194 setText( s ); 194 setText( s );
195 195
196 mIncidence = incidence; 196 mIncidence = incidence;
197 mDate = qd; 197 mDate = qd;
198 // QWhatsThis::add(this,KIncidenceFormatter::instance()->getFormattedText( mIncidence )); 198 // QWhatsThis::add(this,KIncidenceFormatter::instance()->getFormattedText( mIncidence ));
199 mRecur = false; 199 mRecur = false;
200 mAlarm = false; 200 mAlarm = false;
201 mReply = false; 201 mReply = false;
202 mInfo = false; 202 mInfo = false;
203} 203}
204 204
205void MonthViewItem::paint(QPainter *p) 205void MonthViewItem::paint(QPainter *p)
206{ 206{
207#if QT_VERSION >= 0x030000 207#if QT_VERSION >= 0x030000
208 bool sel = isSelected(); 208 bool sel = isSelected();
209#else 209#else
210 bool sel = selected(); 210 bool sel = selected();
211#endif 211#endif
212 212
213 213
214 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) 214 if (KOPrefs::instance()->mMonthViewUsesCategoryColor)
215 { 215 {
216 p->setBackgroundColor( palette().color( QPalette::Normal, \ 216 p->setBackgroundColor( palette().color( QPalette::Normal, \
217 sel ? QColorGroup::Highlight : QColorGroup::Background ) ); 217 sel ? QColorGroup::Highlight : QColorGroup::Background ) );
218 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); 218 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) );
219 } 219 }
220 int x = 1; 220 int x = 1;
221 int y = 3;//(height() - mRecurPixmap.height()) /2; 221 int y = 3;//(height() - mRecurPixmap.height()) /2;
222 int size = PIXMAP_SIZE; 222 int size = PIXMAP_SIZE;
223 if ( QApplication::desktop()->width() < 300 ) 223 if ( QApplication::desktop()->width() < 300 )
224 size = 3; 224 size = 3;
225 if ( KOPrefs::instance()->mMonthShowIcons ) { 225 if ( KOPrefs::instance()->mMonthShowIcons ) {
226 if ( mInfo ) { 226 if ( mInfo ) {
227 p->fillRect ( x, y,size,size, Qt::darkGreen ); 227 p->fillRect ( x, y,size,size, Qt::darkGreen );
228 x += size + 1; 228 x += size + 1;
229 } 229 }
230 if ( mRecur ) { 230 if ( mRecur ) {
231 p->fillRect ( x, y,size,size, Qt::blue ); 231 p->fillRect ( x, y,size,size, Qt::blue );
232 x += size + 1; 232 x += size + 1;
233 } 233 }
234 if ( mAlarm ) { 234 if ( mAlarm ) {
235 p->fillRect ( x, y,size,size, Qt::red ); 235 p->fillRect ( x, y,size,size, Qt::red );
236 x += size + 1; 236 x += size + 1;
237 } 237 }
238 if ( mReply ) { 238 if ( mReply ) {
239 p->fillRect ( x, y,size,size, Qt::yellow ); 239 p->fillRect ( x, y,size,size, Qt::yellow );
240 x += size + 1; 240 x += size + 1;
241 } 241 }
242 } 242 }
243 QFontMetrics fm = p->fontMetrics(); 243 QFontMetrics fm = p->fontMetrics();
244 int yPos; 244 int yPos;
245 int pmheight = size; 245 int pmheight = size;
246 if( pmheight < fm.height() ) 246 if( pmheight < fm.height() )
247 yPos = fm.ascent() + fm.leading()/2; 247 yPos = fm.ascent() + fm.leading()/2;
248 else 248 else
249 yPos = pmheight/2 - fm.height()/2 + fm.ascent(); 249 yPos = pmheight/2 - fm.height()/2 + fm.ascent();
250 p->setPen( palette().color( QPalette::Normal, sel ? \ 250 p->setPen( palette().color( QPalette::Normal, sel ? \
251 QColorGroup::HighlightedText : QColorGroup::Foreground ) ); 251 QColorGroup::HighlightedText : QColorGroup::Foreground ) );
252 p->drawText( x, yPos, text() ); 252 p->drawText( x, yPos, text() );
253 if ( mIncidence->cancelled() ) { 253 if ( mIncidence->cancelled() ) {
254 int wid = fm.width( text() ); 254 int wid = fm.width( text() );
255 p->drawLine( x, yPos- fm.height()/2+3,x+wid, yPos- fm.height()/2 +3); 255 p->drawLine( x, yPos- fm.height()/2+3,x+wid, yPos- fm.height()/2 +3);
256 } 256 }
257 257
258} 258}
259 259
260int MonthViewItem::height(const QListBox *lb) const 260int MonthViewItem::height(const QListBox *lb) const
261{ 261{
262 return lb->fontMetrics().lineSpacing()+1; 262 return lb->fontMetrics().lineSpacing()+1;
263} 263}
264 264
265int MonthViewItem::width(const QListBox *lb) const 265int MonthViewItem::width(const QListBox *lb) const
266{ 266{
267 int size = PIXMAP_SIZE; 267 int size = PIXMAP_SIZE;
268 if ( QApplication::desktop()->width() < 300 ) 268 if ( QApplication::desktop()->width() < 300 )
269 size = 3; 269 size = 3;
270 int x = 1; 270 int x = 1;
271 if ( mInfo ) { 271 if ( mInfo ) {
272 x += size + 1; 272 x += size + 1;
273 } 273 }
274 if( mRecur ) { 274 if( mRecur ) {
275 x += size+1; 275 x += size+1;
276 } 276 }
277 if( mAlarm ) { 277 if( mAlarm ) {
278 x += size+1; 278 x += size+1;
279 } 279 }
280 if( mReply ) { 280 if( mReply ) {
281 x += size+1; 281 x += size+1;
282 } 282 }
283 283
284 return( x + lb->fontMetrics().width( text() ) + 1 ); 284 return( x + lb->fontMetrics().width( text() ) + 1 );
285} 285}
286 286
287 287
288MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) 288MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par )
289 : QWidget( par ), 289 : QWidget( par ),
290 mMonthView( parent ) 290 mMonthView( parent )
291{ 291{
292 292
293 QVBoxLayout *topLayout = new QVBoxLayout( this ); 293 QVBoxLayout *topLayout = new QVBoxLayout( this );
294 294
295 // mLabel = new QLabel( this );QPushButton 295 // mLabel = new QLabel( this );QPushButton
296 mLabel = new QPushButton( this ); 296 mLabel = new QPushButton( this );
297 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); 297 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain );
298 //mLabel->setLineWidth( 1 ); 298 //mLabel->setLineWidth( 1 );
299 //mLabel->setAlignment( AlignCenter ); 299 //mLabel->setAlignment( AlignCenter );
300 mLabel->setFlat( true ); 300 mLabel->setFlat( true );
301 mLabel->setFocusPolicy(NoFocus); 301 mLabel->setFocusPolicy(NoFocus);
302 mItemList = new KNoScrollListBox( this ); 302 mItemList = new KNoScrollListBox( this );
303 mItemList->setMinimumSize( 10, 10 ); 303 mItemList->setMinimumSize( 10, 10 );
304 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain ); 304 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain );
305 mItemList->setLineWidth( 1 ); 305 mItemList->setLineWidth( 1 );
306 topLayout->addWidget( mItemList ); 306 topLayout->addWidget( mItemList );
307 mLabel->raise(); 307 mLabel->raise();
308 // QColor( 0,0,255 ) QColor( 160,1600,255 ) 308 // QColor( 0,0,255 ) QColor( 160,1600,255 )
309 mStandardPalette = palette(); 309 mStandardPalette = palette();
310 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); 310 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) );
311 311
312 enableScrollBars( false ); 312 enableScrollBars( false );
313 updateConfig(); 313 updateConfig();
314 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 314 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
315 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 315 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
316 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ), 316 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ),
317 SLOT( defaultAction( QListBoxItem * ) ) ); 317 SLOT( defaultAction( QListBoxItem * ) ) );
318 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *, 318 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *,
319 const QPoint &) ), 319 const QPoint &) ),
320 SLOT( contextMenu( QListBoxItem * ) ) ); 320 SLOT( contextMenu( QListBoxItem * ) ) );
321 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ), 321 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ),
322 SLOT( selection( QListBoxItem * ) ) ); 322 SLOT( selection( QListBoxItem * ) ) );
323 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 323 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
324 SLOT( cellClicked( QListBoxItem * ) ) ); 324 SLOT( cellClicked( QListBoxItem * ) ) );
325 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 325 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
326 SLOT( selection( QListBoxItem * ) ) ); 326 SLOT( selection( QListBoxItem * ) ) );
327} 327}
328#ifdef DESKTOP_VERSION 328#ifdef DESKTOP_VERSION
329QToolTipGroup *MonthViewCell::toolTipGroup() 329QToolTipGroup *MonthViewCell::toolTipGroup()
330{ 330{
331 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); 331 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
332 return mToolTipGroup; 332 return mToolTipGroup;
333} 333}
334#endif 334#endif
335 335
336void MonthViewCell::setDate( const QDate &date ) 336void MonthViewCell::setDate( const QDate &date )
337{ 337{
338 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 338 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
339 mDate = date; 339 mDate = date;
340 340
341 341
342 342
343 //resizeEvent( 0 ); 343 //resizeEvent( 0 );
344} 344}
345 345
346QDate MonthViewCell::date() const 346QDate MonthViewCell::date() const
347{ 347{
348 return mDate; 348 return mDate;
349} 349}
350 350
351void MonthViewCell::setPrimary( bool primary ) 351void MonthViewCell::setPrimary( bool primary )
352{ 352{
353 mPrimary = primary; 353 mPrimary = primary;
354 //setMyPalette(); 354 //setMyPalette();
355} 355}
356void MonthViewCell::setMyPalette() 356void MonthViewCell::setMyPalette()
357{ 357{
358 358
359 if ( mHoliday) { 359 if ( mHoliday) {
360 setPalette( mHolidayPalette ); 360 setPalette( mHolidayPalette );
361 } else { 361 } else {
362 if ( mPrimary ) { 362 if ( mPrimary ) {
363 setPalette( mPrimaryPalette ); 363 setPalette( mPrimaryPalette );
364 } else { 364 } else {
365 setPalette( mNonPrimaryPalette ); 365 setPalette( mNonPrimaryPalette );
366 } 366 }
367 } 367 }
368 QPalette pal = palette(); 368 QPalette pal = palette();
369 369
370 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 370 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
371} 371}
372QPalette MonthViewCell::getPalette () 372QPalette MonthViewCell::getPalette ()
373{ 373{
374 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 374 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
375 return mStandardPalette; 375 return mStandardPalette;
376 if ( mHoliday) { 376 if ( mHoliday) {
377 return mHolidayPalette ; 377 return mHolidayPalette ;
378 } else { 378 } else {
379 if ( mPrimary ) { 379 if ( mPrimary ) {
380 return mPrimaryPalette ; 380 return mPrimaryPalette ;
381 } 381 }
382 } 382 }
383 return mNonPrimaryPalette; 383 return mNonPrimaryPalette;
384} 384}
385bool MonthViewCell::isPrimary() const 385bool MonthViewCell::isPrimary() const
386{ 386{
387 return mPrimary; 387 return mPrimary;
388} 388}
389 389
390void MonthViewCell::setHoliday( bool holiday ) 390void MonthViewCell::setHoliday( bool holiday )
391{ 391{
392 mHoliday = holiday; 392 mHoliday = holiday;
393 //setMyPalette(); 393 //setMyPalette();
394} 394}
395 395
396void MonthViewCell::setHoliday( const QString &holiday ) 396void MonthViewCell::setHoliday( const QString &holiday )
397{ 397{
398 mHolidayString = holiday; 398 mHolidayString = holiday;
399 399
400 if ( !holiday.isEmpty() ) { 400 if ( !holiday.isEmpty() ) {
401 setHoliday( true ); 401 setHoliday( true );
402 } 402 }
403} 403}
404void MonthViewCell::keyPressEvent ( QKeyEvent * e ) 404void MonthViewCell::keyPressEvent ( QKeyEvent * e )
405{ 405{
406 406
407 e->ignore(); 407 e->ignore();
408 408
409} 409}
410 410
411void MonthViewCell::startUpdateCell() 411void MonthViewCell::startUpdateCell()
412{ 412{
413 413
414 mItemList->setFocusPolicy(NoFocus); 414 mItemList->setFocusPolicy(NoFocus);
415 if ( !mMonthView->isUpdatePossible() ) 415 if ( !mMonthView->isUpdatePossible() )
416 return; 416 return;
417 417
418 /* 418 /*
419 if ( !isVisible() ){ 419 if ( !isVisible() ){
420 return; 420 return;
421 } 421 }
422 */ 422 */
423 // qDebug("MonthViewCell::updateCell() "); 423 // qDebug("MonthViewCell::updateCell() ");
424 setPrimary( mDate.month()%2 ); 424 setPrimary( mDate.month()%2 );
425 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 425 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
426 if ( mDate == QDate::currentDate() ) { 426 if ( mDate == QDate::currentDate() ) {
427 mItemList->setLineWidth( 3 ); 427 mItemList->setLineWidth( 3 );
428 } else { 428 } else {
429 mItemList->setLineWidth( 1 ); 429 mItemList->setLineWidth( 1 );
430 } 430 }
431 mItemList->clear(); 431 mItemList->clear();
432 432
433#ifdef DESKTOP_VERSION 433#ifdef DESKTOP_VERSION
434 QToolTip::remove(this); 434 QToolTip::remove(this);
435#endif 435#endif
436 mToolTip = ""; 436 mToolTip = "";
437 //qApp->processEvents(); 437 //qApp->processEvents();
438 if ( !mHolidayString.isEmpty() ) { 438 if ( !mHolidayString.isEmpty() ) {
439 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 439 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
440 item->setPalette( mHolidayPalette ); 440 item->setPalette( mHolidayPalette );
441 mItemList->insertItem( item ); 441 mItemList->insertItem( item );
442 mToolTip += mHolidayString+"\n"; 442 mToolTip += mHolidayString+"\n";
443 } 443 }
444} 444}
445 445
446void MonthViewCell::insertEvent(Event *event) 446void MonthViewCell::insertEvent(Event *event)
447{ 447{
448 448
449 mItemList->setFocusPolicy(WheelFocus); 449 mItemList->setFocusPolicy(WheelFocus);
450 if ( !(event->doesRecur() == Recurrence::rNone) ) { 450 if ( !(event->doesRecur() == Recurrence::rNone) ) {
451 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) 451 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
452 return; 452 return;
453 else 453 else
454 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) 454 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
455 return; 455 return;
456 } 456 }
457 457
458 if ( event->categories().contains("Holiday") || 458 if ( event->categories().contains("Holiday") ||
459 event->categories().contains(i18n("Holiday"))) { 459 event->categories().contains(i18n("Holiday"))) {
460 setHoliday( true ); 460 setHoliday( true );
461 if ( mDate.dayOfWeek() == 7 ) 461 if ( mDate.dayOfWeek() == 7 )
462 mItemList->setLineWidth( 3 ); 462 mItemList->setLineWidth( 3 );
463 } 463 }
464 QString text; 464 QString text;
465 if (event->isMultiDay()) { 465 if (event->isMultiDay()) {
466 QString prefix = "<->"; 466 QString prefix = "<->";
467 if ( event->doesRecur() ) { 467 if ( event->doesRecur() ) {
468 if ( event->recursOn( mDate) ) 468 if ( event->recursOn( mDate) )
469 prefix ="->" ; 469 prefix ="->" ;
470 else { 470 else {
471 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 471 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
472 if ( event->recursOn( mDate.addDays( -days)) ) 472 if ( event->recursOn( mDate.addDays( -days)) )
473 prefix ="<-" ; 473 prefix ="<-" ;
474 } 474 }
475 475
476 } else { 476 } else {
477 if (mDate == event->dtStart().date()) { 477 if (mDate == event->dtStart().date()) {
478 prefix ="->" ; 478 prefix ="->" ;
479 } else if (mDate == event->dtEnd().date()) { 479 } else if (mDate == event->dtEnd().date()) {
480 prefix ="<-" ; 480 prefix ="<-" ;
481 } 481 }
482 } 482 }
483 if ( !event->doesFloat() ) { 483 if ( !event->doesFloat() ) {
484 if ( mDate == event->dtStart().date () ) 484 if ( mDate == event->dtStart().date () )
485 prefix += KGlobal::locale()->formatTime(event->dtStart().time())+" "; 485 prefix += KGlobal::locale()->formatTime(event->dtStart().time())+" ";
486 else if ( mDate == event->dtEnd().date () ) 486 else if ( mDate == event->dtEnd().date () )
487 prefix += KGlobal::locale()->formatTime(event->dtEnd().time())+" "; 487 prefix += KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
488 488
489 } 489 }
490 text = prefix + event->summary(); 490 text = prefix + event->summary();
491 mToolTip += text; 491 mToolTip += text;
492 } else { 492 } else {
493 if (event->doesFloat()) { 493 if (event->doesFloat()) {
494 text = event->summary(); 494 text = event->summary();
495 mToolTip += text; 495 mToolTip += text;
496 } 496 }
497 else { 497 else {
498 text = KGlobal::locale()->formatTime(event->dtStart().time()); 498 text = KGlobal::locale()->formatTime(event->dtStart().time());
499 text += " " + event->summary(); 499 text += " " + event->summary();
500 mToolTip += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 500 mToolTip += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
501 } 501 }
502 } 502 }
503 503
504 MonthViewItem *item = new MonthViewItem( event, mDate, text ); 504 MonthViewItem *item = new MonthViewItem( event, mDate, text );
505 QPalette pal; 505 QPalette pal;
506 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 506 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
507 QStringList categories = event->categories(); 507 QStringList categories = event->categories();
508 QString cat = categories.first(); 508 QString cat = categories.first();
509 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 509 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
510 pal = getPalette(); 510 pal = getPalette();
511 if (cat.isEmpty()) { 511 if (cat.isEmpty()) {
512 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 512 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
513 } else { 513 } else {
514 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 514 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
515 } 515 }
516 516
517 } else { 517 } else {
518 if (cat.isEmpty()) { 518 if (cat.isEmpty()) {
519 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 519 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
520 } else { 520 } else {
521 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 521 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
522 } 522 }
523 } 523 }
524 524
525 } else { 525 } else {
526 pal = mStandardPalette ; 526 pal = mStandardPalette ;
527 } 527 }
528 item->setPalette( pal ); 528 item->setPalette( pal );
529 item->setRecur( event->recurrence()->doesRecur() ); 529 item->setRecur( event->recurrence()->doesRecur() );
530 item->setAlarm( event->isAlarmEnabled() ); 530 item->setAlarm( event->isAlarmEnabled() );
531 item->setMoreInfo( event->description().length() > 0 ); 531 item->setMoreInfo( event->description().length() > 0 );
532#ifdef DESKTOP_VERSION 532#ifdef DESKTOP_VERSION
533 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, 533 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails,
534 KOPrefs::instance()->email()); 534 KOPrefs::instance()->email());
535 if ( me != 0 ) { 535 if ( me != 0 ) {
536 if ( me->status() == Attendee::NeedsAction && me->RSVP()) 536 if ( me->status() == Attendee::NeedsAction && me->RSVP())
537 item->setReply(true); 537 item->setReply(true);
538 else 538 else
539 item->setReply(false); 539 item->setReply(false);
540 } else 540 } else
541 item->setReply(false); 541 item->setReply(false);
542#endif 542#endif
543 mItemList->insertItem( item ); 543 mItemList->insertItem( item );
544 mToolTip += "\n"; 544 mToolTip += "\n";
545} 545}
546void MonthViewCell::insertTodo(Todo *todo) 546void MonthViewCell::insertTodo(Todo *todo)
547{ 547{
548 mItemList->setFocusPolicy(WheelFocus); 548 mItemList->setFocusPolicy(WheelFocus);
549 QString text; 549 QString text;
550 if (todo->hasDueDate()) { 550 if (todo->hasDueDate()) {
551 if (!todo->doesFloat()) { 551 if (!todo->doesFloat()) {
552 text += KGlobal::locale()->formatTime(todo->dtDue().time()); 552 text += KGlobal::locale()->formatTime(todo->dtDue().time());
553 text += " "; 553 text += " ";
554 } 554 }
555 } 555 }
556 text += i18n("T: %1").arg(todo->summary()); 556 text += i18n("T: %1").arg(todo->summary());
557 557
558 MonthViewItem *item = new MonthViewItem( todo, mDate, text ); 558 MonthViewItem *item = new MonthViewItem( todo, mDate, text );
559 //item->setPalette( mStandardPalette ); 559 //item->setPalette( mStandardPalette );
560 QPalette pal; 560 QPalette pal;
561 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 561 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
562 QStringList categories = todo->categories(); 562 QStringList categories = todo->categories();
563 QString cat = categories.first(); 563 QString cat = categories.first();
564 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 564 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
565 pal = getPalette(); 565 pal = getPalette();
566 if (cat.isEmpty()) { 566 if (cat.isEmpty()) {
567 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 567 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
568 } else { 568 } else {
569 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 569 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
570 } 570 }
571 571
572 } else { 572 } else {
573 if (cat.isEmpty()) { 573 if (cat.isEmpty()) {
574 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 574 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
575 } else { 575 } else {
576 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 576 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
577 } 577 }
578 } 578 }
579 579
580 } else { 580 } else {
581 pal = mStandardPalette ; 581 pal = mStandardPalette ;
582 } 582 }
583 item->setPalette( pal ); 583 item->setPalette( pal );
584 item->setRecur( todo->recurrence()->doesRecur() );
585 item->setAlarm( todo->isAlarmEnabled() );
586 item->setMoreInfo( todo->description().length() > 0 );
584 mItemList->insertItem( item ); 587 mItemList->insertItem( item );
585 mToolTip += text+"\n"; 588 mToolTip += text+"\n";
586} 589}
587void MonthViewCell::finishUpdateCell() 590void MonthViewCell::finishUpdateCell()
588{ 591{
589#ifdef DESKTOP_VERSION 592#ifdef DESKTOP_VERSION
590 if (mToolTip != "") 593 if (mToolTip != "")
591 QToolTip::add(this,mToolTip,toolTipGroup(),""); 594 QToolTip::add(this,mToolTip,toolTipGroup(),"");
592#endif 595#endif
593 mItemList->sort(); 596 mItemList->sort();
594 //setMyPalette(); 597 //setMyPalette();
595 setMyPalette(); 598 setMyPalette();
596 QString text; 599 QString text;
597 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; 600 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog;
598 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { 601 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) {
599 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; 602 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " ";
600 mLabel->resize( mLabelBigSize ); 603 mLabel->resize( mLabelBigSize );
601 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 604 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
602 } else { 605 } else {
603 mLabel->resize( mLabelSize ); 606 mLabel->resize( mLabelSize );
604 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 607 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
605 } 608 }
606 609
607 mLabel->setText( text ); 610 mLabel->setText( text );
608 resizeEvent( 0 ); 611 resizeEvent( 0 );
609} 612}
610void MonthViewCell::updateCell() 613void MonthViewCell::updateCell()
611{ 614{
612 qDebug("MonthViewCell::updateCell() "); 615 qDebug("MonthViewCell::updateCell() ");
613 if ( !mMonthView->isUpdatePossible() ) 616 if ( !mMonthView->isUpdatePossible() )
614 return; 617 return;
615 startUpdateCell(); 618 startUpdateCell();
616 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 619 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
617 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); 620 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
618 Event *event; 621 Event *event;
619 for( event = events.first(); event; event = events.next() ) { // for event 622 for( event = events.first(); event; event = events.next() ) { // for event
620 insertEvent(event); 623 insertEvent(event);
621 } 624 }
622 // insert due todos 625 // insert due todos
623 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); 626 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
624 Todo *todo; 627 Todo *todo;
625 for(todo = todos.first(); todo; todo = todos.next()) { 628 for(todo = todos.first(); todo; todo = todos.next()) {
626 insertTodo( todo ); 629 insertTodo( todo );
627 } 630 }
628 finishUpdateCell(); 631 finishUpdateCell();
629 // if ( isVisible()) 632 // if ( isVisible())
630 //qApp->processEvents(); 633 //qApp->processEvents();
631} 634}
632 635
633void MonthViewCell::updateConfig( bool bigFont ) // = false 636void MonthViewCell::updateConfig( bool bigFont ) // = false
634{ 637{
635 638
636 if ( bigFont ) { 639 if ( bigFont ) {
637 QFont fo = KOPrefs::instance()->mMonthViewFont; 640 QFont fo = KOPrefs::instance()->mMonthViewFont;
638 int ps = fo.pointSize() + 2; 641 int ps = fo.pointSize() + 2;
639 if ( ps < 18 ) 642 if ( ps < 18 )
640 ps += 2; 643 ps += 2;
641 fo.setPointSize( ps ); 644 fo.setPointSize( ps );
642 setFont( fo ); 645 setFont( fo );
643 } else 646 } else
644 setFont( KOPrefs::instance()->mMonthViewFont ); 647 setFont( KOPrefs::instance()->mMonthViewFont );
645 648
646 QFontMetrics fm( font() ); 649 QFontMetrics fm( font() );
647 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); 650 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 );
648 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); 651 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 );
649 mHolidayPalette = mStandardPalette; 652 mHolidayPalette = mStandardPalette;
650 mPrimaryPalette = mStandardPalette; 653 mPrimaryPalette = mStandardPalette;
651 mNonPrimaryPalette = mStandardPalette; 654 mNonPrimaryPalette = mStandardPalette;
652 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { 655 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) {
653 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); 656 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor );
654 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); 657 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor );
655 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); 658 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark());
656 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); 659 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark());
657 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); 660 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor);
658 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); 661 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor);
659 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); 662 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark());
660 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); 663 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor);
661 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); 664 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor);
662 } 665 }
663 //updateCell(); 666 //updateCell();
664} 667}
665 668
666void MonthViewCell::enableScrollBars( bool enabled ) 669void MonthViewCell::enableScrollBars( bool enabled )
667{ 670{
668 if ( enabled ) { 671 if ( enabled ) {
669 mItemList->setVScrollBarMode(QScrollView::Auto); 672 mItemList->setVScrollBarMode(QScrollView::Auto);
670 mItemList->setHScrollBarMode(QScrollView::Auto); 673 mItemList->setHScrollBarMode(QScrollView::Auto);
671 } else { 674 } else {
672 mItemList->setVScrollBarMode(QScrollView::AlwaysOff); 675 mItemList->setVScrollBarMode(QScrollView::AlwaysOff);
673 mItemList->setHScrollBarMode(QScrollView::AlwaysOff); 676 mItemList->setHScrollBarMode(QScrollView::AlwaysOff);
674 } 677 }
675} 678}
676 679
677Incidence *MonthViewCell::selectedIncidence() 680Incidence *MonthViewCell::selectedIncidence()
678{ 681{
679 int index = mItemList->currentItem(); 682 int index = mItemList->currentItem();
680 if ( index < 0 ) return 0; 683 if ( index < 0 ) return 0;
681 684
682 MonthViewItem *item = 685 MonthViewItem *item =
683 static_cast<MonthViewItem *>( mItemList->item( index ) ); 686 static_cast<MonthViewItem *>( mItemList->item( index ) );
684 687
685 if ( !item ) return 0; 688 if ( !item ) return 0;
686 689
687 return item->incidence(); 690 return item->incidence();
688} 691}
689 692
690QDate MonthViewCell::selectedIncidenceDate() 693QDate MonthViewCell::selectedIncidenceDate()
691{ 694{
692 QDate qd; 695 QDate qd;
693 int index = mItemList->currentItem(); 696 int index = mItemList->currentItem();
694 if ( index < 0 ) return qd; 697 if ( index < 0 ) return qd;
695 698
696 MonthViewItem *item = 699 MonthViewItem *item =
697 static_cast<MonthViewItem *>( mItemList->item( index ) ); 700 static_cast<MonthViewItem *>( mItemList->item( index ) );
698 701
699 if ( !item ) return qd; 702 if ( !item ) return qd;
700 703
701 return item->incidenceDate(); 704 return item->incidenceDate();
702} 705}
703 706
704void MonthViewCell::deselect() 707void MonthViewCell::deselect()
705{ 708{
706 mItemList->clearSelection(); 709 mItemList->clearSelection();
707 enableScrollBars( false ); 710 enableScrollBars( false );
708 // updateCell(); 711 // updateCell();
709} 712}
710void MonthViewCell::select() 713void MonthViewCell::select()
711{ 714{
712 ;// updateCell(); 715 ;// updateCell();
713} 716}
714 717
715void MonthViewCell::resizeEvent ( QResizeEvent * ) 718void MonthViewCell::resizeEvent ( QResizeEvent * )
716{ 719{
717 if ( !mMonthView->isUpdatePossible() ) 720 if ( !mMonthView->isUpdatePossible() )
718 return; 721 return;
719 722
720 int size = height() - mLabel->height() - 2; 723 int size = height() - mLabel->height() - 2;
721 if ( size > 0 ) 724 if ( size > 0 )
722 mItemList->verticalScrollBar()->setMaximumHeight( size ); 725 mItemList->verticalScrollBar()->setMaximumHeight( size );
723 size = width() - mLabel->width() -2; 726 size = width() - mLabel->width() -2;
724 if ( size > 0 ) 727 if ( size > 0 )
725 mItemList->horizontalScrollBar()->setMaximumWidth( size ); 728 mItemList->horizontalScrollBar()->setMaximumWidth( size );
726 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() ); 729 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() );
727 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 730 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
728} 731}
729 732
730void MonthViewCell::defaultAction( QListBoxItem *item ) 733void MonthViewCell::defaultAction( QListBoxItem *item )
731{ 734{
732 if ( !item ) return; 735 if ( !item ) return;
733 736
734 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 737 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
735 Incidence *incidence = eventItem->incidence(); 738 Incidence *incidence = eventItem->incidence();
736 if ( incidence ) mMonthView->defaultAction( incidence ); 739 if ( incidence ) mMonthView->defaultAction( incidence );
737} 740}
738void MonthViewCell::showDay() 741void MonthViewCell::showDay()
739{ 742{
740 emit showDaySignal( date() ); 743 emit showDaySignal( date() );
741} 744}
742void MonthViewCell::newEvent() 745void MonthViewCell::newEvent()
743{ 746{
744 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 747 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
745 emit newEventSignal( dt ); 748 emit newEventSignal( dt );
746} 749}
747void MonthViewCell::cellClicked( QListBoxItem *item ) 750void MonthViewCell::cellClicked( QListBoxItem *item )
748{ 751{
749 static QListBoxItem * lastClicked = 0; 752 static QListBoxItem * lastClicked = 0;
750 if ( item == 0 ) { 753 if ( item == 0 ) {
751 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 754 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
752 emit newEventSignal( dt ); 755 emit newEventSignal( dt );
753 return; 756 return;
754 } 757 }
755 /* 758 /*
756 if ( lastClicked ) 759 if ( lastClicked )
757 if ( ! item ) { 760 if ( ! item ) {
758 if ( lastClicked->listBox() != item->listBox() ) 761 if ( lastClicked->listBox() != item->listBox() )
759 lastClicked->listBox()->clearSelection(); 762 lastClicked->listBox()->clearSelection();
760 } 763 }
761 */ 764 */
762 765
763 mMonthView->setSelectedCell( this ); 766 mMonthView->setSelectedCell( this );
764 if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true ); 767 if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true );
765 select(); 768 select();
766} 769}
767 770
768void MonthViewCell::contextMenu( QListBoxItem *item ) 771void MonthViewCell::contextMenu( QListBoxItem *item )
769{ 772{
770 if ( !item ) return; 773 if ( !item ) return;
771 774
772 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 775 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
773 Incidence *incidence = eventItem->incidence(); 776 Incidence *incidence = eventItem->incidence();
774 if ( incidence ) mMonthView->showContextMenu( incidence ); 777 if ( incidence ) mMonthView->showContextMenu( incidence );
775} 778}
776 779
777void MonthViewCell::selection( QListBoxItem *item ) 780void MonthViewCell::selection( QListBoxItem *item )
778{ 781{
779 if ( !item ) return; 782 if ( !item ) return;
780 783
781 mMonthView->setSelectedCell( this ); 784 mMonthView->setSelectedCell( this );
782} 785}
783 786
784 787
785// ******************************************************************************* 788// *******************************************************************************
786// ******************************************************************************* 789// *******************************************************************************
787// ******************************************************************************* 790// *******************************************************************************
788 791
789 792
790KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 793KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
791 : KOEventView( calendar, parent, name ), 794 : KOEventView( calendar, parent, name ),
792 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 795 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
793 mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 796 mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
794{ 797{
795 mShortDayLabelsM = false; 798 mShortDayLabelsM = false;
796 mShortDayLabelsW = false; 799 mShortDayLabelsW = false;
797 skipResize = false; 800 skipResize = false;
798 clPending = true; 801 clPending = true;
799 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); 802 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" );
800 mWidStack = new QWidgetStack( this ); 803 mWidStack = new QWidgetStack( this );
801 QVBoxLayout* hb = new QVBoxLayout( this ); 804 QVBoxLayout* hb = new QVBoxLayout( this );
802 mMonthView = new QWidget( mWidStack ); 805 mMonthView = new QWidget( mWidStack );
803 mWeekView = new QWidget( mWidStack ); 806 mWeekView = new QWidget( mWidStack );
804#if QT_VERSION >= 0x030000 807#if QT_VERSION >= 0x030000
805 mWidStack->addWidget(mMonthView ); 808 mWidStack->addWidget(mMonthView );
806 mWidStack->addWidget(mWeekView ); 809 mWidStack->addWidget(mWeekView );
807#else 810#else
808 mWidStack->addWidget( mMonthView, 1 ); 811 mWidStack->addWidget( mMonthView, 1 );
809 mWidStack->addWidget( mWeekView , 1 ); 812 mWidStack->addWidget( mWeekView , 1 );
810#endif 813#endif
811 hb->addWidget( mNavigatorBar ); 814 hb->addWidget( mNavigatorBar );
812 hb->addWidget( mWidStack ); 815 hb->addWidget( mWidStack );
813 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 816 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
814 mShowWeekView = KOPrefs::instance()->mMonthViewWeek; 817 mShowWeekView = KOPrefs::instance()->mMonthViewWeek;
815 if ( mShowWeekView ) 818 if ( mShowWeekView )
816 mWeekStartsMonday = true; 819 mWeekStartsMonday = true;
817 updatePossible = false; 820 updatePossible = false;
818 //updatePossible = true; 821 //updatePossible = true;
819 mCells.setAutoDelete( true ); 822 mCells.setAutoDelete( true );
820 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 823 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
821 mDayLabels.resize( mDaysPerWeek ); 824 mDayLabels.resize( mDaysPerWeek );
822 mDayLabelsW.resize( mDaysPerWeek ); 825 mDayLabelsW.resize( mDaysPerWeek );
823 QFont bfont = font(); 826 QFont bfont = font();
824 if ( QApplication::desktop()->width() < 650 ) { 827 if ( QApplication::desktop()->width() < 650 ) {
825 bfont.setPointSize( bfont.pointSize() - 2 ); 828 bfont.setPointSize( bfont.pointSize() - 2 );
826 } 829 }
827 bfont.setBold( true ); 830 bfont.setBold( true );
828 int i; 831 int i;
829 832
830 for( i = 0; i < mDaysPerWeek; i++ ) { 833 for( i = 0; i < mDaysPerWeek; i++ ) {
831 QLabel *label = new QLabel( mMonthView ); 834 QLabel *label = new QLabel( mMonthView );
832 label->setFont(bfont); 835 label->setFont(bfont);
833 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 836 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
834 label->setLineWidth(1); 837 label->setLineWidth(1);
835 label->setAlignment(AlignCenter); 838 label->setAlignment(AlignCenter);
836 mDayLabels.insert( i, label ); 839 mDayLabels.insert( i, label );
837 label = new QLabel( mWeekView ); 840 label = new QLabel( mWeekView );
838 label->setFont(bfont); 841 label->setFont(bfont);
839 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 842 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
840 label->setLineWidth(1); 843 label->setLineWidth(1);
841 label->setAlignment(AlignCenter); 844 label->setAlignment(AlignCenter);
842 mDayLabelsW.insert( i, label ); 845 mDayLabelsW.insert( i, label );
843 } 846 }
844 847
845 bfont.setBold( false ); 848 bfont.setBold( false );
846 mWeekLabels.resize( mNumWeeks+1 ); 849 mWeekLabels.resize( mNumWeeks+1 );
847 mWeekLabelsW.resize( 2 ); 850 mWeekLabelsW.resize( 2 );
848 for( i = 0; i < mNumWeeks+1; i++ ) { 851 for( i = 0; i < mNumWeeks+1; i++ ) {
849 KOWeekButton *label = new KOWeekButton( mMonthView ); 852 KOWeekButton *label = new KOWeekButton( mMonthView );
850 label->setFocusPolicy(NoFocus); 853 label->setFocusPolicy(NoFocus);
851 label->setFont(bfont); 854 label->setFont(bfont);
852 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 855 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
853 label->setFlat(true); 856 label->setFlat(true);
854 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 857 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
855 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 858 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
856 //label->setLineWidth(1); 859 //label->setLineWidth(1);
857 //label->setAlignment(AlignCenter); 860 //label->setAlignment(AlignCenter);
858 mWeekLabels.insert( i, label ); 861 mWeekLabels.insert( i, label );
859 } 862 }
860 mWeekLabels[mNumWeeks]->setText( i18n("W")); 863 mWeekLabels[mNumWeeks]->setText( i18n("W"));
861 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); 864 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number"));
862 865
863 for( i = 0; i < 1+1; i++ ) { 866 for( i = 0; i < 1+1; i++ ) {
864 KOWeekButton *label = new KOWeekButton( mWeekView ); 867 KOWeekButton *label = new KOWeekButton( mWeekView );
865 label->setFocusPolicy(NoFocus); 868 label->setFocusPolicy(NoFocus);
866 label->setFont(bfont); 869 label->setFont(bfont);
867 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 870 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
868 label->setFlat(true); 871 label->setFlat(true);
869 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 872 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
870 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 873 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
871 //label->setLineWidth(1); 874 //label->setLineWidth(1);
872 //label->setAlignment(AlignCenter); 875 //label->setAlignment(AlignCenter);
873 mWeekLabelsW.insert( i, label ); 876 mWeekLabelsW.insert( i, label );
874 } 877 }
875 mWeekLabelsW[1]->setText( i18n("W")); 878 mWeekLabelsW[1]->setText( i18n("W"));
876 879
877 880
878 int row, col; 881 int row, col;
879 mCells.resize( mNumCells ); 882 mCells.resize( mNumCells );
880 for( row = 0; row < mNumWeeks; ++row ) { 883 for( row = 0; row < mNumWeeks; ++row ) {
881 for( col = 0; col < mDaysPerWeek; ++col ) { 884 for( col = 0; col < mDaysPerWeek; ++col ) {
882 MonthViewCell *cell = new MonthViewCell( this, mMonthView ); 885 MonthViewCell *cell = new MonthViewCell( this, mMonthView );
883 mCells.insert( row * mDaysPerWeek + col, cell ); 886 mCells.insert( row * mDaysPerWeek + col, cell );
884 887
885 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 888 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
886 SLOT( defaultAction( Incidence * ) ) ); 889 SLOT( defaultAction( Incidence * ) ) );
887 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 890 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
888 SIGNAL( newEventSignal( QDateTime ) ) ); 891 SIGNAL( newEventSignal( QDateTime ) ) );
889 connect( cell, SIGNAL( showDaySignal( QDate ) ), 892 connect( cell, SIGNAL( showDaySignal( QDate ) ),
890 SIGNAL( showDaySignal( QDate ) ) ); 893 SIGNAL( showDaySignal( QDate ) ) );
891 } 894 }
892 } 895 }
893 mCellsW.resize( mDaysPerWeek ); 896 mCellsW.resize( mDaysPerWeek );
894 for( col = 0; col < mDaysPerWeek; ++col ) { 897 for( col = 0; col < mDaysPerWeek; ++col ) {
895 MonthViewCell *cell = new MonthViewCell( this, mWeekView ); 898 MonthViewCell *cell = new MonthViewCell( this, mWeekView );
896 mCellsW.insert( col, cell ); 899 mCellsW.insert( col, cell );
897 900
898 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 901 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
899 SLOT( defaultAction( Incidence * ) ) ); 902 SLOT( defaultAction( Incidence * ) ) );
900 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 903 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
901 SIGNAL( newEventSignal( QDateTime ) ) ); 904 SIGNAL( newEventSignal( QDateTime ) ) );
902 connect( cell, SIGNAL( showDaySignal( QDate ) ), 905 connect( cell, SIGNAL( showDaySignal( QDate ) ),
903 SIGNAL( showDaySignal( QDate ) ) ); 906 SIGNAL( showDaySignal( QDate ) ) );
904 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); 907 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont );
905 } 908 }
906 909
907 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); 910 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) );
908 mContextMenu = eventPopup(); 911 mContextMenu = eventPopup();
909 // updateConfig(); //useless here... 912 // updateConfig(); //useless here...
910 // ... but we need mWidthLongDayLabel computed 913 // ... but we need mWidthLongDayLabel computed
911 QFontMetrics fontmetric(mDayLabels[0]->font()); 914 QFontMetrics fontmetric(mDayLabels[0]->font());
912 mWidthLongDayLabel = 0; 915 mWidthLongDayLabel = 0;
913 for (int i = 0; i < 7; i++) { 916 for (int i = 0; i < 7; i++) {
914 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 917 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
915 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 918 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
916 } 919 }
917 920
918 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 921 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
919 922
920#if 0 923#if 0
921 if ( mShowWeekView ) 924 if ( mShowWeekView )
922 mWidStack->raiseWidget( mWeekView ); 925 mWidStack->raiseWidget( mWeekView );
923 else 926 else
924 mWidStack->raiseWidget( mMonthView ); 927 mWidStack->raiseWidget( mMonthView );
925#endif 928#endif
926 929
927 emit incidenceSelected( 0 ); 930 emit incidenceSelected( 0 );
928#ifndef DESKTOP_VERSION 931#ifndef DESKTOP_VERSION
929 resize( QApplication::desktop()->size() ); 932 resize( QApplication::desktop()->size() );
930#else 933#else
931 resize(640, 480 ); 934 resize(640, 480 );
932 updatePossible = true; 935 updatePossible = true;
933#endif 936#endif
934 computeLayout(); 937 computeLayout();
935 938
936 if ( mShowWeekView ) 939 if ( mShowWeekView )
937 mWidStack->raiseWidget( mWeekView ); 940 mWidStack->raiseWidget( mWeekView );
938 else 941 else
939 mWidStack->raiseWidget( mMonthView ); 942 mWidStack->raiseWidget( mMonthView );
940} 943}
941 944
942KOMonthView::~KOMonthView() 945KOMonthView::~KOMonthView()
943{ 946{
944 delete mContextMenu; 947 delete mContextMenu;
945} 948}
946 949
947void KOMonthView::selectInternalWeekNum ( int n ) 950void KOMonthView::selectInternalWeekNum ( int n )
948{ 951{
949 switchView(); 952 switchView();
950 emit selectWeekNum ( n ); 953 emit selectWeekNum ( n );
951} 954}
952 955
953int KOMonthView::currentWeek() 956int KOMonthView::currentWeek()
954{ 957{
955 if ( mShowWeekView ) 958 if ( mShowWeekView )
956 return mWeekLabelsW[0]->getWeekNum(); 959 return mWeekLabelsW[0]->getWeekNum();
957 return mWeekLabels[0]->getWeekNum(); 960 return mWeekLabels[0]->getWeekNum();
958} 961}
959void KOMonthView::switchView() 962void KOMonthView::switchView()
960{ 963{
961 964
962 if ( selectedCell( ) ) 965 if ( selectedCell( ) )
963 selectedCell()->deselect(); 966 selectedCell()->deselect();
964 mShowWeekView = !mShowWeekView; 967 mShowWeekView = !mShowWeekView;
965 KOPrefs::instance()->mMonthViewWeek = mShowWeekView; 968 KOPrefs::instance()->mMonthViewWeek = mShowWeekView;
966 if ( clPending ) { 969 if ( clPending ) {
967 computeLayout(); 970 computeLayout();
968 updateConfig(); 971 updateConfig();
969 } 972 }
970 if ( mShowWeekView ) 973 if ( mShowWeekView )
971 mWidStack->raiseWidget( mWeekView ); 974 mWidStack->raiseWidget( mWeekView );
972 else 975 else
973 mWidStack->raiseWidget( mMonthView ); 976 mWidStack->raiseWidget( mMonthView );
974 clPending = false; 977 clPending = false;
975} 978}
976 979
977int KOMonthView::maxDatesHint() 980int KOMonthView::maxDatesHint()
978{ 981{
979 return mNumCells; 982 return mNumCells;
980} 983}
981 984
982int KOMonthView::currentDateCount() 985int KOMonthView::currentDateCount()
983{ 986{
984 return mNumCells; 987 return mNumCells;
985} 988}
986 989
987QPtrList<Incidence> KOMonthView::selectedIncidences() 990QPtrList<Incidence> KOMonthView::selectedIncidences()
988{ 991{
989 QPtrList<Incidence> selected; 992 QPtrList<Incidence> selected;
990 993
991 if ( mSelectedCell ) { 994 if ( mSelectedCell ) {
992 Incidence *incidence = mSelectedCell->selectedIncidence(); 995 Incidence *incidence = mSelectedCell->selectedIncidence();
993 if ( incidence ) selected.append( incidence ); 996 if ( incidence ) selected.append( incidence );
994 } 997 }
995 998
996 return selected; 999 return selected;
997} 1000}
998 1001
999DateList KOMonthView::selectedDates() 1002DateList KOMonthView::selectedDates()
1000{ 1003{
1001 DateList selected; 1004 DateList selected;
1002 1005
1003 if ( mSelectedCell ) { 1006 if ( mSelectedCell ) {
1004 QDate qd = mSelectedCell->selectedIncidenceDate(); 1007 QDate qd = mSelectedCell->selectedIncidenceDate();
1005 if ( qd.isValid() ) selected.append( qd ); 1008 if ( qd.isValid() ) selected.append( qd );
1006 } 1009 }
1007 1010
1008 return selected; 1011 return selected;
1009} 1012}
1010 1013
1011void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1014void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1012 const QDate &td) 1015 const QDate &td)
1013{ 1016{
1014#ifndef KORG_NOPRINTER 1017#ifndef KORG_NOPRINTER
1015 calPrinter->preview(CalPrinter::Month, fd, td); 1018 calPrinter->preview(CalPrinter::Month, fd, td);
1016#endif 1019#endif
1017} 1020}
1018 1021
1019void KOMonthView::updateConfig() 1022void KOMonthView::updateConfig()
1020{ 1023{
1021 1024
1022 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 1025 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
1023 1026
1024 if ( mShowWeekView ) { 1027 if ( mShowWeekView ) {
1025 mWeekStartsMonday = true; 1028 mWeekStartsMonday = true;
1026 } 1029 }
1027 QFontMetrics fontmetric(mDayLabels[0]->font()); 1030 QFontMetrics fontmetric(mDayLabels[0]->font());
1028 mWidthLongDayLabel = 0; 1031 mWidthLongDayLabel = 0;
1029 1032
1030 for (int i = 0; i < 7; i++) { 1033 for (int i = 0; i < 7; i++) {
1031 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1034 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1032 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1035 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
1033 } 1036 }
1034 bool temp = mShowSatSunComp ; 1037 bool temp = mShowSatSunComp ;
1035 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1038 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1036 if ( ! mShowWeekView ) { 1039 if ( ! mShowWeekView ) {
1037 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) 1040 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
1038 computeLayout(); 1041 computeLayout();
1039 } 1042 }
1040 updateDayLabels(); 1043 updateDayLabels();
1041 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); 1044 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
1042 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; 1045 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
1043 //resizeEvent( 0 ); 1046 //resizeEvent( 0 );
1044 for (uint i = 0; i < mCells.count(); ++i) { 1047 for (uint i = 0; i < mCells.count(); ++i) {
1045 mCells[i]->updateConfig(); 1048 mCells[i]->updateConfig();
1046 } 1049 }
1047 1050
1048 for (uint i = 0; i < mCellsW.count(); ++i) { 1051 for (uint i = 0; i < mCellsW.count(); ++i) {
1049 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont); 1052 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont);
1050 } 1053 }
1051#ifdef DESKTOP_VERSION 1054#ifdef DESKTOP_VERSION
1052 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); 1055 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips);
1053#endif 1056#endif
1054 updateView(); 1057 updateView();
1055} 1058}
1056 1059
1057void KOMonthView::updateDayLabels() 1060void KOMonthView::updateDayLabels()
1058{ 1061{
1059 1062
1060 QPtrVector<QLabel> *mDayLabelsT; 1063 QPtrVector<QLabel> *mDayLabelsT;
1061 1064
1062 mDayLabelsT = &mDayLabelsW; 1065 mDayLabelsT = &mDayLabelsW;
1063 for (int i = 0; i < 7; i++) { 1066 for (int i = 0; i < 7; i++) {
1064 if (mWeekStartsMonday) { 1067 if (mWeekStartsMonday) {
1065 bool show = mShortDayLabelsW; 1068 bool show = mShortDayLabelsW;
1066 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1069 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1067 show = true; 1070 show = true;
1068 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1071 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1069 } else { 1072 } else {
1070 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsW)); 1073 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsW));
1071 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsW)); 1074 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsW));
1072 1075
1073 } 1076 }
1074 } 1077 }
1075 mDayLabelsT = &mDayLabels; 1078 mDayLabelsT = &mDayLabels;
1076 for (int i = 0; i < 7; i++) { 1079 for (int i = 0; i < 7; i++) {
1077 if (mWeekStartsMonday) { 1080 if (mWeekStartsMonday) {
1078 bool show = mShortDayLabelsM; 1081 bool show = mShortDayLabelsM;
1079 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1082 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1080 show = true; 1083 show = true;
1081 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1084 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1082 } else { 1085 } else {
1083 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM)); 1086 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM));
1084 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM)); 1087 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM));
1085 1088
1086 } 1089 }
1087 } 1090 }
1088 1091
1089} 1092}
1090 1093
1091void KOMonthView::showDates(const QDate &start, const QDate &) 1094void KOMonthView::showDates(const QDate &start, const QDate &)
1092{ 1095{
1093 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; 1096 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl;
1094 1097
1095 QPtrVector<MonthViewCell> *cells; 1098 QPtrVector<MonthViewCell> *cells;
1096 QPtrVector<QLabel> *dayLabels; 1099 QPtrVector<QLabel> *dayLabels;
1097 QPtrVector<KOWeekButton> *weekLabels; 1100 QPtrVector<KOWeekButton> *weekLabels;
1098 int weekNum = 6; 1101 int weekNum = 6;
1099 if ( mShowWeekView ) { 1102 if ( mShowWeekView ) {
1100 weekNum = 1; 1103 weekNum = 1;
1101 cells = &mCellsW; 1104 cells = &mCellsW;
1102 dayLabels = &mDayLabelsW; 1105 dayLabels = &mDayLabelsW;
1103 weekLabels = &mWeekLabelsW; 1106 weekLabels = &mWeekLabelsW;
1104 } else { 1107 } else {
1105 cells = &mCells; 1108 cells = &mCells;
1106 dayLabels = &mDayLabels; 1109 dayLabels = &mDayLabels;
1107 weekLabels = &mWeekLabels; 1110 weekLabels = &mWeekLabels;
1108 } 1111 }
1109 1112
1110 mStartDate = start; 1113 mStartDate = start;
1111 1114
1112 int startWeekDay = mWeekStartsMonday ? 1 : 7; 1115 int startWeekDay = mWeekStartsMonday ? 1 : 7;
1113 1116
1114 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { 1117 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) {
1115 mStartDate = mStartDate.addDays( -1 ); 1118 mStartDate = mStartDate.addDays( -1 );
1116 } 1119 }
1117 1120
1118 bool primary = false; 1121 bool primary = false;
1119 uint i; 1122 uint i;
1120 for( i = 0; i < (*cells).size(); ++i ) { 1123 for( i = 0; i < (*cells).size(); ++i ) {
1121 QDate date = mStartDate.addDays( i ); 1124 QDate date = mStartDate.addDays( i );
1122 (*cells)[i]->setDate( date ); 1125 (*cells)[i]->setDate( date );
1123 1126
1124#ifndef KORG_NOPLUGINS 1127#ifndef KORG_NOPLUGINS
1125 // add holiday, if present 1128 // add holiday, if present
1126 QString hstring(KOCore::self()->holiday(date)); 1129 QString hstring(KOCore::self()->holiday(date));
1127 (*cells)[i]->setHoliday( hstring ); 1130 (*cells)[i]->setHoliday( hstring );
1128#endif 1131#endif
1129 1132
1130 } 1133 }
1131 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); 1134 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 );
1132 for( i = 0; i < weekNum; ++i ) { 1135 for( i = 0; i < weekNum; ++i ) {
1133 int wno; 1136 int wno;
1134 // remember, according to ISO 8601, the first week of the year is the 1137 // remember, according to ISO 8601, the first week of the year is the
1135 // first week that contains a thursday. Thus we must subtract off 4, 1138 // first week that contains a thursday. Thus we must subtract off 4,
1136 // not just 1. 1139 // not just 1.
1137 int dayOfYear = date.dayOfYear(); 1140 int dayOfYear = date.dayOfYear();
1138 if (dayOfYear % 7 != 0) 1141 if (dayOfYear % 7 != 0)
1139 wno = dayOfYear / 7 + 1; 1142 wno = dayOfYear / 7 + 1;
1140 else 1143 else
1141 wno =dayOfYear / 7; 1144 wno =dayOfYear / 7;
1142 (*weekLabels)[i]->setWeekNum( wno ); 1145 (*weekLabels)[i]->setWeekNum( wno );
1143 date = date.addDays( 7 ); 1146 date = date.addDays( 7 );
1144 } 1147 }
1145 updateView(); 1148 updateView();
1146} 1149}
1147 1150
1148void KOMonthView::showEvents(QPtrList<Event>) 1151void KOMonthView::showEvents(QPtrList<Event>)
1149{ 1152{
1150 qDebug("KOMonthView::selectEvents is not implemented yet. "); 1153 qDebug("KOMonthView::selectEvents is not implemented yet. ");
1151} 1154}
1152 1155
1153void KOMonthView::changeEventDisplay(Event *, int) 1156void KOMonthView::changeEventDisplay(Event *, int)
1154{ 1157{
1155 // this should be re-written to be much more efficient, but this 1158 // this should be re-written to be much more efficient, but this
1156 // quick-and-dirty-hack gets the job done for right now. 1159 // quick-and-dirty-hack gets the job done for right now.
1157 updateView(); 1160 updateView();
1158} 1161}
1159 1162
1160void KOMonthView::updateView() 1163void KOMonthView::updateView()
1161{ 1164{
1162 1165
1163 if ( !updatePossible ) 1166 if ( !updatePossible )
1164 return; 1167 return;
1165 //QTime ti; 1168 //QTime ti;
1166 //ti.start(); 1169 //ti.start();
1167 QPtrVector<MonthViewCell> *cells; 1170 QPtrVector<MonthViewCell> *cells;
1168 if ( mShowWeekView ) { 1171 if ( mShowWeekView ) {
1169 cells = &mCellsW; 1172 cells = &mCellsW;
1170 } else { 1173 } else {
1171 cells = &mCells; 1174 cells = &mCells;
1172 } 1175 }
1173#if 1 1176#if 1
1174 int i; 1177 int i;
1175 int timeSpan = (*cells).size()-1; 1178 int timeSpan = (*cells).size()-1;
1176 if ( KOPrefs::instance()->mMonthViewWeek ) 1179 if ( KOPrefs::instance()->mMonthViewWeek )
1177 timeSpan = 6; 1180 timeSpan = 6;
1178 for( i = 0; i < timeSpan + 1; ++i ) { 1181 for( i = 0; i < timeSpan + 1; ++i ) {
1179 (*cells)[i]->startUpdateCell(); 1182 (*cells)[i]->startUpdateCell();
1180 } 1183 }
1181 1184
1182 QPtrList<Event> events = calendar()->events(); 1185 QPtrList<Event> events = calendar()->events();
1183 Event *event; 1186 Event *event;
1184 QDateTime dt; 1187 QDateTime dt;
1185 bool ok; 1188 bool ok;
1186 QDate endDate = mStartDate.addDays( timeSpan ); 1189 QDate endDate = mStartDate.addDays( timeSpan );
1187 for( event = events.first(); event; event = events.next() ) { // for event 1190 for( event = events.first(); event; event = events.next() ) { // for event
1188 if ( event->doesRecur() ) { 1191 if ( event->doesRecur() ) {
1189 bool last; 1192 bool last;
1190 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 1193 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
1191 QDateTime incidenceEnd; 1194 QDateTime incidenceEnd;
1192 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 1195 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
1193 bool invalid = false; 1196 bool invalid = false;
1194 while( true ) { 1197 while( true ) {
1195 if ( incidenceStart.isValid() ) { 1198 if ( incidenceStart.isValid() ) {
1196 incidenceEnd = incidenceStart.addDays( eventlen ); 1199 incidenceEnd = incidenceStart.addDays( eventlen );
1197 int st = incidenceStart.date().daysTo( endDate ); 1200 int st = incidenceStart.date().daysTo( endDate );
1198 if ( st >= 0 ) { // start before timeend 1201 if ( st >= 0 ) { // start before timeend
1199 int end = mStartDate.daysTo( incidenceEnd.date() ); 1202 int end = mStartDate.daysTo( incidenceEnd.date() );
1200 if ( end >= 0 ) { // end after timestart --- got one! 1203 if ( end >= 0 ) { // end after timestart --- got one!
1201 //normalize 1204 //normalize
1202 st = timeSpan - st; 1205 st = timeSpan - st;
1203 if ( st < 0 ) st = 0; 1206 if ( st < 0 ) st = 0;
1204 if ( end > timeSpan ) end = timeSpan; 1207 if ( end > timeSpan ) end = timeSpan;
1205 int iii; 1208 int iii;
1206 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 1209 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
1207 for ( iii = st;iii<= end;++iii) 1210 for ( iii = st;iii<= end;++iii)
1208 (*cells)[iii]->insertEvent( event ); 1211 (*cells)[iii]->insertEvent( event );
1209 } 1212 }
1210 } 1213 }
1211 } else { 1214 } else {
1212 if ( invalid ) 1215 if ( invalid )
1213 break; 1216 break;
1214 invalid = true; 1217 invalid = true;
1215 //qDebug("invalid %s", event->summary().latin1()); 1218 //qDebug("invalid %s", event->summary().latin1());
1216 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 1219 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
1217 } 1220 }
1218 if ( last ) 1221 if ( last )
1219 break; 1222 break;
1220 bool ok; 1223 bool ok;
1221 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 1224 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
1222 if ( ! ok ) 1225 if ( ! ok )
1223 break; 1226 break;
1224 if ( incidenceStart.date() > endDate ) 1227 if ( incidenceStart.date() > endDate )
1225 break; 1228 break;
1226 } 1229 }
1227 } else { // no recur 1230 } else { // no recur
1228 int st = event->dtStart().date().daysTo( endDate ); 1231 int st = event->dtStart().date().daysTo( endDate );
1229 if ( st >= 0 ) { // start before timeend 1232 if ( st >= 0 ) { // start before timeend
1230 int end = mStartDate.daysTo( event->dtEnd().date() ); 1233 int end = mStartDate.daysTo( event->dtEnd().date() );
1231 if ( end >= 0 ) { // end after timestart --- got one! 1234 if ( end >= 0 ) { // end after timestart --- got one!
1232 //normalize 1235 //normalize
1233 st = timeSpan - st; 1236 st = timeSpan - st;
1234 if ( st < 0 ) st = 0; 1237 if ( st < 0 ) st = 0;
1235 if ( end > timeSpan ) end = timeSpan; 1238 if ( end > timeSpan ) end = timeSpan;
1236 int iii; 1239 int iii;
1237 for ( iii = st;iii<= end;++iii) 1240 for ( iii = st;iii<= end;++iii)
1238 (*cells)[iii]->insertEvent( event ); 1241 (*cells)[iii]->insertEvent( event );
1239 } 1242 }
1240 } 1243 }
1241 } 1244 }
1242 } 1245 }
1243 // insert due todos 1246 // insert due todos
1244 QPtrList<Todo> todos = calendar()->todos( ); 1247 QPtrList<Todo> todos = calendar()->todos( );
1245 Todo *todo; 1248 Todo *todo;
1246 for(todo = todos.first(); todo; todo = todos.next()) { 1249 for(todo = todos.first(); todo; todo = todos.next()) {
1247 //insertTodo( todo ); 1250 //insertTodo( todo );
1248 if ( todo->hasDueDate() ) { 1251 if ( todo->hasDueDate() ) {
1249 int day = mStartDate.daysTo( todo->dtDue().date() ); 1252 int day = mStartDate.daysTo( todo->dtDue().date() );
1250 if ( day >= 0 && day < timeSpan + 1) { 1253 if ( day >= 0 && day < timeSpan + 1) {
1251 (*cells)[day]->insertTodo( todo ); 1254 (*cells)[day]->insertTodo( todo );
1252 } 1255 }
1253 } 1256 }
1254 } 1257 }
1255 1258
1256 for( i = 0; i < timeSpan+1; ++i ) { 1259 for( i = 0; i < timeSpan+1; ++i ) {
1257 (*cells)[i]->finishUpdateCell(); 1260 (*cells)[i]->finishUpdateCell();
1258 } 1261 }
1259 processSelectionChange(); 1262 processSelectionChange();
1260 (*cells)[0]->setFocus(); 1263 (*cells)[0]->setFocus();
1261 1264
1262 1265
1263#else 1266#else
1264 // old code 1267 // old code
1265 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); 1268 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
1266 int i; 1269 int i;
1267 for( i = 0; i < (*cells).count(); ++i ) { 1270 for( i = 0; i < (*cells).count(); ++i ) {
1268 (*cells)[i]->updateCell(); 1271 (*cells)[i]->updateCell();
1269 } 1272 }
1270 1273
1271 //qDebug("KOMonthView::updateView() "); 1274 //qDebug("KOMonthView::updateView() ");
1272 processSelectionChange(); 1275 processSelectionChange();
1273 // qDebug("---------------------------------------------------------------------+ "); 1276 // qDebug("---------------------------------------------------------------------+ ");
1274 (*cells)[0]->setFocus(); 1277 (*cells)[0]->setFocus();
1275#endif 1278#endif
1276 1279
1277 //qDebug("update time %d ", ti.elapsed()); 1280 //qDebug("update time %d ", ti.elapsed());
1278} 1281}
1279 1282
1280void KOMonthView::resizeEvent(QResizeEvent * e) 1283void KOMonthView::resizeEvent(QResizeEvent * e)
1281{ 1284{
1282 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); 1285 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height());
1283 computeLayout(); 1286 computeLayout();
1284 clPending = true; 1287 clPending = true;
1285 if ( mShowWeekView ) 1288 if ( mShowWeekView )
1286 mCellsW[0]->setFocus(); 1289 mCellsW[0]->setFocus();
1287 else 1290 else
1288 mCells[0]->setFocus(); 1291 mCells[0]->setFocus();
1289} 1292}
1290void KOMonthView::computeLayoutWeek() 1293void KOMonthView::computeLayoutWeek()
1291{ 1294{
1292 static int lastWid = 0; 1295 static int lastWid = 0;
1293 static int lastHei = 0; 1296 static int lastHei = 0;
1294 int daysToShow; 1297 int daysToShow;
1295 bool combinedSatSun = false; 1298 bool combinedSatSun = false;
1296 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1299 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1297 daysToShow = 6; 1300 daysToShow = 6;
1298 combinedSatSun = true; 1301 combinedSatSun = true;
1299 } 1302 }
1300 int tWid = topLevelWidget()->size().width(); 1303 int tWid = topLevelWidget()->size().width();
1301 int tHei = topLevelWidget()->size().height(); 1304 int tHei = topLevelWidget()->size().height();
1302 1305
1303 int wid = width();//e 1306 int wid = width();//e
1304 int hei = height()-1-mNavigatorBar->height(); 1307 int hei = height()-1-mNavigatorBar->height();
1305 1308
1306 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 1309 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
1307 return; 1310 return;
1308 1311
1309 if ( lastWid == width() && lastHei == height() ) 1312 if ( lastWid == width() && lastHei == height() )
1310 return; 1313 return;
1311 lastWid = width(); 1314 lastWid = width();
1312 lastHei = height(); 1315 lastHei = height();
1313 1316
1314 1317
1315 if ( wid < hei ) 1318 if ( wid < hei )
1316 daysToShow = 2; 1319 daysToShow = 2;
1317 else 1320 else
1318 daysToShow = 3; 1321 daysToShow = 3;
1319 mShowSatSunComp = true; 1322 mShowSatSunComp = true;
1320 combinedSatSun = true; 1323 combinedSatSun = true;
1321 1324
1322 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); 1325 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ ");
1323 QFontMetrics fm ( mWeekLabels[0]->font() ); 1326 QFontMetrics fm ( mWeekLabels[0]->font() );
1324 int weeklabelwid = fm.width( "888" ); 1327 int weeklabelwid = fm.width( "888" );
1325 wid -= weeklabelwid; 1328 wid -= weeklabelwid;
1326 1329
1327 int colWid = wid / daysToShow; 1330 int colWid = wid / daysToShow;
1328 int lastCol = wid - ( colWid*6 ); 1331 int lastCol = wid - ( colWid*6 );
1329 int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); 1332 int dayLabelHei = mDayLabelsW[0]->sizeHint().height();
1330 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); 1333 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow );
1331 int colModulo = wid % daysToShow; 1334 int colModulo = wid % daysToShow;
1332 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; 1335 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1;
1333 //qDebug("rowmod %d ", rowModulo); 1336 //qDebug("rowmod %d ", rowModulo);
1334 int i; 1337 int i;
1335 int x,y,w,h; 1338 int x,y,w,h;
1336 x= 0; 1339 x= 0;
1337 y= 0; 1340 y= 0;
1338 w = colWid; 1341 w = colWid;
1339 h = dayLabelHei ; 1342 h = dayLabelHei ;
1340 for ( i = 0; i < 7; i++) { 1343 for ( i = 0; i < 7; i++) {
1341 if ( i && !( i % daysToShow) && i < 6) { 1344 if ( i && !( i % daysToShow) && i < 6) {
1342 y += hei/(5-daysToShow); 1345 y += hei/(5-daysToShow);
1343 x = 0; 1346 x = 0;
1344 w = colWid; 1347 w = colWid;
1345 } 1348 }
1346 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1349 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1347 ++w; 1350 ++w;
1348 } 1351 }
1349 if ( i >= 5 ) { 1352 if ( i >= 5 ) {
1350 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); 1353 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h);
1351 x -= (w/2 ); 1354 x -= (w/2 );
diff --git a/korganizer/kowhatsnextview.cpp b/korganizer/kowhatsnextview.cpp
index 391b3bb..18dc656 100644
--- a/korganizer/kowhatsnextview.cpp
+++ b/korganizer/kowhatsnextview.cpp
@@ -1,768 +1,774 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qlayout.h> 20#include <qlayout.h>
21#include <qtextbrowser.h> 21#include <qtextbrowser.h>
22#include <qtextcodec.h> 22#include <qtextcodec.h>
23#include <qfileinfo.h> 23#include <qfileinfo.h>
24#include <qlabel.h> 24#include <qlabel.h>
25 25
26#include <qapplication.h> 26#include <qapplication.h>
27#ifdef DESKTOP_VERSION 27#ifdef DESKTOP_VERSION
28#include <qpaintdevicemetrics.h> 28#include <qpaintdevicemetrics.h>
29#endif 29#endif
30#include <kglobal.h> 30#include <kglobal.h>
31#include <klocale.h> 31#include <klocale.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kmessagebox.h> 34#include <kmessagebox.h>
35 35
36#include <libkcal/calendar.h> 36#include <libkcal/calendar.h>
37 37
38#ifndef KORG_NOPRINTER 38#ifndef KORG_NOPRINTER
39#include "calprinter.h" 39#include "calprinter.h"
40#endif 40#endif
41#include "koglobals.h" 41#include "koglobals.h"
42#include "koprefs.h" 42#include "koprefs.h"
43#include "koeventviewerdialog.h" 43#include "koeventviewerdialog.h"
44#include <qstylesheet.h> 44#include <qstylesheet.h>
45#include "kowhatsnextview.h" 45#include "kowhatsnextview.h"
46using namespace KOrg; 46using namespace KOrg;
47 47
48void WhatsNextTextBrowser::setSource(const QString& n) 48void WhatsNextTextBrowser::setSource(const QString& n)
49{ 49{
50 50
51 if (n.startsWith("event:")) { 51 if (n.startsWith("event:")) {
52 emit showIncidence(n); 52 emit showIncidence(n);
53 return; 53 return;
54 } else if (n.startsWith("todo:")) { 54 } else if (n.startsWith("todo:")) {
55 emit showIncidence(n); 55 emit showIncidence(n);
56 return; 56 return;
57 } else { 57 } else {
58 QTextBrowser::setSource(n); 58 QTextBrowser::setSource(n);
59 } 59 }
60} 60}
61void WhatsNextTextBrowser::printMe() 61void WhatsNextTextBrowser::printMe()
62{ 62{
63#ifdef DESKTOP_VERSION 63#ifdef DESKTOP_VERSION
64 QPrinter printer; 64 QPrinter printer;
65 if (!printer.setup() ) 65 if (!printer.setup() )
66 return; 66 return;
67 QPainter p; 67 QPainter p;
68 p.begin ( &printer ); 68 p.begin ( &printer );
69 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); 69 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
70 float dx, dy; 70 float dx, dy;
71 int wid = (m.width() * 9)/10; 71 int wid = (m.width() * 9)/10;
72 dx = (float) wid/(float)contentsWidth (); 72 dx = (float) wid/(float)contentsWidth ();
73 dy = (float)(m.height()) / (float)contentsHeight (); 73 dy = (float)(m.height()) / (float)contentsHeight ();
74 float scale; 74 float scale;
75 // scale to fit the width or height of the paper 75 // scale to fit the width or height of the paper
76 if ( dx < dy ) 76 if ( dx < dy )
77 scale = dx; 77 scale = dx;
78 else 78 else
79 scale = dy; 79 scale = dy;
80 p.translate( m.width()/10,0 ); 80 p.translate( m.width()/10,0 );
81 p.scale( scale, scale ); 81 p.scale( scale, scale );
82 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); 82 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () );
83 p.end(); 83 p.end();
84#endif 84#endif
85} 85}
86 86
87KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent, 87KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent,
88 const char *name) 88 const char *name)
89 : KOrg::BaseView(calendar, parent, name) 89 : KOrg::BaseView(calendar, parent, name)
90{ 90{
91 // mDateLabel = 91 // mDateLabel =
92 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this); 92 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this);
93 // mDateLabel->setMargin(2); 93 // mDateLabel->setMargin(2);
94 // mDateLabel->setAlignment(AlignCenter); 94 // mDateLabel->setAlignment(AlignCenter);
95 setFont( KOPrefs::instance()->mWhatsNextFont ); 95 setFont( KOPrefs::instance()->mWhatsNextFont );
96 mView = new WhatsNextTextBrowser(this); 96 mView = new WhatsNextTextBrowser(this);
97 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &))); 97 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &)));
98 QStyleSheet* stsh = mView->styleSheet(); 98 QStyleSheet* stsh = mView->styleSheet();
99 QStyleSheetItem * style ; 99 QStyleSheetItem * style ;
100 style = stsh->item ("h2" ); 100 style = stsh->item ("h2" );
101 if ( style ) { 101 if ( style ) {
102 style->setMargin(QStyleSheetItem::MarginAll,0); 102 style->setMargin(QStyleSheetItem::MarginAll,0);
103 } 103 }
104 style = stsh->item ("h3" ); 104 style = stsh->item ("h3" );
105 if ( style ) { 105 if ( style ) {
106 style->setMargin(QStyleSheetItem::MarginAll,0); 106 style->setMargin(QStyleSheetItem::MarginAll,0);
107 } 107 }
108 mEventViewer = 0; 108 mEventViewer = 0;
109 109
110 QBoxLayout *topLayout = new QVBoxLayout(this); 110 QBoxLayout *topLayout = new QVBoxLayout(this);
111 // topLayout->addWidget(mDateLabel); 111 // topLayout->addWidget(mDateLabel);
112 topLayout->addWidget(mView); 112 topLayout->addWidget(mView);
113 mTimer = new QTimer( this ); 113 mTimer = new QTimer( this );
114 connect(mTimer,SIGNAL( timeout() ),this, SLOT(updateView())); 114 connect(mTimer,SIGNAL( timeout() ),this, SLOT(updateView()));
115 115
116 connect(mView->horizontalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer())); 116 connect(mView->horizontalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer()));
117 connect(mView->verticalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer())); 117 connect(mView->verticalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer()));
118} 118}
119 119
120KOWhatsNextView::~KOWhatsNextView() 120KOWhatsNextView::~KOWhatsNextView()
121{ 121{
122} 122}
123 123
124int KOWhatsNextView::maxDatesHint() 124int KOWhatsNextView::maxDatesHint()
125{ 125{
126 return 0; 126 return 0;
127} 127}
128 128
129int KOWhatsNextView::currentDateCount() 129int KOWhatsNextView::currentDateCount()
130{ 130{
131 return 0; 131 return 0;
132} 132}
133 133
134QPtrList<Incidence> KOWhatsNextView::selectedIncidences() 134QPtrList<Incidence> KOWhatsNextView::selectedIncidences()
135{ 135{
136 QPtrList<Incidence> eventList; 136 QPtrList<Incidence> eventList;
137 137
138 return eventList; 138 return eventList;
139} 139}
140 140
141void KOWhatsNextView::printMe() 141void KOWhatsNextView::printMe()
142{ 142{
143#ifdef DESKTOP_VERSION 143#ifdef DESKTOP_VERSION
144 mView->printMe(); 144 mView->printMe();
145#endif 145#endif
146} 146}
147void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd, 147void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd,
148 const QDate &td) 148 const QDate &td)
149{ 149{
150#ifndef KORG_NOPRINTER 150#ifndef KORG_NOPRINTER
151 calPrinter->preview(CalPrinter::Day, fd, td); 151 calPrinter->preview(CalPrinter::Day, fd, td);
152#endif 152#endif
153} 153}
154void KOWhatsNextView::updateConfig() 154void KOWhatsNextView::updateConfig()
155{ 155{
156 setFont( KOPrefs::instance()->mWhatsNextFont ); 156 setFont( KOPrefs::instance()->mWhatsNextFont );
157 updateView(); 157 updateView();
158 158
159} 159}
160void KOWhatsNextView::showEvent ( QShowEvent * e ) 160void KOWhatsNextView::showEvent ( QShowEvent * e )
161{ 161{
162 //qDebug("KOWhatsNextView::showEvent "); 162 //qDebug("KOWhatsNextView::showEvent ");
163 restartTimer(); 163 restartTimer();
164 QWidget::showEvent ( e ); 164 QWidget::showEvent ( e );
165} 165}
166void KOWhatsNextView::hideEvent ( QHideEvent * e) 166void KOWhatsNextView::hideEvent ( QHideEvent * e)
167{ 167{
168 //qDebug(" KOWhatsNextView::hideEvent"); 168 //qDebug(" KOWhatsNextView::hideEvent");
169 mTimer->stop(); 169 mTimer->stop();
170 QWidget::hideEvent ( e ); 170 QWidget::hideEvent ( e );
171} 171}
172void KOWhatsNextView::restartTimer() 172void KOWhatsNextView::restartTimer()
173{ 173{
174 //qDebug("KOWhatsNextView::restartTimer() "); 174 //qDebug("KOWhatsNextView::restartTimer() ");
175 mTimer->start( 300000 ); 175 mTimer->start( 300000 );
176 //mTimer->start( 5000 ); 176 //mTimer->start( 5000 );
177} 177}
178void KOWhatsNextView::updateView() 178void KOWhatsNextView::updateView()
179{ 179{
180 //qDebug("KOWhatsNextView::updateView() "); 180 //qDebug("KOWhatsNextView::updateView() ");
181 if ( mTimer->isActive() ) 181 if ( mTimer->isActive() )
182 restartTimer(); 182 restartTimer();
183 //qDebug("KOWhatsNextView::updateView() "); 183 //qDebug("KOWhatsNextView::updateView() ");
184 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate())); 184 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate()));
185 KIconLoader kil("korganizer"); 185 KIconLoader kil("korganizer");
186 QString ipath;// = new QString(); 186 QString ipath;// = new QString();
187 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath); 187 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath);
188 //<big><big><strong>" + date + "</strong></big></big>\n"; 188 //<big><big><strong>" + date + "</strong></big></big>\n";
189 mText = "<table width=\"100%\">\n"; 189 mText = "<table width=\"100%\">\n";
190 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 190 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
191#ifdef DESKTOP_VERSION 191#ifdef DESKTOP_VERSION
192 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>"; 192 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>";
193#else 193#else
194 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 194 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
195#endif 195#endif
196 // mText += "<img src=\""; 196 // mText += "<img src=\"";
197 // mText += ipath; 197 // mText += ipath;
198 // mText += "\">"; 198 // mText += "\">";
199 mEventDate = QDate::currentDate(); 199 mEventDate = QDate::currentDate();
200#ifdef DESKTOP_VERSION 200#ifdef DESKTOP_VERSION
201 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>"; 201 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>";
202#else 202#else
203 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>"; 203 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>";
204#endif 204#endif
205 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>"; 205 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>";
206 int iii; 206 int iii;
207 mTodos.clear(); 207 mTodos.clear();
208 QPtrList<Event> events; 208 QPtrList<Event> events;
209 QPtrList<Todo> todos = calendar()->todos(); 209 QPtrList<Todo> todos = calendar()->todos();
210 Todo * todo; 210 Todo * todo;
211 //mText += "<h2>" + i18n("Events: ") + "</h2>\n"; 211 //mText += "<h2>" + i18n("Events: ") + "</h2>\n";
212 int daysToShow = KOPrefs::instance()->mWhatsNextDays ; 212 int daysToShow = KOPrefs::instance()->mWhatsNextDays ;
213 bool itemAdded = false; 213 bool itemAdded = false;
214 for ( iii = 0; iii < daysToShow; ++iii ) { 214 for ( iii = 0; iii < daysToShow; ++iii ) {
215 QString date; 215 QString date;
216 itemAdded = false; 216 itemAdded = false;
217 events = calendar()->events( mEventDate, true ); 217 events = calendar()->events( mEventDate, true );
218 218
219 if ( iii == 0 ) { // today !!! 219 if ( iii == 0 ) { // today !!!
220 todo = todos.first(); 220 todo = todos.first();
221 while(todo) { 221 while(todo) {
222 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) { 222 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) {
223 if ( ! itemAdded ) { 223 if ( ! itemAdded ) {
224 appendDay ( iii, mEventDate ); 224 appendDay ( iii, mEventDate );
225 //itemAdded = true; 225 //itemAdded = true;
226 226
227 } //bool reply=false, bool notRed = true, bool appendTable = false); 227 } //bool reply=false, bool notRed = true, bool appendTable = false);
228 appendEvent(todo, false, false, !itemAdded ); 228 appendEvent(todo, false, false, !itemAdded );
229 itemAdded = true; 229 itemAdded = true;
230 } 230 }
231 todo = todos.next(); 231 todo = todos.next();
232 } 232 }
233 } 233 }
234 234
235 235
236 if (events.count() > 0) { 236 if (events.count() > 0) {
237 // mText += "<p></p>"; 237 // mText += "<p></p>";
238 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 238 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
239 // mText += "<h2>"; 239 // mText += "<h2>";
240 //mText += " <img src=\""; 240 //mText += " <img src=\"";
241 //mText += ipath; 241 //mText += ipath;
242 //mText += "\">"; 242 //mText += "\">";
243 if ( ! itemAdded ) { 243 if ( ! itemAdded ) {
244 appendDay ( iii, mEventDate ); 244 appendDay ( iii, mEventDate );
245 245
246 } 246 }
247 // for first day (iii == 0) 247 // for first day (iii == 0)
248 // we may have syncevents, or events in the past, which maybe should not be diaplayed 248 // we may have syncevents, or events in the past, which maybe should not be diaplayed
249 // for that reason we cannot append <table> in appendDay () for iii == 0 249 // for that reason we cannot append <table> in appendDay () for iii == 0
250 // we must append it in the first successful call of appendEvent() 250 // we must append it in the first successful call of appendEvent()
251 Event *ev = events.first(); 251 Event *ev = events.first();
252 while(ev) { 252 while(ev) {
253 //qDebug("+++++event append %s", ev->summary().latin1()); 253 //qDebug("+++++event append %s", ev->summary().latin1());
254 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) { 254 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) {
255 if ( appendEvent(ev, false , iii!= 0,!itemAdded ) ) 255 if ( appendEvent(ev, false , iii!= 0,!itemAdded ) )
256 itemAdded = true; 256 itemAdded = true;
257 } 257 }
258 ev = events.next(); 258 ev = events.next();
259 } 259 }
260 260
261 //mText += "</table>\n"; 261 //mText += "</table>\n";
262 } 262 }
263 263
264 todo = todos.first(); 264 todo = todos.first();
265 while(todo) { 265 while(todo) {
266 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) { 266 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) {
267 if ( ! itemAdded ) { 267 if ( ! itemAdded ) {
268 appendDay ( iii, mEventDate ); 268 appendDay ( iii, mEventDate );
269 //itemAdded = true; 269 //itemAdded = true;
270 } 270 }
271 appendEvent(todo, false , iii!= 0,!itemAdded); 271 appendEvent(todo, false , iii!= 0,!itemAdded);
272 itemAdded = true; 272 itemAdded = true;
273 } 273 }
274 todo = todos.next(); 274 todo = todos.next();
275 } 275 }
276 if ( !itemAdded && iii == 0 ) { 276 if ( !itemAdded && iii == 0 ) {
277 // appendDay ( iii, mEventDate ); 277 // appendDay ( iii, mEventDate );
278 //mText += "<table>"; 278 //mText += "<table>";
279 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n"; 279 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n";
280 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do.") +"</em></font></h3>\n"; 280 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do.") +"</em></font></h3>\n";
281 //mText +="</table>"; 281 //mText +="</table>";
282 } 282 }
283 if ( itemAdded ) 283 if ( itemAdded )
284 mText += "</table>\n"; 284 mText += "</table>\n";
285 mEventDate = mEventDate.addDays( 1 ); 285 mEventDate = mEventDate.addDays( 1 );
286 } 286 }
287 287
288 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios; 288 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios;
289 if (todos.count() > 0 && topmostPrios > 0 ) { 289 if (todos.count() > 0 && topmostPrios > 0 ) {
290 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 290 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
291 // mText += "<h2>"; 291 // mText += "<h2>";
292 //<img src=\""; 292 //<img src=\"";
293 // mText += ipath; 293 // mText += ipath;
294 // mText += "\">"; 294 // mText += "\">";
295 // mText += i18n("Overdue To-Do:") + "</h2>\n"; 295 // mText += i18n("Overdue To-Do:") + "</h2>\n";
296 296
297 //mText += "<ul>\n"; 297 //mText += "<ul>\n";
298 bool gotone = false; 298 bool gotone = false;
299 int priority = 1; 299 int priority = 1;
300 int priosFound = 0; 300 int priosFound = 0;
301#ifdef DESKTOP_VERSION 301#ifdef DESKTOP_VERSION
302 mText +="<p></p>"; 302 mText +="<p></p>";
303#endif 303#endif
304 304
305 mText +="<h2><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></h2>\n"; 305 mText +="<h2><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></h2>\n";
306 mText += "<ul>\n"; 306 mText += "<ul>\n";
307 while (!gotone && priority<6) { 307 while (!gotone && priority<6) {
308 todo = todos.first(); 308 todo = todos.first();
309 while(todo) { 309 while(todo) {
310 if (!todo->isCompleted() && (todo->priority() == priority) ) { 310 if (!todo->isCompleted() && (todo->priority() == priority) ) {
311 if ( appendTodo(todo) ) 311 if ( appendTodo(todo) )
312 gotone = true; 312 gotone = true;
313 } 313 }
314 todo = todos.next(); 314 todo = todos.next();
315 } 315 }
316 if ( gotone ) { 316 if ( gotone ) {
317 gotone = false; 317 gotone = false;
318 ++priosFound; 318 ++priosFound;
319 if ( priosFound == topmostPrios ) 319 if ( priosFound == topmostPrios )
320 break; 320 break;
321 } 321 }
322 priority++; 322 priority++;
323 // kdDebug() << "adding the todos..." << endl; 323 // kdDebug() << "adding the todos..." << endl;
324 } 324 }
325 mText += "</ul>\n"; 325 mText += "</ul>\n";
326 } 326 }
327 327
328 int replys = 0; 328 int replys = 0;
329 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6)); 329 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6));
330 if (events.count() > 0) { 330 if (events.count() > 0) {
331 Event *ev = events.first(); 331 Event *ev = events.first();
332 while(ev) { 332 while(ev) {
333 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 333 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
334 if (me!=0) { 334 if (me!=0) {
335 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 335 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
336 if (replys == 0) { 336 if (replys == 0) {
337 mText += "<p></p>"; 337 mText += "<p></p>";
338 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 338 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
339 //mText += "<h2>"; 339 //mText += "<h2>";
340 //<img src=\""; 340 //<img src=\"";
341 // mText += ipath; 341 // mText += ipath;
342 // mText += "\">"; 342 // mText += "\">";
343 //mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n"; 343 //mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
344 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n"; 344 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n";
345 mText += "<table>\n"; 345 mText += "<table>\n";
346 } 346 }
347 replys++; 347 replys++;
348 appendEvent(ev,true); 348 appendEvent(ev,true);
349 } 349 }
350 } 350 }
351 ev = events.next(); 351 ev = events.next();
352 } 352 }
353 } 353 }
354 todos = calendar()->todos(); 354 todos = calendar()->todos();
355 if (todos.count() > 0) { 355 if (todos.count() > 0) {
356 Todo *to = todos.first(); 356 Todo *to = todos.first();
357 while(to) { 357 while(to) {
358 if ( !to->isCompleted() ){ 358 if ( !to->isCompleted() ){
359 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 359 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
360 if (me!=0) { 360 if (me!=0) {
361 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 361 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
362 if (replys == 0) { 362 if (replys == 0) {
363 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n"; 363 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n";
364 mText += "<table>\n"; 364 mText += "<table>\n";
365 } 365 }
366 replys++; 366 replys++;
367 appendEvent(to, true); 367 appendEvent(to, true);
368 } 368 }
369 } 369 }
370 } 370 }
371 to = todos.next(); 371 to = todos.next();
372 } 372 }
373 } 373 }
374 if (replys > 0 ) mText += "</table>\n"; 374 if (replys > 0 ) mText += "</table>\n";
375 375
376 376
377 mText += "</td></tr>\n</table>\n"; 377 mText += "</td></tr>\n</table>\n";
378 378
379 mView->setText(mText); 379 mView->setText(mText);
380 mView->setFocus(); 380 mView->setFocus();
381 381
382 // QPixmap bPix = SmallIcon( "back" ); 382 // QPixmap bPix = SmallIcon( "back" );
383 // qDebug("xxxxxxxxxxxxxxxxxxxxx "); 383 // qDebug("xxxxxxxxxxxxxxxxxxxxx ");
384 // QWidget* test = new QWidget(); 384 // QWidget* test = new QWidget();
385 // test->setBackgroundMode(FixedPixmap ); 385 // test->setBackgroundMode(FixedPixmap );
386 // test->setBackgroundPixmap ( bPix ); 386 // test->setBackgroundPixmap ( bPix );
387 // test->resize( 300, 400 ); 387 // test->resize( 300, 400 );
388 // test->show(); 388 // test->show();
389 // mView->setBackgroundMode(FixedPixmap ); 389 // mView->setBackgroundMode(FixedPixmap );
390 // mView->setBackgroundPixmap ( bPix ); 390 // mView->setBackgroundPixmap ( bPix );
391 // qDebug("%s ",mText.latin1()); 391 // qDebug("%s ",mText.latin1());
392} 392}
393 393
394void KOWhatsNextView::appendDay( int i, QDate eventDate ) 394void KOWhatsNextView::appendDay( int i, QDate eventDate )
395{ 395{
396 QString date; 396 QString date;
397 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer); 397 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer);
398 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) { 398 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) {
399 if ( i == 0 ) { 399 if ( i == 0 ) {
400 //mText += "<table>\n"; 400 //mText += "<table>\n";
401 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>"; 401 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>";
402 } 402 }
403 else if ( i == 1 ) 403 else if ( i == 1 )
404 date = "<em><font color=\"#000080\">" + day + "</font></em>" ; 404 date = "<em><font color=\"#000080\">" + day + "</font></em>" ;
405 else date = "<em><font color=\"#000080\">" + day + "</font></em>"; 405 else date = "<em><font color=\"#000080\">" + day + "</font></em>";
406 mText += "<h2>" + date + "</h2>\n"; 406 mText += "<h2>" + date + "</h2>\n";
407 //mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 407 //mText += "<big><big><strong>" + date + "</strong></big></big>\n";
408 mText += "<table>\n"; 408 mText += "<table>\n";
409 409
410 410
411 411
412 } else { 412 } else {
413 if ( i == 0 ) { 413 if ( i == 0 ) {
414 //mText += "<table>\n"; 414 //mText += "<table>\n";
415 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>"; 415 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>";
416 } 416 }
417 417
418#ifdef DESKTOP_VERSION 418#ifdef DESKTOP_VERSION
419 else if ( i == 1 ) { 419 else if ( i == 1 ) {
420 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ; 420 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ;
421 } 421 }
422 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>"; 422 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>";
423#else 423#else
424 else if ( i == 1 ) { 424 else if ( i == 1 ) {
425 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ; 425 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ;
426 } 426 }
427 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>"; 427 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>";
428 428
429#endif 429#endif
430 mText += "<h2>" + date + "</h2>\n"; 430 mText += "<h2>" + date + "</h2>\n";
431 //mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 431 //mText += "<big><big><strong>" + date + "</strong></big></big>\n";
432 mText += "<table>\n"; 432 mText += "<table>\n";
433 } 433 }
434} 434}
435 435
436 436
437void KOWhatsNextView::showDates(const QDate &, const QDate &) 437void KOWhatsNextView::showDates(const QDate &, const QDate &)
438{ 438{
439 updateView(); 439 updateView();
440} 440}
441 441
442void KOWhatsNextView::showEvents(QPtrList<Event>) 442void KOWhatsNextView::showEvents(QPtrList<Event>)
443{ 443{
444} 444}
445 445
446void KOWhatsNextView::changeEventDisplay(Event *, int action) 446void KOWhatsNextView::changeEventDisplay(Event *, int action)
447{ 447{
448 switch(action) { 448 switch(action) {
449 case KOGlobals::EVENTADDED: 449 case KOGlobals::EVENTADDED:
450 updateView(); 450 updateView();
451 break; 451 break;
452 case KOGlobals::EVENTEDITED: 452 case KOGlobals::EVENTEDITED:
453 updateView(); 453 updateView();
454 break; 454 break;
455 case KOGlobals::EVENTDELETED: 455 case KOGlobals::EVENTDELETED:
456 updateView(); 456 updateView();
457 break; 457 break;
458 default: 458 default:
459 updateView(); 459 updateView();
460 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl; 460 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl;
461 } 461 }
462} 462}
463 463
464bool KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed, bool appendTable ) 464bool KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed, bool appendTable )
465{ 465{
466 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(15) == QString("last-syncEvent-") ) 466 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(15) == QString("last-syncEvent-") )
467 return false; 467 return false;
468 QDateTime cdt = QDateTime::currentDateTime(); 468 QDateTime cdt = QDateTime::currentDateTime();
469 QDateTime noc; 469 QDateTime noc;
470 QString tempText; 470 QString tempText;
471 if ( appendTable && !notRed ) { 471 if ( appendTable && !notRed ) {
472 tempText = "<table>"; 472 tempText = "<table>";
473 } 473 }
474 bool ok = true; 474 bool ok = true;
475 if ( reply ) { 475 if ( reply ) {
476 noc = ev->getNextOccurence( cdt, &ok ); 476 noc = ev->getNextOccurence( cdt, &ok );
477 if (! ok && ev->type() == "Event") 477 if (! ok && ev->type() == "Event")
478 return false; 478 return false;
479 } 479 }
480 bool bDay = false; 480 bool bDay = false;
481 if ( ev->categories().contains( i18n("Birthday") ) || ev->categories().contains( i18n("Anniversary") ) ) 481 if ( ev->categories().contains( i18n("Birthday") ) || ev->categories().contains( i18n("Anniversary") ) )
482 bDay = true; 482 bDay = true;
483 tempText += "<tr><td><b>"; 483 tempText += "<tr><td><b>";
484 if (ev->type()=="Event") { 484 if (ev->type()=="Event") {
485 if (reply) { 485 if (reply) {
486 if (!ev->doesFloat()) 486 if (!ev->doesFloat())
487 tempText += KGlobal::locale()->formatDateTime( noc , KOPrefs::instance()->mShortDateInViewer) +": "; 487 tempText += KGlobal::locale()->formatDateTime( noc , KOPrefs::instance()->mShortDateInViewer) +": ";
488 else 488 else
489 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 489 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
490 490
491 } else { 491 } else {
492 if (!ev->doesFloat()) { 492 if (!ev->doesFloat()) {
493 Event *event = static_cast<Event *>(ev); 493 Event *event = static_cast<Event *>(ev);
494 QDateTime st,end; 494 QDateTime st,end;
495 if ( event->recurrence()->doesRecur() ) { 495 if ( event->recurrence()->doesRecur() ) {
496 QDate recDate= mEventDate; 496 QDate recDate= mEventDate;
497 int days = event->dtStart().date().daysTo (event->dtEnd().date() ); 497 int days = event->dtStart().date().daysTo (event->dtEnd().date() );
498 while ( ! event->recursOn( recDate ) ) { 498 while ( ! event->recursOn( recDate ) ) {
499 recDate = recDate.addDays( -1 ); 499 recDate = recDate.addDays( -1 );
500 500
501 } 501 }
502 st = QDateTime ( recDate, event->dtStart().time() ); 502 st = QDateTime ( recDate, event->dtStart().time() );
503 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() ); 503 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() );
504 } 504 }
505 else { 505 else {
506 st = event->dtStart(); 506 st = event->dtStart();
507 end = event->dtEnd(); 507 end = event->dtEnd();
508 } 508 }
509 509
510 510
511 QString dateText; 511 QString dateText;
512 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() ); 512 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() );
513 if ( st.date() < mEventDate ) 513 if ( st.date() < mEventDate )
514 dateText = "++:++-"; 514 dateText = "++:++-";
515 else 515 else
516 dateText = event->dtStartTimeStr() + "-"; 516 dateText = event->dtStartTimeStr() + "-";
517 if ( end.date() > mEventDate ) 517 if ( end.date() > mEventDate )
518 dateText += "++:++"; 518 dateText += "++:++";
519 else 519 else
520 dateText += event->dtEndTimeStr(); 520 dateText += event->dtEndTimeStr();
521 if ( notRed ) 521 if ( notRed )
522 tempText += dateText; 522 tempText += dateText;
523 else { 523 else {
524 if ( end < cdt ) { 524 if ( end < cdt ) {
525 if ( !KOPrefs::instance()->mWNViewShowsPast ) 525 if ( !KOPrefs::instance()->mWNViewShowsPast )
526 return false; 526 return false;
527 tempText += "<font color=\"#F00000\">" + dateText + "</font>"; 527 tempText += "<font color=\"#F00000\">" + dateText + "</font>";
528 } 528 }
529 else if ( st < cdt ) 529 else if ( st < cdt )
530 tempText += "<font color=\"#008000\">" + dateText + "</font>"; 530 tempText += "<font color=\"#008000\">" + dateText + "</font>";
531 else 531 else
532 tempText += dateText; 532 tempText += dateText;
533 533
534 } 534 }
535 535
536 } else { 536 } else {
537 if ( bDay ) { 537 if ( bDay ) {
538 538
539 if ( ev->categories().contains( i18n("Birthday") )) 539 if ( ev->categories().contains( i18n("Birthday") ))
540 tempText += "<font color=\"#F00000\">" + i18n("Birthday") +":</font>"; 540 tempText += "<font color=\"#F00000\">" + i18n("Birthday") +":</font>";
541 else 541 else
542 tempText += "<font color=\"#F00000\">" + i18n("Anniversary")+":</font>"; 542 tempText += "<font color=\"#F00000\">" + i18n("Anniversary")+":</font>";
543 } else { 543 } else {
544 tempText += i18n("Allday:"); 544 tempText += i18n("Allday:");
545 } 545 }
546 546
547 } 547 }
548 } 548 }
549 } else { 549 } else {
550 mTodos.append( ev ); 550 mTodos.append( ev );
551 tempText += i18n("ToDo:"); 551 tempText += i18n("ToDo:");
552 if (reply) { 552 if (reply) {
553 tempText += " "; 553 tempText += " ";
554 if ( noc != cdt ) { 554 if ( noc != cdt ) {
555 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 555 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
556 } 556 }
557 } else { 557 } else {
558 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) { 558 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) {
559 // tempText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 559 // tempText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
560 QString dfs = KGlobal::locale()->dateFormatShort(); 560 QString dfs = KGlobal::locale()->dateFormatShort();
561 KGlobal::locale()->setDateFormatShort("%d.%b"); 561 KGlobal::locale()->setDateFormatShort("%d.%b");
562 tempText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>"; 562 tempText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>";
563 KGlobal::locale()->setDateFormatShort(dfs); 563 KGlobal::locale()->setDateFormatShort(dfs);
564 } else { 564 } else {
565 if (!ev->doesFloat() ) 565 if (!ev->doesFloat() )
566 if( ( (Todo*)ev)->dtDue() < cdt ) { 566 if( ( (Todo*)ev)->dtDue() < cdt ) {
567 tempText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>"; 567 tempText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>";
568 568
569 569
570 } else 570 } else
571 tempText +=((Todo*)ev)->dtDueTimeStr(); 571 tempText +=((Todo*)ev)->dtDueTimeStr();
572 mTodos.append( ev ); 572 mTodos.append( ev );
573 } 573 }
574 } 574 }
575 } 575 }
576 tempText += "</b></td><td>"; 576 tempText += "</b></td><td>";
577 bool needClose = false; 577 bool needClose = false;
578 if ( ev->cancelled() ) { 578 if ( ev->cancelled() ) {
579 tempText += "<font color=\"#F00000\">[c"; 579 tempText += "<font color=\"#F00000\">[c";
580 needClose =true; 580 needClose =true;
581 581
582 } 582 }
583 if ( ev->isAlarmEnabled() ) { 583 if ( ev->isAlarmEnabled() ) {
584 if ( !needClose) 584 if ( !needClose)
585 tempText +="["; 585 tempText +="[";
586 tempText += "a"; 586 tempText += "a";
587 needClose =true; 587 needClose =true;
588 588
589 } 589 }
590 if ( ev->description().length() > 0 ) { 590 if ( ev->description().length() > 0 ) {
591 if ( !needClose) 591 if ( !needClose)
592 tempText +="["; 592 tempText +="[";
593 tempText += "i"; 593 tempText += "i";
594 needClose =true; 594 needClose =true;
595 } 595 }
596 if ( ev->recurrence()->doesRecur() ) { 596 if ( ev->recurrence()->doesRecur() ) {
597 if ( !needClose) 597 if ( !needClose)
598 tempText +="["; 598 tempText +="[";
599 tempText += "r"; 599 tempText += "r";
600 needClose =true; 600 needClose =true;
601 } 601 }
602 if ( needClose ) { 602 if ( needClose ) {
603 tempText += "] "; 603 tempText += "] ";
604 } 604 }
605 if ( ev->cancelled() ) 605 if ( ev->cancelled() )
606 tempText += "</font>"; 606 tempText += "</font>";
607 tempText += "<a "; 607 tempText += "<a ";
608 if (ev->type()=="Event") tempText += "href=\"event:"; 608 if (ev->type()=="Event") tempText += "href=\"event:";
609 if (ev->type()=="Todo") tempText += "href=\"todo:"; 609 if (ev->type()=="Todo") tempText += "href=\"todo:";
610 tempText += ev->uid() + "\">"; 610 tempText += ev->uid() + "\">";
611 if ( ev->summary().length() > 0 ) 611 if ( ev->summary().length() > 0 )
612 tempText += ev->summary(); 612 tempText += ev->summary();
613 else 613 else
614 tempText += i18n("-no summary-"); 614 tempText += i18n("-no summary-");
615 if ( bDay ) { 615 if ( bDay ) {
616 noc = ev->getNextOccurence( cdt.addDays(-1), &ok ); 616 noc = ev->getNextOccurence( cdt.addDays(-1), &ok );
617 if ( ok ) { 617 if ( ok ) {
618 int years = 0; 618 int years = 0;
619 if ( ev->type() =="Todo" ) { 619 if ( ev->type() =="Todo" ) {
620 years = noc.date().year() -((Todo*)ev)->dtDue().date().year(); 620 years = noc.date().year() -((Todo*)ev)->dtDue().date().year();
621 } else 621 } else
622 years = noc.date().year() - ev->dtStart().date().year(); 622 years = noc.date().year() - ev->dtStart().date().year();
623 tempText += i18n(" (%1 y.)"). arg( years ); 623 tempText += i18n(" (%1 y.)"). arg( years );
624 } 624 }
625 } 625 }
626 626
627 tempText += "</a>"; 627 tempText += "</a>";
628 if ( KOPrefs::instance()->mWNViewShowLocation ) 628 if ( KOPrefs::instance()->mWNViewShowLocation )
629 if ( !ev->location().isEmpty() ) 629 if ( !ev->location().isEmpty() )
630 tempText += " ("+ev->location() +")"; 630 tempText += " ("+ev->location() +")";
631 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents) 631 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents)
632 tempText += " ["+ev->relatedTo()->summary() +"]"; 632 tempText += " ["+ev->relatedTo()->summary() +"]";
633 tempText += "</td></tr>\n"; 633 tempText += "</td></tr>\n";
634 mText += tempText; 634 mText += tempText;
635 return true; 635 return true;
636} 636}
637 637
638bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub ) 638bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub )
639{ 639{
640 if ( mTodos.find( ev ) != mTodos.end() ) return false; 640 if ( mTodos.find( ev ) != mTodos.end() ) return false;
641 641
642 mTodos.append( ev ); 642 mTodos.append( ev );
643 if ( !isSub ) 643 if ( !isSub )
644 mText += "<p>"; 644 mText += "<p>";
645 else 645 else
646 mText += "<li>"; 646 mText += "<li>";
647 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] "; 647 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] ";
648 648
649 649
650 mText += ind; 650 mText += ind;
651 bool needClose = false; 651 bool needClose = false;
652 if ( ev->cancelled() ) { 652 if ( ev->cancelled() ) {
653 mText += "<font color=\"#F00000\">[c"; 653 mText += "<font color=\"#F00000\">[c";
654 needClose =true; 654 needClose =true;
655 655
656 } 656 }
657 if ( ev->isAlarmEnabled() ) { 657 if ( ev->isAlarmEnabled() ) {
658 if ( !needClose) 658 if ( !needClose)
659 mText +="["; 659 mText +="[";
660 mText += "a"; 660 mText += "a";
661 needClose =true; 661 needClose =true;
662 662
663 } 663 }
664 664
665 if ( ev->description().length() > 0 ) { 665 if ( ev->description().length() > 0 ) {
666 if ( !needClose) 666 if ( !needClose)
667 mText +="["; 667 mText +="[";
668 mText += "i"; 668 mText += "i";
669 needClose =true; 669 needClose =true;
670 }
671 if ( ev->doesRecur() ) {
672 if ( !needClose)
673 mText +="[";
674 mText += "r";
675 needClose =true;
670 } 676 }
671 // if ( ev->recurrence()->doesRecur() ) { 677 // if ( ev->recurrence()->doesRecur() ) {
672 // if ( !needClose) 678 // if ( !needClose)
673 // mText +="("; 679 // mText +="(";
674 // mText += "r"; 680 // mText += "r";
675 // needClose =true; 681 // needClose =true;
676 // } 682 // }
677 if ( needClose ) 683 if ( needClose )
678 mText += "] "; 684 mText += "] ";
679 if ( ev->cancelled() ) 685 if ( ev->cancelled() )
680 mText += "</font>"; 686 mText += "</font>";
681 mText += "<a href=\"todo:" + ev->uid() + "\">"; 687 mText += "<a href=\"todo:" + ev->uid() + "\">";
682 if ( ev->summary().length() > 0 ) 688 if ( ev->summary().length() > 0 )
683 mText += ev->summary(); 689 mText += ev->summary();
684 else 690 else
685 mText += i18n("-no summary-"); 691 mText += i18n("-no summary-");
686 mText += "</a>"; 692 mText += "</a>";
687 if ( ((Todo*)ev)->hasDueDate () ) { 693 if ( ((Todo*)ev)->hasDueDate () ) {
688 QString year = ""; 694 QString year = "";
689 int ye = ((Todo*)ev)->dtDue().date().year(); 695 int ye = ((Todo*)ev)->dtDue().date().year();
690 if ( QDateTime::currentDateTime().date().year() != ye ) 696 if ( QDateTime::currentDateTime().date().year() != ye )
691 year = QString::number( ye ); 697 year = QString::number( ye );
692 QString dfs = KGlobal::locale()->dateFormatShort(); 698 QString dfs = KGlobal::locale()->dateFormatShort();
693 KGlobal::locale()->setDateFormatShort("%d.%b"); 699 KGlobal::locale()->setDateFormatShort("%d.%b");
694 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>"; 700 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>";
695 KGlobal::locale()->setDateFormatShort(dfs); 701 KGlobal::locale()->setDateFormatShort(dfs);
696 } 702 }
697 if ( KOPrefs::instance()->mWNViewShowLocation ) 703 if ( KOPrefs::instance()->mWNViewShowLocation )
698 if ( !ev->location().isEmpty() ) 704 if ( !ev->location().isEmpty() )
699 mText += " ("+ev->location() +")"; 705 mText += " ("+ev->location() +")";
700 if ( !isSub ) { 706 if ( !isSub ) {
701 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents) 707 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents)
702 mText += " ["+ev->relatedTo()->summary() +"]"; 708 mText += " ["+ev->relatedTo()->summary() +"]";
703 mText += "</p>\n"; 709 mText += "</p>\n";
704 } 710 }
705 else { 711 else {
706 ind += "-"; 712 ind += "-";
707 mText += "</li>\n"; 713 mText += "</li>\n";
708 } 714 }
709 QPtrList<Incidence> Relations = ev->relations(); 715 QPtrList<Incidence> Relations = ev->relations();
710 Incidence *to; 716 Incidence *to;
711 for (to=Relations.first();to;to=Relations.next()) { 717 for (to=Relations.first();to;to=Relations.next()) {
712 if (!((Todo*)to)->isCompleted()) 718 if (!((Todo*)to)->isCompleted())
713 appendTodo( to, ind , true ); 719 appendTodo( to, ind , true );
714 } 720 }
715 721
716 return true; 722 return true;
717} 723}
718 724
719/* 725/*
720 void KOWhatsNextView::createEventViewer() 726 void KOWhatsNextView::createEventViewer()
721 { 727 {
722 if (!mEventViewer) { 728 if (!mEventViewer) {
723 729
724 mEventViewer = new KOEventViewerDialog(this); 730 mEventViewer = new KOEventViewerDialog(this);
725 } 731 }
726 } 732 }
727*/ 733*/
728void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v ) 734void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v )
729{ 735{
730 mEventViewer = v; 736 mEventViewer = v;
731} 737}
732 738
733// TODO: Create this function in CalendarView and remove it from here 739// TODO: Create this function in CalendarView and remove it from here
734void KOWhatsNextView::showIncidence(const QString &uid) 740void KOWhatsNextView::showIncidence(const QString &uid)
735{ 741{
736 742
737 if ( !mEventViewer ) { 743 if ( !mEventViewer ) {
738 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set "); 744 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set ");
739 return; 745 return;
740 } 746 }
741 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl; 747 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl;
742 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1()); 748 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1());
743 if (uid.startsWith("event:")) { 749 if (uid.startsWith("event:")) {
744#ifdef DESKTOP_VERSION 750#ifdef DESKTOP_VERSION
745 Event *event = calendar()->event(uid.mid(8)); 751 Event *event = calendar()->event(uid.mid(8));
746#else 752#else
747 Event *event = calendar()->event(uid.mid(6)); 753 Event *event = calendar()->event(uid.mid(6));
748#endif 754#endif
749 //qDebug("event %d uid %s ", event, uid.mid(6).latin1()); 755 //qDebug("event %d uid %s ", event, uid.mid(6).latin1());
750 if (!event) return; 756 if (!event) return;
751 //createEventViewer(); 757 //createEventViewer();
752 mEventViewer->setEvent(event); 758 mEventViewer->setEvent(event);
753 } else if (uid.startsWith("todo:")) { 759 } else if (uid.startsWith("todo:")) {
754#ifdef DESKTOP_VERSION 760#ifdef DESKTOP_VERSION
755 Todo *todo = calendar()->todo(uid.mid(7)); 761 Todo *todo = calendar()->todo(uid.mid(7));
756#else 762#else
757 Todo *todo = calendar()->todo(uid.mid(5)); 763 Todo *todo = calendar()->todo(uid.mid(5));
758#endif 764#endif
759 if (!todo) return; 765 if (!todo) return;
760 //createEventViewer(); 766 //createEventViewer();
761 mEventViewer->setTodo(todo); 767 mEventViewer->setTodo(todo);
762 } else { 768 } else {
763 return; 769 return;
764 770
765 } 771 }
766 mEventViewer->showMe(); 772 mEventViewer->showMe();
767 mEventViewer->raise(); 773 mEventViewer->raise();
768} 774}
diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp
index bb9cb29..2e38ae3 100644
--- a/libkcal/icalformatimpl.cpp
+++ b/libkcal/icalformatimpl.cpp
@@ -445,1537 +445,1537 @@ void ICalFormatImpl::writeCustomProperties(icalcomponent *parent,CustomPropertie
445 icalproperty_set_x_name(p,c.key()); 445 icalproperty_set_x_name(p,c.key());
446 icalcomponent_add_property(parent,p); 446 icalcomponent_add_property(parent,p);
447 } 447 }
448} 448}
449 449
450icalproperty *ICalFormatImpl::writeAttendee(Attendee *attendee) 450icalproperty *ICalFormatImpl::writeAttendee(Attendee *attendee)
451{ 451{
452 icalproperty *p = icalproperty_new_attendee("mailto:" + attendee->email().utf8()); 452 icalproperty *p = icalproperty_new_attendee("mailto:" + attendee->email().utf8());
453 453
454 if (!attendee->name().isEmpty()) { 454 if (!attendee->name().isEmpty()) {
455 icalproperty_add_parameter(p,icalparameter_new_cn(attendee->name().utf8())); 455 icalproperty_add_parameter(p,icalparameter_new_cn(attendee->name().utf8()));
456 } 456 }
457 457
458 458
459 icalproperty_add_parameter(p,icalparameter_new_rsvp( 459 icalproperty_add_parameter(p,icalparameter_new_rsvp(
460 attendee->RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE )); 460 attendee->RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE ));
461 461
462 icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION; 462 icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION;
463 switch (attendee->status()) { 463 switch (attendee->status()) {
464 default: 464 default:
465 case Attendee::NeedsAction: 465 case Attendee::NeedsAction:
466 status = ICAL_PARTSTAT_NEEDSACTION; 466 status = ICAL_PARTSTAT_NEEDSACTION;
467 break; 467 break;
468 case Attendee::Accepted: 468 case Attendee::Accepted:
469 status = ICAL_PARTSTAT_ACCEPTED; 469 status = ICAL_PARTSTAT_ACCEPTED;
470 break; 470 break;
471 case Attendee::Declined: 471 case Attendee::Declined:
472 status = ICAL_PARTSTAT_DECLINED; 472 status = ICAL_PARTSTAT_DECLINED;
473 break; 473 break;
474 case Attendee::Tentative: 474 case Attendee::Tentative:
475 status = ICAL_PARTSTAT_TENTATIVE; 475 status = ICAL_PARTSTAT_TENTATIVE;
476 break; 476 break;
477 case Attendee::Delegated: 477 case Attendee::Delegated:
478 status = ICAL_PARTSTAT_DELEGATED; 478 status = ICAL_PARTSTAT_DELEGATED;
479 break; 479 break;
480 case Attendee::Completed: 480 case Attendee::Completed:
481 status = ICAL_PARTSTAT_COMPLETED; 481 status = ICAL_PARTSTAT_COMPLETED;
482 break; 482 break;
483 case Attendee::InProcess: 483 case Attendee::InProcess:
484 status = ICAL_PARTSTAT_INPROCESS; 484 status = ICAL_PARTSTAT_INPROCESS;
485 break; 485 break;
486 } 486 }
487 icalproperty_add_parameter(p,icalparameter_new_partstat(status)); 487 icalproperty_add_parameter(p,icalparameter_new_partstat(status));
488 488
489 icalparameter_role role = ICAL_ROLE_REQPARTICIPANT; 489 icalparameter_role role = ICAL_ROLE_REQPARTICIPANT;
490 switch (attendee->role()) { 490 switch (attendee->role()) {
491 case Attendee::Chair: 491 case Attendee::Chair:
492 role = ICAL_ROLE_CHAIR; 492 role = ICAL_ROLE_CHAIR;
493 break; 493 break;
494 default: 494 default:
495 case Attendee::ReqParticipant: 495 case Attendee::ReqParticipant:
496 role = ICAL_ROLE_REQPARTICIPANT; 496 role = ICAL_ROLE_REQPARTICIPANT;
497 break; 497 break;
498 case Attendee::OptParticipant: 498 case Attendee::OptParticipant:
499 role = ICAL_ROLE_OPTPARTICIPANT; 499 role = ICAL_ROLE_OPTPARTICIPANT;
500 break; 500 break;
501 case Attendee::NonParticipant: 501 case Attendee::NonParticipant:
502 role = ICAL_ROLE_NONPARTICIPANT; 502 role = ICAL_ROLE_NONPARTICIPANT;
503 break; 503 break;
504 } 504 }
505 icalproperty_add_parameter(p,icalparameter_new_role(role)); 505 icalproperty_add_parameter(p,icalparameter_new_role(role));
506 506
507 if (!attendee->uid().isEmpty()) { 507 if (!attendee->uid().isEmpty()) {
508 icalparameter* icalparameter_uid = icalparameter_new_x(attendee->uid().utf8()); 508 icalparameter* icalparameter_uid = icalparameter_new_x(attendee->uid().utf8());
509 icalparameter_set_xname(icalparameter_uid,"X-UID"); 509 icalparameter_set_xname(icalparameter_uid,"X-UID");
510 icalproperty_add_parameter(p,icalparameter_uid); 510 icalproperty_add_parameter(p,icalparameter_uid);
511 } 511 }
512 512
513 return p; 513 return p;
514} 514}
515 515
516icalproperty *ICalFormatImpl::writeAttachment(Attachment *att) 516icalproperty *ICalFormatImpl::writeAttachment(Attachment *att)
517{ 517{
518#if 0 518#if 0
519 icalattachtype* attach = icalattachtype_new(); 519 icalattachtype* attach = icalattachtype_new();
520 if (att->isURI()) 520 if (att->isURI())
521 icalattachtype_set_url(attach, att->uri().utf8().data()); 521 icalattachtype_set_url(attach, att->uri().utf8().data());
522 else 522 else
523 icalattachtype_set_base64(attach, att->data(), 0); 523 icalattachtype_set_base64(attach, att->data(), 0);
524#endif 524#endif
525 icalattach *attach; 525 icalattach *attach;
526 if (att->isURI()) 526 if (att->isURI())
527 attach = icalattach_new_from_url( att->uri().utf8().data()); 527 attach = icalattach_new_from_url( att->uri().utf8().data());
528 else 528 else
529 attach = icalattach_new_from_data ( (unsigned char *)att->data(), 0, 0); 529 attach = icalattach_new_from_data ( (unsigned char *)att->data(), 0, 0);
530 icalproperty *p = icalproperty_new_attach(attach); 530 icalproperty *p = icalproperty_new_attach(attach);
531 if (!att->mimeType().isEmpty()) 531 if (!att->mimeType().isEmpty())
532 icalproperty_add_parameter(p,icalparameter_new_fmttype(att->mimeType().utf8().data())); 532 icalproperty_add_parameter(p,icalparameter_new_fmttype(att->mimeType().utf8().data()));
533 533
534 if (att->isBinary()) { 534 if (att->isBinary()) {
535 icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY)); 535 icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
536 icalproperty_add_parameter(p,icalparameter_new_encoding(ICAL_ENCODING_BASE64)); 536 icalproperty_add_parameter(p,icalparameter_new_encoding(ICAL_ENCODING_BASE64));
537 } 537 }
538 return p; 538 return p;
539} 539}
540 540
541icalproperty *ICalFormatImpl::writeRecurrenceRule(Recurrence *recur) 541icalproperty *ICalFormatImpl::writeRecurrenceRule(Recurrence *recur)
542{ 542{
543// kdDebug(5800) << "ICalFormatImpl::writeRecurrenceRule()" << endl; 543// kdDebug(5800) << "ICalFormatImpl::writeRecurrenceRule()" << endl;
544 544
545 icalrecurrencetype r; 545 icalrecurrencetype r;
546 546
547 icalrecurrencetype_clear(&r); 547 icalrecurrencetype_clear(&r);
548 548
549 int index = 0; 549 int index = 0;
550 int index2 = 0; 550 int index2 = 0;
551 551
552 QPtrList<Recurrence::rMonthPos> tmpPositions; 552 QPtrList<Recurrence::rMonthPos> tmpPositions;
553 QPtrList<int> tmpDays; 553 QPtrList<int> tmpDays;
554 int *tmpDay; 554 int *tmpDay;
555 Recurrence::rMonthPos *tmpPos; 555 Recurrence::rMonthPos *tmpPos;
556 bool datetime = false; 556 bool datetime = false;
557 int day; 557 int day;
558 int i; 558 int i;
559 559
560 switch(recur->doesRecur()) { 560 switch(recur->doesRecur()) {
561 case Recurrence::rMinutely: 561 case Recurrence::rMinutely:
562 r.freq = ICAL_MINUTELY_RECURRENCE; 562 r.freq = ICAL_MINUTELY_RECURRENCE;
563 datetime = true; 563 datetime = true;
564 break; 564 break;
565 case Recurrence::rHourly: 565 case Recurrence::rHourly:
566 r.freq = ICAL_HOURLY_RECURRENCE; 566 r.freq = ICAL_HOURLY_RECURRENCE;
567 datetime = true; 567 datetime = true;
568 break; 568 break;
569 case Recurrence::rDaily: 569 case Recurrence::rDaily:
570 r.freq = ICAL_DAILY_RECURRENCE; 570 r.freq = ICAL_DAILY_RECURRENCE;
571 break; 571 break;
572 case Recurrence::rWeekly: 572 case Recurrence::rWeekly:
573 r.freq = ICAL_WEEKLY_RECURRENCE; 573 r.freq = ICAL_WEEKLY_RECURRENCE;
574 r.week_start = static_cast<icalrecurrencetype_weekday>(recur->weekStart()%7 + 1); 574 r.week_start = static_cast<icalrecurrencetype_weekday>(recur->weekStart()%7 + 1);
575 for (i = 0; i < 7; i++) { 575 for (i = 0; i < 7; i++) {
576 if (recur->days().testBit(i)) { 576 if (recur->days().testBit(i)) {
577 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1 577 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1
578 r.by_day[index++] = icalrecurrencetype_day_day_of_week(day); 578 r.by_day[index++] = icalrecurrencetype_day_day_of_week(day);
579 } 579 }
580 } 580 }
581// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX; 581// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX;
582 break; 582 break;
583 case Recurrence::rMonthlyPos: 583 case Recurrence::rMonthlyPos:
584 r.freq = ICAL_MONTHLY_RECURRENCE; 584 r.freq = ICAL_MONTHLY_RECURRENCE;
585 585
586 tmpPositions = recur->monthPositions(); 586 tmpPositions = recur->monthPositions();
587 for (tmpPos = tmpPositions.first(); 587 for (tmpPos = tmpPositions.first();
588 tmpPos; 588 tmpPos;
589 tmpPos = tmpPositions.next()) { 589 tmpPos = tmpPositions.next()) {
590 for (i = 0; i < 7; i++) { 590 for (i = 0; i < 7; i++) {
591 if (tmpPos->rDays.testBit(i)) { 591 if (tmpPos->rDays.testBit(i)) {
592 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1 592 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1
593 day += tmpPos->rPos*8; 593 day += tmpPos->rPos*8;
594 if (tmpPos->negative) day = -day; 594 if (tmpPos->negative) day = -day;
595 r.by_day[index++] = day; 595 r.by_day[index++] = day;
596 } 596 }
597 } 597 }
598 } 598 }
599// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX; 599// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX;
600 break; 600 break;
601 case Recurrence::rMonthlyDay: 601 case Recurrence::rMonthlyDay:
602 r.freq = ICAL_MONTHLY_RECURRENCE; 602 r.freq = ICAL_MONTHLY_RECURRENCE;
603 603
604 tmpDays = recur->monthDays(); 604 tmpDays = recur->monthDays();
605 for (tmpDay = tmpDays.first(); 605 for (tmpDay = tmpDays.first();
606 tmpDay; 606 tmpDay;
607 tmpDay = tmpDays.next()) { 607 tmpDay = tmpDays.next()) {
608 r.by_month_day[index++] = icalrecurrencetype_day_position(*tmpDay*8);//*tmpDay); 608 r.by_month_day[index++] = icalrecurrencetype_day_position(*tmpDay*8);//*tmpDay);
609 } 609 }
610// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX; 610// r.by_day[index] = ICAL_RECURRENCE_ARRAY_MAX;
611 break; 611 break;
612 case Recurrence::rYearlyMonth: 612 case Recurrence::rYearlyMonth:
613 case Recurrence::rYearlyPos: 613 case Recurrence::rYearlyPos:
614 r.freq = ICAL_YEARLY_RECURRENCE; 614 r.freq = ICAL_YEARLY_RECURRENCE;
615 615
616 tmpDays = recur->yearNums(); 616 tmpDays = recur->yearNums();
617 for (tmpDay = tmpDays.first(); 617 for (tmpDay = tmpDays.first();
618 tmpDay; 618 tmpDay;
619 tmpDay = tmpDays.next()) { 619 tmpDay = tmpDays.next()) {
620 r.by_month[index++] = *tmpDay; 620 r.by_month[index++] = *tmpDay;
621 } 621 }
622// r.by_set_pos[index] = ICAL_RECURRENCE_ARRAY_MAX; 622// r.by_set_pos[index] = ICAL_RECURRENCE_ARRAY_MAX;
623 if (recur->doesRecur() == Recurrence::rYearlyPos) { 623 if (recur->doesRecur() == Recurrence::rYearlyPos) {
624 tmpPositions = recur->monthPositions(); 624 tmpPositions = recur->monthPositions();
625 for (tmpPos = tmpPositions.first(); 625 for (tmpPos = tmpPositions.first();
626 tmpPos; 626 tmpPos;
627 tmpPos = tmpPositions.next()) { 627 tmpPos = tmpPositions.next()) {
628 for (i = 0; i < 7; i++) { 628 for (i = 0; i < 7; i++) {
629 if (tmpPos->rDays.testBit(i)) { 629 if (tmpPos->rDays.testBit(i)) {
630 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1 630 day = (i + 1)%7 + 1; // convert from Monday=0 to Sunday=1
631 day += tmpPos->rPos*8; 631 day += tmpPos->rPos*8;
632 if (tmpPos->negative) day = -day; 632 if (tmpPos->negative) day = -day;
633 r.by_day[index2++] = day; 633 r.by_day[index2++] = day;
634 } 634 }
635 } 635 }
636 } 636 }
637// r.by_day[index2] = ICAL_RECURRENCE_ARRAY_MAX; 637// r.by_day[index2] = ICAL_RECURRENCE_ARRAY_MAX;
638 } 638 }
639 break; 639 break;
640 case Recurrence::rYearlyDay: 640 case Recurrence::rYearlyDay:
641 r.freq = ICAL_YEARLY_RECURRENCE; 641 r.freq = ICAL_YEARLY_RECURRENCE;
642 642
643 tmpDays = recur->yearNums(); 643 tmpDays = recur->yearNums();
644 for (tmpDay = tmpDays.first(); 644 for (tmpDay = tmpDays.first();
645 tmpDay; 645 tmpDay;
646 tmpDay = tmpDays.next()) { 646 tmpDay = tmpDays.next()) {
647 r.by_year_day[index++] = *tmpDay; 647 r.by_year_day[index++] = *tmpDay;
648 } 648 }
649// r.by_year_day[index] = ICAL_RECURRENCE_ARRAY_MAX; 649// r.by_year_day[index] = ICAL_RECURRENCE_ARRAY_MAX;
650 break; 650 break;
651 default: 651 default:
652 r.freq = ICAL_NO_RECURRENCE; 652 r.freq = ICAL_NO_RECURRENCE;
653 kdDebug(5800) << "ICalFormatImpl::writeRecurrence(): no recurrence" << endl; 653 kdDebug(5800) << "ICalFormatImpl::writeRecurrence(): no recurrence" << endl;
654 break; 654 break;
655 } 655 }
656 656
657 r.interval = recur->frequency(); 657 r.interval = recur->frequency();
658 658
659 if (recur->duration() > 0) { 659 if (recur->duration() > 0) {
660 r.count = recur->duration(); 660 r.count = recur->duration();
661 } else if (recur->duration() == -1) { 661 } else if (recur->duration() == -1) {
662 r.count = 0; 662 r.count = 0;
663 } else { 663 } else {
664 if (datetime) 664 if (datetime)
665 r.until = writeICalDateTime(recur->endDateTime()); 665 r.until = writeICalDateTime(recur->endDateTime());
666 else 666 else
667 r.until = writeICalDate(recur->endDate()); 667 r.until = writeICalDate(recur->endDate());
668 } 668 }
669 669
670// Debug output 670// Debug output
671#if 0 671#if 0
672 const char *str = icalrecurrencetype_as_string(&r); 672 const char *str = icalrecurrencetype_as_string(&r);
673 if (str) { 673 if (str) {
674 kdDebug(5800) << " String: " << str << endl; 674 kdDebug(5800) << " String: " << str << endl;
675 } else { 675 } else {
676 kdDebug(5800) << " No String" << endl; 676 kdDebug(5800) << " No String" << endl;
677 } 677 }
678#endif 678#endif
679 679
680 return icalproperty_new_rrule(r); 680 return icalproperty_new_rrule(r);
681} 681}
682 682
683icalcomponent *ICalFormatImpl::writeAlarm(Alarm *alarm) 683icalcomponent *ICalFormatImpl::writeAlarm(Alarm *alarm)
684{ 684{
685 icalcomponent *a = icalcomponent_new(ICAL_VALARM_COMPONENT); 685 icalcomponent *a = icalcomponent_new(ICAL_VALARM_COMPONENT);
686 686
687 icalproperty_action action; 687 icalproperty_action action;
688 icalattach *attach = 0; 688 icalattach *attach = 0;
689 689
690 switch (alarm->type()) { 690 switch (alarm->type()) {
691 case Alarm::Procedure: 691 case Alarm::Procedure:
692 action = ICAL_ACTION_PROCEDURE; 692 action = ICAL_ACTION_PROCEDURE;
693 attach = icalattach_new_from_url( QFile::encodeName(alarm->programFile()).data() ); 693 attach = icalattach_new_from_url( QFile::encodeName(alarm->programFile()).data() );
694 icalcomponent_add_property(a,icalproperty_new_attach(attach)); 694 icalcomponent_add_property(a,icalproperty_new_attach(attach));
695 if (!alarm->programArguments().isEmpty()) { 695 if (!alarm->programArguments().isEmpty()) {
696 icalcomponent_add_property(a,icalproperty_new_description(alarm->programArguments().utf8())); 696 icalcomponent_add_property(a,icalproperty_new_description(alarm->programArguments().utf8()));
697 } 697 }
698 break; 698 break;
699 case Alarm::Audio: 699 case Alarm::Audio:
700 action = ICAL_ACTION_AUDIO; 700 action = ICAL_ACTION_AUDIO;
701 if (!alarm->audioFile().isEmpty()) { 701 if (!alarm->audioFile().isEmpty()) {
702 attach = icalattach_new_from_url(QFile::encodeName( alarm->audioFile() ).data()); 702 attach = icalattach_new_from_url(QFile::encodeName( alarm->audioFile() ).data());
703 icalcomponent_add_property(a,icalproperty_new_attach(attach)); 703 icalcomponent_add_property(a,icalproperty_new_attach(attach));
704 } 704 }
705 break; 705 break;
706 case Alarm::Email: { 706 case Alarm::Email: {
707 action = ICAL_ACTION_EMAIL; 707 action = ICAL_ACTION_EMAIL;
708 QValueList<Person> addresses = alarm->mailAddresses(); 708 QValueList<Person> addresses = alarm->mailAddresses();
709 for (QValueList<Person>::Iterator ad = addresses.begin(); ad != addresses.end(); ++ad) { 709 for (QValueList<Person>::Iterator ad = addresses.begin(); ad != addresses.end(); ++ad) {
710 icalproperty *p = icalproperty_new_attendee("MAILTO:" + (*ad).email().utf8()); 710 icalproperty *p = icalproperty_new_attendee("MAILTO:" + (*ad).email().utf8());
711 if (!(*ad).name().isEmpty()) { 711 if (!(*ad).name().isEmpty()) {
712 icalproperty_add_parameter(p,icalparameter_new_cn((*ad).name().utf8())); 712 icalproperty_add_parameter(p,icalparameter_new_cn((*ad).name().utf8()));
713 } 713 }
714 icalcomponent_add_property(a,p); 714 icalcomponent_add_property(a,p);
715 } 715 }
716 icalcomponent_add_property(a,icalproperty_new_summary(alarm->mailSubject().utf8())); 716 icalcomponent_add_property(a,icalproperty_new_summary(alarm->mailSubject().utf8()));
717 icalcomponent_add_property(a,icalproperty_new_description(alarm->text().utf8())); 717 icalcomponent_add_property(a,icalproperty_new_description(alarm->text().utf8()));
718 QStringList attachments = alarm->mailAttachments(); 718 QStringList attachments = alarm->mailAttachments();
719 if (attachments.count() > 0) { 719 if (attachments.count() > 0) {
720 for (QStringList::Iterator at = attachments.begin(); at != attachments.end(); ++at) { 720 for (QStringList::Iterator at = attachments.begin(); at != attachments.end(); ++at) {
721 attach = icalattach_new_from_url(QFile::encodeName( *at ).data()); 721 attach = icalattach_new_from_url(QFile::encodeName( *at ).data());
722 icalcomponent_add_property(a,icalproperty_new_attach(attach)); 722 icalcomponent_add_property(a,icalproperty_new_attach(attach));
723 } 723 }
724 } 724 }
725 break; 725 break;
726 } 726 }
727 case Alarm::Display: 727 case Alarm::Display:
728 action = ICAL_ACTION_DISPLAY; 728 action = ICAL_ACTION_DISPLAY;
729 icalcomponent_add_property(a,icalproperty_new_description(alarm->text().utf8())); 729 icalcomponent_add_property(a,icalproperty_new_description(alarm->text().utf8()));
730 break; 730 break;
731 case Alarm::Invalid: 731 case Alarm::Invalid:
732 default: 732 default:
733 kdDebug(5800) << "Unknown type of alarm" << endl; 733 kdDebug(5800) << "Unknown type of alarm" << endl;
734 action = ICAL_ACTION_NONE; 734 action = ICAL_ACTION_NONE;
735 break; 735 break;
736 } 736 }
737 icalcomponent_add_property(a,icalproperty_new_action(action)); 737 icalcomponent_add_property(a,icalproperty_new_action(action));
738 738
739 // Trigger time 739 // Trigger time
740 icaltriggertype trigger; 740 icaltriggertype trigger;
741 if ( alarm->hasTime() ) { 741 if ( alarm->hasTime() ) {
742 trigger.time = writeICalDateTime(alarm->time()); 742 trigger.time = writeICalDateTime(alarm->time());
743 trigger.duration = icaldurationtype_null_duration(); 743 trigger.duration = icaldurationtype_null_duration();
744 } else { 744 } else {
745 trigger.time = icaltime_null_time(); 745 trigger.time = icaltime_null_time();
746 Duration offset; 746 Duration offset;
747 if ( alarm->hasStartOffset() ) 747 if ( alarm->hasStartOffset() )
748 offset = alarm->startOffset(); 748 offset = alarm->startOffset();
749 else 749 else
750 offset = alarm->endOffset(); 750 offset = alarm->endOffset();
751 trigger.duration = icaldurationtype_from_int( offset.asSeconds() ); 751 trigger.duration = icaldurationtype_from_int( offset.asSeconds() );
752 } 752 }
753 icalproperty *p = icalproperty_new_trigger(trigger); 753 icalproperty *p = icalproperty_new_trigger(trigger);
754 if ( alarm->hasEndOffset() ) 754 if ( alarm->hasEndOffset() )
755 icalproperty_add_parameter(p,icalparameter_new_related(ICAL_RELATED_END)); 755 icalproperty_add_parameter(p,icalparameter_new_related(ICAL_RELATED_END));
756 icalcomponent_add_property(a,p); 756 icalcomponent_add_property(a,p);
757 757
758 // Repeat count and duration 758 // Repeat count and duration
759 if (alarm->repeatCount()) { 759 if (alarm->repeatCount()) {
760 icalcomponent_add_property(a,icalproperty_new_repeat(alarm->repeatCount())); 760 icalcomponent_add_property(a,icalproperty_new_repeat(alarm->repeatCount()));
761 icalcomponent_add_property(a,icalproperty_new_duration( 761 icalcomponent_add_property(a,icalproperty_new_duration(
762 icaldurationtype_from_int(alarm->snoozeTime()*60))); 762 icaldurationtype_from_int(alarm->snoozeTime()*60)));
763 } 763 }
764 764
765 // Custom properties 765 // Custom properties
766 QMap<QCString, QString> custom = alarm->customProperties(); 766 QMap<QCString, QString> custom = alarm->customProperties();
767 for (QMap<QCString, QString>::Iterator c = custom.begin(); c != custom.end(); ++c) { 767 for (QMap<QCString, QString>::Iterator c = custom.begin(); c != custom.end(); ++c) {
768 icalproperty *p = icalproperty_new_x(c.data().utf8()); 768 icalproperty *p = icalproperty_new_x(c.data().utf8());
769 icalproperty_set_x_name(p,c.key()); 769 icalproperty_set_x_name(p,c.key());
770 icalcomponent_add_property(a,p); 770 icalcomponent_add_property(a,p);
771 } 771 }
772 772
773 return a; 773 return a;
774} 774}
775 775
776Todo *ICalFormatImpl::readTodo(icalcomponent *vtodo) 776Todo *ICalFormatImpl::readTodo(icalcomponent *vtodo)
777{ 777{
778 Todo *todo = new Todo; 778 Todo *todo = new Todo;
779 779
780 readIncidence(vtodo,todo); 780 readIncidence(vtodo,todo);
781 781
782 icalproperty *p = icalcomponent_get_first_property(vtodo,ICAL_ANY_PROPERTY); 782 icalproperty *p = icalcomponent_get_first_property(vtodo,ICAL_ANY_PROPERTY);
783 783
784// int intvalue; 784// int intvalue;
785 icaltimetype icaltime; 785 icaltimetype icaltime;
786 786
787 QStringList categories; 787 QStringList categories;
788 788
789 while (p) { 789 while (p) {
790 icalproperty_kind kind = icalproperty_isa(p); 790 icalproperty_kind kind = icalproperty_isa(p);
791 switch (kind) { 791 switch (kind) {
792 792
793 case ICAL_DUE_PROPERTY: // due date 793 case ICAL_DUE_PROPERTY: // due date
794 icaltime = icalproperty_get_due(p); 794 icaltime = icalproperty_get_due(p);
795 if (icaltime.is_date) { 795 if (icaltime.is_date) {
796 todo->setDtDue(QDateTime(readICalDate(icaltime),QTime(0,0,0))); 796 todo->setDtDue(QDateTime(readICalDate(icaltime),QTime(0,0,0)));
797 todo->setFloats(true); 797 todo->setFloats(true);
798 798
799 } else { 799 } else {
800 todo->setDtDue(readICalDateTime(icaltime)); 800 todo->setDtDue(readICalDateTime(icaltime));
801 todo->setFloats(false); 801 todo->setFloats(false);
802 } 802 }
803 todo->setHasDueDate(true); 803 todo->setHasDueDate(true);
804 break; 804 break;
805 805
806 case ICAL_COMPLETED_PROPERTY: // completion date 806 case ICAL_COMPLETED_PROPERTY: // completion date
807 icaltime = icalproperty_get_completed(p); 807 icaltime = icalproperty_get_completed(p);
808 todo->setCompleted(readICalDateTime(icaltime)); 808 todo->setCompleted(readICalDateTime(icaltime));
809 break; 809 break;
810 810
811 case ICAL_PERCENTCOMPLETE_PROPERTY: // Percent completed 811 case ICAL_PERCENTCOMPLETE_PROPERTY: // Percent completed
812 todo->setPercentComplete(icalproperty_get_percentcomplete(p)); 812 todo->setPercentComplete(icalproperty_get_percentcomplete(p));
813 break; 813 break;
814 814
815 case ICAL_RELATEDTO_PROPERTY: // related todo (parent) 815 case ICAL_RELATEDTO_PROPERTY: // related todo (parent)
816 todo->setRelatedToUid(QString::fromUtf8(icalproperty_get_relatedto(p))); 816 todo->setRelatedToUid(QString::fromUtf8(icalproperty_get_relatedto(p)));
817 mTodosRelate.append(todo); 817 mTodosRelate.append(todo);
818 break; 818 break;
819 819
820 case ICAL_DTSTART_PROPERTY: 820 case ICAL_DTSTART_PROPERTY:
821 // Flag that todo has start date. Value is read in by readIncidence(). 821 // Flag that todo has start date. Value is read in by readIncidence().
822 todo->setHasStartDate(true); 822 todo->setHasStartDate(true);
823 break; 823 break;
824 824
825 default: 825 default:
826// kdDebug(5800) << "ICALFormat::readTodo(): Unknown property: " << kind 826// kdDebug(5800) << "ICALFormat::readTodo(): Unknown property: " << kind
827// << endl; 827// << endl;
828 break; 828 break;
829 } 829 }
830 830
831 p = icalcomponent_get_next_property(vtodo,ICAL_ANY_PROPERTY); 831 p = icalcomponent_get_next_property(vtodo,ICAL_ANY_PROPERTY);
832 } 832 }
833 833
834 return todo; 834 return todo;
835} 835}
836 836
837Event *ICalFormatImpl::readEvent(icalcomponent *vevent) 837Event *ICalFormatImpl::readEvent(icalcomponent *vevent)
838{ 838{
839 Event *event = new Event; 839 Event *event = new Event;
840 event->setFloats(false); 840 event->setFloats(false);
841 841
842 readIncidence(vevent,event); 842 readIncidence(vevent,event);
843 843
844 icalproperty *p = icalcomponent_get_first_property(vevent,ICAL_ANY_PROPERTY); 844 icalproperty *p = icalcomponent_get_first_property(vevent,ICAL_ANY_PROPERTY);
845 845
846// int intvalue; 846// int intvalue;
847 icaltimetype icaltime; 847 icaltimetype icaltime;
848 848
849 QStringList categories; 849 QStringList categories;
850 QString transparency; 850 QString transparency;
851 851
852 while (p) { 852 while (p) {
853 icalproperty_kind kind = icalproperty_isa(p); 853 icalproperty_kind kind = icalproperty_isa(p);
854 switch (kind) { 854 switch (kind) {
855 855
856 case ICAL_DTEND_PROPERTY: // start date and time 856 case ICAL_DTEND_PROPERTY: // start date and time
857 icaltime = icalproperty_get_dtend(p); 857 icaltime = icalproperty_get_dtend(p);
858 if (icaltime.is_date) { 858 if (icaltime.is_date) {
859 event->setFloats( true ); 859 event->setFloats( true );
860 // End date is non-inclusive 860 // End date is non-inclusive
861 QDate endDate = readICalDate( icaltime ).addDays( -1 ); 861 QDate endDate = readICalDate( icaltime ).addDays( -1 );
862 mCompat->fixFloatingEnd( endDate ); 862 mCompat->fixFloatingEnd( endDate );
863 if ( endDate < event->dtStart().date() ) { 863 if ( endDate < event->dtStart().date() ) {
864 endDate = event->dtStart().date(); 864 endDate = event->dtStart().date();
865 } 865 }
866 event->setDtEnd( QDateTime( endDate, QTime( 0, 0, 0 ) ) ); 866 event->setDtEnd( QDateTime( endDate, QTime( 0, 0, 0 ) ) );
867 } else { 867 } else {
868 event->setDtEnd(readICalDateTime(icaltime)); 868 event->setDtEnd(readICalDateTime(icaltime));
869 } 869 }
870 break; 870 break;
871 871
872// TODO: 872// TODO:
873 // at this point, there should be at least a start or end time. 873 // at this point, there should be at least a start or end time.
874 // fix up for events that take up no time but have a time associated 874 // fix up for events that take up no time but have a time associated
875#if 0 875#if 0
876 if (!(vo = isAPropertyOf(vevent, VCDTstartProp))) 876 if (!(vo = isAPropertyOf(vevent, VCDTstartProp)))
877 anEvent->setDtStart(anEvent->dtEnd()); 877 anEvent->setDtStart(anEvent->dtEnd());
878 if (!(vo = isAPropertyOf(vevent, VCDTendProp))) 878 if (!(vo = isAPropertyOf(vevent, VCDTendProp)))
879 anEvent->setDtEnd(anEvent->dtStart()); 879 anEvent->setDtEnd(anEvent->dtStart());
880#endif 880#endif
881 881
882// TODO: exdates 882// TODO: exdates
883#if 0 883#if 0
884 // recurrence exceptions 884 // recurrence exceptions
885 if ((vo = isAPropertyOf(vevent, VCExDateProp)) != 0) { 885 if ((vo = isAPropertyOf(vevent, VCExDateProp)) != 0) {
886 anEvent->setExDates(s = fakeCString(vObjectUStringZValue(vo))); 886 anEvent->setExDates(s = fakeCString(vObjectUStringZValue(vo)));
887 deleteStr(s); 887 deleteStr(s);
888 } 888 }
889#endif 889#endif
890 890
891#if 0 891#if 0
892 // secrecy 892 // secrecy
893 if ((vo = isAPropertyOf(vevent, VCClassProp)) != 0) { 893 if ((vo = isAPropertyOf(vevent, VCClassProp)) != 0) {
894 anEvent->setSecrecy(s = fakeCString(vObjectUStringZValue(vo))); 894 anEvent->setSecrecy(s = fakeCString(vObjectUStringZValue(vo)));
895 deleteStr(s); 895 deleteStr(s);
896 } 896 }
897 else 897 else
898 anEvent->setSecrecy("PUBLIC"); 898 anEvent->setSecrecy("PUBLIC");
899 899
900 // attachments 900 // attachments
901 tmpStrList.clear(); 901 tmpStrList.clear();
902 initPropIterator(&voi, vevent); 902 initPropIterator(&voi, vevent);
903 while (moreIteration(&voi)) { 903 while (moreIteration(&voi)) {
904 vo = nextVObject(&voi); 904 vo = nextVObject(&voi);
905 if (strcmp(vObjectName(vo), VCAttachProp) == 0) { 905 if (strcmp(vObjectName(vo), VCAttachProp) == 0) {
906 tmpStrList.append(s = fakeCString(vObjectUStringZValue(vo))); 906 tmpStrList.append(s = fakeCString(vObjectUStringZValue(vo)));
907 deleteStr(s); 907 deleteStr(s);
908 } 908 }
909 } 909 }
910 anEvent->setAttachments(tmpStrList); 910 anEvent->setAttachments(tmpStrList);
911 911
912 // resources 912 // resources
913 if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != 0) { 913 if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != 0) {
914 QString resources = (s = fakeCString(vObjectUStringZValue(vo))); 914 QString resources = (s = fakeCString(vObjectUStringZValue(vo)));
915 deleteStr(s); 915 deleteStr(s);
916 tmpStrList.clear(); 916 tmpStrList.clear();
917 index1 = 0; 917 index1 = 0;
918 index2 = 0; 918 index2 = 0;
919 QString resource; 919 QString resource;
920 while ((index2 = resources.find(';', index1)) != -1) { 920 while ((index2 = resources.find(';', index1)) != -1) {
921 resource = resources.mid(index1, (index2 - index1)); 921 resource = resources.mid(index1, (index2 - index1));
922 tmpStrList.append(resource); 922 tmpStrList.append(resource);
923 index1 = index2; 923 index1 = index2;
924 } 924 }
925 anEvent->setResources(tmpStrList); 925 anEvent->setResources(tmpStrList);
926 } 926 }
927#endif 927#endif
928 928
929 case ICAL_RELATEDTO_PROPERTY: // releated event (parent) 929 case ICAL_RELATEDTO_PROPERTY: // releated event (parent)
930 event->setRelatedToUid(QString::fromUtf8(icalproperty_get_relatedto(p))); 930 event->setRelatedToUid(QString::fromUtf8(icalproperty_get_relatedto(p)));
931 mEventsRelate.append(event); 931 mEventsRelate.append(event);
932 break; 932 break;
933 933
934 case ICAL_TRANSP_PROPERTY: // Transparency 934 case ICAL_TRANSP_PROPERTY: // Transparency
935 if(icalproperty_get_transp(p) == ICAL_TRANSP_TRANSPARENT ) 935 if(icalproperty_get_transp(p) == ICAL_TRANSP_TRANSPARENT )
936 event->setTransparency( Event::Transparent ); 936 event->setTransparency( Event::Transparent );
937 else 937 else
938 event->setTransparency( Event::Opaque ); 938 event->setTransparency( Event::Opaque );
939 break; 939 break;
940 940
941 default: 941 default:
942// kdDebug(5800) << "ICALFormat::readEvent(): Unknown property: " << kind 942// kdDebug(5800) << "ICALFormat::readEvent(): Unknown property: " << kind
943// << endl; 943// << endl;
944 break; 944 break;
945 } 945 }
946 946
947 p = icalcomponent_get_next_property(vevent,ICAL_ANY_PROPERTY); 947 p = icalcomponent_get_next_property(vevent,ICAL_ANY_PROPERTY);
948 } 948 }
949 949
950 QString msade = event->nonKDECustomProperty("X-MICROSOFT-CDO-ALLDAYEVENT"); 950 QString msade = event->nonKDECustomProperty("X-MICROSOFT-CDO-ALLDAYEVENT");
951 if (!msade.isNull()) { 951 if (!msade.isNull()) {
952 bool floats = (msade == QString::fromLatin1("TRUE")); 952 bool floats = (msade == QString::fromLatin1("TRUE"));
953 kdDebug(5800) << "ICALFormat::readEvent(): all day event: " << floats << endl; 953 kdDebug(5800) << "ICALFormat::readEvent(): all day event: " << floats << endl;
954 event->setFloats(floats); 954 event->setFloats(floats);
955 if (floats) { 955 if (floats) {
956 QDateTime endDate = event->dtEnd(); 956 QDateTime endDate = event->dtEnd();
957 event->setDtEnd(endDate.addDays(-1)); 957 event->setDtEnd(endDate.addDays(-1));
958 } 958 }
959 } 959 }
960 960
961 // some stupid vCal exporters ignore the standard and use Description 961 // some stupid vCal exporters ignore the standard and use Description
962 // instead of Summary for the default field. Correct for this. 962 // instead of Summary for the default field. Correct for this.
963 if (event->summary().isEmpty() && 963 if (event->summary().isEmpty() &&
964 !(event->description().isEmpty())) { 964 !(event->description().isEmpty())) {
965 QString tmpStr = event->description().simplifyWhiteSpace(); 965 QString tmpStr = event->description().simplifyWhiteSpace();
966 event->setDescription(""); 966 event->setDescription("");
967 event->setSummary(tmpStr); 967 event->setSummary(tmpStr);
968 } 968 }
969 969
970 return event; 970 return event;
971} 971}
972 972
973FreeBusy *ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy) 973FreeBusy *ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy)
974{ 974{
975 FreeBusy *freebusy = new FreeBusy; 975 FreeBusy *freebusy = new FreeBusy;
976 976
977 readIncidenceBase(vfreebusy,freebusy); 977 readIncidenceBase(vfreebusy,freebusy);
978 978
979 icalproperty *p = icalcomponent_get_first_property(vfreebusy,ICAL_ANY_PROPERTY); 979 icalproperty *p = icalcomponent_get_first_property(vfreebusy,ICAL_ANY_PROPERTY);
980 980
981 icaltimetype icaltime; 981 icaltimetype icaltime;
982 icalperiodtype icalperiod; 982 icalperiodtype icalperiod;
983 QDateTime period_start, period_end; 983 QDateTime period_start, period_end;
984 984
985 while (p) { 985 while (p) {
986 icalproperty_kind kind = icalproperty_isa(p); 986 icalproperty_kind kind = icalproperty_isa(p);
987 switch (kind) { 987 switch (kind) {
988 988
989 case ICAL_DTSTART_PROPERTY: // start date and time 989 case ICAL_DTSTART_PROPERTY: // start date and time
990 icaltime = icalproperty_get_dtstart(p); 990 icaltime = icalproperty_get_dtstart(p);
991 freebusy->setDtStart(readICalDateTime(icaltime)); 991 freebusy->setDtStart(readICalDateTime(icaltime));
992 break; 992 break;
993 993
994 case ICAL_DTEND_PROPERTY: // start End Date and Time 994 case ICAL_DTEND_PROPERTY: // start End Date and Time
995 icaltime = icalproperty_get_dtend(p); 995 icaltime = icalproperty_get_dtend(p);
996 freebusy->setDtEnd(readICalDateTime(icaltime)); 996 freebusy->setDtEnd(readICalDateTime(icaltime));
997 break; 997 break;
998 998
999 case ICAL_FREEBUSY_PROPERTY: //Any FreeBusy Times 999 case ICAL_FREEBUSY_PROPERTY: //Any FreeBusy Times
1000 icalperiod = icalproperty_get_freebusy(p); 1000 icalperiod = icalproperty_get_freebusy(p);
1001 period_start = readICalDateTime(icalperiod.start); 1001 period_start = readICalDateTime(icalperiod.start);
1002 period_end = readICalDateTime(icalperiod.end); 1002 period_end = readICalDateTime(icalperiod.end);
1003 freebusy->addPeriod(period_start, period_end); 1003 freebusy->addPeriod(period_start, period_end);
1004 break; 1004 break;
1005 1005
1006 default: 1006 default:
1007 kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind 1007 kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind
1008 << endl; 1008 << endl;
1009 break; 1009 break;
1010 } 1010 }
1011 p = icalcomponent_get_next_property(vfreebusy,ICAL_ANY_PROPERTY); 1011 p = icalcomponent_get_next_property(vfreebusy,ICAL_ANY_PROPERTY);
1012 } 1012 }
1013 1013
1014 return freebusy; 1014 return freebusy;
1015} 1015}
1016 1016
1017Journal *ICalFormatImpl::readJournal(icalcomponent *vjournal) 1017Journal *ICalFormatImpl::readJournal(icalcomponent *vjournal)
1018{ 1018{
1019 Journal *journal = new Journal; 1019 Journal *journal = new Journal;
1020 1020
1021 readIncidence(vjournal,journal); 1021 readIncidence(vjournal,journal);
1022 1022
1023 return journal; 1023 return journal;
1024} 1024}
1025 1025
1026Attendee *ICalFormatImpl::readAttendee(icalproperty *attendee) 1026Attendee *ICalFormatImpl::readAttendee(icalproperty *attendee)
1027{ 1027{
1028 icalparameter *p = 0; 1028 icalparameter *p = 0;
1029 1029
1030 QString email = QString::fromUtf8(icalproperty_get_attendee(attendee)); 1030 QString email = QString::fromUtf8(icalproperty_get_attendee(attendee));
1031 1031
1032 QString name; 1032 QString name;
1033 QString uid = QString::null; 1033 QString uid = QString::null;
1034 p = icalproperty_get_first_parameter(attendee,ICAL_CN_PARAMETER); 1034 p = icalproperty_get_first_parameter(attendee,ICAL_CN_PARAMETER);
1035 if (p) { 1035 if (p) {
1036 name = QString::fromUtf8(icalparameter_get_cn(p)); 1036 name = QString::fromUtf8(icalparameter_get_cn(p));
1037 } else { 1037 } else {
1038 } 1038 }
1039 1039
1040 bool rsvp=false; 1040 bool rsvp=false;
1041 p = icalproperty_get_first_parameter(attendee,ICAL_RSVP_PARAMETER); 1041 p = icalproperty_get_first_parameter(attendee,ICAL_RSVP_PARAMETER);
1042 if (p) { 1042 if (p) {
1043 icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p); 1043 icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p);
1044 if (rsvpParameter == ICAL_RSVP_TRUE) rsvp = true; 1044 if (rsvpParameter == ICAL_RSVP_TRUE) rsvp = true;
1045 } 1045 }
1046 1046
1047 Attendee::PartStat status = Attendee::NeedsAction; 1047 Attendee::PartStat status = Attendee::NeedsAction;
1048 p = icalproperty_get_first_parameter(attendee,ICAL_PARTSTAT_PARAMETER); 1048 p = icalproperty_get_first_parameter(attendee,ICAL_PARTSTAT_PARAMETER);
1049 if (p) { 1049 if (p) {
1050 icalparameter_partstat partStatParameter = icalparameter_get_partstat(p); 1050 icalparameter_partstat partStatParameter = icalparameter_get_partstat(p);
1051 switch(partStatParameter) { 1051 switch(partStatParameter) {
1052 default: 1052 default:
1053 case ICAL_PARTSTAT_NEEDSACTION: 1053 case ICAL_PARTSTAT_NEEDSACTION:
1054 status = Attendee::NeedsAction; 1054 status = Attendee::NeedsAction;
1055 break; 1055 break;
1056 case ICAL_PARTSTAT_ACCEPTED: 1056 case ICAL_PARTSTAT_ACCEPTED:
1057 status = Attendee::Accepted; 1057 status = Attendee::Accepted;
1058 break; 1058 break;
1059 case ICAL_PARTSTAT_DECLINED: 1059 case ICAL_PARTSTAT_DECLINED:
1060 status = Attendee::Declined; 1060 status = Attendee::Declined;
1061 break; 1061 break;
1062 case ICAL_PARTSTAT_TENTATIVE: 1062 case ICAL_PARTSTAT_TENTATIVE:
1063 status = Attendee::Tentative; 1063 status = Attendee::Tentative;
1064 break; 1064 break;
1065 case ICAL_PARTSTAT_DELEGATED: 1065 case ICAL_PARTSTAT_DELEGATED:
1066 status = Attendee::Delegated; 1066 status = Attendee::Delegated;
1067 break; 1067 break;
1068 case ICAL_PARTSTAT_COMPLETED: 1068 case ICAL_PARTSTAT_COMPLETED:
1069 status = Attendee::Completed; 1069 status = Attendee::Completed;
1070 break; 1070 break;
1071 case ICAL_PARTSTAT_INPROCESS: 1071 case ICAL_PARTSTAT_INPROCESS:
1072 status = Attendee::InProcess; 1072 status = Attendee::InProcess;
1073 break; 1073 break;
1074 } 1074 }
1075 } 1075 }
1076 1076
1077 Attendee::Role role = Attendee::ReqParticipant; 1077 Attendee::Role role = Attendee::ReqParticipant;
1078 p = icalproperty_get_first_parameter(attendee,ICAL_ROLE_PARAMETER); 1078 p = icalproperty_get_first_parameter(attendee,ICAL_ROLE_PARAMETER);
1079 if (p) { 1079 if (p) {
1080 icalparameter_role roleParameter = icalparameter_get_role(p); 1080 icalparameter_role roleParameter = icalparameter_get_role(p);
1081 switch(roleParameter) { 1081 switch(roleParameter) {
1082 case ICAL_ROLE_CHAIR: 1082 case ICAL_ROLE_CHAIR:
1083 role = Attendee::Chair; 1083 role = Attendee::Chair;
1084 break; 1084 break;
1085 default: 1085 default:
1086 case ICAL_ROLE_REQPARTICIPANT: 1086 case ICAL_ROLE_REQPARTICIPANT:
1087 role = Attendee::ReqParticipant; 1087 role = Attendee::ReqParticipant;
1088 break; 1088 break;
1089 case ICAL_ROLE_OPTPARTICIPANT: 1089 case ICAL_ROLE_OPTPARTICIPANT:
1090 role = Attendee::OptParticipant; 1090 role = Attendee::OptParticipant;
1091 break; 1091 break;
1092 case ICAL_ROLE_NONPARTICIPANT: 1092 case ICAL_ROLE_NONPARTICIPANT:
1093 role = Attendee::NonParticipant; 1093 role = Attendee::NonParticipant;
1094 break; 1094 break;
1095 } 1095 }
1096 } 1096 }
1097 1097
1098 p = icalproperty_get_first_parameter(attendee,ICAL_X_PARAMETER); 1098 p = icalproperty_get_first_parameter(attendee,ICAL_X_PARAMETER);
1099 uid = icalparameter_get_xvalue(p); 1099 uid = icalparameter_get_xvalue(p);
1100 // This should be added, but there seems to be a libical bug here. 1100 // This should be added, but there seems to be a libical bug here.
1101 /*while (p) { 1101 /*while (p) {
1102 // if (icalparameter_get_xname(p) == "X-UID") { 1102 // if (icalparameter_get_xname(p) == "X-UID") {
1103 uid = icalparameter_get_xvalue(p); 1103 uid = icalparameter_get_xvalue(p);
1104 p = icalproperty_get_next_parameter(attendee,ICAL_X_PARAMETER); 1104 p = icalproperty_get_next_parameter(attendee,ICAL_X_PARAMETER);
1105 } */ 1105 } */
1106 1106
1107 return new Attendee( name, email, rsvp, status, role, uid ); 1107 return new Attendee( name, email, rsvp, status, role, uid );
1108} 1108}
1109 1109
1110Attachment *ICalFormatImpl::readAttachment(icalproperty *attach) 1110Attachment *ICalFormatImpl::readAttachment(icalproperty *attach)
1111{ 1111{
1112 icalattach *a = icalproperty_get_attach(attach); 1112 icalattach *a = icalproperty_get_attach(attach);
1113 icalparameter_value v = ICAL_VALUE_NONE; 1113 icalparameter_value v = ICAL_VALUE_NONE;
1114 icalparameter_encoding e = ICAL_ENCODING_NONE; 1114 icalparameter_encoding e = ICAL_ENCODING_NONE;
1115 1115
1116 Attachment *attachment = 0; 1116 Attachment *attachment = 0;
1117 /* 1117 /*
1118 icalparameter *vp = icalproperty_get_first_parameter(attach, ICAL_VALUE_PARAMETER); 1118 icalparameter *vp = icalproperty_get_first_parameter(attach, ICAL_VALUE_PARAMETER);
1119 if (vp) 1119 if (vp)
1120 v = icalparameter_get_value(vp); 1120 v = icalparameter_get_value(vp);
1121 1121
1122 icalparameter *ep = icalproperty_get_first_parameter(attach, ICAL_ENCODING_PARAMETER); 1122 icalparameter *ep = icalproperty_get_first_parameter(attach, ICAL_ENCODING_PARAMETER);
1123 if (ep) 1123 if (ep)
1124 e = icalparameter_get_encoding(ep); 1124 e = icalparameter_get_encoding(ep);
1125 */ 1125 */
1126 int isurl = icalattach_get_is_url (a); 1126 int isurl = icalattach_get_is_url (a);
1127 if (isurl == 0) 1127 if (isurl == 0)
1128 attachment = new Attachment((const char*)icalattach_get_data(a)); 1128 attachment = new Attachment((const char*)icalattach_get_data(a));
1129 else { 1129 else {
1130 attachment = new Attachment(QString(icalattach_get_url(a))); 1130 attachment = new Attachment(QString(icalattach_get_url(a)));
1131 } 1131 }
1132 1132
1133 icalparameter *p = icalproperty_get_first_parameter(attach, ICAL_FMTTYPE_PARAMETER); 1133 icalparameter *p = icalproperty_get_first_parameter(attach, ICAL_FMTTYPE_PARAMETER);
1134 if (p) 1134 if (p)
1135 attachment->setMimeType(QString(icalparameter_get_fmttype(p))); 1135 attachment->setMimeType(QString(icalparameter_get_fmttype(p)));
1136 1136
1137 return attachment; 1137 return attachment;
1138} 1138}
1139#include <qtextcodec.h> 1139#include <qtextcodec.h>
1140void ICalFormatImpl::readIncidence(icalcomponent *parent,Incidence *incidence) 1140void ICalFormatImpl::readIncidence(icalcomponent *parent,Incidence *incidence)
1141{ 1141{
1142 readIncidenceBase(parent,incidence); 1142 readIncidenceBase(parent,incidence);
1143 1143
1144 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_ANY_PROPERTY); 1144 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_ANY_PROPERTY);
1145 bool readrec = false; 1145 bool readrec = false;
1146 const char *text; 1146 const char *text;
1147 int intvalue; 1147 int intvalue;
1148 icaltimetype icaltime; 1148 icaltimetype icaltime;
1149 icaldurationtype icalduration; 1149 icaldurationtype icalduration;
1150 struct icalrecurrencetype rectype; 1150 struct icalrecurrencetype rectype;
1151 QStringList categories; 1151 QStringList categories;
1152 1152
1153 while (p) { 1153 while (p) {
1154 icalproperty_kind kind = icalproperty_isa(p); 1154 icalproperty_kind kind = icalproperty_isa(p);
1155 switch (kind) { 1155 switch (kind) {
1156 1156
1157 case ICAL_CREATED_PROPERTY: 1157 case ICAL_CREATED_PROPERTY:
1158 icaltime = icalproperty_get_created(p); 1158 icaltime = icalproperty_get_created(p);
1159 incidence->setCreated(readICalDateTime(icaltime)); 1159 incidence->setCreated(readICalDateTime(icaltime));
1160 break; 1160 break;
1161 1161
1162 case ICAL_SEQUENCE_PROPERTY: // sequence 1162 case ICAL_SEQUENCE_PROPERTY: // sequence
1163 intvalue = icalproperty_get_sequence(p); 1163 intvalue = icalproperty_get_sequence(p);
1164 incidence->setRevision(intvalue); 1164 incidence->setRevision(intvalue);
1165 break; 1165 break;
1166 1166
1167 case ICAL_LASTMODIFIED_PROPERTY: // last modification date 1167 case ICAL_LASTMODIFIED_PROPERTY: // last modification date
1168 icaltime = icalproperty_get_lastmodified(p); 1168 icaltime = icalproperty_get_lastmodified(p);
1169 incidence->setLastModified(readICalDateTime(icaltime)); 1169 incidence->setLastModified(readICalDateTime(icaltime));
1170 break; 1170 break;
1171 1171
1172 case ICAL_DTSTART_PROPERTY: // start date and time 1172 case ICAL_DTSTART_PROPERTY: // start date and time
1173 icaltime = icalproperty_get_dtstart(p); 1173 icaltime = icalproperty_get_dtstart(p);
1174 if (icaltime.is_date) { 1174 if (icaltime.is_date) {
1175 incidence->setDtStart(QDateTime(readICalDate(icaltime),QTime(0,0,0))); 1175 incidence->setDtStart(QDateTime(readICalDate(icaltime),QTime(0,0,0)));
1176 incidence->setFloats(true); 1176 incidence->setFloats(true);
1177 } else { 1177 } else {
1178 incidence->setDtStart(readICalDateTime(icaltime)); 1178 incidence->setDtStart(readICalDateTime(icaltime));
1179 } 1179 }
1180 break; 1180 break;
1181 1181
1182 case ICAL_DURATION_PROPERTY: // start date and time 1182 case ICAL_DURATION_PROPERTY: // start date and time
1183 icalduration = icalproperty_get_duration(p); 1183 icalduration = icalproperty_get_duration(p);
1184 incidence->setDuration(readICalDuration(icalduration)); 1184 incidence->setDuration(readICalDuration(icalduration));
1185 break; 1185 break;
1186 1186
1187 case ICAL_DESCRIPTION_PROPERTY: // description 1187 case ICAL_DESCRIPTION_PROPERTY: // description
1188 text = icalproperty_get_description(p); 1188 text = icalproperty_get_description(p);
1189 incidence->setDescription(QString::fromUtf8(text)); 1189 incidence->setDescription(QString::fromUtf8(text));
1190 break; 1190 break;
1191 1191
1192 case ICAL_SUMMARY_PROPERTY: // summary 1192 case ICAL_SUMMARY_PROPERTY: // summary
1193 { 1193 {
1194 text = icalproperty_get_summary(p); 1194 text = icalproperty_get_summary(p);
1195 incidence->setSummary(QString::fromUtf8(text)); 1195 incidence->setSummary(QString::fromUtf8(text));
1196 } 1196 }
1197 break; 1197 break;
1198 case ICAL_STATUS_PROPERTY: // summary 1198 case ICAL_STATUS_PROPERTY: // summary
1199 { 1199 {
1200 if ( ICAL_STATUS_CANCELLED == icalproperty_get_status(p) ) 1200 if ( ICAL_STATUS_CANCELLED == icalproperty_get_status(p) )
1201 incidence->setCancelled( true ); 1201 incidence->setCancelled( true );
1202 } 1202 }
1203 break; 1203 break;
1204 1204
1205 case ICAL_LOCATION_PROPERTY: // location 1205 case ICAL_LOCATION_PROPERTY: // location
1206 text = icalproperty_get_location(p); 1206 text = icalproperty_get_location(p);
1207 incidence->setLocation(QString::fromUtf8(text)); 1207 incidence->setLocation(QString::fromUtf8(text));
1208 break; 1208 break;
1209 1209
1210 case ICAL_RECURRENCEID_PROPERTY: 1210 case ICAL_RECURRENCEID_PROPERTY:
1211 icaltime = icalproperty_get_recurrenceid(p); 1211 icaltime = icalproperty_get_recurrenceid(p);
1212 incidence->setRecurrenceID( readICalDateTime(icaltime) ); 1212 incidence->setRecurrenceID( readICalDateTime(icaltime) );
1213 qDebug(" RecurrenceID %s",incidence->recurrenceID().toString().latin1() ); 1213 //qDebug(" RecurrenceID %s",incidence->recurrenceID().toString().latin1() );
1214 break; 1214 break;
1215#if 0 1215#if 0
1216 // status 1216 // status
1217 if ((vo = isAPropertyOf(vincidence, VCStatusProp)) != 0) { 1217 if ((vo = isAPropertyOf(vincidence, VCStatusProp)) != 0) {
1218 incidence->setStatus(s = fakeCString(vObjectUStringZValue(vo))); 1218 incidence->setStatus(s = fakeCString(vObjectUStringZValue(vo)));
1219 deleteStr(s); 1219 deleteStr(s);
1220 } 1220 }
1221 else 1221 else
1222 incidence->setStatus("NEEDS ACTION"); 1222 incidence->setStatus("NEEDS ACTION");
1223#endif 1223#endif
1224 1224
1225 case ICAL_PRIORITY_PROPERTY: // priority 1225 case ICAL_PRIORITY_PROPERTY: // priority
1226 intvalue = icalproperty_get_priority(p); 1226 intvalue = icalproperty_get_priority(p);
1227 incidence->setPriority(intvalue); 1227 incidence->setPriority(intvalue);
1228 break; 1228 break;
1229 1229
1230 case ICAL_CATEGORIES_PROPERTY: // categories 1230 case ICAL_CATEGORIES_PROPERTY: // categories
1231 text = icalproperty_get_categories(p); 1231 text = icalproperty_get_categories(p);
1232 categories.append(QString::fromUtf8(text)); 1232 categories.append(QString::fromUtf8(text));
1233 break; 1233 break;
1234 //******************************************* 1234 //*******************************************
1235 case ICAL_RRULE_PROPERTY: 1235 case ICAL_RRULE_PROPERTY:
1236 // we do need (maybe )start datetime of incidence for recurrence 1236 // we do need (maybe )start datetime of incidence for recurrence
1237 // such that we can read recurrence only after we read incidence completely 1237 // such that we can read recurrence only after we read incidence completely
1238 readrec = true; 1238 readrec = true;
1239 rectype = icalproperty_get_rrule(p); 1239 rectype = icalproperty_get_rrule(p);
1240 break; 1240 break;
1241 1241
1242 case ICAL_EXDATE_PROPERTY: 1242 case ICAL_EXDATE_PROPERTY:
1243 icaltime = icalproperty_get_exdate(p); 1243 icaltime = icalproperty_get_exdate(p);
1244 incidence->addExDate(readICalDate(icaltime)); 1244 incidence->addExDate(readICalDate(icaltime));
1245 break; 1245 break;
1246 1246
1247 case ICAL_CLASS_PROPERTY: { 1247 case ICAL_CLASS_PROPERTY: {
1248 int inttext = icalproperty_get_class(p); 1248 int inttext = icalproperty_get_class(p);
1249 if (inttext == ICAL_CLASS_PUBLIC ) { 1249 if (inttext == ICAL_CLASS_PUBLIC ) {
1250 incidence->setSecrecy(Incidence::SecrecyPublic); 1250 incidence->setSecrecy(Incidence::SecrecyPublic);
1251 } else if (inttext == ICAL_CLASS_CONFIDENTIAL ) { 1251 } else if (inttext == ICAL_CLASS_CONFIDENTIAL ) {
1252 incidence->setSecrecy(Incidence::SecrecyConfidential); 1252 incidence->setSecrecy(Incidence::SecrecyConfidential);
1253 } else { 1253 } else {
1254 incidence->setSecrecy(Incidence::SecrecyPrivate); 1254 incidence->setSecrecy(Incidence::SecrecyPrivate);
1255 } 1255 }
1256 } 1256 }
1257 break; 1257 break;
1258 1258
1259 case ICAL_ATTACH_PROPERTY: // attachments 1259 case ICAL_ATTACH_PROPERTY: // attachments
1260 incidence->addAttachment(readAttachment(p)); 1260 incidence->addAttachment(readAttachment(p));
1261 break; 1261 break;
1262 1262
1263 default: 1263 default:
1264// kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind 1264// kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind
1265// << endl; 1265// << endl;
1266 break; 1266 break;
1267 } 1267 }
1268 1268
1269 p = icalcomponent_get_next_property(parent,ICAL_ANY_PROPERTY); 1269 p = icalcomponent_get_next_property(parent,ICAL_ANY_PROPERTY);
1270 } 1270 }
1271 if ( readrec ) { 1271 if ( readrec ) {
1272 readRecurrenceRule(rectype,incidence); 1272 readRecurrenceRule(rectype,incidence);
1273 } 1273 }
1274 // kpilot stuff 1274 // kpilot stuff
1275// TODO: move this application-specific code to kpilot 1275// TODO: move this application-specific code to kpilot
1276 QString kp = incidence->nonKDECustomProperty("X-PILOTID"); 1276 QString kp = incidence->nonKDECustomProperty("X-PILOTID");
1277 if (!kp.isNull()) { 1277 if (!kp.isNull()) {
1278 incidence->setPilotId(kp.toInt()); 1278 incidence->setPilotId(kp.toInt());
1279 } 1279 }
1280 kp = incidence->nonKDECustomProperty("X-PILOTSTAT"); 1280 kp = incidence->nonKDECustomProperty("X-PILOTSTAT");
1281 if (!kp.isNull()) { 1281 if (!kp.isNull()) {
1282 incidence->setSyncStatus(kp.toInt()); 1282 incidence->setSyncStatus(kp.toInt());
1283 } 1283 }
1284 1284
1285 1285
1286 kp = incidence->nonKDECustomProperty("X-KOPIEXTID"); 1286 kp = incidence->nonKDECustomProperty("X-KOPIEXTID");
1287 if (!kp.isNull()) { 1287 if (!kp.isNull()) {
1288 incidence->setIDStr(kp); 1288 incidence->setIDStr(kp);
1289 } 1289 }
1290 1290
1291 // Cancel backwards compatibility mode for subsequent changes by the application 1291 // Cancel backwards compatibility mode for subsequent changes by the application
1292 incidence->recurrence()->setCompatVersion(); 1292 incidence->recurrence()->setCompatVersion();
1293 1293
1294 // add categories 1294 // add categories
1295 incidence->setCategories(categories); 1295 incidence->setCategories(categories);
1296 1296
1297 // iterate through all alarms 1297 // iterate through all alarms
1298 for (icalcomponent *alarm = icalcomponent_get_first_component(parent,ICAL_VALARM_COMPONENT); 1298 for (icalcomponent *alarm = icalcomponent_get_first_component(parent,ICAL_VALARM_COMPONENT);
1299 alarm; 1299 alarm;
1300 alarm = icalcomponent_get_next_component(parent,ICAL_VALARM_COMPONENT)) { 1300 alarm = icalcomponent_get_next_component(parent,ICAL_VALARM_COMPONENT)) {
1301 readAlarm(alarm,incidence); 1301 readAlarm(alarm,incidence);
1302 } 1302 }
1303} 1303}
1304 1304
1305void ICalFormatImpl::readIncidenceBase(icalcomponent *parent,IncidenceBase *incidenceBase) 1305void ICalFormatImpl::readIncidenceBase(icalcomponent *parent,IncidenceBase *incidenceBase)
1306{ 1306{
1307 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_ANY_PROPERTY); 1307 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_ANY_PROPERTY);
1308 1308
1309 while (p) { 1309 while (p) {
1310 icalproperty_kind kind = icalproperty_isa(p); 1310 icalproperty_kind kind = icalproperty_isa(p);
1311 switch (kind) { 1311 switch (kind) {
1312 1312
1313 case ICAL_UID_PROPERTY: // unique id 1313 case ICAL_UID_PROPERTY: // unique id
1314 incidenceBase->setUid(QString::fromUtf8(icalproperty_get_uid(p))); 1314 incidenceBase->setUid(QString::fromUtf8(icalproperty_get_uid(p)));
1315 break; 1315 break;
1316 1316
1317 case ICAL_ORGANIZER_PROPERTY: // organizer 1317 case ICAL_ORGANIZER_PROPERTY: // organizer
1318 incidenceBase->setOrganizer(QString::fromUtf8(icalproperty_get_organizer(p))); 1318 incidenceBase->setOrganizer(QString::fromUtf8(icalproperty_get_organizer(p)));
1319 break; 1319 break;
1320 1320
1321 case ICAL_ATTENDEE_PROPERTY: // attendee 1321 case ICAL_ATTENDEE_PROPERTY: // attendee
1322 incidenceBase->addAttendee(readAttendee(p)); 1322 incidenceBase->addAttendee(readAttendee(p));
1323 break; 1323 break;
1324 1324
1325 default: 1325 default:
1326 break; 1326 break;
1327 } 1327 }
1328 1328
1329 p = icalcomponent_get_next_property(parent,ICAL_ANY_PROPERTY); 1329 p = icalcomponent_get_next_property(parent,ICAL_ANY_PROPERTY);
1330 } 1330 }
1331 1331
1332 // custom properties 1332 // custom properties
1333 readCustomProperties(parent, incidenceBase); 1333 readCustomProperties(parent, incidenceBase);
1334} 1334}
1335 1335
1336void ICalFormatImpl::readCustomProperties(icalcomponent *parent,CustomProperties *properties) 1336void ICalFormatImpl::readCustomProperties(icalcomponent *parent,CustomProperties *properties)
1337{ 1337{
1338 QMap<QCString, QString> customProperties; 1338 QMap<QCString, QString> customProperties;
1339 1339
1340 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_X_PROPERTY); 1340 icalproperty *p = icalcomponent_get_first_property(parent,ICAL_X_PROPERTY);
1341 1341
1342 while (p) { 1342 while (p) {
1343 QString value = QString::fromUtf8(icalproperty_get_x(p)); 1343 QString value = QString::fromUtf8(icalproperty_get_x(p));
1344 customProperties[icalproperty_get_x_name(p)] = value; 1344 customProperties[icalproperty_get_x_name(p)] = value;
1345 //qDebug("ICalFormatImpl::readCustomProperties %s %s",value.latin1(), icalproperty_get_x_name(p) ); 1345 //qDebug("ICalFormatImpl::readCustomProperties %s %s",value.latin1(), icalproperty_get_x_name(p) );
1346 1346
1347 p = icalcomponent_get_next_property(parent,ICAL_X_PROPERTY); 1347 p = icalcomponent_get_next_property(parent,ICAL_X_PROPERTY);
1348 } 1348 }
1349 1349
1350 properties->setCustomProperties(customProperties); 1350 properties->setCustomProperties(customProperties);
1351} 1351}
1352 1352
1353void ICalFormatImpl::readRecurrenceRule(struct icalrecurrencetype rrule,Incidence *incidence) 1353void ICalFormatImpl::readRecurrenceRule(struct icalrecurrencetype rrule,Incidence *incidence)
1354{ 1354{
1355// kdDebug(5800) << "Read recurrence for " << incidence->summary() << endl; 1355// kdDebug(5800) << "Read recurrence for " << incidence->summary() << endl;
1356 1356
1357 Recurrence *recur = incidence->recurrence(); 1357 Recurrence *recur = incidence->recurrence();
1358 recur->setCompatVersion(mCalendarVersion); 1358 recur->setCompatVersion(mCalendarVersion);
1359 recur->unsetRecurs(); 1359 recur->unsetRecurs();
1360 1360
1361 struct icalrecurrencetype r = rrule; 1361 struct icalrecurrencetype r = rrule;
1362 1362
1363 dumpIcalRecurrence(r); 1363 dumpIcalRecurrence(r);
1364 readRecurrence( r, recur, incidence); 1364 readRecurrence( r, recur, incidence);
1365} 1365}
1366 1366
1367void ICalFormatImpl::readRecurrence( const struct icalrecurrencetype &r, Recurrence* recur, Incidence *incidence) 1367void ICalFormatImpl::readRecurrence( const struct icalrecurrencetype &r, Recurrence* recur, Incidence *incidence)
1368{ 1368{
1369 int wkst; 1369 int wkst;
1370 int index = 0; 1370 int index = 0;
1371 short day = 0; 1371 short day = 0;
1372 QBitArray qba(7); 1372 QBitArray qba(7);
1373 int frequ = r.freq; 1373 int frequ = r.freq;
1374 int interv = r.interval; 1374 int interv = r.interval;
1375 // preprocessing for odd recurrence definitions 1375 // preprocessing for odd recurrence definitions
1376 1376
1377 if ( r.freq == ICAL_MONTHLY_RECURRENCE ) { 1377 if ( r.freq == ICAL_MONTHLY_RECURRENCE ) {
1378 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1378 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1379 interv = 12; 1379 interv = 12;
1380 } 1380 }
1381 } 1381 }
1382 if ( r.freq == ICAL_YEARLY_RECURRENCE ) { 1382 if ( r.freq == ICAL_YEARLY_RECURRENCE ) {
1383 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX && r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { 1383 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX && r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) {
1384 frequ = ICAL_MONTHLY_RECURRENCE; 1384 frequ = ICAL_MONTHLY_RECURRENCE;
1385 interv = 12* r.interval; 1385 interv = 12* r.interval;
1386 } 1386 }
1387 } 1387 }
1388 1388
1389 switch (frequ) { 1389 switch (frequ) {
1390 case ICAL_MINUTELY_RECURRENCE: 1390 case ICAL_MINUTELY_RECURRENCE:
1391 if (!icaltime_is_null_time(r.until)) { 1391 if (!icaltime_is_null_time(r.until)) {
1392 recur->setMinutely(interv,readICalDateTime(r.until)); 1392 recur->setMinutely(interv,readICalDateTime(r.until));
1393 } else { 1393 } else {
1394 if (r.count == 0) 1394 if (r.count == 0)
1395 recur->setMinutely(interv,-1); 1395 recur->setMinutely(interv,-1);
1396 else 1396 else
1397 recur->setMinutely(interv,r.count); 1397 recur->setMinutely(interv,r.count);
1398 } 1398 }
1399 break; 1399 break;
1400 case ICAL_HOURLY_RECURRENCE: 1400 case ICAL_HOURLY_RECURRENCE:
1401 if (!icaltime_is_null_time(r.until)) { 1401 if (!icaltime_is_null_time(r.until)) {
1402 recur->setHourly(interv,readICalDateTime(r.until)); 1402 recur->setHourly(interv,readICalDateTime(r.until));
1403 } else { 1403 } else {
1404 if (r.count == 0) 1404 if (r.count == 0)
1405 recur->setHourly(interv,-1); 1405 recur->setHourly(interv,-1);
1406 else 1406 else
1407 recur->setHourly(interv,r.count); 1407 recur->setHourly(interv,r.count);
1408 } 1408 }
1409 break; 1409 break;
1410 case ICAL_DAILY_RECURRENCE: 1410 case ICAL_DAILY_RECURRENCE:
1411 if (!icaltime_is_null_time(r.until)) { 1411 if (!icaltime_is_null_time(r.until)) {
1412 recur->setDaily(interv,readICalDate(r.until)); 1412 recur->setDaily(interv,readICalDate(r.until));
1413 } else { 1413 } else {
1414 if (r.count == 0) 1414 if (r.count == 0)
1415 recur->setDaily(interv,-1); 1415 recur->setDaily(interv,-1);
1416 else 1416 else
1417 recur->setDaily(interv,r.count); 1417 recur->setDaily(interv,r.count);
1418 } 1418 }
1419 break; 1419 break;
1420 case ICAL_WEEKLY_RECURRENCE: 1420 case ICAL_WEEKLY_RECURRENCE:
1421 // kdDebug(5800) << "WEEKLY_RECURRENCE" << endl; 1421 // kdDebug(5800) << "WEEKLY_RECURRENCE" << endl;
1422 wkst = (r.week_start + 5)%7 + 1; 1422 wkst = (r.week_start + 5)%7 + 1;
1423 if (!icaltime_is_null_time(r.until)) { 1423 if (!icaltime_is_null_time(r.until)) {
1424 recur->setWeekly(interv,qba,readICalDate(r.until),wkst); 1424 recur->setWeekly(interv,qba,readICalDate(r.until),wkst);
1425 } else { 1425 } else {
1426 if (r.count == 0) 1426 if (r.count == 0)
1427 recur->setWeekly(interv,qba,-1,wkst); 1427 recur->setWeekly(interv,qba,-1,wkst);
1428 else 1428 else
1429 recur->setWeekly(interv,qba,r.count,wkst); 1429 recur->setWeekly(interv,qba,r.count,wkst);
1430 } 1430 }
1431 if ( r.by_day[0] == ICAL_RECURRENCE_ARRAY_MAX) { 1431 if ( r.by_day[0] == ICAL_RECURRENCE_ARRAY_MAX) {
1432 int wday = incidence->dtStart().date().dayOfWeek ()-1; 1432 int wday = incidence->dtStart().date().dayOfWeek ()-1;
1433 //qDebug("weekly error found "); 1433 //qDebug("weekly error found ");
1434 qba.setBit(wday); 1434 qba.setBit(wday);
1435 } else { 1435 } else {
1436 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1436 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1437 // kdDebug(5800) << " " << day << endl; 1437 // kdDebug(5800) << " " << day << endl;
1438 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0 1438 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0
1439 } 1439 }
1440 } 1440 }
1441 break; 1441 break;
1442 case ICAL_MONTHLY_RECURRENCE: 1442 case ICAL_MONTHLY_RECURRENCE:
1443 1443
1444 if (r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1444 if (r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1445 if (!icaltime_is_null_time(r.until)) { 1445 if (!icaltime_is_null_time(r.until)) {
1446 recur->setMonthly(Recurrence::rMonthlyPos,interv, 1446 recur->setMonthly(Recurrence::rMonthlyPos,interv,
1447 readICalDate(r.until)); 1447 readICalDate(r.until));
1448 } else { 1448 } else {
1449 if (r.count == 0) 1449 if (r.count == 0)
1450 recur->setMonthly(Recurrence::rMonthlyPos,interv,-1); 1450 recur->setMonthly(Recurrence::rMonthlyPos,interv,-1);
1451 else 1451 else
1452 recur->setMonthly(Recurrence::rMonthlyPos,interv,r.count); 1452 recur->setMonthly(Recurrence::rMonthlyPos,interv,r.count);
1453 } 1453 }
1454 bool useSetPos = false; 1454 bool useSetPos = false;
1455 short pos = 0; 1455 short pos = 0;
1456 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1456 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1457 // kdDebug(5800) << "----a " << index << ": " << day << endl; 1457 // kdDebug(5800) << "----a " << index << ": " << day << endl;
1458 pos = icalrecurrencetype_day_position(day); 1458 pos = icalrecurrencetype_day_position(day);
1459 if (pos) { 1459 if (pos) {
1460 day = icalrecurrencetype_day_day_of_week(day); 1460 day = icalrecurrencetype_day_day_of_week(day);
1461 QBitArray ba(7); // don't wipe qba 1461 QBitArray ba(7); // don't wipe qba
1462 ba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0 1462 ba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0
1463 recur->addMonthlyPos(pos,ba); 1463 recur->addMonthlyPos(pos,ba);
1464 } else { 1464 } else {
1465 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0 1465 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0
1466 useSetPos = true; 1466 useSetPos = true;
1467 } 1467 }
1468 } 1468 }
1469 if (useSetPos) { 1469 if (useSetPos) {
1470 if (r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1470 if (r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1471 recur->addMonthlyPos(r.by_set_pos[0],qba); 1471 recur->addMonthlyPos(r.by_set_pos[0],qba);
1472 } 1472 }
1473 } 1473 }
1474 } else if (r.by_month_day[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1474 } else if (r.by_month_day[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1475 if (!icaltime_is_null_time(r.until)) { 1475 if (!icaltime_is_null_time(r.until)) {
1476 recur->setMonthly(Recurrence::rMonthlyDay,interv, 1476 recur->setMonthly(Recurrence::rMonthlyDay,interv,
1477 readICalDate(r.until)); 1477 readICalDate(r.until));
1478 } else { 1478 } else {
1479 if (r.count == 0) 1479 if (r.count == 0)
1480 recur->setMonthly(Recurrence::rMonthlyDay,interv,-1); 1480 recur->setMonthly(Recurrence::rMonthlyDay,interv,-1);
1481 else 1481 else
1482 recur->setMonthly(Recurrence::rMonthlyDay,interv,r.count); 1482 recur->setMonthly(Recurrence::rMonthlyDay,interv,r.count);
1483 } 1483 }
1484 while((day = r.by_month_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1484 while((day = r.by_month_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1485 // kdDebug(5800) << "----b " << day << endl; 1485 // kdDebug(5800) << "----b " << day << endl;
1486 recur->addMonthlyDay(day); 1486 recur->addMonthlyDay(day);
1487 } 1487 }
1488 } 1488 }
1489 break; 1489 break;
1490 case ICAL_YEARLY_RECURRENCE: 1490 case ICAL_YEARLY_RECURRENCE:
1491 if (r.by_year_day[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1491 if (r.by_year_day[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1492 //qDebug(" YEARLY DAY OF YEAR"); 1492 //qDebug(" YEARLY DAY OF YEAR");
1493 if (!icaltime_is_null_time(r.until)) { 1493 if (!icaltime_is_null_time(r.until)) {
1494 recur->setYearly(Recurrence::rYearlyDay,interv, 1494 recur->setYearly(Recurrence::rYearlyDay,interv,
1495 readICalDate(r.until)); 1495 readICalDate(r.until));
1496 } else { 1496 } else {
1497 if (r.count == 0) 1497 if (r.count == 0)
1498 recur->setYearly(Recurrence::rYearlyDay,interv,-1); 1498 recur->setYearly(Recurrence::rYearlyDay,interv,-1);
1499 else 1499 else
1500 recur->setYearly(Recurrence::rYearlyDay,interv,r.count); 1500 recur->setYearly(Recurrence::rYearlyDay,interv,r.count);
1501 } 1501 }
1502 while((day = r.by_year_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1502 while((day = r.by_year_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1503 recur->addYearlyNum(day); 1503 recur->addYearlyNum(day);
1504 } 1504 }
1505 } else if ( true /*r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX*/) { 1505 } else if ( true /*r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX*/) {
1506 if (r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1506 if (r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1507 qDebug("YEARLY POS NOT SUPPORTED BY GUI"); 1507 qDebug("YEARLY POS NOT SUPPORTED BY GUI");
1508 if (!icaltime_is_null_time(r.until)) { 1508 if (!icaltime_is_null_time(r.until)) {
1509 recur->setYearly(Recurrence::rYearlyPos,interv, 1509 recur->setYearly(Recurrence::rYearlyPos,interv,
1510 readICalDate(r.until)); 1510 readICalDate(r.until));
1511 } else { 1511 } else {
1512 if (r.count == 0) 1512 if (r.count == 0)
1513 recur->setYearly(Recurrence::rYearlyPos,interv,-1); 1513 recur->setYearly(Recurrence::rYearlyPos,interv,-1);
1514 else 1514 else
1515 recur->setYearly(Recurrence::rYearlyPos,interv,r.count); 1515 recur->setYearly(Recurrence::rYearlyPos,interv,r.count);
1516 } 1516 }
1517 bool useSetPos = false; 1517 bool useSetPos = false;
1518 short pos = 0; 1518 short pos = 0;
1519 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1519 while((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1520 // kdDebug(5800) << "----a " << index << ": " << day << endl; 1520 // kdDebug(5800) << "----a " << index << ": " << day << endl;
1521 pos = icalrecurrencetype_day_position(day); 1521 pos = icalrecurrencetype_day_position(day);
1522 if (pos) { 1522 if (pos) {
1523 day = icalrecurrencetype_day_day_of_week(day); 1523 day = icalrecurrencetype_day_day_of_week(day);
1524 QBitArray ba(7); // don't wipe qba 1524 QBitArray ba(7); // don't wipe qba
1525 ba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0 1525 ba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0
1526 recur->addYearlyMonthPos(pos,ba); 1526 recur->addYearlyMonthPos(pos,ba);
1527 } else { 1527 } else {
1528 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0 1528 qba.setBit((day+5)%7); // convert from Sunday=1 to Monday=0
1529 useSetPos = true; 1529 useSetPos = true;
1530 } 1530 }
1531 } 1531 }
1532 if (useSetPos) { 1532 if (useSetPos) {
1533 if (r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX) { 1533 if (r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX) {
1534 recur->addYearlyMonthPos(r.by_set_pos[0],qba); 1534 recur->addYearlyMonthPos(r.by_set_pos[0],qba);
1535 } 1535 }
1536 } 1536 }
1537 } else { 1537 } else {
1538 //qDebug("YEARLY MONTH "); 1538 //qDebug("YEARLY MONTH ");
1539 if (!icaltime_is_null_time(r.until)) { 1539 if (!icaltime_is_null_time(r.until)) {
1540 recur->setYearly(Recurrence::rYearlyMonth,interv, 1540 recur->setYearly(Recurrence::rYearlyMonth,interv,
1541 readICalDate(r.until)); 1541 readICalDate(r.until));
1542 } else { 1542 } else {
1543 if (r.count == 0) 1543 if (r.count == 0)
1544 recur->setYearly(Recurrence::rYearlyMonth,interv,-1); 1544 recur->setYearly(Recurrence::rYearlyMonth,interv,-1);
1545 else 1545 else
1546 recur->setYearly(Recurrence::rYearlyMonth,interv,r.count); 1546 recur->setYearly(Recurrence::rYearlyMonth,interv,r.count);
1547 } 1547 }
1548 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX ) { 1548 if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX ) {
1549 index = 0; 1549 index = 0;
1550 while((day = r.by_month[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { 1550 while((day = r.by_month[index++]) != ICAL_RECURRENCE_ARRAY_MAX) {
1551 recur->addYearlyNum(day); 1551 recur->addYearlyNum(day);
1552 } 1552 }
1553 } else { 1553 } else {
1554 recur->addYearlyNum(incidence->dtStart().date().month()); 1554 recur->addYearlyNum(incidence->dtStart().date().month());
1555 } 1555 }
1556 } 1556 }
1557 1557
1558 } 1558 }
1559 break; 1559 break;
1560 default: 1560 default:
1561 ; 1561 ;
1562 break; 1562 break;
1563 } 1563 }
1564} 1564}
1565 1565
1566void ICalFormatImpl::readAlarm(icalcomponent *alarm,Incidence *incidence) 1566void ICalFormatImpl::readAlarm(icalcomponent *alarm,Incidence *incidence)
1567{ 1567{
1568 //kdDebug(5800) << "Read alarm for " << incidence->summary() << endl; 1568 //kdDebug(5800) << "Read alarm for " << incidence->summary() << endl;
1569 1569
1570 Alarm* ialarm = incidence->newAlarm(); 1570 Alarm* ialarm = incidence->newAlarm();
1571 ialarm->setRepeatCount(0); 1571 ialarm->setRepeatCount(0);
1572 ialarm->setEnabled(true); 1572 ialarm->setEnabled(true);
1573 1573
1574 // Determine the alarm's action type 1574 // Determine the alarm's action type
1575 icalproperty *p = icalcomponent_get_first_property(alarm,ICAL_ACTION_PROPERTY); 1575 icalproperty *p = icalcomponent_get_first_property(alarm,ICAL_ACTION_PROPERTY);
1576 if ( !p ) { 1576 if ( !p ) {
1577 return; 1577 return;
1578 } 1578 }
1579 1579
1580 icalproperty_action action = icalproperty_get_action(p); 1580 icalproperty_action action = icalproperty_get_action(p);
1581 Alarm::Type type = Alarm::Display; 1581 Alarm::Type type = Alarm::Display;
1582 switch ( action ) { 1582 switch ( action ) {
1583 case ICAL_ACTION_DISPLAY: type = Alarm::Display; break; 1583 case ICAL_ACTION_DISPLAY: type = Alarm::Display; break;
1584 case ICAL_ACTION_AUDIO: type = Alarm::Audio; break; 1584 case ICAL_ACTION_AUDIO: type = Alarm::Audio; break;
1585 case ICAL_ACTION_PROCEDURE: type = Alarm::Procedure; break; 1585 case ICAL_ACTION_PROCEDURE: type = Alarm::Procedure; break;
1586 case ICAL_ACTION_EMAIL: type = Alarm::Email; break; 1586 case ICAL_ACTION_EMAIL: type = Alarm::Email; break;
1587 default: 1587 default:
1588 ; 1588 ;
1589 return; 1589 return;
1590 } 1590 }
1591 ialarm->setType(type); 1591 ialarm->setType(type);
1592 1592
1593 p = icalcomponent_get_first_property(alarm,ICAL_ANY_PROPERTY); 1593 p = icalcomponent_get_first_property(alarm,ICAL_ANY_PROPERTY);
1594 while (p) { 1594 while (p) {
1595 icalproperty_kind kind = icalproperty_isa(p); 1595 icalproperty_kind kind = icalproperty_isa(p);
1596 1596
1597 switch (kind) { 1597 switch (kind) {
1598 case ICAL_TRIGGER_PROPERTY: { 1598 case ICAL_TRIGGER_PROPERTY: {
1599 icaltriggertype trigger = icalproperty_get_trigger(p); 1599 icaltriggertype trigger = icalproperty_get_trigger(p);
1600 if (icaltime_is_null_time(trigger.time)) { 1600 if (icaltime_is_null_time(trigger.time)) {
1601 if (icaldurationtype_is_null_duration(trigger.duration)) { 1601 if (icaldurationtype_is_null_duration(trigger.duration)) {
1602 kdDebug(5800) << "ICalFormatImpl::readAlarm(): Trigger has no time and no duration." << endl; 1602 kdDebug(5800) << "ICalFormatImpl::readAlarm(): Trigger has no time and no duration." << endl;
1603 } else { 1603 } else {
1604 Duration duration = icaldurationtype_as_int( trigger.duration ); 1604 Duration duration = icaldurationtype_as_int( trigger.duration );
1605 icalparameter *param = icalproperty_get_first_parameter(p,ICAL_RELATED_PARAMETER); 1605 icalparameter *param = icalproperty_get_first_parameter(p,ICAL_RELATED_PARAMETER);
1606 if (param && icalparameter_get_related(param) == ICAL_RELATED_END) 1606 if (param && icalparameter_get_related(param) == ICAL_RELATED_END)
1607 ialarm->setEndOffset(duration); 1607 ialarm->setEndOffset(duration);
1608 else 1608 else
1609 ialarm->setStartOffset(duration); 1609 ialarm->setStartOffset(duration);
1610 } 1610 }
1611 } else { 1611 } else {
1612 ialarm->setTime(readICalDateTime(trigger.time)); 1612 ialarm->setTime(readICalDateTime(trigger.time));
1613 } 1613 }
1614 break; 1614 break;
1615 } 1615 }
1616 case ICAL_DURATION_PROPERTY: { 1616 case ICAL_DURATION_PROPERTY: {
1617 icaldurationtype duration = icalproperty_get_duration(p); 1617 icaldurationtype duration = icalproperty_get_duration(p);
1618 ialarm->setSnoozeTime(icaldurationtype_as_int(duration)/60); 1618 ialarm->setSnoozeTime(icaldurationtype_as_int(duration)/60);
1619 break; 1619 break;
1620 } 1620 }
1621 case ICAL_REPEAT_PROPERTY: 1621 case ICAL_REPEAT_PROPERTY:
1622 ialarm->setRepeatCount(icalproperty_get_repeat(p)); 1622 ialarm->setRepeatCount(icalproperty_get_repeat(p));
1623 break; 1623 break;
1624 1624
1625 // Only in DISPLAY and EMAIL and PROCEDURE alarms 1625 // Only in DISPLAY and EMAIL and PROCEDURE alarms
1626 case ICAL_DESCRIPTION_PROPERTY: { 1626 case ICAL_DESCRIPTION_PROPERTY: {
1627 QString description = QString::fromUtf8(icalproperty_get_description(p)); 1627 QString description = QString::fromUtf8(icalproperty_get_description(p));
1628 switch ( action ) { 1628 switch ( action ) {
1629 case ICAL_ACTION_DISPLAY: 1629 case ICAL_ACTION_DISPLAY:
1630 ialarm->setText( description ); 1630 ialarm->setText( description );
1631 break; 1631 break;
1632 case ICAL_ACTION_PROCEDURE: 1632 case ICAL_ACTION_PROCEDURE:
1633 ialarm->setProgramArguments( description ); 1633 ialarm->setProgramArguments( description );
1634 break; 1634 break;
1635 case ICAL_ACTION_EMAIL: 1635 case ICAL_ACTION_EMAIL:
1636 ialarm->setMailText( description ); 1636 ialarm->setMailText( description );
1637 break; 1637 break;
1638 default: 1638 default:
1639 break; 1639 break;
1640 } 1640 }
1641 break; 1641 break;
1642 } 1642 }
1643 // Only in EMAIL alarm 1643 // Only in EMAIL alarm
1644 case ICAL_SUMMARY_PROPERTY: 1644 case ICAL_SUMMARY_PROPERTY:
1645 ialarm->setMailSubject(QString::fromUtf8(icalproperty_get_summary(p))); 1645 ialarm->setMailSubject(QString::fromUtf8(icalproperty_get_summary(p)));
1646 break; 1646 break;
1647 1647
1648 // Only in EMAIL alarm 1648 // Only in EMAIL alarm
1649 case ICAL_ATTENDEE_PROPERTY: { 1649 case ICAL_ATTENDEE_PROPERTY: {
1650 QString email = QString::fromUtf8(icalproperty_get_attendee(p)); 1650 QString email = QString::fromUtf8(icalproperty_get_attendee(p));
1651 QString name; 1651 QString name;
1652 icalparameter *param = icalproperty_get_first_parameter(p,ICAL_CN_PARAMETER); 1652 icalparameter *param = icalproperty_get_first_parameter(p,ICAL_CN_PARAMETER);
1653 if (param) { 1653 if (param) {
1654 name = QString::fromUtf8(icalparameter_get_cn(param)); 1654 name = QString::fromUtf8(icalparameter_get_cn(param));
1655 } 1655 }
1656 ialarm->addMailAddress(Person(name, email)); 1656 ialarm->addMailAddress(Person(name, email));
1657 break; 1657 break;
1658 } 1658 }
1659 // Only in AUDIO and EMAIL and PROCEDURE alarms 1659 // Only in AUDIO and EMAIL and PROCEDURE alarms
1660 case ICAL_ATTACH_PROPERTY: { 1660 case ICAL_ATTACH_PROPERTY: {
1661 icalattach *attach = icalproperty_get_attach(p); 1661 icalattach *attach = icalproperty_get_attach(p);
1662 QString url = QFile::decodeName(icalattach_get_url(attach)); 1662 QString url = QFile::decodeName(icalattach_get_url(attach));
1663 switch ( action ) { 1663 switch ( action ) {
1664 case ICAL_ACTION_AUDIO: 1664 case ICAL_ACTION_AUDIO:
1665 ialarm->setAudioFile( url ); 1665 ialarm->setAudioFile( url );
1666 break; 1666 break;
1667 case ICAL_ACTION_PROCEDURE: 1667 case ICAL_ACTION_PROCEDURE:
1668 ialarm->setProgramFile( url ); 1668 ialarm->setProgramFile( url );
1669 break; 1669 break;
1670 case ICAL_ACTION_EMAIL: 1670 case ICAL_ACTION_EMAIL:
1671 ialarm->addMailAttachment( url ); 1671 ialarm->addMailAttachment( url );
1672 break; 1672 break;
1673 default: 1673 default:
1674 break; 1674 break;
1675 } 1675 }
1676 break; 1676 break;
1677 } 1677 }
1678 default: 1678 default:
1679 break; 1679 break;
1680 } 1680 }
1681 1681
1682 p = icalcomponent_get_next_property(alarm,ICAL_ANY_PROPERTY); 1682 p = icalcomponent_get_next_property(alarm,ICAL_ANY_PROPERTY);
1683 } 1683 }
1684 1684
1685 // custom properties 1685 // custom properties
1686 readCustomProperties(alarm, ialarm); 1686 readCustomProperties(alarm, ialarm);
1687 1687
1688 // TODO: check for consistency of alarm properties 1688 // TODO: check for consistency of alarm properties
1689} 1689}
1690 1690
1691icaltimetype ICalFormatImpl::writeICalDate(const QDate &date) 1691icaltimetype ICalFormatImpl::writeICalDate(const QDate &date)
1692{ 1692{
1693 icaltimetype t; 1693 icaltimetype t;
1694 1694
1695 t.year = date.year(); 1695 t.year = date.year();
1696 t.month = date.month(); 1696 t.month = date.month();
1697 t.day = date.day(); 1697 t.day = date.day();
1698 1698
1699 t.hour = 0; 1699 t.hour = 0;
1700 t.minute = 0; 1700 t.minute = 0;
1701 t.second = 0; 1701 t.second = 0;
1702 1702
1703 t.is_date = 1; 1703 t.is_date = 1;
1704 1704
1705 t.is_utc = 0; 1705 t.is_utc = 0;
1706 1706
1707 t.zone = 0; 1707 t.zone = 0;
1708 1708
1709 return t; 1709 return t;
1710} 1710}
1711 1711
1712icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &dt ) 1712icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &dt )
1713{ 1713{
1714 icaltimetype t; 1714 icaltimetype t;
1715 t.is_date = 0; 1715 t.is_date = 0;
1716 t.zone = 0; 1716 t.zone = 0;
1717 QDateTime datetime; 1717 QDateTime datetime;
1718 if ( mParent->utc() ) { 1718 if ( mParent->utc() ) {
1719 int offset = KGlobal::locale()->localTimeOffset( dt ); 1719 int offset = KGlobal::locale()->localTimeOffset( dt );
1720 datetime = dt.addSecs ( -offset*60); 1720 datetime = dt.addSecs ( -offset*60);
1721 t.is_utc = 1; 1721 t.is_utc = 1;
1722 } 1722 }
1723 else { 1723 else {
1724 datetime = dt; 1724 datetime = dt;
1725 t.is_utc = 0; 1725 t.is_utc = 0;
1726 1726
1727 } 1727 }
1728 t.year = datetime.date().year(); 1728 t.year = datetime.date().year();
1729 t.month = datetime.date().month(); 1729 t.month = datetime.date().month();
1730 t.day = datetime.date().day(); 1730 t.day = datetime.date().day();
1731 1731
1732 t.hour = datetime.time().hour(); 1732 t.hour = datetime.time().hour();
1733 t.minute = datetime.time().minute(); 1733 t.minute = datetime.time().minute();
1734 t.second = datetime.time().second(); 1734 t.second = datetime.time().second();
1735 1735
1736 //qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); 1736 //qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() );
1737 1737
1738// if ( mParent->utc() ) { 1738// if ( mParent->utc() ) {
1739// datetime = KGlobal::locale()->localTime( dt ); 1739// datetime = KGlobal::locale()->localTime( dt );
1740// qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); 1740// qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() );
1741// if (mParent->timeZoneId().isEmpty()) 1741// if (mParent->timeZoneId().isEmpty())
1742// t = icaltime_as_utc(t, 0); 1742// t = icaltime_as_utc(t, 0);
1743// else 1743// else
1744// t = icaltime_as_utc(t,mParent->timeZoneId().local8Bit()); 1744// t = icaltime_as_utc(t,mParent->timeZoneId().local8Bit());
1745// } 1745// }
1746 1746
1747 return t; 1747 return t;
1748} 1748}
1749 1749
1750QDateTime ICalFormatImpl::readICalDateTime(icaltimetype t) 1750QDateTime ICalFormatImpl::readICalDateTime(icaltimetype t)
1751{ 1751{
1752 QDateTime dt (QDate(t.year,t.month,t.day), 1752 QDateTime dt (QDate(t.year,t.month,t.day),
1753 QTime(t.hour,t.minute,t.second) ); 1753 QTime(t.hour,t.minute,t.second) );
1754 1754
1755 if (t.is_utc) { 1755 if (t.is_utc) {
1756 int offset = KGlobal::locale()->localTimeOffset( dt ); 1756 int offset = KGlobal::locale()->localTimeOffset( dt );
1757 dt = dt.addSecs ( offset*60); 1757 dt = dt.addSecs ( offset*60);
1758 } 1758 }
1759 1759
1760 return dt; 1760 return dt;
1761} 1761}
1762 1762
1763QDate ICalFormatImpl::readICalDate(icaltimetype t) 1763QDate ICalFormatImpl::readICalDate(icaltimetype t)
1764{ 1764{
1765 return QDate(t.year,t.month,t.day); 1765 return QDate(t.year,t.month,t.day);
1766} 1766}
1767 1767
1768icaldurationtype ICalFormatImpl::writeICalDuration(int seconds) 1768icaldurationtype ICalFormatImpl::writeICalDuration(int seconds)
1769{ 1769{
1770 icaldurationtype d; 1770 icaldurationtype d;
1771 1771
1772 d.weeks = seconds % gSecondsPerWeek; 1772 d.weeks = seconds % gSecondsPerWeek;
1773 seconds -= d.weeks * gSecondsPerWeek; 1773 seconds -= d.weeks * gSecondsPerWeek;
1774 d.days = seconds % gSecondsPerDay; 1774 d.days = seconds % gSecondsPerDay;
1775 seconds -= d.days * gSecondsPerDay; 1775 seconds -= d.days * gSecondsPerDay;
1776 d.hours = seconds % gSecondsPerHour; 1776 d.hours = seconds % gSecondsPerHour;
1777 seconds -= d.hours * gSecondsPerHour; 1777 seconds -= d.hours * gSecondsPerHour;
1778 d.minutes = seconds % gSecondsPerMinute; 1778 d.minutes = seconds % gSecondsPerMinute;
1779 seconds -= d.minutes * gSecondsPerMinute; 1779 seconds -= d.minutes * gSecondsPerMinute;
1780 d.seconds = seconds; 1780 d.seconds = seconds;
1781 d.is_neg = 0; 1781 d.is_neg = 0;
1782 1782
1783 return d; 1783 return d;
1784} 1784}
1785 1785
1786int ICalFormatImpl::readICalDuration(icaldurationtype d) 1786int ICalFormatImpl::readICalDuration(icaldurationtype d)
1787{ 1787{
1788 int result = 0; 1788 int result = 0;
1789 1789
1790 result += d.weeks * gSecondsPerWeek; 1790 result += d.weeks * gSecondsPerWeek;
1791 result += d.days * gSecondsPerDay; 1791 result += d.days * gSecondsPerDay;
1792 result += d.hours * gSecondsPerHour; 1792 result += d.hours * gSecondsPerHour;
1793 result += d.minutes * gSecondsPerMinute; 1793 result += d.minutes * gSecondsPerMinute;
1794 result += d.seconds; 1794 result += d.seconds;
1795 1795
1796 if (d.is_neg) result *= -1; 1796 if (d.is_neg) result *= -1;
1797 1797
1798 return result; 1798 return result;
1799} 1799}
1800 1800
1801icalcomponent *ICalFormatImpl::createCalendarComponent(Calendar *cal) 1801icalcomponent *ICalFormatImpl::createCalendarComponent(Calendar *cal)
1802{ 1802{
1803 icalcomponent *calendar; 1803 icalcomponent *calendar;
1804 1804
1805 // Root component 1805 // Root component
1806 calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); 1806 calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
1807 1807
1808 icalproperty *p; 1808 icalproperty *p;
1809 1809
1810 // Product Identifier 1810 // Product Identifier
1811 p = icalproperty_new_prodid(CalFormat::productId().utf8()); 1811 p = icalproperty_new_prodid(CalFormat::productId().utf8());
1812 icalcomponent_add_property(calendar,p); 1812 icalcomponent_add_property(calendar,p);
1813 1813
1814 // TODO: Add time zone 1814 // TODO: Add time zone
1815 1815
1816 // iCalendar version (2.0) 1816 // iCalendar version (2.0)
1817 p = icalproperty_new_version(const_cast<char *>(_ICAL_VERSION)); 1817 p = icalproperty_new_version(const_cast<char *>(_ICAL_VERSION));
1818 icalcomponent_add_property(calendar,p); 1818 icalcomponent_add_property(calendar,p);
1819 1819
1820 // Custom properties 1820 // Custom properties
1821 if( cal != 0 ) 1821 if( cal != 0 )
1822 writeCustomProperties(calendar, cal); 1822 writeCustomProperties(calendar, cal);
1823 1823
1824 return calendar; 1824 return calendar;
1825} 1825}
1826 1826
1827 1827
1828 1828
1829// take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. 1829// take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc.
1830// and break it down from its tree-like format into the dictionary format 1830// and break it down from its tree-like format into the dictionary format
1831// that is used internally in the ICalFormatImpl. 1831// that is used internally in the ICalFormatImpl.
1832bool ICalFormatImpl::populate( Calendar *cal, icalcomponent *calendar) 1832bool ICalFormatImpl::populate( Calendar *cal, icalcomponent *calendar)
1833{ 1833{
1834 // this function will populate the caldict dictionary and other event 1834 // this function will populate the caldict dictionary and other event
1835 // lists. It turns vevents into Events and then inserts them. 1835 // lists. It turns vevents into Events and then inserts them.
1836 1836
1837 if (!calendar) return false; 1837 if (!calendar) return false;
1838 1838
1839// TODO: check for METHOD 1839// TODO: check for METHOD
1840#if 0 1840#if 0
1841 if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != 0) { 1841 if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != 0) {
1842 char *methodType = 0; 1842 char *methodType = 0;
1843 methodType = fakeCString(vObjectUStringZValue(curVO)); 1843 methodType = fakeCString(vObjectUStringZValue(curVO));
1844 if (mEnableDialogs) 1844 if (mEnableDialogs)
1845 KMessageBox::information(mTopWidget, 1845 KMessageBox::information(mTopWidget,
1846 i18n("This calendar is an iTIP transaction of type \"%1\".") 1846 i18n("This calendar is an iTIP transaction of type \"%1\".")
1847 .arg(methodType), 1847 .arg(methodType),
1848 i18n("%1: iTIP Transaction").arg(CalFormat::application())); 1848 i18n("%1: iTIP Transaction").arg(CalFormat::application()));
1849 delete methodType; 1849 delete methodType;
1850 } 1850 }
1851#endif 1851#endif
1852 1852
1853 icalproperty *p; 1853 icalproperty *p;
1854 1854
1855 p = icalcomponent_get_first_property(calendar,ICAL_PRODID_PROPERTY); 1855 p = icalcomponent_get_first_property(calendar,ICAL_PRODID_PROPERTY);
1856 if (!p) { 1856 if (!p) {
1857// TODO: does no PRODID really matter? 1857// TODO: does no PRODID really matter?
1858// mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown)); 1858// mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown));
1859// return false; 1859// return false;
1860 mLoadedProductId = ""; 1860 mLoadedProductId = "";
1861 mCalendarVersion = 0; 1861 mCalendarVersion = 0;
1862 } else { 1862 } else {
1863 mLoadedProductId = QString::fromUtf8(icalproperty_get_prodid(p)); 1863 mLoadedProductId = QString::fromUtf8(icalproperty_get_prodid(p));
1864 mCalendarVersion = CalFormat::calendarVersion(mLoadedProductId); 1864 mCalendarVersion = CalFormat::calendarVersion(mLoadedProductId);
1865 1865
1866 delete mCompat; 1866 delete mCompat;
1867 mCompat = CompatFactory::createCompat( mLoadedProductId ); 1867 mCompat = CompatFactory::createCompat( mLoadedProductId );
1868 } 1868 }
1869 1869
1870// TODO: check for unknown PRODID 1870// TODO: check for unknown PRODID
1871#if 0 1871#if 0
1872 if (!mCalendarVersion 1872 if (!mCalendarVersion
1873 && CalFormat::productId() != mLoadedProductId) { 1873 && CalFormat::productId() != mLoadedProductId) {
1874 // warn the user that we might have trouble reading non-known calendar. 1874 // warn the user that we might have trouble reading non-known calendar.
1875 if (mEnableDialogs) 1875 if (mEnableDialogs)
1876 KMessageBox::information(mTopWidget, 1876 KMessageBox::information(mTopWidget,
1877 i18n("This vCalendar file was not created by KOrganizer " 1877 i18n("This vCalendar file was not created by KOrganizer "
1878 "or any other product we support. Loading anyway..."), 1878 "or any other product we support. Loading anyway..."),
1879 i18n("%1: Unknown vCalendar Vendor").arg(CalFormat::application())); 1879 i18n("%1: Unknown vCalendar Vendor").arg(CalFormat::application()));
1880 } 1880 }
1881#endif 1881#endif
1882 1882
1883 p = icalcomponent_get_first_property(calendar,ICAL_VERSION_PROPERTY); 1883 p = icalcomponent_get_first_property(calendar,ICAL_VERSION_PROPERTY);
1884 if (!p) { 1884 if (!p) {
1885 mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown)); 1885 mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown));
1886 return false; 1886 return false;
1887 } else { 1887 } else {
1888 const char *version = icalproperty_get_version(p); 1888 const char *version = icalproperty_get_version(p);
1889 1889
1890 if (strcmp(version,"1.0") == 0) { 1890 if (strcmp(version,"1.0") == 0) {
1891 mParent->setException(new ErrorFormat(ErrorFormat::CalVersion1, 1891 mParent->setException(new ErrorFormat(ErrorFormat::CalVersion1,
1892 i18n("Expected iCalendar format"))); 1892 i18n("Expected iCalendar format")));
1893 return false; 1893 return false;
1894 } else if (strcmp(version,"2.0") != 0) { 1894 } else if (strcmp(version,"2.0") != 0) {
1895 mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown)); 1895 mParent->setException(new ErrorFormat(ErrorFormat::CalVersionUnknown));
1896 return false; 1896 return false;
1897 } 1897 }
1898 } 1898 }
1899 1899
1900 1900
1901// TODO: check for calendar format version 1901// TODO: check for calendar format version
1902#if 0 1902#if 0
1903 // warn the user we might have trouble reading this unknown version. 1903 // warn the user we might have trouble reading this unknown version.
1904 if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != 0) { 1904 if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != 0) {
1905 char *s = fakeCString(vObjectUStringZValue(curVO)); 1905 char *s = fakeCString(vObjectUStringZValue(curVO));
1906 if (strcmp(_VCAL_VERSION, s) != 0) 1906 if (strcmp(_VCAL_VERSION, s) != 0)
1907 if (mEnableDialogs) 1907 if (mEnableDialogs)
1908 KMessageBox::sorry(mTopWidget, 1908 KMessageBox::sorry(mTopWidget,
1909 i18n("This vCalendar file has version %1.\n" 1909 i18n("This vCalendar file has version %1.\n"
1910 "We only support %2.") 1910 "We only support %2.")
1911 .arg(s).arg(_VCAL_VERSION), 1911 .arg(s).arg(_VCAL_VERSION),
1912 i18n("%1: Unknown vCalendar Version").arg(CalFormat::application())); 1912 i18n("%1: Unknown vCalendar Version").arg(CalFormat::application()));
1913 deleteStr(s); 1913 deleteStr(s);
1914 } 1914 }
1915#endif 1915#endif
1916 1916
1917 // custom properties 1917 // custom properties
1918 readCustomProperties(calendar, cal); 1918 readCustomProperties(calendar, cal);
1919 1919
1920// TODO: set time zone 1920// TODO: set time zone
1921#if 0 1921#if 0
1922 // set the time zone 1922 // set the time zone
1923 if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != 0) { 1923 if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != 0) {
1924 char *s = fakeCString(vObjectUStringZValue(curVO)); 1924 char *s = fakeCString(vObjectUStringZValue(curVO));
1925 cal->setTimeZone(s); 1925 cal->setTimeZone(s);
1926 deleteStr(s); 1926 deleteStr(s);
1927 } 1927 }
1928#endif 1928#endif
1929 1929
1930 // Store all events with a relatedTo property in a list for post-processing 1930 // Store all events with a relatedTo property in a list for post-processing
1931 mEventsRelate.clear(); 1931 mEventsRelate.clear();
1932 mTodosRelate.clear(); 1932 mTodosRelate.clear();
1933 // TODO: make sure that only actually added ecvens go to this lists. 1933 // TODO: make sure that only actually added ecvens go to this lists.
1934 1934
1935 icalcomponent *c; 1935 icalcomponent *c;
1936 1936
1937 // Iterate through all todos 1937 // Iterate through all todos
1938 c = icalcomponent_get_first_component(calendar,ICAL_VTODO_COMPONENT); 1938 c = icalcomponent_get_first_component(calendar,ICAL_VTODO_COMPONENT);
1939 while (c) { 1939 while (c) {
1940// kdDebug(5800) << "----Todo found" << endl; 1940// kdDebug(5800) << "----Todo found" << endl;
1941 Todo *todo = readTodo(c); 1941 Todo *todo = readTodo(c);
1942 if (!cal->todo(todo->uid())) cal->addTodo(todo); 1942 if (!cal->todo(todo->uid())) cal->addTodo(todo);
1943 c = icalcomponent_get_next_component(calendar,ICAL_VTODO_COMPONENT); 1943 c = icalcomponent_get_next_component(calendar,ICAL_VTODO_COMPONENT);
1944 } 1944 }
1945 1945
1946 // Iterate through all events 1946 // Iterate through all events
1947 c = icalcomponent_get_first_component(calendar,ICAL_VEVENT_COMPONENT); 1947 c = icalcomponent_get_first_component(calendar,ICAL_VEVENT_COMPONENT);
1948 while (c) { 1948 while (c) {
1949// kdDebug(5800) << "----Event found" << endl; 1949// kdDebug(5800) << "----Event found" << endl;
1950 Event *event = readEvent(c); 1950 Event *event = readEvent(c);
1951 if (!cal->event(event->uid())) cal->addEvent(event); 1951 if (!cal->event(event->uid())) cal->addEvent(event);
1952 c = icalcomponent_get_next_component(calendar,ICAL_VEVENT_COMPONENT); 1952 c = icalcomponent_get_next_component(calendar,ICAL_VEVENT_COMPONENT);
1953 } 1953 }
1954 1954
1955 // Iterate through all journals 1955 // Iterate through all journals
1956 c = icalcomponent_get_first_component(calendar,ICAL_VJOURNAL_COMPONENT); 1956 c = icalcomponent_get_first_component(calendar,ICAL_VJOURNAL_COMPONENT);
1957 while (c) { 1957 while (c) {
1958// kdDebug(5800) << "----Journal found" << endl; 1958// kdDebug(5800) << "----Journal found" << endl;
1959 Journal *journal = readJournal(c); 1959 Journal *journal = readJournal(c);
1960 if (!cal->journal(journal->uid())) cal->addJournal(journal); 1960 if (!cal->journal(journal->uid())) cal->addJournal(journal);
1961 c = icalcomponent_get_next_component(calendar,ICAL_VJOURNAL_COMPONENT); 1961 c = icalcomponent_get_next_component(calendar,ICAL_VJOURNAL_COMPONENT);
1962 } 1962 }
1963 1963
1964#if 0 1964#if 0
1965 initPropIterator(&i, vcal); 1965 initPropIterator(&i, vcal);
1966 1966
1967 // go through all the vobjects in the vcal 1967 // go through all the vobjects in the vcal
1968 while (moreIteration(&i)) { 1968 while (moreIteration(&i)) {
1969 curVO = nextVObject(&i); 1969 curVO = nextVObject(&i);
1970 1970
1971 /************************************************************************/ 1971 /************************************************************************/
1972 1972
1973 // now, check to see that the object is an event or todo. 1973 // now, check to see that the object is an event or todo.
1974 if (strcmp(vObjectName(curVO), VCEventProp) == 0) { 1974 if (strcmp(vObjectName(curVO), VCEventProp) == 0) {
1975 1975
1976 if ((curVOProp = isAPropertyOf(curVO, KPilotStatusProp)) != 0) { 1976 if ((curVOProp = isAPropertyOf(curVO, KPilotStatusProp)) != 0) {
1977 char *s; 1977 char *s;
1978 s = fakeCString(vObjectUStringZValue(curVOProp)); 1978 s = fakeCString(vObjectUStringZValue(curVOProp));
1979 // check to see if event was deleted by the kpilot conduit 1979 // check to see if event was deleted by the kpilot conduit
1980 if (atoi(s) == Event::SYNCDEL) { 1980 if (atoi(s) == Event::SYNCDEL) {
1981 deleteStr(s); 1981 deleteStr(s);
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 0684af2..708ee6b 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -1,658 +1,666 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24 24
25#include "calformat.h" 25#include "calformat.h"
26 26
27#include "incidence.h" 27#include "incidence.h"
28#include "todo.h" 28#include "todo.h"
29 29
30using namespace KCal; 30using namespace KCal;
31 31
32Incidence::Incidence() : 32Incidence::Incidence() :
33 IncidenceBase(), 33 IncidenceBase(),
34 mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3) 34 mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3)
35{ 35{
36 mRecurrence = new Recurrence(this); 36 mRecurrence = new Recurrence(this);
37 mCancelled = false; 37 mCancelled = false;
38 recreate(); 38 recreate();
39 mHasStartDate = true; 39 mHasStartDate = true;
40 mAlarms.setAutoDelete(true); 40 mAlarms.setAutoDelete(true);
41 mAttachments.setAutoDelete(true); 41 mAttachments.setAutoDelete(true);
42 mHasRecurrenceID = false; 42 mHasRecurrenceID = false;
43} 43}
44 44
45Incidence::Incidence( const Incidence &i ) : IncidenceBase( i ) 45Incidence::Incidence( const Incidence &i ) : IncidenceBase( i )
46{ 46{
47// TODO: reenable attributes currently commented out. 47// TODO: reenable attributes currently commented out.
48 mRevision = i.mRevision; 48 mRevision = i.mRevision;
49 mCreated = i.mCreated; 49 mCreated = i.mCreated;
50 mDescription = i.mDescription; 50 mDescription = i.mDescription;
51 mSummary = i.mSummary; 51 mSummary = i.mSummary;
52 mCategories = i.mCategories; 52 mCategories = i.mCategories;
53// Incidence *mRelatedTo; Incidence *mRelatedTo; 53// Incidence *mRelatedTo; Incidence *mRelatedTo;
54 mRelatedTo = 0; 54 mRelatedTo = 0;
55 mRelatedToUid = i.mRelatedToUid; 55 mRelatedToUid = i.mRelatedToUid;
56// QPtrList<Incidence> mRelations; QPtrList<Incidence> mRelations; 56// QPtrList<Incidence> mRelations; QPtrList<Incidence> mRelations;
57 mExDates = i.mExDates; 57 mExDates = i.mExDates;
58 mAttachments = i.mAttachments; 58 mAttachments = i.mAttachments;
59 mResources = i.mResources; 59 mResources = i.mResources;
60 mSecrecy = i.mSecrecy; 60 mSecrecy = i.mSecrecy;
61 mPriority = i.mPriority; 61 mPriority = i.mPriority;
62 mLocation = i.mLocation; 62 mLocation = i.mLocation;
63 mCancelled = i.mCancelled; 63 mCancelled = i.mCancelled;
64 mHasStartDate = i.mHasStartDate; 64 mHasStartDate = i.mHasStartDate;
65 QPtrListIterator<Alarm> it( i.mAlarms ); 65 QPtrListIterator<Alarm> it( i.mAlarms );
66 const Alarm *a; 66 const Alarm *a;
67 while( (a = it.current()) ) { 67 while( (a = it.current()) ) {
68 Alarm *b = new Alarm( *a ); 68 Alarm *b = new Alarm( *a );
69 b->setParent( this ); 69 b->setParent( this );
70 mAlarms.append( b ); 70 mAlarms.append( b );
71 71
72 ++it; 72 ++it;
73 } 73 }
74 mAlarms.setAutoDelete(true); 74 mAlarms.setAutoDelete(true);
75 mHasRecurrenceID = i.mHasRecurrenceID; 75 mHasRecurrenceID = i.mHasRecurrenceID;
76 mRecurrenceID = i.mRecurrenceID; 76 mRecurrenceID = i.mRecurrenceID;
77 mRecurrence = new Recurrence( *(i.mRecurrence), this ); 77 mRecurrence = new Recurrence( *(i.mRecurrence), this );
78} 78}
79 79
80Incidence::~Incidence() 80Incidence::~Incidence()
81{ 81{
82 82
83 Incidence *ev; 83 Incidence *ev;
84 QPtrList<Incidence> Relations = relations(); 84 QPtrList<Incidence> Relations = relations();
85 for (ev=Relations.first();ev;ev=Relations.next()) { 85 for (ev=Relations.first();ev;ev=Relations.next()) {
86 if (ev->relatedTo() == this) ev->setRelatedTo(0); 86 if (ev->relatedTo() == this) ev->setRelatedTo(0);
87 } 87 }
88 if (relatedTo()) relatedTo()->removeRelation(this); 88 if (relatedTo()) relatedTo()->removeRelation(this);
89 delete mRecurrence; 89 delete mRecurrence;
90 90
91} 91}
92bool Incidence::hasRecurrenceID() const 92bool Incidence::hasRecurrenceID() const
93{ 93{
94 return mHasRecurrenceID; 94 return mHasRecurrenceID;
95} 95}
96 96
97void Incidence::setHasRecurrenceID( bool b ) 97void Incidence::setHasRecurrenceID( bool b )
98{ 98{
99 mHasRecurrenceID = b; 99 mHasRecurrenceID = b;
100} 100}
101 101
102void Incidence::setRecurrenceID(QDateTime d) 102void Incidence::setRecurrenceID(QDateTime d)
103{ 103{
104 mRecurrenceID = d; 104 mRecurrenceID = d;
105 mHasRecurrenceID = true; 105 mHasRecurrenceID = true;
106 updated(); 106 updated();
107} 107}
108QDateTime Incidence::recurrenceID () const 108QDateTime Incidence::recurrenceID () const
109{ 109{
110 return mRecurrenceID; 110 return mRecurrenceID;
111} 111}
112 112
113bool Incidence::cancelled() const 113bool Incidence::cancelled() const
114{ 114{
115 return mCancelled; 115 return mCancelled;
116} 116}
117void Incidence::setCancelled( bool b ) 117void Incidence::setCancelled( bool b )
118{ 118{
119 mCancelled = b; 119 mCancelled = b;
120 updated(); 120 updated();
121} 121}
122bool Incidence::hasStartDate() const 122bool Incidence::hasStartDate() const
123{ 123{
124 return mHasStartDate; 124 return mHasStartDate;
125} 125}
126 126
127void Incidence::setHasStartDate(bool f) 127void Incidence::setHasStartDate(bool f)
128{ 128{
129 if (mReadOnly) return; 129 if (mReadOnly) return;
130 mHasStartDate = f; 130 mHasStartDate = f;
131 updated(); 131 updated();
132} 132}
133 133
134// A string comparison that considers that null and empty are the same 134// A string comparison that considers that null and empty are the same
135static bool stringCompare( const QString& s1, const QString& s2 ) 135static bool stringCompare( const QString& s1, const QString& s2 )
136{ 136{
137 if ( s1.isEmpty() && s2.isEmpty() ) 137 if ( s1.isEmpty() && s2.isEmpty() )
138 return true; 138 return true;
139 return s1 == s2; 139 return s1 == s2;
140} 140}
141 141
142bool KCal::operator==( const Incidence& i1, const Incidence& i2 ) 142bool KCal::operator==( const Incidence& i1, const Incidence& i2 )
143{ 143{
144 144
145 if( i1.alarms().count() != i2.alarms().count() ) { 145 if( i1.alarms().count() != i2.alarms().count() ) {
146 return false; // no need to check further 146 return false; // no need to check further
147 } 147 }
148 if ( i1.alarms().count() > 0 ) { 148 if ( i1.alarms().count() > 0 ) {
149 if ( !( *(i1.alarms().first()) == *(i2.alarms().first())) ) 149 if ( !( *(i1.alarms().first()) == *(i2.alarms().first())) )
150 { 150 {
151 qDebug("alarm not equal "); 151 qDebug("alarm not equal ");
152 return false; 152 return false;
153 } 153 }
154 } 154 }
155#if 0 155#if 0
156 QPtrListIterator<Alarm> a1( i1.alarms() ); 156 QPtrListIterator<Alarm> a1( i1.alarms() );
157 QPtrListIterator<Alarm> a2( i2.alarms() ); 157 QPtrListIterator<Alarm> a2( i2.alarms() );
158 for( ; a1.current() && a2.current(); ++a1, ++a2 ) { 158 for( ; a1.current() && a2.current(); ++a1, ++a2 ) {
159 if( *a1.current() == *a2.current() ) { 159 if( *a1.current() == *a2.current() ) {
160 continue; 160 continue;
161 } 161 }
162 else { 162 else {
163 return false; 163 return false;
164 } 164 }
165 } 165 }
166#endif 166#endif
167 167
168 if ( i1.hasRecurrenceID() == i2.hasRecurrenceID() ) { 168 if ( i1.hasRecurrenceID() == i2.hasRecurrenceID() ) {
169 if ( i1.hasRecurrenceID() ) { 169 if ( i1.hasRecurrenceID() ) {
170 if ( i1.recurrenceID() != i2.recurrenceID() ) 170 if ( i1.recurrenceID() != i2.recurrenceID() )
171 return false; 171 return false;
172 } 172 }
173 173
174 } else { 174 } else {
175 return false; 175 return false;
176 } 176 }
177 177
178 if ( ! operator==( (const IncidenceBase&)i1, (const IncidenceBase&)i2 ) ) 178 if ( ! operator==( (const IncidenceBase&)i1, (const IncidenceBase&)i2 ) )
179 return false; 179 return false;
180 if ( i1.hasStartDate() == i2.hasStartDate() ) { 180 if ( i1.hasStartDate() == i2.hasStartDate() ) {
181 if ( i1.hasStartDate() ) { 181 if ( i1.hasStartDate() ) {
182 if ( i1.dtStart() != i2.dtStart() ) 182 if ( i1.dtStart() != i2.dtStart() )
183 return false; 183 return false;
184 } 184 }
185 } else { 185 } else {
186 return false; 186 return false;
187 } 187 }
188 if (!( *i1.recurrence() == *i2.recurrence()) ) { 188 if (!( *i1.recurrence() == *i2.recurrence()) ) {
189 qDebug("recurrence is NOT equal "); 189 qDebug("recurrence is NOT equal ");
190 return false; 190 return false;
191 } 191 }
192 return 192 return
193 // i1.created() == i2.created() && 193 // i1.created() == i2.created() &&
194 stringCompare( i1.description(), i2.description() ) && 194 stringCompare( i1.description(), i2.description() ) &&
195 stringCompare( i1.summary(), i2.summary() ) && 195 stringCompare( i1.summary(), i2.summary() ) &&
196 i1.categories() == i2.categories() && 196 i1.categories() == i2.categories() &&
197 // no need to compare mRelatedTo 197 // no need to compare mRelatedTo
198 stringCompare( i1.relatedToUid(), i2.relatedToUid() ) && 198 stringCompare( i1.relatedToUid(), i2.relatedToUid() ) &&
199 // i1.relations() == i2.relations() && 199 // i1.relations() == i2.relations() &&
200 i1.exDates() == i2.exDates() && 200 i1.exDates() == i2.exDates() &&
201 i1.attachments() == i2.attachments() && 201 i1.attachments() == i2.attachments() &&
202 i1.resources() == i2.resources() && 202 i1.resources() == i2.resources() &&
203 i1.secrecy() == i2.secrecy() && 203 i1.secrecy() == i2.secrecy() &&
204 i1.priority() == i2.priority() && 204 i1.priority() == i2.priority() &&
205 i1.cancelled() == i2.cancelled() && 205 i1.cancelled() == i2.cancelled() &&
206 stringCompare( i1.location(), i2.location() ); 206 stringCompare( i1.location(), i2.location() );
207} 207}
208 208
209Incidence* Incidence::recreateCloneException( QDate d ) 209Incidence* Incidence::recreateCloneException( QDate d )
210{ 210{
211 Incidence* newInc = clone(); 211 Incidence* newInc = clone();
212 newInc->recreate(); 212 newInc->recreate();
213 if ( doesRecur() ) { 213 if ( doesRecur() ) {
214 addExDate( d ); 214 addExDate( d );
215 newInc->recurrence()->unsetRecurs(); 215 newInc->recurrence()->unsetRecurs();
216 int len = dtStart().secsTo( ((Event*)this)->dtEnd()); 216 if ( type() == "Event") {
217 QTime tim = dtStart().time(); 217 int len = dtStart().secsTo( ((Event*)this)->dtEnd());
218 newInc->setDtStart( QDateTime(d, tim) ); 218 QTime tim = dtStart().time();
219 ((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) ); 219 newInc->setDtStart( QDateTime(d, tim) );
220 ((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) );
221 } else {
222 int len = dtStart().secsTo( ((Todo*)this)->dtDue());
223 QTime tim = ((Todo*)this)->dtDue().time();
224 ((Todo*)newInc)->setDtDue( QDateTime(d, tim) );
225 ((Todo*)newInc)->setDtStart( ((Todo*)newInc)->dtDue().addSecs( -len ) );
226 ((Todo*)this)->setRecurDates();
227 }
220 } 228 }
221 return newInc; 229 return newInc;
222} 230}
223 231
224void Incidence::recreate() 232void Incidence::recreate()
225{ 233{
226 setCreated(QDateTime::currentDateTime()); 234 setCreated(QDateTime::currentDateTime());
227 235
228 setUid(CalFormat::createUniqueId()); 236 setUid(CalFormat::createUniqueId());
229 237
230 setRevision(0); 238 setRevision(0);
231 setIDStr( ":" ); 239 setIDStr( ":" );
232 setLastModified(QDateTime::currentDateTime()); 240 setLastModified(QDateTime::currentDateTime());
233} 241}
234 242
235void Incidence::setReadOnly( bool readOnly ) 243void Incidence::setReadOnly( bool readOnly )
236{ 244{
237 IncidenceBase::setReadOnly( readOnly ); 245 IncidenceBase::setReadOnly( readOnly );
238 recurrence()->setRecurReadOnly( readOnly); 246 recurrence()->setRecurReadOnly( readOnly);
239} 247}
240 248
241void Incidence::setCreated(QDateTime created) 249void Incidence::setCreated(QDateTime created)
242{ 250{
243 if (mReadOnly) return; 251 if (mReadOnly) return;
244 mCreated = getEvenTime(created); 252 mCreated = getEvenTime(created);
245} 253}
246 254
247QDateTime Incidence::created() const 255QDateTime Incidence::created() const
248{ 256{
249 return mCreated; 257 return mCreated;
250} 258}
251 259
252void Incidence::setRevision(int rev) 260void Incidence::setRevision(int rev)
253{ 261{
254 if (mReadOnly) return; 262 if (mReadOnly) return;
255 mRevision = rev; 263 mRevision = rev;
256 264
257 updated(); 265 updated();
258} 266}
259 267
260int Incidence::revision() const 268int Incidence::revision() const
261{ 269{
262 return mRevision; 270 return mRevision;
263} 271}
264 272
265void Incidence::setDtStart(const QDateTime &dtStart) 273void Incidence::setDtStart(const QDateTime &dtStart)
266{ 274{
267 275
268 QDateTime dt = getEvenTime(dtStart); 276 QDateTime dt = getEvenTime(dtStart);
269 recurrence()->setRecurStart( dt); 277 recurrence()->setRecurStart( dt);
270 IncidenceBase::setDtStart( dt ); 278 IncidenceBase::setDtStart( dt );
271} 279}
272 280
273void Incidence::setDescription(const QString &description) 281void Incidence::setDescription(const QString &description)
274{ 282{
275 if (mReadOnly) return; 283 if (mReadOnly) return;
276 mDescription = description; 284 mDescription = description;
277 updated(); 285 updated();
278} 286}
279 287
280QString Incidence::description() const 288QString Incidence::description() const
281{ 289{
282 return mDescription; 290 return mDescription;
283} 291}
284 292
285 293
286void Incidence::setSummary(const QString &summary) 294void Incidence::setSummary(const QString &summary)
287{ 295{
288 if (mReadOnly) return; 296 if (mReadOnly) return;
289 mSummary = summary; 297 mSummary = summary;
290 updated(); 298 updated();
291} 299}
292 300
293QString Incidence::summary() const 301QString Incidence::summary() const
294{ 302{
295 return mSummary; 303 return mSummary;
296} 304}
297 305
298void Incidence::setCategories(const QStringList &categories) 306void Incidence::setCategories(const QStringList &categories)
299{ 307{
300 if (mReadOnly) return; 308 if (mReadOnly) return;
301 mCategories = categories; 309 mCategories = categories;
302 updated(); 310 updated();
303} 311}
304 312
305// TODO: remove setCategories(QString) function 313// TODO: remove setCategories(QString) function
306void Incidence::setCategories(const QString &catStr) 314void Incidence::setCategories(const QString &catStr)
307{ 315{
308 if (mReadOnly) return; 316 if (mReadOnly) return;
309 mCategories.clear(); 317 mCategories.clear();
310 318
311 if (catStr.isEmpty()) return; 319 if (catStr.isEmpty()) return;
312 320
313 mCategories = QStringList::split(",",catStr); 321 mCategories = QStringList::split(",",catStr);
314 322
315 QStringList::Iterator it; 323 QStringList::Iterator it;
316 for(it = mCategories.begin();it != mCategories.end(); ++it) { 324 for(it = mCategories.begin();it != mCategories.end(); ++it) {
317 *it = (*it).stripWhiteSpace(); 325 *it = (*it).stripWhiteSpace();
318 } 326 }
319 327
320 updated(); 328 updated();
321} 329}
322 330
323QStringList Incidence::categories() const 331QStringList Incidence::categories() const
324{ 332{
325 return mCategories; 333 return mCategories;
326} 334}
327 335
328QString Incidence::categoriesStr() 336QString Incidence::categoriesStr()
329{ 337{
330 return mCategories.join(","); 338 return mCategories.join(",");
331} 339}
332 340
333void Incidence::setRelatedToUid(const QString &relatedToUid) 341void Incidence::setRelatedToUid(const QString &relatedToUid)
334{ 342{
335 if (mReadOnly) return; 343 if (mReadOnly) return;
336 mRelatedToUid = relatedToUid; 344 mRelatedToUid = relatedToUid;
337} 345}
338 346
339QString Incidence::relatedToUid() const 347QString Incidence::relatedToUid() const
340{ 348{
341 return mRelatedToUid; 349 return mRelatedToUid;
342} 350}
343 351
344void Incidence::setRelatedTo(Incidence *relatedTo) 352void Incidence::setRelatedTo(Incidence *relatedTo)
345{ 353{
346 //qDebug("Incidence::setRelatedTo %d ", relatedTo); 354 //qDebug("Incidence::setRelatedTo %d ", relatedTo);
347 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() ); 355 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() );
348 if (mReadOnly || mRelatedTo == relatedTo) return; 356 if (mReadOnly || mRelatedTo == relatedTo) return;
349 if(mRelatedTo) { 357 if(mRelatedTo) {
350 // updated(); 358 // updated();
351 mRelatedTo->removeRelation(this); 359 mRelatedTo->removeRelation(this);
352 } 360 }
353 mRelatedTo = relatedTo; 361 mRelatedTo = relatedTo;
354 if (mRelatedTo) mRelatedTo->addRelation(this); 362 if (mRelatedTo) mRelatedTo->addRelation(this);
355} 363}
356 364
357Incidence *Incidence::relatedTo() const 365Incidence *Incidence::relatedTo() const
358{ 366{
359 return mRelatedTo; 367 return mRelatedTo;
360} 368}
361 369
362QPtrList<Incidence> Incidence::relations() const 370QPtrList<Incidence> Incidence::relations() const
363{ 371{
364 return mRelations; 372 return mRelations;
365} 373}
366 374
367void Incidence::addRelation(Incidence *event) 375void Incidence::addRelation(Incidence *event)
368{ 376{
369 if( mRelations.findRef( event ) == -1 ) { 377 if( mRelations.findRef( event ) == -1 ) {
370 mRelations.append(event); 378 mRelations.append(event);
371 //updated(); 379 //updated();
372 } 380 }
373} 381}
374 382
375void Incidence::removeRelation(Incidence *event) 383void Incidence::removeRelation(Incidence *event)
376{ 384{
377 385
378 mRelations.removeRef(event); 386 mRelations.removeRef(event);
379 387
380// if (event->getRelatedTo() == this) event->setRelatedTo(0); 388// if (event->getRelatedTo() == this) event->setRelatedTo(0);
381} 389}
382 390
383bool Incidence::recursOn(const QDate &qd) const 391bool Incidence::recursOn(const QDate &qd) const
384{ 392{
385 if (recurrence()->recursOnPure(qd) && !isException(qd)) return true; 393 if (recurrence()->recursOnPure(qd) && !isException(qd)) return true;
386 else return false; 394 else return false;
387} 395}
388 396
389void Incidence::setExDates(const DateList &exDates) 397void Incidence::setExDates(const DateList &exDates)
390{ 398{
391 if (mReadOnly) return; 399 if (mReadOnly) return;
392 mExDates = exDates; 400 mExDates = exDates;
393 401
394 recurrence()->setRecurExDatesCount(mExDates.count()); 402 recurrence()->setRecurExDatesCount(mExDates.count());
395 403
396 updated(); 404 updated();
397} 405}
398 406
399void Incidence::addExDate(const QDate &date) 407void Incidence::addExDate(const QDate &date)
400{ 408{
401 if (mReadOnly) return; 409 if (mReadOnly) return;
402 mExDates.append(date); 410 mExDates.append(date);
403 411
404 recurrence()->setRecurExDatesCount(mExDates.count()); 412 recurrence()->setRecurExDatesCount(mExDates.count());
405 413
406 updated(); 414 updated();
407} 415}
408 416
409DateList Incidence::exDates() const 417DateList Incidence::exDates() const
410{ 418{
411 return mExDates; 419 return mExDates;
412} 420}
413 421
414bool Incidence::isException(const QDate &date) const 422bool Incidence::isException(const QDate &date) const
415{ 423{
416 DateList::ConstIterator it; 424 DateList::ConstIterator it;
417 for( it = mExDates.begin(); it != mExDates.end(); ++it ) { 425 for( it = mExDates.begin(); it != mExDates.end(); ++it ) {
418 if ( (*it) == date ) { 426 if ( (*it) == date ) {
419 return true; 427 return true;
420 } 428 }
421 } 429 }
422 430
423 return false; 431 return false;
424} 432}
425 433
426void Incidence::addAttachment(Attachment *attachment) 434void Incidence::addAttachment(Attachment *attachment)
427{ 435{
428 if (mReadOnly || !attachment) return; 436 if (mReadOnly || !attachment) return;
429 mAttachments.append(attachment); 437 mAttachments.append(attachment);
430 updated(); 438 updated();
431} 439}
432 440
433void Incidence::deleteAttachment(Attachment *attachment) 441void Incidence::deleteAttachment(Attachment *attachment)
434{ 442{
435 mAttachments.removeRef(attachment); 443 mAttachments.removeRef(attachment);
436} 444}
437 445
438void Incidence::deleteAttachments(const QString& mime) 446void Incidence::deleteAttachments(const QString& mime)
439{ 447{
440 Attachment *at = mAttachments.first(); 448 Attachment *at = mAttachments.first();
441 while (at) { 449 while (at) {
442 if (at->mimeType() == mime) 450 if (at->mimeType() == mime)
443 mAttachments.remove(); 451 mAttachments.remove();
444 else 452 else
445 at = mAttachments.next(); 453 at = mAttachments.next();
446 } 454 }
447} 455}
448 456
449QPtrList<Attachment> Incidence::attachments() const 457QPtrList<Attachment> Incidence::attachments() const
450{ 458{
451 return mAttachments; 459 return mAttachments;
452} 460}
453 461
454QPtrList<Attachment> Incidence::attachments(const QString& mime) const 462QPtrList<Attachment> Incidence::attachments(const QString& mime) const
455{ 463{
456 QPtrList<Attachment> attachments; 464 QPtrList<Attachment> attachments;
457 QPtrListIterator<Attachment> it( mAttachments ); 465 QPtrListIterator<Attachment> it( mAttachments );
458 Attachment *at; 466 Attachment *at;
459 while ( (at = it.current()) ) { 467 while ( (at = it.current()) ) {
460 if (at->mimeType() == mime) 468 if (at->mimeType() == mime)
461 attachments.append(at); 469 attachments.append(at);
462 ++it; 470 ++it;
463 } 471 }
464 472
465 return attachments; 473 return attachments;
466} 474}
467 475
468void Incidence::setResources(const QStringList &resources) 476void Incidence::setResources(const QStringList &resources)
469{ 477{
470 if (mReadOnly) return; 478 if (mReadOnly) return;
471 mResources = resources; 479 mResources = resources;
472 updated(); 480 updated();
473} 481}
474 482
475QStringList Incidence::resources() const 483QStringList Incidence::resources() const
476{ 484{
477 return mResources; 485 return mResources;
478} 486}
479 487
480 488
481void Incidence::setPriority(int priority) 489void Incidence::setPriority(int priority)
482{ 490{
483 if (mReadOnly) return; 491 if (mReadOnly) return;
484 mPriority = priority; 492 mPriority = priority;
485 updated(); 493 updated();
486} 494}
487 495
488int Incidence::priority() const 496int Incidence::priority() const
489{ 497{
490 return mPriority; 498 return mPriority;
491} 499}
492 500
493void Incidence::setSecrecy(int sec) 501void Incidence::setSecrecy(int sec)
494{ 502{
495 if (mReadOnly) return; 503 if (mReadOnly) return;
496 mSecrecy = sec; 504 mSecrecy = sec;
497 updated(); 505 updated();
498} 506}
499 507
500int Incidence::secrecy() const 508int Incidence::secrecy() const
501{ 509{
502 return mSecrecy; 510 return mSecrecy;
503} 511}
504 512
505QString Incidence::secrecyStr() const 513QString Incidence::secrecyStr() const
506{ 514{
507 return secrecyName(mSecrecy); 515 return secrecyName(mSecrecy);
508} 516}
509 517
510QString Incidence::secrecyName(int secrecy) 518QString Incidence::secrecyName(int secrecy)
511{ 519{
512 switch (secrecy) { 520 switch (secrecy) {
513 case SecrecyPublic: 521 case SecrecyPublic:
514 return i18n("Public"); 522 return i18n("Public");
515 break; 523 break;
516 case SecrecyPrivate: 524 case SecrecyPrivate:
517 return i18n("Private"); 525 return i18n("Private");
518 break; 526 break;
519 case SecrecyConfidential: 527 case SecrecyConfidential:
520 return i18n("Confidential"); 528 return i18n("Confidential");
521 break; 529 break;
522 default: 530 default:
523 return i18n("Undefined"); 531 return i18n("Undefined");
524 break; 532 break;
525 } 533 }
526} 534}
527 535
528QStringList Incidence::secrecyList() 536QStringList Incidence::secrecyList()
529{ 537{
530 QStringList list; 538 QStringList list;
531 list << secrecyName(SecrecyPublic); 539 list << secrecyName(SecrecyPublic);
532 list << secrecyName(SecrecyPrivate); 540 list << secrecyName(SecrecyPrivate);
533 list << secrecyName(SecrecyConfidential); 541 list << secrecyName(SecrecyConfidential);
534 542
535 return list; 543 return list;
536} 544}
537 545
538 546
539QPtrList<Alarm> Incidence::alarms() const 547QPtrList<Alarm> Incidence::alarms() const
540{ 548{
541 return mAlarms; 549 return mAlarms;
542} 550}
543 551
544Alarm* Incidence::newAlarm() 552Alarm* Incidence::newAlarm()
545{ 553{
546 Alarm* alarm = new Alarm(this); 554 Alarm* alarm = new Alarm(this);
547 mAlarms.append(alarm); 555 mAlarms.append(alarm);
548// updated(); 556// updated();
549 return alarm; 557 return alarm;
550} 558}
551 559
552void Incidence::addAlarm(Alarm *alarm) 560void Incidence::addAlarm(Alarm *alarm)
553{ 561{
554 mAlarms.append(alarm); 562 mAlarms.append(alarm);
555 updated(); 563 updated();
556} 564}
557 565
558void Incidence::removeAlarm(Alarm *alarm) 566void Incidence::removeAlarm(Alarm *alarm)
559{ 567{
560 mAlarms.removeRef(alarm); 568 mAlarms.removeRef(alarm);
561 updated(); 569 updated();
562} 570}
563 571
564void Incidence::clearAlarms() 572void Incidence::clearAlarms()
565{ 573{
566 mAlarms.clear(); 574 mAlarms.clear();
567 updated(); 575 updated();
568} 576}
569 577
570bool Incidence::isAlarmEnabled() const 578bool Incidence::isAlarmEnabled() const
571{ 579{
572 Alarm* alarm; 580 Alarm* alarm;
573 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { 581 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
574 if (alarm->enabled()) 582 if (alarm->enabled())
575 return true; 583 return true;
576 } 584 }
577 return false; 585 return false;
578} 586}
579 587
580Recurrence *Incidence::recurrence() const 588Recurrence *Incidence::recurrence() const
581{ 589{
582 return mRecurrence; 590 return mRecurrence;
583} 591}
584void Incidence::setRecurrence( Recurrence * r) 592void Incidence::setRecurrence( Recurrence * r)
585{ 593{
586 delete mRecurrence; 594 delete mRecurrence;
587 mRecurrence = r; 595 mRecurrence = r;
588} 596}
589 597
590void Incidence::setLocation(const QString &location) 598void Incidence::setLocation(const QString &location)
591{ 599{
592 if (mReadOnly) return; 600 if (mReadOnly) return;
593 mLocation = location; 601 mLocation = location;
594 updated(); 602 updated();
595} 603}
596 604
597QString Incidence::location() const 605QString Incidence::location() const
598{ 606{
599 return mLocation; 607 return mLocation;
600} 608}
601 609
602ushort Incidence::doesRecur() const 610ushort Incidence::doesRecur() const
603{ 611{
604 if ( mRecurrence ) return mRecurrence->doesRecur(); 612 if ( mRecurrence ) return mRecurrence->doesRecur();
605 else return Recurrence::rNone; 613 else return Recurrence::rNone;
606} 614}
607 615
608QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const 616QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const
609{ 617{
610 QDateTime incidenceStart = dt; 618 QDateTime incidenceStart = dt;
611 *ok = false; 619 *ok = false;
612 if ( doesRecur() ) { 620 if ( doesRecur() ) {
613 bool last; 621 bool last;
614 recurrence()->getPreviousDateTime( incidenceStart , &last ); 622 recurrence()->getPreviousDateTime( incidenceStart , &last );
615 int count = 0; 623 int count = 0;
616 if ( !last ) { 624 if ( !last ) {
617 while ( !last ) { 625 while ( !last ) {
618 ++count; 626 ++count;
619 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last ); 627 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last );
620 if ( recursOn( incidenceStart.date() ) ) { 628 if ( recursOn( incidenceStart.date() ) ) {
621 last = true; // exit while llop 629 last = true; // exit while llop
622 } else { 630 } else {
623 if ( last ) { // no alarm on last recurrence 631 if ( last ) { // no alarm on last recurrence
624 return QDateTime (); 632 return QDateTime ();
625 } 633 }
626 int year = incidenceStart.date().year(); 634 int year = incidenceStart.date().year();
627 // workaround for bug in recurrence 635 // workaround for bug in recurrence
628 if ( count == 100 || year < 1000 || year > 5000 ) { 636 if ( count == 100 || year < 1000 || year > 5000 ) {
629 return QDateTime (); 637 return QDateTime ();
630 } 638 }
631 incidenceStart = incidenceStart.addSecs( 1 ); 639 incidenceStart = incidenceStart.addSecs( 1 );
632 } 640 }
633 } 641 }
634 } else { 642 } else {
635 return QDateTime (); 643 return QDateTime ();
636 } 644 }
637 } else { 645 } else {
638 if ( hasStartDate () ) { 646 if ( hasStartDate () ) {
639 incidenceStart = dtStart(); 647 incidenceStart = dtStart();
640 } 648 }
641 if ( type() =="Todo" ) { 649 if ( type() =="Todo" ) {
642 if ( ((Todo*)this)->hasDueDate() ) 650 if ( ((Todo*)this)->hasDueDate() )
643 incidenceStart = ((Todo*)this)->dtDue(); 651 incidenceStart = ((Todo*)this)->dtDue();
644 } 652 }
645 } 653 }
646 if ( incidenceStart > dt ) 654 if ( incidenceStart > dt )
647 *ok = true; 655 *ok = true;
648 return incidenceStart; 656 return incidenceStart;
649} 657}
650QDateTime Incidence::dtStart() const 658QDateTime Incidence::dtStart() const
651{ 659{
652 if ( doesRecur() ) { 660 if ( doesRecur() ) {
653 if ( type() == "Todo" ) { 661 if ( type() == "Todo" ) {
654 ((Todo*)this)->checkSetCompletedFalse(); 662 ((Todo*)this)->checkSetCompletedFalse();
655 } 663 }
656 } 664 }
657 return mDtStart; 665 return mDtStart;
658} 666}
diff --git a/libkcal/kincidenceformatter.cpp b/libkcal/kincidenceformatter.cpp
index 0d9c3f4..cc3088a 100644
--- a/libkcal/kincidenceformatter.cpp
+++ b/libkcal/kincidenceformatter.cpp
@@ -1,344 +1,356 @@
1#include "kincidenceformatter.h" 1#include "kincidenceformatter.h"
2#include <kstaticdeleter.h> 2#include <kstaticdeleter.h>
3#include <kglobal.h> 3#include <kglobal.h>
4#include <klocale.h> 4#include <klocale.h>
5#ifdef DEKTOP_VERSION 5#ifdef DEKTOP_VERSION
6#include <kabc/stdaddressbook.h> 6#include <kabc/stdaddressbook.h>
7#define size count 7#define size count
8#endif 8#endif
9 9
10KIncidenceFormatter* KIncidenceFormatter::mInstance = 0; 10KIncidenceFormatter* KIncidenceFormatter::mInstance = 0;
11static KStaticDeleter<KIncidenceFormatter> insd; 11static KStaticDeleter<KIncidenceFormatter> insd;
12 12
13QString KIncidenceFormatter::getFormattedText( Incidence * inc ) 13QString KIncidenceFormatter::getFormattedText( Incidence * inc )
14{ 14{
15// #ifndef QT_NO_INPUTDIALOG 15// #ifndef QT_NO_INPUTDIALOG
16// return QInputDialog::getItem( caption, label, items, current, editable ); 16// return QInputDialog::getItem( caption, label, items, current, editable );
17// #else 17// #else
18// return QString::null; 18// return QString::null;
19// #endif 19// #endif
20 mText = ""; 20 mText = "";
21 if ( inc->type() == "Event" ) 21 if ( inc->type() == "Event" )
22 setEvent((Event *) inc ); 22 setEvent((Event *) inc );
23 else if ( inc->type() == "Todo" ) 23 else if ( inc->type() == "Todo" )
24 setTodo((Todo *) inc ); 24 setTodo((Todo *) inc );
25 return mText; 25 return mText;
26} 26}
27 27
28KIncidenceFormatter* KIncidenceFormatter::instance() 28KIncidenceFormatter* KIncidenceFormatter::instance()
29{ 29{
30 if (!mInstance) { 30 if (!mInstance) {
31 mInstance = insd.setObject(new KIncidenceFormatter()); 31 mInstance = insd.setObject(new KIncidenceFormatter());
32 } 32 }
33 return mInstance; 33 return mInstance;
34} 34}
35KIncidenceFormatter::~KIncidenceFormatter() 35KIncidenceFormatter::~KIncidenceFormatter()
36{ 36{
37 if (mInstance == this) 37 if (mInstance == this)
38 mInstance = insd.setObject(0); 38 mInstance = insd.setObject(0);
39 //qDebug("KIncidenceFormatter::~KIncidenceFormatter "); 39 //qDebug("KIncidenceFormatter::~KIncidenceFormatter ");
40} 40}
41KIncidenceFormatter::KIncidenceFormatter() 41KIncidenceFormatter::KIncidenceFormatter()
42{ 42{
43 mColorMode = 0; 43 mColorMode = 0;
44} 44}
45void KIncidenceFormatter::setEvent(Event *event) 45void KIncidenceFormatter::setEvent(Event *event)
46{ 46{
47 int mode = 0; 47 int mode = 0;
48 mCurrentIncidence = event; 48 mCurrentIncidence = event;
49 bool shortDate = true; 49 bool shortDate = true;
50 if ( mode == 0 ) { 50 if ( mode == 0 ) {
51 addTag("h3",event->summary()); 51 addTag("h3",event->summary());
52 } 52 }
53 else { 53 else {
54 if ( mColorMode == 1 ) { 54 if ( mColorMode == 1 ) {
55 mText +="<font color=\"#00A000\">"; 55 mText +="<font color=\"#00A000\">";
56 } 56 }
57 if ( mColorMode == 2 ) { 57 if ( mColorMode == 2 ) {
58 mText +="<font color=\"#C00000\">"; 58 mText +="<font color=\"#C00000\">";
59 } 59 }
60 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 60 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
61 if ( mode == 1 ) { 61 if ( mode == 1 ) {
62 addTag("h2",i18n( "Local: " ) +event->summary()); 62 addTag("h2",i18n( "Local: " ) +event->summary());
63 } else { 63 } else {
64 addTag("h2",i18n( "Remote: " ) +event->summary()); 64 addTag("h2",i18n( "Remote: " ) +event->summary());
65 } 65 }
66 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 66 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
67 if ( mColorMode ) 67 if ( mColorMode )
68 mText += "</font>"; 68 mText += "</font>";
69 } 69 }
70 if (event->cancelled ()) { 70 if (event->cancelled ()) {
71 mText +="<font color=\"#B00000\">"; 71 mText +="<font color=\"#B00000\">";
72 addTag("i",i18n("This event has been cancelled!")); 72 addTag("i",i18n("This event has been cancelled!"));
73 mText.append("<br>"); 73 mText.append("<br>");
74 mText += "</font>"; 74 mText += "</font>";
75 } 75 }
76 if (!event->location().isEmpty()) { 76 if (!event->location().isEmpty()) {
77 addTag("b",i18n("Location: ")); 77 addTag("b",i18n("Location: "));
78 mText.append(event->location()+"<br>"); 78 mText.append(event->location()+"<br>");
79 } 79 }
80 if (event->doesFloat()) { 80 if (event->doesFloat()) {
81 if (event->isMultiDay()) { 81 if (event->isMultiDay()) {
82 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 82 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
83 .arg(event->dtStartDateStr(shortDate)) 83 .arg(event->dtStartDateStr(shortDate))
84 .arg(event->dtEndDateStr(shortDate))); 84 .arg(event->dtEndDateStr(shortDate)));
85 } else { 85 } else {
86 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 86 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
87 } 87 }
88 } else { 88 } else {
89 if (event->isMultiDay()) { 89 if (event->isMultiDay()) {
90 mText.append(i18n("<p><b>From:</b> %1</p> ") 90 mText.append(i18n("<p><b>From:</b> %1</p> ")
91 .arg(event->dtStartStr( shortDate))); 91 .arg(event->dtStartStr( shortDate)));
92 mText.append(i18n("<p><b>To:</b> %1</p>") 92 mText.append(i18n("<p><b>To:</b> %1</p>")
93 .arg(event->dtEndStr(shortDate))); 93 .arg(event->dtEndStr(shortDate)));
94 } else { 94 } else {
95 mText.append(i18n("<p><b>On:</b> %1</p> ") 95 mText.append(i18n("<p><b>On:</b> %1</p> ")
96 .arg(event->dtStartDateStr( shortDate ))); 96 .arg(event->dtStartDateStr( shortDate )));
97 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 97 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
98 .arg(event->dtStartTimeStr()) 98 .arg(event->dtStartTimeStr())
99 .arg(event->dtEndTimeStr())); 99 .arg(event->dtEndTimeStr()));
100 } 100 }
101 } 101 }
102 102
103 if (event->recurrence()->doesRecur()) { 103 if (event->recurrence()->doesRecur()) {
104 104
105 QString recurText = event->recurrence()->recurrenceText(); 105 QString recurText = event->recurrence()->recurrenceText();
106 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 106 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
107 107
108 bool ok; 108 bool ok;
109 QDate start = QDate::currentDate(); 109 QDate start = QDate::currentDate();
110 QDateTime next; 110 QDateTime next;
111 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 111 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
112 if ( ok ) { 112 if ( ok ) {
113 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 113 addTag("p",i18n("<b>Next recurrence is on:</b>") );
114 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 114 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
115 115
116 } else { 116 } else {
117 bool last; 117 bool last;
118 QDate nextd; 118 QDate nextd;
119 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 119 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
120 if ( last ) { 120 if ( last ) {
121 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 121 addTag("p",i18n("<b>Last recurrence was on:</b>") );
122 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 122 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
123 } 123 }
124 } 124 }
125 } 125 }
126 126
127 127
128 if (event->isAlarmEnabled()) { 128 if (event->isAlarmEnabled()) {
129 Alarm *alarm =event->alarms().first() ; 129 Alarm *alarm =event->alarms().first() ;
130 QDateTime t = alarm->time(); 130 QDateTime t = alarm->time();
131 int min = t.secsTo( event->dtStart() )/60; 131 int min = t.secsTo( event->dtStart() )/60;
132 QString s =i18n("(%1 min before)").arg( min ); 132 QString s =i18n("(%1 min before)").arg( min );
133 addTag("p",i18n("<b>Alarm on: </b>") + s + ": "+KGlobal::locale()->formatDateTime( t, shortDate )); 133 addTag("p",i18n("<b>Alarm on: </b>") + s + ": "+KGlobal::locale()->formatDateTime( t, shortDate ));
134 //addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 134 //addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
135 //addTag("p",s); 135 //addTag("p",s);
136 } 136 }
137 137
138 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() ); 138 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() );
139 // mText.append(event->secrecyStr()+"<br>"); 139 // mText.append(event->secrecyStr()+"<br>");
140 formatCategories(event); 140 formatCategories(event);
141 if (!event->description().isEmpty()) { 141 if (!event->description().isEmpty()) {
142 addTag("p",i18n("<b>Details: </b>")); 142 addTag("p",i18n("<b>Details: </b>"));
143 addTag("p",event->description()); 143 addTag("p",event->description());
144 } 144 }
145 145
146 146
147 formatReadOnly(event); 147 formatReadOnly(event);
148 formatAttendees(event); 148 formatAttendees(event);
149 149
150 150
151} 151}
152 152
153void KIncidenceFormatter::setTodo(Todo *event ) 153void KIncidenceFormatter::setTodo(Todo *event )
154{ 154{
155 int mode = 0; 155 int mode = 0;
156 mCurrentIncidence = event; 156 mCurrentIncidence = event;
157 bool shortDate = true; 157 bool shortDate = true;
158 if (mode == 0 ) 158 if (mode == 0 )
159 addTag("h3",event->summary()); 159 addTag("h3",event->summary());
160 else { 160 else {
161 if ( mColorMode == 1 ) { 161 if ( mColorMode == 1 ) {
162 mText +="<font color=\"#00A000\">"; 162 mText +="<font color=\"#00A000\">";
163 } 163 }
164 if ( mColorMode == 2 ) { 164 if ( mColorMode == 2 ) {
165 mText +="<font color=\"#B00000\">"; 165 mText +="<font color=\"#B00000\">";
166 } 166 }
167 if ( mode == 1 ) { 167 if ( mode == 1 ) {
168 addTag("h2",i18n( "Local: " ) +event->summary()); 168 addTag("h2",i18n( "Local: " ) +event->summary());
169 } else { 169 } else {
170 addTag("h2",i18n( "Remote: " ) +event->summary()); 170 addTag("h2",i18n( "Remote: " ) +event->summary());
171 } 171 }
172 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 172 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
173 if ( mColorMode ) 173 if ( mColorMode )
174 mText += "</font>"; 174 mText += "</font>";
175 } 175 }
176 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 176 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
177 mText +="<font color=\"#B00000\">"; 177 mText +="<font color=\"#B00000\">";
178 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(shortDate) ) ); 178 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(shortDate) ) );
179 mText += "</font>"; 179 mText += "</font>";
180 } else { 180 } else {
181 mText.append(i18n("<p><i>%1 % completed</i></p>") 181 mText.append(i18n("<p><i>%1 % completed</i></p>")
182 .arg(event->percentComplete())); 182 .arg(event->percentComplete()));
183 } 183 }
184 if (event->cancelled ()) { 184 if (event->cancelled ()) {
185 mText +="<font color=\"#B00000\">"; 185 mText +="<font color=\"#B00000\">";
186 addTag("i",i18n("This todo has been cancelled!")); 186 addTag("i",i18n("This todo has been cancelled!"));
187 mText.append("<br>"); 187 mText.append("<br>");
188 mText += "</font>"; 188 mText += "</font>";
189 } 189 }
190 190
191 if (!event->location().isEmpty()) { 191 if (!event->location().isEmpty()) {
192 addTag("b",i18n("Location: ")); 192 addTag("b",i18n("Location: "));
193 mText.append(event->location()+"<br>"); 193 mText.append(event->location()+"<br>");
194 } 194 }
195
196 if (event->recurrence()->doesRecur()) {
197
198 QString recurText = event->recurrence()->recurrenceText();
199 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
200 }
201
202 if (event->hasStartDate()) {
203 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(shortDate)));
204 }
205
206
195 if (event->hasDueDate()) { 207 if (event->hasDueDate()) {
196 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(shortDate))); 208 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(shortDate)));
197 } 209 }
198 mText.append(i18n("<p><b>Priority:</b> %2</p>") 210 mText.append(i18n("<p><b>Priority:</b> %2</p>")
199 .arg(QString::number(event->priority()))); 211 .arg(QString::number(event->priority())));
200 212
201 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() ); 213 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() );
202 formatCategories(event); 214 formatCategories(event);
203 if (!event->description().isEmpty()) { 215 if (!event->description().isEmpty()) {
204 addTag("p",i18n("<b>Details: </b>")); 216 addTag("p",i18n("<b>Details: </b>"));
205 addTag("p",event->description()); 217 addTag("p",event->description());
206 } 218 }
207 219
208 220
209 221
210 formatReadOnly(event); 222 formatReadOnly(event);
211 formatAttendees(event); 223 formatAttendees(event);
212 224
213} 225}
214 226
215void KIncidenceFormatter::setJournal(Journal* ) 227void KIncidenceFormatter::setJournal(Journal* )
216{ 228{
217 229
218} 230}
219 231
220void KIncidenceFormatter::formatCategories(Incidence *event) 232void KIncidenceFormatter::formatCategories(Incidence *event)
221{ 233{
222 if (!event->categoriesStr().isEmpty()) { 234 if (!event->categoriesStr().isEmpty()) {
223 addTag("p",i18n("<b>Categories: </b>")+event->categoriesStr() ); 235 addTag("p",i18n("<b>Categories: </b>")+event->categoriesStr() );
224 //mText.append(event->categoriesStr()); 236 //mText.append(event->categoriesStr());
225 } 237 }
226} 238}
227void KIncidenceFormatter::addTag(const QString & tag,const QString & text) 239void KIncidenceFormatter::addTag(const QString & tag,const QString & text)
228{ 240{
229 int number=text.contains("\n"); 241 int number=text.contains("\n");
230 QString str = "<" + tag + ">"; 242 QString str = "<" + tag + ">";
231 QString tmpText=text; 243 QString tmpText=text;
232 QString tmpStr=str; 244 QString tmpStr=str;
233 if(number !=-1) 245 if(number !=-1)
234 { 246 {
235 if (number > 0) { 247 if (number > 0) {
236 int pos=0; 248 int pos=0;
237 QString tmp; 249 QString tmp;
238 for(int i=0;i<=number;i++) { 250 for(int i=0;i<=number;i++) {
239 pos=tmpText.find("\n"); 251 pos=tmpText.find("\n");
240 tmp=tmpText.left(pos); 252 tmp=tmpText.left(pos);
241 tmpText=tmpText.right(tmpText.length()-pos-1); 253 tmpText=tmpText.right(tmpText.length()-pos-1);
242 tmpStr+=tmp+"<br>"; 254 tmpStr+=tmp+"<br>";
243 } 255 }
244 } 256 }
245 else tmpStr += tmpText; 257 else tmpStr += tmpText;
246 tmpStr+="</" + tag + ">"; 258 tmpStr+="</" + tag + ">";
247 mText.append(tmpStr); 259 mText.append(tmpStr);
248 } 260 }
249 else 261 else
250 { 262 {
251 str += text + "</" + tag + ">"; 263 str += text + "</" + tag + ">";
252 mText.append(str); 264 mText.append(str);
253 } 265 }
254} 266}
255 267
256void KIncidenceFormatter::formatAttendees(Incidence *event) 268void KIncidenceFormatter::formatAttendees(Incidence *event)
257{ 269{
258 QPtrList<Attendee> attendees = event->attendees(); 270 QPtrList<Attendee> attendees = event->attendees();
259 if (attendees.count()) { 271 if (attendees.count()) {
260 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 272 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
261 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 273 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
262 addTag("h3",i18n("Organizer")); 274 addTag("h3",i18n("Organizer"));
263 mText.append("<ul><li>"); 275 mText.append("<ul><li>");
264#if 0 276#if 0
265 //ndef KORG_NOKABC 277 //ndef KORG_NOKABC
266 278
267 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 279 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
268 KABC::Addressee::List addressList; 280 KABC::Addressee::List addressList;
269 addressList = add_book->findByEmail(event->organizer()); 281 addressList = add_book->findByEmail(event->organizer());
270 KABC::Addressee o = addressList.first(); 282 KABC::Addressee o = addressList.first();
271 if (!o.isEmpty() && addressList.size()<2) { 283 if (!o.isEmpty() && addressList.size()<2) {
272 mText += "<a href=\"uid:" + o.uid() + "\">"; 284 mText += "<a href=\"uid:" + o.uid() + "\">";
273 mText += o.formattedName(); 285 mText += o.formattedName();
274 mText += "</a>\n"; 286 mText += "</a>\n";
275 } else { 287 } else {
276 mText.append(event->organizer()); 288 mText.append(event->organizer());
277 } 289 }
278#else 290#else
279 mText.append(event->organizer()); 291 mText.append(event->organizer());
280#endif 292#endif
281 if (iconPath) { 293 if (iconPath) {
282 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 294 mText += " <a href=\"mailto:" + event->organizer() + "\">";
283 mText += "<IMG src=\"" + iconPath + "\">"; 295 mText += "<IMG src=\"" + iconPath + "\">";
284 mText += "</a>\n"; 296 mText += "</a>\n";
285 } 297 }
286 mText.append("</li></ul>"); 298 mText.append("</li></ul>");
287 299
288 addTag("h3",i18n("Attendees")); 300 addTag("h3",i18n("Attendees"));
289 Attendee *a; 301 Attendee *a;
290 mText.append("<ul>"); 302 mText.append("<ul>");
291 for(a=attendees.first();a;a=attendees.next()) { 303 for(a=attendees.first();a;a=attendees.next()) {
292#if 0 304#if 0
293//ndef KORG_NOKABC 305//ndef KORG_NOKABC
294 if (a->name().isEmpty()) { 306 if (a->name().isEmpty()) {
295 addressList = add_book->findByEmail(a->email()); 307 addressList = add_book->findByEmail(a->email());
296 KABC::Addressee o = addressList.first(); 308 KABC::Addressee o = addressList.first();
297 if (!o.isEmpty() && addressList.size()<2) { 309 if (!o.isEmpty() && addressList.size()<2) {
298 mText += "<a href=\"uid:" + o.uid() + "\">"; 310 mText += "<a href=\"uid:" + o.uid() + "\">";
299 mText += o.formattedName(); 311 mText += o.formattedName();
300 mText += "</a>\n"; 312 mText += "</a>\n";
301 } else { 313 } else {
302 mText += "<li>"; 314 mText += "<li>";
303 mText.append(a->email()); 315 mText.append(a->email());
304 mText += "\n"; 316 mText += "\n";
305 } 317 }
306 } else { 318 } else {
307 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 319 mText += "<li><a href=\"uid:" + a->uid() + "\">";
308 if (!a->name().isEmpty()) mText += a->name(); 320 if (!a->name().isEmpty()) mText += a->name();
309 else mText += a->email(); 321 else mText += a->email();
310 mText += "</a>\n"; 322 mText += "</a>\n";
311 } 323 }
312#else 324#else
313 //qDebug("nokabc "); 325 //qDebug("nokabc ");
314 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 326 mText += "<li><a href=\"uid:" + a->uid() + "\">";
315 if (!a->name().isEmpty()) mText += a->name(); 327 if (!a->name().isEmpty()) mText += a->name();
316 else mText += a->email(); 328 else mText += a->email();
317 mText += "</a>\n"; 329 mText += "</a>\n";
318#endif 330#endif
319 331
320 if (!a->email().isEmpty()) { 332 if (!a->email().isEmpty()) {
321 if (iconPath) { 333 if (iconPath) {
322 mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">"; 334 mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">";
323 if ( a->RSVP() ) 335 if ( a->RSVP() )
324 mText += "<IMG src=\"" + iconPath + "\">"; 336 mText += "<IMG src=\"" + iconPath + "\">";
325 else 337 else
326 mText += "<IMG src=\"" + NOiconPath + "\">"; 338 mText += "<IMG src=\"" + NOiconPath + "\">";
327 mText += "</a>\n"; 339 mText += "</a>\n";
328 } 340 }
329 } 341 }
330 if (a->status() != Attendee::NeedsAction ) 342 if (a->status() != Attendee::NeedsAction )
331 mText +="[" + a->statusStr() + "] "; 343 mText +="[" + a->statusStr() + "] ";
332 if (a->role() == Attendee::Chair ) 344 if (a->role() == Attendee::Chair )
333 mText +="(" + a->roleStr().left(1) + ".)"; 345 mText +="(" + a->roleStr().left(1) + ".)";
334 } 346 }
335 mText.append("</li></ul>"); 347 mText.append("</li></ul>");
336 } 348 }
337} 349}
338 350
339void KIncidenceFormatter::formatReadOnly(Incidence *event) 351void KIncidenceFormatter::formatReadOnly(Incidence *event)
340{ 352{
341 if (event->isReadOnly()) { 353 if (event->isReadOnly()) {
342 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 354 addTag("p","<em>(" + i18n("read-only") + ")</em>");
343 } 355 }
344} 356}
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index 1f54c2f..39d16b6 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -1,457 +1,457 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24 24
25#include "todo.h" 25#include "todo.h"
26 26
27using namespace KCal; 27using namespace KCal;
28 28
29Todo::Todo(): Incidence() 29Todo::Todo(): Incidence()
30{ 30{
31// mStatus = TENTATIVE; 31// mStatus = TENTATIVE;
32 32
33 mHasDueDate = false; 33 mHasDueDate = false;
34 setHasStartDate( false ); 34 setHasStartDate( false );
35 mCompleted = getEvenTime(QDateTime::currentDateTime()); 35 mCompleted = getEvenTime(QDateTime::currentDateTime());
36 mHasCompletedDate = false; 36 mHasCompletedDate = false;
37 mPercentComplete = 0; 37 mPercentComplete = 0;
38} 38}
39 39
40Todo::Todo(const Todo &t) : Incidence(t) 40Todo::Todo(const Todo &t) : Incidence(t)
41{ 41{
42 mDtDue = t.mDtDue; 42 mDtDue = t.mDtDue;
43 mHasDueDate = t.mHasDueDate; 43 mHasDueDate = t.mHasDueDate;
44 mCompleted = t.mCompleted; 44 mCompleted = t.mCompleted;
45 mHasCompletedDate = t.mHasCompletedDate; 45 mHasCompletedDate = t.mHasCompletedDate;
46 mPercentComplete = t.mPercentComplete; 46 mPercentComplete = t.mPercentComplete;
47} 47}
48 48
49Todo::~Todo() 49Todo::~Todo()
50{ 50{
51 51
52} 52}
53 53
54Incidence *Todo::clone() 54Incidence *Todo::clone()
55{ 55{
56 return new Todo(*this); 56 return new Todo(*this);
57} 57}
58 58
59bool Todo::contains ( Todo* from ) 59bool Todo::contains ( Todo* from )
60{ 60{
61 61
62 if ( !from->summary().isEmpty() ) 62 if ( !from->summary().isEmpty() )
63 if ( !summary().startsWith( from->summary() )) 63 if ( !summary().startsWith( from->summary() ))
64 return false; 64 return false;
65 if ( from->hasStartDate() ) { 65 if ( from->hasStartDate() ) {
66 if ( !hasStartDate() ) 66 if ( !hasStartDate() )
67 return false; 67 return false;
68 if ( from->dtStart() != dtStart()) 68 if ( from->dtStart() != dtStart())
69 return false; 69 return false;
70 } 70 }
71 if ( from->hasDueDate() ){ 71 if ( from->hasDueDate() ){
72 if ( !hasDueDate() ) 72 if ( !hasDueDate() )
73 return false; 73 return false;
74 if ( from->dtDue() != dtDue()) 74 if ( from->dtDue() != dtDue())
75 return false; 75 return false;
76 } 76 }
77 if ( !from->location().isEmpty() ) 77 if ( !from->location().isEmpty() )
78 if ( !location().startsWith( from->location() ) ) 78 if ( !location().startsWith( from->location() ) )
79 return false; 79 return false;
80 if ( !from->description().isEmpty() ) 80 if ( !from->description().isEmpty() )
81 if ( !description().startsWith( from->description() )) 81 if ( !description().startsWith( from->description() ))
82 return false; 82 return false;
83 if ( from->alarms().count() ) { 83 if ( from->alarms().count() ) {
84 Alarm *a = from->alarms().first(); 84 Alarm *a = from->alarms().first();
85 if ( a->enabled() ){ 85 if ( a->enabled() ){
86 if ( !alarms().count() ) 86 if ( !alarms().count() )
87 return false; 87 return false;
88 Alarm *b = alarms().first(); 88 Alarm *b = alarms().first();
89 if( ! b->enabled() ) 89 if( ! b->enabled() )
90 return false; 90 return false;
91 if ( ! (a->offset() == b->offset() )) 91 if ( ! (a->offset() == b->offset() ))
92 return false; 92 return false;
93 } 93 }
94 } 94 }
95 95
96 QStringList cat = categories(); 96 QStringList cat = categories();
97 QStringList catFrom = from->categories(); 97 QStringList catFrom = from->categories();
98 QString nCat; 98 QString nCat;
99 unsigned int iii; 99 unsigned int iii;
100 for ( iii = 0; iii < catFrom.count();++iii ) { 100 for ( iii = 0; iii < catFrom.count();++iii ) {
101 nCat = catFrom[iii]; 101 nCat = catFrom[iii];
102 if ( !nCat.isEmpty() ) 102 if ( !nCat.isEmpty() )
103 if ( !cat.contains( nCat )) { 103 if ( !cat.contains( nCat )) {
104 return false; 104 return false;
105 } 105 }
106 } 106 }
107 if ( from->isCompleted() ) { 107 if ( from->isCompleted() ) {
108 if ( !isCompleted() ) 108 if ( !isCompleted() )
109 return false; 109 return false;
110 } 110 }
111 if( priority() != from->priority() ) 111 if( priority() != from->priority() )
112 return false; 112 return false;
113 113
114 114
115 return true; 115 return true;
116 116
117} 117}
118bool KCal::operator==( const Todo& t1, const Todo& t2 ) 118bool KCal::operator==( const Todo& t1, const Todo& t2 )
119{ 119{
120 120
121 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 ); 121 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 );
122 if ( ! ret ) 122 if ( ! ret )
123 return false; 123 return false;
124 if ( t1.hasDueDate() == t2.hasDueDate() ) { 124 if ( t1.hasDueDate() == t2.hasDueDate() ) {
125 if ( t1.hasDueDate() ) { 125 if ( t1.hasDueDate() ) {
126 if ( t1.doesFloat() == t2.doesFloat() ) { 126 if ( t1.doesFloat() == t2.doesFloat() ) {
127 if ( t1.doesFloat() ) { 127 if ( t1.doesFloat() ) {
128 if ( t1.dtDue().date() != t2.dtDue().date() ) 128 if ( t1.dtDue().date() != t2.dtDue().date() )
129 return false; 129 return false;
130 } else 130 } else
131 if ( t1.dtDue() != t2.dtDue() ) 131 if ( t1.dtDue() != t2.dtDue() )
132 return false; 132 return false;
133 } else 133 } else
134 return false;// float != 134 return false;// float !=
135 } 135 }
136 136
137 } else 137 } else
138 return false; 138 return false;
139 if ( t1.percentComplete() != t2.percentComplete() ) 139 if ( t1.percentComplete() != t2.percentComplete() )
140 return false; 140 return false;
141 if ( t1.isCompleted() ) { 141 if ( t1.isCompleted() ) {
142 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) { 142 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) {
143 if ( t1.hasCompletedDate() ) { 143 if ( t1.hasCompletedDate() ) {
144 if ( t1.completed() != t2.completed() ) 144 if ( t1.completed() != t2.completed() )
145 return false; 145 return false;
146 } 146 }
147 147
148 } else 148 } else
149 return false; 149 return false;
150 } 150 }
151 return true; 151 return true;
152 152
153} 153}
154 154
155void Todo::setDtDue(const QDateTime &dtDue) 155void Todo::setDtDue(const QDateTime &dtDue)
156{ 156{
157 //int diffsecs = mDtDue.secsTo(dtDue); 157 //int diffsecs = mDtDue.secsTo(dtDue);
158 158
159 /*if (mReadOnly) return; 159 /*if (mReadOnly) return;
160 const QPtrList<Alarm>& alarms = alarms(); 160 const QPtrList<Alarm>& alarms = alarms();
161 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) { 161 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) {
162 if (alarm->enabled()) { 162 if (alarm->enabled()) {
163 alarm->setTime(alarm->time().addSecs(diffsecs)); 163 alarm->setTime(alarm->time().addSecs(diffsecs));
164 } 164 }
165 }*/ 165 }*/
166 mDtDue = getEvenTime(dtDue); 166 mDtDue = getEvenTime(dtDue);
167 167
168 //kdDebug(5800) << "setDtDue says date is " << mDtDue.toString() << endl; 168 //kdDebug(5800) << "setDtDue says date is " << mDtDue.toString() << endl;
169 169
170 /*const QPtrList<Alarm>& alarms = alarms(); 170 /*const QPtrList<Alarm>& alarms = alarms();
171 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) 171 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next())
172 alarm->setAlarmStart(mDtDue);*/ 172 alarm->setAlarmStart(mDtDue);*/
173 173
174 updated(); 174 updated();
175} 175}
176 176
177QDateTime Todo::dtDue() const 177QDateTime Todo::dtDue() const
178{ 178{
179 return mDtDue; 179 return mDtDue;
180} 180}
181 181
182QString Todo::dtDueTimeStr() const 182QString Todo::dtDueTimeStr() const
183{ 183{
184 return KGlobal::locale()->formatTime(mDtDue.time()); 184 return KGlobal::locale()->formatTime(mDtDue.time());
185} 185}
186 186
187QString Todo::dtDueDateStr(bool shortfmt) const 187QString Todo::dtDueDateStr(bool shortfmt) const
188{ 188{
189 return KGlobal::locale()->formatDate(mDtDue.date(),shortfmt); 189 return KGlobal::locale()->formatDate(mDtDue.date(),shortfmt);
190} 190}
191 191
192QString Todo::dtDueStr(bool shortfmt) const 192QString Todo::dtDueStr(bool shortfmt) const
193{ 193{
194 return KGlobal::locale()->formatDateTime(mDtDue, shortfmt); 194 return KGlobal::locale()->formatDateTime(mDtDue, shortfmt);
195} 195}
196// retval 0 : no found 196// retval 0 : no found
197// 1 : due for date found 197// 1 : due for date found
198// 2 : overdue for date found 198// 2 : overdue for date found
199int Todo::hasDueSubTodoForDate( const QDate & date, bool checkSubtodos ) 199int Todo::hasDueSubTodoForDate( const QDate & date, bool checkSubtodos )
200{ 200{
201 int retval = 0; 201 int retval = 0;
202 if ( isCompleted() ) 202 if ( isCompleted() )
203 return 0; 203 return 0;
204 if ( hasDueDate() ) { 204 if ( hasDueDate() ) {
205 if ( dtDue().date() < date ) 205 if ( dtDue().date() < date )
206 return 2; 206 return 2;
207 // we do not return, because we may find an overdue sub todo 207 // we do not return, because we may find an overdue sub todo
208 if ( dtDue().date() == date ) 208 if ( dtDue().date() == date )
209 retval = 1; 209 retval = 1;
210 } 210 }
211 if ( checkSubtodos ) { 211 if ( checkSubtodos ) {
212 Incidence *aTodo; 212 Incidence *aTodo;
213 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) { 213 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) {
214 int ret = ((Todo*)aTodo)->hasDueSubTodoForDate( date ,checkSubtodos ); 214 int ret = ((Todo*)aTodo)->hasDueSubTodoForDate( date ,checkSubtodos );
215 if ( ret == 2 ) 215 if ( ret == 2 )
216 return 2; 216 return 2;
217 if ( ret == 1) 217 if ( ret == 1)
218 retval = 1; 218 retval = 1;
219 } 219 }
220 } 220 }
221 return retval; 221 return retval;
222} 222}
223int Todo::hasDueSubTodo( bool checkSubtodos ) //= true 223int Todo::hasDueSubTodo( bool checkSubtodos ) //= true
224{ 224{
225 return hasDueSubTodoForDate(QDate::currentDate(), checkSubtodos ); 225 return hasDueSubTodoForDate(QDate::currentDate(), checkSubtodos );
226} 226}
227bool Todo::hasDueDate() const 227bool Todo::hasDueDate() const
228{ 228{
229 return mHasDueDate; 229 return mHasDueDate;
230} 230}
231 231
232void Todo::setHasDueDate(bool f) 232void Todo::setHasDueDate(bool f)
233{ 233{
234 if (mReadOnly) return; 234 if (mReadOnly) return;
235 mHasDueDate = f; 235 mHasDueDate = f;
236 updated(); 236 updated();
237} 237}
238 238
239 239
240#if 0 240#if 0
241void Todo::setStatus(const QString &statStr) 241void Todo::setStatus(const QString &statStr)
242{ 242{
243 if (mReadOnly) return; 243 if (mReadOnly) return;
244 QString ss(statStr.upper()); 244 QString ss(statStr.upper());
245 245
246 if (ss == "X-ACTION") 246 if (ss == "X-ACTION")
247 mStatus = NEEDS_ACTION; 247 mStatus = NEEDS_ACTION;
248 else if (ss == "NEEDS ACTION") 248 else if (ss == "NEEDS ACTION")
249 mStatus = NEEDS_ACTION; 249 mStatus = NEEDS_ACTION;
250 else if (ss == "ACCEPTED") 250 else if (ss == "ACCEPTED")
251 mStatus = ACCEPTED; 251 mStatus = ACCEPTED;
252 else if (ss == "SENT") 252 else if (ss == "SENT")
253 mStatus = SENT; 253 mStatus = SENT;
254 else if (ss == "TENTATIVE") 254 else if (ss == "TENTATIVE")
255 mStatus = TENTATIVE; 255 mStatus = TENTATIVE;
256 else if (ss == "CONFIRMED") 256 else if (ss == "CONFIRMED")
257 mStatus = CONFIRMED; 257 mStatus = CONFIRMED;
258 else if (ss == "DECLINED") 258 else if (ss == "DECLINED")
259 mStatus = DECLINED; 259 mStatus = DECLINED;
260 else if (ss == "COMPLETED") 260 else if (ss == "COMPLETED")
261 mStatus = COMPLETED; 261 mStatus = COMPLETED;
262 else if (ss == "DELEGATED") 262 else if (ss == "DELEGATED")
263 mStatus = DELEGATED; 263 mStatus = DELEGATED;
264 264
265 updated(); 265 updated();
266} 266}
267 267
268void Todo::setStatus(int status) 268void Todo::setStatus(int status)
269{ 269{
270 if (mReadOnly) return; 270 if (mReadOnly) return;
271 mStatus = status; 271 mStatus = status;
272 updated(); 272 updated();
273} 273}
274 274
275int Todo::status() const 275int Todo::status() const
276{ 276{
277 return mStatus; 277 return mStatus;
278} 278}
279 279
280QString Todo::statusStr() const 280QString Todo::statusStr() const
281{ 281{
282 switch(mStatus) { 282 switch(mStatus) {
283 case NEEDS_ACTION: 283 case NEEDS_ACTION:
284 return QString("NEEDS ACTION"); 284 return QString("NEEDS ACTION");
285 break; 285 break;
286 case ACCEPTED: 286 case ACCEPTED:
287 return QString("ACCEPTED"); 287 return QString("ACCEPTED");
288 break; 288 break;
289 case SENT: 289 case SENT:
290 return QString("SENT"); 290 return QString("SENT");
291 break; 291 break;
292 case TENTATIVE: 292 case TENTATIVE:
293 return QString("TENTATIVE"); 293 return QString("TENTATIVE");
294 break; 294 break;
295 case CONFIRMED: 295 case CONFIRMED:
296 return QString("CONFIRMED"); 296 return QString("CONFIRMED");
297 break; 297 break;
298 case DECLINED: 298 case DECLINED:
299 return QString("DECLINED"); 299 return QString("DECLINED");
300 break; 300 break;
301 case COMPLETED: 301 case COMPLETED:
302 return QString("COMPLETED"); 302 return QString("COMPLETED");
303 break; 303 break;
304 case DELEGATED: 304 case DELEGATED:
305 return QString("DELEGATED"); 305 return QString("DELEGATED");
306 break; 306 break;
307 } 307 }
308 return QString(""); 308 return QString("");
309} 309}
310#endif 310#endif
311 311
312bool Todo::isCompleted() const 312bool Todo::isCompleted() const
313{ 313{
314 if (mPercentComplete == 100) { 314 if (mPercentComplete == 100) {
315 return true; 315 return true;
316 } 316 }
317 else return false; 317 else return false;
318} 318}
319 319
320void Todo::setCompleted(bool completed) 320void Todo::setCompleted(bool completed)
321{ 321{
322 if ( mHasRecurrenceID && completed && mPercentComplete != 100 ) { 322 if ( mHasRecurrenceID && completed && mPercentComplete != 100 ) {
323 if ( !setRecurDates() ) 323 if ( !setRecurDates() )
324 completed = false; 324 completed = false;
325 } 325 }
326 if (completed) mPercentComplete = 100; 326 if (completed) mPercentComplete = 100;
327 else { 327 else {
328 mPercentComplete = 0; 328 mPercentComplete = 0;
329 mHasCompletedDate = false; 329 mHasCompletedDate = false;
330 } 330 }
331 updated(); 331 updated();
332} 332}
333 333
334QDateTime Todo::completed() const 334QDateTime Todo::completed() const
335{ 335{
336 return mCompleted; 336 return mCompleted;
337} 337}
338 338
339QString Todo::completedStr( bool shortF ) const 339QString Todo::completedStr( bool shortF ) const
340{ 340{
341 return KGlobal::locale()->formatDateTime(mCompleted, shortF); 341 return KGlobal::locale()->formatDateTime(mCompleted, shortF);
342} 342}
343 343
344void Todo::setCompleted(const QDateTime &completed) 344void Todo::setCompleted(const QDateTime &completed)
345{ 345{
346 //qDebug("Todo::setCompleted "); 346 //qDebug("Todo::setCompleted ");
347 if ( mHasCompletedDate ) { 347 if ( mHasCompletedDate ) {
348 // qDebug("has completed data - return "); 348 // qDebug("has completed data - return ");
349 return; 349 return;
350 } 350 }
351 mHasCompletedDate = true; 351 mHasCompletedDate = true;
352 mPercentComplete = 100; 352 mPercentComplete = 100;
353 mCompleted = getEvenTime(completed); 353 mCompleted = getEvenTime(completed);
354 updated(); 354 updated();
355} 355}
356 356
357bool Todo::hasCompletedDate() const 357bool Todo::hasCompletedDate() const
358{ 358{
359 return mHasCompletedDate; 359 return mHasCompletedDate;
360} 360}
361 361
362int Todo::percentComplete() const 362int Todo::percentComplete() const
363{ 363{
364 return mPercentComplete; 364 return mPercentComplete;
365} 365}
366bool Todo::setRecurDates() 366bool Todo::setRecurDates()
367{ 367{
368 if ( !mHasRecurrenceID ) 368 if ( !mHasRecurrenceID )
369 return true; 369 return true;
370 int secs = mDtStart.secsTo( dtDue() ); 370 int secs = mDtStart.secsTo( dtDue() );
371 bool ok; 371 bool ok;
372 qDebug("--------------------setRecurDates() "); 372 qDebug("T:setRecurDates() ");
373 //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); 373 //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() );
374 QDateTime next = getNextOccurence( mRecurrenceID, &ok ); 374 QDateTime next = getNextOccurence( mRecurrenceID, &ok );
375 if ( ok ) { 375 if ( ok ) {
376 mRecurrenceID = next; 376 mRecurrenceID = next;
377 mDtStart = next; 377 mDtStart = next;
378 setDtDue( next.addSecs( secs ) ); 378 setDtDue( next.addSecs( secs ) );
379 if ( QDateTime::currentDateTime() > next) 379 if ( QDateTime::currentDateTime() > next)
380 return false; 380 return false;
381 } else { 381 } else {
382 setHasRecurrenceID( false ); 382 setHasRecurrenceID( false );
383 recurrence()->unsetRecurs(); 383 recurrence()->unsetRecurs();
384 } 384 }
385 return true; 385 return true;
386} 386}
387void Todo::setPercentComplete(int v) 387void Todo::setPercentComplete(int v)
388{ 388{
389 if ( mHasRecurrenceID && v == 100 && mPercentComplete != 100 ) { 389 if ( mHasRecurrenceID && v == 100 && mPercentComplete != 100 ) {
390 if ( !setRecurDates() ) 390 if ( !setRecurDates() )
391 v = 0; 391 v = 0;
392 } 392 }
393 mPercentComplete = v; 393 mPercentComplete = v;
394 if ( v != 100 ) 394 if ( v != 100 )
395 mHasCompletedDate = false; 395 mHasCompletedDate = false;
396 updated(); 396 updated();
397} 397}
398QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const 398QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const
399{ 399{
400 if ( isCompleted() || ! hasDueDate() || cancelled() ) { 400 if ( isCompleted() || ! hasDueDate() || cancelled() ) {
401 *ok = false; 401 *ok = false;
402 return QDateTime (); 402 return QDateTime ();
403 } 403 }
404 QDateTime incidenceStart; 404 QDateTime incidenceStart;
405 incidenceStart = dtDue(); 405 incidenceStart = dtDue();
406 bool enabled = false; 406 bool enabled = false;
407 Alarm* alarm; 407 Alarm* alarm;
408 int off = 0; 408 int off = 0;
409 QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );; 409 QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );;
410 // if ( QDateTime::currentDateTime() > incidenceStart ){ 410 // if ( QDateTime::currentDateTime() > incidenceStart ){
411// *ok = false; 411// *ok = false;
412// return incidenceStart; 412// return incidenceStart;
413// } 413// }
414 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { 414 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
415 if (alarm->enabled()) { 415 if (alarm->enabled()) {
416 if ( alarm->hasTime () ) { 416 if ( alarm->hasTime () ) {
417 if ( alarm->time() < alarmStart ) { 417 if ( alarm->time() < alarmStart ) {
418 alarmStart = alarm->time(); 418 alarmStart = alarm->time();
419 enabled = true; 419 enabled = true;
420 off = alarmStart.secsTo( incidenceStart ); 420 off = alarmStart.secsTo( incidenceStart );
421 } 421 }
422 422
423 } else { 423 } else {
424 int secs = alarm->startOffset().asSeconds(); 424 int secs = alarm->startOffset().asSeconds();
425 if ( incidenceStart.addSecs( secs ) < alarmStart ) { 425 if ( incidenceStart.addSecs( secs ) < alarmStart ) {
426 alarmStart = incidenceStart.addSecs( secs ); 426 alarmStart = incidenceStart.addSecs( secs );
427 enabled = true; 427 enabled = true;
428 off = -secs; 428 off = -secs;
429 } 429 }
430 } 430 }
431 } 431 }
432 } 432 }
433 if ( enabled ) { 433 if ( enabled ) {
434 if ( alarmStart > QDateTime::currentDateTime() ) { 434 if ( alarmStart > QDateTime::currentDateTime() ) {
435 *ok = true; 435 *ok = true;
436 * offset = off; 436 * offset = off;
437 return alarmStart; 437 return alarmStart;
438 } 438 }
439 } 439 }
440 *ok = false; 440 *ok = false;
441 return QDateTime (); 441 return QDateTime ();
442 442
443} 443}
444 444
445void Todo::checkSetCompletedFalse() 445void Todo::checkSetCompletedFalse()
446{ 446{
447 if ( !hasRecurrenceID() ) { 447 if ( !hasRecurrenceID() ) {
448 qDebug("ERROR 1 in Todo::checkSetCompletedFalse"); 448 qDebug("ERROR 1 in Todo::checkSetCompletedFalse");
449 } 449 }
450 // qDebug("Todo::checkSetCompletedFalse()"); 450 // qDebug("Todo::checkSetCompletedFalse()");
451 //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); 451 //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() );
452 if ( mPercentComplete == 100 && mDtStart == mRecurrenceID && QDateTime::currentDateTime() > mDtStart) { 452 if ( mPercentComplete == 100 && mDtStart == mRecurrenceID && QDateTime::currentDateTime() > mDtStart) {
453 qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); 453 qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() );
454 setCompleted( false ); 454 setCompleted( false );
455 qDebug("Todo::checkSetCompletedFalse++++++++++++++++++++++++++++ "); 455 qDebug("Todo::checkSetCompletedFalse ");
456 } 456 }
457} 457}