summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt2
-rw-r--r--korganizer/calendarview.cpp8
2 files changed, 5 insertions, 5 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 6723dc5..0b928ef 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -763,781 +763,781 @@
763{ "Configure Toolbar","Konfiguriere Toolbar" }, 763{ "Configure Toolbar","Konfiguriere Toolbar" },
764{ "Stretched TB","Gedehnte TB" }, 764{ "Stretched TB","Gedehnte TB" },
765{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 765{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
766{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 766{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
767{ "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" }, 767{ "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" },
768{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 768{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
769{ "Imported file successfully","Datei erfolgreich importiert" }, 769{ "Imported file successfully","Datei erfolgreich importiert" },
770{ "Error importing file","Fehler beim Importieren der Datei" }, 770{ "Error importing file","Fehler beim Importieren der Datei" },
771{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 771{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
772{ "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" }, 772{ "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" },
773{ "Overwrite!","Überschreiben!" }, 773{ "Overwrite!","Überschreiben!" },
774{ "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" }, 774{ "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" },
775{ "Load backup filename","Lade Backup Dateiname" }, 775{ "Load backup filename","Lade Backup Dateiname" },
776{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 776{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
777{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 777{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
778{ "Save backup filename","Speichere Backup Dateiname" }, 778{ "Save backup filename","Speichere Backup Dateiname" },
779{ "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" }, 779{ "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" },
780{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 780{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
781{ "Details of attendee","Teilnehmerdetails" }, 781{ "Details of attendee","Teilnehmerdetails" },
782{ "Work phone:\n","Telefon Arbeit:\n" }, 782{ "Work phone:\n","Telefon Arbeit:\n" },
783{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 783{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
784{ "Home phone:\n","Telefon privat:\n" }, 784{ "Home phone:\n","Telefon privat:\n" },
785{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 785{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
786{ "Email:\n","Email:\n" }, 786{ "Email:\n","Email:\n" },
787{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 787{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
788{ "Audio Al.: ","Audio Al.: " }, 788{ "Audio Al.: ","Audio Al.: " },
789{ "Proc.Al.: ","Proz.Al.: " }, 789{ "Proc.Al.: ","Proz.Al.: " },
790{ "No sound set","Kein Sound definiert" }, 790{ "No sound set","Kein Sound definiert" },
791{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 791{ "*.wav|Wav Files","*.wav|Wav Dateien" },
792{ "No program set","Kein Programm definiert" }, 792{ "No program set","Kein Programm definiert" },
793{ "Running '%1'","Ausführen '%1'" }, 793{ "Running '%1'","Ausführen '%1'" },
794{ "Playing '%1'","Abspielen '%1'" }, 794{ "Playing '%1'","Abspielen '%1'" },
795{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 795{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
796{ "Load!","Laden!" }, 796{ "Load!","Laden!" },
797{ "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" }, 797{ "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" },
798{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 798{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
799{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 799{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
800{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 800{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
801{ "Features + hints...","Eigenschaften + Tipps..." }, 801{ "Features + hints...","Eigenschaften + Tipps..." },
802{ "User translation...","Benutzer Übersetzung..." }, 802{ "User translation...","Benutzer Übersetzung..." },
803{ "Sync HowTo...","Synchronisation HowTo..." }, 803{ "Sync HowTo...","Synchronisation HowTo..." },
804{ "Print calendar...","Drucke Kalender..." }, 804{ "Print calendar...","Drucke Kalender..." },
805{ "Anniversary","Jahrestag" }, 805{ "Anniversary","Jahrestag" },
806{ "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" }, 806{ "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" },
807{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 807{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
808{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 808{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
809{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 809{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
810{ "<b>Access: </b>","<b>Zugriff: </b>" }, 810{ "<b>Access: </b>","<b>Zugriff: </b>" },
811{ "(%1 min before)","(%1 min vorher)" }, 811{ "(%1 min before)","(%1 min vorher)" },
812{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 812{ "<b>Categories: </b>","<b>Kategorien: </b>" },
813{ "Save Journal/Description...","Speichere Journal/Details..." }, 813{ "Save Journal/Description...","Speichere Journal/Details..." },
814{ "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." }, 814{ "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." },
815{ "Continue","Weitermachen" }, 815{ "Continue","Weitermachen" },
816{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 816{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
817{ "Attendee:","Teilnehmer:" }, 817{ "Attendee:","Teilnehmer:" },
818{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 818{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
819{ "On day ","Am Tag " }, 819{ "On day ","Am Tag " },
820{ "%1 of ","%1 des Monats" }, 820{ "%1 of ","%1 des Monats" },
821{ "%1 of the year","%1 des Jahres" }, 821{ "%1 of the year","%1 des Jahres" },
822{ "Anonymous","Anonymo" }, 822{ "Anonymous","Anonymo" },
823{ "nobody@nowhere","niemand@nirgendwo" }, 823{ "nobody@nowhere","niemand@nirgendwo" },
824{ "calendar.html","calendar.html" }, 824{ "calendar.html","calendar.html" },
825{ " Local Time"," Lokale Zeit" }, 825{ " Local Time"," Lokale Zeit" },
826{ "Unknown Name","Unbekannter Name" }, 826{ "Unknown Name","Unbekannter Name" },
827{ "unknown@nowhere","unbekannt@nirgendwo" }, 827{ "unknown@nowhere","unbekannt@nirgendwo" },
828{ "Beam via IR!","Beam via IR!" }, 828{ "Beam via IR!","Beam via IR!" },
829{ "Next Month","Nächster Monat" }, 829{ "Next Month","Nächster Monat" },
830{ "Prio","Prio" }, 830{ "Prio","Prio" },
831{ "Reparent Todo","Mache Sub-Todo" }, 831{ "Reparent Todo","Mache Sub-Todo" },
832{ "tomorrow","morgen" }, 832{ "tomorrow","morgen" },
833{ "today","heute" }, 833{ "today","heute" },
834{ "yesterday","gestern" }, 834{ "yesterday","gestern" },
835{ "Ok","Ok" }, 835{ "Ok","Ok" },
836{ "Ok+Agenda","Ok+Agenda" }, 836{ "Ok+Agenda","Ok+Agenda" },
837{ "Email","Email" }, 837{ "Email","Email" },
838{ "RSVP","RSVP" }, 838{ "RSVP","RSVP" },
839{ "Email:","Email:" }, 839{ "Email:","Email:" },
840{ "Appointment Time ","Termin Zeit " }, 840{ "Appointment Time ","Termin Zeit " },
841{ "2","2" }, 841{ "2","2" },
842{ "3","3" }, 842{ "3","3" },
843{ "4","4" }, 843{ "4","4" },
844{ " 0 %"," 0 %" }, 844{ " 0 %"," 0 %" },
845{ " 20 %"," 20 %" }, 845{ " 20 %"," 20 %" },
846{ " 40 %"," 40 %" }, 846{ " 40 %"," 40 %" },
847{ " 60 %"," 60 %" }, 847{ " 60 %"," 60 %" },
848{ " 80 %"," 80 %" }, 848{ " 80 %"," 80 %" },
849{ "100 %","100 %" }, 849{ "100 %","100 %" },
850{ "Filter","Filter" }, 850{ "Filter","Filter" },
851{ "Configure","Konfiguriere" }, 851{ "Configure","Konfiguriere" },
852{ "What's Next","What's Next" }, 852{ "What's Next","What's Next" },
853{ "Complete calendar...","Kompletten Kalender..." }, 853{ "Complete calendar...","Kompletten Kalender..." },
854{ "Filtered calendar...","Gefilterten Kalender..." }, 854{ "Filtered calendar...","Gefilterten Kalender..." },
855{ "Export to phone","Exportiere zum Handy" }, 855{ "Export to phone","Exportiere zum Handy" },
856{ "Beam receive enabled","Beam Empfang an" }, 856{ "Beam receive enabled","Beam Empfang an" },
857{ "What's new?","Was ist neu?" }, 857{ "What's new?","Was ist neu?" },
858{ "FAQ...","FAQ..." }, 858{ "FAQ...","FAQ..." },
859{ "Licence...","Licence..." }, 859{ "Licence...","Licence..." },
860{ "What's This?","What's This?" }, 860{ "What's This?","What's This?" },
861{ "&Edit...","Bearbeite..." }, 861{ "&Edit...","Bearbeite..." },
862{ "Oktober","Oktober" }, 862{ "Oktober","Oktober" },
863{ "Title","Titel" }, 863{ "Title","Titel" },
864{ "%1 %","%1 %" }, 864{ "%1 %","%1 %" },
865{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 865{ "Enable Pi-Sync","Schalte Pi-Sync an" },
866{ "Import!","Importiere!" }, 866{ "Import!","Importiere!" },
867{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 867{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
868{ "Export to phone options","Export ans Handy Optionen" }, 868{ "Export to phone options","Export ans Handy Optionen" },
869{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 869{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
870{ "I/O device: ","I/O device: " }, 870{ "I/O device: ","I/O device: " },
871{ "Connection: ","Connection: " }, 871{ "Connection: ","Connection: " },
872{ "Model(opt.): ","Model(opt.): " }, 872{ "Model(opt.): ","Model(opt.): " },
873{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 873{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
874{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 874{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
875{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" }, 875{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" },
876{ "Export to mobile phone!","Exportiere auf das Handy!" }, 876{ "Export to mobile phone!","Exportiere auf das Handy!" },
877{ "Export complete calendar","Exportiere kompletten Kalender" }, 877{ "Export complete calendar","Exportiere kompletten Kalender" },
878{ "Writing to phone...","Sende Daten ans Handy..." }, 878{ "Writing to phone...","Sende Daten ans Handy..." },
879{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 879{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
880{ "Retry","Nochmal versuchen" }, 880{ "Retry","Nochmal versuchen" },
881{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 881{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
882{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 882{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
883{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 883{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
884{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 884{ "Export filtered calendar","Exportiere gefilterten Kalender" },
885{ "Preferences","Vorlieben" }, 885{ "Preferences","Vorlieben" },
886{ "Global","Global" }, 886{ "Global","Global" },
887{ "Phone","Phone" }, 887{ "Phone","Phone" },
888{ "SMS","SMS" }, 888{ "SMS","SMS" },
889{ "Fax","Fax" }, 889{ "Fax","Fax" },
890{ "Pager","Pager" }, 890{ "Pager","Pager" },
891{ "SIP","SIP" }, 891{ "SIP","SIP" },
892{ "Italian","Italienisch" }, 892{ "Italian","Italienisch" },
893{ "24:00","24:00" }, 893{ "24:00","24:00" },
894{ "12:00am","12:00am" }, 894{ "12:00am","12:00am" },
895{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 895{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
896{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 896{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
897{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 897{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
898{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 898{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
899{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 899{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
900{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 900{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
901{ "Used Mail Client","Benutzter Mail Client" }, 901{ "Used Mail Client","Benutzter Mail Client" },
902{ "Channel:","Channel:" }, 902{ "Channel:","Channel:" },
903{ "Message:","Message:" }, 903{ "Message:","Message:" },
904{ "Parameters:","Parameter:" }, 904{ "Parameters:","Parameter:" },
905{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 905{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
906{ "extra Message:","extra Message:" }, 906{ "extra Message:","extra Message:" },
907{ "extra Parameters:","extra Parameter:" }, 907{ "extra Parameters:","extra Parameter:" },
908{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 908{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
909{ "External Apps.","Externe Appl." }, 909{ "External Apps.","Externe Appl." },
910{ "24 hours","24 Std." }, 910{ "24 hours","24 Std." },
911{ "3 hours","3 Std." }, 911{ "3 hours","3 Std." },
912{ "1 hour","1 Std." }, 912{ "1 hour","1 Std." },
913{ "15 minutes","15 Min." }, 913{ "15 minutes","15 Min." },
914{ "5 minutes","5 Min." }, 914{ "5 minutes","5 Min." },
915{ "1 minute","1 Min." }, 915{ "1 minute","1 Min." },
916{ "23","23" }, 916{ "23","23" },
917{ "Mon 15","Mon 15" }, 917{ "Mon 15","Mon 15" },
918{ "Configure KO","Konfiguriere KO" }, 918{ "Configure KO","Konfiguriere KO" },
919{ "Event text","Termin Text" }, 919{ "Event text","Termin Text" },
920{ "ToDo","Todo" }, 920{ "ToDo","Todo" },
921{ "Today","Heute" }, 921{ "Today","Heute" },
922{ "What's Next View","What's Next Ansicht" }, 922{ "What's Next View","What's Next Ansicht" },
923{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 923{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
924{ "Alarm","Alarm" }, 924{ "Alarm","Alarm" },
925{ "Used %1 Client","Benutzter %1 Client" }, 925{ "Used %1 Client","Benutzter %1 Client" },
926{ "No email client installed","Kein Email Klient installiert" }, 926{ "No email client installed","Kein Email Klient installiert" },
927{ "Userdefined email client","Benutzerdef. Email Klient" }, 927{ "Userdefined email client","Benutzerdef. Email Klient" },
928{ "OM/Pi email client","OM/Pi Email Klient" }, 928{ "OM/Pi email client","OM/Pi Email Klient" },
929{ "Include in multiple ","Beziehe in multiple " }, 929{ "Include in multiple ","Beziehe in multiple " },
930{ "calendar ","Kalender " }, 930{ "calendar ","Kalender " },
931{ "addressbook ","Adressbuch " }, 931{ "addressbook ","Adressbuch " },
932{ "pwmanager","PWmanager" }, 932{ "pwmanager","PWmanager" },
933{ " sync"," Sync ein" }, 933{ " sync"," Sync ein" },
934{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 934{ "Write back synced data","Schreibe gesyncte Daten zurück" },
935{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 935{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
936{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 936{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
937{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 937{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
938{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 938{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
939{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 939{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
940{ "Help...","Hilfe..." }, 940{ "Help...","Hilfe..." },
941{ "Local file Cal:","Lokale Datei Kal:" }, 941{ "Local file Cal:","Lokale Datei Kal:" },
942{ "Local file ABook:","Lokale Datei ABuch:" }, 942{ "Local file ABook:","Lokale Datei ABuch:" },
943{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 943{ "Local file PWMgr:","Lokale Datei PWMgr:" },
944{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 944{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
945{ "Calendar:","Kalender:" }, 945{ "Calendar:","Kalender:" },
946{ "AddressBook:","AdressBuch:" }, 946{ "AddressBook:","AdressBuch:" },
947{ "PWManager:","PWManager:" }, 947{ "PWManager:","PWManager:" },
948{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 948{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
949{ "ssh/scp","ssh/scp" }, 949{ "ssh/scp","ssh/scp" },
950{ "ftp","ftp" }, 950{ "ftp","ftp" },
951{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 951{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
952{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 952{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
953{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 953{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
954{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 954{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
955{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 955{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
956{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 956{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
957{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 957{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
958{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 958{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
959{ "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" }, 959{ "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" },
960{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 960{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
961{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 961{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
962{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 962{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
963{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 963{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
964{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 964{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
965{ "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!" }, 965{ "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!" },
966{ "KDE-Pim Sync","KDE-Pim Sync" }, 966{ "KDE-Pim Sync","KDE-Pim Sync" },
967{ "Multiple profiles","Multi-Sync Profile" }, 967{ "Multiple profiles","Multi-Sync Profile" },
968{ "Device: ","Gerät: " }, 968{ "Device: ","Gerät: " },
969{ "Multiple sync started.","Multi-Sync gestartet." }, 969{ "Multiple sync started.","Multi-Sync gestartet." },
970{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 970{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
971{ "Turn filter on","Schalte Filter an" }, 971{ "Turn filter on","Schalte Filter an" },
972{ "Turn filter off","Schalte Filter aus" }, 972{ "Turn filter off","Schalte Filter aus" },
973{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 973{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
974{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 974{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
975{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 975{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
976{ "<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" }, 976{ "<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" },
977{ "<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" }, 977{ "<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" },
978{ "<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" }, 978{ "<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" },
979{ "<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" }, 979{ "<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" },
980{ "<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" }, 980{ "<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" },
981{ "<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" }, 981{ "<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" },
982{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 982{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
983{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 983{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
984{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 984{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
985{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 985{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
986{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 986{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
987{ "<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" }, 987{ "<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" },
988{ "<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" }, 988{ "<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" },
989{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 989{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
990{ "<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" }, 990{ "<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" },
991{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 991{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
992{ "<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" }, 992{ "<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" },
993{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 993{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
994{ "<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" }, 994{ "<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" },
995{ "<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" }, 995{ "<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" },
996{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 996{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
997{ "<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" }, 997{ "<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" },
998{ "<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" }, 998{ "<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" },
999{ "<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" }, 999{ "<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" },
1000{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1000{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1001{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1001{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1002{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1002{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1003{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1003{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1004{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1004{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1005{ "<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" }, 1005{ "<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" },
1006{ "<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" }, 1006{ "<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" },
1007{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1007{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1008{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1008{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1009{ "<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" }, 1009{ "<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" },
1010{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" }, 1010{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" },
1011{ "<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" }, 1011{ "<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" },
1012{ "<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" }, 1012{ "<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" },
1013{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, 1013{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" },
1014{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" }, 1014{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" },
1015{ "<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" }, 1015{ "<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" },
1016{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " }, 1016{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " },
1017{ "<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" }, 1017{ "<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" },
1018{ "<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" }, 1018{ "<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" },
1019{ "<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" }, 1019{ "<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" },
1020{ "<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" }, 1020{ "<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" },
1021{ "<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" }, 1021{ "<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" },
1022{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1022{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1023{ "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" }, 1023{ "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" },
1024{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1024{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1025{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1025{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1026{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1026{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1027{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, 1027{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" },
1028{ "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" }, 1028{ "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" },
1029{ "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" }, 1029{ "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" },
1030{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1030{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1031{ "KO/Pi FAQ","KO/Pi FAQ" }, 1031{ "KO/Pi FAQ","KO/Pi FAQ" },
1032{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1032{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1033{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1033{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1034{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1034{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1035{ "From: ","Von: " }, 1035{ "From: ","Von: " },
1036{ "Remove sync info","Entferne Sync Info" }, 1036{ "Remove sync info","Entferne Sync Info" },
1037{ "For all profiles","Für alle Profile" }, 1037{ "For all profiles","Für alle Profile" },
1038{ "Hide not Running","Verstecke nicht Laufende" }, 1038{ "Hide not Running","Verstecke nicht Laufende" },
1039{ "ME","ME" }, 1039{ "ME","ME" },
1040{ "Toolbar","Toolbar" }, 1040{ "Toolbar","Toolbar" },
1041{ "Undo Delete...","UNDO Löschen..." }, 1041{ "Undo Delete...","UNDO Löschen..." },
1042{ "Undo Delete","Löschen rückgängig machen" }, 1042{ "Undo Delete","Löschen rückgängig machen" },
1043{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1043{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1044{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1044{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1045{ "Januar","Januar" }, 1045{ "Januar","Januar" },
1046{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1046{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1047{ "No Filter","Kein Filter" }, 1047{ "No Filter","Kein Filter" },
1048{ "Multiple Sync options","Multi Sync Optionen" }, 1048{ "Multiple Sync options","Multi Sync Optionen" },
1049{ "Sync algo options","Sync Ablauf Optionen" }, 1049{ "Sync algo options","Sync Ablauf Optionen" },
1050{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1050{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1051{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1051{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1052{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1052{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1053{ "Write back options","Optionen zum Zurückschreiben" }, 1053{ "Write back options","Optionen zum Zurückschreiben" },
1054{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1054{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1055{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1055{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1056{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1056{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1057{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1057{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1058{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1058{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1059{ "Time period","Zeitspanne" }, 1059{ "Time period","Zeitspanne" },
1060{ "From ","Von " }, 1060{ "From ","Von " },
1061{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1061{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1062{ " weeks in the future "," Wochen in der Zukunft " }, 1062{ " weeks in the future "," Wochen in der Zukunft " },
1063{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1063{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1064{ "Local temp file:","Lokale temp Datei:" }, 1064{ "Local temp file:","Lokale temp Datei:" },
1065{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1065{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1066{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1066{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1067{ "Language","Sprache" }, 1067{ "Language","Sprache" },
1068{ "Time Format","Zeit Format" }, 1068{ "Time Format","Zeit Format" },
1069{ "Time Zone","Zeit Zone" }, 1069{ "Time Zone","Zeit Zone" },
1070{ "%1 groups subscribed","%1 Guppen abboniert" }, 1070{ "%1 groups subscribed","%1 Guppen abboniert" },
1071{ "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" }, 1071{ "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" },
1072{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1072{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1073{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1073{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1074{ "Save settings","Speichere Einstellungen" }, 1074{ "Save settings","Speichere Einstellungen" },
1075{ "Save standard","Speichere Standard" }, 1075{ "Save standard","Speichere Standard" },
1076{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1076{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1077{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1077{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1078{ "Data storage path","Daten Speicherpfad" }, 1078{ "Data storage path","Daten Speicherpfad" },
1079{ "Language","Sprache" }, 1079{ "Language","Sprache" },
1080{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1080{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1081{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1081{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1082{ "Show events that are done","Zeige abgelaufene Termine" }, 1082{ "Show events that are done","Zeige abgelaufene Termine" },
1083{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1083{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1084{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1084{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1085{ "KO/Pi","KO/Pi" }, 1085{ "KO/Pi","KO/Pi" },
1086{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1086{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1087{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1087{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1088{ "Sound.Al.: ","Sound.Al.: " }, 1088{ "Sound.Al.: ","Sound.Al.: " },
1089{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1089{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1090{ "Restore","Wiederherstellen" }, 1090{ "Restore","Wiederherstellen" },
1091{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" }, 1091{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" },
1092{ "% completed","% erledigt" }, 1092{ "% completed","% erledigt" },
1093{ "%d item(s) found.","%d Item(s) gefunden." }, 1093{ "%d item(s) found.","%d Item(s) gefunden." },
1094{ "Set complete","Setze auf erledigt" }, 1094{ "Set complete","Setze auf erledigt" },
1095{ "(cancelled)","(gecancelt)" }, 1095{ "(cancelled)","(gecancelt)" },
1096{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1096{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1097{ " Local time "," Lokale Zeit " }, 1097{ " Local time "," Lokale Zeit " },
1098{ "Form2","Form2" }, 1098{ "Form2","Form2" },
1099{ "Filter enabled","Filter angeschaltet" }, 1099{ "Filter enabled","Filter angeschaltet" },
1100{ "Edit Filters","Ändere Filter" }, 1100{ "Edit Filters","Ändere Filter" },
1101{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1101{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1102{ "Agenda","Agenda" }, 1102{ "Agenda","Agenda" },
1103{ " ("," (" }, 1103{ " ("," (" },
1104{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1104{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1105{ "Print","Print" }, 1105{ "Print","Print" },
1106{ "&Setup Printer...","Drucker &Setup..." }, 1106{ "&Setup Printer...","Drucker &Setup..." },
1107{ "View Type","Zeige Typ" }, 1107{ "View Type","Zeige Typ" },
1108{ "Page &orientation:","Seiten Ausrichtung:" }, 1108{ "Page &orientation:","Seiten Ausrichtung:" },
1109{ "Use Default of Selected Style","Default des selektierten Stils" }, 1109{ "Use Default of Selected Style","Default des selektierten Stils" },
1110{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1110{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1111{ "Portrait","Portrait" }, 1111{ "Portrait","Portrait" },
1112{ "Landscape","Landschaft" }, 1112{ "Landscape","Landschaft" },
1113{ "Print day","Drucke Tag" }, 1113{ "Print day","Drucke Tag" },
1114{ "CalPrintDay_Base","CalPrintDay_Base" }, 1114{ "CalPrintDay_Base","CalPrintDay_Base" },
1115{ "Date && Time Range","Datum && Zeitspanne" }, 1115{ "Date && Time Range","Datum && Zeitspanne" },
1116{ "&End date:","&Enddatum:" }, 1116{ "&End date:","&Enddatum:" },
1117{ "&Start date:","&Startdatum:" }, 1117{ "&Start date:","&Startdatum:" },
1118{ "Start &time:","Startzeit:" }, 1118{ "Start &time:","Startzeit:" },
1119{ "End ti&me:","Endzeit:" }, 1119{ "End ti&me:","Endzeit:" },
1120{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1120{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1121{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1121{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1122{ "Alt+D","Alt+D" }, 1122{ "Alt+D","Alt+D" },
1123{ "&Use colors","Nutze Farben" }, 1123{ "&Use colors","Nutze Farben" },
1124{ "Alt+U","Alt+U" }, 1124{ "Alt+U","Alt+U" },
1125{ "Print week","Drucke Woche" }, 1125{ "Print week","Drucke Woche" },
1126{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1126{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1127{ "Use &colors","Nutze Farben" }, 1127{ "Use &colors","Nutze Farben" },
1128{ "Type of View","Typ der Ansicht" }, 1128{ "Type of View","Typ der Ansicht" },
1129{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1129{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1130{ "Alt+F","Alt+F" }, 1130{ "Alt+F","Alt+F" },
1131{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1131{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1132{ "Alt+T","Alt+T" }, 1132{ "Alt+T","Alt+T" },
1133{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1133{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1134{ "Print month","Drucke Monat" }, 1134{ "Print month","Drucke Monat" },
1135{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1135{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1136{ "&Start month:","&Startmonat:" }, 1136{ "&Start month:","&Startmonat:" },
1137{ "&End month:","&Endmonat:" }, 1137{ "&End month:","&Endmonat:" },
1138{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1138{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1139{ "Print todos","Drucke Todos" }, 1139{ "Print todos","Drucke Todos" },
1140{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1140{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1141{ "Include &description of the item","Inclusive Itembeschreibung" }, 1141{ "Include &description of the item","Inclusive Itembeschreibung" },
1142{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1142{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1143{ "Include &priority of the item","Inclusive Priorität des Items" }, 1143{ "Include &priority of the item","Inclusive Priorität des Items" },
1144{ "Items to Print","Zu druckende Items" }, 1144{ "Items to Print","Zu druckende Items" },
1145{ "&From:","Von:" }, 1145{ "&From:","Von:" },
1146{ "&To:","Bis:" }, 1146{ "&To:","Bis:" },
1147{ "Print &all todo items","Drucke alle Todo Items" }, 1147{ "Print &all todo items","Drucke alle Todo Items" },
1148{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1148{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1149{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1149{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1150{ "Todo List","Todo Liste" }, 1150{ "Todo List","Todo Liste" },
1151{ "&Title:","&Titel:" }, 1151{ "&Title:","&Titel:" },
1152{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" }, 1152{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" },
1153{ "Todo list","Todo Liste" }, 1153{ "Todo list","Todo Liste" },
1154{ "&Print...","Drucke..." }, 1154{ "&Print...","Drucke..." },
1155{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1155{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1156{ "[Unconfigured]","[Unkonfiguriert]" }, 1156{ "[Unconfigured]","[Unkonfiguriert]" },
1157{ "OK","OK" }, 1157{ "OK","OK" },
1158{ "FilterEditor","FilterEditor" }, 1158{ "FilterEditor","FilterEditor" },
1159{ "Include","Inclusive" }, 1159{ "Include","Inclusive" },
1160{ "Exclude","Exclusive" }, 1160{ "Exclude","Exclusive" },
1161{ "Edit Selection...","Editiere Auswahl" }, 1161{ "Edit Selection...","Editiere Auswahl" },
1162{ "recurring events","wiederholende Termine" }, 1162{ "recurring events","wiederholende Termine" },
1163{ "recurr. events","wiederh.Termine" }, 1163{ "recurr. events","wiederh.Termine" },
1164{ "completed to-dos","erledigte Todos" }, 1164{ "completed to-dos","erledigte Todos" },
1165{ "events","Termine" }, 1165{ "events","Termine" },
1166{ "todos","Todos" }, 1166{ "todos","Todos" },
1167{ "journals","Journale" }, 1167{ "journals","Journale" },
1168{ "public","öffentl." }, 1168{ "public","öffentl." },
1169{ "private","privat" }, 1169{ "private","privat" },
1170{ "confidential","vertraul." }, 1170{ "confidential","vertraul." },
1171{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" }, 1171{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" },
1172{ "Yesterday","Gestern" }, 1172{ "Yesterday","Gestern" },
1173{ "Day after tomorrow","Übermorgen" }, 1173{ "Day after tomorrow","Übermorgen" },
1174{ "Tomorrow","Morgen" }, 1174{ "Tomorrow","Morgen" },
1175{ "Day before yesterday","Vorgestern" }, 1175{ "Day before yesterday","Vorgestern" },
1176{ "Size %1","Größe %1" }, 1176{ "Size %1","Größe %1" },
1177{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1177{ "New Agendasize: %1","Neue Agendagröße: %1" },
1178{ " (%1 y.)"," (%1 J.)" }, 1178{ " (%1 y.)"," (%1 J.)" },
1179{ "Allday:","Ganztägig:" }, 1179{ "Allday:","Ganztägig:" },
1180{ "compl.todos","erled.Todos" }, 1180{ "compl.todos","erled.Todos" },
1181{ "Day view","Tagesansicht" }, 1181{ "Day view","Tagesansicht" },
1182{ "Next days","Nächste Tage" }, 1182{ "Next days","Nächste Tage" },
1183{ "Next week","Nächste Woche" }, 1183{ "Next week","Nächste Woche" },
1184{ "Next two weeks","Nächste zwei Wochen" }, 1184{ "Next two weeks","Nächste zwei Wochen" },
1185{ "This month","Dieser Monat" }, 1185{ "This month","Dieser Monat" },
1186{ "Journal view","Journal" }, 1186{ "Journal view","Journal" },
1187{ "Display all opened","Zeige alle geöffnet" }, 1187{ "Display all opened","Zeige alle geöffnet" },
1188{ "Display all closed","Zeige alle geschlossen" }, 1188{ "Display all closed","Zeige alle geschlossen" },
1189{ "Display all flat","Zeige alle flach" }, 1189{ "Display all flat","Zeige alle flach" },
1190{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1190{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1191{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1191{ "Default todo done color:","Standard Todo erledigt Farbe" },
1192{ "Select week %1-%2","Wähle Woche %1-%2" }, 1192{ "Select week %1-%2","Wähle Woche %1-%2" },
1193{ "Select Week","Wähle Woche" }, 1193{ "Select Week","Wähle Woche" },
1194{ "Set alarm...","Setze Alarm..." }, 1194{ "Set alarm...","Setze Alarm..." },
1195{ "Set Alarm!","Setze Alarm!" }, 1195{ "Set Alarm!","Setze Alarm!" },
1196{ "Changed alarm for %1 items","Alarm für %1 Items geändert" }, 1196{ "Changed alarm for %1 items","Alarm für %1 Items geändert" },
1197{ " and "," und " }, 1197{ " and "," und " },
1198{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1198{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1199{ "Mail to selected","Mail an Ausgewählte" }, 1199{ "Mail to selected","Mail an Ausgewählte" },
1200{ "Mail to all","Mail an Alle" }, 1200{ "Mail to all","Mail an Alle" },
1201{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1201{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1202{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1202{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1203{ " on"," am" }, 1203{ " on"," am" },
1204{ " completed on "," erledigt am " }, 1204{ " completed on "," erledigt am " },
1205{ "Save as Event template","Speichere als Vorlage" }, 1205{ "Save as Event template","Speichere als Vorlage" },
1206{ "Load Event template","Lade Termin Vorlage" }, 1206{ "Load Event template","Lade Termin Vorlage" },
1207{ "Save as Journal template","Speichere als Journal Vorlage" }, 1207{ "Save as Journal template","Speichere als Journal Vorlage" },
1208{ "Insert Journal template","Füge Journal Vorlage ein" }, 1208{ "Insert Journal template","Füge Journal Vorlage ein" },
1209{ "Sub todos:<br>","Unter-Todos:<br>" }, 1209{ "Sub todos:<br>","Unter-Todos:<br>" },
1210{ "Parent todo:<br>","Über-Todo:<br>" }, 1210{ "Parent todo:<br>","Über-Todo:<br>" },
1211{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1211{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1212{ " completed"," erledigt" }, 1212{ " completed"," erledigt" },
1213{ "(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.info --- 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.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" }, 1213{ "(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.info --- 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.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" },
1214{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1214{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1215{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1215{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1216{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1216{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1217{ "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?" }, 1217{ "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?" },
1218{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1218{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1219{ "Error","Fehler" }, 1219{ "Error","Fehler" },
1220{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1220{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1221{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1221{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1222{ "Warning","Warnung" }, 1222{ "Warning","Warnung" },
1223{ "Select week number","Wähle Wochen Nummer" }, 1223{ "Select week number","Wähle Wochen Nummer" },
1224{ "Februar","Februar" }, 1224{ "Februar","Februar" },
1225{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1225{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1226{ "W","W" }, 1226{ "W","W" },
1227{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1227{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1228{ "T: %1","T: %1" }, 1228{ "T: %1","T: %1" },
1229{ "Start: ","Start: " }, 1229{ "Start: ","Start: " },
1230{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1230{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1231{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1231{ "Password for remote access:","Passwort für fernen Zugriff:" },
1232{ "Remote IP address:","Ferne IP Adresse:" }, 1232{ "Remote IP address:","Ferne IP Adresse:" },
1233{ "Remote port number:","Ferne Port Nummer:" }, 1233{ "Remote port number:","Ferne Port Nummer:" },
1234{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1234{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1235{ "Remote from: ","Fern von: " }, 1235{ "Remote from: ","Fern von: " },
1236{ "Local from: ","Lokal von: " }, 1236{ "Local from: ","Lokal von: " },
1237{ "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" }, 1237{ "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" },
1238{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1238{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1239{ "Write back","Schreibe zurück" }, 1239{ "Write back","Schreibe zurück" },
1240{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1240{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1241{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1241{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1242{ "Received sync request","Sync Anfrage erhalten" }, 1242{ "Received sync request","Sync Anfrage erhalten" },
1243{ "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." }, 1243{ "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." },
1244{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1244{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1245{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1245{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1246{ "Sending file...","Sende Datei..." }, 1246{ "Sending file...","Sende Datei..." },
1247{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1247{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1248{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1248{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1249{ "Received %1 bytes","%1 Bytes erhalten" }, 1249{ "Received %1 bytes","%1 Bytes erhalten" },
1250{ "Writing file to disk...","Speichere Datei..." }, 1250{ "Writing file to disk...","Speichere Datei..." },
1251{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1251{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1252{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1252{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1253{ "Synchronize!","Synchronisiere!" }, 1253{ "Synchronize!","Synchronisiere!" },
1254{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1254{ "High clock skew!","Großer Uhrzeitunterschied!" },
1255{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1255{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1256{ "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!" }, 1256{ "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!" },
1257{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1257{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1258{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1258{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1259{ "List week view","Listenwochenansicht" }, 1259{ "List week view","Listenwochenansicht" },
1260{ "List week","Listenwochenansicht" }, 1260{ "List week","Listenwochenansicht" },
1261{ "Next Week","Nächste Woche" }, 1261{ "Next Week","Nächste Woche" },
1262{ "Previous Week","Vorherige Woche" }, 1262{ "Previous Week","Vorherige Woche" },
1263{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." }, 1263{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." },
1264{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1264{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1265{ "Details","Details" }, 1265{ "Details","Details" },
1266{ "Created time","Erstellt Zeit" }, 1266{ "Created time","Erstellt Zeit" },
1267{ "Last modified time","Geändert Zeit" }, 1267{ "Last modified time","Geändert Zeit" },
1268{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1268{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1269{ "View Options","Anzeige Optionen" }, 1269{ "View Options","Anzeige Optionen" },
1270{ "<b>Created: ","<b>Erstellt am: " }, 1270{ "<b>Created: ","<b>Erstellt am: " },
1271{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1271{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1272{ "Journal: ","Journal: " }, 1272{ "Journal: ","Journal: " },
1273{ "yearly","jährlich" }, 1273{ "yearly","jährlich" },
1274{ "(%1) ","%1-" }, 1274{ "(%1) ","%1-" },
1275{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1275{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1276{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1276{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1277{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1277{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1278{ "Summary/Loc.","Titel/Ort" }, 1278{ "Summary/Loc.","Titel/Ort" },
1279{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1279{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1280{ "Week Number","Wochennummer" }, 1280{ "Week Number","Wochennummer" },
1281{ "Import","Importiere" }, 1281{ "Import","Importiere" },
1282{ "Export","Exportiere" }, 1282{ "Export","Exportiere" },
1283{ "Beam","Beame" }, 1283{ "Beam","Beame" },
1284{ "Export","Exportiere" }, 1284{ "Export","Exportiere" },
1285{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1285{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1286{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1286{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1287{ "Journal/Details...","Journale/Details..." }, 1287{ "Journal/Details...","Journale/Details..." },
1288{ "Agenda View","Agenda Ansicht" }, 1288{ "Agenda View","Agenda Ansicht" },
1289{ "Show current time","Zeige aktuelle Zeit" }, 1289{ "Show current time","Zeige aktuelle Zeit" },
1290{ "Edit new item","Bearbeite neuen Eintrag" }, 1290{ "Edit new item","Bearbeite neuen Eintrag" },
1291{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" }, 1291{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" },
1292{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1292{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1293{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1293{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1294{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1294{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1295{ "%1 days\n","%1 Tagen\n" }, 1295{ "%1 days\n","%1 Tagen\n" },
1296{ "1 day\n","1 Tag\n" }, 1296{ "1 day\n","1 Tag\n" },
1297{ "%1 hours\n","%1 Stunden\n" }, 1297{ "%1 hours\n","%1 Stunden\n" },
1298{ "1 hour\n","1 Stunde\n" }, 1298{ "1 hour\n","1 Stunde\n" },
1299{ "%1 minutes\n","%1 Minuten\n" }, 1299{ "%1 minutes\n","%1 Minuten\n" },
1300{ "1 minute\n","1 Minute\n" }, 1300{ "1 minute\n","1 Minute\n" },
1301{ "Only one toolbar","Nur eine Toolbar" }, 1301{ "Only one toolbar","Nur eine Toolbar" },
1302{ "Print","Drucke" }, 1302{ "Print","Drucke" },
1303{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1303{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1304{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1304{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1305{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1305{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1306{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1306{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1307{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" }, 1307{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" },
1308{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1308{ "KO/Pi Printout","KO/Pi Ausdruck" },
1309{ "Print unscaled","Drucke unskaliert" }, 1309{ "Print unscaled","Drucke unskaliert" },
1310{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1310{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1311{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1311{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1312{ "Printout Mode","Druck Modus" }, 1312{ "Printout Mode","Druck Modus" },
1313{ "Filter menu icon","Filtermenu Icon" }, 1313{ "Filter menu icon","Filtermenu Icon" },
1314{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" }, 1314{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" },
1315{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" }, 1315{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" },
1316{ "%1d","%1t" }, 1316{ "%1d","%1t" },
1317{ "%1h","%1std" }, 1317{ "%1h","%1std" },
1318{ "%1min","%1min" }, 1318{ "%1min","%1min" },
1319{ "( %1 before )","( %1 vorher )" }, 1319{ "( %1 before )","( %1 vorher )" },
1320{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1320{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1321{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1321{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1322{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1322{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1323{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1323{ "Show Sync Events","Zeige Sync-Ereignisse" },
1324{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1324{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1325{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1325{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1326{ " on "," am " }, 1326{ " on "," am " },
1327{ "On: ","Am: " }, 1327{ "On: ","Am: " },
1328{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1328{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1329{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1329{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1330{ "Color for running todos:","Farbe für laufende Todos:" }, 1330{ "Color for running todos:","Farbe für laufende Todos:" },
1331{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" }, 1331{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" },
1332{ "Todo is started","Todo ist gestartet" }, 1332{ "Todo is started","Todo ist gestartet" },
1333{ "Stop todo","Stoppe Todo" }, 1333{ "Stop todo","Stoppe Todo" },
1334{ "Todo is stopped","Todo ist gestoppt" }, 1334{ "Todo is stopped","Todo ist gestoppt" },
1335{ "Start todo","Starte Todo" }, 1335{ "Start todo","Starte Todo" },
1336{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" }, 1336{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" },
1337{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" }, 1337{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" },
1338{ "Todo has subtodos","Todo hat Untertodos" }, 1338{ "Todo has subtodos","Todo hat Untertodos" },
1339{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1339{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1340{ "Colors","Farben" }, 1340{ "Colors","Farben" },
1341{ "Click on new parent item","Klicke auf neues Übertodo" }, 1341{ "Click on new parent item","Klicke auf neues Übertodo" },
1342{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1342{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1343{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" }, 1343{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" },
1344{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1344{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1345{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" }, 1345{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" },
1346{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1346{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1347{ "times","Zeiten" }, 1347{ "times","Zeiten" },
1348{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" }, 1348{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" },
1349{ "Backup enabled","Backup angeschaltet" }, 1349{ "Backup enabled","Backup angeschaltet" },
1350{ "Use standard backup dir","Standard Backupverzeichnis" }, 1350{ "Use standard backup dir","Standard Backupverzeichnis" },
1351{ "Number of Backups:","Anzahl der Backups" }, 1351{ "Number of Backups:","Anzahl der Backups" },
1352{ "Make backup every ","Mache ein Backup alle " }, 1352{ "Make backup every ","Mache ein Backup alle " },
1353{ " days"," Tage" }, 1353{ " days"," Tage" },
1354{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." }, 1354{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." },
1355{ "Backup Failed!","Backup Problem!" }, 1355{ "Backup Failed!","Backup Problem!" },
1356{ "Try again now","Versuche jetzt nochmal" }, 1356{ "Try again now","Versuche jetzt nochmal" },
1357{ "Try again later","Versuche später nochmal" }, 1357{ "Try again later","Versuche später nochmal" },
1358{ "Try again tomorrow","Versuche morgen nochmal" }, 1358{ "Try again tomorrow","Versuche morgen nochmal" },
1359{ "Disable backup","Schalte Backup ab" }, 1359{ "Disable backup","Schalte Backup ab" },
1360{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 1360{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
1361{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 1361{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
1362{ "Choose action","Wähle Aktion" }, 1362{ "Choose action","Wähle Aktion" },
1363{ "Comment for todo:","Kommentar zum Todo:" }, 1363{ "Comment for todo:","Kommentar zum Todo:" },
1364{ "Stop+note","Stop+Notiz" }, 1364{ "Stop+note","Stop+Notiz" },
1365{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1365{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1366{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1366{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1367{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" }, 1367{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
1368{ "Print complete list...","Drucke komplette Liste..." }, 1368{ "Print complete list...","Drucke komplette Liste..." },
1369{ "Hide all selected","Verstecke Ausgewählte" }, 1369{ "Hide all selected","Verstecke Ausgewählte" },
1370{ "Add items","hinzufügen" }, 1370{ "Add items","hinzufügen" },
1371{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" }, 1371{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" },
1372{ "Print List View...","Drucke Listenansicht..." }, 1372{ "Print List View...","Drucke Listenansicht..." },
1373{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." }, 1373{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." },
1374{ "Configure KO/Pi...","Konfiguriere KO/Pi..." }, 1374{ "Configure KO/Pi...","Konfiguriere KO/Pi..." },
1375{ "Global Settings...","Globale Einstellungen..." }, 1375{ "Global Settings...","Globale Einstellungen..." },
1376{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, 1376{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" },
1377{ "(disabled)","(abgeschaltet)" }, 1377{ "(disabled)","(abgeschaltet)" },
1378{ "New Calendar","Neuer Kalender" }, 1378{ "New Calendar","Neuer Kalender" },
1379{ "Calendar","Kalender" }, 1379{ "Calendar","Kalender" },
1380{ "Filter selector","Filterauswahl" }, 1380{ "Filter selector","Filterauswahl" },
1381{ "Filtermenu","Filtermenu" }, 1381{ "Filtermenu","Filtermenu" },
1382{ "Toggle Fullscreen","Vollbild umschalten" }, 1382{ "Toggle Fullscreen","Vollbild umschalten" },
1383{ "Toggle Resource View","Resourcenansicht umschalten" }, 1383{ "Toggle Resource View","Resourcenansicht umschalten" },
1384{ "Storage HowTo...","Speicherort HowTo..." }, 1384{ "Storage HowTo...","Speicherort HowTo..." },
1385{ "Timetracking HowTo...","Timetracking HowTo..." }, 1385{ "Timetracking HowTo...","Timetracking HowTo..." },
1386{ "Juni","Juni" }, 1386{ "Juni","Juni" },
1387{ "Juli","Juli" }, 1387{ "Juli","Juli" },
1388{ "ToDo:","ToDo:" }, 1388{ "ToDo:","ToDo:" },
1389{ "Set Calendar","Setze Kalender" }, 1389{ "Set Calendar","Setze Kalender" },
1390{ "Todo: %1","Todo: %1" }, 1390{ "Todo: %1","Todo: %1" },
1391{ ": (Prio ",": (Prio " }, 1391{ ": (Prio ",": (Prio " },
1392{ "Todos","Todos" }, 1392{ "Todos","Todos" },
1393{ "Todo Viewer","Todo Anzeige" }, 1393{ "Todo Viewer","Todo Anzeige" },
1394{ "Todo ","Todo " }, 1394{ "Todo ","Todo " },
1395{ " Calendar \n Resource "," Kalender \n Resource " }, 1395{ " Calendar \n Resource "," Kalender \n Resource " },
1396{ " Color "," Farbe " }, 1396{ " Color "," Farbe " },
1397{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, 1397{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" },
1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, 1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" },
1399{ "Add new Calendar","Füge Kalender hinzu" }, 1399{ "Add new Calendar","Füge Kalender hinzu" },
1400{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1400{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1401{ "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" }, 1401{ "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" },
1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, 1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." },
1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, 1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" },
1406{ "Global application font for all apps:","Globale Schriftart:" }, 1406{ "Global application font for all apps:","Globale Schriftart:" },
1407{ "Application Font","Applikationsschriftart" }, 1407{ "Application Font","Applikationsschriftart" },
1408{ "Kx/Pi","Kx/Pi" }, 1408{ "Kx/Pi","Kx/Pi" },
1409{ "Backup","Backup" }, 1409{ "Backup","Backup" },
1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1413{ "Choose Color","Wähle Farbe" }, 1413{ "Choose Color","Wähle Farbe" },
1414{ " OK "," OK " }, 1414{ " OK "," OK " },
1415{ " Cancel "," Abbrechen " }, 1415{ " Cancel "," Abbrechen " },
1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1418{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1418{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1421{ "%1\nis running!","%1\nist am Laufen!" }, 1421{ "%1\nis running!","%1\nist am Laufen!" },
1422{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1422{ "Additional Comment:","Zusätzlicher Kommentar:" },
1423{ "Stop and save","Stopp und Speichern" }, 1423{ "Stop and save","Stopp und Speichern" },
1424{ "Continue running","Weiter laufen lassen" }, 1424{ "Continue running","Weiter laufen lassen" },
1425{ "Stop - do not save","Stopp - nicht Speichern" }, 1425{ "Stop - do not save","Stopp - nicht Speichern" },
1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1427{ "Time mismatch!","Zeiten stimmen nicht!" }, 1427{ "Time mismatch!","Zeiten stimmen nicht!" },
1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1429{ "Yes, stop todo","Ja, stoppe Todo" }, 1429{ "Yes, stop todo","Ja, stoppe Todo" },
1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1433{ "Spouse","Ehegatte" }, 1433{ "Spouse","Ehegatte" },
1434{ "Notes","Notizen" }, 1434{ "Notes","Notizen" },
1435{ "Messanger","Messanger" }, 1435{ "Messanger","Messanger" },
1436{ "Assistant","Assistent" }, 1436{ "Assistant","Assistent" },
1437{ "Manager","Manager" }, 1437{ "Manager","Manager" },
1438{ "Secrecy","Sichtbar" }, 1438{ "Secrecy","Sichtbar" },
1439{ "male","männlich" }, 1439{ "male","männlich" },
1440{ "female","weiblich" }, 1440{ "female","weiblich" },
1441{ "Hide!","Verbergen!" }, 1441{ "Hide!","Verbergen!" },
1442{ "Show!","Anzeigen!" }, 1442{ "Show!","Anzeigen!" },
1443{ "Details","Details" }, 1443{ "Details","Details" },
1444{ "Profession","Beruf" }, 1444{ "Profession","Beruf" },
1445{ "Children","Kinder" }, 1445{ "Children","Kinder" },
1446{ "Department","Abteilung" }, 1446{ "Department","Abteilung" },
1447{ "Backup cancelled","Backup abgebrochen" }, 1447{ "Backup cancelled","Backup abgebrochen" },
1448{ "Backup globally disabled","Backup global abgeschaltet" }, 1448{ "Backup globally disabled","Backup global abgeschaltet" },
1449{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1449{ "Backup succesfully finished","Backup erfolgreich beendet" },
1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1452{ "Birthdays","Geburtstage" }, 1452{ "Birthdays","Geburtstage" },
1453{ "KO/Pi import information!","KO/Pi Import Information!" }, 1453{ "KO/Pi import information!","KO/Pi Import Information!" },
1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1457{ "Reload","Neu laden" }, 1457{ "Reload","Neu laden" },
1458{ "Timezone settings","Zeitzoneneinstellung" }, 1458{ "Timezone settings","Zeitzoneneinstellung" },
1459{ "Title: ","Titel: " }, 1459{ "Title: ","Titel: " },
1460{ "Journal from: ","Journal vom: " }, 1460{ "Journal from: ","Journal vom: " },
1461{ "Journal: %1 from ","Journal: %1 vom " }, 1461{ "Journal: %1 from ","Journal: %1 vom " },
1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, 1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" },
1463{ "Selected Item","Ausgewähltes Item" }, 1463{ "Selected Item","Ausgewähltes Item" },
1464{ "Select Date...","Wähle Datum..." }, 1464{ "Select Date...","Wähle Datum..." },
1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, 1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" },
1466{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1466{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1467{ "Edit category list...","Ändere Kategorieliste..." }, 1467{ "Edit category list...","Ändere Kategorieliste..." },
1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, 1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" },
1469{ "Filepath: ","Dateipfad: " }, 1469{ "Filepath: ","Dateipfad: " },
1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, 1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" },
1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, 1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" },
1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1475{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1475{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1476{ "Alarm Options","Alarm Einstellungen" }, 1476{ "Alarm Options","Alarm Einstellungen" },
1477{ "Delete selected...","Lösche Ausgewählte..." }, 1477{ "Delete selected...","Lösche Ausgewählte..." },
1478{ "None","Nichts" }, 1478{ "None","Nichts" },
1479{ "Selection","Auswahl" }, 1479{ "Selection","Auswahl" },
1480{ "Set categories","Setze Kategorien" }, 1480{ "Set categories","Setze Kategorien" },
1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, 1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" },
1482{ "Reset","Neu setzen" }, 1482{ "Reset","Neu setzen" },
1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, 1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" },
1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, 1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" },
1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, 1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" },
1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, 1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" },
1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
1488{ "Edit","Edit" }, 1488{ "Edit","Edit" },
1489{ "Last Modified","Zuletzt geändert" }, 1489{ "Last Modified","Zuletzt geändert" },
1490{ "Journal viewer","Journal Anzeige" }, 1490{ "Journal viewer","Journal Anzeige" },
1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, 1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." },
1493{ "Hide Completed","Verstecke erledigte Todos" }, 1493{ "Hide Completed","Verstecke erledigte Todos" },
1494{ "Show not Running","Zeige nicht Laufende" }, 1494{ "Show not Running","Zeige nicht Laufende" },
1495{ "Click to add new Todo","Klick für neues Todo!" }, 1495{ "Click to add new Todo","Klick für neues Todo!" },
1496{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1496{ "Show next conflict for","Zeige nächsten Konflikt für" },
1497{ "All events","Alle Termine" }, 1497{ "All events","Alle Termine" },
1498{ "Allday events","Ganztagestermine" }, 1498{ "Allday events","Ganztagestermine" },
1499{ "Events with time","Termine mit Zeit" }, 1499{ "Events with time","Termine mit Zeit" },
1500{ "No conflict found","Kein Konflikt gefunden" }, 1500{ "No conflict found","Kein Konflikt gefunden" },
1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, 1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " },
1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, 1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" },
1505{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, 1505{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" },
1506{ "Show date","Zeige Datum" }, 1506{ "Show date","Zeige Datum" },
1507{ "No problem!","Null Problemo!" }, 1507{ "No problem!","Null Problemo!" },
1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
1513{ "Pi-Sync Error","Pi-Sync Fehler" }, 1513{ "Pi-Sync Error","Pi-Sync Fehler" },
1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." }, 1520{ "Receiving file from remote...","Empfange entfernte Datei..." },
1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
1526{ "Writing back file ...","Schreibe Datei zurück..." }, 1526{ "Writing back file ...","Schreibe Datei zurück..." },
1527{ "Sending back file ...","Sende Datei zurück..." }, 1527{ "Sending back file ...","Sende Datei zurück..." },
1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" }, 1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" },
1529{ "Created","Angelegt" }, 1529{ "Created","Angelegt" },
1530{ "Last Modified Sub","Zuletzt geändertes Sub" }, 1530{ "Last Modified Sub","Zuletzt geändertes Sub" },
1531{ "","" }, 1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" },
1532{ "","" }, 1532{ "","" },
1533{ "","" }, 1533{ "","" },
1534{ "","" }, 1534{ "","" },
1535{ "","" }, 1535{ "","" },
1536{ "","" }, 1536{ "","" },
1537{ "","" }, 1537{ "","" },
1538{ "","" }, 1538{ "","" },
1539{ "","" }, 1539{ "","" },
1540{ "","" }, 1540{ "","" },
1541{ "","" }, 1541{ "","" },
1542{ "","" }, 1542{ "","" },
1543{ "","" }, 1543{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index f9685e9..ab69158 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,1448 +1,1450 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 //setFocusPolicy ( NoFocus ); 370 //setFocusPolicy ( NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 373
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 480
481 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
482#if 0 482#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
486 486
487 } else { 487 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
490 } 490 }
491#endif 491#endif
492 mFilterView->hide(); 492 mFilterView->hide();
493 mCalEditView->hide(); 493 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
499 499
500 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 506 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 510 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 512 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 514#endif
515 515
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
518 518
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 521
522 522
523 523
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 526
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 529
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
538 538
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 545
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 548#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 550 SLOT( incidenceAdded( Incidence *) ) );
551#endif 551#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 553
554 connect( this, SIGNAL( configChanged() ), 554 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 555 mDateNavigator, SLOT( updateConfig() ) );
556 556
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 557 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 558 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 560 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 562 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 564 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 566 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 569 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 571 SIGNAL( todoModified( Todo *, int ) ) );
572 572
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 574 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 576 this, SLOT (cancelIncidence( Incidence * ) ) );
577 577
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 579 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 581 this, SLOT ( beamIncidence( Incidence * ) ) );
582 582
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 584 this, SLOT ( todo_unsub( Todo * ) ) );
585 585
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 587 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 589 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 590 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 591 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 592
593 593
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 598
599 599
600 600
601 601
602 602
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 603 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 604 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 606 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 608
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 609 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 610
611 mDateFrame = new QVBox(0,0,WType_Popup); 611 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 614 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 615 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 616 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 618
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 620
621 mEventEditor = mDialogManager->getEventEditor(); 621 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 622 mTodoEditor = mDialogManager->getTodoEditor();
623 623
624 mFlagEditDescription = false; 624 mFlagEditDescription = false;
625 625
626 mSuspendTimer = new QTimer( this ); 626 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 627 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 628 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 632 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 634 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 636
637 637
638#ifndef DESKTOP_VERSION 638#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 639//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 642#endif
643 mDateNavigator->setCalendar( mCalendar ); 643 mDateNavigator->setCalendar( mCalendar );
644} 644}
645 645
646 646
647CalendarView::~CalendarView() 647CalendarView::~CalendarView()
648{ 648{
649 // kdDebug() << "~CalendarView()" << endl; 649 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 650 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 651 delete mDialogManager;
652 delete mViewManager; 652 delete mViewManager;
653 delete mStorage; 653 delete mStorage;
654 delete mDateFrame ; 654 delete mDateFrame ;
655 delete mEventViewerDialog; 655 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 656 //kdDebug() << "~CalendarView() done" << endl;
657} 657}
658void CalendarView::nextConflict( bool all, bool allday ) 658void CalendarView::nextConflict( bool all, bool allday )
659{ 659{
660 660
661 QPtrList<Event> testlist = mCalendar->events(); 661 QPtrList<Event> testlist = mCalendar->events();
662 Event * test = testlist.first(); 662 Event * test = testlist.first();
663 while ( test ) { 663 while ( test ) {
664 test->setTagged( false ); 664 test->setTagged( false );
665 test = testlist.next(); 665 test = testlist.next();
666 } 666 }
667 QTime st ( 0,0,0); 667 QTime st ( 0,0,0);
668 if ( mViewManager->currentView() == mViewManager->agendaView() ) 668 if ( mViewManager->currentView() == mViewManager->agendaView() )
669 st = mViewManager->agendaView()->agenda()->getEndTime(); 669 st = mViewManager->agendaView()->agenda()->getEndTime();
670 //qDebug("time %s ", st.toString().latin1()); 670 //qDebug("time %s ", st.toString().latin1());
671 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 671 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
672 QDateTime conflict; 672 QDateTime conflict;
673 QDateTime retVal; 673 QDateTime retVal;
674 bool found = false; 674 bool found = false;
675 Event * cE = 0; 675 Event * cE = 0;
676 Event * cE2 = 0; 676 Event * cE2 = 0;
677 QPtrList<Event> testlist2 = testlist; 677 QPtrList<Event> testlist2 = testlist;
678 test = testlist.first(); 678 test = testlist.first();
679 bool skip = false; 679 bool skip = false;
680 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
680 while ( test ) { 681 while ( test ) {
682 qApp->processEvents();
681 skip = false; 683 skip = false;
682 if ( !all ) skip = ( allday != test->doesFloat() ); 684 if ( !all ) skip = ( allday != test->doesFloat() );
683 if ( !skip ) { 685 if ( !skip ) {
684 Event * test2 = testlist2.first(); 686 Event * test2 = testlist2.first();
685 while ( test2 ) { 687 while ( test2 ) {
686 skip = false; 688 skip = false;
687 if ( !all ) skip = ( allday != test2->doesFloat() ); 689 if ( !all ) skip = ( allday != test2->doesFloat() );
688 if ( !skip ) { 690 if ( !skip ) {
689 if ( !test2->isTagged() ) { 691 if ( !test2->isTagged() ) {
690 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 692 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
691 //qDebug("overlap "); 693 //qDebug("overlap ");
692 if ( ! found ) { 694 if ( ! found ) {
693 if ( retVal >= startDT ) { 695 if ( retVal >= startDT ) {
694 conflict = retVal; 696 conflict = retVal;
695 cE = test; 697 cE = test;
696 cE2 = test2; 698 cE2 = test2;
697 found = true; 699 found = true;
698 } 700 }
699 } else { 701 } else {
700 if ( retVal >= startDT && retVal < conflict ) { 702 if ( retVal >= startDT && retVal < conflict ) {
701 conflict = retVal; 703 conflict = retVal;
702 cE = test; 704 cE = test;
703 cE2 = test2; 705 cE2 = test2;
704 } 706 }
705 } 707 }
706 } 708 }
707 } 709 }
708 } 710 }
709 test2 = testlist2.next(); 711 test2 = testlist2.next();
710 } 712 }
711 } 713 }
712 test->setTagged( true ); 714 test->setTagged( true );
713 test = testlist.next(); 715 test = testlist.next();
714 } 716 }
715 if ( found ) { 717 if ( found ) {
716 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 718 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
717 mViewManager->showDayView(); 719 mViewManager->showDayView();
718 mNavigator->slotDaySelect( conflict.date() ); 720 mNavigator->slotDaySelect( conflict.date() );
719 int hour = conflict.time().hour(); 721 int hour = conflict.time().hour();
720 mViewManager->agendaView()->setStartHour( hour ); 722 mViewManager->agendaView()->setStartHour( hour );
721 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 723 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
722 return; 724 return;
723 } 725 }
724 726
725 topLevelWidget()->setCaption( i18n("No conflict found") ); 727 topLevelWidget()->setCaption( i18n("No conflict found") );
726 qDebug("No conflict found "); 728 qDebug("No conflict found ");
727 return; 729 return;
728} 730}
729 731
730void CalendarView::conflictAll() 732void CalendarView::conflictAll()
731{ 733{
732 nextConflict ( true, true ); 734 nextConflict ( true, true );
733} 735}
734void CalendarView::conflictAllday() 736void CalendarView::conflictAllday()
735{ 737{
736 nextConflict ( false, true ); 738 nextConflict ( false, true );
737} 739}
738void CalendarView::conflictNotAll() 740void CalendarView::conflictNotAll()
739{ 741{
740 nextConflict ( false, false ); 742 nextConflict ( false, false );
741} 743}
742 744
743void CalendarView::setCalReadOnly( int id, bool readO ) 745void CalendarView::setCalReadOnly( int id, bool readO )
744{ 746{
745 if ( readO ) { 747 if ( readO ) {
746 emit save(); 748 emit save();
747 } 749 }
748 mCalendar->setReadOnly( id, readO ); 750 mCalendar->setReadOnly( id, readO );
749} 751}
750void CalendarView::setScrollBarStep(int val ) 752void CalendarView::setScrollBarStep(int val )
751{ 753{
752#ifdef DESKTOP_VERSION 754#ifdef DESKTOP_VERSION
753 mDateScrollBar->setLineStep ( val ); 755 mDateScrollBar->setLineStep ( val );
754#endif 756#endif
755} 757}
756void CalendarView::scrollBarValue(int val ) 758void CalendarView::scrollBarValue(int val )
757{ 759{
758#ifdef DESKTOP_VERSION 760#ifdef DESKTOP_VERSION
759 if ( QApplication::desktop()->width() < 800 ) return; 761 if ( QApplication::desktop()->width() < 800 ) return;
760 static bool block = false; 762 static bool block = false;
761 if ( block ) return; 763 if ( block ) return;
762 block = true; 764 block = true;
763 int count = mNavigator->selectedDates().count(); 765 int count = mNavigator->selectedDates().count();
764 int day = mNavigator->selectedDates().first().dayOfYear(); 766 int day = mNavigator->selectedDates().first().dayOfYear();
765 int stepdays = val; 767 int stepdays = val;
766 if ( mDateScrollBar->lineStep () <= count ) { 768 if ( mDateScrollBar->lineStep () <= count ) {
767 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 769 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
768 //qDebug("VAL %d ",val ); 770 //qDebug("VAL %d ",val );
769 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 771 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
770 stepdays = day+stepdays; 772 stepdays = day+stepdays;
771 if ( stepdays < 0 ) stepdays = 0; 773 if ( stepdays < 0 ) stepdays = 0;
772 } 774 }
773 if ( stepdays == day ) { 775 if ( stepdays == day ) {
774 block = false; 776 block = false;
775 return; 777 return;
776 } 778 }
777 int year = mNavigator->selectedDates().first().year(); 779 int year = mNavigator->selectedDates().first().year();
778 QDate d ( year,1,1 ); 780 QDate d ( year,1,1 );
779 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 781 mNavigator->selectDates( d.addDays( stepdays-1) , count );
780 block = false; 782 block = false;
781#endif 783#endif
782 784
783} 785}
784void CalendarView::updateView(const QDate &start, const QDate &end) 786void CalendarView::updateView(const QDate &start, const QDate &end)
785{ 787{
786#ifdef DESKTOP_VERSION 788#ifdef DESKTOP_VERSION
787 if ( ! mDateScrollBar->draggingSlider () ) { 789 if ( ! mDateScrollBar->draggingSlider () ) {
788 int dof = start.dayOfYear(); 790 int dof = start.dayOfYear();
789 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 791 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
790 if ( dof != mDateScrollBar->value() ) { 792 if ( dof != mDateScrollBar->value() ) {
791 mDateScrollBar->blockSignals( true ); 793 mDateScrollBar->blockSignals( true );
792 mDateScrollBar->setValue( start.dayOfYear()); 794 mDateScrollBar->setValue( start.dayOfYear());
793 mDateScrollBar->blockSignals( false ); 795 mDateScrollBar->blockSignals( false );
794 } 796 }
795 } 797 }
796#endif 798#endif
797 mTodoList->updateView(); 799 mTodoList->updateView();
798 mViewManager->updateView(start, end); 800 mViewManager->updateView(start, end);
799 //mDateNavigator->updateView(); 801 //mDateNavigator->updateView();
800} 802}
801 803
802 804
803 805
804void CalendarView::checkFiles() 806void CalendarView::checkFiles()
805{ 807{
806 QString message; 808 QString message;
807 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 809 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
808 KopiCalendarFile * cal = calendars.first(); 810 KopiCalendarFile * cal = calendars.first();
809 while ( cal ) { 811 while ( cal ) {
810 if ( cal->mErrorOnLoad ) { 812 if ( cal->mErrorOnLoad ) {
811 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 813 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
812 } 814 }
813 cal = calendars.next(); 815 cal = calendars.next();
814 } 816 }
815 if ( !message.isEmpty() ) { 817 if ( !message.isEmpty() ) {
816 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 818 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
817 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 819 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
818 } 820 }
819 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 821 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
820} 822}
821void CalendarView::checkAlarms() 823void CalendarView::checkAlarms()
822{ 824{
823 825
824 826
825 KConfig *config = KOGlobals::config(); 827 KConfig *config = KOGlobals::config();
826 config->setGroup( "AppRun" ); 828 config->setGroup( "AppRun" );
827 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 829 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
828 int daysto = dt.daysTo( QDate::currentDate() ); 830 int daysto = dt.daysTo( QDate::currentDate() );
829 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 831 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
830 dt = dt.addDays( days ); 832 dt = dt.addDays( days );
831 int secto = dt.secsTo( QDateTime::currentDateTime() ); 833 int secto = dt.secsTo( QDateTime::currentDateTime() );
832 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 834 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
833 //qDebug("KO: Reading program stop %d ", secs); 835 //qDebug("KO: Reading program stop %d ", secs);
834 //secs -= ( 3600 * 24*3 ); // debug only 836 //secs -= ( 3600 * 24*3 ); // debug only
835 QDateTime latest = dt.addSecs ( secs ); 837 QDateTime latest = dt.addSecs ( secs );
836 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 838 qDebug("KO: Last termination on %s ", latest.toString().latin1());
837 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 839 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
838 QPtrList<Incidence> el = mCalendar->rawIncidences(); 840 QPtrList<Incidence> el = mCalendar->rawIncidences();
839 QPtrList<Incidence> al; 841 QPtrList<Incidence> al;
840 Incidence* inL = el.first(); 842 Incidence* inL = el.first();
841 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 843 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
842 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 844 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
843 while ( inL ) { 845 while ( inL ) {
844 bool ok = false; 846 bool ok = false;
845 int offset = 0; 847 int offset = 0;
846 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 848 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
847 if ( ok ) { 849 if ( ok ) {
848 //qDebug("OK %s",next.toString().latin1()); 850 //qDebug("OK %s",next.toString().latin1());
849 if ( next < cur ) { 851 if ( next < cur ) {
850 al.append( inL ); 852 al.append( inL );
851 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 853 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
852 } 854 }
853 } 855 }
854 inL = el.next(); 856 inL = el.next();
855 } 857 }
856 if ( al.count() ) { 858 if ( al.count() ) {
857 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 859 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
858 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 860 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
859 QVBoxLayout* lay = new QVBoxLayout( dia ); 861 QVBoxLayout* lay = new QVBoxLayout( dia );
860 lay->setSpacing( 0 ); 862 lay->setSpacing( 0 );
861 lay->setMargin( 0 ); 863 lay->setMargin( 0 );
862 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 864 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
863 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 865 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
864 lay->addWidget( matb ); 866 lay->addWidget( matb );
865 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 867 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
866 int wid = 210; 868 int wid = 210;
867 int x = QApplication::desktop()->width() - wid - 7; 869 int x = QApplication::desktop()->width() - wid - 7;
868 int y = QApplication::desktop()->height() - wid - 70; 870 int y = QApplication::desktop()->height() - wid - 70;
869 dia->setGeometry ( x,y,wid,wid); 871 dia->setGeometry ( x,y,wid,wid);
870 } else { 872 } else {
871 int si = 220; 873 int si = 220;
872 if ( QApplication::desktop()->width() > 470 ) 874 if ( QApplication::desktop()->width() > 470 )
873 si = 400; 875 si = 400;
874 dia->resize(si,si/2); 876 dia->resize(si,si/2);
875 } 877 }
876 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 878 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
877 dia->show(); 879 dia->show();
878 880
879 } 881 }
880} 882}
881void CalendarView::showDay( QDate d ) 883void CalendarView::showDay( QDate d )
882{ 884{
883 dateNavigator()->blockSignals( true ); 885 dateNavigator()->blockSignals( true );
884 dateNavigator()->selectDate( d ); 886 dateNavigator()->selectDate( d );
885 dateNavigator()->blockSignals( false ); 887 dateNavigator()->blockSignals( false );
886 mViewManager->showDayView(); 888 mViewManager->showDayView();
887 //dateNavigator()->selectDate( d ); 889 //dateNavigator()->selectDate( d );
888} 890}
889void CalendarView::timerAlarm() 891void CalendarView::timerAlarm()
890{ 892{
891 //qDebug("CalendarView::timerAlarm() "); 893 //qDebug("CalendarView::timerAlarm() ");
892 computeAlarm(mAlarmNotification ); 894 computeAlarm(mAlarmNotification );
893} 895}
894 896
895void CalendarView::suspendAlarm() 897void CalendarView::suspendAlarm()
896{ 898{
897 //qDebug(" CalendarView::suspendAlarm() "); 899 //qDebug(" CalendarView::suspendAlarm() ");
898 computeAlarm(mSuspendAlarmNotification ); 900 computeAlarm(mSuspendAlarmNotification );
899 901
900} 902}
901 903
902void CalendarView::startAlarm( QString mess , QString filename) 904void CalendarView::startAlarm( QString mess , QString filename)
903{ 905{
904 906
905 topLevelWidget()->showNormal(); 907 topLevelWidget()->showNormal();
906 topLevelWidget()->setActiveWindow(); 908 topLevelWidget()->setActiveWindow();
907 topLevelWidget()->raise(); 909 topLevelWidget()->raise();
908 910
909 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 911 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
910 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 912 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
911 913
912} 914}
913 915
914void CalendarView::checkNextTimerAlarm() 916void CalendarView::checkNextTimerAlarm()
915{ 917{
916 mCalendar->checkAlarmForIncidence( 0, true ); 918 mCalendar->checkAlarmForIncidence( 0, true );
917} 919}
918 920
919void CalendarView::computeAlarm( QString msg ) 921void CalendarView::computeAlarm( QString msg )
920{ 922{
921 923
922 QString mess = msg; 924 QString mess = msg;
923 QString mAlarmMessage = mess.mid( 9 ); 925 QString mAlarmMessage = mess.mid( 9 );
924 QString filename = MainWindow::resourcePath(); 926 QString filename = MainWindow::resourcePath();
925 filename += "koalarm.wav"; 927 filename += "koalarm.wav";
926 QString tempfilename; 928 QString tempfilename;
927 if ( mess.left( 13 ) == "suspend_alarm") { 929 if ( mess.left( 13 ) == "suspend_alarm") {
928 bool error = false; 930 bool error = false;
929 int len = mess.mid( 13 ).find("+++"); 931 int len = mess.mid( 13 ).find("+++");
930 if ( len < 2 ) 932 if ( len < 2 )
931 error = true; 933 error = true;
932 else { 934 else {
933 tempfilename = mess.mid( 13, len ); 935 tempfilename = mess.mid( 13, len );
934 if ( !QFile::exists( tempfilename ) ) 936 if ( !QFile::exists( tempfilename ) )
935 error = true; 937 error = true;
936 } 938 }
937 if ( ! error ) { 939 if ( ! error ) {
938 filename = tempfilename; 940 filename = tempfilename;
939 } 941 }
940 mAlarmMessage = mess.mid( 13+len+3 ); 942 mAlarmMessage = mess.mid( 13+len+3 );
941 //qDebug("suspend file %s ",tempfilename.latin1() ); 943 //qDebug("suspend file %s ",tempfilename.latin1() );
942 startAlarm( mAlarmMessage, filename); 944 startAlarm( mAlarmMessage, filename);
943 return; 945 return;
944 } 946 }
945 if ( mess.left( 11 ) == "timer_alarm") { 947 if ( mess.left( 11 ) == "timer_alarm") {
946 //mTimerTime = 0; 948 //mTimerTime = 0;
947 startAlarm( mess.mid( 11 ), filename ); 949 startAlarm( mess.mid( 11 ), filename );
948 return; 950 return;
949 } 951 }
950 if ( mess.left( 10 ) == "proc_alarm") { 952 if ( mess.left( 10 ) == "proc_alarm") {
951 bool error = false; 953 bool error = false;
952 int len = mess.mid( 10 ).find("+++"); 954 int len = mess.mid( 10 ).find("+++");
953 if ( len < 2 ) 955 if ( len < 2 )
954 error = true; 956 error = true;
955 else { 957 else {
956 tempfilename = mess.mid( 10, len ); 958 tempfilename = mess.mid( 10, len );
957 if ( !QFile::exists( tempfilename ) ) 959 if ( !QFile::exists( tempfilename ) )
958 error = true; 960 error = true;
959 } 961 }
960 if ( error ) { 962 if ( error ) {
961 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 963 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
962 mAlarmMessage += mess.mid( 10+len+3+9 ); 964 mAlarmMessage += mess.mid( 10+len+3+9 );
963 } else { 965 } else {
964 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 966 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
965 //qDebug("-----system command %s ",tempfilename.latin1() ); 967 //qDebug("-----system command %s ",tempfilename.latin1() );
966#ifndef _WIN32_ 968#ifndef _WIN32_
967 if ( vfork () == 0 ) { 969 if ( vfork () == 0 ) {
968 execl ( tempfilename.latin1(), 0 ); 970 execl ( tempfilename.latin1(), 0 );
969 return; 971 return;
970 } 972 }
971#else 973#else
972 QProcess* p = new QProcess(); 974 QProcess* p = new QProcess();
973 p->addArgument( tempfilename.latin1() ); 975 p->addArgument( tempfilename.latin1() );
974 p->start(); 976 p->start();
975 return; 977 return;
976#endif 978#endif
977 979
978 return; 980 return;
979 } 981 }
980 982
981 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 983 //qDebug("+++++++system command %s ",tempfilename.latin1() );
982 } 984 }
983 if ( mess.left( 11 ) == "audio_alarm") { 985 if ( mess.left( 11 ) == "audio_alarm") {
984 bool error = false; 986 bool error = false;
985 int len = mess.mid( 11 ).find("+++"); 987 int len = mess.mid( 11 ).find("+++");
986 if ( len < 2 ) 988 if ( len < 2 )
987 error = true; 989 error = true;
988 else { 990 else {
989 tempfilename = mess.mid( 11, len ); 991 tempfilename = mess.mid( 11, len );
990 if ( !QFile::exists( tempfilename ) ) 992 if ( !QFile::exists( tempfilename ) )
991 error = true; 993 error = true;
992 } 994 }
993 if ( ! error ) { 995 if ( ! error ) {
994 filename = tempfilename; 996 filename = tempfilename;
995 } 997 }
996 mAlarmMessage = mess.mid( 11+len+3+9 ); 998 mAlarmMessage = mess.mid( 11+len+3+9 );
997 //qDebug("audio file command %s ",tempfilename.latin1() ); 999 //qDebug("audio file command %s ",tempfilename.latin1() );
998 } 1000 }
999 if ( mess.left( 9 ) == "cal_alarm") { 1001 if ( mess.left( 9 ) == "cal_alarm") {
1000 mAlarmMessage = mess.mid( 9 ) ; 1002 mAlarmMessage = mess.mid( 9 ) ;
1001 } 1003 }
1002 1004
1003 startAlarm( mAlarmMessage, filename ); 1005 startAlarm( mAlarmMessage, filename );
1004 1006
1005 1007
1006} 1008}
1007 1009
1008void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1010void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1009{ 1011{
1010 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1012 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1011 1013
1012 mSuspendAlarmNotification = noti; 1014 mSuspendAlarmNotification = noti;
1013 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1015 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1014 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1016 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1015 mSuspendTimer->start( ms , true ); 1017 mSuspendTimer->start( ms , true );
1016 1018
1017} 1019}
1018 1020
1019void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1021void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1020{ 1022{
1021 mNextAlarmDateTime = qdt; 1023 mNextAlarmDateTime = qdt;
1022 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1024 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1023 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1025 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1024#ifndef DESKTOP_VERSION 1026#ifndef DESKTOP_VERSION
1025 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1027 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1026#endif 1028#endif
1027 return; 1029 return;
1028 } 1030 }
1029 int maxSec; 1031 int maxSec;
1030 //maxSec = 5; //testing only 1032 //maxSec = 5; //testing only
1031 maxSec = 86400+3600; // one day+1hour 1033 maxSec = 86400+3600; // one day+1hour
1032 mAlarmNotification = noti; 1034 mAlarmNotification = noti;
1033 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1035 int sec = QDateTime::currentDateTime().secsTo( qdt );
1034 if ( sec > maxSec ) { 1036 if ( sec > maxSec ) {
1035 mRecheckAlarmTimer->start( maxSec * 1000 ); 1037 mRecheckAlarmTimer->start( maxSec * 1000 );
1036 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1038 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1037 return; 1039 return;
1038 } else { 1040 } else {
1039 mRecheckAlarmTimer->stop(); 1041 mRecheckAlarmTimer->stop();
1040 } 1042 }
1041 //qDebug("Alarm timer started with secs: %d ", sec); 1043 //qDebug("Alarm timer started with secs: %d ", sec);
1042 mAlarmTimer->start( sec *1000 , true ); 1044 mAlarmTimer->start( sec *1000 , true );
1043 1045
1044} 1046}
1045// called by mRecheckAlarmTimer to get next alarm 1047// called by mRecheckAlarmTimer to get next alarm
1046// we need this, because a QTimer has only a max range of 25 days 1048// we need this, because a QTimer has only a max range of 25 days
1047void CalendarView::recheckTimerAlarm() 1049void CalendarView::recheckTimerAlarm()
1048{ 1050{
1049 mAlarmTimer->stop(); 1051 mAlarmTimer->stop();
1050 mRecheckAlarmTimer->stop(); 1052 mRecheckAlarmTimer->stop();
1051 mCalendar->checkAlarmForIncidence( 0, true ); 1053 mCalendar->checkAlarmForIncidence( 0, true );
1052} 1054}
1053#ifndef DESKTOP_VERSION 1055#ifndef DESKTOP_VERSION
1054void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1056void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1055#else 1057#else
1056void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1058void CalendarView::removeAlarm(const QDateTime &, const QString & )
1057#endif 1059#endif
1058{ 1060{
1059 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1061 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1060 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1062 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1061#ifndef DESKTOP_VERSION 1063#ifndef DESKTOP_VERSION
1062 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1064 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1063#endif 1065#endif
1064 return; 1066 return;
1065 } 1067 }
1066 mAlarmTimer->stop(); 1068 mAlarmTimer->stop();
1067} 1069}
1068void CalendarView::selectWeekNum ( int num ) 1070void CalendarView::selectWeekNum ( int num )
1069{ 1071{
1070 dateNavigator()->blockSignals( true ); 1072 dateNavigator()->blockSignals( true );
1071 dateNavigator()->selectWeek( num ); 1073 dateNavigator()->selectWeek( num );
1072 dateNavigator()->blockSignals( false ); 1074 dateNavigator()->blockSignals( false );
1073 mViewManager->showWeekView(); 1075 mViewManager->showWeekView();
1074} 1076}
1075KOViewManager *CalendarView::viewManager() 1077KOViewManager *CalendarView::viewManager()
1076{ 1078{
1077 return mViewManager; 1079 return mViewManager;
1078} 1080}
1079 1081
1080KODialogManager *CalendarView::dialogManager() 1082KODialogManager *CalendarView::dialogManager()
1081{ 1083{
1082 return mDialogManager; 1084 return mDialogManager;
1083} 1085}
1084 1086
1085QDate CalendarView::startDate() 1087QDate CalendarView::startDate()
1086{ 1088{
1087 DateList dates = mNavigator->selectedDates(); 1089 DateList dates = mNavigator->selectedDates();
1088 1090
1089 return dates.first(); 1091 return dates.first();
1090} 1092}
1091 1093
1092QDate CalendarView::endDate() 1094QDate CalendarView::endDate()
1093{ 1095{
1094 DateList dates = mNavigator->selectedDates(); 1096 DateList dates = mNavigator->selectedDates();
1095 1097
1096 return dates.last(); 1098 return dates.last();
1097} 1099}
1098 1100
1099 1101
1100void CalendarView::createPrinter() 1102void CalendarView::createPrinter()
1101{ 1103{
1102#ifndef KORG_NOPRINTER 1104#ifndef KORG_NOPRINTER
1103 if (!mCalPrinter) { 1105 if (!mCalPrinter) {
1104 mCalPrinter = new CalPrinter(this, mCalendar); 1106 mCalPrinter = new CalPrinter(this, mCalendar);
1105 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1107 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1106 } 1108 }
1107#endif 1109#endif
1108} 1110}
1109 1111
1110 1112
1111//KOPrefs::instance()->mWriteBackFile 1113//KOPrefs::instance()->mWriteBackFile
1112//KOPrefs::instance()->mWriteBackExistingOnly 1114//KOPrefs::instance()->mWriteBackExistingOnly
1113 1115
1114// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1116// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1115// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1117// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1116// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1118// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1117// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1119// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1118// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1120// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1119// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1121// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1120 1122
1121int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1123int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1122{ 1124{
1123 1125
1124 // 0 equal 1126 // 0 equal
1125 // 1 take local 1127 // 1 take local
1126 // 2 take remote 1128 // 2 take remote
1127 // 3 cancel 1129 // 3 cancel
1128 QDateTime lastSync = mLastCalendarSync; 1130 QDateTime lastSync = mLastCalendarSync;
1129 QDateTime localMod = local->lastModified(); 1131 QDateTime localMod = local->lastModified();
1130 QDateTime remoteMod = remote->lastModified(); 1132 QDateTime remoteMod = remote->lastModified();
1131 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1133 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1132 bool remCh, locCh; 1134 bool remCh, locCh;
1133 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1135 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1134 //if ( remCh ) 1136 //if ( remCh )
1135 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1137 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1136 locCh = ( localMod > mLastCalendarSync ); 1138 locCh = ( localMod > mLastCalendarSync );
1137 if ( !remCh && ! locCh ) { 1139 if ( !remCh && ! locCh ) {
1138 //qDebug("both not changed "); 1140 //qDebug("both not changed ");
1139 lastSync = localMod.addDays(1); 1141 lastSync = localMod.addDays(1);
1140 if ( mode <= SYNC_PREF_ASK ) 1142 if ( mode <= SYNC_PREF_ASK )
1141 return 0; 1143 return 0;
1142 } else { 1144 } else {
1143 if ( locCh ) { 1145 if ( locCh ) {
1144 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1146 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1145 lastSync = localMod.addDays( -1 ); 1147 lastSync = localMod.addDays( -1 );
1146 if ( !remCh ) 1148 if ( !remCh )
1147 remoteMod = ( lastSync.addDays( -1 ) ); 1149 remoteMod = ( lastSync.addDays( -1 ) );
1148 } else { 1150 } else {
1149 //qDebug(" not loc changed "); 1151 //qDebug(" not loc changed ");
1150 lastSync = localMod.addDays( 1 ); 1152 lastSync = localMod.addDays( 1 );
1151 if ( remCh ) 1153 if ( remCh )
1152 remoteMod =( lastSync.addDays( 1 ) ); 1154 remoteMod =( lastSync.addDays( 1 ) );
1153 1155
1154 } 1156 }
1155 } 1157 }
1156 full = true; 1158 full = true;
1157 if ( mode < SYNC_PREF_ASK ) 1159 if ( mode < SYNC_PREF_ASK )
1158 mode = SYNC_PREF_ASK; 1160 mode = SYNC_PREF_ASK;
1159 } else { 1161 } else {
1160 if ( localMod == remoteMod ) 1162 if ( localMod == remoteMod )
1161 // if ( local->revision() == remote->revision() ) 1163 // if ( local->revision() == remote->revision() )
1162 return 0; 1164 return 0;
1163 1165
1164 } 1166 }
1165 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1167 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1166 1168
1167 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1169 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1168 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1170 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1169 //full = true; //debug only 1171 //full = true; //debug only
1170 if ( full ) { 1172 if ( full ) {
1171 bool equ = false; 1173 bool equ = false;
1172 if ( local->typeID() == eventID ) { 1174 if ( local->typeID() == eventID ) {
1173 equ = (*((Event*) local) == *((Event*) remote)); 1175 equ = (*((Event*) local) == *((Event*) remote));
1174 } 1176 }
1175 else if ( local->typeID() == todoID ) 1177 else if ( local->typeID() == todoID )
1176 equ = (*((Todo*) local) == (*(Todo*) remote)); 1178 equ = (*((Todo*) local) == (*(Todo*) remote));
1177 else if ( local->typeID() == journalID ) 1179 else if ( local->typeID() == journalID )
1178 equ = (*((Journal*) local) == *((Journal*) remote)); 1180 equ = (*((Journal*) local) == *((Journal*) remote));
1179 if ( equ ) { 1181 if ( equ ) {
1180 //qDebug("equal "); 1182 //qDebug("equal ");
1181 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1183 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1182 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1184 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1183 } 1185 }
1184 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1186 if ( mode < SYNC_PREF_FORCE_LOCAL )
1185 return 0; 1187 return 0;
1186 1188
1187 }//else //debug only 1189 }//else //debug only
1188 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1190 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1189 } 1191 }
1190 int result; 1192 int result;
1191 bool localIsNew; 1193 bool localIsNew;
1192 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1194 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1193 1195
1194 1196
1195 // ************************************************ 1197 // ************************************************
1196 // ************************************************ 1198 // ************************************************
1197 // ************************************************ 1199 // ************************************************
1198 // We may have that lastSync > remoteMod AND lastSync > localMod 1200 // We may have that lastSync > remoteMod AND lastSync > localMod
1199 // BUT remoteMod != localMod 1201 // BUT remoteMod != localMod
1200 1202
1201 1203
1202 if ( full && mode < SYNC_PREF_NEWEST ) 1204 if ( full && mode < SYNC_PREF_NEWEST )
1203 mode = SYNC_PREF_ASK; 1205 mode = SYNC_PREF_ASK;
1204 1206
1205 switch( mode ) { 1207 switch( mode ) {
1206 case SYNC_PREF_LOCAL: 1208 case SYNC_PREF_LOCAL:
1207 if ( lastSync > remoteMod ) 1209 if ( lastSync > remoteMod )
1208 return 1; 1210 return 1;
1209 if ( lastSync > localMod ) 1211 if ( lastSync > localMod )
1210 return 2; 1212 return 2;
1211 return 1; 1213 return 1;
1212 break; 1214 break;
1213 case SYNC_PREF_REMOTE: 1215 case SYNC_PREF_REMOTE:
1214 if ( lastSync > localMod ) 1216 if ( lastSync > localMod )
1215 return 2; 1217 return 2;
1216 if ( lastSync > remoteMod ) 1218 if ( lastSync > remoteMod )
1217 return 1; 1219 return 1;
1218 return 2; 1220 return 2;
1219 break; 1221 break;
1220 case SYNC_PREF_NEWEST: 1222 case SYNC_PREF_NEWEST:
1221 if ( localMod >= remoteMod ) 1223 if ( localMod >= remoteMod )
1222 return 1; 1224 return 1;
1223 else 1225 else
1224 return 2; 1226 return 2;
1225 break; 1227 break;
1226 case SYNC_PREF_ASK: 1228 case SYNC_PREF_ASK:
1227 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1229 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1228 if ( lastSync > remoteMod && lastSync > localMod) 1230 if ( lastSync > remoteMod && lastSync > localMod)
1229 return 0; 1231 return 0;
1230 if ( lastSync > remoteMod ) 1232 if ( lastSync > remoteMod )
1231 return 1; 1233 return 1;
1232 if ( lastSync > localMod ) 1234 if ( lastSync > localMod )
1233 return 2; 1235 return 2;
1234 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1236 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1235 localIsNew = localMod >= remoteMod; 1237 localIsNew = localMod >= remoteMod;
1236 if ( localIsNew ) 1238 if ( localIsNew )
1237 getEventViewerDialog()->setColorMode( 1 ); 1239 getEventViewerDialog()->setColorMode( 1 );
1238 else 1240 else
1239 getEventViewerDialog()->setColorMode( 2 ); 1241 getEventViewerDialog()->setColorMode( 2 );
1240 getEventViewerDialog()->setIncidence(local); 1242 getEventViewerDialog()->setIncidence(local);
1241 if ( localIsNew ) 1243 if ( localIsNew )
1242 getEventViewerDialog()->setColorMode( 2 ); 1244 getEventViewerDialog()->setColorMode( 2 );
1243 else 1245 else
1244 getEventViewerDialog()->setColorMode( 1 ); 1246 getEventViewerDialog()->setColorMode( 1 );
1245 getEventViewerDialog()->addIncidence(remote); 1247 getEventViewerDialog()->addIncidence(remote);
1246 getEventViewerDialog()->setColorMode( 0 ); 1248 getEventViewerDialog()->setColorMode( 0 );
1247 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1249 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1248 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1250 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1249 getEventViewerDialog()->showMe(); 1251 getEventViewerDialog()->showMe();
1250 result = getEventViewerDialog()->executeS( localIsNew ); 1252 result = getEventViewerDialog()->executeS( localIsNew );
1251 return result; 1253 return result;
1252 1254
1253 break; 1255 break;
1254 case SYNC_PREF_FORCE_LOCAL: 1256 case SYNC_PREF_FORCE_LOCAL:
1255 return 1; 1257 return 1;
1256 break; 1258 break;
1257 case SYNC_PREF_FORCE_REMOTE: 1259 case SYNC_PREF_FORCE_REMOTE:
1258 return 2; 1260 return 2;
1259 break; 1261 break;
1260 1262
1261 default: 1263 default:
1262 // SYNC_PREF_TAKE_BOTH not implemented 1264 // SYNC_PREF_TAKE_BOTH not implemented
1263 break; 1265 break;
1264 } 1266 }
1265 return 0; 1267 return 0;
1266} 1268}
1267Event* CalendarView::getLastSyncEvent() 1269Event* CalendarView::getLastSyncEvent()
1268{ 1270{
1269 Event* lse; 1271 Event* lse;
1270 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1272 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1271 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1273 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1272 if (!lse) { 1274 if (!lse) {
1273 lse = new Event(); 1275 lse = new Event();
1274 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1276 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1275 QString sum = ""; 1277 QString sum = "";
1276 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1278 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1277 sum = "E: "; 1279 sum = "E: ";
1278 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1280 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1279 lse->setDtStart( mLastCalendarSync ); 1281 lse->setDtStart( mLastCalendarSync );
1280 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1282 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1281 lse->setCategories( i18n("SyncEvent") ); 1283 lse->setCategories( i18n("SyncEvent") );
1282 lse->setReadOnly( true ); 1284 lse->setReadOnly( true );
1283 mCalendar->addEvent( lse ); 1285 mCalendar->addEvent( lse );
1284 } 1286 }
1285 1287
1286 return lse; 1288 return lse;
1287 1289
1288} 1290}
1289 1291
1290// we check, if the to delete event has a id for a profile 1292// we check, if the to delete event has a id for a profile
1291// if yes, we set this id in the profile to delete 1293// if yes, we set this id in the profile to delete
1292void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1294void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1293{ 1295{
1294 if ( lastSync.count() == 0 ) { 1296 if ( lastSync.count() == 0 ) {
1295 //qDebug(" lastSync.count() == 0"); 1297 //qDebug(" lastSync.count() == 0");
1296 return; 1298 return;
1297 } 1299 }
1298 if ( toDelete->typeID() == journalID ) 1300 if ( toDelete->typeID() == journalID )
1299 return; 1301 return;
1300 1302
1301 Event* eve = lastSync.first(); 1303 Event* eve = lastSync.first();
1302 1304
1303 while ( eve ) { 1305 while ( eve ) {
1304 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1306 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1305 if ( !id.isEmpty() ) { 1307 if ( !id.isEmpty() ) {
1306 QString des = eve->description(); 1308 QString des = eve->description();
1307 QString pref = "e"; 1309 QString pref = "e";
1308 if ( toDelete->typeID() == todoID ) 1310 if ( toDelete->typeID() == todoID )
1309 pref = "t"; 1311 pref = "t";
1310 des += pref+ id + ","; 1312 des += pref+ id + ",";
1311 eve->setReadOnly( false ); 1313 eve->setReadOnly( false );
1312 eve->setDescription( des ); 1314 eve->setDescription( des );
1313 //qDebug("setdes %s ", des.latin1()); 1315 //qDebug("setdes %s ", des.latin1());
1314 eve->setReadOnly( true ); 1316 eve->setReadOnly( true );
1315 } 1317 }
1316 eve = lastSync.next(); 1318 eve = lastSync.next();
1317 } 1319 }
1318 1320
1319} 1321}
1320void CalendarView::checkExternalId( Incidence * inc ) 1322void CalendarView::checkExternalId( Incidence * inc )
1321{ 1323{
1322 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1324 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1323 checkExternSyncEvent( lastSync, inc ); 1325 checkExternSyncEvent( lastSync, inc );
1324 1326
1325} 1327}
1326bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1328bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1327{ 1329{
1328 bool syncOK = true; 1330 bool syncOK = true;
1329 int addedEvent = 0; 1331 int addedEvent = 0;
1330 int addedEventR = 0; 1332 int addedEventR = 0;
1331 int deletedEventR = 0; 1333 int deletedEventR = 0;
1332 int deletedEventL = 0; 1334 int deletedEventL = 0;
1333 int changedLocal = 0; 1335 int changedLocal = 0;
1334 int changedRemote = 0; 1336 int changedRemote = 0;
1335 int filteredIN = 0; 1337 int filteredIN = 0;
1336 int filteredOUT = 0; 1338 int filteredOUT = 0;
1337 //QPtrList<Event> el = local->rawEvents(); 1339 //QPtrList<Event> el = local->rawEvents();
1338 Event* eventR; 1340 Event* eventR;
1339 QString uid; 1341 QString uid;
1340 int take; 1342 int take;
1341 Event* eventRSync; 1343 Event* eventRSync;
1342 Event* eventLSync; 1344 Event* eventLSync;
1343 clearAllViews(); 1345 clearAllViews();
1344 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1346 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1345 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1347 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1346 bool fullDateRange = false; 1348 bool fullDateRange = false;
1347 local->resetTempSyncStat(); 1349 local->resetTempSyncStat();
1348 mLastCalendarSync = QDateTime::currentDateTime(); 1350 mLastCalendarSync = QDateTime::currentDateTime();
1349 if ( mSyncManager->syncWithDesktop() ) { 1351 if ( mSyncManager->syncWithDesktop() ) {
1350 remote->resetPilotStat(1); 1352 remote->resetPilotStat(1);
1351 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1353 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1352 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1354 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1353 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1355 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1354 } else { 1356 } else {
1355 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1357 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1356 } 1358 }
1357 } 1359 }
1358 QDateTime modifiedCalendar = mLastCalendarSync; 1360 QDateTime modifiedCalendar = mLastCalendarSync;
1359 eventLSync = getLastSyncEvent(); 1361 eventLSync = getLastSyncEvent();
1360 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1362 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1361 if ( eventR ) { 1363 if ( eventR ) {
1362 qDebug("last-syncEvent on remote found "); 1364 qDebug("last-syncEvent on remote found ");
1363 eventRSync = (Event*) eventR->clone(); 1365 eventRSync = (Event*) eventR->clone();
1364 remote->deleteEvent(eventR ); 1366 remote->deleteEvent(eventR );
1365 1367
1366 } else { 1368 } else {
1367 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1369 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1368 eventRSync = (Event*)eventLSync->clone(); 1370 eventRSync = (Event*)eventLSync->clone();
1369 } else { 1371 } else {
1370 fullDateRange = true; 1372 fullDateRange = true;
1371 eventRSync = new Event(); 1373 eventRSync = new Event();
1372 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1374 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1373 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1375 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1374 eventRSync->setDtStart( mLastCalendarSync ); 1376 eventRSync->setDtStart( mLastCalendarSync );
1375 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1377 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1376 eventRSync->setCategories( i18n("SyncEvent") ); 1378 eventRSync->setCategories( i18n("SyncEvent") );
1377 } 1379 }
1378 } 1380 }
1379 if ( eventLSync->dtStart() == mLastCalendarSync ) 1381 if ( eventLSync->dtStart() == mLastCalendarSync )
1380 fullDateRange = true; 1382 fullDateRange = true;
1381 1383
1382 if ( ! fullDateRange ) { 1384 if ( ! fullDateRange ) {
1383 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1385 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1384 1386
1385 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1387 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1386 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1388 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1387 fullDateRange = true; 1389 fullDateRange = true;
1388 } 1390 }
1389 } 1391 }
1390 if ( mSyncManager->syncWithDesktop() ) { 1392 if ( mSyncManager->syncWithDesktop() ) {
1391 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1393 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1392 } 1394 }
1393 if ( fullDateRange ) 1395 if ( fullDateRange )
1394 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1396 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1395 else 1397 else
1396 mLastCalendarSync = eventLSync->dtStart(); 1398 mLastCalendarSync = eventLSync->dtStart();
1397 // for resyncing if own file has changed 1399 // for resyncing if own file has changed
1398 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1400 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1399 mLastCalendarSync = loadedFileVersion; 1401 mLastCalendarSync = loadedFileVersion;
1400 //qDebug("setting mLastCalendarSync "); 1402 //qDebug("setting mLastCalendarSync ");
1401 } 1403 }
1402 //qDebug("*************************** "); 1404 //qDebug("*************************** ");
1403 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1405 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1404 QPtrList<Incidence> er = remote->rawIncidences(); 1406 QPtrList<Incidence> er = remote->rawIncidences();
1405 Incidence* inR = er.first(); 1407 Incidence* inR = er.first();
1406 Incidence* inL; 1408 Incidence* inL;
1407 QProgressBar bar( er.count(),0 ); 1409 QProgressBar bar( er.count(),0 );
1408 bar.setCaption (i18n("Syncing - close to abort!") ); 1410 bar.setCaption (i18n("Syncing - close to abort!") );
1409 1411
1410 // ************** setting up filter ************* 1412 // ************** setting up filter *************
1411 CalFilter *filterIN = 0; 1413 CalFilter *filterIN = 0;
1412 CalFilter *filterOUT = 0; 1414 CalFilter *filterOUT = 0;
1413 CalFilter *filter = mFilters.first(); 1415 CalFilter *filter = mFilters.first();
1414 while(filter) { 1416 while(filter) {
1415 if ( filter->name() == mSyncManager->mFilterInCal ) 1417 if ( filter->name() == mSyncManager->mFilterInCal )
1416 filterIN = filter; 1418 filterIN = filter;
1417 if ( filter->name() == mSyncManager->mFilterOutCal ) 1419 if ( filter->name() == mSyncManager->mFilterOutCal )
1418 filterOUT = filter; 1420 filterOUT = filter;
1419 filter = mFilters.next(); 1421 filter = mFilters.next();
1420 } 1422 }
1421 int w = 300; 1423 int w = 300;
1422 if ( QApplication::desktop()->width() < 320 ) 1424 if ( QApplication::desktop()->width() < 320 )
1423 w = 220; 1425 w = 220;
1424 int h = bar.sizeHint().height() ; 1426 int h = bar.sizeHint().height() ;
1425 int dw = QApplication::desktop()->width(); 1427 int dw = QApplication::desktop()->width();
1426 int dh = QApplication::desktop()->height(); 1428 int dh = QApplication::desktop()->height();
1427 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1429 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1428 bar.show(); 1430 bar.show();
1429 int modulo = (er.count()/10)+1; 1431 int modulo = (er.count()/10)+1;
1430 int incCounter = 0; 1432 int incCounter = 0;
1431 while ( inR ) { 1433 while ( inR ) {
1432 if ( ! bar.isVisible() ) 1434 if ( ! bar.isVisible() )
1433 return false; 1435 return false;
1434 if ( incCounter % modulo == 0 ) 1436 if ( incCounter % modulo == 0 )
1435 bar.setProgress( incCounter ); 1437 bar.setProgress( incCounter );
1436 ++incCounter; 1438 ++incCounter;
1437 uid = inR->uid(); 1439 uid = inR->uid();
1438 bool skipIncidence = false; 1440 bool skipIncidence = false;
1439 if ( uid.left(15) == QString("last-syncEvent-") ) 1441 if ( uid.left(15) == QString("last-syncEvent-") )
1440 skipIncidence = true; 1442 skipIncidence = true;
1441 QString idS; 1443 QString idS;
1442 qApp->processEvents(); 1444 qApp->processEvents();
1443 if ( !skipIncidence ) { 1445 if ( !skipIncidence ) {
1444 inL = local->incidenceForUid( uid , false ); 1446 inL = local->incidenceForUid( uid , false );
1445 if ( inL ) { // maybe conflict - same uid in both calendars 1447 if ( inL ) { // maybe conflict - same uid in both calendars
1446 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1448 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1447 //qDebug("take %d %s ", take, inL->summary().latin1()); 1449 //qDebug("take %d %s ", take, inL->summary().latin1());
1448 if ( take == 3 ) 1450 if ( take == 3 )
@@ -2003,1548 +2005,1546 @@ bool CalendarView::importQtopia( const QString &categories,
2003 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2005 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2004 bool loadOk = true; 2006 bool loadOk = true;
2005 if ( !categories.isEmpty() ) 2007 if ( !categories.isEmpty() )
2006 loadOk = qtopiaFormat.load( calendar, categories ); 2008 loadOk = qtopiaFormat.load( calendar, categories );
2007 if ( loadOk && !datebook.isEmpty() ) 2009 if ( loadOk && !datebook.isEmpty() )
2008 loadOk = qtopiaFormat.load( calendar, datebook ); 2010 loadOk = qtopiaFormat.load( calendar, datebook );
2009 if ( loadOk && !todolist.isEmpty() ) 2011 if ( loadOk && !todolist.isEmpty() )
2010 loadOk = qtopiaFormat.load( calendar, todolist ); 2012 loadOk = qtopiaFormat.load( calendar, todolist );
2011 2013
2012 if ( loadOk ) { 2014 if ( loadOk ) {
2013 getEventViewerDialog()->setSyncMode( true ); 2015 getEventViewerDialog()->setSyncMode( true );
2014 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2016 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2015 getEventViewerDialog()->setSyncMode( false ); 2017 getEventViewerDialog()->setSyncMode( false );
2016 qApp->processEvents(); 2018 qApp->processEvents();
2017 if ( syncOK ) { 2019 if ( syncOK ) {
2018 if ( mSyncManager->mWriteBackFile ) 2020 if ( mSyncManager->mWriteBackFile )
2019 { 2021 {
2020 // write back XML file 2022 // write back XML file
2021 2023
2022 } 2024 }
2023 setModified( true ); 2025 setModified( true );
2024 } 2026 }
2025 } else { 2027 } else {
2026 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2028 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2027 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2029 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2028 question, i18n("Ok")) ; 2030 question, i18n("Ok")) ;
2029 } 2031 }
2030 delete calendar; 2032 delete calendar;
2031 updateView(); 2033 updateView();
2032 return syncOK; 2034 return syncOK;
2033 2035
2034 2036
2035#endif 2037#endif
2036 2038
2037} 2039}
2038 2040
2039void CalendarView::setSyncEventsReadOnly() 2041void CalendarView::setSyncEventsReadOnly()
2040{ 2042{
2041 mCalendar->setSyncEventsReadOnly(); 2043 mCalendar->setSyncEventsReadOnly();
2042} 2044}
2043 2045
2044bool CalendarView::loadCalendars() 2046bool CalendarView::loadCalendars()
2045{ 2047{
2046 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2048 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2047 KopiCalendarFile * cal = calendars.first(); 2049 KopiCalendarFile * cal = calendars.first();
2048 mCalendar->setDefaultCalendar( 1 ); 2050 mCalendar->setDefaultCalendar( 1 );
2049 openCalendar( MainWindow::defaultFileName(), false ); 2051 openCalendar( MainWindow::defaultFileName(), false );
2050 cal = calendars.next(); 2052 cal = calendars.next();
2051 while ( cal ) { 2053 while ( cal ) {
2052 addCalendar( cal ); 2054 addCalendar( cal );
2053 cal = calendars.next(); 2055 cal = calendars.next();
2054 } 2056 }
2055 restoreCalendarSettings(); 2057 restoreCalendarSettings();
2056 return true; 2058 return true;
2057} 2059}
2058bool CalendarView::restoreCalendarSettings() 2060bool CalendarView::restoreCalendarSettings()
2059{ 2061{
2060 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2062 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2061 KopiCalendarFile * cal = calendars.first(); 2063 KopiCalendarFile * cal = calendars.first();
2062 while ( cal ) { 2064 while ( cal ) {
2063 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2065 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2064 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2066 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2065 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2067 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2066 if ( cal->isStandard ) 2068 if ( cal->isStandard )
2067 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2069 mCalendar->setDefaultCalendar( cal->mCalNumber );
2068 cal = calendars.next(); 2070 cal = calendars.next();
2069 } 2071 }
2070 setSyncEventsReadOnly(); 2072 setSyncEventsReadOnly();
2071 mCalendar->reInitAlarmSettings(); 2073 mCalendar->reInitAlarmSettings();
2072 updateUnmanagedViews(); 2074 updateUnmanagedViews();
2073 updateView(); 2075 updateView();
2074 return true; 2076 return true;
2075} 2077}
2076void CalendarView::addCalendarId( int id ) 2078void CalendarView::addCalendarId( int id )
2077{ 2079{
2078 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2080 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2079 if ( cal ) 2081 if ( cal )
2080 addCalendar( cal ); 2082 addCalendar( cal );
2081} 2083}
2082bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2084bool CalendarView::addCalendar( KopiCalendarFile * cal )
2083{ 2085{
2084 cal->mErrorOnLoad = false; 2086 cal->mErrorOnLoad = false;
2085 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2087 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2086 cal->mLoadDt = QDateTime::currentDateTime(); 2088 cal->mLoadDt = QDateTime::currentDateTime();
2087 return true; 2089 return true;
2088 } 2090 }
2089 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2091 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2090 cal->mErrorOnLoad = true; 2092 cal->mErrorOnLoad = true;
2091 return false; 2093 return false;
2092} 2094}
2093bool CalendarView::openCalendar(QString filename, bool merge) 2095bool CalendarView::openCalendar(QString filename, bool merge)
2094{ 2096{
2095 2097
2096 if (filename.isEmpty()) { 2098 if (filename.isEmpty()) {
2097 return false; 2099 return false;
2098 } 2100 }
2099 2101
2100 if (!QFile::exists(filename)) { 2102 if (!QFile::exists(filename)) {
2101 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2103 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2102 return false; 2104 return false;
2103 } 2105 }
2104 2106
2105 globalFlagBlockAgenda = 1; 2107 globalFlagBlockAgenda = 1;
2106 clearAllViews(); 2108 clearAllViews();
2107 if (!merge) { 2109 if (!merge) {
2108 mViewManager->setDocumentId( filename ); 2110 mViewManager->setDocumentId( filename );
2109 mCalendar->close(); 2111 mCalendar->close();
2110 } 2112 }
2111 mStorage->setFileName( filename ); 2113 mStorage->setFileName( filename );
2112 2114
2113 if ( mStorage->load() ) { 2115 if ( mStorage->load() ) {
2114 if ( merge ) ;//setModified( true ); 2116 if ( merge ) ;//setModified( true );
2115 else { 2117 else {
2116 //setModified( true ); 2118 //setModified( true );
2117 mViewManager->setDocumentId( filename ); 2119 mViewManager->setDocumentId( filename );
2118 mDialogManager->setDocumentId( filename ); 2120 mDialogManager->setDocumentId( filename );
2119 mTodoList->setDocumentId( filename ); 2121 mTodoList->setDocumentId( filename );
2120 } 2122 }
2121 globalFlagBlockAgenda = 2; 2123 globalFlagBlockAgenda = 2;
2122 // if ( getLastSyncEvent() ) 2124 // if ( getLastSyncEvent() )
2123 // getLastSyncEvent()->setReadOnly( true ); 2125 // getLastSyncEvent()->setReadOnly( true );
2124 mCalendar->reInitAlarmSettings(); 2126 mCalendar->reInitAlarmSettings();
2125 setSyncEventsReadOnly(); 2127 setSyncEventsReadOnly();
2126 updateUnmanagedViews(); 2128 updateUnmanagedViews();
2127 updateView(); 2129 updateView();
2128 if ( filename != MainWindow::defaultFileName() ) { 2130 if ( filename != MainWindow::defaultFileName() ) {
2129 saveCalendar( MainWindow::defaultFileName() ); 2131 saveCalendar( MainWindow::defaultFileName() );
2130 } else { 2132 } else {
2131 QFileInfo finf ( MainWindow::defaultFileName()); 2133 QFileInfo finf ( MainWindow::defaultFileName());
2132 if ( finf.exists() ) { 2134 if ( finf.exists() ) {
2133 setLoadedFileVersion( finf.lastModified () ); 2135 setLoadedFileVersion( finf.lastModified () );
2134 } 2136 }
2135 } 2137 }
2136 return true; 2138 return true;
2137 } else { 2139 } else {
2138 // while failing to load, the calendar object could 2140 // while failing to load, the calendar object could
2139 // have become partially populated. Clear it out. 2141 // have become partially populated. Clear it out.
2140 if ( !merge ) { 2142 if ( !merge ) {
2141 mCalendar->close(); 2143 mCalendar->close();
2142 mViewManager->setDocumentId( filename ); 2144 mViewManager->setDocumentId( filename );
2143 mDialogManager->setDocumentId( filename ); 2145 mDialogManager->setDocumentId( filename );
2144 mTodoList->setDocumentId( filename ); 2146 mTodoList->setDocumentId( filename );
2145 } 2147 }
2146 2148
2147 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2149 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2148 2150
2149 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2151 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2150 globalFlagBlockAgenda = 2; 2152 globalFlagBlockAgenda = 2;
2151 mCalendar->reInitAlarmSettings(); 2153 mCalendar->reInitAlarmSettings();
2152 setSyncEventsReadOnly(); 2154 setSyncEventsReadOnly();
2153 updateUnmanagedViews(); 2155 updateUnmanagedViews();
2154 updateView(); 2156 updateView();
2155 } 2157 }
2156 return false; 2158 return false;
2157} 2159}
2158void CalendarView::mergeFile( QString fn ) 2160void CalendarView::mergeFile( QString fn )
2159{ 2161{
2160 clearAllViews(); 2162 clearAllViews();
2161 mCalendar->mergeCalendarFile( fn ); 2163 mCalendar->mergeCalendarFile( fn );
2162 mCalendar->reInitAlarmSettings(); 2164 mCalendar->reInitAlarmSettings();
2163 setSyncEventsReadOnly(); 2165 setSyncEventsReadOnly();
2164 updateUnmanagedViews(); 2166 updateUnmanagedViews();
2165 updateView(); 2167 updateView();
2166} 2168}
2167void CalendarView::showOpenError() 2169void CalendarView::showOpenError()
2168{ 2170{
2169 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2171 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2170} 2172}
2171void CalendarView::setLoadedFileVersion(QDateTime dt) 2173void CalendarView::setLoadedFileVersion(QDateTime dt)
2172{ 2174{
2173 loadedFileVersion = dt; 2175 loadedFileVersion = dt;
2174} 2176}
2175bool CalendarView::checkFileChanged(QString fn) 2177bool CalendarView::checkFileChanged(QString fn)
2176{ 2178{
2177 QFileInfo finf ( fn ); 2179 QFileInfo finf ( fn );
2178 if ( !finf.exists() ) 2180 if ( !finf.exists() )
2179 return true; 2181 return true;
2180 QDateTime dt = finf.lastModified (); 2182 QDateTime dt = finf.lastModified ();
2181 if ( dt <= loadedFileVersion ) 2183 if ( dt <= loadedFileVersion )
2182 return false; 2184 return false;
2183 return true; 2185 return true;
2184 2186
2185} 2187}
2186void CalendarView::watchSavedFile() 2188void CalendarView::watchSavedFile()
2187{ 2189{
2188 QFileInfo finf ( MainWindow::defaultFileName()); 2190 QFileInfo finf ( MainWindow::defaultFileName());
2189 if ( !finf.exists() ) 2191 if ( !finf.exists() )
2190 return; 2192 return;
2191 QDateTime dt = finf.lastModified (); 2193 QDateTime dt = finf.lastModified ();
2192 if ( dt < loadedFileVersion ) { 2194 if ( dt < loadedFileVersion ) {
2193 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2195 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2194 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2196 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2195 return; 2197 return;
2196 } 2198 }
2197 loadedFileVersion = dt; 2199 loadedFileVersion = dt;
2198} 2200}
2199bool CalendarView::checkAllFileVersions() 2201bool CalendarView::checkAllFileVersions()
2200{ 2202{
2201 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2203 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2202 KopiCalendarFile * cal = calendars.first(); 2204 KopiCalendarFile * cal = calendars.first();
2203 mCalendar->setDefaultCalendar( 1 ); 2205 mCalendar->setDefaultCalendar( 1 );
2204 mCalendar->setDefaultCalendarEnabledOnly(); 2206 mCalendar->setDefaultCalendarEnabledOnly();
2205 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2207 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2206 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2208 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2207 restoreCalendarSettings(); 2209 restoreCalendarSettings();
2208 return false; 2210 return false;
2209 } 2211 }
2210 } 2212 }
2211 cal = calendars.next(); 2213 cal = calendars.next();
2212 QDateTime storeTemp = loadedFileVersion; 2214 QDateTime storeTemp = loadedFileVersion;
2213 while ( cal ) { 2215 while ( cal ) {
2214 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2216 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2215 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2217 mCalendar->setDefaultCalendar( cal->mCalNumber );
2216 mCalendar->setDefaultCalendarEnabledOnly(); 2218 mCalendar->setDefaultCalendarEnabledOnly();
2217 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2219 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2218 if ( !checkFileVersion(cal->mFileName )) { 2220 if ( !checkFileVersion(cal->mFileName )) {
2219 loadedFileVersion = storeTemp; 2221 loadedFileVersion = storeTemp;
2220 restoreCalendarSettings(); 2222 restoreCalendarSettings();
2221 return false; 2223 return false;
2222 } 2224 }
2223 } 2225 }
2224 cal = calendars.next(); 2226 cal = calendars.next();
2225 } 2227 }
2226 loadedFileVersion = storeTemp; 2228 loadedFileVersion = storeTemp;
2227 return true; 2229 return true;
2228} 2230}
2229bool CalendarView::checkFileVersion(QString fn) 2231bool CalendarView::checkFileVersion(QString fn)
2230{ 2232{
2231 QFileInfo finf ( fn ); 2233 QFileInfo finf ( fn );
2232 if ( !finf.exists() ) 2234 if ( !finf.exists() )
2233 return true; 2235 return true;
2234 QDateTime dt = finf.lastModified (); 2236 QDateTime dt = finf.lastModified ();
2235 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2237 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2236 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2238 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2237 if ( dt <= loadedFileVersion ) 2239 if ( dt <= loadedFileVersion )
2238 return true; 2240 return true;
2239 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2241 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2240 i18n("KO/Pi Warning"),i18n("Overwrite"), 2242 i18n("KO/Pi Warning"),i18n("Overwrite"),
2241 i18n("Sync+save")); 2243 i18n("Sync+save"));
2242 2244
2243 if ( km == KMessageBox::Cancel ) 2245 if ( km == KMessageBox::Cancel )
2244 return false; 2246 return false;
2245 if ( km == KMessageBox::Yes ) 2247 if ( km == KMessageBox::Yes )
2246 return true; 2248 return true;
2247 2249
2248 setSyncDevice("deleteaftersync" ); 2250 setSyncDevice("deleteaftersync" );
2249 mSyncManager->mAskForPreferences = true; 2251 mSyncManager->mAskForPreferences = true;
2250 mSyncManager->mSyncAlgoPrefs = 3; 2252 mSyncManager->mSyncAlgoPrefs = 3;
2251 mSyncManager->mWriteBackFile = false; 2253 mSyncManager->mWriteBackFile = false;
2252 mSyncManager->mWriteBackExistingOnly = false; 2254 mSyncManager->mWriteBackExistingOnly = false;
2253 mSyncManager->mShowSyncSummary = false; 2255 mSyncManager->mShowSyncSummary = false;
2254 syncCalendar( fn, 3 ); 2256 syncCalendar( fn, 3 );
2255 Event * e = getLastSyncEvent(); 2257 Event * e = getLastSyncEvent();
2256 if ( e ) 2258 if ( e )
2257 mCalendar->deleteEvent( e ); 2259 mCalendar->deleteEvent( e );
2258 return true; 2260 return true;
2259} 2261}
2260bool CalendarView::saveCalendars() 2262bool CalendarView::saveCalendars()
2261{ 2263{
2262 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2264 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2263 KopiCalendarFile * cal = calendars.first(); 2265 KopiCalendarFile * cal = calendars.first();
2264 mCalendar->setDefaultCalendar( 1 ); 2266 mCalendar->setDefaultCalendar( 1 );
2265 mCalendar->setDefaultCalendarEnabledOnly(); 2267 mCalendar->setDefaultCalendarEnabledOnly();
2266 saveCalendar( MainWindow::defaultFileName() ); 2268 saveCalendar( MainWindow::defaultFileName() );
2267 cal = calendars.next(); 2269 cal = calendars.next();
2268 while ( cal ) { 2270 while ( cal ) {
2269 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2271 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2270 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2272 mCalendar->setDefaultCalendar( cal->mCalNumber );
2271 mCalendar->setDefaultCalendarEnabledOnly(); 2273 mCalendar->setDefaultCalendarEnabledOnly();
2272 if ( saveCalendar( cal->mFileName ) ) 2274 if ( saveCalendar( cal->mFileName ) )
2273 cal->mLoadDt = QDateTime::currentDateTime(); 2275 cal->mLoadDt = QDateTime::currentDateTime();
2274 } 2276 }
2275 cal = calendars.next(); 2277 cal = calendars.next();
2276 } 2278 }
2277 restoreCalendarSettings(); 2279 restoreCalendarSettings();
2278 return true; 2280 return true;
2279} 2281}
2280bool CalendarView::saveCalendar( QString filename ) 2282bool CalendarView::saveCalendar( QString filename )
2281{ 2283{
2282 2284
2283 // Store back all unsaved data into calendar object 2285 // Store back all unsaved data into calendar object
2284 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2286 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2285 if ( mViewManager->currentView() ) 2287 if ( mViewManager->currentView() )
2286 mViewManager->currentView()->flushView(); 2288 mViewManager->currentView()->flushView();
2287 2289
2288 2290
2289 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2291 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2290 mStorage->setSaveFormat( new ICalFormat() ); 2292 mStorage->setSaveFormat( new ICalFormat() );
2291 mStorage->setFileName( filename ); 2293 mStorage->setFileName( filename );
2292 bool success; 2294 bool success;
2293 success = mStorage->save(); 2295 success = mStorage->save();
2294 if ( !success ) { 2296 if ( !success ) {
2295 return false; 2297 return false;
2296 } 2298 }
2297 if ( filename == MainWindow::defaultFileName() ) { 2299 if ( filename == MainWindow::defaultFileName() ) {
2298 setLoadedFileVersion( lfv ); 2300 setLoadedFileVersion( lfv );
2299 watchSavedFile(); 2301 watchSavedFile();
2300 } 2302 }
2301 return true; 2303 return true;
2302} 2304}
2303 2305
2304void CalendarView::closeCalendar() 2306void CalendarView::closeCalendar()
2305{ 2307{
2306 2308
2307 // child windows no longer valid 2309 // child windows no longer valid
2308 clearAllViews(); 2310 clearAllViews();
2309 emit closingDown(); 2311 emit closingDown();
2310 2312
2311 mCalendar->close(); 2313 mCalendar->close();
2312 setModified(false); 2314 setModified(false);
2313 updateView(); 2315 updateView();
2314} 2316}
2315 2317
2316void CalendarView::archiveCalendar() 2318void CalendarView::archiveCalendar()
2317{ 2319{
2318 mDialogManager->showArchiveDialog(); 2320 mDialogManager->showArchiveDialog();
2319} 2321}
2320 2322
2321 2323
2322void CalendarView::readSettings() 2324void CalendarView::readSettings()
2323{ 2325{
2324 2326
2325 2327
2326 // mViewManager->showAgendaView(); 2328 // mViewManager->showAgendaView();
2327 QString str; 2329 QString str;
2328 //qDebug("CalendarView::readSettings() "); 2330 //qDebug("CalendarView::readSettings() ");
2329 // read settings from the KConfig, supplying reasonable 2331 // read settings from the KConfig, supplying reasonable
2330 // defaults where none are to be found 2332 // defaults where none are to be found
2331 KConfig *config = KOGlobals::config(); 2333 KConfig *config = KOGlobals::config();
2332#ifndef KORG_NOSPLITTER 2334#ifndef KORG_NOSPLITTER
2333 config->setGroup("KOrganizer Geometry"); 2335 config->setGroup("KOrganizer Geometry");
2334 2336
2335 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2337 QValueList<int> sizes = config->readIntListEntry("Separator1");
2336 if (sizes.count() != 2) { 2338 if (sizes.count() != 2) {
2337 sizes << mDateNavigator->minimumSizeHint().width(); 2339 sizes << mDateNavigator->minimumSizeHint().width();
2338 sizes << 300; 2340 sizes << 300;
2339 } 2341 }
2340 mPanner->setSizes(sizes); 2342 mPanner->setSizes(sizes);
2341 2343
2342 sizes = config->readIntListEntry("Separator2"); 2344 sizes = config->readIntListEntry("Separator2");
2343 if ( ( mResourceView && sizes.count() == 4 ) || 2345 if ( ( mResourceView && sizes.count() == 4 ) ||
2344 ( !mResourceView && sizes.count() == 3 ) ) { 2346 ( !mResourceView && sizes.count() == 3 ) ) {
2345 mLeftSplitter->setSizes(sizes); 2347 mLeftSplitter->setSizes(sizes);
2346 } 2348 }
2347#endif 2349#endif
2348 globalFlagBlockAgenda = 1; 2350 globalFlagBlockAgenda = 1;
2349 mViewManager->showAgendaView(); 2351 mViewManager->showAgendaView();
2350 //mViewManager->readSettings( config ); 2352 //mViewManager->readSettings( config );
2351 mTodoList->restoreLayout(config,QString("Todo Layout")); 2353 mTodoList->restoreLayout(config,QString("Todo Layout"));
2352 readFilterSettings(config); 2354 readFilterSettings(config);
2353 2355
2354#ifdef DESKTOP_VERSION 2356#ifdef DESKTOP_VERSION
2355 config->setGroup("WidgetLayout"); 2357 config->setGroup("WidgetLayout");
2356 QStringList list; 2358 QStringList list;
2357 list = config->readListEntry("MainLayout"); 2359 list = config->readListEntry("MainLayout");
2358 int x,y,w,h; 2360 int x,y,w,h;
2359 if ( ! list.isEmpty() ) { 2361 if ( ! list.isEmpty() ) {
2360 x = list[0].toInt(); 2362 x = list[0].toInt();
2361 y = list[1].toInt(); 2363 y = list[1].toInt();
2362 w = list[2].toInt(); 2364 w = list[2].toInt();
2363 h = list[3].toInt(); 2365 h = list[3].toInt();
2364 KApplication::testCoords( &x,&y,&w,&h ); 2366 KApplication::testCoords( &x,&y,&w,&h );
2365 topLevelWidget()->setGeometry(x,y,w,h); 2367 topLevelWidget()->setGeometry(x,y,w,h);
2366 2368
2367 } else { 2369 } else {
2368 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2370 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2369 } 2371 }
2370 list = config->readListEntry("EditEventLayout"); 2372 list = config->readListEntry("EditEventLayout");
2371 if ( ! list.isEmpty() ) { 2373 if ( ! list.isEmpty() ) {
2372 x = list[0].toInt(); 2374 x = list[0].toInt();
2373 y = list[1].toInt(); 2375 y = list[1].toInt();
2374 w = list[2].toInt(); 2376 w = list[2].toInt();
2375 h = list[3].toInt(); 2377 h = list[3].toInt();
2376 KApplication::testCoords( &x,&y,&w,&h ); 2378 KApplication::testCoords( &x,&y,&w,&h );
2377 mEventEditor->setGeometry(x,y,w,h); 2379 mEventEditor->setGeometry(x,y,w,h);
2378 2380
2379 } 2381 }
2380 list = config->readListEntry("EditTodoLayout"); 2382 list = config->readListEntry("EditTodoLayout");
2381 if ( ! list.isEmpty() ) { 2383 if ( ! list.isEmpty() ) {
2382 x = list[0].toInt(); 2384 x = list[0].toInt();
2383 y = list[1].toInt(); 2385 y = list[1].toInt();
2384 w = list[2].toInt(); 2386 w = list[2].toInt();
2385 h = list[3].toInt(); 2387 h = list[3].toInt();
2386 KApplication::testCoords( &x,&y,&w,&h ); 2388 KApplication::testCoords( &x,&y,&w,&h );
2387 mTodoEditor->setGeometry(x,y,w,h); 2389 mTodoEditor->setGeometry(x,y,w,h);
2388 2390
2389 } 2391 }
2390 list = config->readListEntry("ViewerLayout"); 2392 list = config->readListEntry("ViewerLayout");
2391 if ( ! list.isEmpty() ) { 2393 if ( ! list.isEmpty() ) {
2392 x = list[0].toInt(); 2394 x = list[0].toInt();
2393 y = list[1].toInt(); 2395 y = list[1].toInt();
2394 w = list[2].toInt(); 2396 w = list[2].toInt();
2395 h = list[3].toInt(); 2397 h = list[3].toInt();
2396 KApplication::testCoords( &x,&y,&w,&h ); 2398 KApplication::testCoords( &x,&y,&w,&h );
2397 getEventViewerDialog()->setGeometry(x,y,w,h); 2399 getEventViewerDialog()->setGeometry(x,y,w,h);
2398 } 2400 }
2399#endif 2401#endif
2400 config->setGroup( "Views" ); 2402 config->setGroup( "Views" );
2401 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2403 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2402 2404
2403 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2405 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2404 2406
2405 int resetval = 0; 2407 int resetval = 0;
2406 int maxVal = 0; 2408 int maxVal = 0;
2407 if (sizes.count() != 3) { 2409 if (sizes.count() != 3) {
2408 if ( KOPrefs::instance()->mVerticalScreen ) { 2410 if ( KOPrefs::instance()->mVerticalScreen ) {
2409 resetval = mDateNavigator->sizeHint().width()+2; 2411 resetval = mDateNavigator->sizeHint().width()+2;
2410 } else { 2412 } else {
2411 resetval = mDateNavigator->sizeHint().height()+2; 2413 resetval = mDateNavigator->sizeHint().height()+2;
2412 } 2414 }
2413 } 2415 }
2414 if ( resetval ) { 2416 if ( resetval ) {
2415 sizes.clear(); 2417 sizes.clear();
2416 if ( KOPrefs::instance()->mVerticalScreen ) { 2418 if ( KOPrefs::instance()->mVerticalScreen ) {
2417 maxVal = QApplication::desktop()->width() -10; 2419 maxVal = QApplication::desktop()->width() -10;
2418 } else { 2420 } else {
2419 maxVal = QApplication::desktop()->height()-10; 2421 maxVal = QApplication::desktop()->height()-10;
2420 } 2422 }
2421 sizes << resetval; 2423 sizes << resetval;
2422 if ( maxVal < resetval + resetval) 2424 if ( maxVal < resetval + resetval)
2423 resetval = maxVal - resetval; 2425 resetval = maxVal - resetval;
2424 sizes << resetval; 2426 sizes << resetval;
2425 sizes << 100; 2427 sizes << 100;
2426 } 2428 }
2427 mLeftFrame->setSizes(sizes); 2429 mLeftFrame->setSizes(sizes);
2428 sizes = config->readIntListEntry("Main Splitter Frame"); 2430 sizes = config->readIntListEntry("Main Splitter Frame");
2429 resetval = 0; 2431 resetval = 0;
2430 maxVal = 0; 2432 maxVal = 0;
2431 if (sizes.count() != 2) { 2433 if (sizes.count() != 2) {
2432 if ( !KOPrefs::instance()->mVerticalScreen ) { 2434 if ( !KOPrefs::instance()->mVerticalScreen ) {
2433 resetval = mDateNavigator->sizeHint().width()+2; 2435 resetval = mDateNavigator->sizeHint().width()+2;
2434 } else { 2436 } else {
2435 resetval = mDateNavigator->sizeHint().height()+2; 2437 resetval = mDateNavigator->sizeHint().height()+2;
2436 } 2438 }
2437 } 2439 }
2438 if ( resetval ) { 2440 if ( resetval ) {
2439 sizes.clear(); 2441 sizes.clear();
2440 if ( !KOPrefs::instance()->mVerticalScreen ) { 2442 if ( !KOPrefs::instance()->mVerticalScreen ) {
2441 maxVal = QApplication::desktop()->width() -10; 2443 maxVal = QApplication::desktop()->width() -10;
2442 } else { 2444 } else {
2443 maxVal = QApplication::desktop()->height()-10; 2445 maxVal = QApplication::desktop()->height()-10;
2444 } 2446 }
2445 sizes << resetval; 2447 sizes << resetval;
2446 if ( maxVal < resetval + resetval) 2448 if ( maxVal < resetval + resetval)
2447 resetval = maxVal - resetval; 2449 resetval = maxVal - resetval;
2448 sizes << resetval; 2450 sizes << resetval;
2449 } 2451 }
2450 mMainFrame->setSizes(sizes); 2452 mMainFrame->setSizes(sizes);
2451 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2453 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2452 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2454 else if ( dateCount == 7 ) mNavigator->selectWeek();
2453 else mNavigator->selectDates( dateCount ); 2455 else mNavigator->selectDates( dateCount );
2454 // mViewManager->readSettings( config ); 2456 // mViewManager->readSettings( config );
2455 updateConfig(); 2457 updateConfig();
2456 globalFlagBlockAgenda = 2; 2458 globalFlagBlockAgenda = 2;
2457 mViewManager->readSettings( config ); 2459 mViewManager->readSettings( config );
2458 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2460 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2459} 2461}
2460 2462
2461void CalendarView::checkSuspendAlarm() 2463void CalendarView::checkSuspendAlarm()
2462{ 2464{
2463 if ( mSuspendTimer->isActive() ) { 2465 if ( mSuspendTimer->isActive() ) {
2464 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2466 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2465 } 2467 }
2466} 2468}
2467void CalendarView::writeSettings() 2469void CalendarView::writeSettings()
2468{ 2470{
2469 // kdDebug() << "CalendarView::writeSettings" << endl; 2471 // kdDebug() << "CalendarView::writeSettings" << endl;
2470 2472
2471 KConfig *config = KOGlobals::config(); 2473 KConfig *config = KOGlobals::config();
2472 2474
2473 mViewManager->writeSettings( config ); 2475 mViewManager->writeSettings( config );
2474 mTodoList->saveLayout(config,QString("Todo Layout")); 2476 mTodoList->saveLayout(config,QString("Todo Layout"));
2475 mDialogManager->writeSettings( config ); 2477 mDialogManager->writeSettings( config );
2476 //KOPrefs::instance()->usrWriteConfig(); 2478 //KOPrefs::instance()->usrWriteConfig();
2477 KOPrefs::instance()->writeConfig(); 2479 KOPrefs::instance()->writeConfig();
2478 2480
2479 writeFilterSettings(config); 2481 writeFilterSettings(config);
2480 config->setGroup( "AppRun" ); 2482 config->setGroup( "AppRun" );
2481 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2483 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2482 int days = dt.daysTo( QDate::currentDate() ); 2484 int days = dt.daysTo( QDate::currentDate() );
2483 dt = dt.addDays( days ); 2485 dt = dt.addDays( days );
2484 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2486 int secs = dt.secsTo( QDateTime::currentDateTime() );
2485 config->writeEntry( "LatestProgramStopDays", days ); 2487 config->writeEntry( "LatestProgramStopDays", days );
2486 config->writeEntry( "LatestProgramStopSecs", secs ); 2488 config->writeEntry( "LatestProgramStopSecs", secs );
2487 //qDebug("KO: Writing stop time: %d ", secs); 2489 //qDebug("KO: Writing stop time: %d ", secs);
2488 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2490 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2489 //QDateTime latest = dt.addSecs ( secs ); 2491 //QDateTime latest = dt.addSecs ( secs );
2490 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2492 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2491 config->setGroup( "Views" ); 2493 config->setGroup( "Views" );
2492 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2494 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2493 2495
2494#if 0 2496#if 0
2495 qDebug("********************* "); 2497 qDebug("********************* ");
2496 qDebug("Testcode secsto "); 2498 qDebug("Testcode secsto ");
2497 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2499 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2498 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2500 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2499 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2501 int secsto = dt_nodaylight.secsTo( dt_daylight );
2500 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2502 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2501 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2503 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2502 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2504 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2503 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2505 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2504 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2506 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2505 qDebug("********************* testcode end"); 2507 qDebug("********************* testcode end");
2506 2508
2507#endif 2509#endif
2508 2510
2509 QValueList<int> listINT = mLeftFrame->sizes(); 2511 QValueList<int> listINT = mLeftFrame->sizes();
2510 config->writeEntry("Left Splitter Frame",listINT); 2512 config->writeEntry("Left Splitter Frame",listINT);
2511 QValueList<int> listINT2 = mMainFrame->sizes(); 2513 QValueList<int> listINT2 = mMainFrame->sizes();
2512 config->writeEntry("Main Splitter Frame",listINT2); 2514 config->writeEntry("Main Splitter Frame",listINT2);
2513#ifdef DESKTOP_VERSION 2515#ifdef DESKTOP_VERSION
2514 config->setGroup("WidgetLayout"); 2516 config->setGroup("WidgetLayout");
2515 QStringList list ;//= config->readListEntry("MainLayout"); 2517 QStringList list ;//= config->readListEntry("MainLayout");
2516 int x,y,w,h; 2518 int x,y,w,h;
2517 QWidget* wid; 2519 QWidget* wid;
2518 wid = topLevelWidget(); 2520 wid = topLevelWidget();
2519 x = wid->geometry().x(); 2521 x = wid->geometry().x();
2520 y = wid->geometry().y(); 2522 y = wid->geometry().y();
2521 w = wid->width(); 2523 w = wid->width();
2522 h = wid->height(); 2524 h = wid->height();
2523 list.clear(); 2525 list.clear();
2524 list << QString::number( x ); 2526 list << QString::number( x );
2525 list << QString::number( y ); 2527 list << QString::number( y );
2526 list << QString::number( w ); 2528 list << QString::number( w );
2527 list << QString::number( h ); 2529 list << QString::number( h );
2528 config->writeEntry("MainLayout",list ); 2530 config->writeEntry("MainLayout",list );
2529 2531
2530 wid = mEventEditor; 2532 wid = mEventEditor;
2531 x = wid->geometry().x(); 2533 x = wid->geometry().x();
2532 y = wid->geometry().y(); 2534 y = wid->geometry().y();
2533 w = wid->width(); 2535 w = wid->width();
2534 h = wid->height(); 2536 h = wid->height();
2535 list.clear(); 2537 list.clear();
2536 list << QString::number( x ); 2538 list << QString::number( x );
2537 list << QString::number( y ); 2539 list << QString::number( y );
2538 list << QString::number( w ); 2540 list << QString::number( w );
2539 list << QString::number( h ); 2541 list << QString::number( h );
2540 config->writeEntry("EditEventLayout",list ); 2542 config->writeEntry("EditEventLayout",list );
2541 2543
2542 wid = mTodoEditor; 2544 wid = mTodoEditor;
2543 x = wid->geometry().x(); 2545 x = wid->geometry().x();
2544 y = wid->geometry().y(); 2546 y = wid->geometry().y();
2545 w = wid->width(); 2547 w = wid->width();
2546 h = wid->height(); 2548 h = wid->height();
2547 list.clear(); 2549 list.clear();
2548 list << QString::number( x ); 2550 list << QString::number( x );
2549 list << QString::number( y ); 2551 list << QString::number( y );
2550 list << QString::number( w ); 2552 list << QString::number( w );
2551 list << QString::number( h ); 2553 list << QString::number( h );
2552 config->writeEntry("EditTodoLayout",list ); 2554 config->writeEntry("EditTodoLayout",list );
2553 wid = getEventViewerDialog(); 2555 wid = getEventViewerDialog();
2554 x = wid->geometry().x(); 2556 x = wid->geometry().x();
2555 y = wid->geometry().y(); 2557 y = wid->geometry().y();
2556 w = wid->width(); 2558 w = wid->width();
2557 h = wid->height(); 2559 h = wid->height();
2558 list.clear(); 2560 list.clear();
2559 list << QString::number( x ); 2561 list << QString::number( x );
2560 list << QString::number( y ); 2562 list << QString::number( y );
2561 list << QString::number( w ); 2563 list << QString::number( w );
2562 list << QString::number( h ); 2564 list << QString::number( h );
2563 config->writeEntry("ViewerLayout",list ); 2565 config->writeEntry("ViewerLayout",list );
2564 wid = mDialogManager->getSearchDialog(); 2566 wid = mDialogManager->getSearchDialog();
2565 if ( wid ) { 2567 if ( wid ) {
2566 x = wid->geometry().x(); 2568 x = wid->geometry().x();
2567 y = wid->geometry().y(); 2569 y = wid->geometry().y();
2568 w = wid->width(); 2570 w = wid->width();
2569 h = wid->height(); 2571 h = wid->height();
2570 list.clear(); 2572 list.clear();
2571 list << QString::number( x ); 2573 list << QString::number( x );
2572 list << QString::number( y ); 2574 list << QString::number( y );
2573 list << QString::number( w ); 2575 list << QString::number( w );
2574 list << QString::number( h ); 2576 list << QString::number( h );
2575 config->writeEntry("SearchLayout",list ); 2577 config->writeEntry("SearchLayout",list );
2576 } 2578 }
2577#endif 2579#endif
2578 2580
2579 2581
2580 config->sync(); 2582 config->sync();
2581} 2583}
2582 2584
2583void CalendarView::readFilterSettings(KConfig *config) 2585void CalendarView::readFilterSettings(KConfig *config)
2584{ 2586{
2585 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2587 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2586 2588
2587 mFilters.clear(); 2589 mFilters.clear();
2588 2590
2589 config->setGroup("General"); 2591 config->setGroup("General");
2590 QStringList filterList = config->readListEntry("CalendarFilters"); 2592 QStringList filterList = config->readListEntry("CalendarFilters");
2591 2593
2592 QStringList::ConstIterator it = filterList.begin(); 2594 QStringList::ConstIterator it = filterList.begin();
2593 QStringList::ConstIterator end = filterList.end(); 2595 QStringList::ConstIterator end = filterList.end();
2594 while(it != end) { 2596 while(it != end) {
2595 // kdDebug() << " filter: " << (*it) << endl; 2597 // kdDebug() << " filter: " << (*it) << endl;
2596 2598
2597 CalFilter *filter; 2599 CalFilter *filter;
2598 filter = new CalFilter(*it); 2600 filter = new CalFilter(*it);
2599 config->setGroup("Filter_" + (*it).utf8()); 2601 config->setGroup("Filter_" + (*it).utf8());
2600 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2602 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2601 filter->setCriteria(config->readNumEntry("Criteria",0)); 2603 filter->setCriteria(config->readNumEntry("Criteria",0));
2602 filter->setCategoryList(config->readListEntry("CategoryList")); 2604 filter->setCategoryList(config->readListEntry("CategoryList"));
2603 mFilters.append(filter); 2605 mFilters.append(filter);
2604 2606
2605 ++it; 2607 ++it;
2606 } 2608 }
2607 2609
2608 if (mFilters.count() == 0) { 2610 if (mFilters.count() == 0) {
2609 CalFilter *filter = new CalFilter(i18n("Default")); 2611 CalFilter *filter = new CalFilter(i18n("Default"));
2610 mFilters.append(filter); 2612 mFilters.append(filter);
2611 } 2613 }
2612 mFilterView->updateFilters(); 2614 mFilterView->updateFilters();
2613 config->setGroup("FilterView"); 2615 config->setGroup("FilterView");
2614 2616
2615 mFilterView->blockSignals(true); 2617 mFilterView->blockSignals(true);
2616 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2618 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2617 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2619 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2618 mFilterView->blockSignals(false); 2620 mFilterView->blockSignals(false);
2619 // We do it manually to avoid it being done twice by the above calls 2621 // We do it manually to avoid it being done twice by the above calls
2620 updateFilter(); 2622 updateFilter();
2621} 2623}
2622 2624
2623void CalendarView::writeFilterSettings(KConfig *config) 2625void CalendarView::writeFilterSettings(KConfig *config)
2624{ 2626{
2625 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2627 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2626 2628
2627 QStringList filterList; 2629 QStringList filterList;
2628 2630
2629 CalFilter *filter = mFilters.first(); 2631 CalFilter *filter = mFilters.first();
2630 while(filter) { 2632 while(filter) {
2631 // kdDebug() << " fn: " << filter->name() << endl; 2633 // kdDebug() << " fn: " << filter->name() << endl;
2632 filterList << filter->name(); 2634 filterList << filter->name();
2633 config->setGroup("Filter_" + filter->name().utf8()); 2635 config->setGroup("Filter_" + filter->name().utf8());
2634 config->writeEntry("Criteria",filter->criteria()); 2636 config->writeEntry("Criteria",filter->criteria());
2635 config->writeEntry("CategoryList",filter->categoryList()); 2637 config->writeEntry("CategoryList",filter->categoryList());
2636 filter = mFilters.next(); 2638 filter = mFilters.next();
2637 } 2639 }
2638 config->setGroup("General"); 2640 config->setGroup("General");
2639 config->writeEntry("CalendarFilters",filterList); 2641 config->writeEntry("CalendarFilters",filterList);
2640 2642
2641 config->setGroup("FilterView"); 2643 config->setGroup("FilterView");
2642 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2644 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2643 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2645 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2644} 2646}
2645 2647
2646 2648
2647void CalendarView::goToday() 2649void CalendarView::goToday()
2648{ 2650{
2649 if ( mViewManager->currentView()->isMonthView() ) 2651 if ( mViewManager->currentView()->isMonthView() )
2650 mNavigator->selectTodayMonth(); 2652 mNavigator->selectTodayMonth();
2651 else 2653 else
2652 mNavigator->selectToday(); 2654 mNavigator->selectToday();
2653} 2655}
2654 2656
2655void CalendarView::goNext() 2657void CalendarView::goNext()
2656{ 2658{
2657 mNavigator->selectNext(); 2659 mNavigator->selectNext();
2658} 2660}
2659 2661
2660void CalendarView::goPrevious() 2662void CalendarView::goPrevious()
2661{ 2663{
2662 mNavigator->selectPrevious(); 2664 mNavigator->selectPrevious();
2663} 2665}
2664void CalendarView::goNextMonth() 2666void CalendarView::goNextMonth()
2665{ 2667{
2666 mNavigator->selectNextMonth(); 2668 mNavigator->selectNextMonth();
2667} 2669}
2668 2670
2669void CalendarView::goPreviousMonth() 2671void CalendarView::goPreviousMonth()
2670{ 2672{
2671 mNavigator->selectPreviousMonth(); 2673 mNavigator->selectPreviousMonth();
2672} 2674}
2673 2675
2674void CalendarView::updateConfig() 2676void CalendarView::updateConfig()
2675{ 2677{
2676 if ( KOPrefs::instance()->mUseAppColors ) 2678 if ( KOPrefs::instance()->mUseAppColors )
2677 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2679 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2678 emit configChanged(); 2680 emit configChanged();
2679 mTodoList->updateConfig(); 2681 mTodoList->updateConfig();
2680 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2682 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2681 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2683 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2682 // To make the "fill window" configurations work 2684 // To make the "fill window" configurations work
2683 //mViewManager->raiseCurrentView(); 2685 //mViewManager->raiseCurrentView();
2684} 2686}
2685 2687
2686 2688
2687void CalendarView::eventChanged(Event *event) 2689void CalendarView::eventChanged(Event *event)
2688{ 2690{
2689 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2691 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2690 //updateUnmanagedViews(); 2692 //updateUnmanagedViews();
2691} 2693}
2692 2694
2693void CalendarView::eventAdded(Event *event) 2695void CalendarView::eventAdded(Event *event)
2694{ 2696{
2695 changeEventDisplay(event,KOGlobals::EVENTADDED); 2697 changeEventDisplay(event,KOGlobals::EVENTADDED);
2696} 2698}
2697 2699
2698void CalendarView::eventToBeDeleted(Event *) 2700void CalendarView::eventToBeDeleted(Event *)
2699{ 2701{
2700 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2702 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2701} 2703}
2702 2704
2703void CalendarView::eventDeleted() 2705void CalendarView::eventDeleted()
2704{ 2706{
2705 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2707 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2706} 2708}
2707void CalendarView::changeTodoDisplay(Todo *which, int action) 2709void CalendarView::changeTodoDisplay(Todo *which, int action)
2708{ 2710{
2709 changeIncidenceDisplay((Incidence *)which, action); 2711 changeIncidenceDisplay((Incidence *)which, action);
2710 mDateNavigator->updateView(); //LR 2712 mDateNavigator->updateView(); //LR
2711 //mDialogManager->updateSearchDialog(); 2713 //mDialogManager->updateSearchDialog();
2712 2714
2713 if (which) { 2715 if (which) {
2714 mViewManager->updateWNview(); 2716 mViewManager->updateWNview();
2715 //mTodoList->updateView(); 2717 //mTodoList->updateView();
2716 } 2718 }
2717 2719
2718} 2720}
2719 2721
2720void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2722void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2721{ 2723{
2722 updateUnmanagedViews(); 2724 updateUnmanagedViews();
2723 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2725 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2724 if ( action == KOGlobals::EVENTDELETED ) { //delete 2726 if ( action == KOGlobals::EVENTDELETED ) { //delete
2725 mCalendar->checkAlarmForIncidence( 0, true ); 2727 mCalendar->checkAlarmForIncidence( 0, true );
2726 if ( mEventViewerDialog ) 2728 if ( mEventViewerDialog )
2727 mEventViewerDialog->hide(); 2729 mEventViewerDialog->hide();
2728 } 2730 }
2729 else 2731 else
2730 mCalendar->checkAlarmForIncidence( which , false ); 2732 mCalendar->checkAlarmForIncidence( which , false );
2731} 2733}
2732 2734
2733// most of the changeEventDisplays() right now just call the view's 2735// most of the changeEventDisplays() right now just call the view's
2734// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2736// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2735void CalendarView::changeEventDisplay(Event *which, int action) 2737void CalendarView::changeEventDisplay(Event *which, int action)
2736{ 2738{
2737 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2739 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2738 changeIncidenceDisplay((Incidence *)which, action); 2740 changeIncidenceDisplay((Incidence *)which, action);
2739 static bool clearallviews = false; 2741 static bool clearallviews = false;
2740 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2742 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2741 if ( clearallviews ) { 2743 if ( clearallviews ) {
2742 clearAllViews(); 2744 clearAllViews();
2743 clearallviews = false; 2745 clearallviews = false;
2744 } 2746 }
2745 return; 2747 return;
2746 } 2748 }
2747 clearallviews = true; 2749 clearallviews = true;
2748 mDateNavigator->updateView(); 2750 mDateNavigator->updateView();
2749 //mDialogManager->updateSearchDialog(); 2751 //mDialogManager->updateSearchDialog();
2750 if (which) { 2752 if (which) {
2751 // If there is an event view visible update the display 2753 // If there is an event view visible update the display
2752 mViewManager->currentView()->changeEventDisplay(which,action); 2754 mViewManager->currentView()->changeEventDisplay(which,action);
2753 // TODO: check, if update needed 2755 // TODO: check, if update needed
2754 // if (which->getTodoStatus()) { 2756 // if (which->getTodoStatus()) {
2755 mTodoList->updateView(); 2757 mTodoList->updateView();
2756 if ( action != KOGlobals::EVENTDELETED ) { 2758 if ( action != KOGlobals::EVENTDELETED ) {
2757 mConflictingEvent = which ; 2759 mConflictingEvent = which ;
2758 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); 2760 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) );
2759 } 2761 }
2760 // } 2762 // }
2761 } else { 2763 } else {
2762 mViewManager->currentView()->updateView(); 2764 mViewManager->currentView()->updateView();
2763 } 2765 }
2764} 2766}
2765void CalendarView::checkConflictForEvent() 2767void CalendarView::checkConflictForEvent()
2766{ 2768{
2767 2769
2768 if (!KOPrefs::instance()->mConfirm) 2770 if (!KOPrefs::instance()->mConfirm)
2769 return; 2771 return;
2770 if ( ! mConflictingEvent ) return; 2772 if ( ! mConflictingEvent ) return;
2771 if ( mConflictingEvent->isHoliday() || mConflictingEvent->isBirthday() || mConflictingEvent->isAnniversary() ) { 2773 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
2772 mConflictingEvent = 0;
2773 return;
2774 }
2775 QPtrList<Event> testlist = mCalendar->events(); 2774 QPtrList<Event> testlist = mCalendar->events();
2776 Event * test = testlist.first(); 2775 Event * test = testlist.first();
2777 QDateTime conflict; 2776 QDateTime conflict;
2778 QDateTime retVal; 2777 QDateTime retVal;
2779 bool found = false; 2778 bool found = false;
2780 Event * cE = 0; 2779 Event * cE = 0;
2781 QDateTime current = QDateTime::currentDateTime(); 2780 QDateTime current = QDateTime::currentDateTime();
2782 while ( test ) { 2781 while ( test ) {
2782 qApp->processEvents();
2783 if ( !test->doesFloat() ) { 2783 if ( !test->doesFloat() ) {
2784 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 2784 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
2785 if ( ! found ) { 2785 if ( ! found ) {
2786 conflict = retVal; 2786 conflict = retVal;
2787 cE = test; 2787 cE = test;
2788 } else { 2788 } else {
2789 if ( retVal < conflict ) { 2789 if ( retVal < conflict ) {
2790 conflict = retVal; 2790 conflict = retVal;
2791 cE = test; 2791 cE = test;
2792 } 2792 }
2793 } 2793 }
2794 found = true; 2794 found = true;
2795 } 2795 }
2796 } 2796 }
2797 test = testlist.next(); 2797 test = testlist.next();
2798 } 2798 }
2799 if ( found ) { 2799 if ( found ) {
2800 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 2800 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
2801 qApp->processEvents(); 2801 qApp->processEvents();
2802 int km = KMessageBox::warningContinueCancel(this,mess, 2802 int km = KMessageBox::warningContinueCancel(this,mess,
2803 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 2803 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
2804 if ( km != KMessageBox::Continue ) 2804 if ( km != KMessageBox::Continue )
2805 return; 2805 return;
2806 2806
2807 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 2807 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
2808 mViewManager->showDayView(); 2808 mViewManager->showDayView();
2809 mNavigator->slotDaySelect( conflict.date() ); 2809 mNavigator->slotDaySelect( conflict.date() );
2810 int hour = conflict.time().hour(); 2810 int hour = conflict.time().hour();
2811 mViewManager->agendaView()->setStartHour( hour ); 2811 mViewManager->agendaView()->setStartHour( hour );
2812 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 2812 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
2813 } 2813 }
2814 mConflictingEvent = 0; 2814 mConflictingEvent = 0;
2815 return; 2815 return;
2816 2816
2817} 2817}
2818 2818
2819void CalendarView::updateTodoViews() 2819void CalendarView::updateTodoViews()
2820{ 2820{
2821 mTodoList->updateView(); 2821 mTodoList->updateView();
2822 mViewManager->currentView()->updateView(); 2822 mViewManager->currentView()->updateView();
2823 2823
2824} 2824}
2825 2825
2826 2826
2827 2827
2828void CalendarView::clearAllViews() 2828void CalendarView::clearAllViews()
2829{ 2829{
2830 mTodoList->clearList(); 2830 mTodoList->clearList();
2831 mViewManager->clearAllViews(); 2831 mViewManager->clearAllViews();
2832 SearchDialog * sd = mDialogManager->getSearchDialog(); 2832 SearchDialog * sd = mDialogManager->getSearchDialog();
2833 if ( sd ) { 2833 if ( sd ) {
2834 KOListView* kol = sd->listview(); 2834 KOListView* kol = sd->listview();
2835 if ( kol ) 2835 if ( kol )
2836 kol->clearList(); 2836 kol->clearList();
2837 } 2837 }
2838} 2838}
2839void CalendarView::updateView() 2839void CalendarView::updateView()
2840{ 2840{
2841 static bool clearallviews = false; 2841 static bool clearallviews = false;
2842 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2842 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2843 if ( clearallviews ) { 2843 if ( clearallviews ) {
2844 clearAllViews(); 2844 clearAllViews();
2845 clearallviews = false; 2845 clearallviews = false;
2846 } 2846 }
2847 return; 2847 return;
2848 } 2848 }
2849 clearallviews = true; 2849 clearallviews = true;
2850 DateList tmpList = mNavigator->selectedDates(); 2850 DateList tmpList = mNavigator->selectedDates();
2851 2851
2852 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2852 if ( KOPrefs::instance()->mHideNonStartedTodos )
2853 mTodoList->updateView(); 2853 mTodoList->updateView();
2854 // We assume that the navigator only selects consecutive days. 2854 // We assume that the navigator only selects consecutive days.
2855 updateView( tmpList.first(), tmpList.last() ); 2855 updateView( tmpList.first(), tmpList.last() );
2856} 2856}
2857 2857
2858void CalendarView::updateUnmanagedViews() 2858void CalendarView::updateUnmanagedViews()
2859{ 2859{
2860 mDateNavigator->updateDayMatrix(); 2860 mDateNavigator->updateDayMatrix();
2861} 2861}
2862 2862
2863int CalendarView::msgItemDelete(const QString name) 2863int CalendarView::msgItemDelete(const QString name)
2864{ 2864{
2865 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 2865 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2866 i18n("This item will be\npermanently deleted."), 2866 i18n("This item will be\npermanently deleted."),
2867 i18n("KO/Pi Confirmation"),i18n("Delete")); 2867 i18n("KO/Pi Confirmation"),i18n("Delete"));
2868} 2868}
2869 2869
2870 2870
2871void CalendarView::edit_cut() 2871void CalendarView::edit_cut()
2872{ 2872{
2873 Event *anEvent=0; 2873 Event *anEvent=0;
2874 2874
2875 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2875 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2876 2876
2877 if (mViewManager->currentView()->isEventView()) { 2877 if (mViewManager->currentView()->isEventView()) {
2878 if ( incidence && incidence->typeID() == eventID ) { 2878 if ( incidence && incidence->typeID() == eventID ) {
2879 anEvent = static_cast<Event *>(incidence); 2879 anEvent = static_cast<Event *>(incidence);
2880 } 2880 }
2881 } 2881 }
2882 2882
2883 if (!anEvent) { 2883 if (!anEvent) {
2884 KNotifyClient::beep(); 2884 KNotifyClient::beep();
2885 return; 2885 return;
2886 } 2886 }
2887 DndFactory factory( mCalendar ); 2887 DndFactory factory( mCalendar );
2888 factory.cutIncidence(anEvent); 2888 factory.cutIncidence(anEvent);
2889 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2889 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2890} 2890}
2891 2891
2892void CalendarView::edit_copy() 2892void CalendarView::edit_copy()
2893{ 2893{
2894 Event *anEvent=0; 2894 Event *anEvent=0;
2895 2895
2896 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2896 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2897 2897
2898 if (mViewManager->currentView()->isEventView()) { 2898 if (mViewManager->currentView()->isEventView()) {
2899 if ( incidence && incidence->typeID() == eventID ) { 2899 if ( incidence && incidence->typeID() == eventID ) {
2900 anEvent = static_cast<Event *>(incidence); 2900 anEvent = static_cast<Event *>(incidence);
2901 } 2901 }
2902 } 2902 }
2903 2903
2904 if (!anEvent) { 2904 if (!anEvent) {
2905 KNotifyClient::beep(); 2905 KNotifyClient::beep();
2906 return; 2906 return;
2907 } 2907 }
2908 DndFactory factory( mCalendar ); 2908 DndFactory factory( mCalendar );
2909 factory.copyIncidence(anEvent); 2909 factory.copyIncidence(anEvent);
2910} 2910}
2911 2911
2912void CalendarView::edit_paste() 2912void CalendarView::edit_paste()
2913{ 2913{
2914 QDate date = mNavigator->selectedDates().first(); 2914 QDate date = mNavigator->selectedDates().first();
2915 2915
2916 DndFactory factory( mCalendar ); 2916 DndFactory factory( mCalendar );
2917 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 2917 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2918 2918
2919 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2919 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2920} 2920}
2921void CalendarView::edit_global_options() 2921void CalendarView::edit_global_options()
2922{ 2922{
2923 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 2923 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2924 emit save(); 2924 emit save();
2925 emit saveStopTimer(); 2925 emit saveStopTimer();
2926 mDialogManager->showGlobalOptionsDialog(); 2926 mDialogManager->showGlobalOptionsDialog();
2927 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 2927 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2928 emit saveStopTimer(); 2928 emit saveStopTimer();
2929 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 2929 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
2930 i18n("Timezone settings"),i18n("Reload"))) { 2930 i18n("Timezone settings"),i18n("Reload"))) {
2931 qDebug("KO: TZ reload cancelled "); 2931 qDebug("KO: TZ reload cancelled ");
2932 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2932 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2933 return; 2933 return;
2934 } 2934 }
2935 qDebug("KO: Timezone change "); 2935 qDebug("KO: Timezone change ");
2936 loadCalendars(); 2936 loadCalendars();
2937 setModified(true); 2937 setModified(true);
2938 } 2938 }
2939 else 2939 else
2940 qDebug("KO: No tz change "); 2940 qDebug("KO: No tz change ");
2941} 2941}
2942void CalendarView::edit_options() 2942void CalendarView::edit_options()
2943{ 2943{
2944 mDialogManager->showOptionsDialog(); 2944 mDialogManager->showOptionsDialog();
2945} 2945}
2946 2946
2947 2947
2948void CalendarView::slotSelectPickerDate( QDate d) 2948void CalendarView::slotSelectPickerDate( QDate d)
2949{ 2949{
2950 mDateFrame->hide(); 2950 mDateFrame->hide();
2951 if ( mDatePickerMode == 1 ) { 2951 if ( mDatePickerMode == 1 ) {
2952 mNavigator->slotDaySelect( d ); 2952 mNavigator->slotDaySelect( d );
2953 } else if ( mDatePickerMode == 2 ) { 2953 } else if ( mDatePickerMode == 2 ) {
2954 if ( mMoveIncidence->typeID() == todoID ) { 2954 if ( mMoveIncidence->typeID() == todoID ) {
2955 Todo * to = (Todo *) mMoveIncidence; 2955 Todo * to = (Todo *) mMoveIncidence;
2956 QTime tim; 2956 QTime tim;
2957 int len = 0; 2957 int len = 0;
2958 if ( to->hasStartDate() && to->hasDueDate() ) 2958 if ( to->hasStartDate() && to->hasDueDate() )
2959 len = to->dtStart().secsTo( to->dtDue()); 2959 len = to->dtStart().secsTo( to->dtDue());
2960 if ( to->hasDueDate() ) 2960 if ( to->hasDueDate() )
2961 tim = to->dtDue().time(); 2961 tim = to->dtDue().time();
2962 else { 2962 else {
2963 tim = QTime ( 0,0,0 ); 2963 tim = QTime ( 0,0,0 );
2964 to->setFloats( true ); 2964 to->setFloats( true );
2965 to->setHasDueDate( true ); 2965 to->setHasDueDate( true );
2966 } 2966 }
2967 QDateTime dt ( d,tim ); 2967 QDateTime dt ( d,tim );
2968 to->setDtDue( dt ); 2968 to->setDtDue( dt );
2969 2969
2970 if ( to->hasStartDate() ) { 2970 if ( to->hasStartDate() ) {
2971 if ( len>0 ) 2971 if ( len>0 )
2972 to->setDtStart(to->dtDue().addSecs( -len )); 2972 to->setDtStart(to->dtDue().addSecs( -len ));
2973 else 2973 else
2974 if (to->dtStart() > to->dtDue() ) 2974 if (to->dtStart() > to->dtDue() )
2975 to->setDtStart(to->dtDue().addDays( -3 )); 2975 to->setDtStart(to->dtDue().addDays( -3 ));
2976 } 2976 }
2977 2977
2978 todoChanged( to ); 2978 todoChanged( to );
2979 } else if ( mMoveIncidence->typeID() == eventID ) { 2979 } else if ( mMoveIncidence->typeID() == eventID ) {
2980 if ( mMoveIncidence->doesRecur() ) { 2980 if ( mMoveIncidence->doesRecur() ) {
2981#if 0 2981#if 0
2982 // PENDING implement this 2982 // PENDING implement this
2983 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2983 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2984 mCalendar()->addIncidence( newInc ); 2984 mCalendar()->addIncidence( newInc );
2985 if ( mMoveIncidence->typeID() == todoID ) 2985 if ( mMoveIncidence->typeID() == todoID )
2986 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2986 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2987 else 2987 else
2988 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2988 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2989 mMoveIncidence = newInc; 2989 mMoveIncidence = newInc;
2990 2990
2991#endif 2991#endif
2992 } 2992 }
2993 QTime tim = mMoveIncidence->dtStart().time(); 2993 QTime tim = mMoveIncidence->dtStart().time();
2994 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2994 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2995 QDateTime dt ( d,tim ); 2995 QDateTime dt ( d,tim );
2996 mMoveIncidence->setDtStart( dt ); 2996 mMoveIncidence->setDtStart( dt );
2997 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2997 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2998 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2998 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2999 } else if ( mMoveIncidence->typeID() == journalID ) { 2999 } else if ( mMoveIncidence->typeID() == journalID ) {
3000 QTime tim = mMoveIncidence->dtStart().time(); 3000 QTime tim = mMoveIncidence->dtStart().time();
3001 QDateTime dt ( d,tim ); 3001 QDateTime dt ( d,tim );
3002 mMoveIncidence->setDtStart( dt ); 3002 mMoveIncidence->setDtStart( dt );
3003 updateView(); 3003 updateView();
3004 } 3004 }
3005 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3005 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3006 } 3006 }
3007} 3007}
3008 3008
3009void CalendarView::removeCategories() 3009void CalendarView::removeCategories()
3010{ 3010{
3011 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3011 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3012 QStringList catList = KOPrefs::instance()->mCustomCategories; 3012 QStringList catList = KOPrefs::instance()->mCustomCategories;
3013 QStringList catIncList; 3013 QStringList catIncList;
3014 QStringList newCatList; 3014 QStringList newCatList;
3015 Incidence* inc = incList.first(); 3015 Incidence* inc = incList.first();
3016 uint i; 3016 uint i;
3017 while ( inc ) { 3017 while ( inc ) {
3018 newCatList.clear(); 3018 newCatList.clear();
3019 catIncList = inc->categories() ; 3019 catIncList = inc->categories() ;
3020 for( i = 0; i< catIncList.count(); ++i ) { 3020 for( i = 0; i< catIncList.count(); ++i ) {
3021 if ( catList.contains (catIncList[i])) 3021 if ( catList.contains (catIncList[i]))
3022 newCatList.append( catIncList[i] ); 3022 newCatList.append( catIncList[i] );
3023 } 3023 }
3024 newCatList.sort(); 3024 newCatList.sort();
3025 inc->setCategories( newCatList.join(",") ); 3025 inc->setCategories( newCatList.join(",") );
3026 inc = incList.next(); 3026 inc = incList.next();
3027 } 3027 }
3028} 3028}
3029 3029
3030int CalendarView::addCategories() 3030int CalendarView::addCategories()
3031{ 3031{
3032 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3032 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3033 QStringList catList = KOPrefs::instance()->mCustomCategories; 3033 QStringList catList = KOPrefs::instance()->mCustomCategories;
3034 QStringList catIncList; 3034 QStringList catIncList;
3035 Incidence* inc = incList.first(); 3035 Incidence* inc = incList.first();
3036 uint i; 3036 uint i;
3037 int count = 0; 3037 int count = 0;
3038 while ( inc ) { 3038 while ( inc ) {
3039 catIncList = inc->categories() ; 3039 catIncList = inc->categories() ;
3040 for( i = 0; i< catIncList.count(); ++i ) { 3040 for( i = 0; i< catIncList.count(); ++i ) {
3041 if ( !catList.contains (catIncList[i])) { 3041 if ( !catList.contains (catIncList[i])) {
3042 catList.append( catIncList[i] ); 3042 catList.append( catIncList[i] );
3043 //qDebug("add cat %s ", catIncList[i].latin1()); 3043 //qDebug("add cat %s ", catIncList[i].latin1());
3044 ++count; 3044 ++count;
3045 } 3045 }
3046 } 3046 }
3047 inc = incList.next(); 3047 inc = incList.next();
3048 } 3048 }
3049 catList.sort(); 3049 catList.sort();
3050 KOPrefs::instance()->mCustomCategories = catList; 3050 KOPrefs::instance()->mCustomCategories = catList;
3051 return count; 3051 return count;
3052} 3052}
3053 3053
3054void CalendarView::editCategories() 3054void CalendarView::editCategories()
3055{ 3055{
3056 qDebug("CalendarView::editCategories() "); 3056 qDebug("CalendarView::editCategories() ");
3057 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3057 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3058 ced.exec(); 3058 ced.exec();
3059} 3059}
3060void CalendarView::manageCategories() 3060void CalendarView::manageCategories()
3061{ 3061{
3062 KOCatPrefs* cp = new KOCatPrefs(); 3062 KOCatPrefs* cp = new KOCatPrefs();
3063 cp->show(); 3063 cp->show();
3064 int w =cp->sizeHint().width() ; 3064 int w =cp->sizeHint().width() ;
3065 int h = cp->sizeHint().height() ; 3065 int h = cp->sizeHint().height() ;
3066 int dw = QApplication::desktop()->width(); 3066 int dw = QApplication::desktop()->width();
3067 int dh = QApplication::desktop()->height(); 3067 int dh = QApplication::desktop()->height();
3068 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3068 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3069 if ( !cp->exec() ) { 3069 if ( !cp->exec() ) {
3070 delete cp; 3070 delete cp;
3071 return; 3071 return;
3072 } 3072 }
3073 int count = 0; 3073 int count = 0;
3074 if ( cp->addCat() ) { 3074 if ( cp->addCat() ) {
3075 count = addCategories(); 3075 count = addCategories();
3076 if ( count ) { 3076 if ( count ) {
3077 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3077 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3078 writeSettings(); 3078 writeSettings();
3079 } else 3079 } else
3080 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3080 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3081 } else { 3081 } else {
3082 removeCategories(); 3082 removeCategories();
3083 updateView(); 3083 updateView();
3084 } 3084 }
3085 delete cp; 3085 delete cp;
3086} 3086}
3087 3087
3088void CalendarView::beamIncidence(Incidence * Inc) 3088void CalendarView::beamIncidence(Incidence * Inc)
3089{ 3089{
3090 QPtrList<Incidence> delSel ; 3090 QPtrList<Incidence> delSel ;
3091 delSel.append(Inc); 3091 delSel.append(Inc);
3092 beamIncidenceList( delSel ); 3092 beamIncidenceList( delSel );
3093} 3093}
3094void CalendarView::beamCalendar() 3094void CalendarView::beamCalendar()
3095{ 3095{
3096 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3096 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3097 //qDebug("beamCalendar() "); 3097 //qDebug("beamCalendar() ");
3098 beamIncidenceList( delSel ); 3098 beamIncidenceList( delSel );
3099} 3099}
3100void CalendarView::beamFilteredCalendar() 3100void CalendarView::beamFilteredCalendar()
3101{ 3101{
3102 QPtrList<Incidence> delSel = mCalendar->incidences(); 3102 QPtrList<Incidence> delSel = mCalendar->incidences();
3103 //qDebug("beamFilteredCalendar() "); 3103 //qDebug("beamFilteredCalendar() ");
3104 beamIncidenceList( delSel ); 3104 beamIncidenceList( delSel );
3105} 3105}
3106void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3106void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3107{ 3107{
3108 3108
3109 KOBeamPrefs beamDialog; 3109 KOBeamPrefs beamDialog;
3110 if ( beamDialog.exec () == QDialog::Rejected ) 3110 if ( beamDialog.exec () == QDialog::Rejected )
3111 return; 3111 return;
3112#ifdef DESKTOP_VERSION 3112#ifdef DESKTOP_VERSION
3113 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3113 QString fn = locateLocal( "tmp", "kopibeamfile" );
3114#else 3114#else
3115 QString fn = "/tmp/kopibeamfile"; 3115 QString fn = "/tmp/kopibeamfile";
3116#endif 3116#endif
3117 QString mes; 3117 QString mes;
3118 bool createbup = true; 3118 bool createbup = true;
3119 if ( createbup ) { 3119 if ( createbup ) {
3120 QString description = "\n"; 3120 QString description = "\n";
3121 CalendarLocal* cal = new CalendarLocal(); 3121 CalendarLocal* cal = new CalendarLocal();
3122 if ( beamDialog.beamLocal() ) 3122 if ( beamDialog.beamLocal() )
3123 cal->setLocalTime(); 3123 cal->setLocalTime();
3124 else 3124 else
3125 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3125 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3126 Incidence *incidence = delSel.first(); 3126 Incidence *incidence = delSel.first();
3127 bool addText = false; 3127 bool addText = false;
3128 if ( delSel.count() < 10 ) 3128 if ( delSel.count() < 10 )
3129 addText = true; 3129 addText = true;
3130 else { 3130 else {
3131 description.sprintf(i18n(" %d items?"),delSel.count() ); 3131 description.sprintf(i18n(" %d items?"),delSel.count() );
3132 } 3132 }
3133 while ( incidence ) { 3133 while ( incidence ) {
3134 Incidence *in = incidence->clone(); 3134 Incidence *in = incidence->clone();
3135 if ( ! in->summary().isEmpty() ) { 3135 if ( ! in->summary().isEmpty() ) {
3136 in->setDescription(""); 3136 in->setDescription("");
3137 } else { 3137 } else {
3138 in->setSummary( in->description().left(20)); 3138 in->setSummary( in->description().left(20));
3139 in->setDescription(""); 3139 in->setDescription("");
3140 } 3140 }
3141 if ( addText ) 3141 if ( addText )
3142 description += in->summary() + "\n"; 3142 description += in->summary() + "\n";
3143 cal->addIncidence( in ); 3143 cal->addIncidence( in );
3144 incidence = delSel.next(); 3144 incidence = delSel.next();
3145 } 3145 }
3146 if ( beamDialog.beamVcal() ) { 3146 if ( beamDialog.beamVcal() ) {
3147 fn += ".vcs"; 3147 fn += ".vcs";
3148 FileStorage storage( cal, fn, new VCalFormat ); 3148 FileStorage storage( cal, fn, new VCalFormat );
3149 storage.save(); 3149 storage.save();
3150 } else { 3150 } else {
3151 fn += ".ics"; 3151 fn += ".ics";
3152 FileStorage storage( cal, fn, new ICalFormat( ) ); 3152 FileStorage storage( cal, fn, new ICalFormat( ) );
3153 storage.save(); 3153 storage.save();
3154 } 3154 }
3155 delete cal; 3155 delete cal;
3156 mes = i18n("KO/Pi: Ready for beaming"); 3156 mes = i18n("KO/Pi: Ready for beaming");
3157 topLevelWidget()->setCaption(mes); 3157 topLevelWidget()->setCaption(mes);
3158 KApplication::convert2latin1( fn ); 3158 KApplication::convert2latin1( fn );
3159#ifndef DESKTOP_VERSION 3159#ifndef DESKTOP_VERSION
3160 Ir *ir = new Ir( this ); 3160 Ir *ir = new Ir( this );
3161 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3161 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3162 ir->send( fn, description, "text/x-vCalendar" ); 3162 ir->send( fn, description, "text/x-vCalendar" );
3163#endif 3163#endif
3164 } 3164 }
3165} 3165}
3166 3166
3167#ifndef DESKTOP_VERSION 3167#ifndef DESKTOP_VERSION
3168void CalendarView::beamDone( Ir *ir ) 3168void CalendarView::beamDone( Ir *ir )
3169{ 3169{
3170 delete ir; 3170 delete ir;
3171 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3171 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3172 topLevelWidget()->raise(); 3172 topLevelWidget()->raise();
3173} 3173}
3174#else 3174#else
3175void CalendarView::beamDone( Ir *){;} 3175void CalendarView::beamDone( Ir *){;}
3176#endif 3176#endif
3177void CalendarView::moveIncidence(Incidence * inc ) 3177void CalendarView::moveIncidence(Incidence * inc )
3178{ 3178{
3179 if ( !inc ) return; 3179 if ( !inc ) return;
3180 showDatePickerPopup(); 3180 showDatePickerPopup();
3181 mDatePickerMode = 2; 3181 mDatePickerMode = 2;
3182 mMoveIncidence = inc ; 3182 mMoveIncidence = inc ;
3183 QDate da; 3183 QDate da;
3184 if ( mMoveIncidence->typeID() == todoID ) { 3184 if ( mMoveIncidence->typeID() == todoID ) {
3185 Todo * to = (Todo *) mMoveIncidence; 3185 Todo * to = (Todo *) mMoveIncidence;
3186 if ( to->hasDueDate() ) 3186 if ( to->hasDueDate() )
3187 da = to->dtDue().date(); 3187 da = to->dtDue().date();
3188 else 3188 else
3189 da = QDate::currentDate(); 3189 da = QDate::currentDate();
3190 } else { 3190 } else {
3191 da = mMoveIncidence->dtStart().date(); 3191 da = mMoveIncidence->dtStart().date();
3192 } 3192 }
3193 //PENDING set date for recurring incidence to date of recurrence 3193 //PENDING set date for recurring incidence to date of recurrence
3194 //mMoveIncidenceOldDate; 3194 //mMoveIncidenceOldDate;
3195 mDatePicker->setDate( da ); 3195 mDatePicker->setDate( da );
3196} 3196}
3197void CalendarView::showDatePickerPopup() 3197void CalendarView::showDatePickerPopup()
3198{ 3198{
3199 if ( mDateFrame->isVisible() ) 3199 if ( mDateFrame->isVisible() )
3200 mDateFrame->hide(); 3200 mDateFrame->hide();
3201 else { 3201 else {
3202 int offX = 0, offY = 0; 3202 int offX = 0, offY = 0;
3203#ifdef DESKTOP_VERSION 3203#ifdef DESKTOP_VERSION
3204 int w =mDatePicker->sizeHint().width() ; 3204 int w =mDatePicker->sizeHint().width() ;
3205 int h = mDatePicker->sizeHint().height() ; 3205 int h = mDatePicker->sizeHint().height() ;
3206 int dw = topLevelWidget()->width(); 3206 int dw = topLevelWidget()->width();
3207 int dh = topLevelWidget()->height(); 3207 int dh = topLevelWidget()->height();
3208 offX = topLevelWidget()->x(); 3208 offX = topLevelWidget()->x();
3209 offY = topLevelWidget()->y(); 3209 offY = topLevelWidget()->y();
3210#else 3210#else
3211 int w =mDatePicker->sizeHint().width() ; 3211 int w =mDatePicker->sizeHint().width() ;
3212 int h = mDatePicker->sizeHint().height() ; 3212 int h = mDatePicker->sizeHint().height() ;
3213 int dw = QApplication::desktop()->width(); 3213 int dw = QApplication::desktop()->width();
3214 int dh = QApplication::desktop()->height(); 3214 int dh = QApplication::desktop()->height();
3215#endif 3215#endif
3216 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3216 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3217 mDateFrame->show(); 3217 mDateFrame->show();
3218 } 3218 }
3219} 3219}
3220void CalendarView::showDatePicker( ) 3220void CalendarView::showDatePicker( )
3221{ 3221{
3222 showDatePickerPopup(); 3222 showDatePickerPopup();
3223 mDatePickerMode = 1; 3223 mDatePickerMode = 1;
3224 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3224 mDatePicker->setDate( mNavigator->selectedDates().first() );
3225} 3225}
3226 3226
3227void CalendarView::showEventEditor() 3227void CalendarView::showEventEditor()
3228{ 3228{
3229#ifdef DESKTOP_VERSION 3229#ifdef DESKTOP_VERSION
3230 int x,y,w,h; 3230 int x,y,w,h;
3231 x = mEventEditor->geometry().x(); 3231 x = mEventEditor->geometry().x();
3232 y = mEventEditor->geometry().y(); 3232 y = mEventEditor->geometry().y();
3233 w = mEventEditor->width(); 3233 w = mEventEditor->width();
3234 h = mEventEditor->height(); 3234 h = mEventEditor->height();
3235 mEventEditor->show(); 3235 mEventEditor->show();
3236 mEventEditor->setGeometry(x,y,w,h); 3236 mEventEditor->setGeometry(x,y,w,h);
3237#else 3237#else
3238 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3238 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3239 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3239 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3240 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3240 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3241 qApp->processEvents(); 3241 qApp->processEvents();
3242 delete mEventEditor; 3242 delete mEventEditor;
3243 mEventEditor = mDialogManager->getEventEditor(); 3243 mEventEditor = mDialogManager->getEventEditor();
3244 topLevelWidget()->setCaption( i18n("") ); 3244 topLevelWidget()->setCaption( i18n("") );
3245 } 3245 }
3246 mEventEditor->showMaximized(); 3246 mEventEditor->showMaximized();
3247#endif 3247#endif
3248} 3248}
3249void CalendarView::showTodoEditor() 3249void CalendarView::showTodoEditor()
3250{ 3250{
3251#ifdef DESKTOP_VERSION 3251#ifdef DESKTOP_VERSION
3252 int x,y,w,h; 3252 int x,y,w,h;
3253 x = mTodoEditor->geometry().x(); 3253 x = mTodoEditor->geometry().x();
3254 y = mTodoEditor->geometry().y(); 3254 y = mTodoEditor->geometry().y();
3255 w = mTodoEditor->width(); 3255 w = mTodoEditor->width();
3256 h = mTodoEditor->height(); 3256 h = mTodoEditor->height();
3257 mTodoEditor->show(); 3257 mTodoEditor->show();
3258 mTodoEditor->setGeometry(x,y,w,h); 3258 mTodoEditor->setGeometry(x,y,w,h);
3259#else 3259#else
3260 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3260 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3261 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3261 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3262 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3262 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3263 qApp->processEvents(); 3263 qApp->processEvents();
3264 delete mTodoEditor; 3264 delete mTodoEditor;
3265 mTodoEditor = mDialogManager->getTodoEditor(); 3265 mTodoEditor = mDialogManager->getTodoEditor();
3266 topLevelWidget()->setCaption( i18n("") ); 3266 topLevelWidget()->setCaption( i18n("") );
3267 } 3267 }
3268 mTodoEditor->showMaximized(); 3268 mTodoEditor->showMaximized();
3269#endif 3269#endif
3270} 3270}
3271 3271
3272void CalendarView::cloneIncidence() 3272void CalendarView::cloneIncidence()
3273{ 3273{
3274 Incidence *incidence = currentSelection(); 3274 Incidence *incidence = currentSelection();
3275 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3275 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3276 if ( incidence ) { 3276 if ( incidence ) {
3277 cloneIncidence(incidence); 3277 cloneIncidence(incidence);
3278 } 3278 }
3279} 3279}
3280void CalendarView::moveIncidence() 3280void CalendarView::moveIncidence()
3281{ 3281{
3282 Incidence *incidence = currentSelection(); 3282 Incidence *incidence = currentSelection();
3283 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3283 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3284 if ( incidence ) { 3284 if ( incidence ) {
3285 moveIncidence(incidence); 3285 moveIncidence(incidence);
3286 } 3286 }
3287} 3287}
3288void CalendarView::beamIncidence() 3288void CalendarView::beamIncidence()
3289{ 3289{
3290 Incidence *incidence = currentSelection(); 3290 Incidence *incidence = currentSelection();
3291 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3291 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3292 if ( incidence ) { 3292 if ( incidence ) {
3293 beamIncidence(incidence); 3293 beamIncidence(incidence);
3294 } 3294 }
3295} 3295}
3296void CalendarView::toggleCancelIncidence() 3296void CalendarView::toggleCancelIncidence()
3297{ 3297{
3298 Incidence *incidence = currentSelection(); 3298 Incidence *incidence = currentSelection();
3299 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3299 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3300 if ( incidence ) { 3300 if ( incidence ) {
3301 cancelIncidence(incidence); 3301 cancelIncidence(incidence);
3302 } 3302 }
3303} 3303}
3304 3304
3305 3305
3306void CalendarView::cancelIncidence(Incidence * inc ) 3306void CalendarView::cancelIncidence(Incidence * inc )
3307{ 3307{
3308 inc->setCancelled( ! inc->cancelled() ); 3308 inc->setCancelled( ! inc->cancelled() );
3309 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3309 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3310 updateView(); 3310 updateView();
3311} 3311}
3312void CalendarView::cloneIncidence(Incidence * orgInc ) 3312void CalendarView::cloneIncidence(Incidence * orgInc )
3313{ 3313{
3314 Incidence * newInc = orgInc->clone(); 3314 Incidence * newInc = orgInc->clone();
3315 newInc->recreate(); 3315 newInc->recreate();
3316 3316
3317 if ( newInc->typeID() == todoID ) { 3317 if ( newInc->typeID() == todoID ) {
3318 Todo* t = (Todo*) newInc; 3318 Todo* t = (Todo*) newInc;
3319 bool cloneSub = false; 3319 bool cloneSub = false;
3320 if ( orgInc->relations().count() ) { 3320 if ( orgInc->relations().count() ) {
3321 int result = KMessageBox::warningYesNoCancel(this, 3321 int result = KMessageBox::warningYesNoCancel(this,
3322 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3322 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3323 i18n("Todo has subtodos"), 3323 i18n("Todo has subtodos"),
3324 i18n("Yes"), 3324 i18n("Yes"),
3325 i18n("No")); 3325 i18n("No"));
3326 3326
3327 if ( result == KMessageBox::Cancel ) { 3327 if ( result == KMessageBox::Cancel ) {
3328 delete t; 3328 delete t;
3329 return; 3329 return;
3330 } 3330 }
3331 if (result == KMessageBox::Yes) cloneSub = true; 3331 if (result == KMessageBox::Yes) cloneSub = true;
3332 } 3332 }
3333 showTodoEditor(); 3333 showTodoEditor();
3334 mTodoEditor->editTodo( t ); 3334 mTodoEditor->editTodo( t );
3335 if ( mTodoEditor->exec() ) { 3335 if ( mTodoEditor->exec() ) {
3336 if ( cloneSub ) { 3336 if ( cloneSub ) {
3337 orgInc->cloneRelations( t ); 3337 orgInc->cloneRelations( t );
3338 mCalendar->addIncidenceBranch( t ); 3338 mCalendar->addIncidenceBranch( t );
3339 updateView(); 3339 updateView();
3340 3340
3341 } else { 3341 } else {
3342 mCalendar->addTodo( t ); 3342 mCalendar->addTodo( t );
3343 updateView(); 3343 updateView();
3344 } 3344 }
3345 } else { 3345 } else {
3346 delete t; 3346 delete t;
3347 } 3347 }
3348 } 3348 }
3349 else if ( newInc->typeID() == eventID ) { 3349 else if ( newInc->typeID() == eventID ) {
3350 Event* e = (Event*) newInc; 3350 Event* e = (Event*) newInc;
3351 showEventEditor(); 3351 showEventEditor();
3352 mEventEditor->editEvent( e ); 3352 mEventEditor->editEvent( e );
3353 if ( mEventEditor->exec() ) { 3353 if ( mEventEditor->exec() ) {
3354 mCalendar->addEvent( e ); 3354 mCalendar->addEvent( e );
3355 updateView(); 3355 updateView();
3356 } else { 3356 } else {
3357 delete e; 3357 delete e;
3358 } 3358 }
3359 } if ( newInc->typeID() == journalID ) { 3359 } if ( newInc->typeID() == journalID ) {
3360 mCalendar->addJournal( (Journal*) newInc ); 3360 mCalendar->addJournal( (Journal*) newInc );
3361 editJournal( (Journal*) newInc ); 3361 editJournal( (Journal*) newInc );
3362 } 3362 }
3363 setActiveWindow(); 3363 setActiveWindow();
3364} 3364}
3365 3365
3366void CalendarView::newEvent() 3366void CalendarView::newEvent()
3367{ 3367{
3368 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3368 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3369 KOAgendaView *aView = mViewManager->agendaView(); 3369 KOAgendaView *aView = mViewManager->agendaView();
3370 if (aView) { 3370 if (aView) {
3371 if (aView->selectionStart().isValid()) { 3371 if (aView->selectionStart().isValid()) {
3372 if (aView->selectedIsAllDay()) { 3372 if (aView->selectedIsAllDay()) {
3373 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3373 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3374 } else { 3374 } else {
3375 newEvent(aView->selectionStart(),aView->selectionEnd()); 3375 newEvent(aView->selectionStart(),aView->selectionEnd());
3376 } 3376 }
3377 return; 3377 return;
3378 } 3378 }
3379 } 3379 }
3380 3380
3381 QDate date = mNavigator->selectedDates().first(); 3381 QDate date = mNavigator->selectedDates().first();
3382#if 0 3382#if 0
3383 QDateTime current = QDateTime::currentDateTime(); 3383 QDateTime current = QDateTime::currentDateTime();
3384 if ( date <= current.date() ) { 3384 if ( date <= current.date() ) {
3385 int hour = current.time().hour() +1; 3385 int hour = current.time().hour() +1;
3386 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3386 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3387 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3387 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3388 } else 3388 } else
3389#endif 3389#endif
3390 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3390 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3391 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3391 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3392 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3392 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3393} 3393}
3394 3394
3395void CalendarView::newEvent(QDateTime fh) 3395void CalendarView::newEvent(QDateTime fh)
3396{ 3396{
3397 newEvent(fh, 3397 newEvent(fh,
3398 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3398 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3399} 3399}
3400 3400
3401void CalendarView::newEvent(QDate dt) 3401void CalendarView::newEvent(QDate dt)
3402{ 3402{
3403 newEvent(QDateTime(dt, QTime(0,0,0)), 3403 newEvent(QDateTime(dt, QTime(0,0,0)),
3404 QDateTime(dt, QTime(0,0,0)), true); 3404 QDateTime(dt, QTime(0,0,0)), true);
3405} 3405}
3406void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3406void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3407{ 3407{
3408 newEvent(fromHint, toHint, false); 3408 newEvent(fromHint, toHint, false);
3409} 3409}
3410void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3410void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3411{ 3411{
3412 3412
3413 showEventEditor(); 3413 showEventEditor();
3414 mEventEditor->newEvent(fromHint,toHint,allDay); 3414 mEventEditor->newEvent(fromHint,toHint,allDay);
3415 if ( mFilterView->filtersEnabled() ) { 3415 if ( mFilterView->filtersEnabled() ) {
3416 CalFilter *filter = mFilterView->selectedFilter(); 3416 CalFilter *filter = mFilterView->selectedFilter();
3417 if (filter && filter->showCategories()) { 3417 if (filter && filter->showCategories()) {
3418 mEventEditor->setCategories(filter->categoryList().join(",") ); 3418 mEventEditor->setCategories(filter->categoryList().join(",") );
3419 } 3419 }
3420 if ( filter ) 3420 if ( filter )
3421 mEventEditor->setSecrecy( filter->getSecrecy() ); 3421 mEventEditor->setSecrecy( filter->getSecrecy() );
3422 } 3422 }
3423 mEventEditor->exec(); 3423 mEventEditor->exec();
3424 setActiveWindow(); 3424 setActiveWindow();
3425} 3425}
3426void CalendarView::todoAdded(Todo * t) 3426void CalendarView::todoAdded(Todo * t)
3427{ 3427{
3428 3428
3429 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3429 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3430 updateTodoViews(); 3430 updateTodoViews();
3431} 3431}
3432void CalendarView::todoChanged(Todo * t) 3432void CalendarView::todoChanged(Todo * t)
3433{ 3433{
3434 emit todoModified( t, 4 ); 3434 emit todoModified( t, 4 );
3435 // updateTodoViews(); 3435 // updateTodoViews();
3436} 3436}
3437void CalendarView::todoToBeDeleted(Todo *) 3437void CalendarView::todoToBeDeleted(Todo *)
3438{ 3438{
3439 //qDebug("todoToBeDeleted(Todo *) "); 3439 //qDebug("todoToBeDeleted(Todo *) ");
3440 updateTodoViews(); 3440 updateTodoViews();
3441} 3441}
3442void CalendarView::todoDeleted() 3442void CalendarView::todoDeleted()
3443{ 3443{
3444 //qDebug(" todoDeleted()"); 3444 //qDebug(" todoDeleted()");
3445 updateTodoViews(); 3445 updateTodoViews();
3446} 3446}
3447 3447
3448 3448
3449void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3449void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3450{ 3450{
3451 showTodoEditor(); 3451 showTodoEditor();
3452 mTodoEditor->newTodo(dt,0,allday); 3452 mTodoEditor->newTodo(dt,0,allday);
3453 if ( mFilterView->filtersEnabled() ) { 3453 if ( mFilterView->filtersEnabled() ) {
3454 CalFilter *filter = mFilterView->selectedFilter(); 3454 CalFilter *filter = mFilterView->selectedFilter();
3455 if (filter && filter->showCategories()) { 3455 if (filter && filter->showCategories()) {
3456 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3456 mTodoEditor->setCategories(filter->categoryList().join(",") );
3457 } 3457 }
3458 if ( filter ) 3458 if ( filter )
3459 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3459 mTodoEditor->setSecrecy( filter->getSecrecy() );
3460 } 3460 }
3461 mTodoEditor->exec(); 3461 mTodoEditor->exec();
3462 setActiveWindow(); 3462 setActiveWindow();
3463} 3463}
3464 3464
3465void CalendarView::newTodo() 3465void CalendarView::newTodo()
3466{ 3466{
3467 newTodoDateTime( QDateTime(),true ); 3467 newTodoDateTime( QDateTime(),true );
3468} 3468}
3469 3469
3470void CalendarView::newSubTodo() 3470void CalendarView::newSubTodo()
3471{ 3471{
3472 Todo *todo = selectedTodo(); 3472 Todo *todo = selectedTodo();
3473 if ( todo ) newSubTodo( todo ); 3473 if ( todo ) newSubTodo( todo );
3474} 3474}
3475 3475
3476void CalendarView::newSubTodo(Todo *parentEvent) 3476void CalendarView::newSubTodo(Todo *parentEvent)
3477{ 3477{
3478 3478
3479 showTodoEditor(); 3479 showTodoEditor();
3480 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3480 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3481 mTodoEditor->exec(); 3481 mTodoEditor->exec();
3482 setActiveWindow(); 3482 setActiveWindow();
3483} 3483}
3484 3484
3485void CalendarView::newFloatingEvent() 3485void CalendarView::newFloatingEvent()
3486{ 3486{
3487 DateList tmpList = mNavigator->selectedDates(); 3487 DateList tmpList = mNavigator->selectedDates();
3488 QDate date = tmpList.first(); 3488 QDate date = tmpList.first();
3489 3489
3490 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3490 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3491 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3491 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3492} 3492}
3493 3493
3494 3494
3495void CalendarView::editEvent( Event *event ) 3495void CalendarView::editEvent( Event *event )
3496{ 3496{
3497 3497
3498 if ( !event ) return; 3498 if ( !event ) return;
3499 if ( event->isReadOnly() ) { 3499 if ( event->isReadOnly() ) {
3500 showEvent( event ); 3500 showEvent( event );
3501 return; 3501 return;
3502 } 3502 }
3503 showEventEditor(); 3503 showEventEditor();
3504 mEventEditor->editEvent( event , mFlagEditDescription); 3504 mEventEditor->editEvent( event , mFlagEditDescription);
3505 mEventEditor->exec(); 3505 mEventEditor->exec();
3506 setActiveWindow(); 3506 setActiveWindow();
3507 3507
3508} 3508}
3509void CalendarView::editJournal( Journal *jour ) 3509void CalendarView::editJournal( Journal *jour )
3510{ 3510{
3511 if ( !jour ) return; 3511 if ( !jour ) return;
3512 mDialogManager->hideSearchDialog(); 3512 mDialogManager->hideSearchDialog();
3513 mViewManager->showJournalView(); 3513 mViewManager->showJournalView();
3514 mNavigator->slotDaySelect( jour->dtStart().date() ); 3514 mNavigator->slotDaySelect( jour->dtStart().date() );
3515} 3515}
3516void CalendarView::editTodo( Todo *todo ) 3516void CalendarView::editTodo( Todo *todo )
3517{ 3517{
3518 if ( !todo ) return; 3518 if ( !todo ) return;
3519 3519
3520 if ( todo->isReadOnly() ) { 3520 if ( todo->isReadOnly() ) {
3521 showTodo( todo ); 3521 showTodo( todo );
3522 return; 3522 return;
3523 } 3523 }
3524 showTodoEditor(); 3524 showTodoEditor();
3525 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3525 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3526 mTodoEditor->exec(); 3526 mTodoEditor->exec();
3527 setActiveWindow(); 3527 setActiveWindow();
3528 3528
3529} 3529}
3530 3530
3531KOEventViewerDialog* CalendarView::getEventViewerDialog() 3531KOEventViewerDialog* CalendarView::getEventViewerDialog()
3532{ 3532{
3533 if ( !mEventViewerDialog ) { 3533 if ( !mEventViewerDialog ) {
3534 mEventViewerDialog = new KOEventViewerDialog(0); 3534 mEventViewerDialog = new KOEventViewerDialog(0);
3535 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3535 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3536 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3536 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3537 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3537 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3538 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3538 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3539 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3539 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3540 viewManager(), SLOT( showAgendaView( bool ) ) ); 3540 viewManager(), SLOT( showAgendaView( bool ) ) );
3541 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3541 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3542 this, SLOT( slotViewerClosed() ) ); 3542 this, SLOT( slotViewerClosed() ) );
3543 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3543 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3544 this, SLOT( todoChanged(Todo *) ) ); 3544 this, SLOT( todoChanged(Todo *) ) );
3545 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3545 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3546 mEventViewerDialog->resize( 640, 480 ); 3546 mEventViewerDialog->resize( 640, 480 );
3547 3547
3548 } 3548 }
3549 return mEventViewerDialog; 3549 return mEventViewerDialog;
3550} 3550}