summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt20
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt22
-rw-r--r--korganizer/calendarview.cpp2
-rw-r--r--libkdepim/ksyncmanager.cpp97
-rw-r--r--libkdepim/ksyncmanager.h6
5 files changed, 125 insertions, 22 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index f64bfda..4a5122f 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -1,793 +1,813 @@
1{ "file","Datei" }, 1{ "file","Datei" },
2{ "Choose one file","Wähle eine Datei" }, 2{ "Choose one file","Wähle eine Datei" },
3{ "dir","Verzeichnis" }, 3{ "dir","Verzeichnis" },
4{ "Choose a directory with may files","Wähle Verzeichnis" }, 4{ "Choose a directory with may files","Wähle Verzeichnis" },
5{ "ldap","ldap" }, 5{ "ldap","ldap" },
6{ "No description available","Keine Beschreibung verfügbar" }, 6{ "No description available","Keine Beschreibung verfügbar" },
7{ "Library files for "%1" not found in paths","Bibliothek für "%1" nicht gefunden" }, 7{ "Library files for "%1" not found in paths","Bibliothek für "%1" nicht gefunden" },
8{ "qtopia","qtopia" }, 8{ "qtopia","qtopia" },
9{ "Qtopia PIM Addressbook.","Qtopia PIM Adressbuch." }, 9{ "Qtopia PIM Addressbook.","Qtopia PIM Adressbuch." },
10{ "vCard","vCard" }, 10{ "vCard","vCard" },
11{ "vCard Format","vCard Format" }, 11{ "vCard Format","vCard Format" },
12{ "microkabcformat_binary","microkabcformat_binary" }, 12{ "microkabcformat_binary","microkabcformat_binary" },
13{ "Binary","Binary" }, 13{ "Binary","Binary" },
14{ "No description available.","Keine Beschreibung verfügbar." }, 14{ "No description available.","Keine Beschreibung verfügbar." },
15{ "Department","Abteilung" }, 15{ "Department","Abteilung" },
16{ "Profession","Beruf" }, 16{ "Profession","Beruf" },
17{ "Assistant's Name","Name d.Assistenten" }, 17{ "Assistant's Name","Name d.Assistenten" },
18{ "Manager's Name","Name d.Manager's" }, 18{ "Manager's Name","Name d.Manager's" },
19{ "Spouse's Name","Name d.Ehegatten" }, 19{ "Spouse's Name","Name d.Ehegatten" },
20{ "Office","Büro" }, 20{ "Office","Büro" },
21{ "IM Address","IM Adresse" }, 21{ "IM Address","IM Adresse" },
22{ "Anniversary","Jahrestag" }, 22{ "Anniversary","Jahrestag" },
23{ "Gender","Geschlecht" }, 23{ "Gender","Geschlecht" },
24{ "Children","Kinder" }, 24{ "Children","Kinder" },
25{ "FreeBusyUrl","FreeBusyUrl" }, 25{ "FreeBusyUrl","FreeBusyUrl" },
26{ "ExternalID","ExternalID" }, 26{ "ExternalID","ExternalID" },
27{ "Resource loaded: '%1'","Resource geladen: '%1'" }, 27{ "Resource loaded: '%1'","Resource geladen: '%1'" },
28{ "Select View","Ansicht wählen" }, 28{ "Select View","Ansicht wählen" },
29{ "Modify View...","Ansicht ändern..." }, 29{ "Modify View...","Ansicht ändern..." },
30{ "Add View...","Ansicht hinzufügen..." }, 30{ "Add View...","Ansicht hinzufügen..." },
31{ "Delete View","Ansicht löschen" }, 31{ "Delete View","Ansicht löschen" },
32{ "Refresh View","Ansicht aktualisieren" }, 32{ "Refresh View","Ansicht aktualisieren" },
33{ "Edit &Filters...","Bearbeite &Filter..." }, 33{ "Edit &Filters...","Bearbeite &Filter..." },
34{ "Select Filter","Filter wählen" }, 34{ "Select Filter","Filter wählen" },
35{ "Style:","Stil:" }, 35{ "Style:","Stil:" },
36{ "HTML table style.","HTML tabellen stil." }, 36{ "HTML table style.","HTML tabellen stil." },
37{ "Default Table View","Standard Tabellen Ansicht" }, 37{ "Default Table View","Standard Tabellen Ansicht" },
38{ "Show Extension Bar","Zeige Extension Bar" }, 38{ "Show Extension Bar","Zeige Extension Bar" },
39{ "None","Kein" }, 39{ "None","Kein" },
40{ "Name...","Name..." }, 40{ "Name...","Name..." },
41{ "Role:","Funktion:" }, 41{ "Role:","Funktion:" },
42{ "Organization:","Firma:" }, 42{ "Organization:","Firma:" },
43{ "Formatted name:","Formatt. Name:" }, 43{ "Formatted name:","Formatt. Name:" },
44{ "Edit Phone Numbers...","Bearbeite Telefonnummern..." }, 44{ "Edit Phone Numbers...","Bearbeite Telefonnummern..." },
45{ "Categories","Kategorien" }, 45{ "Categories","Kategorien" },
46{ "Public","Öffentlich" }, 46{ "Public","Öffentlich" },
47{ "Private","Privat" }, 47{ "Private","Privat" },
48{ "Confidential","Vertraulich" }, 48{ "Confidential","Vertraulich" },
49{ "&General","Allgemein" }, 49{ "&General","Allgemein" },
50{ "&Edit Addresses...","B&earbeite Adressen..." }, 50{ "&Edit Addresses...","B&earbeite Adressen..." },
51{ "Edit Email Addresses...","Bearbeite E-Mail Adressen..." }, 51{ "Edit Email Addresses...","Bearbeite E-Mail Adressen..." },
52{ "Email:","Email:" }, 52{ "Email:","Email:" },
53{ "URL:","URL:" }, 53{ "URL:","URL:" },
54{ "&IM address:","&IM address:" }, 54{ "&IM address:","&IM address:" },
55{ "&Address","&Adresse" }, 55{ "&Address","&Adresse" },
56{ "Department:","Abteilung:" }, 56{ "Department:","Abteilung:" },
57{ "Office:","Büro:" }, 57{ "Office:","Büro:" },
58{ "Profession:","Beruf:" }, 58{ "Profession:","Beruf:" },
59{ "Manager's name:","N.d.Manager's:" }, 59{ "Manager's name:","N.d.Manager's:" },
60{ "Assistant's name:","N.d.Assistenten:" }, 60{ "Assistant's name:","N.d.Assistenten:" },
61{ "Nick name:","Spitzname:" }, 61{ "Nick name:","Spitzname:" },
62{ "Spouse's name:","N.d.Ehegatten:" }, 62{ "Spouse's name:","N.d.Ehegatten:" },
63{ "Children's names:","N.d.Kinder:" }, 63{ "Children's names:","N.d.Kinder:" },
64{ "Birthday:","Geburtstag:" }, 64{ "Birthday:","Geburtstag:" },
65{ " Local Time","Ortszeit" }, 65{ " Local Time","Ortszeit" },
66{ "Mon","Mo" }, 66{ "Mon","Mo" },
67{ "Tue","Di" }, 67{ "Tue","Di" },
68{ "Wed","Mi" }, 68{ "Wed","Mi" },
69{ "Thu","Do" }, 69{ "Thu","Do" },
70{ "Fri","Fr" }, 70{ "Fri","Fr" },
71{ "Sat","Sa" }, 71{ "Sat","Sa" },
72{ "Sun","So" }, 72{ "Sun","So" },
73{ "January","Januar" }, 73{ "January","Januar" },
74{ "February","Februar" }, 74{ "February","Februar" },
75{ "March","März" }, 75{ "March","März" },
76{ "April","April" }, 76{ "April","April" },
77{ "May","Mai" }, 77{ "May","Mai" },
78{ "June","Juni" }, 78{ "June","Juni" },
79{ "July","July" }, 79{ "July","July" },
80{ "August","August" }, 80{ "August","August" },
81{ "September","September" }, 81{ "September","September" },
82{ "October","October" }, 82{ "October","October" },
83{ "November","November" }, 83{ "November","November" },
84{ "December","Dezember" }, 84{ "December","Dezember" },
85{ "tomorrow","Morgen" }, 85{ "tomorrow","Morgen" },
86{ "today","Heute" }, 86{ "today","Heute" },
87{ "yesterday","Gestern" }, 87{ "yesterday","Gestern" },
88{ "Monday","Montag" }, 88{ "Monday","Montag" },
89{ "Tuesday","Dienstag" }, 89{ "Tuesday","Dienstag" },
90{ "Wednesday","Mittwoch" }, 90{ "Wednesday","Mittwoch" },
91{ "Thursday","Donnerstag" }, 91{ "Thursday","Donnerstag" },
92{ "Friday","Freitag" }, 92{ "Friday","Freitag" },
93{ "Saturday","Samstag" }, 93{ "Saturday","Samstag" },
94{ "Sunday","Sonntag" }, 94{ "Sunday","Sonntag" },
95{ "Anniversary:","Jahrestag:" }, 95{ "Anniversary:","Jahrestag:" },
96{ "Gender:","Geschlecht:" }, 96{ "Gender:","Geschlecht:" },
97{ "ALIEN (undefined)","ALIEN (undefiniert)" }, 97{ "ALIEN (undefined)","ALIEN (undefiniert)" },
98{ "female","weiblich" }, 98{ "female","weiblich" },
99{ "male","männlich" }, 99{ "male","männlich" },
100{ "&Details","&Details" }, 100{ "&Details","&Details" },
101{ "Note:","Notiz:" }, 101{ "Note:","Notiz:" },
102{ "&Notes","&Notizen" }, 102{ "&Notes","&Notizen" },
103{ "Use geo data","Benutze geo Daten" }, 103{ "Use geo data","Benutze geo Daten" },
104{ "Latitude:","Breitengrad:" }, 104{ "Latitude:","Breitengrad:" },
105{ "Longitude:","Längengrad:" }, 105{ "Longitude:","Längengrad:" },
106{ "Edit Geo Data...","Edit geo Daten..." }, 106{ "Edit Geo Data...","Edit geo Daten..." },
107{ "Keys:","Schlüssel:" }, 107{ "Keys:","Schlüssel:" },
108{ "Add","Hinzu" }, 108{ "Add","Hinzu" },
109{ "Remove","Entf." }, 109{ "Remove","Entf." },
110{ "Export","Exportiere" }, 110{ "Export","Exportiere" },
111{ "&Misc","Verschiedenes" }, 111{ "&Misc","Verschiedenes" },
112{ "Photo","Foto" }, 112{ "Photo","Foto" },
113{ "Store as URL","Speichere als URL" }, 113{ "Store as URL","Speichere als URL" },
114{ "Logo","Logo" }, 114{ "Logo","Logo" },
115{ "&Images","B&ilder" }, 115{ "&Images","B&ilder" },
116{ "Home","Privat" }, 116{ "Home","Privat" },
117{ "Work","Geschäft" }, 117{ "Work","Geschäft" },
118{ "Mobile","Handy" }, 118{ "Mobile","Handy" },
119{ "Fax","Fax" }, 119{ "Fax","Fax" },
120{ "Contact Editor","Bearbeite Kontakt" }, 120{ "Contact Editor","Bearbeite Kontakt" },
121{ "&Mail...","&Mail..." }, 121{ "&Mail...","&Mail..." },
122{ "&Print...","Drucken..." }, 122{ "&Print...","Drucken..." },
123{ "&Save","&Speichern" }, 123{ "&Save","&Speichern" },
124{ "&New Contact...","&Neuer Kontakt..." }, 124{ "&New Contact...","&Neuer Kontakt..." },
125{ "Mail &vCard...","Mail &vCard..." }, 125{ "Mail &vCard...","Mail &vCard..." },
126{ "Selected to phone","Auswahl zum Telefon" }, 126{ "Selected to phone","Auswahl zum Telefon" },
127{ "Beam selected v&Card(s)","Beame ausgewählte v&Card(s)" }, 127{ "Beam selected v&Card(s)","Beame ausgewählte v&Card(s)" },
128{ "&Beam personal vCard","Beame persönliche vCard" }, 128{ "&Beam personal vCard","Beame persönliche vCard" },
129{ "&Edit Contact...","Bearbeite Kontakt..." }, 129{ "&Edit Contact...","Bearbeite Kontakt..." },
130{ "&Exit","B&eenden" }, 130{ "&Exit","B&eenden" },
131{ "&Copy","Kopieren" }, 131{ "&Copy","Kopieren" },
132{ "Cu&t","Ausschneiden" }, 132{ "Cu&t","Ausschneiden" },
133{ "&Paste","Einfügen" }, 133{ "&Paste","Einfügen" },
134{ "Select &All","Alles auswählen" }, 134{ "Select &All","Alles auswählen" },
135{ "&Undo","Rückgängig machen" }, 135{ "&Undo","Rückgängig machen" },
136{ "Re&do","Wiederherstellen" }, 136{ "Re&do","Wiederherstellen" },
137{ "&Delete Contact","Lösche Kontakt" }, 137{ "&Delete Contact","Lösche Kontakt" },
138{ "Configure &Resources...","Konfiguriere &Resourcen..." }, 138{ "Configure &Resources...","Konfiguriere &Resourcen..." },
139{ "&Configure %1...","Konfiguriere %1..." }, 139{ "&Configure %1...","Konfiguriere %1..." },
140{ "Configure S&hortcuts...","Konfiguriere S&hortcuts..." }, 140{ "Configure S&hortcuts...","Konfiguriere S&hortcuts..." },
141{ "Show Jump Bar","Zeige Jump Bar" }, 141{ "Show Jump Bar","Zeige Jump Bar" },
142{ "Show Details","Zeige Details" }, 142{ "Show Details","Zeige Details" },
143{ "Beam receive enabled","Beam (IR) Empfang AN" }, 143{ "Beam receive enabled","Beam (IR) Empfang AN" },
144{ "Set Who Am I","Setze "wer bin ich"" }, 144{ "Set Who Am I","Setze "wer bin ich"" },
145{ "Set Categories for Contacts...","Setze Kategorien für Kontakte..." }, 145{ "Set Categories for Contacts...","Setze Kategorien für Kontakte..." },
146{ "Edit Category List...","Editiere Kategorieliste..." }, 146{ "Edit Category List...","Editiere Kategorieliste..." },
147{ "Remove "voice"...","Entferne "voice"..." }, 147{ "Remove "voice"...","Entferne "voice"..." },
148{ "Import from Outlook...","Importiere aus Outlook..." }, 148{ "Import from Outlook...","Importiere aus Outlook..." },
149{ "Licence","Lizenz" }, 149{ "Licence","Lizenz" },
150{ "Faq","Fragen + Antworten" }, 150{ "Faq","Fragen + Antworten" },
151{ "What's New?","Was ist neu?" }, 151{ "What's New?","Was ist neu?" },
152{ "Sync HowTo","Sync Anleitung" }, 152{ "Sync HowTo","Sync Anleitung" },
153{ "&About KAddressBook","Über KAdressBuch" }, 153{ "&About KAddressBook","Über KAdressBuch" },
154{ "Select Incremental Search Field","Selektiere Such Feld" }, 154{ "Select Incremental Search Field","Selektiere Such Feld" },
155{ "Synchronize","Synchronisieren" }, 155{ "Synchronize","Synchronisieren" },
156{ "Configure...","Konfigurieren..." }, 156{ "Configure...","Konfigurieren..." },
157{ "Enable Pi-Sync","Aktiviere Pi-Sync" }, 157{ "Enable Pi-Sync","Aktiviere Pi-Sync" },
158{ "Multiple sync","Multi Sync" }, 158{ "Multiple sync","Multi Sync" },
159{ "Import CSV List...","Importiere CSV-Datei..." }, 159{ "Import CSV List...","Importiere CSV-Datei..." },
160{ "Export CSV List...","Exportiere CSV-Datei..." }, 160{ "Export CSV List...","Exportiere CSV-Datei..." },
161{ "Import KDE 2 Addressbook...","Importiere KDE 2 Adressbuch..." }, 161{ "Import KDE 2 Addressbook...","Importiere KDE 2 Adressbuch..." },
162{ "Import vCard...","Importiere vCard..." }, 162{ "Import vCard...","Importiere vCard..." },
163{ "Export vCard 3.0...","Exportiere vCard 3.0..." }, 163{ "Export vCard 3.0...","Exportiere vCard 3.0..." },
164{ "Import Qtopia...","Importiere Qtopia..." }, 164{ "Import Qtopia...","Importiere Qtopia..." },
165{ "Export Qtopia...","Exportiere Qtopia..." }, 165{ "Export Qtopia...","Exportiere Qtopia..." },
166{ "Edit Contact","Bearbeite Kontakt" }, 166{ "Edit Contact","Bearbeite Kontakt" },
167{ "Ok","Ok" }, 167{ "Ok","Ok" },
168{ "Apply","Anwenden" }, 168{ "Apply","Anwenden" },
169{ "Cancel","Abbrechen" }, 169{ "Cancel","Abbrechen" },
170{ "KAddressbook/Pi","KAdressbuch/Pi" }, 170{ "KAddressbook/Pi","KAdressbuch/Pi" },
171{ "No Filter","Kein Filter" }, 171{ "No Filter","Kein Filter" },
172{ "Given Name","Vorname" }, 172{ "Given Name","Vorname" },
173{ "Family Name","Nachname" }, 173{ "Family Name","Nachname" },
174{ "Email Address","E-Mail Adresse" }, 174{ "Email Address","E-Mail Adresse" },
175{ "All Fields","Alle Felder" }, 175{ "All Fields","Alle Felder" },
176{ "Question","Frage" }, 176{ "Question","Frage" },
177{ "After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?","After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?" }, 177{ "After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?","After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?" },
178{ "No","Nein" }, 178{ "No","Nein" },
179{ "Yes","Ja" }, 179{ "Yes","Ja" },
180{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile" }, 180{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile" },
181{ "Local device name:","Name dieses Gerätes:" }, 181{ "Local device name:","Name dieses Gerätes:" },
182{ "New profile","Neues Profil" }, 182{ "New profile","Neues Profil" },
183{ "Clone profile","Klone Profil" }, 183{ "Clone profile","Klone Profil" },
184{ "Delete profile","Lösche Profil" }, 184{ "Delete profile","Lösche Profil" },
185{ "Profile:","Profil:" }, 185{ "Profile:","Profil:" },
186{ "Ask for every entry on conflict","Frage bei Konflikten nach"}, 186{ "Ask for every entry on conflict","Frage bei Konflikten nach"},
187{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 187{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
188{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 188{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
189{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" } 189{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }
190{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 190{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
191{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 191{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
192{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 192{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
193{ "Write back file","Schreibe Datei zurück" }, 193{ "Write back file","Schreibe Datei zurück" },
194{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 194{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
195{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 195{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
196{ "Local device name:","Name dieses Gerätes:" }, 196{ "Local device name:","Name dieses Gerätes:" },
197{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 197{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
198{ "Sync preferences","Synchronisations Einstellungen" }, 198{ "Sync preferences","Synchronisations Einstellungen" },
199{ "Profile kind","Profil Art" }, 199{ "Profile kind","Profil Art" },
200{ "Local file","Lokale Datei" }, 200{ "Local file","Lokale Datei" },
201{ "Local file:","Lokale Datei:" }, 201{ "Local file:","Lokale Datei:" },
202{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 202{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
203{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 203{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
204{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 204{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
205{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 205{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
206{ "Device","Gerät:" }, 206{ "Device","Gerät:" },
207{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 207{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
208{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 208{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
209{ "Synchronization successful","Synchronisation erfolgreich" }, 209{ "Synchronization successful","Synchronisation erfolgreich" },
210{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 210{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
211{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 211{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
212{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 212{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
213{ "Enter password","Passwort eingeben" }, 213{ "Enter password","Passwort eingeben" },
214{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 214{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
215{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 215{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
216{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 216{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
217{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 217{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
218{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 218{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
219{ "Used %1 Client","Benutzter %1 Client" }, 219{ "Used %1 Client","Benutzter %1 Client" },
220{ "No email client installed","Kein Email Klient installiert" }, 220{ "No email client installed","Kein Email Klient installiert" },
221{ "Userdefined email client","Benutzerdef. Email Klient" }, 221{ "Userdefined email client","Benutzerdef. Email Klient" },
222{ "OM/Pi email client","OM/Pi Email Klient" }, 222{ "OM/Pi email client","OM/Pi Email Klient" },
223{ "Include in multiple ","Beziehe in mehrfach " }, 223{ "Include in multiple ","Beziehe in mehrfach " },
224{ "calendar ","Kalender " }, 224{ "calendar ","Kalender " },
225{ "addressbook ","Adressbuch " }, 225{ "addressbook ","Adressbuch " },
226{ "pwmanager","PWmanager" }, 226{ "pwmanager","PWmanager" },
227{ " sync"," Sync ein" }, 227{ " sync"," Sync ein" },
228{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 228{ "Write back synced data","Schreibe gesyncte Daten zurück" },
229{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 229{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
230{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 230{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
231{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 231{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
232{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 232{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
233{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 233{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
234{ "Help...","Hilfe..." }, 234{ "Help...","Hilfe..." },
235{ "Local file Cal:","Lokale Datei Kal:" }, 235{ "Local file Cal:","Lokale Datei Kal:" },
236{ "Local file ABook:","Lokale Datei ABuch:" }, 236{ "Local file ABook:","Lokale Datei ABuch:" },
237{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 237{ "Local file PWMgr:","Lokale Datei PWMgr:" },
238{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 238{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
239{ "Calendar:","Kalender:" }, 239{ "Calendar:","Kalender:" },
240{ "AddressBook:","AdressBuch:" }, 240{ "AddressBook:","AdressBuch:" },
241{ "PWManager:","PWManager:" }, 241{ "PWManager:","PWManager:" },
242{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 242{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
243{ "ssh/scp","ssh/scp" }, 243{ "ssh/scp","ssh/scp" },
244{ "ftp","ftp" }, 244{ "ftp","ftp" },
245{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 245{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
246{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 246{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
247{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 247{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
248{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 248{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
249{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 249{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
250{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 250{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
251{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 251{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
252{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 252{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
253{ "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" }, 253{ "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" },
254{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 254{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
255{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 255{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
256{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 256{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
257{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 257{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
258{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 258{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
259{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 259{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
260{ "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!" }, 260{ "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!" },
261{ "KDE-Pim Sync","KDE-Pim Sync" }, 261{ "KDE-Pim Sync","KDE-Pim Sync" },
262{ "Multiple profiles","Multi-Sync Profile" }, 262{ "Multiple profiles","Multi-Sync Profile" },
263{ "Device: ","Gerät: " }, 263{ "Device: ","Gerät: " },
264{ "Multiple sync started.","Multi-Sync gestartet." }, 264{ "Multiple sync started.","Multi-Sync gestartet." },
265{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile selektiert für Multi-Sync" }, 265{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile selektiert für Multi-Sync" },
266{ "KDE-Pim sync config","KDE-Pim Sync Konfig" }, 266{ "KDE-Pim sync config","KDE-Pim Sync Konfig" },
267{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein, z.B.:\n" }, 267{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein, z.B.:\n" },
268{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Modell\nautomatisch\erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 268{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Modell\nautomatisch\erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
269{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 269{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
270{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 270{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
271{ "Edit Address Book Filters","Editiere Addressbuch Filter" }, 271{ "Edit Address Book Filters","Editiere Addressbuch Filter" },
272{ "&Add...","Hinzufügen..." }, 272{ "&Add...","Hinzufügen..." },
273{ "&Edit...","B&earbeiten..." }, 273{ "&Edit...","B&earbeiten..." },
274{ "&Remove","Entfe&rne" }, 274{ "&Remove","Entfe&rne" },
275{ "Modify View: ","Ansicht ändern: " }, 275{ "Modify View: ","Ansicht ändern: " },
276{ "Fields","Felder" }, 276{ "Fields","Felder" },
277{ "Select Fields to Display","Wähle anzuzeigende Felder" }, 277{ "Select Fields to Display","Wähle anzuzeigende Felder" },
278{ "All","Alles" }, 278{ "All","Alles" },
279{ "Frequent","Frequent" }, 279{ "Frequent","Frequent" },
280{ "Address","Adresse" }, 280{ "Address","Adresse" },
281{ "Email","E-Mail" }, 281{ "Email","E-Mail" },
282{ "Personal","Persönl." }, 282{ "Personal","Persönl." },
283{ "Organization","Organisation" }, 283{ "Organization","Organisation" },
284{ "Custom","Benutzerdefiniert" }, 284{ "Custom","Benutzerdefiniert" },
285{ "&Selected\nfields:","&Selektierte\nFelder:" }, 285{ "&Selected\nfields:","&Selektierte\nFelder:" },
286{ "Formatted Name","Format. Name" }, 286{ "Formatted Name","Format. Name" },
287{ "Additional Names","Mittelname" }, 287{ "Additional Names","Mittelname" },
288{ "Honorific Prefixes","Namensprefix" }, 288{ "Honorific Prefixes","Namensprefix" },
289{ "Honorific Suffixes","Namenssuffix" }, 289{ "Honorific Suffixes","Namenssuffix" },
290{ "Nick Name","Spitzname" }, 290{ "Nick Name","Spitzname" },
291{ "Birthday","Geburtstag" }, 291{ "Birthday","Geburtstag" },
292{ "Home Address Street","Privat Adresse Strasse" }, 292{ "Home Address Street","Privat Adresse Strasse" },
293{ "Home Address Locality","Privat Adresse Stadt" }, 293{ "Home Address Locality","Privat Adresse Stadt" },
294{ "Home Address Region","Privat Adresse Bundesland" }, 294{ "Home Address Region","Privat Adresse Bundesland" },
295{ "Home Address Postal Code","Privat Adresse PLZ" }, 295{ "Home Address Postal Code","Privat Adresse PLZ" },
296{ "Home Address Country","Privat Adresse Land" }, 296{ "Home Address Country","Privat Adresse Land" },
297{ "Home Address Label","Privat Adresse Label" }, 297{ "Home Address Label","Privat Adresse Label" },
298{ "Business Address Street","Büro Adresse Strasse" }, 298{ "Business Address Street","Büro Adresse Strasse" },
299{ "Business Address Locality","Büro Adresse Stadt" }, 299{ "Business Address Locality","Büro Adresse Stadt" },
300{ "Business Address Region","Büro Adresse Bundesland" }, 300{ "Business Address Region","Büro Adresse Bundesland" },
301{ "Business Address Postal Code","Büro Adresse PLZ" }, 301{ "Business Address Postal Code","Büro Adresse PLZ" },
302{ "Business Address Country","Büro Adresse Land" }, 302{ "Business Address Country","Büro Adresse Land" },
303{ "Business Address Label","Büro Adresse Label" }, 303{ "Business Address Label","Büro Adresse Label" },
304{ "Home Phone","Privat Telefon" }, 304{ "Home Phone","Privat Telefon" },
305{ "Business Phone","Büro Telefon" }, 305{ "Business Phone","Büro Telefon" },
306{ "Mobile Phone","Handy" }, 306{ "Mobile Phone","Handy" },
307{ "Home Fax","Privat Fax" }, 307{ "Home Fax","Privat Fax" },
308{ "Business Fax","Büro Fax" }, 308{ "Business Fax","Büro Fax" },
309{ "Car Phone","Autotelefon" }, 309{ "Car Phone","Autotelefon" },
310{ "ISDN","ISDN" }, 310{ "ISDN","ISDN" },
311{ "Pager","Pager" }, 311{ "Pager","Pager" },
312{ "Mail Client","Mail Klient" }, 312{ "Mail Client","Mail Klient" },
313{ "Title","Titel" }, 313{ "Title","Titel" },
314{ "Role","Rolle" }, 314{ "Role","Rolle" },
315{ "Note","Notiz" }, 315{ "Note","Notiz" },
316{ "URL","URL" }, 316{ "URL","URL" },
317{ "Resource","Resource" }, 317{ "Resource","Resource" },
318{ "SIP","SIP" }, 318{ "SIP","SIP" },
319{ "Default Filter","Default Filter" }, 319{ "Default Filter","Default Filter" },
320{ "The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime.","#The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime." }, 320{ "The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime.","#The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime." },
321{ "No default filter","Kein default Filter" }, 321{ "No default filter","Kein default Filter" },
322{ "Use last active filter","Nutze letzen aktiven Filter" }, 322{ "Use last active filter","Nutze letzen aktiven Filter" },
323{ "Use filter:","Nutze Filter:" }, 323{ "Use filter:","Nutze Filter:" },
324{ "Look & Feel","Look & Feel" }, 324{ "Look & Feel","Look & Feel" },
325{ "Row Separator","Reihen Separator" }, 325{ "Row Separator","Reihen Separator" },
326{ "Alternating backgrounds","Abwechselnder Hintergrund" }, 326{ "Alternating backgrounds","Abwechselnder Hintergrund" },
327{ "Single line","Einzelne Zeile" }, 327{ "Single line","Einzelne Zeile" },
328{ "Enable background image:","Hintergrundbild:" }, 328{ "Enable background image:","Hintergrundbild:" },
329{ "Enable contact tooltips","Contact Tooltips" }, 329{ "Enable contact tooltips","Contact Tooltips" },
330{ "&Enable custom Colors","Benutzerdef. Farben" }, 330{ "&Enable custom Colors","Benutzerdef. Farben" },
331{ "&Colors","Farben" }, 331{ "&Colors","Farben" },
332{ "If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used.","#If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used." }, 332{ "If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used.","#If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used." },
333{ "Double click or press RETURN on a item to select a color for the related strings in the view.","#Double click or press RETURN on a item to select a color for the related strings in the view." }, 333{ "Double click or press RETURN on a item to select a color for the related strings in the view.","#Double click or press RETURN on a item to select a color for the related strings in the view." },
334{ "&Enable custom fonts","B&enutzerdefinierte Schriften" }, 334{ "&Enable custom fonts","B&enutzerdefinierte Schriften" },
335{ "&Text font:","Textschriftart:" }, 335{ "&Text font:","Textschriftart:" },
336{ "&Header font:","Titelschriftart:" }, 336{ "&Header font:","Titelschriftart:" },
337{ "If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data.","#If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data." }, 337{ "If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data.","#If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data." },
338{ "&Fonts","Schri&ften" }, 338{ "&Fonts","Schri&ften" },
339{ "Background Color","Hintergrundfarbe" }, 339{ "Background Color","Hintergrundfarbe" },
340{ "Text Color","Textfarbe" }, 340{ "Text Color","Textfarbe" },
341{ "Header Background Color","Titel Hintergrundfarbe" }, 341{ "Header Background Color","Titel Hintergrundfarbe" },
342{ "Header Text Color","Titel Farbe" }, 342{ "Header Text Color","Titel Farbe" },
343{ "Highlight Color","Auswahlfarbe" }, 343{ "Highlight Color","Auswahlfarbe" },
344{ "Highlighted Text Color","Auswahltextfarbe" }, 344{ "Highlighted Text Color","Auswahltextfarbe" },
345{ "Alternating Background Color","Abwechselnder Hintergrundfarbe" }, 345{ "Alternating Background Color","Abwechselnder Hintergrundfarbe" },
346{ "Postal","Post" }, 346{ "Postal","Post" },
347{ "Dr.","Dr." }, 347{ "Dr.","Dr." },
348{ "Miss","Frl." }, 348{ "Miss","Frl." },
349{ "Mr.","Herr" }, 349{ "Mr.","Herr" },
350{ "Mrs.","Frau" }, 350{ "Mrs.","Frau" },
351{ "Ms.","Fr." }, 351{ "Ms.","Fr." },
352{ "Prof.","Prof." }, 352{ "Prof.","Prof." },
353{ "I","I" }, 353{ "I","I" },
354{ "II","II" }, 354{ "II","II" },
355{ "III","III" }, 355{ "III","III" },
356{ "Jr.","Jr." }, 356{ "Jr.","Jr." },
357{ "Sr.","Sr." }, 357{ "Sr.","Sr." },
358{ "Name:","Name:" }, 358{ "Name:","Name:" },
359{ "Documents","Dokumente" }, 359{ "Documents","Dokumente" },
360{ "Files","Dateien" }, 360{ "Files","Dateien" },
361{ "All Files","Alle Dateien" }, 361{ "All Files","Alle Dateien" },
362{ "Name","Name" }, 362{ "Name","Name" },
363{ "Size","Größe" }, 363{ "Size","Größe" },
364{ "Date","Datum" }, 364{ "Date","Datum" },
365{ "Mime Type","Mime Typ" }, 365{ "Mime Type","Mime Typ" },
366{ "Geo Data Input","Geo Dateneingabe" }, 366{ "Geo Data Input","Geo Dateneingabe" },
367{ "Sexagesimal","Sexagesimal" }, 367{ "Sexagesimal","Sexagesimal" },
368{ "North","Nord" }, 368{ "North","Nord" },
369{ "South","Süd" }, 369{ "South","Süd" },
370{ "East","Ost" }, 370{ "East","Ost" },
371{ "West","West" }, 371{ "West","West" },
372{ "Undefined","Unbestimmt" }, 372{ "Undefined","Unbestimmt" },
373{ "Edit Address","Bearbeite Adresse" }, 373{ "Edit Address","Bearbeite Adresse" },
374{ "Street:","Strasse:" }, 374{ "Street:","Strasse:" },
375{ "Post office box:","Postfach:" }, 375{ "Post office box:","Postfach:" },
376{ "Locality:","Stadt:" }, 376{ "Locality:","Stadt:" },
377{ "Region:","Region:" }, 377{ "Region:","Region:" },
378{ "Postal code:","PLZ:" }, 378{ "Postal code:","PLZ:" },
379{ "Country:","Staat:" }, 379{ "Country:","Staat:" },
380{ "This is the preferred address","Dies ist die bevorzugte Adresse" }, 380{ "This is the preferred address","Dies ist die bevorzugte Adresse" },
381{ "New...","Neu..." }, 381{ "New...","Neu..." },
382{ "Change Type","Ändere Art" }, 382{ "Change Type","Ändere Art" },
383{ "Edit Address Type","Ändere Address Art" }, 383{ "Edit Address Type","Ändere Address Art" },
384{ "Address Types","Address Art" }, 384{ "Address Types","Address Art" },
385{ "Domestic","Inland" }, 385{ "Domestic","Inland" },
386{ "International","International" }, 386{ "International","International" },
387{ "Parcel","Paket" }, 387{ "Parcel","Paket" },
388{ "Edit Contact Name","Ändere Kontakt Name" }, 388{ "Edit Contact Name","Ändere Kontakt Name" },
389{ "Honorific prefixes:","Namensprefixes:" }, 389{ "Honorific prefixes:","Namensprefixes:" },
390{ "Given name:","Vorname:" }, 390{ "Given name:","Vorname:" },
391{ "Additional names:","Mittelnamen:" }, 391{ "Additional names:","Mittelnamen:" },
392{ "Family names:","Nachname:" }, 392{ "Family names:","Nachname:" },
393{ "Honorific suffixes:","Namenssuffixe:" }, 393{ "Honorific suffixes:","Namenssuffixe:" },
394{ "Parse name automatically","Setze Namen automatisch" }, 394{ "Parse name automatically","Setze Namen automatisch" },
395{ "Edit Phone Numbers","Bearbeite Telefonnummern" }, 395{ "Edit Phone Numbers","Bearbeite Telefonnummern" },
396{ "Number","Nummer" }, 396{ "Number","Nummer" },
397{ "Type","Typ" }, 397{ "Type","Typ" },
398{ "Edit Phone Number","Bearbeite Telefonnummer" }, 398{ "Edit Phone Number","Bearbeite Telefonnummer" },
399{ "Number:","Nummer:" }, 399{ "Number:","Nummer:" },
400{ "This is the preferred phone number","Dies ist die bevorzugte Telefonnummer" }, 400{ "This is the preferred phone number","Dies ist die bevorzugte Telefonnummer" },
401{ "Types","Typen" }, 401{ "Types","Typen" },
402{ "Messenger","Messenger" }, 402{ "Messenger","Messenger" },
403{ "Other","Anderes" }, 403{ "Other","Anderes" },
404{ "Video","Video" }, 404{ "Video","Video" },
405{ "Mailbox","Mailbox" }, 405{ "Mailbox","Mailbox" },
406{ "Modem","Modem" }, 406{ "Modem","Modem" },
407{ "Car","Auto" }, 407{ "Car","Auto" },
408{ "PCS","PCS" }, 408{ "PCS","PCS" },
409{ "Category","Kategorie" }, 409{ "Category","Kategorie" },
410{ "Select Categories","Wähle Kategorien" }, 410{ "Select Categories","Wähle Kategorien" },
411{ " &Deselect All "," &Deselektiere alle " }, 411{ " &Deselect All "," &Deselektiere alle " },
412{ " &Edit Categories "," B&earbeite Kategorien " }, 412{ " &Edit Categories "," B&earbeite Kategorien " },
413{ "&OK","&OK" }, 413{ "&OK","&OK" },
414{ "&Cancel","Abbre&chen" }, 414{ "&Cancel","Abbre&chen" },
415{ "Configure","Konfiguriere" }, 415{ "Configure","Konfiguriere" },
416{ "Default","Voreinstellungen" }, 416{ "Default","Voreinstellungen" },
417{ "Addressbook","Adressbuch" }, 417{ "Addressbook","Adressbuch" },
418{ "Details view font","Schriftart Detailansicht" }, 418{ "Details view font","Schriftart Detailansicht" },
419{ "phone:123","phone:123" }, 419{ "phone:123","phone:123" },
420{ "Search only after <return> key pressed","Suche nur nach <return> Taste" }, 420{ "Search only after <return> key pressed","Suche nur nach <return> Taste" },
421{ "Show edit dialog on single click","Zeige Edit Dialog bei Einzelklick" }, 421{ "Show edit dialog on single click","Zeige Edit Dialog bei Einzelklick" },
422{ "Automatic name parsing for new contacts","Automa. Name Parsen für neue Kontakte" }, 422{ "Automatic name parsing for new contacts","Automa. Name Parsen für neue Kontakte" },
423{ "Display List and Details at once (restart)","Zeige Liste und Details zusammen(neustart)" }, 423{ "Display List and Details at once (restart)","Zeige Liste und Details zusammen(neustart)" },
424{ "Show exit confirmation","Vor dem Beenden nachfragen" }, 424{ "Show exit confirmation","Vor dem Beenden nachfragen" },
425{ "General","Allgemein" }, 425{ "General","Allgemein" },
426{ "Extensions (restart)","Extensions (restart)" }, 426{ "Extensions (restart)","Extensions (restart)" },
427{ "Description","Beschreibungen" }, 427{ "Description","Beschreibungen" },
428{ "Extensions","Extensions" }, 428{ "Extensions","Extensions" },
429{ "Prefixes","Prefixe" }, 429{ "Prefixes","Prefixe" },
430{ "Inclusions","Inclusions" }, 430{ "Inclusions","Inclusions" },
431{ "Suffixes","Suffixe" }, 431{ "Suffixes","Suffixe" },
432{ "Default formatted name:","Default format. Name:" }, 432{ "Default formatted name:","Default format. Name:" },
433{ "Empty","Leer" }, 433{ "Empty","Leer" },
434{ "Simple Name","Einfacher Name" }, 434{ "Simple Name","Einfacher Name" },
435{ "Full Name","Voller Name" }, 435{ "Full Name","Voller Name" },
436{ "Reverse Name","Namen umdrehen" }, 436{ "Reverse Name","Namen umdrehen" },
437{ "Contact","Kontakt" }, 437{ "Contact","Kontakt" },
438{ "Global","Allgemein" }, 438{ "Global","Allgemein" },
439{ "Phone","Telefon" }, 439{ "Phone","Telefon" },
440{ "SMS","SMS" }, 440{ "SMS","SMS" },
441{ "Language:(needs restart)","Sprache:(Neustart)" }, 441{ "Language:(needs restart)","Sprache:(Neustart)" },
442{ "English","English" }, 442{ "English","English" },
443{ "German","Deutsch" }, 443{ "German","Deutsch" },
444{ "French","Französisch" }, 444{ "French","Französisch" },
445{ "Italian","Italienisch" }, 445{ "Italian","Italienisch" },
446{ "User defined (usertranslation.txt)","Benutzerdef. (usertranslation.txt)" }, 446{ "User defined (usertranslation.txt)","Benutzerdef. (usertranslation.txt)" },
447{ "Time Format(nr):","Zeit Format(nr):" }, 447{ "Time Format(nr):","Zeit Format(nr):" },
448{ "24:00","24:00" }, 448{ "24:00","24:00" },
449{ "12:00am","12:00am" }, 449{ "12:00am","12:00am" },
450{ "Week starts on Sunday","Woche beginnt Sonntags" }, 450{ "Week starts on Sunday","Woche beginnt Sonntags" },
451{ "Locale","Locale" }, 451{ "Locale","Locale" },
452{ "Date Format:","Datums Format:" }, 452{ "Date Format:","Datums Format:" },
453{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 453{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
454{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 454{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
455{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 455{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
456{ "User defined","Benutzerdefiniert" }, 456{ "User defined","Benutzerdefiniert" },
457{ "User long date:","Format langes Datum:" }, 457{ "User long date:","Format langes Datum:" },
458{ "User short date:","Format kurzes Datum:" }, 458{ "User short date:","Format kurzes Datum:" },
459{ "Daylight start:","Sommerzeit Start:" }, 459{ "Daylight start:","Sommerzeit Start:" },
460{ "Daylight end:","Sommerzeit Ende:" }, 460{ "Daylight end:","Sommerzeit Ende:" },
461{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 461{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
462{ "Monday 19 April 2004: %A %d %B %Y","Monday 19 April 2004: %A %d %B %Y" }, 462{ "Monday 19 April 2004: %A %d %B %Y","Monday 19 April 2004: %A %d %B %Y" },
463{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 463{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
464{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 464{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
465{ "Date Format","Datums Format" }, 465{ "Date Format","Datums Format" },
466{ "Timezone:","Zeitzone:" }, 466{ "Timezone:","Zeitzone:" },
467{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 467{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
468{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 468{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
469{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 469{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
470{ "Used Mail Client","Benutzter Mail Client" }, 470{ "Used Mail Client","Benutzter Mail Client" },
471{ "Channel:","Channel:" }, 471{ "Channel:","Channel:" },
472{ "Message:","Message:" }, 472{ "Message:","Message:" },
473{ "Parameters:","Parameter:" }, 473{ "Parameters:","Parameter:" },
474{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 474{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
475{ "extra Message:","extra Message:" }, 475{ "extra Message:","extra Message:" },
476{ "extra Parameters:","extra Parameter:" }, 476{ "extra Parameters:","extra Parameter:" },
477{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 477{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
478{ "External Apps.","Externe Appl." }, 478{ "External Apps.","Externe Appl." },
479{ "Used %1 Client","Benutzer %1 Client" }, 479{ "Used %1 Client","Benutzer %1 Client" },
480{ "No email client installed","Keine Email Client installiert" }, 480{ "No email client installed","Keine Email Client installiert" },
481{ "Userdefined email client","Benutzerdef. Email Client" }, 481{ "Userdefined email client","Benutzerdef. Email Client" },
482{ "OM/Pi email client","OM/Pi Email Client" }, 482{ "OM/Pi email client","OM/Pi Email Client" },
483{ "Close KA/Pi?","Schließe KA/Pi?" }, 483{ "Close KA/Pi?","Schließe KA/Pi?" },
484{ "\nChanges will be saved!","\nÄnderungen werden gespeichert!" }, 484{ "\nChanges will be saved!","\nÄnderungen werden gespeichert!" },
485{ "Yes!","Ja!" }, 485{ "Yes!","Ja!" },
486{ "There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. ","#There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. " }, 486{ "There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. ","#There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. " },
487{ "Saving addressbook ... ","Speichere Adressbuch ... " }, 487{ "Saving addressbook ... ","Speichere Adressbuch ... " },
488{ "Addressbook saved!","Adressbuch gespeichert!" }, 488{ "Addressbook saved!","Adressbuch gespeichert!" },
489{ "Default Table View","Default Tabellenansicht" }, 489{ "Default Table View","Default Tabellenansicht" },
490{ "Merge and Remove","Zusammenfügen/entfernen" }, 490{ "Merge and Remove","Zusammenfügen/entfernen" },
491{ "Merge","Zusammenfügen" }, 491{ "Merge","Zusammenfügen" },
492{ "Merge Contacts Editor","Contact-Zusammenfüge-Editor" }, 492{ "Merge Contacts Editor","Contact-Zusammenfüge-Editor" },
493{ "New List...","Neue Liste..." }, 493{ "New List...","Neue Liste..." },
494{ "Rename List...","Ändere Namen..." }, 494{ "Rename List...","Ändere Namen..." },
495{ "Remove List","Lösche Liste" }, 495{ "Remove List","Lösche Liste" },
496{ "Add Contact","Kontakt hinzu" }, 496{ "Add Contact","Kontakt hinzu" },
497{ "Change Email...","Ändere Email..." }, 497{ "Change Email...","Ändere Email..." },
498{ "Remove Contact","Entferne Kontakt" }, 498{ "Remove Contact","Entferne Kontakt" },
499{ "Use Preferred","Nutze Preferred" }, 499{ "Use Preferred","Nutze Preferred" },
500{ "Distribution List Editor","Distribution List Editor" }, 500{ "Distribution List Editor","Distribution List Editor" },
501{ "Choose which contacts to export","Wähle Kontakte zum Exportieren" }, 501{ "Choose which contacts to export","Wähle Kontakte zum Exportieren" },
502{ "Which contacts do you want to export?","Welche Kontakte sollen exportiert werden?" }, 502{ "Which contacts do you want to export?","Welche Kontakte sollen exportiert werden?" },
503{ "Contact Selection","Kontaktauswahl" }, 503{ "Contact Selection","Kontaktauswahl" },
504{ "&All","&Alle" }, 504{ "&All","&Alle" },
505{ "Export the entire address book","Exportiere das komplette Addressbuch" }, 505{ "Export the entire address book","Exportiere das komplette Addressbuch" },
506{ "&Selected","Au&sgewählte" }, 506{ "&Selected","Au&sgewählte" },
507{ "Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","###Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected." }, 507{ "Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","###Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected." },
508{ "By matching &filter","Zutreffender &Filter" }, 508{ "By matching &filter","Zutreffender &Filter" },
509{ "Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","###Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters" }, 509{ "Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","###Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters" },
510{ "By Cate&gories","Kategorien" }, 510{ "By Cate&gories","Kategorien" },
511{ "Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","###Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories." }, 511{ "Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","###Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories." },
512{ "Select a filter to decide which contacts to export.","Wähle Filter zum Export aus." }, 512{ "Select a filter to decide which contacts to export.","Wähle Filter zum Export aus." },
513{ "Check the categories whose members you want to export.","Wähle die Kategorien zum Export aus." }, 513{ "Check the categories whose members you want to export.","Wähle die Kategorien zum Export aus." },
514{ "Sorting","Sortieren" }, 514{ "Sorting","Sortieren" },
515{ "Criterion:","Merkmal:" }, 515{ "Criterion:","Merkmal:" },
516{ "Order:","Reihenfolge:" }, 516{ "Order:","Reihenfolge:" },
517{ "Ascending","Aufsteigend" }, 517{ "Ascending","Aufsteigend" },
518{ "Descending","Absteigend" }, 518{ "Descending","Absteigend" },
519{ "Save file","Datei speichern" }, 519{ "Save file","Datei speichern" },
520{ "Error","Fehler" }, 520{ "Error","Fehler" },
521{ "Unable to export contacts.","Exportieren der Kontakte geht nicht." }, 521{ "Unable to export contacts.","Exportieren der Kontakte geht nicht." },
522{ "\nNo unsaved changes detected!\nNothing will be saved!","\nKeine ungespeicherten\nÄnderungen erkannt!\nNichts wird gespeichert!" }, 522{ "\nNo unsaved changes detected!\nNothing will be saved!","\nKeine ungespeicherten\nÄnderungen erkannt!\nNichts wird gespeichert!" },
523{ "Manage new categories...","Verwalte neue Kategorien..." }, 523{ "Manage new categories...","Verwalte neue Kategorien..." },
524{ "&File","Datei" }, 524{ "&File","Datei" },
525{ "&Edit","Bearbeite" }, 525{ "&Edit","Bearbeite" },
526{ "&View","Ansichten" }, 526{ "&View","Ansichten" },
527{ "&Settings","Konfiguration" }, 527{ "&Settings","Konfiguration" },
528{ "&Change selected","Ändere Selekt." }, 528{ "&Change selected","Ändere Selekt." },
529{ "&Help","Hilfe" }, 529{ "&Help","Hilfe" },
530{ "Remove sync info","Entferne Sync Info" }, 530{ "Remove sync info","Entferne Sync Info" },
531{ "For all profiles","Für alle Profile" }, 531{ "For all profiles","Für alle Profile" },
532{ "&Change","Ändere" }, 532{ "&Change","Ändere" },
533{ "Import xml (Qtopia)...","Importiere xml (Qtopia)..." }, 533{ "Import xml (Qtopia)...","Importiere xml (Qtopia)..." },
534{ "Export xml (Qtopia)...","Exportiere xml (Qtopia)..." }, 534{ "Export xml (Qtopia)...","Exportiere xml (Qtopia)..." },
535{ "Export to phone","Exportiere aufs Handy..." }, 535{ "Export to phone","Exportiere aufs Handy..." },
536{ "Which contacts do you want to select?","Welche Kontakte möchten Sie wählen?" }, 536{ "Which contacts do you want to select?","Welche Kontakte möchten Sie wählen?" },
537{ "&Modify","Ändere" }, 537{ "&Modify","Ändere" },
538{ "Choose which contacts to select","Bitte Kontakte auswählen!" }, 538{ "Choose which contacts to select","Bitte Kontakte auswählen!" },
539{ "After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nKontakten geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 539{ "After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nKontakten geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
540{ "Manage new Categories","Verwalte neue Kategorien" }, 540{ "Manage new Categories","Verwalte neue Kategorien" },
541{ "Add to category list","Füge zur Kategorieliste hinzu" }, 541{ "Add to category list","Füge zur Kategorieliste hinzu" },
542{ "Remove from addressees","Entferne von den Kontakten" }, 542{ "Remove from addressees","Entferne von den Kontakten" },
543{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 543{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
544{ "A&dd","Hinzufügen" }, 544{ "A&dd","Hinzufügen" },
545{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 545{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
546{ "NOTE: This will remove all old\ncontact data on phone!","ACHTUNG: Das löscht alle alten\nKontakt Daten auf dem Handy!" }, 546{ "NOTE: This will remove all old\ncontact data on phone!","ACHTUNG: Das löscht alle alten\nKontakt Daten auf dem Handy!" },
547{ "Export to mobile phone!","Exportiere auf das Handy!" }, 547{ "Export to mobile phone!","Exportiere auf das Handy!" },
548{ "Export to phone options","Export ans Handy Optionen" }, 548{ "Export to phone options","Export ans Handy Optionen" },
549{ "Writing to phone...","Sende Daten ans Handy..." }, 549{ "Writing to phone...","Sende Daten ans Handy..." },
550{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 550{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
551{ "Retry","Nochmal versuchen" }, 551{ "Retry","Nochmal versuchen" },
552{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 552{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
553{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 553{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
554{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 554{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
555{ "&Print View","Drucke Ansicht" }, 555{ "&Print View","Drucke Ansicht" },
556{ "&Print Details","Drucke Details" }, 556{ "&Print Details","Drucke Details" },
557{ "Beam v&Card(s)...","Beame v&Card(s)..." }, 557{ "Beam v&Card(s)...","Beame v&Card(s)..." },
558{ "Set formatted name...","Setze formatierten Namen..." }, 558{ "Set formatted name...","Setze formatierten Namen..." },
559{ "Kde Sync HowTo","Kde Sync HowTo" }, 559{ "Kde Sync HowTo","Kde Sync HowTo" },
560{ "Multi Sync HowTo","Multi Sync HowTo" }, 560{ "Multi Sync HowTo","Multi Sync HowTo" },
561{ "&Beam","&Beame" }, 561{ "&Beam","&Beame" },
562{ "Edit Email Addresses","Editiere Email Adressen" }, 562{ "Edit Email Addresses","Editiere Email Adressen" },
563{ "Email address:","Email Adresse:" }, 563{ "Email address:","Email Adresse:" },
564{ "Change","Ändere" }, 564{ "Change","Ändere" },
565{ "Set Standard","Setze Standard" }, 565{ "Set Standard","Setze Standard" },
566{ "New Contact","Neuer Contact" }, 566{ "New Contact","Neuer Contact" },
567{ "Undo %1","Rückgängig %1" }, 567{ "Undo %1","Rückgängig %1" },
568{ "Redo","Wiederholen" }, 568{ "Redo","Wiederholen" },
569{ "Saving ... please wait! ","Am Speichern ... bitte warten! " }, 569{ "Saving ... please wait! ","Am Speichern ... bitte warten! " },
570{ "CSV Import Dialog","CSV Import Dialog" }, 570{ "CSV Import Dialog","CSV Import Dialog" },
571{ "File to import:","Datei zum Import:" }, 571{ "File to import:","Datei zum Import:" },
572{ "Delimiter","Trennzeichen" }, 572{ "Delimiter","Trennzeichen" },
573{ "Comma","Komma" }, 573{ "Comma","Komma" },
574{ "Semicolon","Semikolon" }, 574{ "Semicolon","Semikolon" },
575{ "Tabulator","Tabulator" }, 575{ "Tabulator","Tabulator" },
576{ "Space","Leerzeichen" }, 576{ "Space","Leerzeichen" },
577{ "1","1" }, 577{ "1","1" },
578{ """,""" }, 578{ """,""" },
579{ "'","'" }, 579{ "'","'" },
580{ "Start at line:","Beginne mit Zeile:" }, 580{ "Start at line:","Beginne mit Zeile:" },
581{ "Textquote:","Textquote:" }, 581{ "Textquote:","Textquote:" },
582{ "Ignore duplicate delimiters","Ignoriere doppelte Trennzeichen" }, 582{ "Ignore duplicate delimiters","Ignoriere doppelte Trennzeichen" },
583{ "Import KDE 2 Addressbook","Importiere KDE 2 Addressbook" }, 583{ "Import KDE 2 Addressbook","Importiere KDE 2 Addressbook" },
584{ "Override previously imported entries?","Überschreibe bereits importierte Einträge?" }, 584{ "Override previously imported entries?","Überschreibe bereits importierte Einträge?" },
585{ "Select vCard to Import","Selektiere zu importierende vCard" }, 585{ "Select vCard to Import","Selektiere zu importierende vCard" },
586{ "Information","Information" }, 586{ "Information","Information" },
587{ "contacts successfully imported.","Kontakte erfolgreich importiert." }, 587{ "contacts successfully imported.","Kontakte erfolgreich importiert." },
588{ "Import xml file","Importiere xml Datei" }, 588{ "Import xml file","Importiere xml Datei" },
589{ "Choose contact selection","Wähle Kontakt Auswahl" }, 589{ "Choose contact selection","Wähle Kontakt Auswahl" },
590{ "Select the entire address book","Wähle das ganze Adressbuch" }, 590{ "Select the entire address book","Wähle das ganze Adressbuch" },
591{ "Only contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","Nur in KA/Pi selektierte Kontate.\nDiese Option ist nicht verfügbar\nwhen keine Kontakte selektiert sind." }, 591{ "Only contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","Nur in KA/Pi selektierte Kontate.\nDiese Option ist nicht verfügbar\nwhen keine Kontakte selektiert sind." },
592{ "Only contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","Nur Kontakte die auf den Filter zutreffen.\nDiese Option ist nicht verfügbar, wenn keine Filter definiert sind." }, 592{ "Only contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","Nur Kontakte die auf den Filter zutreffen.\nDiese Option ist nicht verfügbar, wenn keine Filter definiert sind." },
593{ "Only contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","Nur Kontakte die Mitglieder der Kategirien sind,\die links selektiert sind.\nDiese Option ist nicht verfügbar, wenn es keine Kategirien gibt." }, 593{ "Only contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","Nur Kontakte die Mitglieder der Kategirien sind,\die links selektiert sind.\nDiese Option ist nicht verfügbar, wenn es keine Kategirien gibt." },
594{ "Select a filter to decide which contacts to select.","Selektiere einen Filter um festzulegen welche Kontakte ausgewählt werden sollen." }, 594{ "Select a filter to decide which contacts to select.","Selektiere einen Filter um festzulegen welche Kontakte ausgewählt werden sollen." },
595{ "Check the categories whose members you want to select.","Setzte die Kategorien, dessen Mitglieder Sie auswählen möchten." }, 595{ "Check the categories whose members you want to select.","Setzte die Kategorien, dessen Mitglieder Sie auswählen möchten." },
596{ "I/O device: ","I/O device: " }, 596{ "I/O device: ","I/O device: " },
597{ "Connection: ","Connection: " }, 597{ "Connection: ","Connection: " },
598{ "Model(opt.): ","Model(opt.): " }, 598{ "Model(opt.): ","Model(opt.): " },
599{ "Exporting to phone...","Exportiere aufs Handy..." }, 599{ "Exporting to phone...","Exportiere aufs Handy..." },
600{ "Error exporting to phone","Fehler beim Export aufs Handy" }, 600{ "Error exporting to phone","Fehler beim Export aufs Handy" },
601{ "contacts successfully exported.","Kontakte erfolgreich exportiert." }, 601{ "contacts successfully exported.","Kontakte erfolgreich exportiert." },
602{ "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?","Wollen Sie<br>alle existieren Einträge von<br>%1<br>vor dem Export entfernen?" }, 602{ "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?","Wollen Sie<br>alle existieren Einträge von<br>%1<br>vor dem Export entfernen?" },
603{ "Set formatted name","Setze formatierten Namen" }, 603{ "Set formatted name","Setze formatierten Namen" },
604{ "You can set the formatted name\nfor a list of contacts in one go.","Sie können den formatierten Namen für\nein Liste von Kontakten auf einmal setzen." }, 604{ "You can set the formatted name\nfor a list of contacts in one go.","Sie können den formatierten Namen für\nein Liste von Kontakten auf einmal setzen." },
605{ "Set formatted name to:","Setze formatierten Name auf:" }, 605{ "Set formatted name to:","Setze formatierten Name auf:" },
606{ "Simple: James Bond","Einfach: James Bond" }, 606{ "Simple: James Bond","Einfach: James Bond" },
607{ "Full: Mr. James 007 Bond I","Voll: Mr. James 007 Bond I" }, 607{ "Full: Mr. James 007 Bond I","Voll: Mr. James 007 Bond I" },
608{ "Reverse: Bond, James","Umgekehrt: Bond, James" }, 608{ "Reverse: Bond, James","Umgekehrt: Bond, James" },
609{ "Organization: MI6","Organisation: MI6" }, 609{ "Organization: MI6","Organisation: MI6" },
610{ "Set formatted name to\norganization, if name empty","Setze formatierten Namen auf\nOrganisation, wenn Name leer ist." }, 610{ "Set formatted name to\norganization, if name empty","Setze formatierten Namen auf\nOrganisation, wenn Name leer ist." },
611{ "Select contact list","Selektiere Kontakt Liste" }, 611{ "Select contact list","Selektiere Kontakt Liste" },
612{ "Changing contact #%1","Ändere Kontakt #%1" }, 612{ "Changing contact #%1","Ändere Kontakt #%1" },
613{ "Refreshing view...","Lade Ansicht neu..." }, 613{ "Refreshing view...","Lade Ansicht neu..." },
614{ "Setting formatted name completed!","Setzen vom formatierten Namen beendet!" }, 614{ "Setting formatted name completed!","Setzen vom formatierten Namen beendet!" },
615{ "Removing voice...","Entferne voice..." }, 615{ "Removing voice...","Entferne voice..." },
616{ "Remove voice completed!","Entferne voice beendet!" }, 616{ "Remove voice completed!","Entferne voice beendet!" },
617{ "Merge with existing categories?","Zu bestehenden\nKategorien hinzufügen?" }, 617{ "Merge with existing categories?","Zu bestehenden\nKategorien hinzufügen?" },
618{ "Setting categories ... please wait!","Setze Kategorien ... bitte warten!" }, 618{ "Setting categories ... please wait!","Setze Kategorien ... bitte warten!" },
619{ "Setting categories completed!","Setzen der Kategorien beendet!" }, 619{ "Setting categories completed!","Setzen der Kategorien beendet!" },
620{ "OK","OK" }, 620{ "OK","OK" },
621{ "Please wait, processing categories...","Bitte warten, bearbeite Kategorien..." }, 621{ "Please wait, processing categories...","Bitte warten, bearbeite Kategorien..." },
622{ "Processing contact #%1","Bearbeite Kontakt #%1" }, 622{ "Processing contact #%1","Bearbeite Kontakt #%1" },
623{ " categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 623{ " categories added to list! "," Kategorien zur Liste hinzugefügt! " },
624{ "%1: %2","%1: %2" }, 624{ "%1: %2","%1: %2" },
625{ "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n","Ihr persönlicher Kontakt ist\nnicht gesetzt! Bitte selektieren Sie\nihn und setzen ihn mit Menu:\nKonfiguration - Setze wer bin ich\n" }, 625{ "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n","Ihr persönlicher Kontakt ist\nnicht gesetzt! Bitte selektieren Sie\nihn und setzen ihn mit Menu:\nKonfiguration - Setze wer bin ich\n" },
626{ "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>","<qt>Wollen Sie wirklich<br><b>%1</b><br>als persönlichen Kontakt setzent?</qt>" }, 626{ "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>","<qt>Wollen Sie wirklich<br><b>%1</b><br>als persönlichen Kontakt setzent?</qt>" },
627{ "Cut","Ausschneiden" }, 627{ "Cut","Ausschneiden" },
628{ "Paste","Einfügen" }, 628{ "Paste","Einfügen" },
629{ "Delete","Löschen" }, 629{ "Delete","Löschen" },
630{ "Choose...","Wähle..." }, 630{ "Choose...","Wähle..." },
631{ "Add View","Ansicht hinzufügen" }, 631{ "Add View","Ansicht hinzufügen" },
632{ "View name:","Ansicht Name:" }, 632{ "View name:","Ansicht Name:" },
633{ "View Type","Typ der Ansicht" }, 633{ "View Type","Typ der Ansicht" },
634{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." }, 634{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." },
635{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." }, 635{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." },
636{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." }, 636{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." },
637{ "Draw &separators","Zeichne &Trennlinie" }, 637{ "Draw &separators","Zeichne &Trennlinie" },
638{ "Separator &width:","Trennlinien &Breite:" }, 638{ "Separator &width:","Trennlinien &Breite:" },
639{ "&Padding:","Füllung:" }, 639{ "&Padding:","Füllung:" },
640{ "Cards","Karten" }, 640{ "Cards","Karten" },
641{ "&Margin:","&Rand:" }, 641{ "&Margin:","&Rand:" },
642{ "Draw &borders","Zeichne Ränder" }, 642{ "Draw &borders","Zeichne Ränder" },
643{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." }, 643{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." },
644{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." }, 644{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." },
645{ "Sets the width of column separators","Sets the width of column separators" }, 645{ "Sets the width of column separators","Sets the width of column separators" },
646{ "&Layout","&Layout" }, 646{ "&Layout","&Layout" },
647{ "Show &empty fields","Zeige leere Felder" }, 647{ "Show &empty fields","Zeige leere Felder" },
648{ "Show field &labels","Zeige Feld Label" }, 648{ "Show field &labels","Zeige Feld Label" },
649{ "Be&havior","Ver&halten" }, 649{ "Be&havior","Ver&halten" },
650{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" }, 650{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" },
651{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" }, 651{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" },
652{ "Confirm Delete","Bestätige Löschen" }, 652{ "Confirm Delete","Bestätige Löschen" },
653{ "Edit Address Book Filter","Editiere Adressbuch Filter" }, 653{ "Edit Address Book Filter","Editiere Adressbuch Filter" },
654{ "Category rule","Kategorie Regel" }, 654{ "Category rule","Kategorie Regel" },
655{ "Include categories","Inklusive" }, 655{ "Include categories","Inklusive" },
656{ "Exclude categories","Exclusive" }, 656{ "Exclude categories","Exclusive" },
657{ "Include contacts, that are:","Schließe folgende Kontakte ein:" }, 657{ "Include contacts, that are:","Schließe folgende Kontakte ein:" },
658{ "public","Öffentlich" }, 658{ "public","Öffentlich" },
659{ "private","Privat" }, 659{ "private","Privat" },
660{ "confidential","Vertraulich" }, 660{ "confidential","Vertraulich" },
661{ "Configure Resources","Konfiguriere Resourcen" }, 661{ "Configure Resources","Konfiguriere Resourcen" },
662{ "Resource Configuration","Resource Konfiguration" }, 662{ "Resource Configuration","Resource Konfiguration" },
663{ "Resources","Resourcen" }, 663{ "Resources","Resourcen" },
664{ "Standard","Standard" }, 664{ "Standard","Standard" },
665{ "&Use as Standard","Setze als Standard" }, 665{ "&Use as Standard","Setze als Standard" },
666{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" }, 666{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" },
667{ "General Settings","Allgemeine Einstellungen" }, 667{ "General Settings","Allgemeine Einstellungen" },
668{ "Read-only","Nur-Lesen" }, 668{ "Read-only","Nur-Lesen" },
669{ "Include in sync","Schließe in Sync mit ein" }, 669{ "Include in sync","Schließe in Sync mit ein" },
670{ "%1 Resource Settings","%1 Resource Einstellungen" }, 670{ "%1 Resource Settings","%1 Resource Einstellungen" },
671{ "Format:","Format:" }, 671{ "Format:","Format:" },
672{ "Location:","Ort:" }, 672{ "Location:","Ort:" },
673{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" }, 673{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" },
674{ "Language","Sprache" }, 674{ "Language","Sprache" },
675{ "Time Format","Zeit Format" }, 675{ "Time Format","Zeit Format" },
676{ "Time Zone","Zeit Zone" }, 676{ "Time Zone","Zeit Zone" },
677{ "Data storage path","Daten Speicherpfad" }, 677{ "Data storage path","Daten Speicherpfad" },
678{ "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" }, 678{ "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" },
679{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 679{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
680{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 680{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
681{ "Save settings","Speichere Einstellungen" }, 681{ "Save settings","Speichere Einstellungen" },
682{ "Save standard","Speichere Standard" }, 682{ "Save standard","Speichere Standard" },
683{ "Save","Speichern" }, 683{ "Save","Speichern" },
684{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 684{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
685{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 685{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
686{ "Multiple Sync options","Multi Sync Optionen" }, 686{ "Multiple Sync options","Multi Sync Optionen" },
687{ "Sync algo options","Sync Ablauf Optionen" }, 687{ "Sync algo options","Sync Ablauf Optionen" },
688{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 688{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
689{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 689{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
690{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 690{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
691{ "Write back options","Optionen zum Zurückschreiben" }, 691{ "Write back options","Optionen zum Zurückschreiben" },
692{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 692{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
693{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 693{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
694{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 694{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
695{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 695{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
696{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 696{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
697{ "Time period","Zeitspanne" }, 697{ "Time period","Zeitspanne" },
698{ "From ","Von " }, 698{ "From ","Von " },
699{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 699{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
700{ " weeks in the future "," Wochen in der Zukunft " }, 700{ " weeks in the future "," Wochen in der Zukunft " },
701{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 701{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
702{ "Local temp file:","Lokale temp Datei:" }, 702{ "Local temp file:","Lokale temp Datei:" },
703{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 703{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
704{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 704{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
705{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." }, 705{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." },
706{ "Sorry","Tut mir leid" }, 706{ "Sorry","Tut mir leid" },
707{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" }, 707{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" },
708{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" }, 708{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" },
709{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" }, 709{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" },
710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
715{ "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?" }, 715{ "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?" },
716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
717{ "Error","Fehler" }, 717{ "Error","Fehler" },
718{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 718{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
720{ "Warning","Warnung" }, 720{ "Warning","Warnung" },
721{ "Select week number","Wähle Wochen Nummer" }, 721{ "Select week number","Wähle Wochen Nummer" },
722{ "Februar","Februar" }, 722{ "Februar","Februar" },
723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
724{ "Password for remote access:","Passwort für fernen Zugriff:" }, 724{ "Password for remote access:","Passwort für fernen Zugriff:" },
725{ "Remote IP address:","Ferne IP Adresse:" }, 725{ "Remote IP address:","Ferne IP Adresse:" },
726{ "Remote port number:","Ferne Port Nummer:" }, 726{ "Remote port number:","Ferne Port Nummer:" },
727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
728{ "Remote from: ","Fern von: " }, 728{ "Remote from: ","Fern von: " },
729{ "Local from: ","Lokal von: " }, 729{ "Local from: ","Lokal von: " },
730{ "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" }, 730{ "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" },
731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
732{ "Write back","Schreibe zurück" }, 732{ "Write back","Schreibe zurück" },
733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
734{ "Received sync request","Sync Anfrage erhalten" }, 734{ "Received sync request","Sync Anfrage erhalten" },
735{ "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." }, 735{ "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." },
736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
738{ "Sending file...","Sende Datei..." }, 738{ "Sending file...","Sende Datei..." },
739{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 739{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
740{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 740{ "Receiving synced file...","Gesyncte Daten erhalten..." },
741{ "Received %1 bytes","%1 Bytes erhalten" }, 741{ "Received %1 bytes","%1 Bytes erhalten" },
742{ "Writing file to disk...","Speichere Datei..." }, 742{ "Writing file to disk...","Speichere Datei..." },
743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
745{ "Synchronize!","Synchronisiere!" }, 745{ "Synchronize!","Synchronisiere!" },
746{ "High clock skew!","Großer Uhrzeitunterschied!" }, 746{ "High clock skew!","Großer Uhrzeitunterschied!" },
747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
748{ "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!" }, 748{ "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!" },
749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
752{ "Edit new contact","Bearbeite neuen Kontakt" }, 752{ "Edit new contact","Bearbeite neuen Kontakt" },
753{ "Edit ","Bearbeite " }, 753{ "Edit ","Bearbeite " },
754{ "No contact changed!","Kein Kontakt verändert" }, 754{ "No contact changed!","Kein Kontakt verändert" },
755{ "%1 contacts changed!","%1 Kontakte geändert!" }, 755{ "%1 contacts changed!","%1 Kontakte geändert!" },
756{ "Mobile (home)","Handy (Arbeit)" }, 756{ "Mobile (home)","Handy (Arbeit)" },
757{ "Mobile (work)","Handy (Privat)" }, 757{ "Mobile (work)","Handy (Privat)" },
758{ "Def.Formatted Name","Def. Format. Name" }, 758{ "Def.Formatted Name","Def. Format. Name" },
759{ "Colors","Farben" }, 759{ "Colors","Farben" },
760{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 760{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
761{ "Backup enabled","Backup angeschaltet" }, 761{ "Backup enabled","Backup angeschaltet" },
762{ "Use standard backup dir","Standard Backupverzeichnis" }, 762{ "Use standard backup dir","Standard Backupverzeichnis" },
763{ "Number of Backups:","Anzahl der Backups" }, 763{ "Number of Backups:","Anzahl der Backups" },
764{ "Make backup every ","Mache ein Backup alle " }, 764{ "Make backup every ","Mache ein Backup alle " },
765{ " days"," Tage" }, 765{ " days"," Tage" },
766{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 766{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
767{ "Backup Failed!","Backup Problem!" }, 767{ "Backup Failed!","Backup Problem!" },
768{ "Try again now","Versuche jetzt nochmal" }, 768{ "Try again now","Versuche jetzt nochmal" },
769{ "Try again later","Versuche später nochmal" }, 769{ "Try again later","Versuche später nochmal" },
770{ "Try again tomorrow","Versuche morgen nochmal" }, 770{ "Try again tomorrow","Versuche morgen nochmal" },
771{ "Disable backup","Schalte Backup ab" }, 771{ "Disable backup","Schalte Backup ab" },
772{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 772{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
773{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 773{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
774{ "Choose action","Wähle Aktion" }, 774{ "Choose action","Wähle Aktion" },
775{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." }, 775{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." },
776{ "Global Settings...","Globale Einstellungen..." }, 776{ "Global Settings...","Globale Einstellungen..." },
777{ "Spouse","Ehegatte" }, 777{ "Spouse","Ehegatte" },
778{ "Notes","Notizen" }, 778{ "Notes","Notizen" },
779{ "Messanger","Messanger" }, 779{ "Messanger","Messanger" },
780{ "Assistant","Assistent" }, 780{ "Assistant","Assistent" },
781{ "Manager","Manager" }, 781{ "Manager","Manager" },
782{ "Secrecy","Sichtbar" }, 782{ "Secrecy","Sichtbar" },
783{ "male","männlich" }, 783{ "male","männlich" },
784{ "female","weiblich" }, 784{ "female","weiblich" },
785{ "Hide!","Verbergen!" }, 785{ "Hide!","Verbergen!" },
786{ "Show!","Anzeigen!" }, 786{ "Show!","Anzeigen!" },
787{ "Details","Details" }, 787{ "Details","Details" },
788{ "Search:","Suche:" }, 788{ "Search:","Suche:" },
789{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
790{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
791{ "<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?" },
792{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
793{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
794{ "Pi-Sync Error","Pi-Sync Fehler" },
795{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
796{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
797{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
798{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
799{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
800{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
801{ "Receiving file from remote...","Empfange entfernte Datei..." },
802{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
803{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
804{ "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" },
805{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
806{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
807{ "Writing back file ...","Schreibe Datei zurück..." },
808{ "Sending back file ...","Sende Datei zurück..." },
789{ "","" }, 809{ "","" },
790{ "","" }, 810{ "","" },
791{ "","" }, 811{ "","" },
792{ "","" }, 812{ "","" },
793{ "","" }, \ No newline at end of file 813{ "","" }, \ No newline at end of file
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 34e9b7f..ff5e095 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1517 +1,1535 @@
1{ "10 minutes","10 Minuten" }, 1{ "10 minutes","10 Minuten" },
2{ "10th","10." }, 2{ "10th","10." },
3{ "11th","11." }, 3{ "11th","11." },
4{ "12 pm Format","12 AM/PM Format" }, 4{ "12 pm Format","12 AM/PM Format" },
5{ "12th","12." }, 5{ "12th","12." },
6{ "13th","13." }, 6{ "13th","13." },
7{ "14th","14." }, 7{ "14th","14." },
8{ "15th","15." }, 8{ "15th","15." },
9{ "16th","16." }, 9{ "16th","16." },
10{ "17th","17." }, 10{ "17th","17." },
11{ "18th","18." }, 11{ "18th","18." },
12{ "19th","19." }, 12{ "19th","19." },
13{ "1 Day","1 Tag" }, 13{ "1 Day","1 Tag" },
14{ "1 h","1 Std" }, 14{ "1 h","1 Std" },
15{ "1 (high)","1 (hoch)" }, 15{ "1 (high)","1 (hoch)" },
16{ "5 (low)","5" }, 16{ "5 (low)","5" },
17{ "1st","1." }, 17{ "1st","1." },
18{ "20th","20." }, 18{ "20th","20." },
19{ "21st","21." }, 19{ "21st","21." },
20{ "22nd","22." }, 20{ "22nd","22." },
21{ "23rd","23." }, 21{ "23rd","23." },
22{ "24:00 Hour Format","24:00 Stunden Format" }, 22{ "24:00 Hour Format","24:00 Stunden Format" },
23{ "24th","24." }, 23{ "24th","24." },
24{ "25th","25." }, 24{ "25th","25." },
25{ "26th","26." }, 25{ "26th","26." },
26{ "27th","27." }, 26{ "27th","27." },
27{ "28th","28." }, 27{ "28th","28." },
28{ "29th","29." }, 28{ "29th","29." },
29{ "2nd","2." }, 29{ "2nd","2." },
30{ "30 minutes","30 Minuten" }, 30{ "30 minutes","30 Minuten" },
31{ "30th","30." }, 31{ "30th","30." },
32{ "31st","31." }, 32{ "31st","31." },
33{ "3rd","3." }, 33{ "3rd","3." },
34{ "4th","4." }, 34{ "4th","4." },
35{ "5 (lowest)","5 (Niedrigster)" }, 35{ "5 (lowest)","5 (Niedrigster)" },
36{ "5th","5." }, 36{ "5th","5." },
37{ "6th","6." }, 37{ "6th","6." },
38{ "7th","7." }, 38{ "7th","7." },
39{ "8th","8." }, 39{ "8th","8." },
40{ "9th","9." }, 40{ "9th","9." },
41{ "About...","Über..." }, 41{ "About...","Über..." },
42{ "&Accept","&Akzeptieren" }, 42{ "&Accept","&Akzeptieren" },
43{ "Accept","Akzeptieren" }, 43{ "Accept","Akzeptieren" },
44{ "Accept A&ll","A&lles Akzepieren" }, 44{ "Accept A&ll","A&lles Akzepieren" },
45{ "Access:","Zugriff:" }, 45{ "Access:","Zugriff:" },
46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" }, 46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" },
47{ "Action","Aktion" }, 47{ "Action","Aktion" },
48{ "Add Filter","Filter Hinzufügen" }, 48{ "Add Filter","Filter Hinzufügen" },
49{ "&Add","Hinzufügen" }, 49{ "&Add","Hinzufügen" },
50{ "Add","Hinzufügen" }, 50{ "Add","Hinzufügen" },
51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" }, 51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" },
52{ "Additional email address:","Zusätzliche E-Mail Adresse:" }, 52{ "Additional email address:","Zusätzliche E-Mail Adresse:" },
53{ "&Addressbook","&Adressbuch" }, 53{ "&Addressbook","&Adressbuch" },
54{ "Address &Book...","Adress&buch..." }, 54{ "Address &Book...","Adress&buch..." },
55{ "Agenda Size","Agende Größe" }, 55{ "Agenda Size","Agende Größe" },
56{ "Agenda Size:","Größe der Agenda:" }, 56{ "Agenda Size:","Größe der Agenda:" },
57{ "Agenda view:","Agenda Ansicht:" }, 57{ "Agenda view:","Agenda Ansicht:" },
58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" }, 58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" },
59{ "All attendees","Alle Teilnehmer" }, 59{ "All attendees","Alle Teilnehmer" },
60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" }, 60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" },
61{ "All day event","Ganztägig" }, 61{ "All day event","Ganztägig" },
62{ "Anonymous","Anonym" }, 62{ "Anonymous","Anonym" },
63{ "Apply","Anwenden" }, 63{ "Apply","Anwenden" },
64{ "Apr","Apr" }, 64{ "Apr","Apr" },
65{ "April","April" }, 65{ "April","April" },
66{"Ask for every entry on conflict","Frage bei Konflikten nach"}, 66{"Ask for every entry on conflict","Frage bei Konflikten nach"},
67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" }, 67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" },
68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" }, 68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" },
69{ "Attendees","Teilnehmer" }, 69{ "Attendees","Teilnehmer" },
70{ "Aug","Aug" }, 70{ "Aug","Aug" },
71{ "August","August" }, 71{ "August","August" },
72{ "Auto-Save","Automatisches Abspeichern" }, 72{ "Auto-Save","Automatisches Abspeichern" },
73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" }, 73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" },
74{ "Auto saving...","Automatische Sicherung..." }, 74{ "Auto saving...","Automatische Sicherung..." },
75{ "Begin on:","Starte mit:" }, 75{ "Begin on:","Starte mit:" },
76{ "Begins on: %1","Starte mit: %1" }, 76{ "Begins on: %1","Starte mit: %1" },
77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" }, 77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" },
78{ "<b>On:</b> %1","<b>Am:</b> %1" }, 78{ "<b>On:</b> %1","<b>Am:</b> %1" },
79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" }, 79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" },
80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" }, 80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" },
81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" }, 81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" },
82{ "Busy","Belegt" }, 82{ "Busy","Belegt" },
83{ "&Cancel","Abbre&chen" }, 83{ "&Cancel","Abbre&chen" },
84{ "Cancel","Abbrechen" }, 84{ "Cancel","Abbrechen" },
85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" }, 85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" },
86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." }, 86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." },
87{ "Categories...","Kategorien..." }, 87{ "Categories...","Kategorien..." },
88{ "Categories","Kategorien" }, 88{ "Categories","Kategorien" },
89{ "Category","Kategorie" }, 89{ "Category","Kategorie" },
90{ "Center View","Zentriere Ansicht" }, 90{ "Center View","Zentriere Ansicht" },
91{ "Change","Ändere" }, 91{ "Change","Ändere" },
92{ "Cinema","Kino" }, 92{ "Cinema","Kino" },
93{ "Clone Item","Klone Eintrag" }, 93{ "Clone Item","Klone Eintrag" },
94{ "&Close","S&chließen" }, 94{ "&Close","S&chließen" },
95{ "Close","Schließen" }, 95{ "Close","Schließen" },
96{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 96{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
97{ "Colors","Farben" }, 97{ "Colors","Farben" },
98{ "completed","erledigt" }, 98{ "completed","erledigt" },
99{ "completed on %1","erledigt am %1" }, 99{ "completed on %1","erledigt am %1" },
100{ "Complete","Erledigt" }, 100{ "Complete","Erledigt" },
101{ "Confidential","Vertraulich" }, 101{ "Confidential","Vertraulich" },
102{ "Configure...","Einstellungen..." }, 102{ "Configure...","Einstellungen..." },
103{ "Confirm &deletes","Löschvogang bestätigen" }, 103{ "Confirm &deletes","Löschvogang bestätigen" },
104{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 104{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
105{ "Counter-event Viewer","Terminzähler Ansicht" }, 105{ "Counter-event Viewer","Terminzähler Ansicht" },
106{ "Daily ending hour:","Feierabend:" }, 106{ "Daily ending hour:","Feierabend:" },
107{ "Daily starting hour:","Anfangszeit:" }, 107{ "Daily starting hour:","Anfangszeit:" },
108{ "Daily","Täglich" }, 108{ "Daily","Täglich" },
109{ "Date Format","Datums Format" }, 109{ "Date Format","Datums Format" },
110{ "Date Format:","Datums Format:" }, 110{ "Date Format:","Datums Format:" },
111{ "DateNavigator:(nr)","Datums Navigator" }, 111{ "DateNavigator:(nr)","Datums Navigator" },
112{ "Dates: ","Datum: " }, 112{ "Dates: ","Datum: " },
113{ "Date && Time","Datum && Zeit" }, 113{ "Date && Time","Datum && Zeit" },
114{ "Day begins at:","Der Tag beginnt um:" }, 114{ "Day begins at:","Der Tag beginnt um:" },
115{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 115{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
116{ "Days in What's Next:","Tage in What's Next:" }, 116{ "Days in What's Next:","Tage in What's Next:" },
117{ "day(s)","Tag(e)" }, 117{ "day(s)","Tag(e)" },
118{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 118{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
119{ "day","Tag" }, 119{ "day","Tag" },
120{ "Dec","Dez" }, 120{ "Dec","Dez" },
121{ "December","Dezember" }, 121{ "December","Dezember" },
122{ "Default alarm time:","Standard Alarmzeit:" }, 122{ "Default alarm time:","Standard Alarmzeit:" },
123{ "Default appointment time:","Standard Termin Startzeit:" }, 123{ "Default appointment time:","Standard Termin Startzeit:" },
124{ "Default event color:","Standard Terminfarbe:" }, 124{ "Default event color:","Standard Terminfarbe:" },
125{ "Default","Standard" }, 125{ "Default","Standard" },
126{ "Def. duration of new app.:","Standard Termin Länge:" }, 126{ "Def. duration of new app.:","Standard Termin Länge:" },
127{ "Delete All","Lösche alles" }, 127{ "Delete All","Lösche alles" },
128{ "Delete all selected","Lösche alle Selektierten" }, 128{ "Delete all selected","Lösche alle Selektierten" },
129{ "Delete Current","Aktuellen löschen" }, 129{ "Delete Current","Aktuellen löschen" },
130{ "Delete Event...","Lösche Termin..." }, 130{ "Delete Event...","Lösche Termin..." },
131{ "Delete Event","Lösche Termin" }, 131{ "Delete Event","Lösche Termin" },
132{ "&Delete...","Lösche..." }, 132{ "&Delete...","Lösche..." },
133{ "Delete...","Lösche..." }, 133{ "Delete...","Lösche..." },
134{ "Delete","Lösche" }, 134{ "Delete","Lösche" },
135{ "Delete Todo...","Lösche Todo..." }, 135{ "Delete Todo...","Lösche Todo..." },
136{ "Delete To-Do","Lösche Todo" }, 136{ "Delete To-Do","Lösche Todo" },
137{ "Deleting item %d ...","Lösche Eintrag %d..." }, 137{ "Deleting item %d ...","Lösche Eintrag %d..." },
138{ "Descriptions","Beschreibungen" }, 138{ "Descriptions","Beschreibungen" },
139{ "Deselect all","Deselektiere Alle" }, 139{ "Deselect all","Deselektiere Alle" },
140{ "Details","Details" }, 140{ "Details","Details" },
141{ "Dinner","Abendessen" }, 141{ "Dinner","Abendessen" },
142{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 142{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
143{ "Due Date","Fällig am" }, 143{ "Due Date","Fällig am" },
144{ "Due: ","Fällig: "}, 144{ "Due: ","Fällig: "},
145{ "Due Time","Fällig um" }, 145{ "Due Time","Fällig um" },
146{ "Due:","Fällig:"}, 146{ "Due:","Fällig:"},
147{ "Duration: ","Dauer: " }, 147{ "Duration: ","Dauer: " },
148{ "Edit...","Bearbeite..." }, 148{ "Edit...","Bearbeite..." },
149{ "Edit Event...","Bearbeite Termin..." }, 149{ "Edit Event...","Bearbeite Termin..." },
150{ "Edit Event","Bearbeite Termin" }, 150{ "Edit Event","Bearbeite Termin" },
151{ "Edit exceptions","Bearbeite Ausnahmen" }, 151{ "Edit exceptions","Bearbeite Ausnahmen" },
152{ "EditorBox:","Editor Fenster:" }, 152{ "EditorBox:","Editor Fenster:" },
153{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 153{ "Edit Recurrence Range","Bearbeite Wiederholung" },
154{ "Edit Todo...","Berabeite Todo..." }, 154{ "Edit Todo...","Berabeite Todo..." },
155{ "Edit To-Do","Todo bearbeiten" }, 155{ "Edit To-Do","Todo bearbeiten" },
156{ "E&mail address:","E&mail Adresse:" }, 156{ "E&mail address:","E&mail Adresse:" },
157{ "(EmptyEmail)","(KeineEmail)" }, 157{ "(EmptyEmail)","(KeineEmail)" },
158{ "(EmptyName)","(KeinName)" }, 158{ "(EmptyName)","(KeinName)" },
159{ "Enable Recurrence","Wiederholung anschalten" }, 159{ "Enable Recurrence","Wiederholung anschalten" },
160{ "End after","Endet nach"}, 160{ "End after","Endet nach"},
161{ "End by:","Endet am"}, 161{ "End by:","Endet am"},
162{ "End Date","End Datum" }, 162{ "End Date","End Datum" },
163{ "End:","Ende:" }, 163{ "End:","Ende:" },
164{ "End Time","End Zeit" }, 164{ "End Time","End Zeit" },
165{ "English","Englisch" }, 165{ "English","Englisch" },
166{ "Event","Termin" }, 166{ "Event","Termin" },
167{ "Event list","Termin Liste" }, 167{ "Event list","Termin Liste" },
168{ "Events","Termine" }, 168{ "Events","Termine" },
169{ "Event Viewer:","Termin Übersicht:" }, 169{ "Event Viewer:","Termin Übersicht:" },
170{ "every","jede" }, 170{ "every","jede" },
171{ "Exceptions...","Ausnahmen..." }, 171{ "Exceptions...","Ausnahmen..." },
172{ "Exceptions","Ausnahmen" }, 172{ "Exceptions","Ausnahmen" },
173{ "Exclude holidays","Ohne freie Tage" }, 173{ "Exclude holidays","Ohne freie Tage" },
174{ "Exclude Saturdays","Ohne Samstage" }, 174{ "Exclude Saturdays","Ohne Samstage" },
175{ "Feb","Feb" }, 175{ "Feb","Feb" },
176{ "February","Februar" }, 176{ "February","Februar" },
177{ "&Find","Suche!" }, 177{ "&Find","Suche!" },
178{ "Fonts","Schriftart" }, 178{ "Fonts","Schriftart" },
179{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 179{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
180{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 180{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
181{ "Free","Frei" }, 181{ "Free","Frei" },
182{ "Friday","Freitag" }, 182{ "Friday","Freitag" },
183{ "Fri","Fr" }, 183{ "Fri","Fr" },
184{ "From:","Vom:" }, 184{ "From:","Vom:" },
185{ "Full &name:","Vor- und &Nachname:" }, 185{ "Full &name:","Vor- und &Nachname:" },
186{ "General","Allgemein" }, 186{ "General","Allgemein" },
187{ "German","Deutsch" }, 187{ "German","Deutsch" },
188{ "Gifts","Geschenke" }, 188{ "Gifts","Geschenke" },
189{ "Go to Today","Heute anzeigen" }, 189{ "Go to Today","Heute anzeigen" },
190{ "Help","Hilfe" }, 190{ "Help","Hilfe" },
191{ "Hide Dates","Daten ausblenden" }, 191{ "Hide Dates","Daten ausblenden" },
192{ "Highlight color:","Markierungen:" }, 192{ "Highlight color:","Markierungen:" },
193{ "Holiday color:","Freie Tage:" }, 193{ "Holiday color:","Freie Tage:" },
194{ "hour(s)","Stunde(n)" }, 194{ "hour(s)","Stunde(n)" },
195{ "In %1 days: ","In %1 Tagen: " }, 195{ "In %1 days: ","In %1 Tagen: " },
196{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 196{ "Incomplete Todo:","Unerledigte Aufgaben:" },
197{ "Information","Information" }, 197{ "Information","Information" },
198{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 198{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
199{ "Jan","Jan" }, 199{ "Jan","Jan" },
200{ "January","Januar" }, 200{ "January","Januar" },
201{ "JournalView:","Journal Ansicht:" }, 201{ "JournalView:","Journal Ansicht:" },
202{ "Journals","Journale" }, 202{ "Journals","Journale" },
203{ "Jul","Jul" }, 203{ "Jul","Jul" },
204{ "July","Juli" }, 204{ "July","Juli" },
205{ "Jump to date","Springe zum Datum" }, 205{ "Jump to date","Springe zum Datum" },
206{ "June","Juni" }, 206{ "June","Juni" },
207{ "Jun","Jun" }, 207{ "Jun","Jun" },
208{ "Key Bindings...","Tastenzuordnung..." }, 208{ "Key Bindings...","Tastenzuordnung..." },
209{ "Kids","Kinder" }, 209{ "Kids","Kinder" },
210{ "Known Problems...","Bekannte Probleme..." }, 210{ "Known Problems...","Bekannte Probleme..." },
211{ "KO/Pi Find ","KO/Pi Suchdialog " }, 211{ "KO/Pi Find ","KO/Pi Suchdialog " },
212{ "KO/Pi Find: ","KO/Pi Suchen: " }, 212{ "KO/Pi Find: ","KO/Pi Suchen: " },
213{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 213{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
214{ "Language:(needs restart)","Sprache (Neustart!)" }, 214{ "Language:(needs restart)","Sprache (Neustart!)" },
215{ "Language:","Sprache" }, 215{ "Language:","Sprache" },
216{ "Large","Etwas mehr" }, 216{ "Large","Etwas mehr" },
217{ "List View:","Listenansicht:" }, 217{ "List View:","Listenansicht:" },
218{ "List View","Listenansicht" }, 218{ "List View","Listenansicht" },
219{ "Load/Save","Laden/Speichern" }, 219{ "Load/Save","Laden/Speichern" },
220{ "Load Template","Lade Vorlage" }, 220{ "Load Template","Lade Vorlage" },
221{ "Locale","Lokalisation" }, 221{ "Locale","Lokalisation" },
222{ "Local temp file:","Lokale temp. Datei:" }, 222{ "Local temp file:","Lokale temp. Datei:" },
223{ "Location: ","Ort: " }, 223{ "Location: ","Ort: " },
224{ "Location:","Ort:" }, 224{ "Location:","Ort:" },
225{ "Mail client","Mail Programm" }, 225{ "Mail client","Mail Programm" },
226{ "Mail Client","Mail Programm" }, 226{ "Mail Client","Mail Programm" },
227{ "March","März" }, 227{ "March","März" },
228{ "Mar","Mär" }, 228{ "Mar","Mär" },
229{ "May","Mai" }, 229{ "May","Mai" },
230{ "M. Bains line:","M. Bains Linie:" }, 230{ "M. Bains line:","M. Bains Linie:" },
231{ "Medium","Medium" }, 231{ "Medium","Medium" },
232{ "Method","Methode" }, 232{ "Method","Methode" },
233{ "minute(s)","Minute(n)" }, 233{ "minute(s)","Minute(n)" },
234{ "Monday","Montag" }, 234{ "Monday","Montag" },
235{ "Mon","Mo" }, 235{ "Mon","Mo" },
236{ "Monthly","Monatlich" }, 236{ "Monthly","Monatlich" },
237{ "Month not long enough","Monat ist nicht lang genug" }, 237{ "Month not long enough","Monat ist nicht lang genug" },
238{ "month(s)","Monat(e)" }, 238{ "month(s)","Monat(e)" },
239{ "Month view:","Monatsansicht:" }, 239{ "Month view:","Monatsansicht:" },
240{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 240{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
241{ "Todo view uses category colors","Todo Ansicht zeigt Kategorie Farben" }, 241{ "Todo view uses category colors","Todo Ansicht zeigt Kategorie Farben" },
242{ "Move &Down","Nach unten verschieben" }, 242{ "Move &Down","Nach unten verschieben" },
243{ "Move &Up","Nach oben verschieben" }, 243{ "Move &Up","Nach oben verschieben" },
244{ "Name:","Name:" }, 244{ "Name:","Name:" },
245{ "Name","Name" }, 245{ "Name","Name" },
246{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 246{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
247{ "%n Days","%n Tage" }, 247{ "%n Days","%n Tage" },
248{ "Never","Nie" }, 248{ "Never","Nie" },
249{ "New event...","Neuer Termin..." }, 249{ "New event...","Neuer Termin..." },
250{ "New event","Neuer Termin" }, 250{ "New event","Neuer Termin" },
251{ "New Event...","Neuer Termin..." }, 251{ "New Event...","Neuer Termin..." },
252{ "New Events/Todos should","Neue Termine/Todos sollten" }, 252{ "New Events/Todos should","Neue Termine/Todos sollten" },
253{ "&New","&Neu" }, 253{ "&New","&Neu" },
254{ "New","Neu", }, 254{ "New","Neu", },
255{ "New Sub-Todo...","Neues Sub-Todo..." }, 255{ "New Sub-Todo...","Neues Sub-Todo..." },
256{ "New Todo...","Neues Todo..." }, 256{ "New Todo...","Neues Todo..." },
257{ "Next Alarm: ","Nächster Alarm: ", }, 257{ "Next Alarm: ","Nächster Alarm: ", },
258{ "&Next Day","&Nächster Tag", }, 258{ "&Next Day","&Nächster Tag", },
259{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 259{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
260{ "Next month","Nächster Monat" }, 260{ "Next month","Nächster Monat" },
261{ "&Next Week","&Nächste Woche" }, 261{ "&Next Week","&Nächste Woche" },
262{ "Next year","Nächstes Jahr" }, 262{ "Next year","Nächstes Jahr" },
263{ "Next Year","Nächstes Jahr" }, 263{ "Next Year","Nächstes Jahr" },
264{ "%n h","%n Std" }, 264{ "%n h","%n Std" },
265{ "No ending date","Kein End-Datum", }, 265{ "No ending date","Kein End-Datum", },
266{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 266{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
267{ "No event selected.","Kein Termin selektiert" }, 267{ "No event selected.","Kein Termin selektiert" },
268{ "No","Nein" }, 268{ "No","Nein" },
269{ "No program set","Kein Programm ausgewählt", }, 269{ "No program set","Kein Programm ausgewählt", },
270{ "Normal","Normal" }, 270{ "Normal","Normal" },
271{ "[No selection]","Keine Selektion", }, 271{ "[No selection]","Keine Selektion", },
272{ "No sound set","Kein Sound ausgewählt", }, 272{ "No sound set","Kein Sound ausgewählt", },
273{ "no time ","keine Zeit ", }, 273{ "no time ","keine Zeit ", },
274{ "no time","keine Zeit", }, 274{ "no time","keine Zeit", },
275{ "No Time","Keine Zeit" }, 275{ "No Time","Keine Zeit" },
276{ "November","November" }, 276{ "November","November" },
277{ "Nov","Nov", }, 277{ "Nov","Nov", },
278{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 278{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
279{ "occurrence(s)","Vorkommen" }, 279{ "occurrence(s)","Vorkommen" },
280{ "October","Oktober" }, 280{ "October","Oktober" },
281{ "Oct","Okt", }, 281{ "Oct","Okt", },
282{ "O-due!","Ü-fällig! " }, 282{ "O-due!","Ü-fällig! " },
283{ "&OK","&OK" }, 283{ "&OK","&OK" },
284{ "Ok+Show!","Ok+Anzeigen" }, 284{ "Ok+Show!","Ok+Anzeigen" },
285{ "Organizer: %1","Organisator %1" }, 285{ "Organizer: %1","Organisator %1" },
286{ "Organizer","Organisator" }, 286{ "Organizer","Organisator" },
287{ "Owner: ","Besitzer: " }, 287{ "Owner: ","Besitzer: " },
288{ "Owner:","Besitzer:" }, 288{ "Owner:","Besitzer:" },
289{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 289{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
290{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 290{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
291{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 291{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
292{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." }, 292{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." },
293{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 293{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
294{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." }, 294{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." },
295{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 295{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
296{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." }, 296{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." },
297{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 297{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
298{ "&Previous Day","Vorheriger Tag" }, 298{ "&Previous Day","Vorheriger Tag" },
299{ "Previous month","Vorheriger Monat" }, 299{ "Previous month","Vorheriger Monat" },
300{ "Previous Month","Vorheriger Monat" }, 300{ "Previous Month","Vorheriger Monat" },
301{ "&Previous Week","Vorherige Woche" }, 301{ "&Previous Week","Vorherige Woche" },
302{ "Previous year","Vorheriges Jahr" }, 302{ "Previous year","Vorheriges Jahr" },
303{ "Previous Year","Vorheriges Jahr" }, 303{ "Previous Year","Vorheriges Jahr" },
304{ "Printing","Drucken" }, 304{ "Printing","Drucken" },
305{ "Priority:","Priorität:" }, 305{ "Priority:","Priorität:" },
306{ "Private","Privat" }, 306{ "Private","Privat" },
307{ "Proceed","Weiter" }, 307{ "Proceed","Weiter" },
308{ "Public","Öffentlich" }, 308{ "Public","Öffentlich" },
309{ "Purge","Entferne" }, 309{ "Purge","Entferne" },
310{ "Purge Completed...","Entferne erledigte Todos..." }, 310{ "Purge Completed...","Entferne erledigte Todos..." },
311{ "Purge Todos","Todos bereinigen" }, 311{ "Purge Todos","Todos bereinigen" },
312{ "read-only","schreibgeschützt" }, 312{ "read-only","schreibgeschützt" },
313{ "Recur every","Wiederh. alle" }, 313{ "Recur every","Wiederh. alle" },
314{ "Recur in the month of","Wiederh. im Monat" }, 314{ "Recur in the month of","Wiederh. im Monat" },
315{ "Recur on the","Wiederh. am" }, 315{ "Recur on the","Wiederh. am" },
316{ "Recur on this day","Wiederh. am diesen Tag" }, 316{ "Recur on this day","Wiederh. am diesen Tag" },
317{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 317{ "Recurrence Range...","Wiederholungs Zeitraum..." },
318{ "Recurrence Range","Wiederholungs Zeitraum" }, 318{ "Recurrence Range","Wiederholungs Zeitraum" },
319{ "Recurrence Rule","Wiederholungs Regel" }, 319{ "Recurrence Rule","Wiederholungs Regel" },
320{ "Recurrence","Wiederholung" }, 320{ "Recurrence","Wiederholung" },
321{ "Recurs","Wiederholung" }, 321{ "Recurs","Wiederholung" },
322{"&Reject","Abweisen"}, 322{"&Reject","Abweisen"},
323{ "Reminder:","Alarm:" }, 323{ "Reminder:","Alarm:" },
324{ "Rem.:","Alarm:" }, 324{ "Rem.:","Alarm:" },
325{ "Rem.","Alarm:" }, 325{ "Rem.","Alarm:" },
326{ "Remote file:","Remote Datei:"}, 326{ "Remote file:","Remote Datei:"},
327{ "Remote IP:","Remote (ferne) IP:" }, 327{ "Remote IP:","Remote (ferne) IP:" },
328{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 328{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
329{ "Remote user:","Remote Benutzer"}, 329{ "Remote user:","Remote Benutzer"},
330{ "&Remove","Entfe&rnen" }, 330{ "&Remove","Entfe&rnen" },
331{ "Remove","Entfernen" }, 331{ "Remove","Entfernen" },
332{ "Request response","Bemerkung anfordern" }, 332{ "Request response","Bemerkung anfordern" },
333{ "Role:","Rolle:" }, 333{ "Role:","Rolle:" },
334{ "Role","Rolle" }, 334{ "Role","Rolle" },
335{ "Sat","Sa" }, 335{ "Sat","Sa" },
336{ "Saturday","Samstag" }, 336{ "Saturday","Samstag" },
337{ "Search for:","Suche nach:" }, 337{ "Search for:","Suche nach:" },
338{ "Search In","Suche in" }, 338{ "Search In","Suche in" },
339{ "Search...","Suche..." }, 339{ "Search...","Suche..." },
340{ "Search","Suche" }, 340{ "Search","Suche" },
341{ "Select Addresses","Wähle Adressen" }, 341{ "Select Addresses","Wähle Adressen" },
342{ "Select all","Selektiere Alle" }, 342{ "Select all","Selektiere Alle" },
343{ "Select a month","Wähle Monat" }, 343{ "Select a month","Wähle Monat" },
344{ "Select a week","Wähle Woche" }, 344{ "Select a week","Wähle Woche" },
345{ "Select a year","Wähle Jahr" }, 345{ "Select a year","Wähle Jahr" },
346{ "Send directly","Sende direkt" }, 346{ "Send directly","Sende direkt" },
347{ "&Send Messages","&Sende Nachrichten", }, 347{ "&Send Messages","&Sende Nachrichten", },
348{ "Sep","Sep" }, 348{ "Sep","Sep" },
349{ "September","September" }, 349{ "September","September" },
350{ "Shopping","Einkaufen" }, 350{ "Shopping","Einkaufen" },
351{ "Show Dates","Zeige Daten" }, 351{ "Show Dates","Zeige Daten" },
352{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 352{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
353{ "Show Event","Termin anzeigen" }, 353{ "Show Event","Termin anzeigen" },
354{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 354{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
355{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 355{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
356{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 356{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
357{ "Show time as:","Zeige Zeit als" }, 357{ "Show time as:","Zeige Zeit als" },
358{ "Show Todo","Todo anzeigen" }, 358{ "Show Todo","Todo anzeigen" },
359{ "Vertical screen layout(Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 359{ "Vertical screen layout(Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
360{ "&Show","Anzeigen" }, 360{ "&Show","Anzeigen" },
361{ "Show...","Anzeigen..." }, 361{ "Show...","Anzeigen..." },
362{ "Show","Anzeigen" }, 362{ "Show","Anzeigen" },
363{ "Small","Klein" }, 363{ "Small","Klein" },
364{ "Sorry","Tut mir leid" }, 364{ "Sorry","Tut mir leid" },
365{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 365{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
366{ "Start:","Start:" }, 366{ "Start:","Start:" },
367{ "Start Date","Start Datum" }, 367{ "Start Date","Start Datum" },
368{ "Start date: %1","Start Datum: %1" }, 368{ "Start date: %1","Start Datum: %1" },
369{ "Start Time","Start Zeit" }, 369{ "Start Time","Start Zeit" },
370{ "Status:","Status:" }, 370{ "Status:","Status:" },
371{ "Status","Status:" }, 371{ "Status","Status:" },
372{ "Summaries","Titel" }, 372{ "Summaries","Titel" },
373{ "Summary:","Titel:" }, 373{ "Summary:","Titel:" },
374{ "Summary","Titel" }, 374{ "Summary","Titel" },
375{ "Sunday","Sonntag" }, 375{ "Sunday","Sonntag" },
376{ "Sun","So" }, 376{ "Sun","So" },
377{ "Sync preferences:","Sync Einstellungen" }, 377{ "Sync preferences:","Sync Einstellungen" },
378{ "Sync Prefs","Sync Einstellungen" }, 378{ "Sync Prefs","Sync Einstellungen" },
379{ "Syncronize","Daten abgleich" }, 379{ "Syncronize","Daten abgleich" },
380{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 380{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
381{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 381{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
382{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 382{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
383{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges Todo" }, 383{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges Todo" },
384{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 384{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
385{ "Template...","Vorlage..." }, 385{ "Template...","Vorlage..." },
386{ "This day","Dieser Tag" }, 386{ "This day","Dieser Tag" },
387{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 387{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
388{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 388{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
389{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 389{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
390{ "Thu","Do" }, 390{ "Thu","Do" },
391{ "Thursday","Donnerstag" }, 391{ "Thursday","Donnerstag" },
392{ "Time associated","Mit Zeit" }, 392{ "Time associated","Mit Zeit" },
393{ "Time bar:","Uhrzeit Zeile:" }, 393{ "Time bar:","Uhrzeit Zeile:" },
394{ "Time && Date","Zeit und Datum" }, 394{ "Time && Date","Zeit und Datum" },
395{ "Time Format","Zeit Format" }, 395{ "Time Format","Zeit Format" },
396{ "Time Format(nr):","Zeit Format(Neustart!)" }, 396{ "Time Format(nr):","Zeit Format(Neustart!)" },
397{ "Date Labels:","Datumsleiste:" }, 397{ "Date Labels:","Datumsleiste:" },
398{ "Time: ","Zeit: " }, 398{ "Time: ","Zeit: " },
399{ "Timezone:","Zeitzone:" }, 399{ "Timezone:","Zeitzone:" },
400{ "To: ","Bis: " }, 400{ "To: ","Bis: " },
401{ "To:","Bis:" }, 401{ "To:","Bis:" },
402{ "Today: ","Heute: " }, 402{ "Today: ","Heute: " },
403{ "Todo due today color:","Heute fällige Todos" }, 403{ "Todo due today color:","Heute fällige Todos" },
404{ "To-do items:","To-Do items:" }, 404{ "To-do items:","To-Do items:" },
405{ "Todo overdue color:","Überfällige Todos" }, 405{ "Todo overdue color:","Überfällige Todos" },
406{ "Todo","Todo" }, 406{ "Todo","Todo" },
407{ "To-do view shows completed Todos","Todo Ansicht zeigt erledigte Todos" }, 407{ "To-do view shows completed Todos","Todo Ansicht zeigt erledigte Todos" },
408{ "ToDoView:","Todo Ansicht:" }, 408{ "ToDoView:","Todo Ansicht:" },
409{ "Toggle Alarm","Wechsle Alarm" }, 409{ "Toggle Alarm","Wechsle Alarm" },
410{ "Toggle Allday","Umschalten Ganztag" }, 410{ "Toggle Allday","Umschalten Ganztag" },
411{ "Tomorrow: ","Morgen: " }, 411{ "Tomorrow: ","Morgen: " },
412{ "Tue","Di" }, 412{ "Tue","Di" },
413{ "Tuesday","Dienstag" }, 413{ "Tuesday","Dienstag" },
414{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 414{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
415{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 415{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
416{ "Unknown","Unbekannt" }, 416{ "Unknown","Unbekannt" },
417{ "Up","Hinauf" }, 417{ "Up","Hinauf" },
418{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 418{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
419{ "User defined","Benutzerdefiniert" }, 419{ "User defined","Benutzerdefiniert" },
420{ "User long date:","Format langes Datum:" }, 420{ "User long date:","Format langes Datum:" },
421{ "User short date:","Forma kurzes Datum:" }, 421{ "User short date:","Forma kurzes Datum:" },
422{ "View","Ansicht" }, 422{ "View","Ansicht" },
423{ "View Fonts","Schriftarten Ansichten" }, 423{ "View Fonts","Schriftarten Ansichten" },
424{ "Views","Ansichten" }, 424{ "Views","Ansichten" },
425{ "Wed","Mi" }, 425{ "Wed","Mi" },
426{ "Wednesday","Mittwoch" }, 426{ "Wednesday","Mittwoch" },
427{ "Week %1","Woche %1" }, 427{ "Week %1","Woche %1" },
428{ "Weekly","Wöchentlich" }, 428{ "Weekly","Wöchentlich" },
429{ "Week starts on Sunday","Woche beginnt Sonntags" }, 429{ "Week starts on Sunday","Woche beginnt Sonntags" },
430{ "What's Next View:","What's Next Anz." }, 430{ "What's Next View:","What's Next Anz." },
431{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 431{ "What's next ?","Was kommt als nächstes?(What's Next)" },
432{ "Working Hours","Tägliche Arbeitszeit" }, 432{ "Working Hours","Tägliche Arbeitszeit" },
433{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 433{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
434{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 434{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
435{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 435{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
436{ "Yearly","Jährlich" }, 436{ "Yearly","Jährlich" },
437{ "year(s)","Jahr(e)" }, 437{ "year(s)","Jahr(e)" },
438{ "Yes","Ja" }, 438{ "Yes","Ja" },
439{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 439{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
440{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 440{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
441{ "week(s) on:","Woche(n) am: " }, 441{ "week(s) on:","Woche(n) am: " },
442{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 442{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
443{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 443{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
444{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 444{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
445{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 445{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
446{ "Daylight start:","Sommerzeit Start:" }, 446{ "Daylight start:","Sommerzeit Start:" },
447{ "Daylight end:","Sommerzeit Ende:" }, 447{ "Daylight end:","Sommerzeit Ende:" },
448{ "Time Zone","Zeitzone" }, 448{ "Time Zone","Zeitzone" },
449{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 449{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
450{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 450{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
451{ "minutely","minütlich" }, 451{ "minutely","minütlich" },
452{ "hourly","stündlich" }, 452{ "hourly","stündlich" },
453{ "daily","täglich" }, 453{ "daily","täglich" },
454{ "weekly","wöchentlich" }, 454{ "weekly","wöchentlich" },
455{ "monthly","monatlich" }, 455{ "monthly","monatlich" },
456{ "day-monthly","tag-monatlich" }, 456{ "day-monthly","tag-monatlich" },
457{ "month-yearly","monat-jährlich" }, 457{ "month-yearly","monat-jährlich" },
458{ "day-yearly","tag-jährlich" }, 458{ "day-yearly","tag-jährlich" },
459{ "position-yearly","pos-jährlich" }, 459{ "position-yearly","pos-jährlich" },
460{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 460{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
461{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 461{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
462{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 462{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
463{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 463{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
464{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 464{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
465{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 465{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
466{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 466{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
467{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 467{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
468{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 468{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
469{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 469{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
470{ "ViewChange","Ansichtswechsel" }, 470{ "ViewChange","Ansichtswechsel" },
471{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 471{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
472{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 472{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
473{ "File","Datei" }, 473{ "File","Datei" },
474{ "Clone...","Dupliziere..." }, 474{ "Clone...","Dupliziere..." },
475{ "Move...","Bewege..." }, 475{ "Move...","Bewege..." },
476{ "Beam...","Sende via IR..." }, 476{ "Beam...","Sende via IR..." },
477{ "&Clone...","Dupliziere..." }, 477{ "&Clone...","Dupliziere..." },
478{ "&Move...","Bewege..." }, 478{ "&Move...","Bewege..." },
479{ "&Beam...","Sende via IR..." }, 479{ "&Beam...","Sende via IR..." },
480{ "Show Completed","Zeige erledigte Todos" }, 480{ "Show Completed","Zeige erledigte Todos" },
481{ "Show Quick Todo","Zeige Quick-Todo" }, 481{ "Show Quick Todo","Zeige Quick-Todo" },
482{ "Unparent Todo","Un-sub Todo" }, 482{ "Unparent Todo","Un-sub Todo" },
483{ "Save selected to file...","Speichere Selektierte..." }, 483{ "Save selected to file...","Speichere Selektierte..." },
484{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 484{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
485{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 485{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
486{ "Beam via IR...","Sende via IR..." }, 486{ "Beam via IR...","Sende via IR..." },
487{ "Search","Suchen" }, 487{ "Search","Suchen" },
488{ "Date Picker","Datum auswählen" }, 488{ "Date Picker","Datum auswählen" },
489{ "Day View","Tagesansicht" }, 489{ "Day View","Tagesansicht" },
490{ "Work Week","Arbeitswoche" }, 490{ "Work Week","Arbeitswoche" },
491{ "Week","Wochenansicht" }, 491{ "Week","Wochenansicht" },
492{ "Month","Monatsansicht" }, 492{ "Month","Monatsansicht" },
493{ "Todo View","Todo Liste" }, 493{ "Todo View","Todo Liste" },
494{ "Journal","Journal" }, 494{ "Journal","Journal" },
495{ "Next days","Nächste Tage" }, 495{ "Next days","Nächste Tage" },
496{ "Print agenda selection...","Drucke Agendaselektion..." }, 496{ "Print agenda selection...","Drucke Agendaselektion..." },
497{ "Toggle DateNavigator","Navigator umschalten" }, 497{ "Toggle DateNavigator","Navigator umschalten" },
498{ "Toggle FilterView","Filteransicht umschalten" }, 498{ "Toggle FilterView","Filteransicht umschalten" },
499{ "Prev. month","Vorheriger Monat" }, 499{ "Prev. month","Vorheriger Monat" },
500{ "Go backward","Gehe zurück" }, 500{ "Go backward","Gehe zurück" },
501{ "Go forward","Gehe weiter" }, 501{ "Go forward","Gehe weiter" },
502{ "Synchronize","Synchronisieren" }, 502{ "Synchronize","Synchronisieren" },
503{ "AgendaSize","Agendagröße" }, 503{ "AgendaSize","Agendagröße" },
504{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 504{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
505{ "Import last file","Importiere letzte Datei" }, 505{ "Import last file","Importiere letzte Datei" },
506{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 506{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
507{ "Save Backup...","Speichere Backup..." }, 507{ "Save Backup...","Speichere Backup..." },
508{ "Export VCalendar","Exportiere VCalendar" }, 508{ "Export VCalendar","Exportiere VCalendar" },
509{ "Manage new categories...","Verwalte neue Kategorien..." }, 509{ "Manage new categories...","Verwalte neue Kategorien..." },
510{ "Beam complete calendar...","Sende kompletten Kalender..." }, 510{ "Beam complete calendar...","Sende kompletten Kalender..." },
511{ "Beam filtered calendar...","Sende gefilterten Kalender..." }, 511{ "Beam filtered calendar...","Sende gefilterten Kalender..." },
512{ "Remote via ssh","Über Netzwerk via ssh" }, 512{ "Remote via ssh","Über Netzwerk via ssh" },
513{ "With local file","Mit lokaler Datei" }, 513{ "With local file","Mit lokaler Datei" },
514{ "With last file","Mit letzter Datei" }, 514{ "With last file","Mit letzter Datei" },
515{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 515{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
516{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 516{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
517{ "Save filename","Speichern: Dateinamen wählen" }, 517{ "Save filename","Speichern: Dateinamen wählen" },
518{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 518{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
519{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 519{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
520{ "Overwrite!","Überschreibe!" }, 520{ "Overwrite!","Überschreibe!" },
521{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 521{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
522{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" }, 522{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" },
523{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 523{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
524{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 524{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
525{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 525{ "Deleting item %d ...","Lösche Eintrag %d ..." },
526{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 526{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
527{ "Size","Größe" }, 527{ "Size","Größe" },
528{ "Date","Datum" }, 528{ "Date","Datum" },
529{ "Mime Type","Datei Typ" }, 529{ "Mime Type","Datei Typ" },
530{ "All Files","Alle Dateien" }, 530{ "All Files","Alle Dateien" },
531{ "Files","Dateien" }, 531{ "Files","Dateien" },
532{ "Documents","DoKumente" }, 532{ "Documents","DoKumente" },
533{ "Select Categories","Selektiere Kategorien" }, 533{ "Select Categories","Selektiere Kategorien" },
534{ " &Deselect All "," Auswahl aufheben " }, 534{ " &Deselect All "," Auswahl aufheben " },
535{ "A&dd","Hinzu" }, 535{ "A&dd","Hinzu" },
536{ "&Modify","Ändern" }, 536{ "&Modify","Ändern" },
537{ "Edit Categories","Editiere Kategorien" }, 537{ "Edit Categories","Editiere Kategorien" },
538{ " &Edit Categories "," &Editiere Kategorien " }, 538{ " &Edit Categories "," &Editiere Kategorien " },
539{ "Beam Options","Beam Einstellungen" }, 539{ "Beam Options","Beam Einstellungen" },
540{ " With timezone "," Mit Zeitzone " }, 540{ " With timezone "," Mit Zeitzone " },
541{ " Local time ", " Lokale Zeit " }, 541{ " Local time ", " Lokale Zeit " },
542{ "Manage new Categories","Verwalte neue Kategorien" }, 542{ "Manage new Categories","Verwalte neue Kategorien" },
543{ "Add to category list","Füge zur Kategorieliste hinzu" }, 543{ "Add to category list","Füge zur Kategorieliste hinzu" },
544{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 544{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
545{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 545{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
546{ "File format","Datei Format" }, 546{ "File format","Datei Format" },
547{ "Time format","Zeit Format" }, 547{ "Time format","Zeit Format" },
548{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 548{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
549{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 549{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
550{ "h","Std" }, 550{ "h","Std" },
551{ "min","Min" }, 551{ "min","Min" },
552{ "hou","Std" }, 552{ "hou","Std" },
553{ "day","Tag" }, 553{ "day","Tag" },
554{ "French","Französich" }, 554{ "French","Französich" },
555{ "Time","Zeit" }, 555{ "Time","Zeit" },
556{ "Event Viewer","Termin Anzeige" }, 556{ "Event Viewer","Termin Anzeige" },
557{ "Cancel Sync","Sync Abbrechen" }, 557{ "Cancel Sync","Sync Abbrechen" },
558{ "Remote","Fern" }, 558{ "Remote","Fern" },
559{ "Local","Lokal" }, 559{ "Local","Lokal" },
560{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 560{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
561{ "Local: ","Lokal: " }, 561{ "Local: ","Lokal: " },
562{ "Remote: ","Fern: " }, 562{ "Remote: ","Fern: " },
563{ "Last modified: ","Zuletzt geändert: " }, 563{ "Last modified: ","Zuletzt geändert: " },
564{ "Location: ","Ort: " }, 564{ "Location: ","Ort: " },
565{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 565{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
566{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 566{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
567{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 567{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
568{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 568{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
569{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 569{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
570{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 570{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
571{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 571{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
572{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 572{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
573{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 573{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
574{ "( %1 min before )","( %1 min vorher )" }, 574{ "( %1 min before )","( %1 min vorher )" },
575{ "<b>Alarm on: ","<b>Alarm am: " }, 575{ "<b>Alarm on: ","<b>Alarm am: " },
576{ "<b>Details: </b>","<b>Details: </b>" }, 576{ "<b>Details: </b>","<b>Details: </b>" },
577{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 577{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
578{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 578{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
579{ "Organizer","Organisator" }, 579{ "Organizer","Organisator" },
580{ "Save","Speichern" }, 580{ "Save","Speichern" },
581{ "Exit (+save)","Beenden(+speichern)" }, 581{ "Exit (+save)","Beenden(+speichern)" },
582{ "Home","Zuhause" }, 582{ "Home","Zuhause" },
583{ "Office","Büro" }, 583{ "Office","Büro" },
584{ "Library","Bibliothek" }, 584{ "Library","Bibliothek" },
585{ "Doctor","Arzt" }, 585{ "Doctor","Arzt" },
586{ "Beach","Strand" }, 586{ "Beach","Strand" },
587{ "Conference room","Konferenzraum" }, 587{ "Conference room","Konferenzraum" },
588{ "Drive Home","Heimfahrt" }, 588{ "Drive Home","Heimfahrt" },
589{ "Watch TV","Tv gucken" }, 589{ "Watch TV","Tv gucken" },
590{ "Phone call","Telefonanruf" }, 590{ "Phone call","Telefonanruf" },
591{ "Pay bill","Rechnung bezahlen" }, 591{ "Pay bill","Rechnung bezahlen" },
592{ "Read book","Buch lesen" }, 592{ "Read book","Buch lesen" },
593{ "Watering plants","Pflanzen giessen" }, 593{ "Watering plants","Pflanzen giessen" },
594{"Appointment","Verabredung" }, 594{"Appointment","Verabredung" },
595{"Birthday","Geburtstag" }, 595{"Birthday","Geburtstag" },
596{"Business","Geschäft" }, 596{"Business","Geschäft" },
597{"Business Travel","Geschäftsreise" }, 597{"Business Travel","Geschäftsreise" },
598{"Cinema","Kino" }, 598{"Cinema","Kino" },
599{"Customer","Kunde" }, 599{"Customer","Kunde" },
600{"Break","Pause" }, 600{"Break","Pause" },
601{"Breakfast","Frühstück" }, 601{"Breakfast","Frühstück" },
602{"Competition","Wettkampf" }, 602{"Competition","Wettkampf" },
603{"Dinner","Abendessen" }, 603{"Dinner","Abendessen" },
604{"Education","Erziehung" }, 604{"Education","Erziehung" },
605{"Family","Familie" }, 605{"Family","Familie" },
606{"Favorites","Favoriten" }, 606{"Favorites","Favoriten" },
607{"Festival","Festival" }, 607{"Festival","Festival" },
608{"Fishing","Angeln" }, 608{"Fishing","Angeln" },
609{"Flight","Flug" }, 609{"Flight","Flug" },
610{"Gifts","Geschenk" }, 610{"Gifts","Geschenk" },
611{"Holiday","Feiertag" }, 611{"Holiday","Feiertag" },
612{"Holiday Cards","Ansichtskarten" }, 612{"Holiday Cards","Ansichtskarten" },
613{"Hot Contacts","Heisse Kontakte" }, 613{"Hot Contacts","Heisse Kontakte" },
614{"Hiking","Wandern" }, 614{"Hiking","Wandern" },
615{"Hunting","Jagen" }, 615{"Hunting","Jagen" },
616{"Key Customer","Wichtiger Kunde" }, 616{"Key Customer","Wichtiger Kunde" },
617{"Kids","Kinder" }, 617{"Kids","Kinder" },
618{"Lunch","Mittagessen" }, 618{"Lunch","Mittagessen" },
619{"Meeting","Treffen" }, 619{"Meeting","Treffen" },
620{"Miscellaneous","Verschiedenes" }, 620{"Miscellaneous","Verschiedenes" },
621{"Partner","Partner" }, 621{"Partner","Partner" },
622{"Party","Partie" }, 622{"Party","Partie" },
623{"Personal","Privat" }, 623{"Personal","Privat" },
624{"Personal Travel","Privatreise"}, 624{"Personal Travel","Privatreise"},
625{"PHB","PHB" }, 625{"PHB","PHB" },
626{"Phone Calls","Telefonanruf" }, 626{"Phone Calls","Telefonanruf" },
627{"Projects","Projekt" }, 627{"Projects","Projekt" },
628{"Recurring","Wiederholend" }, 628{"Recurring","Wiederholend" },
629{"School","Schule" }, 629{"School","Schule" },
630{"Shopping","Einkaufen" }, 630{"Shopping","Einkaufen" },
631{"Speach","Rede" }, 631{"Speach","Rede" },
632{"Special Occasion","Spez.Gelegenheit" }, 632{"Special Occasion","Spez.Gelegenheit" },
633{"Sports","Sport" }, 633{"Sports","Sport" },
634{"Talk","Vortrag" }, 634{"Talk","Vortrag" },
635{"Travel","Reise" }, 635{"Travel","Reise" },
636{"TV","TV" }, 636{"TV","TV" },
637{"Germany","Deutschland" }, 637{"Germany","Deutschland" },
638{"Sweden","Schweden" }, 638{"Sweden","Schweden" },
639{"Forest","Wald" }, 639{"Forest","Wald" },
640{ "Desert","Wüste" }, 640{ "Desert","Wüste" },
641{ "Kitchen","Küche" }, 641{ "Kitchen","Küche" },
642{ "Lake","See" }, 642{ "Lake","See" },
643{"University","Universität"}, 643{"University","Universität"},
644{"Vacation","Urlaub" }, 644{"Vacation","Urlaub" },
645{"VIP","VIP" }, 645{"VIP","VIP" },
646{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 646{ "Import Sharp Calendar","Importiere Sharp Kalender" },
647{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 647{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
648{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 648{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
649{ "Cancelled","Gecancelt" }, 649{ "Cancelled","Gecancelt" },
650{ "Multiple sync","Mehrfach Sync" }, 650{ "Multiple sync","Mehrfach Sync" },
651{ "Local file","Lokale Datei" }, 651{ "Local file","Lokale Datei" },
652{ "Last file","Letzte Datei" }, 652{ "Last file","Letzte Datei" },
653{ "Keys + Colors...","Tasten + Farben..." }, 653{ "Keys + Colors...","Tasten + Farben..." },
654{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 654{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
655{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 655{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
656{ "Choose...","Wähle..." }, 656{ "Choose...","Wähle..." },
657{ "Use colors for application:","Setze Farben für Programm:" }, 657{ "Use colors for application:","Setze Farben für Programm:" },
658{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 658{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
659{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 659{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
660{ "Show parent To-Do's","Zeige Ober-Todos" }, 660{ "Show parent To-Do's","Zeige Ober-Todos" },
661{ "Show location","Zeige Orte" }, 661{ "Show location","Zeige Orte" },
662{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 662{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
663{ "Show in every cell ","Zeige in jeder Zelle " }, 663{ "Show in every cell ","Zeige in jeder Zelle " },
664{ "short month","kurzen Monat" }, 664{ "short month","kurzen Monat" },
665{ "icons","Icons" }, 665{ "icons","Icons" },
666{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 666{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
667{ "Category colors are applied to text","Kategorie Farben färben Text" }, 667{ "Category colors are applied to text","Kategorie Farben färben Text" },
668{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 668{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
669{ "Day color odd months","Tagesfarbe ungerade Monate" }, 669{ "Day color odd months","Tagesfarbe ungerade Monate" },
670{ "Day color even months","Tagesfarbe gerade Monate" }, 670{ "Day color even months","Tagesfarbe gerade Monate" },
671{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 671{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
672{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 672{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
673{ "Small To-do view uses smaller font","Kleine Todo Ansicht nutzt kleineren Font" }, 673{ "Small To-do view uses smaller font","Kleine Todo Ansicht nutzt kleineren Font" },
674{ "Colors are applied to text","Farben werden auf Text angewendet" }, 674{ "Colors are applied to text","Farben werden auf Text angewendet" },
675{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 675{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
676{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 676{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
677{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 677{ "Play beeps count:","Anzahl der Alarmpiepse: " },
678{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 678{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
679{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 679{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
680{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 680{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
681{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 681{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
682{ "New profile","Neues Profil" }, 682{ "New profile","Neues Profil" },
683{ "Clone profile","Klone Profil" }, 683{ "Clone profile","Klone Profil" },
684{ "Delete profile","Lösche Profil" }, 684{ "Delete profile","Lösche Profil" },
685{ "Profile:","Profil:" }, 685{ "Profile:","Profil:" },
686{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 686{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
687{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 687{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
688{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 688{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
689{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 689{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
690{ "Write back file","Schreibe Datei zurück" }, 690{ "Write back file","Schreibe Datei zurück" },
691{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 691{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
692{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 692{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
693{ "Local device name:","Name dieses Gerätes:" }, 693{ "Local device name:","Name dieses Gerätes:" },
694{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 694{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
695{ "Sync preferences","Synchronisations Einstellungen" }, 695{ "Sync preferences","Synchronisations Einstellungen" },
696{ "Profile kind","Profil Art" }, 696{ "Profile kind","Profil Art" },
697{ "Local file","Lokale Datei" }, 697{ "Local file","Lokale Datei" },
698{ "Local file:","Lokale Datei:" }, 698{ "Local file:","Lokale Datei:" },
699{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 699{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
700{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 700{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
701{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 701{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
702{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 702{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
703{ "Device","Gerät:" }, 703{ "Device","Gerät:" },
704{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 704{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
705{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 705{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
706{ "Synchronization successful","Synchronisation erfolgreich" }, 706{ "Synchronization successful","Synchronisation erfolgreich" },
707{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 707{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
708{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 708{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
709{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 709{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
710{ "Enter password","Passwort eingeben" }, 710{ "Enter password","Passwort eingeben" },
711{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 711{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
712{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 712{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
713{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 713{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
714{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 714{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
715{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 715{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
716{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 716{ "Edit Calendar Filters","Editiere Kalendar Filter" },
717{ "Enter filter name:","Neuer Filter Name:" }, 717{ "Enter filter name:","Neuer Filter Name:" },
718{ "Add Filter","Filter hinzufügen" }, 718{ "Add Filter","Filter hinzufügen" },
719{ "Question","Frage" }, 719{ "Question","Frage" },
720{ "Filter position: ","Filter Position: " }, 720{ "Filter position: ","Filter Position: " },
721{ "Month View","Monatsansicht" }, 721{ "Month View","Monatsansicht" },
722{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 722{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
723{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 723{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
724{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 724{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
725{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 725{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
726{ "Access: ","Zugriff: " }, 726{ "Access: ","Zugriff: " },
727{ "Needs Action","Aktion notwendig" }, 727{ "Needs Action","Aktion notwendig" },
728{ "Accepted","Akzeptiert" }, 728{ "Accepted","Akzeptiert" },
729{ "Declined","Abgelehnt" }, 729{ "Declined","Abgelehnt" },
730{ "Tentative","Vorläufig" }, 730{ "Tentative","Vorläufig" },
731{ "Delegated","Beauftragt" }, 731{ "Delegated","Beauftragt" },
732{ "Completed","Vollständig" }, 732{ "Completed","Vollständig" },
733{ "In Process","In Bearbeitung" }, 733{ "In Process","In Bearbeitung" },
734{ "Participant","Teilnehmer" }, 734{ "Participant","Teilnehmer" },
735{ "Optional Participant","Möglicher Teilnehmer" }, 735{ "Optional Participant","Möglicher Teilnehmer" },
736{ "Observer","Beobachter" }, 736{ "Observer","Beobachter" },
737{ "Chair","Vorsitzender" }, 737{ "Chair","Vorsitzender" },
738{ "Not supported \non desktop!\n","" }, 738{ "Not supported \non desktop!\n","" },
739{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die vertikale Auswahl zum Drucken zu bestimmen,\nbitte einen vertikalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen.\n(Es wird danach direkt der Termin Dialog angezeigt\n - dort bitte auf Abbrechen klicken) " }, 739{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die vertikale Auswahl zum Drucken zu bestimmen,\nbitte einen vertikalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen.\n(Es wird danach direkt der Termin Dialog angezeigt\n - dort bitte auf Abbrechen klicken) " },
740{ "Date range: ","Datums Zeitspanne: " }, 740{ "Date range: ","Datums Zeitspanne: " },
741{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 741{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
742{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 742{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
743{ "Add / remove events","Add./entferne Termine" }, 743{ "Add / remove events","Add./entferne Termine" },
744{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 744{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
745{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 745{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
746{ "Overwrite","Überschreiben" }, 746{ "Overwrite","Überschreiben" },
747{ "Sync+save","Syncen+speichern" }, 747{ "Sync+save","Syncen+speichern" },
748{ "Default","Standard" }, 748{ "Default","Standard" },
749{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 749{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
750{ " %d items?"," %d Einträge?" }, 750{ " %d items?"," %d Einträge?" },
751{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 751{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
752{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 752{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
753{ "Current","Aktuelle" }, 753{ "Current","Aktuelle" },
754{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 754{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
755{ "All","Alle" }, 755{ "All","Alle" },
756{ "Data Loss Warning","Datenverlust Warnung" }, 756{ "Data Loss Warning","Datenverlust Warnung" },
757{ "Proceed","Weitermachen" }, 757{ "Proceed","Weitermachen" },
758{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 758{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
759{ "Filter disabled ","Filter abgeschaltet" }, 759{ "Filter disabled ","Filter abgeschaltet" },
760{ "Filter selected: ","Gewählter Filter: " }, 760{ "Filter selected: ","Gewählter Filter: " },
761{ "Toggle Cancel","Gecancelt ändern" }, 761{ "Toggle Cancel","Gecancelt ändern" },
762{ "&Toggle Cancel","Gecancel&t ändern" }, 762{ "&Toggle Cancel","Gecancel&t ändern" },
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{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
961{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 960{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
962{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 961{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
963{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 962{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
964{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 963{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
965{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 964{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
966{ "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!" },
967{ "KDE-Pim Sync","KDE-Pim Sync" }, 966{ "KDE-Pim Sync","KDE-Pim Sync" },
968{ "Multiple profiles","Multi-Sync Profile" }, 967{ "Multiple profiles","Multi-Sync Profile" },
969{ "Device: ","Gerät: " }, 968{ "Device: ","Gerät: " },
970{ "Multiple sync started.","Multi-Sync gestartet." }, 969{ "Multiple sync started.","Multi-Sync gestartet." },
971{ "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" },
972{ "Turn filter on","Schalte Filter an" }, 971{ "Turn filter on","Schalte Filter an" },
973{ "Turn filter off","Schalte Filter aus" }, 972{ "Turn filter off","Schalte Filter aus" },
974{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 973{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
975{ "<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" },
976{ "<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" },
977{ "<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" },
978{ "<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" },
979{ "<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" },
980{ "<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" },
981{ "<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" },
982{ "<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" },
983{ "<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" },
984{ "<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" },
985{ "<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" },
986{ "<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" },
987{ "<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" },
988{ "<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" },
989{ "<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" },
990{ "<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" },
991{ "<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" },
992{ "<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" },
993{ "<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" },
994{ "<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" },
995{ "<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" },
996{ "<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" },
997{ "<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" },
998{ "<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" },
999{ "<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" },
1000{ "<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" },
1001{ "<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" },
1002{ "<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" },
1003{ "<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" },
1004{ "<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" },
1005{ "<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" },
1006{ "<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" },
1007{ "<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" },
1008{ "<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" },
1009{ "<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" },
1010{ "<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" },
1011{ "<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" },
1012{ "<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" },
1013{ "<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" },
1014{ "<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" },
1015{ "<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" },
1016{ "<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" },
1017{ "<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 " },
1018{ "<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" },
1019{ "<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" },
1020{ "<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" },
1021{ "<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" },
1022{ "<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" },
1023{ "<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" },
1024{ "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" },
1025{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1024{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1026{ "\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" },
1027{ "\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" },
1028{ "\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" },
1029{ "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" },
1030{ "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" },
1031{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1030{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1032{ "KO/Pi FAQ","KO/Pi FAQ" }, 1031{ "KO/Pi FAQ","KO/Pi FAQ" },
1033{ "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" },
1034{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1033{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1035{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1034{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1036{ "From: ","Von: " }, 1035{ "From: ","Von: " },
1037{ "Remove sync info","Entferne Sync Info" }, 1036{ "Remove sync info","Entferne Sync Info" },
1038{ "For all profiles","Für alle Profile" }, 1037{ "For all profiles","Für alle Profile" },
1039{ "Hide not Running","Verstecke nicht Laufende" }, 1038{ "Hide not Running","Verstecke nicht Laufende" },
1040{ "ME","ME" }, 1039{ "ME","ME" },
1041{ "Toolbar","Toolbar" }, 1040{ "Toolbar","Toolbar" },
1042{ "Undo Delete...","UNDO Löschen..." }, 1041{ "Undo Delete...","UNDO Löschen..." },
1043{ "Undo Delete","Löschen rückgängig machen" }, 1042{ "Undo Delete","Löschen rückgängig machen" },
1044{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1043{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1045{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1044{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1046{ "Januar","Januar" }, 1045{ "Januar","Januar" },
1047{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1046{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1048{ "No Filter","Kein Filter" }, 1047{ "No Filter","Kein Filter" },
1049{ "Multiple Sync options","Multi Sync Optionen" }, 1048{ "Multiple Sync options","Multi Sync Optionen" },
1050{ "Sync algo options","Sync Ablauf Optionen" }, 1049{ "Sync algo options","Sync Ablauf Optionen" },
1051{ "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:" },
1052{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1051{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1053{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1052{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1054{ "Write back options","Optionen zum Zurückschreiben" }, 1053{ "Write back options","Optionen zum Zurückschreiben" },
1055{ "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" },
1056{ "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:" },
1057{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1056{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1058{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1057{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1059{ "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" },
1060{ "Time period","Zeitspanne" }, 1059{ "Time period","Zeitspanne" },
1061{ "From ","Von " }, 1060{ "From ","Von " },
1062{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1061{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1063{ " weeks in the future "," Wochen in der Zukunft " }, 1062{ " weeks in the future "," Wochen in der Zukunft " },
1064{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1063{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1065{ "Local temp file:","Lokale temp Datei:" }, 1064{ "Local temp file:","Lokale temp Datei:" },
1066{ "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!" },
1067{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1066{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1068{ "Language","Sprache" }, 1067{ "Language","Sprache" },
1069{ "Time Format","Zeit Format" }, 1068{ "Time Format","Zeit Format" },
1070{ "Time Zone","Zeit Zone" }, 1069{ "Time Zone","Zeit Zone" },
1071{ "%1 groups subscribed","%1 Guppen abboniert" }, 1070{ "%1 groups subscribed","%1 Guppen abboniert" },
1072{ "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" },
1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1072{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1073{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1075{ "Save settings","Speichere Einstellungen" }, 1074{ "Save settings","Speichere Einstellungen" },
1076{ "Save standard","Speichere Standard" }, 1075{ "Save standard","Speichere Standard" },
1077{ "<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>" },
1078{ "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" },
1079{ "Data storage path","Daten Speicherpfad" }, 1078{ "Data storage path","Daten Speicherpfad" },
1080{ "Language","Sprache" }, 1079{ "Language","Sprache" },
1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1080{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1081{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1083{ "Show events that are done","Zeige abgelaufene Termine" }, 1082{ "Show events that are done","Zeige abgelaufene Termine" },
1084{ "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" },
1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1084{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1086{ "KO/Pi","KO/Pi" }, 1085{ "KO/Pi","KO/Pi" },
1087{ "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!" },
1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1087{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1089{ "Sound.Al.: ","Sound.Al.: " }, 1088{ "Sound.Al.: ","Sound.Al.: " },
1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1089{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1091{ "Restore","Wiederherstellen" }, 1090{ "Restore","Wiederherstellen" },
1092{ "\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?" },
1093{ "% completed","% erledigt" }, 1092{ "% completed","% erledigt" },
1094{ "%d item(s) found.","%d Item(s) gefunden." }, 1093{ "%d item(s) found.","%d Item(s) gefunden." },
1095{ "Set complete","Setze auf erledigt" }, 1094{ "Set complete","Setze auf erledigt" },
1096{ "(cancelled)","(gecancelt)" }, 1095{ "(cancelled)","(gecancelt)" },
1097{ "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" },
1098{ " Local time "," Lokale Zeit " }, 1097{ " Local time "," Lokale Zeit " },
1099{ "Form2","Form2" }, 1098{ "Form2","Form2" },
1100{ "Filter enabled","Filter angeschaltet" }, 1099{ "Filter enabled","Filter angeschaltet" },
1101{ "Edit Filters","Ändere Filter" }, 1100{ "Edit Filters","Ändere Filter" },
1102{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1101{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1103{ "Agenda","Agenda" }, 1102{ "Agenda","Agenda" },
1104{ " ("," (" }, 1103{ " ("," (" },
1105{ "<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>" },
1106{ "Print","Print" }, 1105{ "Print","Print" },
1107{ "&Setup Printer...","Drucker &Setup..." }, 1106{ "&Setup Printer...","Drucker &Setup..." },
1108{ "View Type","Zeige Typ" }, 1107{ "View Type","Zeige Typ" },
1109{ "Page &orientation:","Seiten Ausrichtung:" }, 1108{ "Page &orientation:","Seiten Ausrichtung:" },
1110{ "Use Default of Selected Style","Default des selektierten Stils" }, 1109{ "Use Default of Selected Style","Default des selektierten Stils" },
1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1110{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1112{ "Portrait","Portrait" }, 1111{ "Portrait","Portrait" },
1113{ "Landscape","Landschaft" }, 1112{ "Landscape","Landschaft" },
1114{ "Print day","Drucke Tag" }, 1113{ "Print day","Drucke Tag" },
1115{ "CalPrintDay_Base","CalPrintDay_Base" }, 1114{ "CalPrintDay_Base","CalPrintDay_Base" },
1116{ "Date && Time Range","Datum && Zeitspanne" }, 1115{ "Date && Time Range","Datum && Zeitspanne" },
1117{ "&End date:","&Enddatum:" }, 1116{ "&End date:","&Enddatum:" },
1118{ "&Start date:","&Startdatum:" }, 1117{ "&Start date:","&Startdatum:" },
1119{ "Start &time:","Startzeit:" }, 1118{ "Start &time:","Startzeit:" },
1120{ "End ti&me:","Endzeit:" }, 1119{ "End ti&me:","Endzeit:" },
1121{ "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" },
1122{ "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" },
1123{ "Alt+D","Alt+D" }, 1122{ "Alt+D","Alt+D" },
1124{ "&Use colors","Nutze Farben" }, 1123{ "&Use colors","Nutze Farben" },
1125{ "Alt+U","Alt+U" }, 1124{ "Alt+U","Alt+U" },
1126{ "Print week","Drucke Woche" }, 1125{ "Print week","Drucke Woche" },
1127{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1126{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1128{ "Use &colors","Nutze Farben" }, 1127{ "Use &colors","Nutze Farben" },
1129{ "Type of View","Typ der Ansicht" }, 1128{ "Type of View","Typ der Ansicht" },
1130{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1129{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1131{ "Alt+F","Alt+F" }, 1130{ "Alt+F","Alt+F" },
1132{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1131{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1133{ "Alt+T","Alt+T" }, 1132{ "Alt+T","Alt+T" },
1134{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1133{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1135{ "Print month","Drucke Monat" }, 1134{ "Print month","Drucke Monat" },
1136{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1135{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1137{ "&Start month:","&Startmonat:" }, 1136{ "&Start month:","&Startmonat:" },
1138{ "&End month:","&Endmonat:" }, 1137{ "&End month:","&Endmonat:" },
1139{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1138{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1140{ "Print todos","Drucke Todos" }, 1139{ "Print todos","Drucke Todos" },
1141{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1140{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1142{ "Include &description of the item","Inclusive Itembeschreibung" }, 1141{ "Include &description of the item","Inclusive Itembeschreibung" },
1143{ "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" },
1144{ "Include &priority of the item","Inclusive Priorität des Items" }, 1143{ "Include &priority of the item","Inclusive Priorität des Items" },
1145{ "Items to Print","Zu druckende Items" }, 1144{ "Items to Print","Zu druckende Items" },
1146{ "&From:","Von:" }, 1145{ "&From:","Von:" },
1147{ "&To:","Bis:" }, 1146{ "&To:","Bis:" },
1148{ "Print &all todo items","Drucke alle Todo Items" }, 1147{ "Print &all todo items","Drucke alle Todo Items" },
1149{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1148{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1150{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1149{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1151{ "Todo List","Todo Liste" }, 1150{ "Todo List","Todo Liste" },
1152{ "&Title:","&Titel:" }, 1151{ "&Title:","&Titel:" },
1153{ "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" },
1154{ "Todo list","Todo Liste" }, 1153{ "Todo list","Todo Liste" },
1155{ "&Print...","Drucke..." }, 1154{ "&Print...","Drucke..." },
1156{ "<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>" },
1157{ "[Unconfigured]","[Unkonfiguriert]" }, 1156{ "[Unconfigured]","[Unkonfiguriert]" },
1158{ "OK","OK" }, 1157{ "OK","OK" },
1159{ "FilterEditor","FilterEditor" }, 1158{ "FilterEditor","FilterEditor" },
1160{ "Include","Inclusive" }, 1159{ "Include","Inclusive" },
1161{ "Exclude","Exclusive" }, 1160{ "Exclude","Exclusive" },
1162{ "Edit Selection...","Editiere Auswahl" }, 1161{ "Edit Selection...","Editiere Auswahl" },
1163{ "recurring events","wiederholende Termine" }, 1162{ "recurring events","wiederholende Termine" },
1164{ "recurr. events","wiederh.Termine" }, 1163{ "recurr. events","wiederh.Termine" },
1165{ "completed to-dos","erledigte Todos" }, 1164{ "completed to-dos","erledigte Todos" },
1166{ "events","Termine" }, 1165{ "events","Termine" },
1167{ "todos","Todos" }, 1166{ "todos","Todos" },
1168{ "journals","Journale" }, 1167{ "journals","Journale" },
1169{ "public","öffentl." }, 1168{ "public","öffentl." },
1170{ "private","privat" }, 1169{ "private","privat" },
1171{ "confidential","vertraul." }, 1170{ "confidential","vertraul." },
1172{ "\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!" },
1173{ "Yesterday","Gestern" }, 1172{ "Yesterday","Gestern" },
1174{ "Day after tomorrow","Übermorgen" }, 1173{ "Day after tomorrow","Übermorgen" },
1175{ "Tomorrow","Morgen" }, 1174{ "Tomorrow","Morgen" },
1176{ "Day before yesterday","Vorgestern" }, 1175{ "Day before yesterday","Vorgestern" },
1177{ "Size %1","Größe %1" }, 1176{ "Size %1","Größe %1" },
1178{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1177{ "New Agendasize: %1","Neue Agendagröße: %1" },
1179{ " (%1 y.)"," (%1 J.)" }, 1178{ " (%1 y.)"," (%1 J.)" },
1180{ "Allday:","Ganztägig:" }, 1179{ "Allday:","Ganztägig:" },
1181{ "compl.todos","erled.Todos" }, 1180{ "compl.todos","erled.Todos" },
1182{ "Day view","Tagesansicht" }, 1181{ "Day view","Tagesansicht" },
1183{ "Next days","Nächste Tage" }, 1182{ "Next days","Nächste Tage" },
1184{ "Next week","Nächste Woche" }, 1183{ "Next week","Nächste Woche" },
1185{ "Next two weeks","Nächste zwei Wochen" }, 1184{ "Next two weeks","Nächste zwei Wochen" },
1186{ "This month","Dieser Monat" }, 1185{ "This month","Dieser Monat" },
1187{ "Journal view","Journal" }, 1186{ "Journal view","Journal" },
1188{ "Display all opened","Zeige alle geöffnet" }, 1187{ "Display all opened","Zeige alle geöffnet" },
1189{ "Display all closed","Zeige alle geschlossen" }, 1188{ "Display all closed","Zeige alle geschlossen" },
1190{ "Display all flat","Zeige alle flach" }, 1189{ "Display all flat","Zeige alle flach" },
1191{ "<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>" },
1192{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1191{ "Default todo done color:","Standard Todo erledigt Farbe" },
1193{ "Select week %1-%2","Wähle Woche %1-%2" }, 1192{ "Select week %1-%2","Wähle Woche %1-%2" },
1194{ "Select Week","Wähle Woche" }, 1193{ "Select Week","Wähle Woche" },
1195{ "Set alarm...","Setze Alarm..." }, 1194{ "Set alarm...","Setze Alarm..." },
1196{ "Set Alarm!","Setze Alarm!" }, 1195{ "Set Alarm!","Setze Alarm!" },
1197{ "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" },
1198{ " and "," und " }, 1197{ " and "," und " },
1199{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1198{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1200{ "Mail to selected","Mail an Ausgewählte" }, 1199{ "Mail to selected","Mail an Ausgewählte" },
1201{ "Mail to all","Mail an Alle" }, 1200{ "Mail to all","Mail an Alle" },
1202{ "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" },
1203{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1202{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1204{ " on"," am" }, 1203{ " on"," am" },
1205{ " completed on "," erledigt am " }, 1204{ " completed on "," erledigt am " },
1206{ "Save as Event template","Speichere als Vorlage" }, 1205{ "Save as Event template","Speichere als Vorlage" },
1207{ "Load Event template","Lade Termin Vorlage" }, 1206{ "Load Event template","Lade Termin Vorlage" },
1208{ "Save as Journal template","Speichere als Journal Vorlage" }, 1207{ "Save as Journal template","Speichere als Journal Vorlage" },
1209{ "Insert Journal template","Füge Journal Vorlage ein" }, 1208{ "Insert Journal template","Füge Journal Vorlage ein" },
1210{ "Sub todos:<br>","Unter-Todos:<br>" }, 1209{ "Sub todos:<br>","Unter-Todos:<br>" },
1211{ "Parent todo:<br>","Über-Todo:<br>" }, 1210{ "Parent todo:<br>","Über-Todo:<br>" },
1212{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1211{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1213{ " completed"," erledigt" }, 1212{ " completed"," erledigt" },
1214{ "(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!" },
1215{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1214{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1216{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1215{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1217{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1216{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1218{ "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?" },
1219{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1218{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1220{ "Error","Fehler" }, 1219{ "Error","Fehler" },
1221{ ""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." },
1222{ "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." },
1223{ "Warning","Warnung" }, 1222{ "Warning","Warnung" },
1224{ "Select week number","Wähle Wochen Nummer" }, 1223{ "Select week number","Wähle Wochen Nummer" },
1225{ "Februar","Februar" }, 1224{ "Februar","Februar" },
1226{ "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" },
1227{ "W","W" }, 1226{ "W","W" },
1228{ "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" },
1229{ "T: %1","T: %1" }, 1228{ "T: %1","T: %1" },
1230{ "Start: ","Start: " }, 1229{ "Start: ","Start: " },
1231{ "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: " },
1232{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1231{ "Password for remote access:","Passwort für fernen Zugriff:" },
1233{ "Remote IP address:","Ferne IP Adresse:" }, 1232{ "Remote IP address:","Ferne IP Adresse:" },
1234{ "Remote port number:","Ferne Port Nummer:" }, 1233{ "Remote port number:","Ferne Port Nummer:" },
1235{ "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." },
1236{ "Remote from: ","Fern von: " }, 1235{ "Remote from: ","Fern von: " },
1237{ "Local from: ","Lokal von: " }, 1236{ "Local from: ","Lokal von: " },
1238{ "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" },
1239{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1238{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1240{ "Write back","Schreibe zurück" }, 1239{ "Write back","Schreibe zurück" },
1241{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1240{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1242{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1241{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1243{ "Received sync request","Sync Anfrage erhalten" }, 1242{ "Received sync request","Sync Anfrage erhalten" },
1244{ "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." },
1245{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1244{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1246{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1245{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1247{ "Sending file...","Sende Datei..." }, 1246{ "Sending file...","Sende Datei..." },
1248{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1247{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1249{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1248{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1250{ "Received %1 bytes","%1 Bytes erhalten" }, 1249{ "Received %1 bytes","%1 Bytes erhalten" },
1251{ "Writing file to disk...","Speichere Datei..." }, 1250{ "Writing file to disk...","Speichere Datei..." },
1252{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1251{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1253{ "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!" },
1254{ "Synchronize!","Synchronisiere!" }, 1253{ "Synchronize!","Synchronisiere!" },
1255{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1254{ "High clock skew!","Großer Uhrzeitunterschied!" },
1256{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1255{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1257{ "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!" },
1258{ "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." },
1259{ "<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>" },
1260{ "List week view","Listenwochenansicht" }, 1259{ "List week view","Listenwochenansicht" },
1261{ "List week","Listenwochenansicht" }, 1260{ "List week","Listenwochenansicht" },
1262{ "Next Week","Nächste Woche" }, 1261{ "Next Week","Nächste Woche" },
1263{ "Previous Week","Vorherige Woche" }, 1262{ "Previous Week","Vorherige Woche" },
1264{ "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." },
1265{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1264{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1266{ "Details","Details" }, 1265{ "Details","Details" },
1267{ "Created time","Erstellt Zeit" }, 1266{ "Created time","Erstellt Zeit" },
1268{ "Last modified time","Geändert Zeit" }, 1267{ "Last modified time","Geändert Zeit" },
1269{ "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:" },
1270{ "View Options","Anzeige Optionen" }, 1269{ "View Options","Anzeige Optionen" },
1271{ "<b>Created: ","<b>Erstellt am: " }, 1270{ "<b>Created: ","<b>Erstellt am: " },
1272{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1271{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1273{ "Journal: ","Journal: " }, 1272{ "Journal: ","Journal: " },
1274{ "yearly","jährlich" }, 1273{ "yearly","jährlich" },
1275{ "(%1) ","%1-" }, 1274{ "(%1) ","%1-" },
1276{ "<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" },
1277{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1276{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1278{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1277{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1279{ "Summary/Loc.","Titel/Ort" }, 1278{ "Summary/Loc.","Titel/Ort" },
1280{ "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." },
1281{ "Week Number","Wochennummer" }, 1280{ "Week Number","Wochennummer" },
1282{ "Import","Importiere" }, 1281{ "Import","Importiere" },
1283{ "Export","Exportiere" }, 1282{ "Export","Exportiere" },
1284{ "Beam","Beame" }, 1283{ "Beam","Beame" },
1285{ "Export","Exportiere" }, 1284{ "Export","Exportiere" },
1286{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1285{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1287{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1286{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1288{ "Journal/Details...","Journale/Details..." }, 1287{ "Journal/Details...","Journale/Details..." },
1289{ "Agenda View","Agenda Ansicht" }, 1288{ "Agenda View","Agenda Ansicht" },
1290{ "Show current time","Zeige aktuelle Zeit" }, 1289{ "Show current time","Zeige aktuelle Zeit" },
1291{ "Edit new item","Bearbeite neuen Eintrag" }, 1290{ "Edit new item","Bearbeite neuen Eintrag" },
1292{ "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" },
1293{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1292{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1294{ "%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)" },
1295{ "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" },
1296{ "%1 days\n","%1 Tagen\n" }, 1295{ "%1 days\n","%1 Tagen\n" },
1297{ "1 day\n","1 Tag\n" }, 1296{ "1 day\n","1 Tag\n" },
1298{ "%1 hours\n","%1 Stunden\n" }, 1297{ "%1 hours\n","%1 Stunden\n" },
1299{ "1 hour\n","1 Stunde\n" }, 1298{ "1 hour\n","1 Stunde\n" },
1300{ "%1 minutes\n","%1 Minuten\n" }, 1299{ "%1 minutes\n","%1 Minuten\n" },
1301{ "1 minute\n","1 Minute\n" }, 1300{ "1 minute\n","1 Minute\n" },
1302{ "Only one toolbar","Nur eine Toolbar" }, 1301{ "Only one toolbar","Nur eine Toolbar" },
1303{ "Print","Drucke" }, 1302{ "Print","Drucke" },
1304{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1303{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1305{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1304{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1306{ "\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? " },
1307{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1306{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1308{ "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" },
1309{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1308{ "KO/Pi Printout","KO/Pi Ausdruck" },
1310{ "Print unscaled","Drucke unskaliert" }, 1309{ "Print unscaled","Drucke unskaliert" },
1311{ "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." },
1312{ "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." },
1313{ "Printout Mode","Druck Modus" }, 1312{ "Printout Mode","Druck Modus" },
1314{ "Filter menu icon","Filtermenu Icon" }, 1313{ "Filter menu icon","Filtermenu Icon" },
1315{ "<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" },
1316{ "<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" },
1317{ "%1d","%1t" }, 1316{ "%1d","%1t" },
1318{ "%1h","%1std" }, 1317{ "%1h","%1std" },
1319{ "%1min","%1min" }, 1318{ "%1min","%1min" },
1320{ "( %1 before )","( %1 vorher )" }, 1319{ "( %1 before )","( %1 vorher )" },
1321{ "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!" },
1322{ "\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" },
1323{ "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." },
1324{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1323{ "Show Sync Events","Zeige Sync-Ereignisse" },
1325{ "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" },
1326{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1325{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1327{ " on "," am " }, 1326{ " on "," am " },
1328{ "On: ","Am: " }, 1327{ "On: ","Am: " },
1329{ "<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>" },
1330{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1329{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1331{ "Color for running todos:","Farbe für laufende Todos:" }, 1330{ "Color for running todos:","Farbe für laufende Todos:" },
1332{ "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?" },
1333{ "Todo is started","Todo ist gestartet" }, 1332{ "Todo is started","Todo ist gestartet" },
1334{ "Stop todo","Stoppe Todo" }, 1333{ "Stop todo","Stoppe Todo" },
1335{ "Todo is stopped","Todo ist gestoppt" }, 1334{ "Todo is stopped","Todo ist gestoppt" },
1336{ "Start todo","Starte Todo" }, 1335{ "Start todo","Starte Todo" },
1337{ "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?" },
1338{ "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?" },
1339{ "Todo has subtodos","Todo hat Untertodos" }, 1338{ "Todo has subtodos","Todo hat Untertodos" },
1340{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1339{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1341{ "Colors","Farben" }, 1340{ "Colors","Farben" },
1342{ "Click on new parent item","Klicke auf neues Übertodo" }, 1341{ "Click on new parent item","Klicke auf neues Übertodo" },
1343{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1342{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1344{ "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" },
1345{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1344{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1346{ "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!)" },
1347{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1346{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1348{ "times","Zeiten" }, 1347{ "times","Zeiten" },
1349{ "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?" },
1350{ "Backup enabled","Backup angeschaltet" }, 1349{ "Backup enabled","Backup angeschaltet" },
1351{ "Use standard backup dir","Standard Backupverzeichnis" }, 1350{ "Use standard backup dir","Standard Backupverzeichnis" },
1352{ "Number of Backups:","Anzahl der Backups" }, 1351{ "Number of Backups:","Anzahl der Backups" },
1353{ "Make backup every ","Mache ein Backup alle " }, 1352{ "Make backup every ","Mache ein Backup alle " },
1354{ " days"," Tage" }, 1353{ " days"," Tage" },
1355{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." }, 1354{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." },
1356{ "Backup Failed!","Backup Problem!" }, 1355{ "Backup Failed!","Backup Problem!" },
1357{ "Try again now","Versuche jetzt nochmal" }, 1356{ "Try again now","Versuche jetzt nochmal" },
1358{ "Try again later","Versuche später nochmal" }, 1357{ "Try again later","Versuche später nochmal" },
1359{ "Try again tomorrow","Versuche morgen nochmal" }, 1358{ "Try again tomorrow","Versuche morgen nochmal" },
1360{ "Disable backup","Schalte Backup ab" }, 1359{ "Disable backup","Schalte Backup ab" },
1361{ "<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>" },
1362{ "<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>" },
1363{ "Choose action","Wähle Aktion" }, 1362{ "Choose action","Wähle Aktion" },
1364{ "Comment for todo:","Kommentar zum Todo:" }, 1363{ "Comment for todo:","Kommentar zum Todo:" },
1365{ "Stop+note","Stop+Notiz" }, 1364{ "Stop+note","Stop+Notiz" },
1366{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1365{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1367{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1366{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1368{ "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:" },
1369{ "Print complete list...","Drucke komplette Liste..." }, 1368{ "Print complete list...","Drucke komplette Liste..." },
1370{ "Hide all selected","Verstecke Ausgewählte" }, 1369{ "Hide all selected","Verstecke Ausgewählte" },
1371{ "Add items","hinzufügen" }, 1370{ "Add items","hinzufügen" },
1372{ "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?" },
1373{ "Print List View...","Drucke Listenansicht..." }, 1372{ "Print List View...","Drucke Listenansicht..." },
1374{ "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." },
1375{ "Configure KO/Pi...","Konfiguriere KO/Pi..." }, 1374{ "Configure KO/Pi...","Konfiguriere KO/Pi..." },
1376{ "Global Settings...","Globale Einstellungen..." }, 1375{ "Global Settings...","Globale Einstellungen..." },
1377{ "<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" },
1378{ "(disabled)","(abgeschaltet)" }, 1377{ "(disabled)","(abgeschaltet)" },
1379{ "New Calendar","Neuer Kalender" }, 1378{ "New Calendar","Neuer Kalender" },
1380{ "Calendar","Kalender" }, 1379{ "Calendar","Kalender" },
1381{ "Filter selector","Filterauswahl" }, 1380{ "Filter selector","Filterauswahl" },
1382{ "Filtermenu","Filtermenu" }, 1381{ "Filtermenu","Filtermenu" },
1383{ "Toggle Fullscreen","Vollbild umschalten" }, 1382{ "Toggle Fullscreen","Vollbild umschalten" },
1384{ "Toggle Resource View","Resourcenansicht umschalten" }, 1383{ "Toggle Resource View","Resourcenansicht umschalten" },
1385{ "Storage HowTo...","Speicherort HowTo..." }, 1384{ "Storage HowTo...","Speicherort HowTo..." },
1386{ "Timetracking HowTo...","Timetracking HowTo..." }, 1385{ "Timetracking HowTo...","Timetracking HowTo..." },
1387{ "Juni","Juni" }, 1386{ "Juni","Juni" },
1388{ "Juli","Juli" }, 1387{ "Juli","Juli" },
1389{ "ToDo:","ToDo:" }, 1388{ "ToDo:","ToDo:" },
1390{ "Set Calendar","Setze Kalender" }, 1389{ "Set Calendar","Setze Kalender" },
1391{ "Todo: %1","Todo: %1" }, 1390{ "Todo: %1","Todo: %1" },
1392{ ": (Prio ",": (Prio " }, 1391{ ": (Prio ",": (Prio " },
1393{ "Todos","Todos" }, 1392{ "Todos","Todos" },
1394{ "Todo Viewer","Todo Anzeige" }, 1393{ "Todo Viewer","Todo Anzeige" },
1395{ "Todo ","Todo " }, 1394{ "Todo ","Todo " },
1396{ " Calendar \n Resource "," Kalender \n Resource " }, 1395{ " Calendar \n Resource "," Kalender \n Resource " },
1397{ " Color "," Farbe " }, 1396{ " Color "," Farbe " },
1398{ "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!)" },
1399{ "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>" },
1400{ "Add new Calendar","Füge Kalender hinzu" }, 1399{ "Add new Calendar","Füge Kalender hinzu" },
1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1400{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1402{ "<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>" },
1403{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1404{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1405{ "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." },
1406{ "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>" },
1407{ "Global application font for all apps:","Globale Schriftart:" }, 1406{ "Global application font for all apps:","Globale Schriftart:" },
1408{ "Application Font","Applikationsschriftart" }, 1407{ "Application Font","Applikationsschriftart" },
1409{ "Kx/Pi","Kx/Pi" }, 1408{ "Kx/Pi","Kx/Pi" },
1410{ "Backup","Backup" }, 1409{ "Backup","Backup" },
1411{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1412{ "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!" },
1413{ "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!" },
1414{ "Choose Color","Wähle Farbe" }, 1413{ "Choose Color","Wähle Farbe" },
1415{ " OK "," OK " }, 1414{ " OK "," OK " },
1416{ " Cancel "," Abbrechen " }, 1415{ " Cancel "," Abbrechen " },
1417{ "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" },
1418{ "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" },
1419{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1418{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1420{ "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" },
1421{ "<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>" },
1422{ "%1\nis running!","%1\nist am Laufen!" }, 1421{ "%1\nis running!","%1\nist am Laufen!" },
1423{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1422{ "Additional Comment:","Zusätzlicher Kommentar:" },
1424{ "Stop and save","Stopp und Speichern" }, 1423{ "Stop and save","Stopp und Speichern" },
1425{ "Continue running","Weiter laufen lassen" }, 1424{ "Continue running","Weiter laufen lassen" },
1426{ "Stop - do not save","Stopp - nicht Speichern" }, 1425{ "Stop - do not save","Stopp - nicht Speichern" },
1427{ "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?" },
1428{ "Time mismatch!","Zeiten stimmen nicht!" }, 1427{ "Time mismatch!","Zeiten stimmen nicht!" },
1429{ "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!" },
1430{ "Yes, stop todo","Ja, stoppe Todo" }, 1429{ "Yes, stop todo","Ja, stoppe Todo" },
1431{ "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!" },
1432{ "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!" },
1433{ "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." },
1434{ "Spouse","Ehegatte" }, 1433{ "Spouse","Ehegatte" },
1435{ "Notes","Notizen" }, 1434{ "Notes","Notizen" },
1436{ "Messanger","Messanger" }, 1435{ "Messanger","Messanger" },
1437{ "Assistant","Assistent" }, 1436{ "Assistant","Assistent" },
1438{ "Manager","Manager" }, 1437{ "Manager","Manager" },
1439{ "Secrecy","Sichtbar" }, 1438{ "Secrecy","Sichtbar" },
1440{ "male","männlich" }, 1439{ "male","männlich" },
1441{ "female","weiblich" }, 1440{ "female","weiblich" },
1442{ "Hide!","Verbergen!" }, 1441{ "Hide!","Verbergen!" },
1443{ "Show!","Anzeigen!" }, 1442{ "Show!","Anzeigen!" },
1444{ "Details","Details" }, 1443{ "Details","Details" },
1445{ "Profession","Beruf" }, 1444{ "Profession","Beruf" },
1446{ "Children","Kinder" }, 1445{ "Children","Kinder" },
1447{ "Department","Abteilung" }, 1446{ "Department","Abteilung" },
1448{ "Backup cancelled","Backup abgebrochen" }, 1447{ "Backup cancelled","Backup abgebrochen" },
1449{ "Backup globally disabled","Backup global abgeschaltet" }, 1448{ "Backup globally disabled","Backup global abgeschaltet" },
1450{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1449{ "Backup succesfully finished","Backup erfolgreich beendet" },
1451{ "(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!)" },
1452{ "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" },
1453{ "Birthdays","Geburtstage" }, 1452{ "Birthdays","Geburtstage" },
1454{ "KO/Pi import information!","KO/Pi Import Information!" }, 1453{ "KO/Pi import information!","KO/Pi Import Information!" },
1455{ "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" },
1456{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1457{ "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?"" },
1458{ "Reload","Neu laden" }, 1457{ "Reload","Neu laden" },
1459{ "Timezone settings","Zeitzoneneinstellung" }, 1458{ "Timezone settings","Zeitzoneneinstellung" },
1460{ "Title: ","Titel: " }, 1459{ "Title: ","Titel: " },
1461{ "Journal from: ","Journal vom: " }, 1460{ "Journal from: ","Journal vom: " },
1462{ "Journal: %1 from ","Journal: %1 vom " }, 1461{ "Journal: %1 from ","Journal: %1 vom " },
1463{ "<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>" },
1464{ "Selected Item","Ausgewähltes Item" }, 1463{ "Selected Item","Ausgewähltes Item" },
1465{ "Select Date...","Wähle Datum..." }, 1464{ "Select Date...","Wähle Datum..." },
1466{ "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:" },
1467{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1466{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1468{ "Edit category list...","Ändere Kategorieliste..." }, 1467{ "Edit category list...","Ändere Kategorieliste..." },
1469{ "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!" },
1470{ "Filepath: ","Dateipfad: " }, 1469{ "Filepath: ","Dateipfad: " },
1471{ "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!" },
1472{ "<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!" },
1473{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1474{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1475{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1476{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1475{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1477{ "Alarm Options","Alarm Einstellungen" }, 1476{ "Alarm Options","Alarm Einstellungen" },
1478{ "Delete selected...","Lösche Ausgewählte..." }, 1477{ "Delete selected...","Lösche Ausgewählte..." },
1479{ "None","Nichts" }, 1478{ "None","Nichts" },
1480{ "Selection","Auswahl" }, 1479{ "Selection","Auswahl" },
1481{ "Set categories","Setze Kategorien" }, 1480{ "Set categories","Setze Kategorien" },
1482{ "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!" },
1483{ "Reset","Neu setzen" }, 1482{ "Reset","Neu setzen" },
1484{ "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)?" },
1485{ "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?" },
1486{ "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!" },
1487{ "\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" },
1488{ "\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" },
1489{ "Edit","Edit" }, 1488{ "Edit","Edit" },
1490{ "Last Modified","Zuletzt geändert" }, 1489{ "Last Modified","Zuletzt geändert" },
1491{ "Journal viewer","Journal Anzeige" }, 1490{ "Journal viewer","Journal Anzeige" },
1492{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1493{ "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>." },
1494{ "Hide Completed","Verstecke erledigte Todos" }, 1493{ "Hide Completed","Verstecke erledigte Todos" },
1495{ "Show not Running","Zeige nicht Laufende" }, 1494{ "Show not Running","Zeige nicht Laufende" },
1496{ "Click to add new Todo","Klick für neues Todo!" }, 1495{ "Click to add new Todo","Klick für neues Todo!" },
1497{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1496{ "Show next conflict for","Zeige nächsten Konflikt für" },
1498{ "All events","Alle Termine" }, 1497{ "All events","Alle Termine" },
1499{ "Allday events","Ganztagestermine" }, 1498{ "Allday events","Ganztagestermine" },
1500{ "Events with time","Termine mit Zeit" }, 1499{ "Events with time","Termine mit Zeit" },
1501{ "No conflict found","Kein Konflikt gefunden" }, 1500{ "No conflict found","Kein Konflikt gefunden" },
1502{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1503{ "<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 " },
1504{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1505{ "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" },
1506{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, 1505{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" },
1507{ "Show date","Zeige Datum" }, 1506{ "Show date","Zeige Datum" },
1508{ "No problem!","Null Problemo!" }, 1507{ "No problem!","Null Problemo!" },
1509{ "","" }, 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" },
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" },
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" },
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" },
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" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." },
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?" },
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." },
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..." },
1527{ "Sending back file ...","Sende Datei zurück..." },
1510{ "","" }, 1528{ "","" },
1511{ "","" }, 1529{ "","" },
1512{ "","" }, 1530{ "","" },
1513{ "","" }, 1531{ "","" },
1514{ "","" }, 1532{ "","" },
1515{ "","" }, 1533{ "","" },
1516{ "","" }, 1534{ "","" },
1517{ "","" }, 1535{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 68d1bc6..940ea91 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,4797 +1,4797 @@
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 ( 0, 364, 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 while ( test ) { 680 while ( test ) {
681 skip = false; 681 skip = false;
682 if ( !all ) skip = ( allday != test->doesFloat() ); 682 if ( !all ) skip = ( allday != test->doesFloat() );
683 if ( !skip ) { 683 if ( !skip ) {
684 Event * test2 = testlist2.first(); 684 Event * test2 = testlist2.first();
685 while ( test2 ) { 685 while ( test2 ) {
686 skip = false; 686 skip = false;
687 if ( !all ) skip = ( allday != test2->doesFloat() ); 687 if ( !all ) skip = ( allday != test2->doesFloat() );
688 if ( !skip ) { 688 if ( !skip ) {
689 if ( !test2->isTagged() ) { 689 if ( !test2->isTagged() ) {
690 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 690 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
691 //qDebug("overlap "); 691 //qDebug("overlap ");
692 if ( ! found ) { 692 if ( ! found ) {
693 if ( retVal >= startDT ) { 693 if ( retVal >= startDT ) {
694 conflict = retVal; 694 conflict = retVal;
695 cE = test; 695 cE = test;
696 cE2 = test2; 696 cE2 = test2;
697 found = true; 697 found = true;
698 } 698 }
699 } else { 699 } else {
700 if ( retVal >= startDT && retVal < conflict ) { 700 if ( retVal >= startDT && retVal < conflict ) {
701 conflict = retVal; 701 conflict = retVal;
702 cE = test; 702 cE = test;
703 cE2 = test2; 703 cE2 = test2;
704 } 704 }
705 } 705 }
706 } 706 }
707 } 707 }
708 } 708 }
709 test2 = testlist2.next(); 709 test2 = testlist2.next();
710 } 710 }
711 } 711 }
712 test->setTagged( true ); 712 test->setTagged( true );
713 test = testlist.next(); 713 test = testlist.next();
714 } 714 }
715 if ( found ) { 715 if ( found ) {
716 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 716 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
717 mViewManager->showDayView(); 717 mViewManager->showDayView();
718 mNavigator->slotDaySelect( conflict.date() ); 718 mNavigator->slotDaySelect( conflict.date() );
719 int hour = conflict.time().hour(); 719 int hour = conflict.time().hour();
720 mViewManager->agendaView()->setStartHour( hour ); 720 mViewManager->agendaView()->setStartHour( hour );
721 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 721 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
722 return; 722 return;
723 } 723 }
724 724
725 topLevelWidget()->setCaption( i18n("No conflict found") ); 725 topLevelWidget()->setCaption( i18n("No conflict found") );
726 qDebug("No conflict found "); 726 qDebug("No conflict found ");
727 return; 727 return;
728} 728}
729 729
730void CalendarView::conflictAll() 730void CalendarView::conflictAll()
731{ 731{
732 nextConflict ( true, true ); 732 nextConflict ( true, true );
733} 733}
734void CalendarView::conflictAllday() 734void CalendarView::conflictAllday()
735{ 735{
736 nextConflict ( false, true ); 736 nextConflict ( false, true );
737} 737}
738void CalendarView::conflictNotAll() 738void CalendarView::conflictNotAll()
739{ 739{
740 nextConflict ( false, false ); 740 nextConflict ( false, false );
741} 741}
742 742
743void CalendarView::setCalReadOnly( int id, bool readO ) 743void CalendarView::setCalReadOnly( int id, bool readO )
744{ 744{
745 if ( readO ) { 745 if ( readO ) {
746 emit save(); 746 emit save();
747 } 747 }
748 mCalendar->setReadOnly( id, readO ); 748 mCalendar->setReadOnly( id, readO );
749} 749}
750void CalendarView::setScrollBarStep(int val ) 750void CalendarView::setScrollBarStep(int val )
751{ 751{
752#ifdef DESKTOP_VERSION 752#ifdef DESKTOP_VERSION
753 mDateScrollBar->setLineStep ( val ); 753 mDateScrollBar->setLineStep ( val );
754#endif 754#endif
755} 755}
756void CalendarView::scrollBarValue(int val ) 756void CalendarView::scrollBarValue(int val )
757{ 757{
758#ifdef DESKTOP_VERSION 758#ifdef DESKTOP_VERSION
759 if ( QApplication::desktop()->width() < 800 ) return; 759 if ( QApplication::desktop()->width() < 800 ) return;
760 static bool block = false; 760 static bool block = false;
761 if ( block ) return; 761 if ( block ) return;
762 block = true; 762 block = true;
763 int count = mNavigator->selectedDates().count(); 763 int count = mNavigator->selectedDates().count();
764 int day = mNavigator->selectedDates().first().dayOfYear(); 764 int day = mNavigator->selectedDates().first().dayOfYear();
765 int stepdays = val; 765 int stepdays = val;
766 if ( mDateScrollBar->lineStep () <= count ) { 766 if ( mDateScrollBar->lineStep () <= count ) {
767 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 767 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
768 //qDebug("VAL %d ",val ); 768 //qDebug("VAL %d ",val );
769 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 769 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
770 stepdays = day+stepdays; 770 stepdays = day+stepdays;
771 if ( stepdays < 0 ) stepdays = 0; 771 if ( stepdays < 0 ) stepdays = 0;
772 } 772 }
773 if ( stepdays == day ) { 773 if ( stepdays == day ) {
774 block = false; 774 block = false;
775 return; 775 return;
776 } 776 }
777 int year = mNavigator->selectedDates().first().year(); 777 int year = mNavigator->selectedDates().first().year();
778 QDate d ( year,1,1 ); 778 QDate d ( year,1,1 );
779 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 779 mNavigator->selectDates( d.addDays( stepdays-1) , count );
780 block = false; 780 block = false;
781#endif 781#endif
782 782
783} 783}
784void CalendarView::updateView(const QDate &start, const QDate &end) 784void CalendarView::updateView(const QDate &start, const QDate &end)
785{ 785{
786#ifdef DESKTOP_VERSION 786#ifdef DESKTOP_VERSION
787 if ( ! mDateScrollBar->draggingSlider () ) { 787 if ( ! mDateScrollBar->draggingSlider () ) {
788 int dof = start.dayOfYear(); 788 int dof = start.dayOfYear();
789 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 789 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
790 if ( dof != mDateScrollBar->value() ) { 790 if ( dof != mDateScrollBar->value() ) {
791 mDateScrollBar->blockSignals( true ); 791 mDateScrollBar->blockSignals( true );
792 mDateScrollBar->setValue( start.dayOfYear()); 792 mDateScrollBar->setValue( start.dayOfYear());
793 mDateScrollBar->blockSignals( false ); 793 mDateScrollBar->blockSignals( false );
794 } 794 }
795 } 795 }
796#endif 796#endif
797 mTodoList->updateView(); 797 mTodoList->updateView();
798 mViewManager->updateView(start, end); 798 mViewManager->updateView(start, end);
799 //mDateNavigator->updateView(); 799 //mDateNavigator->updateView();
800} 800}
801 801
802 802
803 803
804void CalendarView::checkFiles() 804void CalendarView::checkFiles()
805{ 805{
806 QString message; 806 QString message;
807 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 807 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
808 KopiCalendarFile * cal = calendars.first(); 808 KopiCalendarFile * cal = calendars.first();
809 while ( cal ) { 809 while ( cal ) {
810 if ( cal->mErrorOnLoad ) { 810 if ( cal->mErrorOnLoad ) {
811 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 811 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
812 } 812 }
813 cal = calendars.next(); 813 cal = calendars.next();
814 } 814 }
815 if ( !message.isEmpty() ) { 815 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); 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);
817 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 817 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
818 } 818 }
819 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 819 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
820} 820}
821void CalendarView::checkAlarms() 821void CalendarView::checkAlarms()
822{ 822{
823 823
824 824
825 KConfig *config = KOGlobals::config(); 825 KConfig *config = KOGlobals::config();
826 config->setGroup( "AppRun" ); 826 config->setGroup( "AppRun" );
827 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 827 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
828 int daysto = dt.daysTo( QDate::currentDate() ); 828 int daysto = dt.daysTo( QDate::currentDate() );
829 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 829 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
830 dt = dt.addDays( days ); 830 dt = dt.addDays( days );
831 int secto = dt.secsTo( QDateTime::currentDateTime() ); 831 int secto = dt.secsTo( QDateTime::currentDateTime() );
832 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 832 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
833 //qDebug("KO: Reading program stop %d ", secs); 833 //qDebug("KO: Reading program stop %d ", secs);
834 //secs -= ( 3600 * 24*3 ); // debug only 834 //secs -= ( 3600 * 24*3 ); // debug only
835 QDateTime latest = dt.addSecs ( secs ); 835 QDateTime latest = dt.addSecs ( secs );
836 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 836 qDebug("KO: Last termination on %s ", latest.toString().latin1());
837 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 837 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
838 QPtrList<Incidence> el = mCalendar->rawIncidences(); 838 QPtrList<Incidence> el = mCalendar->rawIncidences();
839 QPtrList<Incidence> al; 839 QPtrList<Incidence> al;
840 Incidence* inL = el.first(); 840 Incidence* inL = el.first();
841 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 841 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
842 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 842 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
843 while ( inL ) { 843 while ( inL ) {
844 bool ok = false; 844 bool ok = false;
845 int offset = 0; 845 int offset = 0;
846 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 846 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
847 if ( ok ) { 847 if ( ok ) {
848 //qDebug("OK %s",next.toString().latin1()); 848 //qDebug("OK %s",next.toString().latin1());
849 if ( next < cur ) { 849 if ( next < cur ) {
850 al.append( inL ); 850 al.append( inL );
851 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 851 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
852 } 852 }
853 } 853 }
854 inL = el.next(); 854 inL = el.next();
855 } 855 }
856 if ( al.count() ) { 856 if ( al.count() ) {
857 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 857 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
858 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 858 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
859 QVBoxLayout* lay = new QVBoxLayout( dia ); 859 QVBoxLayout* lay = new QVBoxLayout( dia );
860 lay->setSpacing( 0 ); 860 lay->setSpacing( 0 );
861 lay->setMargin( 0 ); 861 lay->setMargin( 0 );
862 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 862 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
863 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 863 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
864 lay->addWidget( matb ); 864 lay->addWidget( matb );
865 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 865 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
866 int wid = 210; 866 int wid = 210;
867 int x = QApplication::desktop()->width() - wid - 7; 867 int x = QApplication::desktop()->width() - wid - 7;
868 int y = QApplication::desktop()->height() - wid - 70; 868 int y = QApplication::desktop()->height() - wid - 70;
869 dia->setGeometry ( x,y,wid,wid); 869 dia->setGeometry ( x,y,wid,wid);
870 } else { 870 } else {
871 int si = 220; 871 int si = 220;
872 if ( QApplication::desktop()->width() > 470 ) 872 if ( QApplication::desktop()->width() > 470 )
873 si = 400; 873 si = 400;
874 dia->resize(si,si/2); 874 dia->resize(si,si/2);
875 } 875 }
876 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 876 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
877 dia->show(); 877 dia->show();
878 878
879 } 879 }
880} 880}
881void CalendarView::showDay( QDate d ) 881void CalendarView::showDay( QDate d )
882{ 882{
883 dateNavigator()->blockSignals( true ); 883 dateNavigator()->blockSignals( true );
884 dateNavigator()->selectDate( d ); 884 dateNavigator()->selectDate( d );
885 dateNavigator()->blockSignals( false ); 885 dateNavigator()->blockSignals( false );
886 mViewManager->showDayView(); 886 mViewManager->showDayView();
887 //dateNavigator()->selectDate( d ); 887 //dateNavigator()->selectDate( d );
888} 888}
889void CalendarView::timerAlarm() 889void CalendarView::timerAlarm()
890{ 890{
891 //qDebug("CalendarView::timerAlarm() "); 891 //qDebug("CalendarView::timerAlarm() ");
892 computeAlarm(mAlarmNotification ); 892 computeAlarm(mAlarmNotification );
893} 893}
894 894
895void CalendarView::suspendAlarm() 895void CalendarView::suspendAlarm()
896{ 896{
897 //qDebug(" CalendarView::suspendAlarm() "); 897 //qDebug(" CalendarView::suspendAlarm() ");
898 computeAlarm(mSuspendAlarmNotification ); 898 computeAlarm(mSuspendAlarmNotification );
899 899
900} 900}
901 901
902void CalendarView::startAlarm( QString mess , QString filename) 902void CalendarView::startAlarm( QString mess , QString filename)
903{ 903{
904 904
905 topLevelWidget()->showNormal(); 905 topLevelWidget()->showNormal();
906 topLevelWidget()->setActiveWindow(); 906 topLevelWidget()->setActiveWindow();
907 topLevelWidget()->raise(); 907 topLevelWidget()->raise();
908 908
909 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 909 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
910 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 910 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
911 911
912} 912}
913 913
914void CalendarView::checkNextTimerAlarm() 914void CalendarView::checkNextTimerAlarm()
915{ 915{
916 mCalendar->checkAlarmForIncidence( 0, true ); 916 mCalendar->checkAlarmForIncidence( 0, true );
917} 917}
918 918
919void CalendarView::computeAlarm( QString msg ) 919void CalendarView::computeAlarm( QString msg )
920{ 920{
921 921
922 QString mess = msg; 922 QString mess = msg;
923 QString mAlarmMessage = mess.mid( 9 ); 923 QString mAlarmMessage = mess.mid( 9 );
924 QString filename = MainWindow::resourcePath(); 924 QString filename = MainWindow::resourcePath();
925 filename += "koalarm.wav"; 925 filename += "koalarm.wav";
926 QString tempfilename; 926 QString tempfilename;
927 if ( mess.left( 13 ) == "suspend_alarm") { 927 if ( mess.left( 13 ) == "suspend_alarm") {
928 bool error = false; 928 bool error = false;
929 int len = mess.mid( 13 ).find("+++"); 929 int len = mess.mid( 13 ).find("+++");
930 if ( len < 2 ) 930 if ( len < 2 )
931 error = true; 931 error = true;
932 else { 932 else {
933 tempfilename = mess.mid( 13, len ); 933 tempfilename = mess.mid( 13, len );
934 if ( !QFile::exists( tempfilename ) ) 934 if ( !QFile::exists( tempfilename ) )
935 error = true; 935 error = true;
936 } 936 }
937 if ( ! error ) { 937 if ( ! error ) {
938 filename = tempfilename; 938 filename = tempfilename;
939 } 939 }
940 mAlarmMessage = mess.mid( 13+len+3 ); 940 mAlarmMessage = mess.mid( 13+len+3 );
941 //qDebug("suspend file %s ",tempfilename.latin1() ); 941 //qDebug("suspend file %s ",tempfilename.latin1() );
942 startAlarm( mAlarmMessage, filename); 942 startAlarm( mAlarmMessage, filename);
943 return; 943 return;
944 } 944 }
945 if ( mess.left( 11 ) == "timer_alarm") { 945 if ( mess.left( 11 ) == "timer_alarm") {
946 //mTimerTime = 0; 946 //mTimerTime = 0;
947 startAlarm( mess.mid( 11 ), filename ); 947 startAlarm( mess.mid( 11 ), filename );
948 return; 948 return;
949 } 949 }
950 if ( mess.left( 10 ) == "proc_alarm") { 950 if ( mess.left( 10 ) == "proc_alarm") {
951 bool error = false; 951 bool error = false;
952 int len = mess.mid( 10 ).find("+++"); 952 int len = mess.mid( 10 ).find("+++");
953 if ( len < 2 ) 953 if ( len < 2 )
954 error = true; 954 error = true;
955 else { 955 else {
956 tempfilename = mess.mid( 10, len ); 956 tempfilename = mess.mid( 10, len );
957 if ( !QFile::exists( tempfilename ) ) 957 if ( !QFile::exists( tempfilename ) )
958 error = true; 958 error = true;
959 } 959 }
960 if ( error ) { 960 if ( error ) {
961 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 961 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
962 mAlarmMessage += mess.mid( 10+len+3+9 ); 962 mAlarmMessage += mess.mid( 10+len+3+9 );
963 } else { 963 } else {
964 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 964 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
965 //qDebug("-----system command %s ",tempfilename.latin1() ); 965 //qDebug("-----system command %s ",tempfilename.latin1() );
966#ifndef _WIN32_ 966#ifndef _WIN32_
967 if ( vfork () == 0 ) { 967 if ( vfork () == 0 ) {
968 execl ( tempfilename.latin1(), 0 ); 968 execl ( tempfilename.latin1(), 0 );
969 return; 969 return;
970 } 970 }
971#else 971#else
972 QProcess* p = new QProcess(); 972 QProcess* p = new QProcess();
973 p->addArgument( tempfilename.latin1() ); 973 p->addArgument( tempfilename.latin1() );
974 p->start(); 974 p->start();
975 return; 975 return;
976#endif 976#endif
977 977
978 return; 978 return;
979 } 979 }
980 980
981 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 981 //qDebug("+++++++system command %s ",tempfilename.latin1() );
982 } 982 }
983 if ( mess.left( 11 ) == "audio_alarm") { 983 if ( mess.left( 11 ) == "audio_alarm") {
984 bool error = false; 984 bool error = false;
985 int len = mess.mid( 11 ).find("+++"); 985 int len = mess.mid( 11 ).find("+++");
986 if ( len < 2 ) 986 if ( len < 2 )
987 error = true; 987 error = true;
988 else { 988 else {
989 tempfilename = mess.mid( 11, len ); 989 tempfilename = mess.mid( 11, len );
990 if ( !QFile::exists( tempfilename ) ) 990 if ( !QFile::exists( tempfilename ) )
991 error = true; 991 error = true;
992 } 992 }
993 if ( ! error ) { 993 if ( ! error ) {
994 filename = tempfilename; 994 filename = tempfilename;
995 } 995 }
996 mAlarmMessage = mess.mid( 11+len+3+9 ); 996 mAlarmMessage = mess.mid( 11+len+3+9 );
997 //qDebug("audio file command %s ",tempfilename.latin1() ); 997 //qDebug("audio file command %s ",tempfilename.latin1() );
998 } 998 }
999 if ( mess.left( 9 ) == "cal_alarm") { 999 if ( mess.left( 9 ) == "cal_alarm") {
1000 mAlarmMessage = mess.mid( 9 ) ; 1000 mAlarmMessage = mess.mid( 9 ) ;
1001 } 1001 }
1002 1002
1003 startAlarm( mAlarmMessage, filename ); 1003 startAlarm( mAlarmMessage, filename );
1004 1004
1005 1005
1006} 1006}
1007 1007
1008void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1008void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1009{ 1009{
1010 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1010 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1011 1011
1012 mSuspendAlarmNotification = noti; 1012 mSuspendAlarmNotification = noti;
1013 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1013 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1014 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1014 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1015 mSuspendTimer->start( ms , true ); 1015 mSuspendTimer->start( ms , true );
1016 1016
1017} 1017}
1018 1018
1019void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1019void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1020{ 1020{
1021 mNextAlarmDateTime = qdt; 1021 mNextAlarmDateTime = qdt;
1022 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1022 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1023 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1023 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1024#ifndef DESKTOP_VERSION 1024#ifndef DESKTOP_VERSION
1025 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1025 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1026#endif 1026#endif
1027 return; 1027 return;
1028 } 1028 }
1029 int maxSec; 1029 int maxSec;
1030 //maxSec = 5; //testing only 1030 //maxSec = 5; //testing only
1031 maxSec = 86400+3600; // one day+1hour 1031 maxSec = 86400+3600; // one day+1hour
1032 mAlarmNotification = noti; 1032 mAlarmNotification = noti;
1033 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1033 int sec = QDateTime::currentDateTime().secsTo( qdt );
1034 if ( sec > maxSec ) { 1034 if ( sec > maxSec ) {
1035 mRecheckAlarmTimer->start( maxSec * 1000 ); 1035 mRecheckAlarmTimer->start( maxSec * 1000 );
1036 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1036 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1037 return; 1037 return;
1038 } else { 1038 } else {
1039 mRecheckAlarmTimer->stop(); 1039 mRecheckAlarmTimer->stop();
1040 } 1040 }
1041 //qDebug("Alarm timer started with secs: %d ", sec); 1041 //qDebug("Alarm timer started with secs: %d ", sec);
1042 mAlarmTimer->start( sec *1000 , true ); 1042 mAlarmTimer->start( sec *1000 , true );
1043 1043
1044} 1044}
1045// called by mRecheckAlarmTimer to get next alarm 1045// called by mRecheckAlarmTimer to get next alarm
1046// we need this, because a QTimer has only a max range of 25 days 1046// we need this, because a QTimer has only a max range of 25 days
1047void CalendarView::recheckTimerAlarm() 1047void CalendarView::recheckTimerAlarm()
1048{ 1048{
1049 mAlarmTimer->stop(); 1049 mAlarmTimer->stop();
1050 mRecheckAlarmTimer->stop(); 1050 mRecheckAlarmTimer->stop();
1051 mCalendar->checkAlarmForIncidence( 0, true ); 1051 mCalendar->checkAlarmForIncidence( 0, true );
1052} 1052}
1053#ifndef DESKTOP_VERSION 1053#ifndef DESKTOP_VERSION
1054void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1054void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1055#else 1055#else
1056void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1056void CalendarView::removeAlarm(const QDateTime &, const QString & )
1057#endif 1057#endif
1058{ 1058{
1059 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1059 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1060 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1060 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1061#ifndef DESKTOP_VERSION 1061#ifndef DESKTOP_VERSION
1062 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1062 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1063#endif 1063#endif
1064 return; 1064 return;
1065 } 1065 }
1066 mAlarmTimer->stop(); 1066 mAlarmTimer->stop();
1067} 1067}
1068void CalendarView::selectWeekNum ( int num ) 1068void CalendarView::selectWeekNum ( int num )
1069{ 1069{
1070 dateNavigator()->blockSignals( true ); 1070 dateNavigator()->blockSignals( true );
1071 dateNavigator()->selectWeek( num ); 1071 dateNavigator()->selectWeek( num );
1072 dateNavigator()->blockSignals( false ); 1072 dateNavigator()->blockSignals( false );
1073 mViewManager->showWeekView(); 1073 mViewManager->showWeekView();
1074} 1074}
1075KOViewManager *CalendarView::viewManager() 1075KOViewManager *CalendarView::viewManager()
1076{ 1076{
1077 return mViewManager; 1077 return mViewManager;
1078} 1078}
1079 1079
1080KODialogManager *CalendarView::dialogManager() 1080KODialogManager *CalendarView::dialogManager()
1081{ 1081{
1082 return mDialogManager; 1082 return mDialogManager;
1083} 1083}
1084 1084
1085QDate CalendarView::startDate() 1085QDate CalendarView::startDate()
1086{ 1086{
1087 DateList dates = mNavigator->selectedDates(); 1087 DateList dates = mNavigator->selectedDates();
1088 1088
1089 return dates.first(); 1089 return dates.first();
1090} 1090}
1091 1091
1092QDate CalendarView::endDate() 1092QDate CalendarView::endDate()
1093{ 1093{
1094 DateList dates = mNavigator->selectedDates(); 1094 DateList dates = mNavigator->selectedDates();
1095 1095
1096 return dates.last(); 1096 return dates.last();
1097} 1097}
1098 1098
1099 1099
1100void CalendarView::createPrinter() 1100void CalendarView::createPrinter()
1101{ 1101{
1102#ifndef KORG_NOPRINTER 1102#ifndef KORG_NOPRINTER
1103 if (!mCalPrinter) { 1103 if (!mCalPrinter) {
1104 mCalPrinter = new CalPrinter(this, mCalendar); 1104 mCalPrinter = new CalPrinter(this, mCalendar);
1105 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1105 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1106 } 1106 }
1107#endif 1107#endif
1108} 1108}
1109 1109
1110 1110
1111//KOPrefs::instance()->mWriteBackFile 1111//KOPrefs::instance()->mWriteBackFile
1112//KOPrefs::instance()->mWriteBackExistingOnly 1112//KOPrefs::instance()->mWriteBackExistingOnly
1113 1113
1114// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1114// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1115// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1115// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1116// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1116// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1117// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1117// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1118// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1118// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1119// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1119// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1120 1120
1121int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1121int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1122{ 1122{
1123 1123
1124 // 0 equal 1124 // 0 equal
1125 // 1 take local 1125 // 1 take local
1126 // 2 take remote 1126 // 2 take remote
1127 // 3 cancel 1127 // 3 cancel
1128 QDateTime lastSync = mLastCalendarSync; 1128 QDateTime lastSync = mLastCalendarSync;
1129 QDateTime localMod = local->lastModified(); 1129 QDateTime localMod = local->lastModified();
1130 QDateTime remoteMod = remote->lastModified(); 1130 QDateTime remoteMod = remote->lastModified();
1131 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1131 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1132 bool remCh, locCh; 1132 bool remCh, locCh;
1133 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1133 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1134 //if ( remCh ) 1134 //if ( remCh )
1135 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1135 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1136 locCh = ( localMod > mLastCalendarSync ); 1136 locCh = ( localMod > mLastCalendarSync );
1137 if ( !remCh && ! locCh ) { 1137 if ( !remCh && ! locCh ) {
1138 //qDebug("both not changed "); 1138 //qDebug("both not changed ");
1139 lastSync = localMod.addDays(1); 1139 lastSync = localMod.addDays(1);
1140 if ( mode <= SYNC_PREF_ASK ) 1140 if ( mode <= SYNC_PREF_ASK )
1141 return 0; 1141 return 0;
1142 } else { 1142 } else {
1143 if ( locCh ) { 1143 if ( locCh ) {
1144 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1144 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1145 lastSync = localMod.addDays( -1 ); 1145 lastSync = localMod.addDays( -1 );
1146 if ( !remCh ) 1146 if ( !remCh )
1147 remoteMod = ( lastSync.addDays( -1 ) ); 1147 remoteMod = ( lastSync.addDays( -1 ) );
1148 } else { 1148 } else {
1149 //qDebug(" not loc changed "); 1149 //qDebug(" not loc changed ");
1150 lastSync = localMod.addDays( 1 ); 1150 lastSync = localMod.addDays( 1 );
1151 if ( remCh ) 1151 if ( remCh )
1152 remoteMod =( lastSync.addDays( 1 ) ); 1152 remoteMod =( lastSync.addDays( 1 ) );
1153 1153
1154 } 1154 }
1155 } 1155 }
1156 full = true; 1156 full = true;
1157 if ( mode < SYNC_PREF_ASK ) 1157 if ( mode < SYNC_PREF_ASK )
1158 mode = SYNC_PREF_ASK; 1158 mode = SYNC_PREF_ASK;
1159 } else { 1159 } else {
1160 if ( localMod == remoteMod ) 1160 if ( localMod == remoteMod )
1161 // if ( local->revision() == remote->revision() ) 1161 // if ( local->revision() == remote->revision() )
1162 return 0; 1162 return 0;
1163 1163
1164 } 1164 }
1165 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1165 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1166 1166
1167 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1167 //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() ); 1168 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1169 //full = true; //debug only 1169 //full = true; //debug only
1170 if ( full ) { 1170 if ( full ) {
1171 bool equ = false; 1171 bool equ = false;
1172 if ( local->typeID() == eventID ) { 1172 if ( local->typeID() == eventID ) {
1173 equ = (*((Event*) local) == *((Event*) remote)); 1173 equ = (*((Event*) local) == *((Event*) remote));
1174 } 1174 }
1175 else if ( local->typeID() == todoID ) 1175 else if ( local->typeID() == todoID )
1176 equ = (*((Todo*) local) == (*(Todo*) remote)); 1176 equ = (*((Todo*) local) == (*(Todo*) remote));
1177 else if ( local->typeID() == journalID ) 1177 else if ( local->typeID() == journalID )
1178 equ = (*((Journal*) local) == *((Journal*) remote)); 1178 equ = (*((Journal*) local) == *((Journal*) remote));
1179 if ( equ ) { 1179 if ( equ ) {
1180 //qDebug("equal "); 1180 //qDebug("equal ");
1181 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1181 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1182 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1182 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1183 } 1183 }
1184 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1184 if ( mode < SYNC_PREF_FORCE_LOCAL )
1185 return 0; 1185 return 0;
1186 1186
1187 }//else //debug only 1187 }//else //debug only
1188 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1188 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1189 } 1189 }
1190 int result; 1190 int result;
1191 bool localIsNew; 1191 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() ); 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() );
1193 1193
1194 1194
1195 // ************************************************ 1195 // ************************************************
1196 // ************************************************ 1196 // ************************************************
1197 // ************************************************ 1197 // ************************************************
1198 // We may have that lastSync > remoteMod AND lastSync > localMod 1198 // We may have that lastSync > remoteMod AND lastSync > localMod
1199 // BUT remoteMod != localMod 1199 // BUT remoteMod != localMod
1200 1200
1201 1201
1202 if ( full && mode < SYNC_PREF_NEWEST ) 1202 if ( full && mode < SYNC_PREF_NEWEST )
1203 mode = SYNC_PREF_ASK; 1203 mode = SYNC_PREF_ASK;
1204 1204
1205 switch( mode ) { 1205 switch( mode ) {
1206 case SYNC_PREF_LOCAL: 1206 case SYNC_PREF_LOCAL:
1207 if ( lastSync > remoteMod ) 1207 if ( lastSync > remoteMod )
1208 return 1; 1208 return 1;
1209 if ( lastSync > localMod ) 1209 if ( lastSync > localMod )
1210 return 2; 1210 return 2;
1211 return 1; 1211 return 1;
1212 break; 1212 break;
1213 case SYNC_PREF_REMOTE: 1213 case SYNC_PREF_REMOTE:
1214 if ( lastSync > localMod ) 1214 if ( lastSync > localMod )
1215 return 2; 1215 return 2;
1216 if ( lastSync > remoteMod ) 1216 if ( lastSync > remoteMod )
1217 return 1; 1217 return 1;
1218 return 2; 1218 return 2;
1219 break; 1219 break;
1220 case SYNC_PREF_NEWEST: 1220 case SYNC_PREF_NEWEST:
1221 if ( localMod >= remoteMod ) 1221 if ( localMod >= remoteMod )
1222 return 1; 1222 return 1;
1223 else 1223 else
1224 return 2; 1224 return 2;
1225 break; 1225 break;
1226 case SYNC_PREF_ASK: 1226 case SYNC_PREF_ASK:
1227 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1227 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1228 if ( lastSync > remoteMod && lastSync > localMod) 1228 if ( lastSync > remoteMod && lastSync > localMod)
1229 return 0; 1229 return 0;
1230 if ( lastSync > remoteMod ) 1230 if ( lastSync > remoteMod )
1231 return 1; 1231 return 1;
1232 if ( lastSync > localMod ) 1232 if ( lastSync > localMod )
1233 return 2; 1233 return 2;
1234 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1234 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1235 localIsNew = localMod >= remoteMod; 1235 localIsNew = localMod >= remoteMod;
1236 if ( localIsNew ) 1236 if ( localIsNew )
1237 getEventViewerDialog()->setColorMode( 1 ); 1237 getEventViewerDialog()->setColorMode( 1 );
1238 else 1238 else
1239 getEventViewerDialog()->setColorMode( 2 ); 1239 getEventViewerDialog()->setColorMode( 2 );
1240 getEventViewerDialog()->setIncidence(local); 1240 getEventViewerDialog()->setIncidence(local);
1241 if ( localIsNew ) 1241 if ( localIsNew )
1242 getEventViewerDialog()->setColorMode( 2 ); 1242 getEventViewerDialog()->setColorMode( 2 );
1243 else 1243 else
1244 getEventViewerDialog()->setColorMode( 1 ); 1244 getEventViewerDialog()->setColorMode( 1 );
1245 getEventViewerDialog()->addIncidence(remote); 1245 getEventViewerDialog()->addIncidence(remote);
1246 getEventViewerDialog()->setColorMode( 0 ); 1246 getEventViewerDialog()->setColorMode( 0 );
1247 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1247 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1248 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1248 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1249 getEventViewerDialog()->showMe(); 1249 getEventViewerDialog()->showMe();
1250 result = getEventViewerDialog()->executeS( localIsNew ); 1250 result = getEventViewerDialog()->executeS( localIsNew );
1251 return result; 1251 return result;
1252 1252
1253 break; 1253 break;
1254 case SYNC_PREF_FORCE_LOCAL: 1254 case SYNC_PREF_FORCE_LOCAL:
1255 return 1; 1255 return 1;
1256 break; 1256 break;
1257 case SYNC_PREF_FORCE_REMOTE: 1257 case SYNC_PREF_FORCE_REMOTE:
1258 return 2; 1258 return 2;
1259 break; 1259 break;
1260 1260
1261 default: 1261 default:
1262 // SYNC_PREF_TAKE_BOTH not implemented 1262 // SYNC_PREF_TAKE_BOTH not implemented
1263 break; 1263 break;
1264 } 1264 }
1265 return 0; 1265 return 0;
1266} 1266}
1267Event* CalendarView::getLastSyncEvent() 1267Event* CalendarView::getLastSyncEvent()
1268{ 1268{
1269 Event* lse; 1269 Event* lse;
1270 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1270 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1271 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1271 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1272 if (!lse) { 1272 if (!lse) {
1273 lse = new Event(); 1273 lse = new Event();
1274 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1274 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1275 QString sum = ""; 1275 QString sum = "";
1276 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1276 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1277 sum = "E: "; 1277 sum = "E: ";
1278 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1278 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1279 lse->setDtStart( mLastCalendarSync ); 1279 lse->setDtStart( mLastCalendarSync );
1280 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1280 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1281 lse->setCategories( i18n("SyncEvent") ); 1281 lse->setCategories( i18n("SyncEvent") );
1282 lse->setReadOnly( true ); 1282 lse->setReadOnly( true );
1283 mCalendar->addEvent( lse ); 1283 mCalendar->addEvent( lse );
1284 } 1284 }
1285 1285
1286 return lse; 1286 return lse;
1287 1287
1288} 1288}
1289 1289
1290// we check, if the to delete event has a id for a profile 1290// 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 1291// if yes, we set this id in the profile to delete
1292void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1292void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1293{ 1293{
1294 if ( lastSync.count() == 0 ) { 1294 if ( lastSync.count() == 0 ) {
1295 //qDebug(" lastSync.count() == 0"); 1295 //qDebug(" lastSync.count() == 0");
1296 return; 1296 return;
1297 } 1297 }
1298 if ( toDelete->typeID() == journalID ) 1298 if ( toDelete->typeID() == journalID )
1299 return; 1299 return;
1300 1300
1301 Event* eve = lastSync.first(); 1301 Event* eve = lastSync.first();
1302 1302
1303 while ( eve ) { 1303 while ( eve ) {
1304 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1304 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1305 if ( !id.isEmpty() ) { 1305 if ( !id.isEmpty() ) {
1306 QString des = eve->description(); 1306 QString des = eve->description();
1307 QString pref = "e"; 1307 QString pref = "e";
1308 if ( toDelete->typeID() == todoID ) 1308 if ( toDelete->typeID() == todoID )
1309 pref = "t"; 1309 pref = "t";
1310 des += pref+ id + ","; 1310 des += pref+ id + ",";
1311 eve->setReadOnly( false ); 1311 eve->setReadOnly( false );
1312 eve->setDescription( des ); 1312 eve->setDescription( des );
1313 //qDebug("setdes %s ", des.latin1()); 1313 //qDebug("setdes %s ", des.latin1());
1314 eve->setReadOnly( true ); 1314 eve->setReadOnly( true );
1315 } 1315 }
1316 eve = lastSync.next(); 1316 eve = lastSync.next();
1317 } 1317 }
1318 1318
1319} 1319}
1320void CalendarView::checkExternalId( Incidence * inc ) 1320void CalendarView::checkExternalId( Incidence * inc )
1321{ 1321{
1322 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1322 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1323 checkExternSyncEvent( lastSync, inc ); 1323 checkExternSyncEvent( lastSync, inc );
1324 1324
1325} 1325}
1326bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1326bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1327{ 1327{
1328 bool syncOK = true; 1328 bool syncOK = true;
1329 int addedEvent = 0; 1329 int addedEvent = 0;
1330 int addedEventR = 0; 1330 int addedEventR = 0;
1331 int deletedEventR = 0; 1331 int deletedEventR = 0;
1332 int deletedEventL = 0; 1332 int deletedEventL = 0;
1333 int changedLocal = 0; 1333 int changedLocal = 0;
1334 int changedRemote = 0; 1334 int changedRemote = 0;
1335 int filteredIN = 0; 1335 int filteredIN = 0;
1336 int filteredOUT = 0; 1336 int filteredOUT = 0;
1337 //QPtrList<Event> el = local->rawEvents(); 1337 //QPtrList<Event> el = local->rawEvents();
1338 Event* eventR; 1338 Event* eventR;
1339 QString uid; 1339 QString uid;
1340 int take; 1340 int take;
1341 Event* eventRSync; 1341 Event* eventRSync;
1342 Event* eventLSync; 1342 Event* eventLSync;
1343 clearAllViews(); 1343 clearAllViews();
1344 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1344 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1345 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1345 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1346 bool fullDateRange = false; 1346 bool fullDateRange = false;
1347 local->resetTempSyncStat(); 1347 local->resetTempSyncStat();
1348 mLastCalendarSync = QDateTime::currentDateTime(); 1348 mLastCalendarSync = QDateTime::currentDateTime();
1349 if ( mSyncManager->syncWithDesktop() ) { 1349 if ( mSyncManager->syncWithDesktop() ) {
1350 remote->resetPilotStat(1); 1350 remote->resetPilotStat(1);
1351 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1351 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1352 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1352 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1353 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1353 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1354 } else { 1354 } else {
1355 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1355 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1356 } 1356 }
1357 } 1357 }
1358 QDateTime modifiedCalendar = mLastCalendarSync; 1358 QDateTime modifiedCalendar = mLastCalendarSync;
1359 eventLSync = getLastSyncEvent(); 1359 eventLSync = getLastSyncEvent();
1360 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1360 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1361 if ( eventR ) { 1361 if ( eventR ) {
1362 eventRSync = (Event*) eventR->clone(); 1362 eventRSync = (Event*) eventR->clone();
1363 remote->deleteEvent(eventR ); 1363 remote->deleteEvent(eventR );
1364 1364
1365 } else { 1365 } else {
1366 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1366 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1367 eventRSync = (Event*)eventLSync->clone(); 1367 eventRSync = (Event*)eventLSync->clone();
1368 } else { 1368 } else {
1369 fullDateRange = true; 1369 fullDateRange = true;
1370 eventRSync = new Event(); 1370 eventRSync = new Event();
1371 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1371 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1372 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1372 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1373 eventRSync->setDtStart( mLastCalendarSync ); 1373 eventRSync->setDtStart( mLastCalendarSync );
1374 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1374 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1375 eventRSync->setCategories( i18n("SyncEvent") ); 1375 eventRSync->setCategories( i18n("SyncEvent") );
1376 } 1376 }
1377 } 1377 }
1378 if ( eventLSync->dtStart() == mLastCalendarSync ) 1378 if ( eventLSync->dtStart() == mLastCalendarSync )
1379 fullDateRange = true; 1379 fullDateRange = true;
1380 1380
1381 if ( ! fullDateRange ) { 1381 if ( ! fullDateRange ) {
1382 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1382 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1383 1383
1384 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1384 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1385 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1385 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1386 fullDateRange = true; 1386 fullDateRange = true;
1387 } 1387 }
1388 } 1388 }
1389 if ( mSyncManager->syncWithDesktop() ) { 1389 if ( mSyncManager->syncWithDesktop() ) {
1390 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1390 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1391 } 1391 }
1392 if ( fullDateRange ) 1392 if ( fullDateRange )
1393 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1393 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1394 else 1394 else
1395 mLastCalendarSync = eventLSync->dtStart(); 1395 mLastCalendarSync = eventLSync->dtStart();
1396 // for resyncing if own file has changed 1396 // for resyncing if own file has changed
1397 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1397 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1398 mLastCalendarSync = loadedFileVersion; 1398 mLastCalendarSync = loadedFileVersion;
1399 //qDebug("setting mLastCalendarSync "); 1399 //qDebug("setting mLastCalendarSync ");
1400 } 1400 }
1401 //qDebug("*************************** "); 1401 //qDebug("*************************** ");
1402 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1402 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1403 QPtrList<Incidence> er = remote->rawIncidences(); 1403 QPtrList<Incidence> er = remote->rawIncidences();
1404 Incidence* inR = er.first(); 1404 Incidence* inR = er.first();
1405 Incidence* inL; 1405 Incidence* inL;
1406 QProgressBar bar( er.count(),0 ); 1406 QProgressBar bar( er.count(),0 );
1407 bar.setCaption (i18n("Syncing - close to abort!") ); 1407 bar.setCaption (i18n("Syncing - close to abort!") );
1408 1408
1409 // ************** setting up filter ************* 1409 // ************** setting up filter *************
1410 CalFilter *filterIN = 0; 1410 CalFilter *filterIN = 0;
1411 CalFilter *filterOUT = 0; 1411 CalFilter *filterOUT = 0;
1412 CalFilter *filter = mFilters.first(); 1412 CalFilter *filter = mFilters.first();
1413 while(filter) { 1413 while(filter) {
1414 if ( filter->name() == mSyncManager->mFilterInCal ) 1414 if ( filter->name() == mSyncManager->mFilterInCal )
1415 filterIN = filter; 1415 filterIN = filter;
1416 if ( filter->name() == mSyncManager->mFilterOutCal ) 1416 if ( filter->name() == mSyncManager->mFilterOutCal )
1417 filterOUT = filter; 1417 filterOUT = filter;
1418 filter = mFilters.next(); 1418 filter = mFilters.next();
1419 } 1419 }
1420 int w = 300; 1420 int w = 300;
1421 if ( QApplication::desktop()->width() < 320 ) 1421 if ( QApplication::desktop()->width() < 320 )
1422 w = 220; 1422 w = 220;
1423 int h = bar.sizeHint().height() ; 1423 int h = bar.sizeHint().height() ;
1424 int dw = QApplication::desktop()->width(); 1424 int dw = QApplication::desktop()->width();
1425 int dh = QApplication::desktop()->height(); 1425 int dh = QApplication::desktop()->height();
1426 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1426 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1427 bar.show(); 1427 bar.show();
1428 int modulo = (er.count()/10)+1; 1428 int modulo = (er.count()/10)+1;
1429 int incCounter = 0; 1429 int incCounter = 0;
1430 while ( inR ) { 1430 while ( inR ) {
1431 if ( ! bar.isVisible() ) 1431 if ( ! bar.isVisible() )
1432 return false; 1432 return false;
1433 if ( incCounter % modulo == 0 ) 1433 if ( incCounter % modulo == 0 )
1434 bar.setProgress( incCounter ); 1434 bar.setProgress( incCounter );
1435 ++incCounter; 1435 ++incCounter;
1436 uid = inR->uid(); 1436 uid = inR->uid();
1437 bool skipIncidence = false; 1437 bool skipIncidence = false;
1438 if ( uid.left(15) == QString("last-syncEvent-") ) 1438 if ( uid.left(15) == QString("last-syncEvent-") )
1439 skipIncidence = true; 1439 skipIncidence = true;
1440 QString idS; 1440 QString idS;
1441 qApp->processEvents(); 1441 qApp->processEvents();
1442 if ( !skipIncidence ) { 1442 if ( !skipIncidence ) {
1443 inL = local->incidence( uid ); 1443 inL = local->incidence( uid );
1444 if ( inL ) { // maybe conflict - same uid in both calendars 1444 if ( inL ) { // maybe conflict - same uid in both calendars
1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1446 //qDebug("take %d %s ", take, inL->summary().latin1()); 1446 //qDebug("take %d %s ", take, inL->summary().latin1());
1447 if ( take == 3 ) 1447 if ( take == 3 )
1448 return false; 1448 return false;
1449 if ( take == 1 ) {// take local ********************** 1449 if ( take == 1 ) {// take local **********************
1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1452 else 1452 else
1453 idS = inR->IDStr(); 1453 idS = inR->IDStr();
1454 remote->deleteIncidence( inR ); 1454 remote->deleteIncidence( inR );
1455 inR = inL->clone(); 1455 inR = inL->clone();
1456 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1456 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1457 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1457 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1458 inR->setIDStr( idS ); 1458 inR->setIDStr( idS );
1459 remote->addIncidence( inR ); 1459 remote->addIncidence( inR );
1460 if ( mSyncManager->syncWithDesktop() ) 1460 if ( mSyncManager->syncWithDesktop() )
1461 inR->setPilotId( 2 ); 1461 inR->setPilotId( 2 );
1462 ++changedRemote; 1462 ++changedRemote;
1463 } else {// take remote ********************** 1463 } else {// take remote **********************
1464 idS = inL->IDStr(); 1464 idS = inL->IDStr();
1465 int pid = inL->pilotId(); 1465 int pid = inL->pilotId();
1466 local->deleteIncidence( inL ); 1466 local->deleteIncidence( inL );
1467 inL = inR->clone(); 1467 inL = inR->clone();
1468 if ( mSyncManager->syncWithDesktop() ) 1468 if ( mSyncManager->syncWithDesktop() )
1469 inL->setPilotId( pid ); 1469 inL->setPilotId( pid );
1470 inL->setIDStr( idS ); 1470 inL->setIDStr( idS );
1471 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1471 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1472 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1472 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1473 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1473 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1474 } 1474 }
1475 local->addIncidence( inL ); 1475 local->addIncidence( inL );
1476 ++changedLocal; 1476 ++changedLocal;
1477 } 1477 }
1478 } 1478 }
1479 } else { // no conflict ********** add or delete remote 1479 } else { // no conflict ********** add or delete remote
1480 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1480 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1481 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1481 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1482 QString des = eventLSync->description(); 1482 QString des = eventLSync->description();
1483 QString pref = "e"; 1483 QString pref = "e";
1484 if ( inR->typeID() == todoID ) 1484 if ( inR->typeID() == todoID )
1485 pref = "t"; 1485 pref = "t";
1486 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1486 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1487 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1487 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1488 //remote->deleteIncidence( inR ); 1488 //remote->deleteIncidence( inR );
1489 ++deletedEventR; 1489 ++deletedEventR;
1490 } else { 1490 } else {
1491 inR->setLastModified( modifiedCalendar ); 1491 inR->setLastModified( modifiedCalendar );
1492 inL = inR->clone(); 1492 inL = inR->clone();
1493 inL->setIDStr( ":" ); 1493 inL->setIDStr( ":" );
1494 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1494 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1495 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1495 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1496 local->addIncidence( inL ); 1496 local->addIncidence( inL );
1497 ++addedEvent; 1497 ++addedEvent;
1498 1498
1499 } 1499 }
1500 } else { 1500 } else {
1501 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1501 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1502 inR->setLastModified( modifiedCalendar ); 1502 inR->setLastModified( modifiedCalendar );
1503 inL = inR->clone(); 1503 inL = inR->clone();
1504 inL->setIDStr( ":" ); 1504 inL->setIDStr( ":" );
1505 local->addIncidence( inL ); 1505 local->addIncidence( inL );
1506 ++addedEvent; 1506 ++addedEvent;
1507 1507
1508 } else { 1508 } else {
1509 checkExternSyncEvent(eventRSyncSharp, inR); 1509 checkExternSyncEvent(eventRSyncSharp, inR);
1510 remote->deleteIncidence( inR ); 1510 remote->deleteIncidence( inR );
1511 ++deletedEventR; 1511 ++deletedEventR;
1512 } 1512 }
1513 } 1513 }
1514 } else { 1514 } else {
1515 ++filteredIN; 1515 ++filteredIN;
1516 } 1516 }
1517 } 1517 }
1518 } 1518 }
1519 inR = er.next(); 1519 inR = er.next();
1520 } 1520 }
1521 QPtrList<Incidence> el = local->rawIncidences(); 1521 QPtrList<Incidence> el = local->rawIncidences();
1522 inL = el.first(); 1522 inL = el.first();
1523 modulo = (el.count()/10)+1; 1523 modulo = (el.count()/10)+1;
1524 bar.setCaption (i18n("Add / remove events") ); 1524 bar.setCaption (i18n("Add / remove events") );
1525 bar.setTotalSteps ( el.count() ) ; 1525 bar.setTotalSteps ( el.count() ) ;
1526 bar.show(); 1526 bar.show();
1527 incCounter = 0; 1527 incCounter = 0;
1528 1528
1529 while ( inL ) { 1529 while ( inL ) {
1530 1530
1531 qApp->processEvents(); 1531 qApp->processEvents();
1532 if ( ! bar.isVisible() ) 1532 if ( ! bar.isVisible() )
1533 return false; 1533 return false;
1534 if ( incCounter % modulo == 0 ) 1534 if ( incCounter % modulo == 0 )
1535 bar.setProgress( incCounter ); 1535 bar.setProgress( incCounter );
1536 ++incCounter; 1536 ++incCounter;
1537 uid = inL->uid(); 1537 uid = inL->uid();
1538 bool skipIncidence = false; 1538 bool skipIncidence = false;
1539 if ( uid.left(15) == QString("last-syncEvent-") ) 1539 if ( uid.left(15) == QString("last-syncEvent-") )
1540 skipIncidence = true; 1540 skipIncidence = true;
1541 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1541 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1542 skipIncidence = true; 1542 skipIncidence = true;
1543 if ( !skipIncidence ) { 1543 if ( !skipIncidence ) {
1544 inR = remote->incidence( uid ); 1544 inR = remote->incidence( uid );
1545 if ( ! inR ) { 1545 if ( ! inR ) {
1546 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1546 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1547 // no conflict ********** add or delete local 1547 // no conflict ********** add or delete local
1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1549 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1549 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1550 checkExternSyncEvent(eventLSyncSharp, inL); 1550 checkExternSyncEvent(eventLSyncSharp, inL);
1551 local->deleteIncidence( inL ); 1551 local->deleteIncidence( inL );
1552 ++deletedEventL; 1552 ++deletedEventL;
1553 } else { 1553 } else {
1554 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1554 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1555 inL->removeID(mCurrentSyncDevice ); 1555 inL->removeID(mCurrentSyncDevice );
1556 ++addedEventR; 1556 ++addedEventR;
1557 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1557 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1558 inL->setLastModified( modifiedCalendar ); 1558 inL->setLastModified( modifiedCalendar );
1559 inR = inL->clone(); 1559 inR = inL->clone();
1560 inR->setIDStr( ":" ); 1560 inR->setIDStr( ":" );
1561 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1561 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1562 remote->addIncidence( inR ); 1562 remote->addIncidence( inR );
1563 } 1563 }
1564 } 1564 }
1565 } else { 1565 } else {
1566 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1566 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1567 checkExternSyncEvent(eventLSyncSharp, inL); 1567 checkExternSyncEvent(eventLSyncSharp, inL);
1568 local->deleteIncidence( inL ); 1568 local->deleteIncidence( inL );
1569 ++deletedEventL; 1569 ++deletedEventL;
1570 } else { 1570 } else {
1571 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1571 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1572 ++addedEventR; 1572 ++addedEventR;
1573 inL->setLastModified( modifiedCalendar ); 1573 inL->setLastModified( modifiedCalendar );
1574 inR = inL->clone(); 1574 inR = inL->clone();
1575 inR->setIDStr( ":" ); 1575 inR->setIDStr( ":" );
1576 remote->addIncidence( inR ); 1576 remote->addIncidence( inR );
1577 } 1577 }
1578 } 1578 }
1579 } 1579 }
1580 } else { 1580 } else {
1581 ++filteredOUT; 1581 ++filteredOUT;
1582 } 1582 }
1583 } 1583 }
1584 } 1584 }
1585 inL = el.next(); 1585 inL = el.next();
1586 } 1586 }
1587 int delFut = 0; 1587 int delFut = 0;
1588 int remRem = 0; 1588 int remRem = 0;
1589 if ( mSyncManager->mWriteBackInFuture ) { 1589 if ( mSyncManager->mWriteBackInFuture ) {
1590 er = remote->rawIncidences(); 1590 er = remote->rawIncidences();
1591 remRem = er.count(); 1591 remRem = er.count();
1592 inR = er.first(); 1592 inR = er.first();
1593 QDateTime dt; 1593 QDateTime dt;
1594 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1594 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1595 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1595 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1596 while ( inR ) { 1596 while ( inR ) {
1597 if ( inR->typeID() == todoID ) { 1597 if ( inR->typeID() == todoID ) {
1598 Todo * t = (Todo*)inR; 1598 Todo * t = (Todo*)inR;
1599 if ( t->hasDueDate() ) 1599 if ( t->hasDueDate() )
1600 dt = t->dtDue(); 1600 dt = t->dtDue();
1601 else 1601 else
1602 dt = cur.addSecs( 62 ); 1602 dt = cur.addSecs( 62 );
1603 } 1603 }
1604 else if (inR->typeID() == eventID ) { 1604 else if (inR->typeID() == eventID ) {
1605 bool ok; 1605 bool ok;
1606 dt = inR->getNextOccurence( cur, &ok ); 1606 dt = inR->getNextOccurence( cur, &ok );
1607 if ( !ok ) 1607 if ( !ok )
1608 dt = cur.addSecs( -62 ); 1608 dt = cur.addSecs( -62 );
1609 } 1609 }
1610 else 1610 else
1611 dt = inR->dtStart(); 1611 dt = inR->dtStart();
1612 if ( dt < cur || dt > end ) { 1612 if ( dt < cur || dt > end ) {
1613 remote->deleteIncidence( inR ); 1613 remote->deleteIncidence( inR );
1614 ++delFut; 1614 ++delFut;
1615 } 1615 }
1616 inR = er.next(); 1616 inR = er.next();
1617 } 1617 }
1618 } 1618 }
1619 bar.hide(); 1619 bar.hide();
1620 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1620 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1621 eventLSync->setReadOnly( false ); 1621 eventLSync->setReadOnly( false );
1622 eventLSync->setDtStart( mLastCalendarSync ); 1622 eventLSync->setDtStart( mLastCalendarSync );
1623 eventRSync->setDtStart( mLastCalendarSync ); 1623 eventRSync->setDtStart( mLastCalendarSync );
1624 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1624 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1625 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1625 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1626 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1626 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1627 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1627 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1628 eventLSync->setReadOnly( true ); 1628 eventLSync->setReadOnly( true );
1629 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1629 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1630 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1630 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1631 remote->addEvent( eventRSync ); 1631 remote->addEvent( eventRSync );
1632 else 1632 else
1633 delete eventRSync; 1633 delete eventRSync;
1634 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1634 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1635 QString mes; 1635 QString mes;
1636 mes .sprintf( i18n("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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1636 mes .sprintf( i18n("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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1637 QString delmess; 1637 QString delmess;
1638 if ( delFut ) { 1638 if ( delFut ) {
1639 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1639 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1640 mes += delmess; 1640 mes += delmess;
1641 } 1641 }
1642 mes = i18n("Local calendar changed!\n") +mes; 1642 mes = i18n("Local calendar changed!\n") +mes;
1643 mCalendar->checkAlarmForIncidence( 0, true ); 1643 mCalendar->checkAlarmForIncidence( 0, true );
1644 qDebug( mes ); 1644 qDebug( mes );
1645 if ( mSyncManager->mShowSyncSummary ) { 1645 if ( mSyncManager->mShowSyncSummary ) {
1646 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1646 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1647 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1647 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1648 qDebug("KO: WB cancelled "); 1648 qDebug("KO: WB cancelled ");
1649 mSyncManager->mWriteBackFile = false; 1649 mSyncManager->mWriteBackFile = false;
1650 return syncOK; 1650 return syncOK;
1651 } 1651 }
1652 } 1652 }
1653 return syncOK; 1653 return syncOK;
1654} 1654}
1655 1655
1656void CalendarView::setSyncDevice( QString s ) 1656void CalendarView::setSyncDevice( QString s )
1657{ 1657{
1658 mCurrentSyncDevice= s; 1658 mCurrentSyncDevice= s;
1659} 1659}
1660void CalendarView::setSyncName( QString s ) 1660void CalendarView::setSyncName( QString s )
1661{ 1661{
1662 mCurrentSyncName= s; 1662 mCurrentSyncName= s;
1663} 1663}
1664bool CalendarView::syncCalendar(QString filename, int mode) 1664bool CalendarView::syncCalendar(QString filename, int mode)
1665{ 1665{
1666 //qDebug("syncCalendar %s ", filename.latin1()); 1666 //qDebug("syncCalendar %s ", filename.latin1());
1667 mGlobalSyncMode = SYNC_MODE_NORMAL; 1667 mGlobalSyncMode = SYNC_MODE_NORMAL;
1668 CalendarLocal* calendar = new CalendarLocal(); 1668 CalendarLocal* calendar = new CalendarLocal();
1669 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1669 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1670 FileStorage* storage = new FileStorage( calendar ); 1670 FileStorage* storage = new FileStorage( calendar );
1671 bool syncOK = false; 1671 bool syncOK = false;
1672 storage->setFileName( filename ); 1672 storage->setFileName( filename );
1673 // qDebug("loading ... "); 1673 // qDebug("loading ... ");
1674 if ( storage->load() ) { 1674 if ( storage->load() ) {
1675 getEventViewerDialog()->setSyncMode( true ); 1675 getEventViewerDialog()->setSyncMode( true );
1676 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1676 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1677 getEventViewerDialog()->setSyncMode( false ); 1677 getEventViewerDialog()->setSyncMode( false );
1678 if ( syncOK ) { 1678 if ( syncOK ) {
1679 if ( mSyncManager->mWriteBackFile ) 1679 if ( mSyncManager->mWriteBackFile )
1680 { 1680 {
1681 storage->setSaveFormat( new ICalFormat() ); 1681 storage->setSaveFormat( new ICalFormat() );
1682 storage->save(); 1682 storage->save();
1683 } 1683 }
1684 } 1684 }
1685 setModified( true ); 1685 setModified( true );
1686 } 1686 }
1687 delete storage; 1687 delete storage;
1688 delete calendar; 1688 delete calendar;
1689 if ( syncOK ) 1689 if ( syncOK )
1690 updateView(); 1690 updateView();
1691 return syncOK; 1691 return syncOK;
1692} 1692}
1693 1693
1694void CalendarView::syncExternal( int mode ) 1694void CalendarView::syncExternal( int mode )
1695{ 1695{
1696 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1696 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1697 1697
1698 qApp->processEvents(); 1698 qApp->processEvents();
1699 CalendarLocal* calendar = new CalendarLocal(); 1699 CalendarLocal* calendar = new CalendarLocal();
1700 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1700 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1701 bool syncOK = false; 1701 bool syncOK = false;
1702 bool loadSuccess = false; 1702 bool loadSuccess = false;
1703 PhoneFormat* phoneFormat = 0; 1703 PhoneFormat* phoneFormat = 0;
1704 emit tempDisableBR(true); 1704 emit tempDisableBR(true);
1705#ifndef DESKTOP_VERSION 1705#ifndef DESKTOP_VERSION
1706 SharpFormat* sharpFormat = 0; 1706 SharpFormat* sharpFormat = 0;
1707 if ( mode == 0 ) { // sharp 1707 if ( mode == 0 ) { // sharp
1708 sharpFormat = new SharpFormat () ; 1708 sharpFormat = new SharpFormat () ;
1709 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1709 loadSuccess = sharpFormat->load( calendar, mCalendar );
1710 1710
1711 } else 1711 } else
1712#endif 1712#endif
1713 if ( mode == 1 ) { // phone 1713 if ( mode == 1 ) { // phone
1714 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1714 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1715 mSyncManager->mPhoneDevice, 1715 mSyncManager->mPhoneDevice,
1716 mSyncManager->mPhoneConnection, 1716 mSyncManager->mPhoneConnection,
1717 mSyncManager->mPhoneModel); 1717 mSyncManager->mPhoneModel);
1718 loadSuccess = phoneFormat->load( calendar,mCalendar); 1718 loadSuccess = phoneFormat->load( calendar,mCalendar);
1719 1719
1720 } else { 1720 } else {
1721 emit tempDisableBR(false); 1721 emit tempDisableBR(false);
1722 return; 1722 return;
1723 } 1723 }
1724 if ( loadSuccess ) { 1724 if ( loadSuccess ) {
1725 getEventViewerDialog()->setSyncMode( true ); 1725 getEventViewerDialog()->setSyncMode( true );
1726 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1726 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1727 getEventViewerDialog()->setSyncMode( false ); 1727 getEventViewerDialog()->setSyncMode( false );
1728 qApp->processEvents(); 1728 qApp->processEvents();
1729 if ( syncOK ) { 1729 if ( syncOK ) {
1730 if ( mSyncManager->mWriteBackFile ) 1730 if ( mSyncManager->mWriteBackFile )
1731 { 1731 {
1732 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1732 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1733 Incidence* inc = iL.first(); 1733 Incidence* inc = iL.first();
1734 if ( phoneFormat ) { 1734 if ( phoneFormat ) {
1735 while ( inc ) { 1735 while ( inc ) {
1736 inc->removeID(mCurrentSyncDevice); 1736 inc->removeID(mCurrentSyncDevice);
1737 inc = iL.next(); 1737 inc = iL.next();
1738 } 1738 }
1739 } 1739 }
1740#ifndef DESKTOP_VERSION 1740#ifndef DESKTOP_VERSION
1741 if ( sharpFormat ) 1741 if ( sharpFormat )
1742 sharpFormat->save(calendar); 1742 sharpFormat->save(calendar);
1743#endif 1743#endif
1744 if ( phoneFormat ) 1744 if ( phoneFormat )
1745 phoneFormat->save(calendar); 1745 phoneFormat->save(calendar);
1746 iL = calendar->rawIncidences(); 1746 iL = calendar->rawIncidences();
1747 inc = iL.first(); 1747 inc = iL.first();
1748 Incidence* loc; 1748 Incidence* loc;
1749 while ( inc ) { 1749 while ( inc ) {
1750 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1750 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1751 loc = mCalendar->incidence(inc->uid() ); 1751 loc = mCalendar->incidence(inc->uid() );
1752 if ( loc ) { 1752 if ( loc ) {
1753 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1753 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1754 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1754 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1755 } 1755 }
1756 } 1756 }
1757 inc = iL.next(); 1757 inc = iL.next();
1758 } 1758 }
1759 Incidence* lse = getLastSyncEvent(); 1759 Incidence* lse = getLastSyncEvent();
1760 if ( lse ) { 1760 if ( lse ) {
1761 lse->setReadOnly( false ); 1761 lse->setReadOnly( false );
1762 lse->setDescription( "" ); 1762 lse->setDescription( "" );
1763 lse->setReadOnly( true ); 1763 lse->setReadOnly( true );
1764 } 1764 }
1765 } 1765 }
1766 } else { 1766 } else {
1767 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 1767 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
1768 } 1768 }
1769 setModified( true ); 1769 setModified( true );
1770 } else { 1770 } else {
1771 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1771 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1772 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1772 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1773 question, i18n("Ok")) ; 1773 question, i18n("Ok")) ;
1774 1774
1775 } 1775 }
1776 delete calendar; 1776 delete calendar;
1777 updateView(); 1777 updateView();
1778 emit tempDisableBR(false); 1778 emit tempDisableBR(false);
1779 return ;//syncOK; 1779 return ;//syncOK;
1780 1780
1781} 1781}
1782 1782
1783bool CalendarView::importBday() 1783bool CalendarView::importBday()
1784{ 1784{
1785#ifndef KORG_NOKABC 1785#ifndef KORG_NOKABC
1786 1786
1787#ifdef DESKTOP_VERSION 1787#ifdef DESKTOP_VERSION
1788 int curCal = mCalendar->defaultCalendar(); 1788 int curCal = mCalendar->defaultCalendar();
1789 int bd = mCalEditView->getBirtdayID(); 1789 int bd = mCalEditView->getBirtdayID();
1790 if ( bd == 0 ) 1790 if ( bd == 0 )
1791 return false; 1791 return false;
1792 mCalendar->setDefaultCalendar( bd ); 1792 mCalendar->setDefaultCalendar( bd );
1793 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1793 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1794 KABC::AddressBook::Iterator it; 1794 KABC::AddressBook::Iterator it;
1795 int count = 0; 1795 int count = 0;
1796 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1796 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1797 ++count; 1797 ++count;
1798 } 1798 }
1799 QProgressBar bar(count,0 ); 1799 QProgressBar bar(count,0 );
1800 int w = 300; 1800 int w = 300;
1801 if ( QApplication::desktop()->width() < 320 ) 1801 if ( QApplication::desktop()->width() < 320 )
1802 w = 220; 1802 w = 220;
1803 int h = bar.sizeHint().height() ; 1803 int h = bar.sizeHint().height() ;
1804 int dw = QApplication::desktop()->width(); 1804 int dw = QApplication::desktop()->width();
1805 int dh = QApplication::desktop()->height(); 1805 int dh = QApplication::desktop()->height();
1806 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1806 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1807 bar.show(); 1807 bar.show();
1808 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1808 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1809 qApp->processEvents(); 1809 qApp->processEvents();
1810 count = 0; 1810 count = 0;
1811 int addCount = 0; 1811 int addCount = 0;
1812 KCal::Attendee* a = 0; 1812 KCal::Attendee* a = 0;
1813 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1813 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1814 if ( ! bar.isVisible() ) 1814 if ( ! bar.isVisible() )
1815 return false; 1815 return false;
1816 bar.setProgress( count++ ); 1816 bar.setProgress( count++ );
1817 qApp->processEvents(); 1817 qApp->processEvents();
1818 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1818 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1819 if ( (*it).birthday().date().isValid() ){ 1819 if ( (*it).birthday().date().isValid() ){
1820 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1820 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1821 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1821 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1822 ++addCount; 1822 ++addCount;
1823 } 1823 }
1824 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1824 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1825 if ( anni.isValid() ){ 1825 if ( anni.isValid() ){
1826 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1826 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1827 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1827 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1828 ++addCount; 1828 ++addCount;
1829 } 1829 }
1830 } 1830 }
1831 mCalendar->setDefaultCalendar( curCal ); 1831 mCalendar->setDefaultCalendar( curCal );
1832 updateView(); 1832 updateView();
1833 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1833 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1834#else //DESKTOP_VERSION 1834#else //DESKTOP_VERSION
1835 1835
1836 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 1836 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
1837 // the result should now arrive through method insertBirthdays 1837 // the result should now arrive through method insertBirthdays
1838 1838
1839#endif //DESKTOP_VERSION 1839#endif //DESKTOP_VERSION
1840 1840
1841#endif //KORG_NOKABC 1841#endif //KORG_NOKABC
1842 1842
1843 1843
1844 return true; 1844 return true;
1845} 1845}
1846 1846
1847// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 1847// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
1848void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 1848void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
1849 const QStringList& anniversaryList, const QStringList& realNameList, 1849 const QStringList& anniversaryList, const QStringList& realNameList,
1850 const QStringList& emailList, const QStringList& assembledNameList, 1850 const QStringList& emailList, const QStringList& assembledNameList,
1851 const QStringList& uidList) 1851 const QStringList& uidList)
1852{ 1852{
1853 1853
1854 //qDebug("KO::CalendarView::insertBirthdays"); 1854 //qDebug("KO::CalendarView::insertBirthdays");
1855 if (uid == this->name()) 1855 if (uid == this->name())
1856 { 1856 {
1857 int curCal = mCalendar->defaultCalendar(); 1857 int curCal = mCalendar->defaultCalendar();
1858 int bd = mCalEditView->getBirtdayID(); 1858 int bd = mCalEditView->getBirtdayID();
1859 if ( bd == 0 ) 1859 if ( bd == 0 )
1860 return; 1860 return;
1861 mCalendar->setDefaultCalendar( bd ); 1861 mCalendar->setDefaultCalendar( bd );
1862 1862
1863 1863
1864 int count = birthdayList.count(); 1864 int count = birthdayList.count();
1865 int addCount = 0; 1865 int addCount = 0;
1866 KCal::Attendee* a = 0; 1866 KCal::Attendee* a = 0;
1867 1867
1868 //qDebug("CalView 1 %i", count); 1868 //qDebug("CalView 1 %i", count);
1869 1869
1870 QProgressBar bar(count,0 ); 1870 QProgressBar bar(count,0 );
1871 int w = 300; 1871 int w = 300;
1872 if ( QApplication::desktop()->width() < 320 ) 1872 if ( QApplication::desktop()->width() < 320 )
1873 w = 220; 1873 w = 220;
1874 int h = bar.sizeHint().height() ; 1874 int h = bar.sizeHint().height() ;
1875 int dw = QApplication::desktop()->width(); 1875 int dw = QApplication::desktop()->width();
1876 int dh = QApplication::desktop()->height(); 1876 int dh = QApplication::desktop()->height();
1877 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1877 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1878 bar.show(); 1878 bar.show();
1879 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 1879 bar.setCaption (i18n("inserting birthdays - close to abort!") );
1880 qApp->processEvents(); 1880 qApp->processEvents();
1881 1881
1882 QDate birthday; 1882 QDate birthday;
1883 QDate anniversary; 1883 QDate anniversary;
1884 QString realName; 1884 QString realName;
1885 QString email; 1885 QString email;
1886 QString assembledName; 1886 QString assembledName;
1887 QString uid; 1887 QString uid;
1888 bool ok = true; 1888 bool ok = true;
1889 for ( int i = 0; i < count; i++) 1889 for ( int i = 0; i < count; i++)
1890 { 1890 {
1891 if ( ! bar.isVisible() ) 1891 if ( ! bar.isVisible() )
1892 return; 1892 return;
1893 bar.setProgress( i ); 1893 bar.setProgress( i );
1894 qApp->processEvents(); 1894 qApp->processEvents();
1895 1895
1896 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 1896 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1897 if (!ok) { 1897 if (!ok) {
1898 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 1898 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1899 } 1899 }
1900 1900
1901 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 1901 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1902 if (!ok) { 1902 if (!ok) {
1903 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 1903 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1904 } 1904 }
1905 realName = realNameList[i]; 1905 realName = realNameList[i];
1906 email = emailList[i]; 1906 email = emailList[i];
1907 assembledName = assembledNameList[i]; 1907 assembledName = assembledNameList[i];
1908 uid = uidList[i]; 1908 uid = uidList[i];
1909 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 1909 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
1910 1910
1911 if ( birthday.isValid() ){ 1911 if ( birthday.isValid() ){
1912 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1912 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1913 KCal::Attendee::ReqParticipant,uid) ; 1913 KCal::Attendee::ReqParticipant,uid) ;
1914 if ( addAnniversary( birthday, assembledName, a, true ) ) 1914 if ( addAnniversary( birthday, assembledName, a, true ) )
1915 ++addCount; 1915 ++addCount;
1916 } 1916 }
1917 1917
1918 if ( anniversary.isValid() ){ 1918 if ( anniversary.isValid() ){
1919 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1919 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1920 KCal::Attendee::ReqParticipant,uid) ; 1920 KCal::Attendee::ReqParticipant,uid) ;
1921 if ( addAnniversary( anniversary, assembledName, a, false ) ) 1921 if ( addAnniversary( anniversary, assembledName, a, false ) )
1922 ++addCount; 1922 ++addCount;
1923 } 1923 }
1924 } 1924 }
1925 1925
1926 mCalendar->setDefaultCalendar( curCal ); 1926 mCalendar->setDefaultCalendar( curCal );
1927 updateView(); 1927 updateView();
1928 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1928 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1929 1929
1930 } 1930 }
1931 1931
1932} 1932}
1933 1933
1934 1934
1935 1935
1936bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1936bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1937{ 1937{
1938 //qDebug("addAnni "); 1938 //qDebug("addAnni ");
1939 Event * ev = new Event(); 1939 Event * ev = new Event();
1940 ev->setOrganizer(KOPrefs::instance()->email()); 1940 ev->setOrganizer(KOPrefs::instance()->email());
1941 if ( a ) { 1941 if ( a ) {
1942 ev->addAttendee( a ); 1942 ev->addAttendee( a );
1943 } 1943 }
1944 QString kind; 1944 QString kind;
1945 if ( birthday ) { 1945 if ( birthday ) {
1946 kind = i18n( "Birthday" ); 1946 kind = i18n( "Birthday" );
1947 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 1947 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1948 } 1948 }
1949 else { 1949 else {
1950 kind = i18n( "Anniversary" ); 1950 kind = i18n( "Anniversary" );
1951 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 1951 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1952 } 1952 }
1953 ev->setCategories( kind ); 1953 ev->setCategories( kind );
1954 ev->setDtStart( QDateTime(date) ); 1954 ev->setDtStart( QDateTime(date) );
1955 ev->setDtEnd( QDateTime(date) ); 1955 ev->setDtEnd( QDateTime(date) );
1956 ev->setFloats( true ); 1956 ev->setFloats( true );
1957 Recurrence * rec = ev->recurrence(); 1957 Recurrence * rec = ev->recurrence();
1958 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1958 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1959 rec->addYearlyNum( date.month() ); 1959 rec->addYearlyNum( date.month() );
1960 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1960 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1961 delete ev; 1961 delete ev;
1962 return false; 1962 return false;
1963 } 1963 }
1964 return true; 1964 return true;
1965 1965
1966} 1966}
1967bool CalendarView::importQtopia( const QString &categories, 1967bool CalendarView::importQtopia( const QString &categories,
1968 const QString &datebook, 1968 const QString &datebook,
1969 const QString &todolist ) 1969 const QString &todolist )
1970{ 1970{
1971 1971
1972 QtopiaFormat qtopiaFormat; 1972 QtopiaFormat qtopiaFormat;
1973 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1973 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1974 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1974 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1975 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1975 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1976 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1976 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1977 1977
1978 updateView(); 1978 updateView();
1979 return true; 1979 return true;
1980 1980
1981#if 0 1981#if 0
1982 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1982 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1983 mCurrentSyncDevice = "qtopia-XML"; 1983 mCurrentSyncDevice = "qtopia-XML";
1984 if ( mSyncManager->mAskForPreferences ) 1984 if ( mSyncManager->mAskForPreferences )
1985 edit_sync_options(); 1985 edit_sync_options();
1986 qApp->processEvents(); 1986 qApp->processEvents();
1987 CalendarLocal* calendar = new CalendarLocal(); 1987 CalendarLocal* calendar = new CalendarLocal();
1988 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1988 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1989 bool syncOK = false; 1989 bool syncOK = false;
1990 QtopiaFormat qtopiaFormat; 1990 QtopiaFormat qtopiaFormat;
1991 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1991 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1992 bool loadOk = true; 1992 bool loadOk = true;
1993 if ( !categories.isEmpty() ) 1993 if ( !categories.isEmpty() )
1994 loadOk = qtopiaFormat.load( calendar, categories ); 1994 loadOk = qtopiaFormat.load( calendar, categories );
1995 if ( loadOk && !datebook.isEmpty() ) 1995 if ( loadOk && !datebook.isEmpty() )
1996 loadOk = qtopiaFormat.load( calendar, datebook ); 1996 loadOk = qtopiaFormat.load( calendar, datebook );
1997 if ( loadOk && !todolist.isEmpty() ) 1997 if ( loadOk && !todolist.isEmpty() )
1998 loadOk = qtopiaFormat.load( calendar, todolist ); 1998 loadOk = qtopiaFormat.load( calendar, todolist );
1999 1999
2000 if ( loadOk ) { 2000 if ( loadOk ) {
2001 getEventViewerDialog()->setSyncMode( true ); 2001 getEventViewerDialog()->setSyncMode( true );
2002 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2002 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2003 getEventViewerDialog()->setSyncMode( false ); 2003 getEventViewerDialog()->setSyncMode( false );
2004 qApp->processEvents(); 2004 qApp->processEvents();
2005 if ( syncOK ) { 2005 if ( syncOK ) {
2006 if ( mSyncManager->mWriteBackFile ) 2006 if ( mSyncManager->mWriteBackFile )
2007 { 2007 {
2008 // write back XML file 2008 // write back XML file
2009 2009
2010 } 2010 }
2011 setModified( true ); 2011 setModified( true );
2012 } 2012 }
2013 } else { 2013 } else {
2014 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2014 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2015 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2015 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2016 question, i18n("Ok")) ; 2016 question, i18n("Ok")) ;
2017 } 2017 }
2018 delete calendar; 2018 delete calendar;
2019 updateView(); 2019 updateView();
2020 return syncOK; 2020 return syncOK;
2021 2021
2022 2022
2023#endif 2023#endif
2024 2024
2025} 2025}
2026 2026
2027void CalendarView::setSyncEventsReadOnly() 2027void CalendarView::setSyncEventsReadOnly()
2028{ 2028{
2029 mCalendar->setSyncEventsReadOnly(); 2029 mCalendar->setSyncEventsReadOnly();
2030} 2030}
2031 2031
2032bool CalendarView::loadCalendars() 2032bool CalendarView::loadCalendars()
2033{ 2033{
2034 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2034 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2035 KopiCalendarFile * cal = calendars.first(); 2035 KopiCalendarFile * cal = calendars.first();
2036 mCalendar->setDefaultCalendar( 1 ); 2036 mCalendar->setDefaultCalendar( 1 );
2037 openCalendar( MainWindow::defaultFileName(), false ); 2037 openCalendar( MainWindow::defaultFileName(), false );
2038 cal = calendars.next(); 2038 cal = calendars.next();
2039 while ( cal ) { 2039 while ( cal ) {
2040 addCalendar( cal ); 2040 addCalendar( cal );
2041 cal = calendars.next(); 2041 cal = calendars.next();
2042 } 2042 }
2043 restoreCalendarSettings(); 2043 restoreCalendarSettings();
2044 return true; 2044 return true;
2045} 2045}
2046bool CalendarView::restoreCalendarSettings() 2046bool CalendarView::restoreCalendarSettings()
2047{ 2047{
2048 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2048 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2049 KopiCalendarFile * cal = calendars.first(); 2049 KopiCalendarFile * cal = calendars.first();
2050 while ( cal ) { 2050 while ( cal ) {
2051 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2051 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2052 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2052 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2053 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2053 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2054 if ( cal->isStandard ) 2054 if ( cal->isStandard )
2055 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2055 mCalendar->setDefaultCalendar( cal->mCalNumber );
2056 cal = calendars.next(); 2056 cal = calendars.next();
2057 } 2057 }
2058 setSyncEventsReadOnly(); 2058 setSyncEventsReadOnly();
2059 mCalendar->reInitAlarmSettings(); 2059 mCalendar->reInitAlarmSettings();
2060 updateUnmanagedViews(); 2060 updateUnmanagedViews();
2061 updateView(); 2061 updateView();
2062 return true; 2062 return true;
2063} 2063}
2064void CalendarView::addCalendarId( int id ) 2064void CalendarView::addCalendarId( int id )
2065{ 2065{
2066 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2066 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2067 if ( cal ) 2067 if ( cal )
2068 addCalendar( cal ); 2068 addCalendar( cal );
2069} 2069}
2070bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2070bool CalendarView::addCalendar( KopiCalendarFile * cal )
2071{ 2071{
2072 cal->mErrorOnLoad = false; 2072 cal->mErrorOnLoad = false;
2073 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2073 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2074 cal->mLoadDt = QDateTime::currentDateTime(); 2074 cal->mLoadDt = QDateTime::currentDateTime();
2075 return true; 2075 return true;
2076 } 2076 }
2077 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2077 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2078 cal->mErrorOnLoad = true; 2078 cal->mErrorOnLoad = true;
2079 return false; 2079 return false;
2080} 2080}
2081bool CalendarView::openCalendar(QString filename, bool merge) 2081bool CalendarView::openCalendar(QString filename, bool merge)
2082{ 2082{
2083 2083
2084 if (filename.isEmpty()) { 2084 if (filename.isEmpty()) {
2085 return false; 2085 return false;
2086 } 2086 }
2087 2087
2088 if (!QFile::exists(filename)) { 2088 if (!QFile::exists(filename)) {
2089 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2089 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2090 return false; 2090 return false;
2091 } 2091 }
2092 2092
2093 globalFlagBlockAgenda = 1; 2093 globalFlagBlockAgenda = 1;
2094 clearAllViews(); 2094 clearAllViews();
2095 if (!merge) { 2095 if (!merge) {
2096 mViewManager->setDocumentId( filename ); 2096 mViewManager->setDocumentId( filename );
2097 mCalendar->close(); 2097 mCalendar->close();
2098 } 2098 }
2099 mStorage->setFileName( filename ); 2099 mStorage->setFileName( filename );
2100 2100
2101 if ( mStorage->load() ) { 2101 if ( mStorage->load() ) {
2102 if ( merge ) ;//setModified( true ); 2102 if ( merge ) ;//setModified( true );
2103 else { 2103 else {
2104 //setModified( true ); 2104 //setModified( true );
2105 mViewManager->setDocumentId( filename ); 2105 mViewManager->setDocumentId( filename );
2106 mDialogManager->setDocumentId( filename ); 2106 mDialogManager->setDocumentId( filename );
2107 mTodoList->setDocumentId( filename ); 2107 mTodoList->setDocumentId( filename );
2108 } 2108 }
2109 globalFlagBlockAgenda = 2; 2109 globalFlagBlockAgenda = 2;
2110 // if ( getLastSyncEvent() ) 2110 // if ( getLastSyncEvent() )
2111 // getLastSyncEvent()->setReadOnly( true ); 2111 // getLastSyncEvent()->setReadOnly( true );
2112 mCalendar->reInitAlarmSettings(); 2112 mCalendar->reInitAlarmSettings();
2113 setSyncEventsReadOnly(); 2113 setSyncEventsReadOnly();
2114 updateUnmanagedViews(); 2114 updateUnmanagedViews();
2115 updateView(); 2115 updateView();
2116 if ( filename != MainWindow::defaultFileName() ) { 2116 if ( filename != MainWindow::defaultFileName() ) {
2117 saveCalendar( MainWindow::defaultFileName() ); 2117 saveCalendar( MainWindow::defaultFileName() );
2118 } else { 2118 } else {
2119 QFileInfo finf ( MainWindow::defaultFileName()); 2119 QFileInfo finf ( MainWindow::defaultFileName());
2120 if ( finf.exists() ) { 2120 if ( finf.exists() ) {
2121 setLoadedFileVersion( finf.lastModified () ); 2121 setLoadedFileVersion( finf.lastModified () );
2122 } 2122 }
2123 } 2123 }
2124 return true; 2124 return true;
2125 } else { 2125 } else {
2126 // while failing to load, the calendar object could 2126 // while failing to load, the calendar object could
2127 // have become partially populated. Clear it out. 2127 // have become partially populated. Clear it out.
2128 if ( !merge ) { 2128 if ( !merge ) {
2129 mCalendar->close(); 2129 mCalendar->close();
2130 mViewManager->setDocumentId( filename ); 2130 mViewManager->setDocumentId( filename );
2131 mDialogManager->setDocumentId( filename ); 2131 mDialogManager->setDocumentId( filename );
2132 mTodoList->setDocumentId( filename ); 2132 mTodoList->setDocumentId( filename );
2133 } 2133 }
2134 2134
2135 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2135 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2136 2136
2137 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2137 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2138 globalFlagBlockAgenda = 2; 2138 globalFlagBlockAgenda = 2;
2139 mCalendar->reInitAlarmSettings(); 2139 mCalendar->reInitAlarmSettings();
2140 setSyncEventsReadOnly(); 2140 setSyncEventsReadOnly();
2141 updateUnmanagedViews(); 2141 updateUnmanagedViews();
2142 updateView(); 2142 updateView();
2143 } 2143 }
2144 return false; 2144 return false;
2145} 2145}
2146void CalendarView::showOpenError() 2146void CalendarView::showOpenError()
2147{ 2147{
2148 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2148 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2149} 2149}
2150void CalendarView::setLoadedFileVersion(QDateTime dt) 2150void CalendarView::setLoadedFileVersion(QDateTime dt)
2151{ 2151{
2152 loadedFileVersion = dt; 2152 loadedFileVersion = dt;
2153} 2153}
2154bool CalendarView::checkFileChanged(QString fn) 2154bool CalendarView::checkFileChanged(QString fn)
2155{ 2155{
2156 QFileInfo finf ( fn ); 2156 QFileInfo finf ( fn );
2157 if ( !finf.exists() ) 2157 if ( !finf.exists() )
2158 return true; 2158 return true;
2159 QDateTime dt = finf.lastModified (); 2159 QDateTime dt = finf.lastModified ();
2160 if ( dt <= loadedFileVersion ) 2160 if ( dt <= loadedFileVersion )
2161 return false; 2161 return false;
2162 return true; 2162 return true;
2163 2163
2164} 2164}
2165void CalendarView::watchSavedFile() 2165void CalendarView::watchSavedFile()
2166{ 2166{
2167 QFileInfo finf ( MainWindow::defaultFileName()); 2167 QFileInfo finf ( MainWindow::defaultFileName());
2168 if ( !finf.exists() ) 2168 if ( !finf.exists() )
2169 return; 2169 return;
2170 QDateTime dt = finf.lastModified (); 2170 QDateTime dt = finf.lastModified ();
2171 if ( dt < loadedFileVersion ) { 2171 if ( dt < loadedFileVersion ) {
2172 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2172 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2173 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2173 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2174 return; 2174 return;
2175 } 2175 }
2176 loadedFileVersion = dt; 2176 loadedFileVersion = dt;
2177} 2177}
2178bool CalendarView::checkAllFileVersions() 2178bool CalendarView::checkAllFileVersions()
2179{ 2179{
2180 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2180 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2181 KopiCalendarFile * cal = calendars.first(); 2181 KopiCalendarFile * cal = calendars.first();
2182 mCalendar->setDefaultCalendar( 1 ); 2182 mCalendar->setDefaultCalendar( 1 );
2183 mCalendar->setDefaultCalendarEnabledOnly(); 2183 mCalendar->setDefaultCalendarEnabledOnly();
2184 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2184 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2185 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2185 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2186 restoreCalendarSettings(); 2186 restoreCalendarSettings();
2187 return false; 2187 return false;
2188 } 2188 }
2189 } 2189 }
2190 cal = calendars.next(); 2190 cal = calendars.next();
2191 QDateTime storeTemp = loadedFileVersion; 2191 QDateTime storeTemp = loadedFileVersion;
2192 while ( cal ) { 2192 while ( cal ) {
2193 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2193 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2194 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2194 mCalendar->setDefaultCalendar( cal->mCalNumber );
2195 mCalendar->setDefaultCalendarEnabledOnly(); 2195 mCalendar->setDefaultCalendarEnabledOnly();
2196 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2196 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2197 if ( !checkFileVersion(cal->mFileName )) { 2197 if ( !checkFileVersion(cal->mFileName )) {
2198 loadedFileVersion = storeTemp; 2198 loadedFileVersion = storeTemp;
2199 restoreCalendarSettings(); 2199 restoreCalendarSettings();
2200 return false; 2200 return false;
2201 } 2201 }
2202 } 2202 }
2203 cal = calendars.next(); 2203 cal = calendars.next();
2204 } 2204 }
2205 loadedFileVersion = storeTemp; 2205 loadedFileVersion = storeTemp;
2206 return true; 2206 return true;
2207} 2207}
2208bool CalendarView::checkFileVersion(QString fn) 2208bool CalendarView::checkFileVersion(QString fn)
2209{ 2209{
2210 QFileInfo finf ( fn ); 2210 QFileInfo finf ( fn );
2211 if ( !finf.exists() ) 2211 if ( !finf.exists() )
2212 return true; 2212 return true;
2213 QDateTime dt = finf.lastModified (); 2213 QDateTime dt = finf.lastModified ();
2214 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2214 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2215 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2215 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2216 if ( dt <= loadedFileVersion ) 2216 if ( dt <= loadedFileVersion )
2217 return true; 2217 return true;
2218 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)) , 2218 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)) ,
2219 i18n("KO/Pi Warning"),i18n("Overwrite"), 2219 i18n("KO/Pi Warning"),i18n("Overwrite"),
2220 i18n("Sync+save")); 2220 i18n("Sync+save"));
2221 2221
2222 if ( km == KMessageBox::Cancel ) 2222 if ( km == KMessageBox::Cancel )
2223 return false; 2223 return false;
2224 if ( km == KMessageBox::Yes ) 2224 if ( km == KMessageBox::Yes )
2225 return true; 2225 return true;
2226 2226
2227 setSyncDevice("deleteaftersync" ); 2227 setSyncDevice("deleteaftersync" );
2228 mSyncManager->mAskForPreferences = true; 2228 mSyncManager->mAskForPreferences = true;
2229 mSyncManager->mSyncAlgoPrefs = 3; 2229 mSyncManager->mSyncAlgoPrefs = 3;
2230 mSyncManager->mWriteBackFile = false; 2230 mSyncManager->mWriteBackFile = false;
2231 mSyncManager->mWriteBackExistingOnly = false; 2231 mSyncManager->mWriteBackExistingOnly = false;
2232 mSyncManager->mShowSyncSummary = false; 2232 mSyncManager->mShowSyncSummary = false;
2233 syncCalendar( fn, 3 ); 2233 syncCalendar( fn, 3 );
2234 Event * e = getLastSyncEvent(); 2234 Event * e = getLastSyncEvent();
2235 if ( e ) 2235 if ( e )
2236 mCalendar->deleteEvent( e ); 2236 mCalendar->deleteEvent( e );
2237 return true; 2237 return true;
2238} 2238}
2239bool CalendarView::saveCalendars() 2239bool CalendarView::saveCalendars()
2240{ 2240{
2241 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2241 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2242 KopiCalendarFile * cal = calendars.first(); 2242 KopiCalendarFile * cal = calendars.first();
2243 mCalendar->setDefaultCalendar( 1 ); 2243 mCalendar->setDefaultCalendar( 1 );
2244 mCalendar->setDefaultCalendarEnabledOnly(); 2244 mCalendar->setDefaultCalendarEnabledOnly();
2245 saveCalendar( MainWindow::defaultFileName() ); 2245 saveCalendar( MainWindow::defaultFileName() );
2246 cal = calendars.next(); 2246 cal = calendars.next();
2247 while ( cal ) { 2247 while ( cal ) {
2248 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2248 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2249 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2249 mCalendar->setDefaultCalendar( cal->mCalNumber );
2250 mCalendar->setDefaultCalendarEnabledOnly(); 2250 mCalendar->setDefaultCalendarEnabledOnly();
2251 if ( saveCalendar( cal->mFileName ) ) 2251 if ( saveCalendar( cal->mFileName ) )
2252 cal->mLoadDt = QDateTime::currentDateTime(); 2252 cal->mLoadDt = QDateTime::currentDateTime();
2253 } 2253 }
2254 cal = calendars.next(); 2254 cal = calendars.next();
2255 } 2255 }
2256 restoreCalendarSettings(); 2256 restoreCalendarSettings();
2257 return true; 2257 return true;
2258} 2258}
2259bool CalendarView::saveCalendar( QString filename ) 2259bool CalendarView::saveCalendar( QString filename )
2260{ 2260{
2261 2261
2262 // Store back all unsaved data into calendar object 2262 // Store back all unsaved data into calendar object
2263 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2263 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2264 if ( mViewManager->currentView() ) 2264 if ( mViewManager->currentView() )
2265 mViewManager->currentView()->flushView(); 2265 mViewManager->currentView()->flushView();
2266 2266
2267 2267
2268 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2268 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2269 mStorage->setSaveFormat( new ICalFormat() ); 2269 mStorage->setSaveFormat( new ICalFormat() );
2270 mStorage->setFileName( filename ); 2270 mStorage->setFileName( filename );
2271 bool success; 2271 bool success;
2272 success = mStorage->save(); 2272 success = mStorage->save();
2273 if ( !success ) { 2273 if ( !success ) {
2274 return false; 2274 return false;
2275 } 2275 }
2276 if ( filename == MainWindow::defaultFileName() ) { 2276 if ( filename == MainWindow::defaultFileName() ) {
2277 setLoadedFileVersion( lfv ); 2277 setLoadedFileVersion( lfv );
2278 watchSavedFile(); 2278 watchSavedFile();
2279 } 2279 }
2280 return true; 2280 return true;
2281} 2281}
2282 2282
2283void CalendarView::closeCalendar() 2283void CalendarView::closeCalendar()
2284{ 2284{
2285 2285
2286 // child windows no longer valid 2286 // child windows no longer valid
2287 clearAllViews(); 2287 clearAllViews();
2288 emit closingDown(); 2288 emit closingDown();
2289 2289
2290 mCalendar->close(); 2290 mCalendar->close();
2291 setModified(false); 2291 setModified(false);
2292 updateView(); 2292 updateView();
2293} 2293}
2294 2294
2295void CalendarView::archiveCalendar() 2295void CalendarView::archiveCalendar()
2296{ 2296{
2297 mDialogManager->showArchiveDialog(); 2297 mDialogManager->showArchiveDialog();
2298} 2298}
2299 2299
2300 2300
2301void CalendarView::readSettings() 2301void CalendarView::readSettings()
2302{ 2302{
2303 2303
2304 2304
2305 // mViewManager->showAgendaView(); 2305 // mViewManager->showAgendaView();
2306 QString str; 2306 QString str;
2307 //qDebug("CalendarView::readSettings() "); 2307 //qDebug("CalendarView::readSettings() ");
2308 // read settings from the KConfig, supplying reasonable 2308 // read settings from the KConfig, supplying reasonable
2309 // defaults where none are to be found 2309 // defaults where none are to be found
2310 KConfig *config = KOGlobals::config(); 2310 KConfig *config = KOGlobals::config();
2311#ifndef KORG_NOSPLITTER 2311#ifndef KORG_NOSPLITTER
2312 config->setGroup("KOrganizer Geometry"); 2312 config->setGroup("KOrganizer Geometry");
2313 2313
2314 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2314 QValueList<int> sizes = config->readIntListEntry("Separator1");
2315 if (sizes.count() != 2) { 2315 if (sizes.count() != 2) {
2316 sizes << mDateNavigator->minimumSizeHint().width(); 2316 sizes << mDateNavigator->minimumSizeHint().width();
2317 sizes << 300; 2317 sizes << 300;
2318 } 2318 }
2319 mPanner->setSizes(sizes); 2319 mPanner->setSizes(sizes);
2320 2320
2321 sizes = config->readIntListEntry("Separator2"); 2321 sizes = config->readIntListEntry("Separator2");
2322 if ( ( mResourceView && sizes.count() == 4 ) || 2322 if ( ( mResourceView && sizes.count() == 4 ) ||
2323 ( !mResourceView && sizes.count() == 3 ) ) { 2323 ( !mResourceView && sizes.count() == 3 ) ) {
2324 mLeftSplitter->setSizes(sizes); 2324 mLeftSplitter->setSizes(sizes);
2325 } 2325 }
2326#endif 2326#endif
2327 globalFlagBlockAgenda = 1; 2327 globalFlagBlockAgenda = 1;
2328 mViewManager->showAgendaView(); 2328 mViewManager->showAgendaView();
2329 //mViewManager->readSettings( config ); 2329 //mViewManager->readSettings( config );
2330 mTodoList->restoreLayout(config,QString("Todo Layout")); 2330 mTodoList->restoreLayout(config,QString("Todo Layout"));
2331 readFilterSettings(config); 2331 readFilterSettings(config);
2332 2332
2333#ifdef DESKTOP_VERSION 2333#ifdef DESKTOP_VERSION
2334 config->setGroup("WidgetLayout"); 2334 config->setGroup("WidgetLayout");
2335 QStringList list; 2335 QStringList list;
2336 list = config->readListEntry("MainLayout"); 2336 list = config->readListEntry("MainLayout");
2337 int x,y,w,h; 2337 int x,y,w,h;
2338 if ( ! list.isEmpty() ) { 2338 if ( ! list.isEmpty() ) {
2339 x = list[0].toInt(); 2339 x = list[0].toInt();
2340 y = list[1].toInt(); 2340 y = list[1].toInt();
2341 w = list[2].toInt(); 2341 w = list[2].toInt();
2342 h = list[3].toInt(); 2342 h = list[3].toInt();
2343 KApplication::testCoords( &x,&y,&w,&h ); 2343 KApplication::testCoords( &x,&y,&w,&h );
2344 topLevelWidget()->setGeometry(x,y,w,h); 2344 topLevelWidget()->setGeometry(x,y,w,h);
2345 2345
2346 } else { 2346 } else {
2347 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2347 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2348 } 2348 }
2349 list = config->readListEntry("EditEventLayout"); 2349 list = config->readListEntry("EditEventLayout");
2350 if ( ! list.isEmpty() ) { 2350 if ( ! list.isEmpty() ) {
2351 x = list[0].toInt(); 2351 x = list[0].toInt();
2352 y = list[1].toInt(); 2352 y = list[1].toInt();
2353 w = list[2].toInt(); 2353 w = list[2].toInt();
2354 h = list[3].toInt(); 2354 h = list[3].toInt();
2355 KApplication::testCoords( &x,&y,&w,&h ); 2355 KApplication::testCoords( &x,&y,&w,&h );
2356 mEventEditor->setGeometry(x,y,w,h); 2356 mEventEditor->setGeometry(x,y,w,h);
2357 2357
2358 } 2358 }
2359 list = config->readListEntry("EditTodoLayout"); 2359 list = config->readListEntry("EditTodoLayout");
2360 if ( ! list.isEmpty() ) { 2360 if ( ! list.isEmpty() ) {
2361 x = list[0].toInt(); 2361 x = list[0].toInt();
2362 y = list[1].toInt(); 2362 y = list[1].toInt();
2363 w = list[2].toInt(); 2363 w = list[2].toInt();
2364 h = list[3].toInt(); 2364 h = list[3].toInt();
2365 KApplication::testCoords( &x,&y,&w,&h ); 2365 KApplication::testCoords( &x,&y,&w,&h );
2366 mTodoEditor->setGeometry(x,y,w,h); 2366 mTodoEditor->setGeometry(x,y,w,h);
2367 2367
2368 } 2368 }
2369 list = config->readListEntry("ViewerLayout"); 2369 list = config->readListEntry("ViewerLayout");
2370 if ( ! list.isEmpty() ) { 2370 if ( ! list.isEmpty() ) {
2371 x = list[0].toInt(); 2371 x = list[0].toInt();
2372 y = list[1].toInt(); 2372 y = list[1].toInt();
2373 w = list[2].toInt(); 2373 w = list[2].toInt();
2374 h = list[3].toInt(); 2374 h = list[3].toInt();
2375 KApplication::testCoords( &x,&y,&w,&h ); 2375 KApplication::testCoords( &x,&y,&w,&h );
2376 getEventViewerDialog()->setGeometry(x,y,w,h); 2376 getEventViewerDialog()->setGeometry(x,y,w,h);
2377 } 2377 }
2378#endif 2378#endif
2379 config->setGroup( "Views" ); 2379 config->setGroup( "Views" );
2380 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2380 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2381 2381
2382 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2382 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2383 2383
2384 int resetval = 0; 2384 int resetval = 0;
2385 int maxVal = 0; 2385 int maxVal = 0;
2386 if (sizes.count() != 3) { 2386 if (sizes.count() != 3) {
2387 if ( KOPrefs::instance()->mVerticalScreen ) { 2387 if ( KOPrefs::instance()->mVerticalScreen ) {
2388 resetval = mDateNavigator->sizeHint().width()+2; 2388 resetval = mDateNavigator->sizeHint().width()+2;
2389 } else { 2389 } else {
2390 resetval = mDateNavigator->sizeHint().height()+2; 2390 resetval = mDateNavigator->sizeHint().height()+2;
2391 } 2391 }
2392 } 2392 }
2393 if ( resetval ) { 2393 if ( resetval ) {
2394 sizes.clear(); 2394 sizes.clear();
2395 if ( KOPrefs::instance()->mVerticalScreen ) { 2395 if ( KOPrefs::instance()->mVerticalScreen ) {
2396 maxVal = QApplication::desktop()->width() -10; 2396 maxVal = QApplication::desktop()->width() -10;
2397 } else { 2397 } else {
2398 maxVal = QApplication::desktop()->height()-10; 2398 maxVal = QApplication::desktop()->height()-10;
2399 } 2399 }
2400 sizes << resetval; 2400 sizes << resetval;
2401 if ( maxVal < resetval + resetval) 2401 if ( maxVal < resetval + resetval)
2402 resetval = maxVal - resetval; 2402 resetval = maxVal - resetval;
2403 sizes << resetval; 2403 sizes << resetval;
2404 sizes << 100; 2404 sizes << 100;
2405 } 2405 }
2406 mLeftFrame->setSizes(sizes); 2406 mLeftFrame->setSizes(sizes);
2407 sizes = config->readIntListEntry("Main Splitter Frame"); 2407 sizes = config->readIntListEntry("Main Splitter Frame");
2408 resetval = 0; 2408 resetval = 0;
2409 maxVal = 0; 2409 maxVal = 0;
2410 if (sizes.count() != 2) { 2410 if (sizes.count() != 2) {
2411 if ( !KOPrefs::instance()->mVerticalScreen ) { 2411 if ( !KOPrefs::instance()->mVerticalScreen ) {
2412 resetval = mDateNavigator->sizeHint().width()+2; 2412 resetval = mDateNavigator->sizeHint().width()+2;
2413 } else { 2413 } else {
2414 resetval = mDateNavigator->sizeHint().height()+2; 2414 resetval = mDateNavigator->sizeHint().height()+2;
2415 } 2415 }
2416 } 2416 }
2417 if ( resetval ) { 2417 if ( resetval ) {
2418 sizes.clear(); 2418 sizes.clear();
2419 if ( !KOPrefs::instance()->mVerticalScreen ) { 2419 if ( !KOPrefs::instance()->mVerticalScreen ) {
2420 maxVal = QApplication::desktop()->width() -10; 2420 maxVal = QApplication::desktop()->width() -10;
2421 } else { 2421 } else {
2422 maxVal = QApplication::desktop()->height()-10; 2422 maxVal = QApplication::desktop()->height()-10;
2423 } 2423 }
2424 sizes << resetval; 2424 sizes << resetval;
2425 if ( maxVal < resetval + resetval) 2425 if ( maxVal < resetval + resetval)
2426 resetval = maxVal - resetval; 2426 resetval = maxVal - resetval;
2427 sizes << resetval; 2427 sizes << resetval;
2428 } 2428 }
2429 mMainFrame->setSizes(sizes); 2429 mMainFrame->setSizes(sizes);
2430 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2430 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2431 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2431 else if ( dateCount == 7 ) mNavigator->selectWeek();
2432 else mNavigator->selectDates( dateCount ); 2432 else mNavigator->selectDates( dateCount );
2433 // mViewManager->readSettings( config ); 2433 // mViewManager->readSettings( config );
2434 updateConfig(); 2434 updateConfig();
2435 globalFlagBlockAgenda = 2; 2435 globalFlagBlockAgenda = 2;
2436 mViewManager->readSettings( config ); 2436 mViewManager->readSettings( config );
2437 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2437 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2438} 2438}
2439 2439
2440void CalendarView::checkSuspendAlarm() 2440void CalendarView::checkSuspendAlarm()
2441{ 2441{
2442 if ( mSuspendTimer->isActive() ) { 2442 if ( mSuspendTimer->isActive() ) {
2443 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2443 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2444 } 2444 }
2445} 2445}
2446void CalendarView::writeSettings() 2446void CalendarView::writeSettings()
2447{ 2447{
2448 // kdDebug() << "CalendarView::writeSettings" << endl; 2448 // kdDebug() << "CalendarView::writeSettings" << endl;
2449 2449
2450 KConfig *config = KOGlobals::config(); 2450 KConfig *config = KOGlobals::config();
2451 2451
2452 mViewManager->writeSettings( config ); 2452 mViewManager->writeSettings( config );
2453 mTodoList->saveLayout(config,QString("Todo Layout")); 2453 mTodoList->saveLayout(config,QString("Todo Layout"));
2454 mDialogManager->writeSettings( config ); 2454 mDialogManager->writeSettings( config );
2455 //KOPrefs::instance()->usrWriteConfig(); 2455 //KOPrefs::instance()->usrWriteConfig();
2456 KOPrefs::instance()->writeConfig(); 2456 KOPrefs::instance()->writeConfig();
2457 2457
2458 writeFilterSettings(config); 2458 writeFilterSettings(config);
2459 config->setGroup( "AppRun" ); 2459 config->setGroup( "AppRun" );
2460 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2460 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2461 int days = dt.daysTo( QDate::currentDate() ); 2461 int days = dt.daysTo( QDate::currentDate() );
2462 dt = dt.addDays( days ); 2462 dt = dt.addDays( days );
2463 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2463 int secs = dt.secsTo( QDateTime::currentDateTime() );
2464 config->writeEntry( "LatestProgramStopDays", days ); 2464 config->writeEntry( "LatestProgramStopDays", days );
2465 config->writeEntry( "LatestProgramStopSecs", secs ); 2465 config->writeEntry( "LatestProgramStopSecs", secs );
2466 //qDebug("KO: Writing stop time: %d ", secs); 2466 //qDebug("KO: Writing stop time: %d ", secs);
2467 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2467 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2468 //QDateTime latest = dt.addSecs ( secs ); 2468 //QDateTime latest = dt.addSecs ( secs );
2469 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2469 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2470 config->setGroup( "Views" ); 2470 config->setGroup( "Views" );
2471 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2471 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2472 2472
2473#if 0 2473#if 0
2474 qDebug("********************* "); 2474 qDebug("********************* ");
2475 qDebug("Testcode secsto "); 2475 qDebug("Testcode secsto ");
2476 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2476 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2477 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2477 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2478 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2478 int secsto = dt_nodaylight.secsTo( dt_daylight );
2479 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2479 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2480 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2480 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2481 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2481 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2482 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2482 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2483 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2483 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2484 qDebug("********************* testcode end"); 2484 qDebug("********************* testcode end");
2485 2485
2486#endif 2486#endif
2487 2487
2488 QValueList<int> listINT = mLeftFrame->sizes(); 2488 QValueList<int> listINT = mLeftFrame->sizes();
2489 config->writeEntry("Left Splitter Frame",listINT); 2489 config->writeEntry("Left Splitter Frame",listINT);
2490 QValueList<int> listINT2 = mMainFrame->sizes(); 2490 QValueList<int> listINT2 = mMainFrame->sizes();
2491 config->writeEntry("Main Splitter Frame",listINT2); 2491 config->writeEntry("Main Splitter Frame",listINT2);
2492#ifdef DESKTOP_VERSION 2492#ifdef DESKTOP_VERSION
2493 config->setGroup("WidgetLayout"); 2493 config->setGroup("WidgetLayout");
2494 QStringList list ;//= config->readListEntry("MainLayout"); 2494 QStringList list ;//= config->readListEntry("MainLayout");
2495 int x,y,w,h; 2495 int x,y,w,h;
2496 QWidget* wid; 2496 QWidget* wid;
2497 wid = topLevelWidget(); 2497 wid = topLevelWidget();
2498 x = wid->geometry().x(); 2498 x = wid->geometry().x();
2499 y = wid->geometry().y(); 2499 y = wid->geometry().y();
2500 w = wid->width(); 2500 w = wid->width();
2501 h = wid->height(); 2501 h = wid->height();
2502 list.clear(); 2502 list.clear();
2503 list << QString::number( x ); 2503 list << QString::number( x );
2504 list << QString::number( y ); 2504 list << QString::number( y );
2505 list << QString::number( w ); 2505 list << QString::number( w );
2506 list << QString::number( h ); 2506 list << QString::number( h );
2507 config->writeEntry("MainLayout",list ); 2507 config->writeEntry("MainLayout",list );
2508 2508
2509 wid = mEventEditor; 2509 wid = mEventEditor;
2510 x = wid->geometry().x(); 2510 x = wid->geometry().x();
2511 y = wid->geometry().y(); 2511 y = wid->geometry().y();
2512 w = wid->width(); 2512 w = wid->width();
2513 h = wid->height(); 2513 h = wid->height();
2514 list.clear(); 2514 list.clear();
2515 list << QString::number( x ); 2515 list << QString::number( x );
2516 list << QString::number( y ); 2516 list << QString::number( y );
2517 list << QString::number( w ); 2517 list << QString::number( w );
2518 list << QString::number( h ); 2518 list << QString::number( h );
2519 config->writeEntry("EditEventLayout",list ); 2519 config->writeEntry("EditEventLayout",list );
2520 2520
2521 wid = mTodoEditor; 2521 wid = mTodoEditor;
2522 x = wid->geometry().x(); 2522 x = wid->geometry().x();
2523 y = wid->geometry().y(); 2523 y = wid->geometry().y();
2524 w = wid->width(); 2524 w = wid->width();
2525 h = wid->height(); 2525 h = wid->height();
2526 list.clear(); 2526 list.clear();
2527 list << QString::number( x ); 2527 list << QString::number( x );
2528 list << QString::number( y ); 2528 list << QString::number( y );
2529 list << QString::number( w ); 2529 list << QString::number( w );
2530 list << QString::number( h ); 2530 list << QString::number( h );
2531 config->writeEntry("EditTodoLayout",list ); 2531 config->writeEntry("EditTodoLayout",list );
2532 wid = getEventViewerDialog(); 2532 wid = getEventViewerDialog();
2533 x = wid->geometry().x(); 2533 x = wid->geometry().x();
2534 y = wid->geometry().y(); 2534 y = wid->geometry().y();
2535 w = wid->width(); 2535 w = wid->width();
2536 h = wid->height(); 2536 h = wid->height();
2537 list.clear(); 2537 list.clear();
2538 list << QString::number( x ); 2538 list << QString::number( x );
2539 list << QString::number( y ); 2539 list << QString::number( y );
2540 list << QString::number( w ); 2540 list << QString::number( w );
2541 list << QString::number( h ); 2541 list << QString::number( h );
2542 config->writeEntry("ViewerLayout",list ); 2542 config->writeEntry("ViewerLayout",list );
2543 wid = mDialogManager->getSearchDialog(); 2543 wid = mDialogManager->getSearchDialog();
2544 if ( wid ) { 2544 if ( wid ) {
2545 x = wid->geometry().x(); 2545 x = wid->geometry().x();
2546 y = wid->geometry().y(); 2546 y = wid->geometry().y();
2547 w = wid->width(); 2547 w = wid->width();
2548 h = wid->height(); 2548 h = wid->height();
2549 list.clear(); 2549 list.clear();
2550 list << QString::number( x ); 2550 list << QString::number( x );
2551 list << QString::number( y ); 2551 list << QString::number( y );
2552 list << QString::number( w ); 2552 list << QString::number( w );
2553 list << QString::number( h ); 2553 list << QString::number( h );
2554 config->writeEntry("SearchLayout",list ); 2554 config->writeEntry("SearchLayout",list );
2555 } 2555 }
2556#endif 2556#endif
2557 2557
2558 2558
2559 config->sync(); 2559 config->sync();
2560} 2560}
2561 2561
2562void CalendarView::readFilterSettings(KConfig *config) 2562void CalendarView::readFilterSettings(KConfig *config)
2563{ 2563{
2564 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2564 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2565 2565
2566 mFilters.clear(); 2566 mFilters.clear();
2567 2567
2568 config->setGroup("General"); 2568 config->setGroup("General");
2569 QStringList filterList = config->readListEntry("CalendarFilters"); 2569 QStringList filterList = config->readListEntry("CalendarFilters");
2570 2570
2571 QStringList::ConstIterator it = filterList.begin(); 2571 QStringList::ConstIterator it = filterList.begin();
2572 QStringList::ConstIterator end = filterList.end(); 2572 QStringList::ConstIterator end = filterList.end();
2573 while(it != end) { 2573 while(it != end) {
2574 // kdDebug() << " filter: " << (*it) << endl; 2574 // kdDebug() << " filter: " << (*it) << endl;
2575 2575
2576 CalFilter *filter; 2576 CalFilter *filter;
2577 filter = new CalFilter(*it); 2577 filter = new CalFilter(*it);
2578 config->setGroup("Filter_" + (*it).utf8()); 2578 config->setGroup("Filter_" + (*it).utf8());
2579 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2579 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2580 filter->setCriteria(config->readNumEntry("Criteria",0)); 2580 filter->setCriteria(config->readNumEntry("Criteria",0));
2581 filter->setCategoryList(config->readListEntry("CategoryList")); 2581 filter->setCategoryList(config->readListEntry("CategoryList"));
2582 mFilters.append(filter); 2582 mFilters.append(filter);
2583 2583
2584 ++it; 2584 ++it;
2585 } 2585 }
2586 2586
2587 if (mFilters.count() == 0) { 2587 if (mFilters.count() == 0) {
2588 CalFilter *filter = new CalFilter(i18n("Default")); 2588 CalFilter *filter = new CalFilter(i18n("Default"));
2589 mFilters.append(filter); 2589 mFilters.append(filter);
2590 } 2590 }
2591 mFilterView->updateFilters(); 2591 mFilterView->updateFilters();
2592 config->setGroup("FilterView"); 2592 config->setGroup("FilterView");
2593 2593
2594 mFilterView->blockSignals(true); 2594 mFilterView->blockSignals(true);
2595 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2595 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2596 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2596 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2597 mFilterView->blockSignals(false); 2597 mFilterView->blockSignals(false);
2598 // We do it manually to avoid it being done twice by the above calls 2598 // We do it manually to avoid it being done twice by the above calls
2599 updateFilter(); 2599 updateFilter();
2600} 2600}
2601 2601
2602void CalendarView::writeFilterSettings(KConfig *config) 2602void CalendarView::writeFilterSettings(KConfig *config)
2603{ 2603{
2604 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2604 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2605 2605
2606 QStringList filterList; 2606 QStringList filterList;
2607 2607
2608 CalFilter *filter = mFilters.first(); 2608 CalFilter *filter = mFilters.first();
2609 while(filter) { 2609 while(filter) {
2610 // kdDebug() << " fn: " << filter->name() << endl; 2610 // kdDebug() << " fn: " << filter->name() << endl;
2611 filterList << filter->name(); 2611 filterList << filter->name();
2612 config->setGroup("Filter_" + filter->name().utf8()); 2612 config->setGroup("Filter_" + filter->name().utf8());
2613 config->writeEntry("Criteria",filter->criteria()); 2613 config->writeEntry("Criteria",filter->criteria());
2614 config->writeEntry("CategoryList",filter->categoryList()); 2614 config->writeEntry("CategoryList",filter->categoryList());
2615 filter = mFilters.next(); 2615 filter = mFilters.next();
2616 } 2616 }
2617 config->setGroup("General"); 2617 config->setGroup("General");
2618 config->writeEntry("CalendarFilters",filterList); 2618 config->writeEntry("CalendarFilters",filterList);
2619 2619
2620 config->setGroup("FilterView"); 2620 config->setGroup("FilterView");
2621 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2621 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2622 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2622 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2623} 2623}
2624 2624
2625 2625
2626void CalendarView::goToday() 2626void CalendarView::goToday()
2627{ 2627{
2628 if ( mViewManager->currentView()->isMonthView() ) 2628 if ( mViewManager->currentView()->isMonthView() )
2629 mNavigator->selectTodayMonth(); 2629 mNavigator->selectTodayMonth();
2630 else 2630 else
2631 mNavigator->selectToday(); 2631 mNavigator->selectToday();
2632} 2632}
2633 2633
2634void CalendarView::goNext() 2634void CalendarView::goNext()
2635{ 2635{
2636 mNavigator->selectNext(); 2636 mNavigator->selectNext();
2637} 2637}
2638 2638
2639void CalendarView::goPrevious() 2639void CalendarView::goPrevious()
2640{ 2640{
2641 mNavigator->selectPrevious(); 2641 mNavigator->selectPrevious();
2642} 2642}
2643void CalendarView::goNextMonth() 2643void CalendarView::goNextMonth()
2644{ 2644{
2645 mNavigator->selectNextMonth(); 2645 mNavigator->selectNextMonth();
2646} 2646}
2647 2647
2648void CalendarView::goPreviousMonth() 2648void CalendarView::goPreviousMonth()
2649{ 2649{
2650 mNavigator->selectPreviousMonth(); 2650 mNavigator->selectPreviousMonth();
2651} 2651}
2652 2652
2653void CalendarView::updateConfig() 2653void CalendarView::updateConfig()
2654{ 2654{
2655 if ( KOPrefs::instance()->mUseAppColors ) 2655 if ( KOPrefs::instance()->mUseAppColors )
2656 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2656 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2657 emit configChanged(); 2657 emit configChanged();
2658 mTodoList->updateConfig(); 2658 mTodoList->updateConfig();
2659 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2659 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2660 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2660 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2661 // To make the "fill window" configurations work 2661 // To make the "fill window" configurations work
2662 //mViewManager->raiseCurrentView(); 2662 //mViewManager->raiseCurrentView();
2663} 2663}
2664 2664
2665 2665
2666void CalendarView::eventChanged(Event *event) 2666void CalendarView::eventChanged(Event *event)
2667{ 2667{
2668 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2668 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2669 //updateUnmanagedViews(); 2669 //updateUnmanagedViews();
2670} 2670}
2671 2671
2672void CalendarView::eventAdded(Event *event) 2672void CalendarView::eventAdded(Event *event)
2673{ 2673{
2674 changeEventDisplay(event,KOGlobals::EVENTADDED); 2674 changeEventDisplay(event,KOGlobals::EVENTADDED);
2675} 2675}
2676 2676
2677void CalendarView::eventToBeDeleted(Event *) 2677void CalendarView::eventToBeDeleted(Event *)
2678{ 2678{
2679 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2679 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2680} 2680}
2681 2681
2682void CalendarView::eventDeleted() 2682void CalendarView::eventDeleted()
2683{ 2683{
2684 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2684 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2685} 2685}
2686void CalendarView::changeTodoDisplay(Todo *which, int action) 2686void CalendarView::changeTodoDisplay(Todo *which, int action)
2687{ 2687{
2688 changeIncidenceDisplay((Incidence *)which, action); 2688 changeIncidenceDisplay((Incidence *)which, action);
2689 mDateNavigator->updateView(); //LR 2689 mDateNavigator->updateView(); //LR
2690 //mDialogManager->updateSearchDialog(); 2690 //mDialogManager->updateSearchDialog();
2691 2691
2692 if (which) { 2692 if (which) {
2693 mViewManager->updateWNview(); 2693 mViewManager->updateWNview();
2694 //mTodoList->updateView(); 2694 //mTodoList->updateView();
2695 } 2695 }
2696 2696
2697} 2697}
2698 2698
2699void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2699void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2700{ 2700{
2701 updateUnmanagedViews(); 2701 updateUnmanagedViews();
2702 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2702 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2703 if ( action == KOGlobals::EVENTDELETED ) { //delete 2703 if ( action == KOGlobals::EVENTDELETED ) { //delete
2704 mCalendar->checkAlarmForIncidence( 0, true ); 2704 mCalendar->checkAlarmForIncidence( 0, true );
2705 if ( mEventViewerDialog ) 2705 if ( mEventViewerDialog )
2706 mEventViewerDialog->hide(); 2706 mEventViewerDialog->hide();
2707 } 2707 }
2708 else 2708 else
2709 mCalendar->checkAlarmForIncidence( which , false ); 2709 mCalendar->checkAlarmForIncidence( which , false );
2710} 2710}
2711 2711
2712// most of the changeEventDisplays() right now just call the view's 2712// most of the changeEventDisplays() right now just call the view's
2713// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2713// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2714void CalendarView::changeEventDisplay(Event *which, int action) 2714void CalendarView::changeEventDisplay(Event *which, int action)
2715{ 2715{
2716 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2716 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2717 changeIncidenceDisplay((Incidence *)which, action); 2717 changeIncidenceDisplay((Incidence *)which, action);
2718 static bool clearallviews = false; 2718 static bool clearallviews = false;
2719 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2719 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2720 if ( clearallviews ) { 2720 if ( clearallviews ) {
2721 clearAllViews(); 2721 clearAllViews();
2722 clearallviews = false; 2722 clearallviews = false;
2723 } 2723 }
2724 return; 2724 return;
2725 } 2725 }
2726 clearallviews = true; 2726 clearallviews = true;
2727 mDateNavigator->updateView(); 2727 mDateNavigator->updateView();
2728 //mDialogManager->updateSearchDialog(); 2728 //mDialogManager->updateSearchDialog();
2729 if (which) { 2729 if (which) {
2730 // If there is an event view visible update the display 2730 // If there is an event view visible update the display
2731 mViewManager->currentView()->changeEventDisplay(which,action); 2731 mViewManager->currentView()->changeEventDisplay(which,action);
2732 // TODO: check, if update needed 2732 // TODO: check, if update needed
2733 // if (which->getTodoStatus()) { 2733 // if (which->getTodoStatus()) {
2734 mTodoList->updateView(); 2734 mTodoList->updateView();
2735 if ( action != KOGlobals::EVENTDELETED ) { 2735 if ( action != KOGlobals::EVENTDELETED ) {
2736 mConflictingEvent = which ; 2736 mConflictingEvent = which ;
2737 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); 2737 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) );
2738 } 2738 }
2739 // } 2739 // }
2740 } else { 2740 } else {
2741 mViewManager->currentView()->updateView(); 2741 mViewManager->currentView()->updateView();
2742 } 2742 }
2743} 2743}
2744void CalendarView::checkConflictForEvent() 2744void CalendarView::checkConflictForEvent()
2745{ 2745{
2746 2746
2747 if (!KOPrefs::instance()->mConfirm) 2747 if (!KOPrefs::instance()->mConfirm)
2748 return; 2748 return;
2749 if ( ! mConflictingEvent ) return; 2749 if ( ! mConflictingEvent ) return;
2750 if ( mConflictingEvent->isHoliday() || mConflictingEvent->isBirthday() || mConflictingEvent->isAnniversary() ) { 2750 if ( mConflictingEvent->isHoliday() || mConflictingEvent->isBirthday() || mConflictingEvent->isAnniversary() ) {
2751 mConflictingEvent = 0; 2751 mConflictingEvent = 0;
2752 return; 2752 return;
2753 } 2753 }
2754 QPtrList<Event> testlist = mCalendar->events(); 2754 QPtrList<Event> testlist = mCalendar->events();
2755 Event * test = testlist.first(); 2755 Event * test = testlist.first();
2756 QDateTime conflict; 2756 QDateTime conflict;
2757 QDateTime retVal; 2757 QDateTime retVal;
2758 bool found = false; 2758 bool found = false;
2759 Event * cE = 0; 2759 Event * cE = 0;
2760 QDateTime current = QDateTime::currentDateTime(); 2760 QDateTime current = QDateTime::currentDateTime();
2761 while ( test ) { 2761 while ( test ) {
2762 if ( !test->doesFloat() ) { 2762 if ( !test->doesFloat() ) {
2763 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 2763 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
2764 if ( ! found ) { 2764 if ( ! found ) {
2765 conflict = retVal; 2765 conflict = retVal;
2766 cE = test; 2766 cE = test;
2767 } else { 2767 } else {
2768 if ( retVal < conflict ) { 2768 if ( retVal < conflict ) {
2769 conflict = retVal; 2769 conflict = retVal;
2770 cE = test; 2770 cE = test;
2771 } 2771 }
2772 } 2772 }
2773 found = true; 2773 found = true;
2774 } 2774 }
2775 } 2775 }
2776 test = testlist.next(); 2776 test = testlist.next();
2777 } 2777 }
2778 if ( found ) { 2778 if ( found ) {
2779 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()) ) ; 2779 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()) ) ;
2780 qApp->processEvents(); 2780 qApp->processEvents();
2781 int km = KMessageBox::warningContinueCancel(this,mess, 2781 int km = KMessageBox::warningContinueCancel(this,mess,
2782 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 2782 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
2783 if ( km != KMessageBox::Continue ) 2783 if ( km != KMessageBox::Continue )
2784 return; 2784 return;
2785 2785
2786 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 2786 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
2787 mViewManager->showDayView(); 2787 mViewManager->showDayView();
2788 mNavigator->slotDaySelect( conflict.date() ); 2788 mNavigator->slotDaySelect( conflict.date() );
2789 int hour = conflict.time().hour(); 2789 int hour = conflict.time().hour();
2790 mViewManager->agendaView()->setStartHour( hour ); 2790 mViewManager->agendaView()->setStartHour( hour );
2791 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 2791 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
2792 } 2792 }
2793 mConflictingEvent = 0; 2793 mConflictingEvent = 0;
2794 return; 2794 return;
2795 2795
2796} 2796}
2797 2797
2798void CalendarView::updateTodoViews() 2798void CalendarView::updateTodoViews()
2799{ 2799{
2800 mTodoList->updateView(); 2800 mTodoList->updateView();
2801 mViewManager->currentView()->updateView(); 2801 mViewManager->currentView()->updateView();
2802 2802
2803} 2803}
2804 2804
2805 2805
2806 2806
2807void CalendarView::clearAllViews() 2807void CalendarView::clearAllViews()
2808{ 2808{
2809 mTodoList->clearList(); 2809 mTodoList->clearList();
2810 mViewManager->clearAllViews(); 2810 mViewManager->clearAllViews();
2811 SearchDialog * sd = mDialogManager->getSearchDialog(); 2811 SearchDialog * sd = mDialogManager->getSearchDialog();
2812 if ( sd ) { 2812 if ( sd ) {
2813 KOListView* kol = sd->listview(); 2813 KOListView* kol = sd->listview();
2814 if ( kol ) 2814 if ( kol )
2815 kol->clearList(); 2815 kol->clearList();
2816 } 2816 }
2817} 2817}
2818void CalendarView::updateView() 2818void CalendarView::updateView()
2819{ 2819{
2820 static bool clearallviews = false; 2820 static bool clearallviews = false;
2821 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2821 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2822 if ( clearallviews ) { 2822 if ( clearallviews ) {
2823 clearAllViews(); 2823 clearAllViews();
2824 clearallviews = false; 2824 clearallviews = false;
2825 } 2825 }
2826 return; 2826 return;
2827 } 2827 }
2828 clearallviews = true; 2828 clearallviews = true;
2829 DateList tmpList = mNavigator->selectedDates(); 2829 DateList tmpList = mNavigator->selectedDates();
2830 2830
2831 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2831 if ( KOPrefs::instance()->mHideNonStartedTodos )
2832 mTodoList->updateView(); 2832 mTodoList->updateView();
2833 // We assume that the navigator only selects consecutive days. 2833 // We assume that the navigator only selects consecutive days.
2834 updateView( tmpList.first(), tmpList.last() ); 2834 updateView( tmpList.first(), tmpList.last() );
2835} 2835}
2836 2836
2837void CalendarView::updateUnmanagedViews() 2837void CalendarView::updateUnmanagedViews()
2838{ 2838{
2839 mDateNavigator->updateDayMatrix(); 2839 mDateNavigator->updateDayMatrix();
2840} 2840}
2841 2841
2842int CalendarView::msgItemDelete(const QString name) 2842int CalendarView::msgItemDelete(const QString name)
2843{ 2843{
2844 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 2844 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2845 i18n("This item will be\npermanently deleted."), 2845 i18n("This item will be\npermanently deleted."),
2846 i18n("KO/Pi Confirmation"),i18n("Delete")); 2846 i18n("KO/Pi Confirmation"),i18n("Delete"));
2847} 2847}
2848 2848
2849 2849
2850void CalendarView::edit_cut() 2850void CalendarView::edit_cut()
2851{ 2851{
2852 Event *anEvent=0; 2852 Event *anEvent=0;
2853 2853
2854 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2854 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2855 2855
2856 if (mViewManager->currentView()->isEventView()) { 2856 if (mViewManager->currentView()->isEventView()) {
2857 if ( incidence && incidence->typeID() == eventID ) { 2857 if ( incidence && incidence->typeID() == eventID ) {
2858 anEvent = static_cast<Event *>(incidence); 2858 anEvent = static_cast<Event *>(incidence);
2859 } 2859 }
2860 } 2860 }
2861 2861
2862 if (!anEvent) { 2862 if (!anEvent) {
2863 KNotifyClient::beep(); 2863 KNotifyClient::beep();
2864 return; 2864 return;
2865 } 2865 }
2866 DndFactory factory( mCalendar ); 2866 DndFactory factory( mCalendar );
2867 factory.cutIncidence(anEvent); 2867 factory.cutIncidence(anEvent);
2868 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2868 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2869} 2869}
2870 2870
2871void CalendarView::edit_copy() 2871void CalendarView::edit_copy()
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.copyIncidence(anEvent); 2888 factory.copyIncidence(anEvent);
2889} 2889}
2890 2890
2891void CalendarView::edit_paste() 2891void CalendarView::edit_paste()
2892{ 2892{
2893 QDate date = mNavigator->selectedDates().first(); 2893 QDate date = mNavigator->selectedDates().first();
2894 2894
2895 DndFactory factory( mCalendar ); 2895 DndFactory factory( mCalendar );
2896 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 2896 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2897 2897
2898 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2898 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2899} 2899}
2900void CalendarView::edit_global_options() 2900void CalendarView::edit_global_options()
2901{ 2901{
2902 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 2902 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2903 emit save(); 2903 emit save();
2904 emit saveStopTimer(); 2904 emit saveStopTimer();
2905 mDialogManager->showGlobalOptionsDialog(); 2905 mDialogManager->showGlobalOptionsDialog();
2906 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 2906 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2907 emit saveStopTimer(); 2907 emit saveStopTimer();
2908 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!"), 2908 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!"),
2909 i18n("Timezone settings"),i18n("Reload"))) { 2909 i18n("Timezone settings"),i18n("Reload"))) {
2910 qDebug("KO: TZ reload cancelled "); 2910 qDebug("KO: TZ reload cancelled ");
2911 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2911 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2912 return; 2912 return;
2913 } 2913 }
2914 qDebug("KO: Timezone change "); 2914 qDebug("KO: Timezone change ");
2915 loadCalendars(); 2915 loadCalendars();
2916 setModified(true); 2916 setModified(true);
2917 } 2917 }
2918 else 2918 else
2919 qDebug("KO: No tz change "); 2919 qDebug("KO: No tz change ");
2920} 2920}
2921void CalendarView::edit_options() 2921void CalendarView::edit_options()
2922{ 2922{
2923 mDialogManager->showOptionsDialog(); 2923 mDialogManager->showOptionsDialog();
2924} 2924}
2925 2925
2926 2926
2927void CalendarView::slotSelectPickerDate( QDate d) 2927void CalendarView::slotSelectPickerDate( QDate d)
2928{ 2928{
2929 mDateFrame->hide(); 2929 mDateFrame->hide();
2930 if ( mDatePickerMode == 1 ) { 2930 if ( mDatePickerMode == 1 ) {
2931 mNavigator->slotDaySelect( d ); 2931 mNavigator->slotDaySelect( d );
2932 } else if ( mDatePickerMode == 2 ) { 2932 } else if ( mDatePickerMode == 2 ) {
2933 if ( mMoveIncidence->typeID() == todoID ) { 2933 if ( mMoveIncidence->typeID() == todoID ) {
2934 Todo * to = (Todo *) mMoveIncidence; 2934 Todo * to = (Todo *) mMoveIncidence;
2935 QTime tim; 2935 QTime tim;
2936 int len = 0; 2936 int len = 0;
2937 if ( to->hasStartDate() && to->hasDueDate() ) 2937 if ( to->hasStartDate() && to->hasDueDate() )
2938 len = to->dtStart().secsTo( to->dtDue()); 2938 len = to->dtStart().secsTo( to->dtDue());
2939 if ( to->hasDueDate() ) 2939 if ( to->hasDueDate() )
2940 tim = to->dtDue().time(); 2940 tim = to->dtDue().time();
2941 else { 2941 else {
2942 tim = QTime ( 0,0,0 ); 2942 tim = QTime ( 0,0,0 );
2943 to->setFloats( true ); 2943 to->setFloats( true );
2944 to->setHasDueDate( true ); 2944 to->setHasDueDate( true );
2945 } 2945 }
2946 QDateTime dt ( d,tim ); 2946 QDateTime dt ( d,tim );
2947 to->setDtDue( dt ); 2947 to->setDtDue( dt );
2948 2948
2949 if ( to->hasStartDate() ) { 2949 if ( to->hasStartDate() ) {
2950 if ( len>0 ) 2950 if ( len>0 )
2951 to->setDtStart(to->dtDue().addSecs( -len )); 2951 to->setDtStart(to->dtDue().addSecs( -len ));
2952 else 2952 else
2953 if (to->dtStart() > to->dtDue() ) 2953 if (to->dtStart() > to->dtDue() )
2954 to->setDtStart(to->dtDue().addDays( -3 )); 2954 to->setDtStart(to->dtDue().addDays( -3 ));
2955 } 2955 }
2956 2956
2957 todoChanged( to ); 2957 todoChanged( to );
2958 } else if ( mMoveIncidence->typeID() == eventID ) { 2958 } else if ( mMoveIncidence->typeID() == eventID ) {
2959 if ( mMoveIncidence->doesRecur() ) { 2959 if ( mMoveIncidence->doesRecur() ) {
2960#if 0 2960#if 0
2961 // PENDING implement this 2961 // PENDING implement this
2962 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2962 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2963 mCalendar()->addIncidence( newInc ); 2963 mCalendar()->addIncidence( newInc );
2964 if ( mMoveIncidence->typeID() == todoID ) 2964 if ( mMoveIncidence->typeID() == todoID )
2965 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2965 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2966 else 2966 else
2967 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2967 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2968 mMoveIncidence = newInc; 2968 mMoveIncidence = newInc;
2969 2969
2970#endif 2970#endif
2971 } 2971 }
2972 QTime tim = mMoveIncidence->dtStart().time(); 2972 QTime tim = mMoveIncidence->dtStart().time();
2973 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2973 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2974 QDateTime dt ( d,tim ); 2974 QDateTime dt ( d,tim );
2975 mMoveIncidence->setDtStart( dt ); 2975 mMoveIncidence->setDtStart( dt );
2976 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2976 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2977 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2977 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2978 } else if ( mMoveIncidence->typeID() == journalID ) { 2978 } else if ( mMoveIncidence->typeID() == journalID ) {
2979 QTime tim = mMoveIncidence->dtStart().time(); 2979 QTime tim = mMoveIncidence->dtStart().time();
2980 QDateTime dt ( d,tim ); 2980 QDateTime dt ( d,tim );
2981 mMoveIncidence->setDtStart( dt ); 2981 mMoveIncidence->setDtStart( dt );
2982 updateView(); 2982 updateView();
2983 } 2983 }
2984 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2984 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2985 } 2985 }
2986} 2986}
2987 2987
2988void CalendarView::removeCategories() 2988void CalendarView::removeCategories()
2989{ 2989{
2990 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2990 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2991 QStringList catList = KOPrefs::instance()->mCustomCategories; 2991 QStringList catList = KOPrefs::instance()->mCustomCategories;
2992 QStringList catIncList; 2992 QStringList catIncList;
2993 QStringList newCatList; 2993 QStringList newCatList;
2994 Incidence* inc = incList.first(); 2994 Incidence* inc = incList.first();
2995 uint i; 2995 uint i;
2996 while ( inc ) { 2996 while ( inc ) {
2997 newCatList.clear(); 2997 newCatList.clear();
2998 catIncList = inc->categories() ; 2998 catIncList = inc->categories() ;
2999 for( i = 0; i< catIncList.count(); ++i ) { 2999 for( i = 0; i< catIncList.count(); ++i ) {
3000 if ( catList.contains (catIncList[i])) 3000 if ( catList.contains (catIncList[i]))
3001 newCatList.append( catIncList[i] ); 3001 newCatList.append( catIncList[i] );
3002 } 3002 }
3003 newCatList.sort(); 3003 newCatList.sort();
3004 inc->setCategories( newCatList.join(",") ); 3004 inc->setCategories( newCatList.join(",") );
3005 inc = incList.next(); 3005 inc = incList.next();
3006 } 3006 }
3007} 3007}
3008 3008
3009int CalendarView::addCategories() 3009int CalendarView::addCategories()
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 Incidence* inc = incList.first(); 3014 Incidence* inc = incList.first();
3015 uint i; 3015 uint i;
3016 int count = 0; 3016 int count = 0;
3017 while ( inc ) { 3017 while ( inc ) {
3018 catIncList = inc->categories() ; 3018 catIncList = inc->categories() ;
3019 for( i = 0; i< catIncList.count(); ++i ) { 3019 for( i = 0; i< catIncList.count(); ++i ) {
3020 if ( !catList.contains (catIncList[i])) { 3020 if ( !catList.contains (catIncList[i])) {
3021 catList.append( catIncList[i] ); 3021 catList.append( catIncList[i] );
3022 //qDebug("add cat %s ", catIncList[i].latin1()); 3022 //qDebug("add cat %s ", catIncList[i].latin1());
3023 ++count; 3023 ++count;
3024 } 3024 }
3025 } 3025 }
3026 inc = incList.next(); 3026 inc = incList.next();
3027 } 3027 }
3028 catList.sort(); 3028 catList.sort();
3029 KOPrefs::instance()->mCustomCategories = catList; 3029 KOPrefs::instance()->mCustomCategories = catList;
3030 return count; 3030 return count;
3031} 3031}
3032 3032
3033void CalendarView::editCategories() 3033void CalendarView::editCategories()
3034{ 3034{
3035 qDebug("CalendarView::editCategories() "); 3035 qDebug("CalendarView::editCategories() ");
3036 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3036 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3037 ced.exec(); 3037 ced.exec();
3038} 3038}
3039void CalendarView::manageCategories() 3039void CalendarView::manageCategories()
3040{ 3040{
3041 KOCatPrefs* cp = new KOCatPrefs(); 3041 KOCatPrefs* cp = new KOCatPrefs();
3042 cp->show(); 3042 cp->show();
3043 int w =cp->sizeHint().width() ; 3043 int w =cp->sizeHint().width() ;
3044 int h = cp->sizeHint().height() ; 3044 int h = cp->sizeHint().height() ;
3045 int dw = QApplication::desktop()->width(); 3045 int dw = QApplication::desktop()->width();
3046 int dh = QApplication::desktop()->height(); 3046 int dh = QApplication::desktop()->height();
3047 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3047 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3048 if ( !cp->exec() ) { 3048 if ( !cp->exec() ) {
3049 delete cp; 3049 delete cp;
3050 return; 3050 return;
3051 } 3051 }
3052 int count = 0; 3052 int count = 0;
3053 if ( cp->addCat() ) { 3053 if ( cp->addCat() ) {
3054 count = addCategories(); 3054 count = addCategories();
3055 if ( count ) { 3055 if ( count ) {
3056 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3056 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3057 writeSettings(); 3057 writeSettings();
3058 } else 3058 } else
3059 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3059 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3060 } else { 3060 } else {
3061 removeCategories(); 3061 removeCategories();
3062 updateView(); 3062 updateView();
3063 } 3063 }
3064 delete cp; 3064 delete cp;
3065} 3065}
3066 3066
3067void CalendarView::beamIncidence(Incidence * Inc) 3067void CalendarView::beamIncidence(Incidence * Inc)
3068{ 3068{
3069 QPtrList<Incidence> delSel ; 3069 QPtrList<Incidence> delSel ;
3070 delSel.append(Inc); 3070 delSel.append(Inc);
3071 beamIncidenceList( delSel ); 3071 beamIncidenceList( delSel );
3072} 3072}
3073void CalendarView::beamCalendar() 3073void CalendarView::beamCalendar()
3074{ 3074{
3075 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3075 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3076 //qDebug("beamCalendar() "); 3076 //qDebug("beamCalendar() ");
3077 beamIncidenceList( delSel ); 3077 beamIncidenceList( delSel );
3078} 3078}
3079void CalendarView::beamFilteredCalendar() 3079void CalendarView::beamFilteredCalendar()
3080{ 3080{
3081 QPtrList<Incidence> delSel = mCalendar->incidences(); 3081 QPtrList<Incidence> delSel = mCalendar->incidences();
3082 //qDebug("beamFilteredCalendar() "); 3082 //qDebug("beamFilteredCalendar() ");
3083 beamIncidenceList( delSel ); 3083 beamIncidenceList( delSel );
3084} 3084}
3085void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3085void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3086{ 3086{
3087 3087
3088 KOBeamPrefs beamDialog; 3088 KOBeamPrefs beamDialog;
3089 if ( beamDialog.exec () == QDialog::Rejected ) 3089 if ( beamDialog.exec () == QDialog::Rejected )
3090 return; 3090 return;
3091#ifdef DESKTOP_VERSION 3091#ifdef DESKTOP_VERSION
3092 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3092 QString fn = locateLocal( "tmp", "kopibeamfile" );
3093#else 3093#else
3094 QString fn = "/tmp/kopibeamfile"; 3094 QString fn = "/tmp/kopibeamfile";
3095#endif 3095#endif
3096 QString mes; 3096 QString mes;
3097 bool createbup = true; 3097 bool createbup = true;
3098 if ( createbup ) { 3098 if ( createbup ) {
3099 QString description = "\n"; 3099 QString description = "\n";
3100 CalendarLocal* cal = new CalendarLocal(); 3100 CalendarLocal* cal = new CalendarLocal();
3101 if ( beamDialog.beamLocal() ) 3101 if ( beamDialog.beamLocal() )
3102 cal->setLocalTime(); 3102 cal->setLocalTime();
3103 else 3103 else
3104 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3104 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3105 Incidence *incidence = delSel.first(); 3105 Incidence *incidence = delSel.first();
3106 bool addText = false; 3106 bool addText = false;
3107 if ( delSel.count() < 10 ) 3107 if ( delSel.count() < 10 )
3108 addText = true; 3108 addText = true;
3109 else { 3109 else {
3110 description.sprintf(i18n(" %d items?"),delSel.count() ); 3110 description.sprintf(i18n(" %d items?"),delSel.count() );
3111 } 3111 }
3112 while ( incidence ) { 3112 while ( incidence ) {
3113 Incidence *in = incidence->clone(); 3113 Incidence *in = incidence->clone();
3114 if ( ! in->summary().isEmpty() ) { 3114 if ( ! in->summary().isEmpty() ) {
3115 in->setDescription(""); 3115 in->setDescription("");
3116 } else { 3116 } else {
3117 in->setSummary( in->description().left(20)); 3117 in->setSummary( in->description().left(20));
3118 in->setDescription(""); 3118 in->setDescription("");
3119 } 3119 }
3120 if ( addText ) 3120 if ( addText )
3121 description += in->summary() + "\n"; 3121 description += in->summary() + "\n";
3122 cal->addIncidence( in ); 3122 cal->addIncidence( in );
3123 incidence = delSel.next(); 3123 incidence = delSel.next();
3124 } 3124 }
3125 if ( beamDialog.beamVcal() ) { 3125 if ( beamDialog.beamVcal() ) {
3126 fn += ".vcs"; 3126 fn += ".vcs";
3127 FileStorage storage( cal, fn, new VCalFormat ); 3127 FileStorage storage( cal, fn, new VCalFormat );
3128 storage.save(); 3128 storage.save();
3129 } else { 3129 } else {
3130 fn += ".ics"; 3130 fn += ".ics";
3131 FileStorage storage( cal, fn, new ICalFormat( ) ); 3131 FileStorage storage( cal, fn, new ICalFormat( ) );
3132 storage.save(); 3132 storage.save();
3133 } 3133 }
3134 delete cal; 3134 delete cal;
3135 mes = i18n("KO/Pi: Ready for beaming"); 3135 mes = i18n("KO/Pi: Ready for beaming");
3136 topLevelWidget()->setCaption(mes); 3136 topLevelWidget()->setCaption(mes);
3137 KApplication::convert2latin1( fn ); 3137 KApplication::convert2latin1( fn );
3138#ifndef DESKTOP_VERSION 3138#ifndef DESKTOP_VERSION
3139 Ir *ir = new Ir( this ); 3139 Ir *ir = new Ir( this );
3140 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3140 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3141 ir->send( fn, description, "text/x-vCalendar" ); 3141 ir->send( fn, description, "text/x-vCalendar" );
3142#endif 3142#endif
3143 } 3143 }
3144} 3144}
3145 3145
3146#ifndef DESKTOP_VERSION 3146#ifndef DESKTOP_VERSION
3147void CalendarView::beamDone( Ir *ir ) 3147void CalendarView::beamDone( Ir *ir )
3148{ 3148{
3149 delete ir; 3149 delete ir;
3150 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3150 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3151 topLevelWidget()->raise(); 3151 topLevelWidget()->raise();
3152} 3152}
3153#else 3153#else
3154void CalendarView::beamDone( Ir *){;} 3154void CalendarView::beamDone( Ir *){;}
3155#endif 3155#endif
3156void CalendarView::moveIncidence(Incidence * inc ) 3156void CalendarView::moveIncidence(Incidence * inc )
3157{ 3157{
3158 if ( !inc ) return; 3158 if ( !inc ) return;
3159 showDatePickerPopup(); 3159 showDatePickerPopup();
3160 mDatePickerMode = 2; 3160 mDatePickerMode = 2;
3161 mMoveIncidence = inc ; 3161 mMoveIncidence = inc ;
3162 QDate da; 3162 QDate da;
3163 if ( mMoveIncidence->typeID() == todoID ) { 3163 if ( mMoveIncidence->typeID() == todoID ) {
3164 Todo * to = (Todo *) mMoveIncidence; 3164 Todo * to = (Todo *) mMoveIncidence;
3165 if ( to->hasDueDate() ) 3165 if ( to->hasDueDate() )
3166 da = to->dtDue().date(); 3166 da = to->dtDue().date();
3167 else 3167 else
3168 da = QDate::currentDate(); 3168 da = QDate::currentDate();
3169 } else { 3169 } else {
3170 da = mMoveIncidence->dtStart().date(); 3170 da = mMoveIncidence->dtStart().date();
3171 } 3171 }
3172 //PENDING set date for recurring incidence to date of recurrence 3172 //PENDING set date for recurring incidence to date of recurrence
3173 //mMoveIncidenceOldDate; 3173 //mMoveIncidenceOldDate;
3174 mDatePicker->setDate( da ); 3174 mDatePicker->setDate( da );
3175} 3175}
3176void CalendarView::showDatePickerPopup() 3176void CalendarView::showDatePickerPopup()
3177{ 3177{
3178 if ( mDateFrame->isVisible() ) 3178 if ( mDateFrame->isVisible() )
3179 mDateFrame->hide(); 3179 mDateFrame->hide();
3180 else { 3180 else {
3181 int offX = 0, offY = 0; 3181 int offX = 0, offY = 0;
3182#ifdef DESKTOP_VERSION 3182#ifdef DESKTOP_VERSION
3183 int w =mDatePicker->sizeHint().width() ; 3183 int w =mDatePicker->sizeHint().width() ;
3184 int h = mDatePicker->sizeHint().height() ; 3184 int h = mDatePicker->sizeHint().height() ;
3185 int dw = topLevelWidget()->width(); 3185 int dw = topLevelWidget()->width();
3186 int dh = topLevelWidget()->height(); 3186 int dh = topLevelWidget()->height();
3187 offX = topLevelWidget()->x(); 3187 offX = topLevelWidget()->x();
3188 offY = topLevelWidget()->y(); 3188 offY = topLevelWidget()->y();
3189#else 3189#else
3190 int w =mDatePicker->sizeHint().width() ; 3190 int w =mDatePicker->sizeHint().width() ;
3191 int h = mDatePicker->sizeHint().height() ; 3191 int h = mDatePicker->sizeHint().height() ;
3192 int dw = QApplication::desktop()->width(); 3192 int dw = QApplication::desktop()->width();
3193 int dh = QApplication::desktop()->height(); 3193 int dh = QApplication::desktop()->height();
3194#endif 3194#endif
3195 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3195 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3196 mDateFrame->show(); 3196 mDateFrame->show();
3197 } 3197 }
3198} 3198}
3199void CalendarView::showDatePicker( ) 3199void CalendarView::showDatePicker( )
3200{ 3200{
3201 showDatePickerPopup(); 3201 showDatePickerPopup();
3202 mDatePickerMode = 1; 3202 mDatePickerMode = 1;
3203 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3203 mDatePicker->setDate( mNavigator->selectedDates().first() );
3204} 3204}
3205 3205
3206void CalendarView::showEventEditor() 3206void CalendarView::showEventEditor()
3207{ 3207{
3208#ifdef DESKTOP_VERSION 3208#ifdef DESKTOP_VERSION
3209 int x,y,w,h; 3209 int x,y,w,h;
3210 x = mEventEditor->geometry().x(); 3210 x = mEventEditor->geometry().x();
3211 y = mEventEditor->geometry().y(); 3211 y = mEventEditor->geometry().y();
3212 w = mEventEditor->width(); 3212 w = mEventEditor->width();
3213 h = mEventEditor->height(); 3213 h = mEventEditor->height();
3214 mEventEditor->show(); 3214 mEventEditor->show();
3215 mEventEditor->setGeometry(x,y,w,h); 3215 mEventEditor->setGeometry(x,y,w,h);
3216#else 3216#else
3217 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3217 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3218 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3218 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3219 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3219 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3220 qApp->processEvents(); 3220 qApp->processEvents();
3221 delete mEventEditor; 3221 delete mEventEditor;
3222 mEventEditor = mDialogManager->getEventEditor(); 3222 mEventEditor = mDialogManager->getEventEditor();
3223 topLevelWidget()->setCaption( i18n("") ); 3223 topLevelWidget()->setCaption( i18n("") );
3224 } 3224 }
3225 mEventEditor->showMaximized(); 3225 mEventEditor->showMaximized();
3226#endif 3226#endif
3227} 3227}
3228void CalendarView::showTodoEditor() 3228void CalendarView::showTodoEditor()
3229{ 3229{
3230#ifdef DESKTOP_VERSION 3230#ifdef DESKTOP_VERSION
3231 int x,y,w,h; 3231 int x,y,w,h;
3232 x = mTodoEditor->geometry().x(); 3232 x = mTodoEditor->geometry().x();
3233 y = mTodoEditor->geometry().y(); 3233 y = mTodoEditor->geometry().y();
3234 w = mTodoEditor->width(); 3234 w = mTodoEditor->width();
3235 h = mTodoEditor->height(); 3235 h = mTodoEditor->height();
3236 mTodoEditor->show(); 3236 mTodoEditor->show();
3237 mTodoEditor->setGeometry(x,y,w,h); 3237 mTodoEditor->setGeometry(x,y,w,h);
3238#else 3238#else
3239 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3239 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3240 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3240 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3241 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3241 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3242 qApp->processEvents(); 3242 qApp->processEvents();
3243 delete mTodoEditor; 3243 delete mTodoEditor;
3244 mTodoEditor = mDialogManager->getTodoEditor(); 3244 mTodoEditor = mDialogManager->getTodoEditor();
3245 topLevelWidget()->setCaption( i18n("") ); 3245 topLevelWidget()->setCaption( i18n("") );
3246 } 3246 }
3247 mTodoEditor->showMaximized(); 3247 mTodoEditor->showMaximized();
3248#endif 3248#endif
3249} 3249}
3250 3250
3251void CalendarView::cloneIncidence() 3251void CalendarView::cloneIncidence()
3252{ 3252{
3253 Incidence *incidence = currentSelection(); 3253 Incidence *incidence = currentSelection();
3254 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3254 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3255 if ( incidence ) { 3255 if ( incidence ) {
3256 cloneIncidence(incidence); 3256 cloneIncidence(incidence);
3257 } 3257 }
3258} 3258}
3259void CalendarView::moveIncidence() 3259void CalendarView::moveIncidence()
3260{ 3260{
3261 Incidence *incidence = currentSelection(); 3261 Incidence *incidence = currentSelection();
3262 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3262 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3263 if ( incidence ) { 3263 if ( incidence ) {
3264 moveIncidence(incidence); 3264 moveIncidence(incidence);
3265 } 3265 }
3266} 3266}
3267void CalendarView::beamIncidence() 3267void CalendarView::beamIncidence()
3268{ 3268{
3269 Incidence *incidence = currentSelection(); 3269 Incidence *incidence = currentSelection();
3270 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3270 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3271 if ( incidence ) { 3271 if ( incidence ) {
3272 beamIncidence(incidence); 3272 beamIncidence(incidence);
3273 } 3273 }
3274} 3274}
3275void CalendarView::toggleCancelIncidence() 3275void CalendarView::toggleCancelIncidence()
3276{ 3276{
3277 Incidence *incidence = currentSelection(); 3277 Incidence *incidence = currentSelection();
3278 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3278 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3279 if ( incidence ) { 3279 if ( incidence ) {
3280 cancelIncidence(incidence); 3280 cancelIncidence(incidence);
3281 } 3281 }
3282} 3282}
3283 3283
3284 3284
3285void CalendarView::cancelIncidence(Incidence * inc ) 3285void CalendarView::cancelIncidence(Incidence * inc )
3286{ 3286{
3287 inc->setCancelled( ! inc->cancelled() ); 3287 inc->setCancelled( ! inc->cancelled() );
3288 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3288 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3289 updateView(); 3289 updateView();
3290} 3290}
3291void CalendarView::cloneIncidence(Incidence * orgInc ) 3291void CalendarView::cloneIncidence(Incidence * orgInc )
3292{ 3292{
3293 Incidence * newInc = orgInc->clone(); 3293 Incidence * newInc = orgInc->clone();
3294 newInc->recreate(); 3294 newInc->recreate();
3295 3295
3296 if ( newInc->typeID() == todoID ) { 3296 if ( newInc->typeID() == todoID ) {
3297 Todo* t = (Todo*) newInc; 3297 Todo* t = (Todo*) newInc;
3298 bool cloneSub = false; 3298 bool cloneSub = false;
3299 if ( orgInc->relations().count() ) { 3299 if ( orgInc->relations().count() ) {
3300 int result = KMessageBox::warningYesNoCancel(this, 3300 int result = KMessageBox::warningYesNoCancel(this,
3301 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 ) ), 3301 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 ) ),
3302 i18n("Todo has subtodos"), 3302 i18n("Todo has subtodos"),
3303 i18n("Yes"), 3303 i18n("Yes"),
3304 i18n("No")); 3304 i18n("No"));
3305 3305
3306 if ( result == KMessageBox::Cancel ) { 3306 if ( result == KMessageBox::Cancel ) {
3307 delete t; 3307 delete t;
3308 return; 3308 return;
3309 } 3309 }
3310 if (result == KMessageBox::Yes) cloneSub = true; 3310 if (result == KMessageBox::Yes) cloneSub = true;
3311 } 3311 }
3312 showTodoEditor(); 3312 showTodoEditor();
3313 mTodoEditor->editTodo( t ); 3313 mTodoEditor->editTodo( t );
3314 if ( mTodoEditor->exec() ) { 3314 if ( mTodoEditor->exec() ) {
3315 if ( cloneSub ) { 3315 if ( cloneSub ) {
3316 orgInc->cloneRelations( t ); 3316 orgInc->cloneRelations( t );
3317 mCalendar->addIncidenceBranch( t ); 3317 mCalendar->addIncidenceBranch( t );
3318 updateView(); 3318 updateView();
3319 3319
3320 } else { 3320 } else {
3321 mCalendar->addTodo( t ); 3321 mCalendar->addTodo( t );
3322 updateView(); 3322 updateView();
3323 } 3323 }
3324 } else { 3324 } else {
3325 delete t; 3325 delete t;
3326 } 3326 }
3327 } 3327 }
3328 else if ( newInc->typeID() == eventID ) { 3328 else if ( newInc->typeID() == eventID ) {
3329 Event* e = (Event*) newInc; 3329 Event* e = (Event*) newInc;
3330 showEventEditor(); 3330 showEventEditor();
3331 mEventEditor->editEvent( e ); 3331 mEventEditor->editEvent( e );
3332 if ( mEventEditor->exec() ) { 3332 if ( mEventEditor->exec() ) {
3333 mCalendar->addEvent( e ); 3333 mCalendar->addEvent( e );
3334 updateView(); 3334 updateView();
3335 } else { 3335 } else {
3336 delete e; 3336 delete e;
3337 } 3337 }
3338 } if ( newInc->typeID() == journalID ) { 3338 } if ( newInc->typeID() == journalID ) {
3339 mCalendar->addJournal( (Journal*) newInc ); 3339 mCalendar->addJournal( (Journal*) newInc );
3340 editJournal( (Journal*) newInc ); 3340 editJournal( (Journal*) newInc );
3341 } 3341 }
3342 setActiveWindow(); 3342 setActiveWindow();
3343} 3343}
3344 3344
3345void CalendarView::newEvent() 3345void CalendarView::newEvent()
3346{ 3346{
3347 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3347 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3348 KOAgendaView *aView = mViewManager->agendaView(); 3348 KOAgendaView *aView = mViewManager->agendaView();
3349 if (aView) { 3349 if (aView) {
3350 if (aView->selectionStart().isValid()) { 3350 if (aView->selectionStart().isValid()) {
3351 if (aView->selectedIsAllDay()) { 3351 if (aView->selectedIsAllDay()) {
3352 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3352 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3353 } else { 3353 } else {
3354 newEvent(aView->selectionStart(),aView->selectionEnd()); 3354 newEvent(aView->selectionStart(),aView->selectionEnd());
3355 } 3355 }
3356 return; 3356 return;
3357 } 3357 }
3358 } 3358 }
3359 3359
3360 QDate date = mNavigator->selectedDates().first(); 3360 QDate date = mNavigator->selectedDates().first();
3361 QDateTime current = QDateTime::currentDateTime(); 3361 QDateTime current = QDateTime::currentDateTime();
3362 if ( date <= current.date() ) { 3362 if ( date <= current.date() ) {
3363 int hour = current.time().hour() +1; 3363 int hour = current.time().hour() +1;
3364 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3364 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3365 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3365 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3366 } else 3366 } else
3367 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3367 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3368 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3368 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3369 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3369 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3370} 3370}
3371 3371
3372void CalendarView::newEvent(QDateTime fh) 3372void CalendarView::newEvent(QDateTime fh)
3373{ 3373{
3374 newEvent(fh, 3374 newEvent(fh,
3375 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3375 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3376} 3376}
3377 3377
3378void CalendarView::newEvent(QDate dt) 3378void CalendarView::newEvent(QDate dt)
3379{ 3379{
3380 newEvent(QDateTime(dt, QTime(0,0,0)), 3380 newEvent(QDateTime(dt, QTime(0,0,0)),
3381 QDateTime(dt, QTime(0,0,0)), true); 3381 QDateTime(dt, QTime(0,0,0)), true);
3382} 3382}
3383void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3383void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3384{ 3384{
3385 newEvent(fromHint, toHint, false); 3385 newEvent(fromHint, toHint, false);
3386} 3386}
3387void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3387void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3388{ 3388{
3389 3389
3390 showEventEditor(); 3390 showEventEditor();
3391 mEventEditor->newEvent(fromHint,toHint,allDay); 3391 mEventEditor->newEvent(fromHint,toHint,allDay);
3392 if ( mFilterView->filtersEnabled() ) { 3392 if ( mFilterView->filtersEnabled() ) {
3393 CalFilter *filter = mFilterView->selectedFilter(); 3393 CalFilter *filter = mFilterView->selectedFilter();
3394 if (filter && filter->showCategories()) { 3394 if (filter && filter->showCategories()) {
3395 mEventEditor->setCategories(filter->categoryList().join(",") ); 3395 mEventEditor->setCategories(filter->categoryList().join(",") );
3396 } 3396 }
3397 if ( filter ) 3397 if ( filter )
3398 mEventEditor->setSecrecy( filter->getSecrecy() ); 3398 mEventEditor->setSecrecy( filter->getSecrecy() );
3399 } 3399 }
3400 mEventEditor->exec(); 3400 mEventEditor->exec();
3401 setActiveWindow(); 3401 setActiveWindow();
3402} 3402}
3403void CalendarView::todoAdded(Todo * t) 3403void CalendarView::todoAdded(Todo * t)
3404{ 3404{
3405 3405
3406 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3406 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3407 updateTodoViews(); 3407 updateTodoViews();
3408} 3408}
3409void CalendarView::todoChanged(Todo * t) 3409void CalendarView::todoChanged(Todo * t)
3410{ 3410{
3411 emit todoModified( t, 4 ); 3411 emit todoModified( t, 4 );
3412 // updateTodoViews(); 3412 // updateTodoViews();
3413} 3413}
3414void CalendarView::todoToBeDeleted(Todo *) 3414void CalendarView::todoToBeDeleted(Todo *)
3415{ 3415{
3416 //qDebug("todoToBeDeleted(Todo *) "); 3416 //qDebug("todoToBeDeleted(Todo *) ");
3417 updateTodoViews(); 3417 updateTodoViews();
3418} 3418}
3419void CalendarView::todoDeleted() 3419void CalendarView::todoDeleted()
3420{ 3420{
3421 //qDebug(" todoDeleted()"); 3421 //qDebug(" todoDeleted()");
3422 updateTodoViews(); 3422 updateTodoViews();
3423} 3423}
3424 3424
3425 3425
3426void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3426void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3427{ 3427{
3428 showTodoEditor(); 3428 showTodoEditor();
3429 mTodoEditor->newTodo(dt,0,allday); 3429 mTodoEditor->newTodo(dt,0,allday);
3430 if ( mFilterView->filtersEnabled() ) { 3430 if ( mFilterView->filtersEnabled() ) {
3431 CalFilter *filter = mFilterView->selectedFilter(); 3431 CalFilter *filter = mFilterView->selectedFilter();
3432 if (filter && filter->showCategories()) { 3432 if (filter && filter->showCategories()) {
3433 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3433 mTodoEditor->setCategories(filter->categoryList().join(",") );
3434 } 3434 }
3435 if ( filter ) 3435 if ( filter )
3436 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3436 mTodoEditor->setSecrecy( filter->getSecrecy() );
3437 } 3437 }
3438 mTodoEditor->exec(); 3438 mTodoEditor->exec();
3439 setActiveWindow(); 3439 setActiveWindow();
3440} 3440}
3441 3441
3442void CalendarView::newTodo() 3442void CalendarView::newTodo()
3443{ 3443{
3444 newTodoDateTime( QDateTime(),true ); 3444 newTodoDateTime( QDateTime(),true );
3445} 3445}
3446 3446
3447void CalendarView::newSubTodo() 3447void CalendarView::newSubTodo()
3448{ 3448{
3449 Todo *todo = selectedTodo(); 3449 Todo *todo = selectedTodo();
3450 if ( todo ) newSubTodo( todo ); 3450 if ( todo ) newSubTodo( todo );
3451} 3451}
3452 3452
3453void CalendarView::newSubTodo(Todo *parentEvent) 3453void CalendarView::newSubTodo(Todo *parentEvent)
3454{ 3454{
3455 3455
3456 showTodoEditor(); 3456 showTodoEditor();
3457 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3457 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3458 mTodoEditor->exec(); 3458 mTodoEditor->exec();
3459 setActiveWindow(); 3459 setActiveWindow();
3460} 3460}
3461 3461
3462void CalendarView::newFloatingEvent() 3462void CalendarView::newFloatingEvent()
3463{ 3463{
3464 DateList tmpList = mNavigator->selectedDates(); 3464 DateList tmpList = mNavigator->selectedDates();
3465 QDate date = tmpList.first(); 3465 QDate date = tmpList.first();
3466 3466
3467 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3467 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3468 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3468 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3469} 3469}
3470 3470
3471 3471
3472void CalendarView::editEvent( Event *event ) 3472void CalendarView::editEvent( Event *event )
3473{ 3473{
3474 3474
3475 if ( !event ) return; 3475 if ( !event ) return;
3476 if ( event->isReadOnly() ) { 3476 if ( event->isReadOnly() ) {
3477 showEvent( event ); 3477 showEvent( event );
3478 return; 3478 return;
3479 } 3479 }
3480 showEventEditor(); 3480 showEventEditor();
3481 mEventEditor->editEvent( event , mFlagEditDescription); 3481 mEventEditor->editEvent( event , mFlagEditDescription);
3482 mEventEditor->exec(); 3482 mEventEditor->exec();
3483 setActiveWindow(); 3483 setActiveWindow();
3484 3484
3485} 3485}
3486void CalendarView::editJournal( Journal *jour ) 3486void CalendarView::editJournal( Journal *jour )
3487{ 3487{
3488 if ( !jour ) return; 3488 if ( !jour ) return;
3489 mDialogManager->hideSearchDialog(); 3489 mDialogManager->hideSearchDialog();
3490 mViewManager->showJournalView(); 3490 mViewManager->showJournalView();
3491 mNavigator->slotDaySelect( jour->dtStart().date() ); 3491 mNavigator->slotDaySelect( jour->dtStart().date() );
3492} 3492}
3493void CalendarView::editTodo( Todo *todo ) 3493void CalendarView::editTodo( Todo *todo )
3494{ 3494{
3495 if ( !todo ) return; 3495 if ( !todo ) return;
3496 3496
3497 if ( todo->isReadOnly() ) { 3497 if ( todo->isReadOnly() ) {
3498 showTodo( todo ); 3498 showTodo( todo );
3499 return; 3499 return;
3500 } 3500 }
3501 showTodoEditor(); 3501 showTodoEditor();
3502 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3502 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3503 mTodoEditor->exec(); 3503 mTodoEditor->exec();
3504 setActiveWindow(); 3504 setActiveWindow();
3505 3505
3506} 3506}
3507 3507
3508KOEventViewerDialog* CalendarView::getEventViewerDialog() 3508KOEventViewerDialog* CalendarView::getEventViewerDialog()
3509{ 3509{
3510 if ( !mEventViewerDialog ) { 3510 if ( !mEventViewerDialog ) {
3511 mEventViewerDialog = new KOEventViewerDialog(0); 3511 mEventViewerDialog = new KOEventViewerDialog(0);
3512 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3512 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3513 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3513 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3514 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3514 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3515 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3515 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3516 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3516 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3517 viewManager(), SLOT( showAgendaView( bool ) ) ); 3517 viewManager(), SLOT( showAgendaView( bool ) ) );
3518 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3518 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3519 this, SLOT( slotViewerClosed() ) ); 3519 this, SLOT( slotViewerClosed() ) );
3520 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3520 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3521 this, SLOT( todoChanged(Todo *) ) ); 3521 this, SLOT( todoChanged(Todo *) ) );
3522 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3522 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3523 mEventViewerDialog->resize( 640, 480 ); 3523 mEventViewerDialog->resize( 640, 480 );
3524 3524
3525 } 3525 }
3526 return mEventViewerDialog; 3526 return mEventViewerDialog;
3527} 3527}
3528void CalendarView::showEvent(Event *event) 3528void CalendarView::showEvent(Event *event)
3529{ 3529{
3530 getEventViewerDialog()->setEvent(event); 3530 getEventViewerDialog()->setEvent(event);
3531 getEventViewerDialog()->showMe(); 3531 getEventViewerDialog()->showMe();
3532} 3532}
3533 3533
3534void CalendarView::showTodo(Todo *event) 3534void CalendarView::showTodo(Todo *event)
3535{ 3535{
3536 getEventViewerDialog()->setTodo(event); 3536 getEventViewerDialog()->setTodo(event);
3537 getEventViewerDialog()->showMe(); 3537 getEventViewerDialog()->showMe();
3538} 3538}
3539void CalendarView::showJournal( Journal *jour ) 3539void CalendarView::showJournal( Journal *jour )
3540{ 3540{
3541 getEventViewerDialog()->setJournal(jour); 3541 getEventViewerDialog()->setJournal(jour);
3542 getEventViewerDialog()->showMe(); 3542 getEventViewerDialog()->showMe();
3543 3543
3544} 3544}
3545// void CalendarView::todoModified (Todo *event, int changed) 3545// void CalendarView::todoModified (Todo *event, int changed)
3546// { 3546// {
3547// // if (mDialogList.find (event) != mDialogList.end ()) { 3547// // if (mDialogList.find (event) != mDialogList.end ()) {
3548// // kdDebug() << "Todo modified and open" << endl; 3548// // kdDebug() << "Todo modified and open" << endl;
3549// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3549// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3550// // temp->modified (changed); 3550// // temp->modified (changed);
3551 3551
3552// // } 3552// // }
3553 3553
3554// mViewManager->updateView(); 3554// mViewManager->updateView();
3555// } 3555// }
3556 3556
3557void CalendarView::appointment_show() 3557void CalendarView::appointment_show()
3558{ 3558{
3559 Event *anEvent = 0; 3559 Event *anEvent = 0;
3560 3560
3561 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3561 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3562 3562
3563 if (mViewManager->currentView()->isEventView()) { 3563 if (mViewManager->currentView()->isEventView()) {
3564 if ( incidence && incidence->typeID() == eventID ) { 3564 if ( incidence && incidence->typeID() == eventID ) {
3565 anEvent = static_cast<Event *>(incidence); 3565 anEvent = static_cast<Event *>(incidence);
3566 } 3566 }
3567 } 3567 }
3568 3568
3569 if (!anEvent) { 3569 if (!anEvent) {
3570 KNotifyClient::beep(); 3570 KNotifyClient::beep();
3571 return; 3571 return;
3572 } 3572 }
3573 3573
3574 showEvent(anEvent); 3574 showEvent(anEvent);
3575} 3575}
3576 3576
3577void CalendarView::appointment_edit() 3577void CalendarView::appointment_edit()
3578{ 3578{
3579 Event *anEvent = 0; 3579 Event *anEvent = 0;
3580 3580
3581 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3581 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3582 3582
3583 if (mViewManager->currentView()->isEventView()) { 3583 if (mViewManager->currentView()->isEventView()) {
3584 if ( incidence && incidence->typeID() == eventID ) { 3584 if ( incidence && incidence->typeID() == eventID ) {
3585 anEvent = static_cast<Event *>(incidence); 3585 anEvent = static_cast<Event *>(incidence);
3586 } 3586 }
3587 } 3587 }
3588 3588
3589 if (!anEvent) { 3589 if (!anEvent) {
3590 KNotifyClient::beep(); 3590 KNotifyClient::beep();
3591 return; 3591 return;
3592 } 3592 }
3593 3593
3594 editEvent(anEvent); 3594 editEvent(anEvent);
3595} 3595}
3596 3596
3597void CalendarView::appointment_delete() 3597void CalendarView::appointment_delete()
3598{ 3598{
3599 Event *anEvent = 0; 3599 Event *anEvent = 0;
3600 3600
3601 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3601 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3602 3602
3603 if (mViewManager->currentView()->isEventView()) { 3603 if (mViewManager->currentView()->isEventView()) {
3604 if ( incidence && incidence->typeID() == eventID ) { 3604 if ( incidence && incidence->typeID() == eventID ) {
3605 anEvent = static_cast<Event *>(incidence); 3605 anEvent = static_cast<Event *>(incidence);
3606 } 3606 }
3607 } 3607 }
3608 3608
3609 if (!anEvent) { 3609 if (!anEvent) {
3610 KNotifyClient::beep(); 3610 KNotifyClient::beep();
3611 return; 3611 return;
3612 } 3612 }
3613 3613
3614 deleteEvent(anEvent); 3614 deleteEvent(anEvent);
3615} 3615}
3616 3616
3617void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3617void CalendarView::todo_resub( Todo * parent, Todo * sub )
3618{ 3618{
3619 if (!sub) return; 3619 if (!sub) return;
3620 if ( sub->relatedTo() == parent ) 3620 if ( sub->relatedTo() == parent )
3621 return; 3621 return;
3622 sub->setRelatedTo(parent); 3622 sub->setRelatedTo(parent);
3623 sub->updated(); 3623 sub->updated();
3624 setModified(true); 3624 setModified(true);
3625 updateView(); 3625 updateView();
3626} 3626}
3627void CalendarView::todo_unsub(Todo *anTodo ) 3627void CalendarView::todo_unsub(Todo *anTodo )
3628{ 3628{
3629 todo_resub( 0, anTodo ); 3629 todo_resub( 0, anTodo );
3630} 3630}
3631 3631
3632void CalendarView::deleteTodo(Todo *todo) 3632void CalendarView::deleteTodo(Todo *todo)
3633{ 3633{
3634 if (!todo) { 3634 if (!todo) {
3635 KNotifyClient::beep(); 3635 KNotifyClient::beep();
3636 return; 3636 return;
3637 } 3637 }
3638 if (KOPrefs::instance()->mConfirm) { 3638 if (KOPrefs::instance()->mConfirm) {
3639 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3639 QString text = KGlobal::formatMessage ( todo->summary(),0 );
3640 if (!todo->relations().isEmpty()) { 3640 if (!todo->relations().isEmpty()) {
3641 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 3641 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
3642 3642
3643 } 3643 }
3644 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 3644 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
3645 case KMessageBox::Continue: // OK 3645 case KMessageBox::Continue: // OK
3646 bool deleteT = false; 3646 bool deleteT = false;
3647 if (!todo->relations().isEmpty()) { 3647 if (!todo->relations().isEmpty()) {
3648 deleteT = removeCompletedSubTodos( todo ); 3648 deleteT = removeCompletedSubTodos( todo );
3649 } 3649 }
3650 // deleteT == true: todo already deleted in removeCompletedSubTodos 3650 // deleteT == true: todo already deleted in removeCompletedSubTodos
3651 if ( !deleteT ) { 3651 if ( !deleteT ) {
3652 checkExternalId( todo ); 3652 checkExternalId( todo );
3653 calendar()->deleteTodo(todo); 3653 calendar()->deleteTodo(todo);
3654 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3654 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3655 updateView(); 3655 updateView();
3656 } 3656 }
3657 break; 3657 break;
3658 } // switch 3658 } // switch
3659 } else { 3659 } else {
3660 checkExternalId( todo ); 3660 checkExternalId( todo );
3661 mCalendar->deleteTodo(todo); 3661 mCalendar->deleteTodo(todo);
3662 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3662 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3663 updateView(); 3663 updateView();
3664 } 3664 }
3665 3665
3666 emit updateSearchDialog(); 3666 emit updateSearchDialog();
3667} 3667}
3668void CalendarView::deleteJournal(Journal *jour) 3668void CalendarView::deleteJournal(Journal *jour)
3669{ 3669{
3670 if (!jour) { 3670 if (!jour) {
3671 KNotifyClient::beep(); 3671 KNotifyClient::beep();
3672 return; 3672 return;
3673 } 3673 }
3674 if (KOPrefs::instance()->mConfirm) { 3674 if (KOPrefs::instance()->mConfirm) {
3675 3675
3676 QString des; 3676 QString des;
3677 if ( !jour->summary().isEmpty() ) { 3677 if ( !jour->summary().isEmpty() ) {
3678 des = jour->summary(); 3678 des = jour->summary();
3679 } else { 3679 } else {
3680 des = jour->description().left(30); 3680 des = jour->description().left(30);
3681 des = des.simplifyWhiteSpace (); 3681 des = des.simplifyWhiteSpace ();
3682 des.replace (QRegExp ("\\n"),"" ); 3682 des.replace (QRegExp ("\\n"),"" );
3683 des.replace (QRegExp ("\\r"),"" ); 3683 des.replace (QRegExp ("\\r"),"" );
3684 } 3684 }
3685 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 3685 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
3686 case KMessageBox::Continue: // OK 3686 case KMessageBox::Continue: // OK
3687 calendar()->deleteJournal(jour); 3687 calendar()->deleteJournal(jour);
3688 updateView(); 3688 updateView();
3689 break; 3689 break;
3690 } // switch 3690 } // switch
3691 } else { 3691 } else {
3692 calendar()->deleteJournal(jour);; 3692 calendar()->deleteJournal(jour);;
3693 updateView(); 3693 updateView();
3694 } 3694 }
3695 emit updateSearchDialog(); 3695 emit updateSearchDialog();
3696} 3696}
3697 3697
3698void CalendarView::deleteEvent(Event *anEvent) 3698void CalendarView::deleteEvent(Event *anEvent)
3699{ 3699{
3700 if (!anEvent) { 3700 if (!anEvent) {
3701 KNotifyClient::beep(); 3701 KNotifyClient::beep();
3702 return; 3702 return;
3703 } 3703 }
3704 3704
3705 if (anEvent->recurrence()->doesRecur()) { 3705 if (anEvent->recurrence()->doesRecur()) {
3706 QDate itemDate = mViewManager->currentSelectionDate(); 3706 QDate itemDate = mViewManager->currentSelectionDate();
3707 int km; 3707 int km;
3708 if (!itemDate.isValid()) { 3708 if (!itemDate.isValid()) {
3709 //kdDebug() << "Date Not Valid" << endl; 3709 //kdDebug() << "Date Not Valid" << endl;
3710 if (KOPrefs::instance()->mConfirm) { 3710 if (KOPrefs::instance()->mConfirm) {
3711 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3711 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3712 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 3712 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
3713 i18n("KO/Pi Confirmation"),i18n("Delete All")); 3713 i18n("KO/Pi Confirmation"),i18n("Delete All"));
3714 if ( km == KMessageBox::Continue ) 3714 if ( km == KMessageBox::Continue )
3715 km = KMessageBox::No; // No = all below 3715 km = KMessageBox::No; // No = all below
3716 } else 3716 } else
3717 km = KMessageBox::No; 3717 km = KMessageBox::No;
3718 } else { 3718 } else {
3719 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3719 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3720 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 3720 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
3721 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 3721 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
3722 i18n("KO/Pi Confirmation"),i18n("Current"), 3722 i18n("KO/Pi Confirmation"),i18n("Current"),
3723 i18n("All")); 3723 i18n("All"));
3724 } 3724 }
3725 switch(km) { 3725 switch(km) {
3726 3726
3727 case KMessageBox::No: // Continue // all 3727 case KMessageBox::No: // Continue // all
3728 //qDebug("KMessageBox::No "); 3728 //qDebug("KMessageBox::No ");
3729 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3729 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3730 schedule(Scheduler::Cancel,anEvent); 3730 schedule(Scheduler::Cancel,anEvent);
3731 3731
3732 checkExternalId( anEvent); 3732 checkExternalId( anEvent);
3733 mCalendar->deleteEvent(anEvent); 3733 mCalendar->deleteEvent(anEvent);
3734 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 3734 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
3735 break; 3735 break;
3736 3736
3737 // Disabled because it does not work 3737 // Disabled because it does not work
3738 //#if 0 3738 //#if 0
3739 case KMessageBox::Yes: // just this one 3739 case KMessageBox::Yes: // just this one
3740 //QDate qd = mNavigator->selectedDates().first(); 3740 //QDate qd = mNavigator->selectedDates().first();
3741 //if (!qd.isValid()) { 3741 //if (!qd.isValid()) {
3742 // kdDebug() << "no date selected, or invalid date" << endl; 3742 // kdDebug() << "no date selected, or invalid date" << endl;
3743 // KNotifyClient::beep(); 3743 // KNotifyClient::beep();
3744 // return; 3744 // return;
3745 //} 3745 //}
3746 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 3746 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
3747 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 3747 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
3748 anEvent->addExDate(itemDate); 3748 anEvent->addExDate(itemDate);
3749 int duration = anEvent->recurrence()->duration(); 3749 int duration = anEvent->recurrence()->duration();
3750 if ( duration > 0 ) { 3750 if ( duration > 0 ) {
3751 anEvent->recurrence()->setDuration( duration - 1 ); 3751 anEvent->recurrence()->setDuration( duration - 1 );
3752 } 3752 }
3753 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 3753 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
3754 } 3754 }
3755 break; 3755 break;
3756 //#endif 3756 //#endif
3757 } // switch 3757 } // switch
3758 } else { 3758 } else {
3759 if (KOPrefs::instance()->mConfirm) { 3759 if (KOPrefs::instance()->mConfirm) {
3760 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3760 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3761 i18n("\nAre you sure you want\nto delete this event?"), 3761 i18n("\nAre you sure you want\nto delete this event?"),
3762 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 3762 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3763 case KMessageBox::Continue: // OK 3763 case KMessageBox::Continue: // OK
3764 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3764 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3765 schedule(Scheduler::Cancel,anEvent); 3765 schedule(Scheduler::Cancel,anEvent);
3766 checkExternalId( anEvent); 3766 checkExternalId( anEvent);
3767 mCalendar->deleteEvent(anEvent); 3767 mCalendar->deleteEvent(anEvent);
3768 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3768 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3769 break; 3769 break;
3770 } // switch 3770 } // switch
3771 } else { 3771 } else {
3772 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3772 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3773 schedule(Scheduler::Cancel,anEvent); 3773 schedule(Scheduler::Cancel,anEvent);
3774 checkExternalId( anEvent); 3774 checkExternalId( anEvent);
3775 mCalendar->deleteEvent(anEvent); 3775 mCalendar->deleteEvent(anEvent);
3776 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3776 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3777 } 3777 }
3778 } // if-else 3778 } // if-else
3779 emit updateSearchDialog(); 3779 emit updateSearchDialog();
3780} 3780}
3781 3781
3782bool CalendarView::deleteEvent(const QString &uid) 3782bool CalendarView::deleteEvent(const QString &uid)
3783{ 3783{
3784 Event *ev = mCalendar->event(uid); 3784 Event *ev = mCalendar->event(uid);
3785 if (ev) { 3785 if (ev) {
3786 deleteEvent(ev); 3786 deleteEvent(ev);
3787 return true; 3787 return true;
3788 } else { 3788 } else {
3789 return false; 3789 return false;
3790 } 3790 }
3791} 3791}
3792 3792
3793/*****************************************************************************/ 3793/*****************************************************************************/
3794 3794
3795void CalendarView::action_mail() 3795void CalendarView::action_mail()
3796{ 3796{
3797#ifndef KORG_NOMAIL 3797#ifndef KORG_NOMAIL
3798 KOMailClient mailClient; 3798 KOMailClient mailClient;
3799 3799
3800 Incidence *incidence = currentSelection(); 3800 Incidence *incidence = currentSelection();
3801 3801
3802 if (!incidence) { 3802 if (!incidence) {
3803 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3803 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3804 return; 3804 return;
3805 } 3805 }
3806 if(incidence->attendeeCount() == 0 ) { 3806 if(incidence->attendeeCount() == 0 ) {
3807 KMessageBox::sorry(this, 3807 KMessageBox::sorry(this,
3808 i18n("Can't generate mail:\nNo attendees defined.\n")); 3808 i18n("Can't generate mail:\nNo attendees defined.\n"));
3809 return; 3809 return;
3810 } 3810 }
3811 3811
3812 CalendarLocal cal_tmp; 3812 CalendarLocal cal_tmp;
3813 Event *event = 0; 3813 Event *event = 0;
3814 Event *ev = 0; 3814 Event *ev = 0;
3815 if ( incidence && incidence->typeID() == eventID ) { 3815 if ( incidence && incidence->typeID() == eventID ) {
3816 event = static_cast<Event *>(incidence); 3816 event = static_cast<Event *>(incidence);
3817 ev = new Event(*event); 3817 ev = new Event(*event);
3818 cal_tmp.addEvent(ev); 3818 cal_tmp.addEvent(ev);
3819 } 3819 }
3820 ICalFormat mForm(); 3820 ICalFormat mForm();
3821 QString attachment = mForm.toString( &cal_tmp ); 3821 QString attachment = mForm.toString( &cal_tmp );
3822 if (ev) delete(ev); 3822 if (ev) delete(ev);
3823 3823
3824 mailClient.mailAttendees(currentSelection(), attachment); 3824 mailClient.mailAttendees(currentSelection(), attachment);
3825 3825
3826#endif 3826#endif
3827 3827
3828#if 0 3828#if 0
3829 Event *anEvent = 0; 3829 Event *anEvent = 0;
3830 if (mViewManager->currentView()->isEventView()) { 3830 if (mViewManager->currentView()->isEventView()) {
3831 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 3831 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
3832 } 3832 }
3833 3833
3834 if (!anEvent) { 3834 if (!anEvent) {
3835 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3835 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3836 return; 3836 return;
3837 } 3837 }
3838 if(anEvent->attendeeCount() == 0 ) { 3838 if(anEvent->attendeeCount() == 0 ) {
3839 KMessageBox::sorry(this, 3839 KMessageBox::sorry(this,
3840 i18n("Can't generate mail:\nNo attendees defined.\n")); 3840 i18n("Can't generate mail:\nNo attendees defined.\n"));
3841 return; 3841 return;
3842 } 3842 }
3843 3843
3844 mailobject.emailEvent(anEvent); 3844 mailobject.emailEvent(anEvent);
3845#endif 3845#endif
3846} 3846}
3847 3847
3848 3848
3849void CalendarView::schedule_publish(Incidence *incidence) 3849void CalendarView::schedule_publish(Incidence *incidence)
3850{ 3850{
3851 Event *event = 0; 3851 Event *event = 0;
3852 Todo *todo = 0; 3852 Todo *todo = 0;
3853 3853
3854 if (incidence == 0) { 3854 if (incidence == 0) {
3855 incidence = mViewManager->currentView()->selectedIncidences().first(); 3855 incidence = mViewManager->currentView()->selectedIncidences().first();
3856 if (incidence == 0) { 3856 if (incidence == 0) {
3857 incidence = mTodoList->selectedIncidences().first(); 3857 incidence = mTodoList->selectedIncidences().first();
3858 } 3858 }
3859 } 3859 }
3860 if ( incidence && incidence->typeID() == eventID ) { 3860 if ( incidence && incidence->typeID() == eventID ) {
3861 event = static_cast<Event *>(incidence); 3861 event = static_cast<Event *>(incidence);
3862 } else { 3862 } else {
3863 if ( incidence && incidence->typeID() == todoID ) { 3863 if ( incidence && incidence->typeID() == todoID ) {
3864 todo = static_cast<Todo *>(incidence); 3864 todo = static_cast<Todo *>(incidence);
3865 } 3865 }
3866 } 3866 }
3867 3867
3868 if (!event && !todo) { 3868 if (!event && !todo) {
3869 KMessageBox::sorry(this,i18n("No event selected.")); 3869 KMessageBox::sorry(this,i18n("No event selected."));
3870 return; 3870 return;
3871 } 3871 }
3872 3872
3873 PublishDialog *publishdlg = new PublishDialog(); 3873 PublishDialog *publishdlg = new PublishDialog();
3874 if (incidence->attendeeCount()>0) { 3874 if (incidence->attendeeCount()>0) {
3875 QPtrList<Attendee> attendees = incidence->attendees(); 3875 QPtrList<Attendee> attendees = incidence->attendees();
3876 attendees.first(); 3876 attendees.first();
3877 while ( attendees.current()!=0 ) { 3877 while ( attendees.current()!=0 ) {
3878 publishdlg->addAttendee(attendees.current()); 3878 publishdlg->addAttendee(attendees.current());
3879 attendees.next(); 3879 attendees.next();
3880 } 3880 }
3881 } 3881 }
3882 bool send = true; 3882 bool send = true;
3883 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 3883 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3884 if ( publishdlg->exec() != QDialog::Accepted ) 3884 if ( publishdlg->exec() != QDialog::Accepted )
3885 send = false; 3885 send = false;
3886 } 3886 }
3887 if ( send ) { 3887 if ( send ) {
3888 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3888 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3889 if ( event ) { 3889 if ( event ) {
3890 Event *ev = new Event(*event); 3890 Event *ev = new Event(*event);
3891 ev->registerObserver(0); 3891 ev->registerObserver(0);
3892 ev->clearAttendees(); 3892 ev->clearAttendees();
3893 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3893 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3894 delete(ev); 3894 delete(ev);
3895 } 3895 }
3896 } else { 3896 } else {
3897 if ( todo ) { 3897 if ( todo ) {
3898 Todo *ev = new Todo(*todo); 3898 Todo *ev = new Todo(*todo);
3899 ev->registerObserver(0); 3899 ev->registerObserver(0);
3900 ev->clearAttendees(); 3900 ev->clearAttendees();
3901 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3901 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3902 delete(ev); 3902 delete(ev);
3903 } 3903 }
3904 } 3904 }
3905 } 3905 }
3906 } 3906 }
3907 delete publishdlg; 3907 delete publishdlg;
3908} 3908}
3909 3909
3910void CalendarView::schedule_request(Incidence *incidence) 3910void CalendarView::schedule_request(Incidence *incidence)
3911{ 3911{
3912 schedule(Scheduler::Request,incidence); 3912 schedule(Scheduler::Request,incidence);
3913} 3913}
3914 3914
3915void CalendarView::schedule_refresh(Incidence *incidence) 3915void CalendarView::schedule_refresh(Incidence *incidence)
3916{ 3916{
3917 schedule(Scheduler::Refresh,incidence); 3917 schedule(Scheduler::Refresh,incidence);
3918} 3918}
3919 3919
3920void CalendarView::schedule_cancel(Incidence *incidence) 3920void CalendarView::schedule_cancel(Incidence *incidence)
3921{ 3921{
3922 schedule(Scheduler::Cancel,incidence); 3922 schedule(Scheduler::Cancel,incidence);
3923} 3923}
3924 3924
3925void CalendarView::schedule_add(Incidence *incidence) 3925void CalendarView::schedule_add(Incidence *incidence)
3926{ 3926{
3927 schedule(Scheduler::Add,incidence); 3927 schedule(Scheduler::Add,incidence);
3928} 3928}
3929 3929
3930void CalendarView::schedule_reply(Incidence *incidence) 3930void CalendarView::schedule_reply(Incidence *incidence)
3931{ 3931{
3932 schedule(Scheduler::Reply,incidence); 3932 schedule(Scheduler::Reply,incidence);
3933} 3933}
3934 3934
3935void CalendarView::schedule_counter(Incidence *incidence) 3935void CalendarView::schedule_counter(Incidence *incidence)
3936{ 3936{
3937 schedule(Scheduler::Counter,incidence); 3937 schedule(Scheduler::Counter,incidence);
3938} 3938}
3939 3939
3940void CalendarView::schedule_declinecounter(Incidence *incidence) 3940void CalendarView::schedule_declinecounter(Incidence *incidence)
3941{ 3941{
3942 schedule(Scheduler::Declinecounter,incidence); 3942 schedule(Scheduler::Declinecounter,incidence);
3943} 3943}
3944 3944
3945void CalendarView::schedule_publish_freebusy(int daysToPublish) 3945void CalendarView::schedule_publish_freebusy(int daysToPublish)
3946{ 3946{
3947 QDateTime start = QDateTime::currentDateTime(); 3947 QDateTime start = QDateTime::currentDateTime();
3948 QDateTime end = start.addDays(daysToPublish); 3948 QDateTime end = start.addDays(daysToPublish);
3949 3949
3950 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 3950 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
3951 freebusy->setOrganizer(KOPrefs::instance()->email()); 3951 freebusy->setOrganizer(KOPrefs::instance()->email());
3952 3952
3953 3953
3954 PublishDialog *publishdlg = new PublishDialog(); 3954 PublishDialog *publishdlg = new PublishDialog();
3955 if ( publishdlg->exec() == QDialog::Accepted ) { 3955 if ( publishdlg->exec() == QDialog::Accepted ) {
3956 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3956 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3957 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 3957 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
3958 delete(freebusy); 3958 delete(freebusy);
3959 } 3959 }
3960 } 3960 }
3961 delete publishdlg; 3961 delete publishdlg;
3962} 3962}
3963 3963
3964void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 3964void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
3965{ 3965{
3966 Event *event = 0; 3966 Event *event = 0;
3967 Todo *todo = 0; 3967 Todo *todo = 0;
3968 3968
3969 if (incidence == 0) { 3969 if (incidence == 0) {
3970 incidence = mViewManager->currentView()->selectedIncidences().first(); 3970 incidence = mViewManager->currentView()->selectedIncidences().first();
3971 if (incidence == 0) { 3971 if (incidence == 0) {
3972 incidence = mTodoList->selectedIncidences().first(); 3972 incidence = mTodoList->selectedIncidences().first();
3973 } 3973 }
3974 } 3974 }
3975 if ( incidence && incidence->typeID() == eventID ) { 3975 if ( incidence && incidence->typeID() == eventID ) {
3976 event = static_cast<Event *>(incidence); 3976 event = static_cast<Event *>(incidence);
3977 } 3977 }
3978 if ( incidence && incidence->typeID() == todoID ) { 3978 if ( incidence && incidence->typeID() == todoID ) {
3979 todo = static_cast<Todo *>(incidence); 3979 todo = static_cast<Todo *>(incidence);
3980 } 3980 }
3981 3981
3982 if (!event && !todo) { 3982 if (!event && !todo) {
3983 KMessageBox::sorry(this,i18n("No event selected.")); 3983 KMessageBox::sorry(this,i18n("No event selected."));
3984 return; 3984 return;
3985 } 3985 }
3986 3986
3987 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3987 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3988 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3988 KMessageBox::sorry(this,i18n("The event has no attendees."));
3989 return; 3989 return;
3990 } 3990 }
3991 3991
3992 Event *ev = 0; 3992 Event *ev = 0;
3993 if (event) ev = new Event(*event); 3993 if (event) ev = new Event(*event);
3994 Todo *to = 0; 3994 Todo *to = 0;
3995 if (todo) to = new Todo(*todo); 3995 if (todo) to = new Todo(*todo);
3996 3996
3997 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3997 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3998 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3998 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3999 if (!me) { 3999 if (!me) {
4000 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4000 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4001 return; 4001 return;
4002 } 4002 }
4003 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4003 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4004 StatusDialog *statdlg = new StatusDialog(this); 4004 StatusDialog *statdlg = new StatusDialog(this);
4005 if (!statdlg->exec()==QDialog::Accepted) return; 4005 if (!statdlg->exec()==QDialog::Accepted) return;
4006 me->setStatus( statdlg->status() ); 4006 me->setStatus( statdlg->status() );
4007 delete(statdlg); 4007 delete(statdlg);
4008 } 4008 }
4009 Attendee *menew = new Attendee(*me); 4009 Attendee *menew = new Attendee(*me);
4010 if (ev) { 4010 if (ev) {
4011 ev->clearAttendees(); 4011 ev->clearAttendees();
4012 ev->addAttendee(menew,false); 4012 ev->addAttendee(menew,false);
4013 } else { 4013 } else {
4014 if (to) { 4014 if (to) {
4015 todo->clearAttendees(); 4015 todo->clearAttendees();
4016 todo->addAttendee(menew,false); 4016 todo->addAttendee(menew,false);
4017 } 4017 }
4018 } 4018 }
4019 } 4019 }
4020 4020
4021 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4021 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4022 if (ev) { 4022 if (ev) {
4023 if ( !dlg->addMessage(ev,method) ) delete(ev); 4023 if ( !dlg->addMessage(ev,method) ) delete(ev);
4024 } else { 4024 } else {
4025 if (to) { 4025 if (to) {
4026 if ( !dlg->addMessage(to,method) ) delete(to); 4026 if ( !dlg->addMessage(to,method) ) delete(to);
4027 } 4027 }
4028 } 4028 }
4029} 4029}
4030 4030
4031void CalendarView::openAddressbook() 4031void CalendarView::openAddressbook()
4032{ 4032{
4033 KRun::runCommand("kaddressbook"); 4033 KRun::runCommand("kaddressbook");
4034} 4034}
4035 4035
4036void CalendarView::setModified(bool modified) 4036void CalendarView::setModified(bool modified)
4037{ 4037{
4038 if ( modified ) 4038 if ( modified )
4039 emit signalmodified(); 4039 emit signalmodified();
4040 if (mModified != modified) { 4040 if (mModified != modified) {
4041 mModified = modified; 4041 mModified = modified;
4042 emit modifiedChanged(mModified); 4042 emit modifiedChanged(mModified);
4043 } 4043 }
4044} 4044}
4045 4045
4046bool CalendarView::isReadOnly() 4046bool CalendarView::isReadOnly()
4047{ 4047{
4048 return mReadOnly; 4048 return mReadOnly;
4049} 4049}
4050 4050
4051void CalendarView::setReadOnly(bool readOnly) 4051void CalendarView::setReadOnly(bool readOnly)
4052{ 4052{
4053 if (mReadOnly != readOnly) { 4053 if (mReadOnly != readOnly) {
4054 mReadOnly = readOnly; 4054 mReadOnly = readOnly;
4055 emit readOnlyChanged(mReadOnly); 4055 emit readOnlyChanged(mReadOnly);
4056 } 4056 }
4057} 4057}
4058 4058
4059bool CalendarView::isModified() 4059bool CalendarView::isModified()
4060{ 4060{
4061 return mModified; 4061 return mModified;
4062} 4062}
4063void CalendarView::slotprintSelInc() 4063void CalendarView::slotprintSelInc()
4064{ 4064{
4065 if ( currentSelection() == 0 ) { 4065 if ( currentSelection() == 0 ) {
4066 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4066 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4067 return; 4067 return;
4068 } 4068 }
4069 showIncidence(); 4069 showIncidence();
4070 getEventViewerDialog()->print(); 4070 getEventViewerDialog()->print();
4071 4071
4072} 4072}
4073void CalendarView::printSetup() 4073void CalendarView::printSetup()
4074{ 4074{
4075#ifndef KORG_NOPRINTER 4075#ifndef KORG_NOPRINTER
4076 createPrinter(); 4076 createPrinter();
4077 4077
4078 mCalPrinter->setupPrinter(); 4078 mCalPrinter->setupPrinter();
4079#endif 4079#endif
4080} 4080}
4081 4081
4082void CalendarView::print() 4082void CalendarView::print()
4083{ 4083{
4084#ifndef KORG_NOPRINTER 4084#ifndef KORG_NOPRINTER
4085 createPrinter(); 4085 createPrinter();
4086 4086
4087 DateList tmpDateList = mNavigator->selectedDates(); 4087 DateList tmpDateList = mNavigator->selectedDates();
4088 mCalPrinter->print(CalPrinter::Month, 4088 mCalPrinter->print(CalPrinter::Month,
4089 tmpDateList.first(), tmpDateList.last()); 4089 tmpDateList.first(), tmpDateList.last());
4090#endif 4090#endif
4091} 4091}
4092 4092
4093void CalendarView::printPreview() 4093void CalendarView::printPreview()
4094{ 4094{
4095#ifndef KORG_NOPRINTER 4095#ifndef KORG_NOPRINTER
4096 kdDebug() << "CalendarView::printPreview()" << endl; 4096 kdDebug() << "CalendarView::printPreview()" << endl;
4097 4097
4098 createPrinter(); 4098 createPrinter();
4099 4099
4100 DateList tmpDateList = mNavigator->selectedDates(); 4100 DateList tmpDateList = mNavigator->selectedDates();
4101 4101
4102 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4102 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4103 tmpDateList.last()); 4103 tmpDateList.last());
4104#endif 4104#endif
4105} 4105}
4106 4106
4107void CalendarView::exportICalendar() 4107void CalendarView::exportICalendar()
4108{ 4108{
4109 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 4109 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
4110 4110
4111 // Force correct extension 4111 // Force correct extension
4112 if (filename.right(4) != ".ics") filename += ".ics"; 4112 if (filename.right(4) != ".ics") filename += ".ics";
4113 4113
4114 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4114 FileStorage storage( mCalendar, filename, new ICalFormat() );
4115 storage.save(); 4115 storage.save();
4116} 4116}
4117 4117
4118bool CalendarView::exportVCalendar( QString filename ) 4118bool CalendarView::exportVCalendar( QString filename )
4119{ 4119{
4120 if (mCalendar->journals().count() > 0) { 4120 if (mCalendar->journals().count() > 0) {
4121 int result = KMessageBox::warningContinueCancel(this, 4121 int result = KMessageBox::warningContinueCancel(this,
4122 i18n("The journal entries can not be\nexported to a vCalendar file."), 4122 i18n("The journal entries can not be\nexported to a vCalendar file."),
4123 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4123 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4124 true); 4124 true);
4125 if (result != KMessageBox::Continue) return false; 4125 if (result != KMessageBox::Continue) return false;
4126 } 4126 }
4127 4127
4128 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4128 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4129 4129
4130 // Force correct extension 4130 // Force correct extension
4131 if (filename.right(4) != ".vcs") filename += ".vcs"; 4131 if (filename.right(4) != ".vcs") filename += ".vcs";
4132 4132
4133 FileStorage storage( mCalendar, filename, new VCalFormat ); 4133 FileStorage storage( mCalendar, filename, new VCalFormat );
4134 return storage.save(); 4134 return storage.save();
4135 4135
4136} 4136}
4137 4137
4138void CalendarView::eventUpdated(Incidence *) 4138void CalendarView::eventUpdated(Incidence *)
4139{ 4139{
4140 setModified(); 4140 setModified();
4141 // Don't call updateView here. The code, which has caused the update of the 4141 // Don't call updateView here. The code, which has caused the update of the
4142 // event is responsible for updating the view. 4142 // event is responsible for updating the view.
4143 // updateView(); 4143 // updateView();
4144} 4144}
4145 4145
4146void CalendarView::adaptNavigationUnits() 4146void CalendarView::adaptNavigationUnits()
4147{ 4147{
4148 if (mViewManager->currentView()->isEventView()) { 4148 if (mViewManager->currentView()->isEventView()) {
4149 int days = mViewManager->currentView()->currentDateCount(); 4149 int days = mViewManager->currentView()->currentDateCount();
4150 if (days == 1) { 4150 if (days == 1) {
4151 emit changeNavStringPrev(i18n("&Previous Day")); 4151 emit changeNavStringPrev(i18n("&Previous Day"));
4152 emit changeNavStringNext(i18n("&Next Day")); 4152 emit changeNavStringNext(i18n("&Next Day"));
4153 } else { 4153 } else {
4154 emit changeNavStringPrev(i18n("&Previous Week")); 4154 emit changeNavStringPrev(i18n("&Previous Week"));
4155 emit changeNavStringNext(i18n("&Next Week")); 4155 emit changeNavStringNext(i18n("&Next Week"));
4156 } 4156 }
4157 } 4157 }
4158} 4158}
4159 4159
4160void CalendarView::processMainViewSelection( Incidence *incidence ) 4160void CalendarView::processMainViewSelection( Incidence *incidence )
4161{ 4161{
4162 if ( incidence ) mTodoList->clearSelection(); 4162 if ( incidence ) mTodoList->clearSelection();
4163 processIncidenceSelection( incidence ); 4163 processIncidenceSelection( incidence );
4164} 4164}
4165 4165
4166void CalendarView::processTodoListSelection( Incidence *incidence ) 4166void CalendarView::processTodoListSelection( Incidence *incidence )
4167{ 4167{
4168 if ( incidence && mViewManager->currentView() ) { 4168 if ( incidence && mViewManager->currentView() ) {
4169 mViewManager->currentView()->clearSelection(); 4169 mViewManager->currentView()->clearSelection();
4170 } 4170 }
4171 processIncidenceSelection( incidence ); 4171 processIncidenceSelection( incidence );
4172} 4172}
4173 4173
4174void CalendarView::processIncidenceSelection( Incidence *incidence ) 4174void CalendarView::processIncidenceSelection( Incidence *incidence )
4175{ 4175{
4176 emit incidenceSelected( incidence ); 4176 emit incidenceSelected( incidence );
4177 if ( incidence == mSelectedIncidence ) return; 4177 if ( incidence == mSelectedIncidence ) return;
4178 mSelectedIncidence = incidence; 4178 mSelectedIncidence = incidence;
4179 4179
4180 if ( incidence && incidence->typeID() == eventID ) { 4180 if ( incidence && incidence->typeID() == eventID ) {
4181 Event *event = static_cast<Event *>( incidence ); 4181 Event *event = static_cast<Event *>( incidence );
4182 if ( event->organizer() == KOPrefs::instance()->email() ) { 4182 if ( event->organizer() == KOPrefs::instance()->email() ) {
4183 emit organizerEventsSelected( true ); 4183 emit organizerEventsSelected( true );
4184 } else { 4184 } else {
4185 emit organizerEventsSelected(false); 4185 emit organizerEventsSelected(false);
4186 } 4186 }
4187 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4187 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4188 KOPrefs::instance()->email() ) ) { 4188 KOPrefs::instance()->email() ) ) {
4189 emit groupEventsSelected( true ); 4189 emit groupEventsSelected( true );
4190 } else { 4190 } else {
4191 emit groupEventsSelected(false); 4191 emit groupEventsSelected(false);
4192 } 4192 }
4193 return; 4193 return;
4194 } else { 4194 } else {
4195 if ( incidence && incidence->typeID() == todoID ) { 4195 if ( incidence && incidence->typeID() == todoID ) {
4196 emit todoSelected( true ); 4196 emit todoSelected( true );
4197 Todo *event = static_cast<Todo *>( incidence ); 4197 Todo *event = static_cast<Todo *>( incidence );
4198 if ( event->organizer() == KOPrefs::instance()->email() ) { 4198 if ( event->organizer() == KOPrefs::instance()->email() ) {
4199 emit organizerEventsSelected( true ); 4199 emit organizerEventsSelected( true );
4200 } else { 4200 } else {
4201 emit organizerEventsSelected(false); 4201 emit organizerEventsSelected(false);
4202 } 4202 }
4203 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4203 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4204 KOPrefs::instance()->email() ) ) { 4204 KOPrefs::instance()->email() ) ) {
4205 emit groupEventsSelected( true ); 4205 emit groupEventsSelected( true );
4206 } else { 4206 } else {
4207 emit groupEventsSelected(false); 4207 emit groupEventsSelected(false);
4208 } 4208 }
4209 return; 4209 return;
4210 } else { 4210 } else {
4211 emit todoSelected( false ); 4211 emit todoSelected( false );
4212 emit organizerEventsSelected(false); 4212 emit organizerEventsSelected(false);
4213 emit groupEventsSelected(false); 4213 emit groupEventsSelected(false);
4214 } 4214 }
4215 return; 4215 return;
4216 } 4216 }
4217 4217
4218 /* if ( incidence && incidence->typeID() == todoID ) { 4218 /* if ( incidence && incidence->typeID() == todoID ) {
4219 emit todoSelected( true ); 4219 emit todoSelected( true );
4220 } else { 4220 } else {
4221 emit todoSelected( false ); 4221 emit todoSelected( false );
4222 }*/ 4222 }*/
4223} 4223}
4224 4224
4225 4225
4226void CalendarView::checkClipboard() 4226void CalendarView::checkClipboard()
4227{ 4227{
4228#ifndef KORG_NODND 4228#ifndef KORG_NODND
4229 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4229 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4230 emit pasteEnabled(true); 4230 emit pasteEnabled(true);
4231 } else { 4231 } else {
4232 emit pasteEnabled(false); 4232 emit pasteEnabled(false);
4233 } 4233 }
4234#endif 4234#endif
4235} 4235}
4236 4236
4237void CalendarView::showDates(const DateList &selectedDates) 4237void CalendarView::showDates(const DateList &selectedDates)
4238{ 4238{
4239 // kdDebug() << "CalendarView::selectDates()" << endl; 4239 // kdDebug() << "CalendarView::selectDates()" << endl;
4240 4240
4241 4241
4242 if ( !mBlockShowDates ) { 4242 if ( !mBlockShowDates ) {
4243 if ( mViewManager->currentView() ) { 4243 if ( mViewManager->currentView() ) {
4244 updateView( selectedDates.first(), selectedDates.last() ); 4244 updateView( selectedDates.first(), selectedDates.last() );
4245 } else { 4245 } else {
4246 mViewManager->showAgendaView(); 4246 mViewManager->showAgendaView();
4247 } 4247 }
4248 } 4248 }
4249 4249
4250 QDate date = selectedDates.first(); 4250 QDate date = selectedDates.first();
4251 if ( ! date.isValid() ) { 4251 if ( ! date.isValid() ) {
4252 topLevelWidget()->setCaption(""); 4252 topLevelWidget()->setCaption("");
4253 return; 4253 return;
4254 } 4254 }
4255 4255
4256 QString selDates; 4256 QString selDates;
4257 selDates = KGlobal::locale()->formatDate( date, true); 4257 selDates = KGlobal::locale()->formatDate( date, true);
4258 if (selectedDates.first() < selectedDates.last() ) 4258 if (selectedDates.first() < selectedDates.last() )
4259 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4259 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4260 else { 4260 else {
4261 QString addString; 4261 QString addString;
4262 if ( date == QDateTime::currentDateTime().date() ) 4262 if ( date == QDateTime::currentDateTime().date() )
4263 addString = i18n("Today"); 4263 addString = i18n("Today");
4264 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4264 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4265 addString = i18n("Tomorrow"); 4265 addString = i18n("Tomorrow");
4266 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4266 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4267 addString = i18n("Yesterday"); 4267 addString = i18n("Yesterday");
4268 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4268 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4269 addString = i18n("Day before yesterday"); 4269 addString = i18n("Day before yesterday");
4270 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4270 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4271 addString = i18n("Day after tomorrow"); 4271 addString = i18n("Day after tomorrow");
4272 if ( !addString.isEmpty() ) { 4272 if ( !addString.isEmpty() ) {
4273 topLevelWidget()->setCaption( addString+", " + selDates ); 4273 topLevelWidget()->setCaption( addString+", " + selDates );
4274 return; 4274 return;
4275 } 4275 }
4276 } 4276 }
4277 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4277 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4278 4278
4279} 4279}
4280 4280
4281QPtrList<CalFilter> CalendarView::filters() 4281QPtrList<CalFilter> CalendarView::filters()
4282{ 4282{
4283 return mFilters; 4283 return mFilters;
4284 4284
4285} 4285}
4286void CalendarView::editFilters() 4286void CalendarView::editFilters()
4287{ 4287{
4288 // kdDebug() << "CalendarView::editFilters()" << endl; 4288 // kdDebug() << "CalendarView::editFilters()" << endl;
4289 4289
4290 CalFilter *filter = mFilters.first(); 4290 CalFilter *filter = mFilters.first();
4291 while(filter) { 4291 while(filter) {
4292 filter = mFilters.next(); 4292 filter = mFilters.next();
4293 } 4293 }
4294 4294
4295 mDialogManager->showFilterEditDialog(&mFilters); 4295 mDialogManager->showFilterEditDialog(&mFilters);
4296 updateFilter(); 4296 updateFilter();
4297} 4297}
4298void CalendarView::toggleFilter() 4298void CalendarView::toggleFilter()
4299{ 4299{
4300 if ( mLeftFrame->isHidden() ) { 4300 if ( mLeftFrame->isHidden() ) {
4301 toggleExpand(); 4301 toggleExpand();
4302 showFilter( true ); 4302 showFilter( true );
4303 } else 4303 } else
4304 showFilter(! mCalEditView->isVisible()); 4304 showFilter(! mCalEditView->isVisible());
4305} 4305}
4306 4306
4307KOFilterView *CalendarView::filterView() 4307KOFilterView *CalendarView::filterView()
4308{ 4308{
4309 return mFilterView; 4309 return mFilterView;
4310} 4310}
4311void CalendarView::selectFilter( int fil ) 4311void CalendarView::selectFilter( int fil )
4312{ 4312{
4313 mFilterView->setSelectedFilter( fil ); 4313 mFilterView->setSelectedFilter( fil );
4314 updateUnmanagedViews(); 4314 updateUnmanagedViews();
4315} 4315}
4316void CalendarView::showFilter(bool visible) 4316void CalendarView::showFilter(bool visible)
4317{ 4317{
4318#if 1 4318#if 1
4319 if (visible) { 4319 if (visible) {
4320 mCalEditView->readConfig(); 4320 mCalEditView->readConfig();
4321 mCalEditView->show(); 4321 mCalEditView->show();
4322 QValueList<int> sizes; 4322 QValueList<int> sizes;
4323 sizes = mLeftFrame->sizes(); 4323 sizes = mLeftFrame->sizes();
4324 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4324 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4325 sizes.clear(); 4325 sizes.clear();
4326 sizes << 100; 4326 sizes << 100;
4327 sizes << 0; 4327 sizes << 0;
4328 sizes << 0; 4328 sizes << 0;
4329 sizes << 100; 4329 sizes << 100;
4330 mLeftFrame->setSizes(sizes); 4330 mLeftFrame->setSizes(sizes);
4331 } 4331 }
4332#if 0 4332#if 0
4333 sizes = mLeftFrame->sizes(); 4333 sizes = mLeftFrame->sizes();
4334 int ccc = 0; 4334 int ccc = 0;
4335 while ( ccc < sizes.count()) { 4335 while ( ccc < sizes.count()) {
4336 qDebug("size %d %d ", ccc, sizes[ccc]); 4336 qDebug("size %d %d ", ccc, sizes[ccc]);
4337 ++ccc; 4337 ++ccc;
4338 } 4338 }
4339#endif 4339#endif
4340 4340
4341 } 4341 }
4342 else { 4342 else {
4343 mCalEditView->hide(); 4343 mCalEditView->hide();
4344 } 4344 }
4345#else 4345#else
4346 if (visible) mFilterView->show(); 4346 if (visible) mFilterView->show();
4347 else mFilterView->hide(); 4347 else mFilterView->hide();
4348#endif 4348#endif
4349} 4349}
4350void CalendarView::toggleFilerEnabled( ) 4350void CalendarView::toggleFilerEnabled( )
4351{ 4351{
4352 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4352 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4353 if ( !mFilterView->filtersEnabled() ) 4353 if ( !mFilterView->filtersEnabled() )
4354 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4354 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4355 updateUnmanagedViews(); 4355 updateUnmanagedViews();
4356 4356
4357} 4357}
4358void CalendarView::updateFilter() 4358void CalendarView::updateFilter()
4359{ 4359{
4360 CalFilter *filter = mFilterView->selectedFilter(); 4360 CalFilter *filter = mFilterView->selectedFilter();
4361 if (filter) { 4361 if (filter) {
4362 QString mess; 4362 QString mess;
4363 if (mFilterView->filtersEnabled()) { 4363 if (mFilterView->filtersEnabled()) {
4364 mess = i18n("Filter selected: ")+filter->name(); 4364 mess = i18n("Filter selected: ")+filter->name();
4365 filter->setEnabled(true); 4365 filter->setEnabled(true);
4366 } 4366 }
4367 else filter->setEnabled(false); 4367 else filter->setEnabled(false);
4368 mCalendar->setFilter(filter); 4368 mCalendar->setFilter(filter);
4369 updateView(); 4369 updateView();
4370 if ( !mess.isEmpty() ) 4370 if ( !mess.isEmpty() )
4371 topLevelWidget()->setCaption( mess ); 4371 topLevelWidget()->setCaption( mess );
4372 4372
4373 } 4373 }
4374 emit filtersUpdated(); 4374 emit filtersUpdated();
4375} 4375}
4376 4376
4377void CalendarView::filterEdited() 4377void CalendarView::filterEdited()
4378{ 4378{
4379 mFilterView->updateFilters(); 4379 mFilterView->updateFilters();
4380 updateFilter(); 4380 updateFilter();
4381 writeSettings(); 4381 writeSettings();
4382} 4382}
4383 4383
4384 4384
4385void CalendarView::takeOverEvent() 4385void CalendarView::takeOverEvent()
4386{ 4386{
4387 Incidence *incidence = currentSelection(); 4387 Incidence *incidence = currentSelection();
4388 4388
4389 if (!incidence) return; 4389 if (!incidence) return;
4390 4390
4391 incidence->setOrganizer(KOPrefs::instance()->email()); 4391 incidence->setOrganizer(KOPrefs::instance()->email());
4392 incidence->recreate(); 4392 incidence->recreate();
4393 incidence->setReadOnly(false); 4393 incidence->setReadOnly(false);
4394 4394
4395 updateView(); 4395 updateView();
4396} 4396}
4397 4397
4398void CalendarView::takeOverCalendar() 4398void CalendarView::takeOverCalendar()
4399{ 4399{
4400 // TODO: Create Calendar::allIncidences() function and use it here 4400 // TODO: Create Calendar::allIncidences() function and use it here
4401 4401
4402 clearAllViews(); 4402 clearAllViews();
4403 QPtrList<Event> events = mCalendar->events(); 4403 QPtrList<Event> events = mCalendar->events();
4404 for(uint i=0; i<events.count(); ++i) { 4404 for(uint i=0; i<events.count(); ++i) {
4405 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4405 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4406 events.at(i)->recreate(); 4406 events.at(i)->recreate();
4407 events.at(i)->setReadOnly(false); 4407 events.at(i)->setReadOnly(false);
4408 } 4408 }
4409 4409
4410 QPtrList<Todo> todos = mCalendar->todos(); 4410 QPtrList<Todo> todos = mCalendar->todos();
4411 for(uint i=0; i<todos.count(); ++i) { 4411 for(uint i=0; i<todos.count(); ++i) {
4412 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4412 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4413 todos.at(i)->recreate(); 4413 todos.at(i)->recreate();
4414 todos.at(i)->setReadOnly(false); 4414 todos.at(i)->setReadOnly(false);
4415 } 4415 }
4416 4416
4417 QPtrList<Journal> journals = mCalendar->journals(); 4417 QPtrList<Journal> journals = mCalendar->journals();
4418 for(uint i=0; i<journals.count(); ++i) { 4418 for(uint i=0; i<journals.count(); ++i) {
4419 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4419 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4420 journals.at(i)->recreate(); 4420 journals.at(i)->recreate();
4421 journals.at(i)->setReadOnly(false); 4421 journals.at(i)->setReadOnly(false);
4422 } 4422 }
4423 4423
4424 updateView(); 4424 updateView();
4425} 4425}
4426 4426
4427void CalendarView::showIntro() 4427void CalendarView::showIntro()
4428{ 4428{
4429 kdDebug() << "To be implemented." << endl; 4429 kdDebug() << "To be implemented." << endl;
4430} 4430}
4431 4431
4432QWidgetStack *CalendarView::viewStack() 4432QWidgetStack *CalendarView::viewStack()
4433{ 4433{
4434 return mRightFrame; 4434 return mRightFrame;
4435} 4435}
4436 4436
4437QWidget *CalendarView::leftFrame() 4437QWidget *CalendarView::leftFrame()
4438{ 4438{
4439 return ( QWidget *)mLeftFrame; 4439 return ( QWidget *)mLeftFrame;
4440} 4440}
4441 4441
4442DateNavigator *CalendarView::dateNavigator() 4442DateNavigator *CalendarView::dateNavigator()
4443{ 4443{
4444 return mNavigator; 4444 return mNavigator;
4445} 4445}
4446 4446
4447KDateNavigator* CalendarView::dateNavigatorWidget() 4447KDateNavigator* CalendarView::dateNavigatorWidget()
4448{ 4448{
4449 return mDateNavigator->navigatorView(); 4449 return mDateNavigator->navigatorView();
4450} 4450}
4451void CalendarView::toggleDateNavigatorWidget() 4451void CalendarView::toggleDateNavigatorWidget()
4452{ 4452{
4453 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4453 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4454 4454
4455 if (!KOPrefs::instance()->mShowDateNavigator ) 4455 if (!KOPrefs::instance()->mShowDateNavigator )
4456 mDateNavigator->hide(); 4456 mDateNavigator->hide();
4457 else 4457 else
4458 mDateNavigator->show(); 4458 mDateNavigator->show();
4459} 4459}
4460void CalendarView::addView(KOrg::BaseView *view) 4460void CalendarView::addView(KOrg::BaseView *view)
4461{ 4461{
4462 mViewManager->addView(view); 4462 mViewManager->addView(view);
4463} 4463}
4464 4464
4465void CalendarView::showView(KOrg::BaseView *view) 4465void CalendarView::showView(KOrg::BaseView *view)
4466{ 4466{
4467 mViewManager->showView(view, mLeftFrame->isVisible()); 4467 mViewManager->showView(view, mLeftFrame->isVisible());
4468} 4468}
4469 4469
4470Incidence *CalendarView::currentSelection() 4470Incidence *CalendarView::currentSelection()
4471{ 4471{
4472 return mViewManager->currentSelection(); 4472 return mViewManager->currentSelection();
4473} 4473}
4474void CalendarView::toggleAllDaySize() 4474void CalendarView::toggleAllDaySize()
4475{ 4475{
4476 /* 4476 /*
4477 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4477 if ( KOPrefs::instance()->mAllDaySize > 47 )
4478 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4478 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4479 else 4479 else
4480 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4480 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4481 */ 4481 */
4482 viewManager()->agendaView()->toggleAllDay(); 4482 viewManager()->agendaView()->toggleAllDay();
4483} 4483}
4484void CalendarView::toggleExpand() 4484void CalendarView::toggleExpand()
4485{ 4485{
4486 // if ( mLeftFrame->isHidden() ) { 4486 // if ( mLeftFrame->isHidden() ) {
4487 // mLeftFrame->show(); 4487 // mLeftFrame->show();
4488 // emit calendarViewExpanded( false ); 4488 // emit calendarViewExpanded( false );
4489 // } else { 4489 // } else {
4490 // mLeftFrame->hide(); 4490 // mLeftFrame->hide();
4491 // emit calendarViewExpanded( true ); 4491 // emit calendarViewExpanded( true );
4492 // } 4492 // }
4493 //qDebug(" CalendarView::toggleExpand()"); 4493 //qDebug(" CalendarView::toggleExpand()");
4494 globalFlagBlockAgenda = 1; 4494 globalFlagBlockAgenda = 1;
4495 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4495 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4496 globalFlagBlockAgenda = 5; 4496 globalFlagBlockAgenda = 5;
4497 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4497 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4498 //mViewManager->showView( 0, true ); 4498 //mViewManager->showView( 0, true );
4499} 4499}
4500 4500
4501void CalendarView::calendarModified( bool modified, Calendar * ) 4501void CalendarView::calendarModified( bool modified, Calendar * )
4502{ 4502{
4503 setModified( modified ); 4503 setModified( modified );
4504} 4504}
4505 4505
4506Todo *CalendarView::selectedTodo() 4506Todo *CalendarView::selectedTodo()
4507{ 4507{
4508 Incidence *incidence = currentSelection(); 4508 Incidence *incidence = currentSelection();
4509 if ( incidence && incidence->typeID() == todoID ) { 4509 if ( incidence && incidence->typeID() == todoID ) {
4510 return static_cast<Todo *>( incidence ); 4510 return static_cast<Todo *>( incidence );
4511 } 4511 }
4512 4512
4513 incidence = mTodoList->selectedIncidences().first(); 4513 incidence = mTodoList->selectedIncidences().first();
4514 if ( incidence && incidence->typeID() == todoID ) { 4514 if ( incidence && incidence->typeID() == todoID ) {
4515 return static_cast<Todo *>( incidence ); 4515 return static_cast<Todo *>( incidence );
4516 } 4516 }
4517 4517
4518 return 0; 4518 return 0;
4519} 4519}
4520 4520
4521void CalendarView::showIncidence() 4521void CalendarView::showIncidence()
4522{ 4522{
4523 mViewerCallerIsSearchDialog = false; 4523 mViewerCallerIsSearchDialog = false;
4524 Incidence *incidence = currentSelection(); 4524 Incidence *incidence = currentSelection();
4525 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4525 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4526 if ( incidence ) { 4526 if ( incidence ) {
4527 ShowIncidenceVisitor v; 4527 ShowIncidenceVisitor v;
4528 v.act( incidence, this ); 4528 v.act( incidence, this );
4529 } 4529 }
4530} 4530}
4531void CalendarView::editIncidenceDescription() 4531void CalendarView::editIncidenceDescription()
4532{ 4532{
4533 mFlagEditDescription = true; 4533 mFlagEditDescription = true;
4534 editIncidence(); 4534 editIncidence();
4535 mFlagEditDescription = false; 4535 mFlagEditDescription = false;
4536} 4536}
4537void CalendarView::editIncidence() 4537void CalendarView::editIncidence()
4538{ 4538{
4539 // qDebug("editIncidence() "); 4539 // qDebug("editIncidence() ");
4540 Incidence *incidence = currentSelection(); 4540 Incidence *incidence = currentSelection();
4541 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4541 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4542 if ( incidence ) { 4542 if ( incidence ) {
4543 EditIncidenceVisitor v; 4543 EditIncidenceVisitor v;
4544 v.act( incidence, this ); 4544 v.act( incidence, this );
4545 } 4545 }
4546} 4546}
4547 4547
4548void CalendarView::deleteIncidence() 4548void CalendarView::deleteIncidence()
4549{ 4549{
4550 Incidence *incidence = currentSelection(); 4550 Incidence *incidence = currentSelection();
4551 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4551 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4552 if ( incidence ) { 4552 if ( incidence ) {
4553 deleteIncidence(incidence); 4553 deleteIncidence(incidence);
4554 } 4554 }
4555} 4555}
4556void CalendarView::showIncidence(QString uid) 4556void CalendarView::showIncidence(QString uid)
4557{ 4557{
4558 Incidence *inc = mCalendar->incidence( uid ); 4558 Incidence *inc = mCalendar->incidence( uid );
4559 if ( inc ) 4559 if ( inc )
4560 showIncidence( inc ); 4560 showIncidence( inc );
4561} 4561}
4562void CalendarView::showIncidence(Incidence *incidence) 4562void CalendarView::showIncidence(Incidence *incidence)
4563{ 4563{
4564 mViewerCallerIsSearchDialog = false; 4564 mViewerCallerIsSearchDialog = false;
4565 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4565 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4566 if ( sender() && mDialogManager->getSearchDialog() ) { 4566 if ( sender() && mDialogManager->getSearchDialog() ) {
4567 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4567 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4568 mViewerCallerIsSearchDialog = true; 4568 mViewerCallerIsSearchDialog = true;
4569 } 4569 }
4570 } 4570 }
4571 if ( incidence ) { 4571 if ( incidence ) {
4572 ShowIncidenceVisitor v; 4572 ShowIncidenceVisitor v;
4573 v.act( incidence, this ); 4573 v.act( incidence, this );
4574 } 4574 }
4575} 4575}
4576 4576
4577void CalendarView::editIncidence(Incidence *incidence) 4577void CalendarView::editIncidence(Incidence *incidence)
4578{ 4578{
4579 if ( incidence ) { 4579 if ( incidence ) {
4580 4580
4581 EditIncidenceVisitor v; 4581 EditIncidenceVisitor v;
4582 v.act( incidence, this ); 4582 v.act( incidence, this );
4583 4583
4584 } 4584 }
4585} 4585}
4586 4586
4587void CalendarView::deleteIncidence(Incidence *incidence) 4587void CalendarView::deleteIncidence(Incidence *incidence)
4588{ 4588{
4589 //qDebug(" CalendarView::deleteIncidence "); 4589 //qDebug(" CalendarView::deleteIncidence ");
4590 if ( incidence == 0 ) { 4590 if ( incidence == 0 ) {
4591 updateView(); 4591 updateView();
4592 emit updateSearchDialog(); 4592 emit updateSearchDialog();
4593 return; 4593 return;
4594 } 4594 }
4595 if ( incidence ) { 4595 if ( incidence ) {
4596 DeleteIncidenceVisitor v; 4596 DeleteIncidenceVisitor v;
4597 v.act( incidence, this ); 4597 v.act( incidence, this );
4598 } 4598 }
4599} 4599}
4600 4600
4601 4601
4602void CalendarView::lookForOutgoingMessages() 4602void CalendarView::lookForOutgoingMessages()
4603{ 4603{
4604 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4604 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4605 ogd->loadMessages(); 4605 ogd->loadMessages();
4606} 4606}
4607 4607
4608void CalendarView::lookForIncomingMessages() 4608void CalendarView::lookForIncomingMessages()
4609{ 4609{
4610 IncomingDialog *icd = mDialogManager->incomingDialog(); 4610 IncomingDialog *icd = mDialogManager->incomingDialog();
4611 icd->retrieve(); 4611 icd->retrieve();
4612} 4612}
4613 4613
4614bool CalendarView::removeCompletedSubTodos( Todo* t ) 4614bool CalendarView::removeCompletedSubTodos( Todo* t )
4615{ 4615{
4616 bool deleteTodo = true; 4616 bool deleteTodo = true;
4617 QPtrList<Incidence> subTodos; 4617 QPtrList<Incidence> subTodos;
4618 Incidence *aTodo; 4618 Incidence *aTodo;
4619 subTodos = t->relations(); 4619 subTodos = t->relations();
4620 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4620 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4621 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4621 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4622 deleteTodo = false; 4622 deleteTodo = false;
4623 } 4623 }
4624 if ( deleteTodo ) { 4624 if ( deleteTodo ) {
4625 if ( t->isCompleted() && !t->doesRecur()) { 4625 if ( t->isCompleted() && !t->doesRecur()) {
4626 checkExternalId( t ); 4626 checkExternalId( t );
4627 mCalendar->deleteTodo( t ); 4627 mCalendar->deleteTodo( t );
4628 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4628 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4629 } 4629 }
4630 else 4630 else
4631 deleteTodo = false; 4631 deleteTodo = false;
4632 } 4632 }
4633 return deleteTodo; 4633 return deleteTodo;
4634 4634
4635} 4635}
4636void CalendarView::purgeCompleted() 4636void CalendarView::purgeCompleted()
4637{ 4637{
4638 int result = KMessageBox::warningContinueCancel(this, 4638 int result = KMessageBox::warningContinueCancel(this,
4639 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 4639 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
4640 4640
4641 if (result == KMessageBox::Continue) { 4641 if (result == KMessageBox::Continue) {
4642 4642
4643 QPtrList<Todo> todoCal; 4643 QPtrList<Todo> todoCal;
4644 QPtrList<Todo> rootTodos; 4644 QPtrList<Todo> rootTodos;
4645 //QPtrList<Incidence> rel; 4645 //QPtrList<Incidence> rel;
4646 Todo *aTodo; 4646 Todo *aTodo;
4647 todoCal = calendar()->todos(); 4647 todoCal = calendar()->todos();
4648 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 4648 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
4649 if ( !aTodo->relatedTo() ) 4649 if ( !aTodo->relatedTo() )
4650 rootTodos.append( aTodo ); 4650 rootTodos.append( aTodo );
4651 } 4651 }
4652 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 4652 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
4653 removeCompletedSubTodos( aTodo ); 4653 removeCompletedSubTodos( aTodo );
4654 } 4654 }
4655 4655
4656 updateView(); 4656 updateView();
4657 } 4657 }
4658} 4658}
4659 4659
4660void CalendarView::slotCalendarChanged() 4660void CalendarView::slotCalendarChanged()
4661{ 4661{
4662 ; 4662 ;
4663} 4663}
4664 4664
4665void CalendarView::keyPressEvent ( QKeyEvent *e) 4665void CalendarView::keyPressEvent ( QKeyEvent *e)
4666{ 4666{
4667 //qDebug(" alendarView::keyPressEvent "); 4667 //qDebug(" alendarView::keyPressEvent ");
4668 e->ignore(); 4668 e->ignore();
4669} 4669}
4670 4670
4671 4671
4672bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 4672bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
4673{ 4673{
4674 4674
4675 if ( manager != mSyncManager) 4675 if ( manager != mSyncManager)
4676 qDebug("KO: Internal error-1. SyncManager mismatch "); 4676 qDebug("KO: Internal error-1. SyncManager mismatch ");
4677 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 4677 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
4678 qDebug("KO: SyncKDE request detected!"); 4678 qDebug("KO: SyncKDE request detected!");
4679 } 4679 }
4680 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 4680 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
4681 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 4681 mCurrentSyncName = mSyncManager->getCurrentSyncName();
4682 return syncCalendar( filename, mode ); 4682 return syncCalendar( filename, mode );
4683} 4683}
4684bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 4684bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
4685{ 4685{
4686 //mSyncManager = manager; 4686 //mSyncManager = manager;
4687 if ( manager != mSyncManager) 4687 if ( manager != mSyncManager)
4688 qDebug("KO: Internal error-2. SyncManager mismatch "); 4688 qDebug("KO: Internal error-2. SyncManager mismatch ");
4689 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 4689 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
4690 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 4690 mCurrentSyncName = mSyncManager->getCurrentSyncName();
4691 if ( resource == "sharp" ) 4691 if ( resource == "sharp" )
4692 syncExternal( 0 ); 4692 syncExternal( 0 );
4693 if ( resource == "phone" ) 4693 if ( resource == "phone" )
4694 syncExternal( 1 ); 4694 syncExternal( 1 );
4695 // pending setmodified 4695 // pending setmodified
4696 return true; 4696 return true;
4697} 4697}
4698void CalendarView::setSyncManager(KSyncManager* manager) 4698void CalendarView::setSyncManager(KSyncManager* manager)
4699{ 4699{
4700 mSyncManager = manager; 4700 mSyncManager = manager;
4701} 4701}
4702 4702
4703void CalendarView::removeSyncInfo( QString syncProfile) 4703void CalendarView::removeSyncInfo( QString syncProfile)
4704{ 4704{
4705 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 4705 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
4706 mCalendar->removeSyncInfo( syncProfile ); 4706 mCalendar->removeSyncInfo( syncProfile );
4707 4707
4708} 4708}
4709 4709
4710void CalendarView::undo_delete() 4710void CalendarView::undo_delete()
4711{ 4711{
4712 //qDebug("undo_delete() "); 4712 //qDebug("undo_delete() ");
4713 Incidence* undo = mCalendar->undoIncidence(); 4713 Incidence* undo = mCalendar->undoIncidence();
4714 if ( !undo ) { 4714 if ( !undo ) {
4715 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 4715 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
4716 i18n("KO/Pi")); 4716 i18n("KO/Pi"));
4717 return; 4717 return;
4718 } 4718 }
4719 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 4719 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
4720 i18n("\nAre you sure you want\nto restore this?"), 4720 i18n("\nAre you sure you want\nto restore this?"),
4721 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 4721 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
4722 mCalendar->undoDeleteIncidence(); 4722 mCalendar->undoDeleteIncidence();
4723 updateView(); 4723 updateView();
4724 } 4724 }
4725} 4725}
4726 4726
4727void CalendarView::slotViewerClosed() 4727void CalendarView::slotViewerClosed()
4728{ 4728{
4729 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 4729 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
4730} 4730}
4731 4731
4732void CalendarView::resetFocus() 4732void CalendarView::resetFocus()
4733{ 4733{
4734 if ( mViewerCallerIsSearchDialog ) { 4734 if ( mViewerCallerIsSearchDialog ) {
4735 if ( mDialogManager->getSearchDialog()->isVisible() ){ 4735 if ( mDialogManager->getSearchDialog()->isVisible() ){
4736 mDialogManager->getSearchDialog()->raise(); 4736 mDialogManager->getSearchDialog()->raise();
4737 mDialogManager->getSearchDialog()->setActiveWindow(); 4737 mDialogManager->getSearchDialog()->setActiveWindow();
4738 mDialogManager->getSearchDialog()->listview()->resetFocus(); 4738 mDialogManager->getSearchDialog()->listview()->resetFocus();
4739 } else 4739 } else
4740 mViewerCallerIsSearchDialog = false; 4740 mViewerCallerIsSearchDialog = false;
4741 } 4741 }
4742 if ( !mViewerCallerIsSearchDialog ) { 4742 if ( !mViewerCallerIsSearchDialog ) {
4743 //mViewManager->currentView()->setFocus(); 4743 //mViewManager->currentView()->setFocus();
4744 //qDebug("sssssssssssssssset focus "); 4744 //qDebug("sssssssssssssssset focus ");
4745 topLevelWidget()->raise(); 4745 topLevelWidget()->raise();
4746 setActiveWindow(); 4746 setActiveWindow();
4747 //setFocus(); 4747 //setFocus();
4748 } 4748 }
4749 mViewerCallerIsSearchDialog = false; 4749 mViewerCallerIsSearchDialog = false;
4750} 4750}
4751 4751
4752void CalendarView::showNextAlarms() 4752void CalendarView::showNextAlarms()
4753{ 4753{
4754 QString message; 4754 QString message;
4755 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 4755 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
4756 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 4756 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
4757 QString sum = mCalendar->nextSummary(); 4757 QString sum = mCalendar->nextSummary();
4758 QDateTime nextA = mNextAlarmDateTime; 4758 QDateTime nextA = mNextAlarmDateTime;
4759 QDateTime cur = QDateTime::currentDateTime(); 4759 QDateTime cur = QDateTime::currentDateTime();
4760 int secs = cur.secsTo( nextA ); 4760 int secs = cur.secsTo( nextA );
4761 int min = secs /60; 4761 int min = secs /60;
4762 int hours = min /60; 4762 int hours = min /60;
4763 min = min % 60; 4763 min = min % 60;
4764 int days = hours /24; 4764 int days = hours /24;
4765 hours = hours % 24; 4765 hours = hours % 24;
4766 4766
4767 //message = i18n("The next alarm is in:\n"); 4767 //message = i18n("The next alarm is in:\n");
4768 if ( days > 1 ) 4768 if ( days > 1 )
4769 message += i18n("%1 days\n").arg( days ); 4769 message += i18n("%1 days\n").arg( days );
4770 else if ( days == 1 ) 4770 else if ( days == 1 )
4771 message += i18n("1 day\n"); 4771 message += i18n("1 day\n");
4772 if ( hours > 1 ) 4772 if ( hours > 1 )
4773 message += i18n("%1 hours\n").arg( hours ); 4773 message += i18n("%1 hours\n").arg( hours );
4774 else if ( hours == 1 ) 4774 else if ( hours == 1 )
4775 message += i18n("1 hour\n"); 4775 message += i18n("1 hour\n");
4776 if ( min > 1 ) 4776 if ( min > 1 )
4777 message += i18n("%1 minutes\n").arg( min ); 4777 message += i18n("%1 minutes\n").arg( min );
4778 else if ( min == 1 ) 4778 else if ( min == 1 )
4779 message += i18n("1 minute\n"); 4779 message += i18n("1 minute\n");
4780 if ( message.isEmpty() ) 4780 if ( message.isEmpty() )
4781 message = i18n("The next alarm is in\nless than one minute!"); 4781 message = i18n("The next alarm is in\nless than one minute!");
4782 else 4782 else
4783 message = i18n("The next alarm is in:\n") + message; 4783 message = i18n("The next alarm is in:\n") + message;
4784 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 4784 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
4785 } else { 4785 } else {
4786 message = i18n("There is no next alarm."); 4786 message = i18n("There is no next alarm.");
4787 4787
4788 } 4788 }
4789#ifdef DESKTOP_VERSION 4789#ifdef DESKTOP_VERSION
4790 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 4790 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
4791 message += i18n("\nThe internal alarm notification is disabled!\n"); 4791 message += i18n("\nThe internal alarm notification is disabled!\n");
4792 message += i18n("Enable it in the settings menu, TAB alarm."); 4792 message += i18n("Enable it in the settings menu, TAB alarm.");
4793 } 4793 }
4794 4794
4795#endif 4795#endif
4796 KMessageBox::information( this, message); 4796 KMessageBox::information( this, message);
4797} 4797}
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index fc0ac6b..f2ee0ab 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -1,1655 +1,1714 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21// $Id$ 21// $Id$
22 22
23#include "ksyncmanager.h" 23#include "ksyncmanager.h"
24 24
25#include <stdlib.h> 25#include <stdlib.h>
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#include <unistd.h> 28#include <unistd.h>
29#endif 29#endif
30 30
31 31
32#include "ksyncprofile.h" 32#include "ksyncprofile.h"
33#include "ksyncprefsdialog.h" 33#include "ksyncprefsdialog.h"
34#include "kpimprefs.h" 34#include "kpimprefs.h"
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <qdir.h> 37#include <qdir.h>
38#include <qprogressbar.h> 38#include <qprogressbar.h>
39#include <qpopupmenu.h> 39#include <qpopupmenu.h>
40#include <qpushbutton.h> 40#include <qpushbutton.h>
41#include <qradiobutton.h> 41#include <qradiobutton.h>
42#include <qbuttongroup.h> 42#include <qbuttongroup.h>
43#include <qtimer.h> 43#include <qtimer.h>
44#include <qmessagebox.h> 44#include <qmessagebox.h>
45#include <qapplication.h> 45#include <qapplication.h>
46#include <qlineedit.h> 46#include <qlineedit.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qlabel.h> 50#include <qlabel.h>
51#include <qcheckbox.h> 51#include <qcheckbox.h>
52#include <qapplication.h> 52#include <qapplication.h>
53 53
54#include <klocale.h> 54#include <klocale.h>
55#include <kglobal.h> 55#include <kglobal.h>
56#include <kconfig.h> 56#include <kconfig.h>
57#include <kfiledialog.h> 57#include <kfiledialog.h>
58 58
59QDateTime KSyncManager::mRequestedSyncEvent; 59QDateTime KSyncManager::mRequestedSyncEvent;
60 60
61 61
62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu) 62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu) 63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu)
64{ 64{
65 mServerSocket = 0; 65 mServerSocket = 0;
66 bar = new QProgressBar ( 1, 0 ); 66 bar = new QProgressBar ( 1, 0 );
67 bar->setCaption (""); 67 bar->setCaption ("");
68 mWriteBackInPast = 2; 68 mWriteBackInPast = 2;
69 69
70 70
71} 71}
72 72
73KSyncManager::~KSyncManager() 73KSyncManager::~KSyncManager()
74{ 74{
75 delete bar; 75 delete bar;
76} 76}
77 77
78void KSyncManager::setDefaultFileName( QString s) 78void KSyncManager::setDefaultFileName( QString s)
79{ 79{
80 mDefFileName = s ; 80 mDefFileName = s ;
81 if ( mPrefs->mPassiveSyncAutoStart ) 81 if ( mPrefs->mPassiveSyncAutoStart )
82 enableQuick( false ); 82 enableQuick( false );
83} 83}
84 84
85void KSyncManager::fillSyncMenu() 85void KSyncManager::fillSyncMenu()
86{ 86{
87 if ( mSyncMenu->count() ) 87 if ( mSyncMenu->count() )
88 mSyncMenu->clear(); 88 mSyncMenu->clear();
89 89
90 mSyncMenu->insertItem( i18n("Configure..."), 0 ); 90 mSyncMenu->insertItem( i18n("Configure..."), 0 );
91 mSyncMenu->insertSeparator(); 91 mSyncMenu->insertSeparator();
92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu ); 92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu );
93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 ); 93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 );
94 clearMenu->insertItem( i18n("For all profiles"), 1 ); 94 clearMenu->insertItem( i18n("For all profiles"), 1 );
95 clearMenu->insertSeparator(); 95 clearMenu->insertSeparator();
96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) ); 96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) );
97 mSyncMenu->insertSeparator(); 97 mSyncMenu->insertSeparator();
98 if ( mServerSocket == 0 ) { 98 if ( mServerSocket == 0 ) {
99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 ); 99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 );
100 } else { 100 } else {
101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 ); 101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 );
102 } 102 }
103 mSyncMenu->insertSeparator(); 103 mSyncMenu->insertSeparator();
104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
105 mSyncMenu->insertSeparator(); 105 mSyncMenu->insertSeparator();
106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
107 config.setGroup("General"); 107 config.setGroup("General");
108 QStringList prof = config.readListEntry("SyncProfileNames"); 108 QStringList prof = config.readListEntry("SyncProfileNames");
109 mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 109 mLocalMachineName = config.readEntry("LocalMachineName","undefined");
110 if ( prof.count() < 2 ) { 110 if ( prof.count() < 2 ) {
111 prof.clear(); 111 prof.clear();
112 QString externalName; 112 QString externalName;
113#ifdef DESKTOP_VERSION 113#ifdef DESKTOP_VERSION
114#ifdef _WIN32_ 114#ifdef _WIN32_
115 externalName = "OutLook(not_implemented)"; 115 externalName = "OutLook(not_implemented)";
116#else 116#else
117 externalName = "KDE_Desktop"; 117 externalName = "KDE_Desktop";
118#endif 118#endif
119#else 119#else
120 externalName = "Sharp_DTM"; 120 externalName = "Sharp_DTM";
121#endif 121#endif
122 prof << externalName; 122 prof << externalName;
123 prof << i18n("Local_file"); 123 prof << i18n("Local_file");
124 prof << i18n("Last_file"); 124 prof << i18n("Last_file");
125 KSyncProfile* temp = new KSyncProfile (); 125 KSyncProfile* temp = new KSyncProfile ();
126 temp->setName( prof[0] ); 126 temp->setName( prof[0] );
127 temp->writeConfig(&config); 127 temp->writeConfig(&config);
128 temp->setName( prof[1] ); 128 temp->setName( prof[1] );
129 temp->writeConfig(&config); 129 temp->writeConfig(&config);
130 temp->setName( prof[2] ); 130 temp->setName( prof[2] );
131 temp->writeConfig(&config); 131 temp->writeConfig(&config);
132 config.setGroup("General"); 132 config.setGroup("General");
133 config.writeEntry("SyncProfileNames",prof); 133 config.writeEntry("SyncProfileNames",prof);
134 config.writeEntry("ExternSyncProfiles",externalName); 134 config.writeEntry("ExternSyncProfiles",externalName);
135 config.sync(); 135 config.sync();
136 delete temp; 136 delete temp;
137 } 137 }
138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
139 mSyncProfileNames = prof; 139 mSyncProfileNames = prof;
140 unsigned int i; 140 unsigned int i;
141 for ( i = 0; i < prof.count(); ++i ) { 141 for ( i = 0; i < prof.count(); ++i ) {
142 QString insertText = prof[i]; 142 QString insertText = prof[i];
143 if ( i == 0 ) { 143 if ( i == 0 ) {
144#ifdef DESKTOP_VERSION 144#ifdef DESKTOP_VERSION
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 insertText = "OutLook(not_implemented)"; 146 insertText = "OutLook(not_implemented)";
147#else 147#else
148 insertText = "KDE_Desktop"; 148 insertText = "KDE_Desktop";
149#endif 149#endif
150#else 150#else
151 insertText = "Sharp_DTM"; 151 insertText = "Sharp_DTM";
152#endif 152#endif
153 } 153 }
154 mSyncMenu->insertItem( insertText, 1000+i ); 154 mSyncMenu->insertItem( insertText, 1000+i );
155 clearMenu->insertItem( insertText, 1000+i ); 155 clearMenu->insertItem( insertText, 1000+i );
156 if ( i == 2 ) 156 if ( i == 2 )
157 mSyncMenu->insertSeparator(); 157 mSyncMenu->insertSeparator();
158 } 158 }
159 QDir app_dir; 159 QDir app_dir;
160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
161 if ( mTargetApp == PWMPI) { 161 if ( mTargetApp == PWMPI) {
162 mSyncMenu->removeItem( 1000 ); 162 mSyncMenu->removeItem( 1000 );
163 clearMenu->removeItem( 1000 ); 163 clearMenu->removeItem( 1000 );
164 } 164 }
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
167 mSyncMenu->removeItem( 1000 ); 167 mSyncMenu->removeItem( 1000 );
168 clearMenu->removeItem( 1000 ); 168 clearMenu->removeItem( 1000 );
169 } 169 }
170#endif 170#endif
171 mSyncMenu->removeItem( 1002 ); 171 mSyncMenu->removeItem( 1002 );
172 clearMenu->removeItem( 1002 ); 172 clearMenu->removeItem( 1002 );
173} 173}
174void KSyncManager::slotClearMenu( int action ) 174void KSyncManager::slotClearMenu( int action )
175{ 175{
176 QString syncDevice; 176 QString syncDevice;
177 if ( action > 999 ) { 177 if ( action > 999 ) {
178 syncDevice = mSyncProfileNames[action - 1000] ; 178 syncDevice = mSyncProfileNames[action - 1000] ;
179 } 179 }
180 180
181 181
182 182
183 int result = 0; 183 int result = 0;
184 QString sd; 184 QString sd;
185 if ( syncDevice.isEmpty() ) 185 if ( syncDevice.isEmpty() )
186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?"); 186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?");
187 else 187 else
188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice ); 188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice );
189 189
190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0, 190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0,
191 0, 1 ); 191 0, 1 );
192 if ( result ) 192 if ( result )
193 return; 193 return;
194 mImplementation->removeSyncInfo( syncDevice ); 194 mImplementation->removeSyncInfo( syncDevice );
195} 195}
196void KSyncManager::slotSyncMenu( int action ) 196void KSyncManager::slotSyncMenu( int action )
197{ 197{
198 qDebug("KSM::syncaction %d ", action); 198 qDebug("KSM::syncaction %d ", action);
199 if ( action == 5000 ) 199 if ( action == 5000 )
200 return; 200 return;
201 mSyncWithDesktop = false; 201 mSyncWithDesktop = false;
202 if ( action == 0 ) { 202 if ( action == 0 ) {
203 203
204 // seems to be a Qt2 event handling bug 204 // seems to be a Qt2 event handling bug
205 // syncmenu.clear causes a segfault at first time 205 // syncmenu.clear causes a segfault at first time
206 // when we call it after the main event loop, it is ok 206 // when we call it after the main event loop, it is ok
207 // same behaviour when calling OM/Pi via QCOP for the first time 207 // same behaviour when calling OM/Pi via QCOP for the first time
208 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 208 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
209 //confSync(); 209 //confSync();
210 210
211 return; 211 return;
212 } 212 }
213 if ( action == 1 ) { 213 if ( action == 1 ) {
214 multiSync( true ); 214 multiSync( true );
215 return; 215 return;
216 } 216 }
217 if ( action == 2 ) { 217 if ( action == 2 ) {
218 enableQuick(); 218 enableQuick();
219 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 219 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
220 return; 220 return;
221 } 221 }
222 if ( action == 3 ) { 222 if ( action == 3 ) {
223 delete mServerSocket; 223 delete mServerSocket;
224 mServerSocket = 0; 224 mServerSocket = 0;
225 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 225 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
226 return; 226 return;
227 } 227 }
228 228
229 if (blockSave()) 229 if (blockSave())
230 return; 230 return;
231 231
232 setBlockSave(true); 232 setBlockSave(true);
233 bool silent = false; 233 bool silent = false;
234 if ( action == 999 ) { 234 if ( action == 999 ) {
235 //special mode for silent syncing 235 //special mode for silent syncing
236 action = 1000; 236 action = 1000;
237 silent = true; 237 silent = true;
238 } 238 }
239 239
240 mCurrentSyncProfile = action - 1000 ; 240 mCurrentSyncProfile = action - 1000 ;
241 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 241 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
242 mCurrentSyncName = mLocalMachineName ; 242 mCurrentSyncName = mLocalMachineName ;
243 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 243 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
244 KSyncProfile* temp = new KSyncProfile (); 244 KSyncProfile* temp = new KSyncProfile ();
245 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 245 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
246 temp->readConfig(&config); 246 temp->readConfig(&config);
247 if (silent) { 247 if (silent) {
248 mAskForPreferences = false; 248 mAskForPreferences = false;
249 mShowSyncSummary = false; 249 mShowSyncSummary = false;
250 mWriteBackFile = true; 250 mWriteBackFile = true;
251 mSyncAlgoPrefs = 2;// take newest 251 mSyncAlgoPrefs = 2;// take newest
252 } 252 }
253 else { 253 else {
254 mAskForPreferences = temp->getAskForPreferences(); 254 mAskForPreferences = temp->getAskForPreferences();
255 mShowSyncSummary = temp->getShowSummaryAfterSync(); 255 mShowSyncSummary = temp->getShowSummaryAfterSync();
256 mWriteBackFile = temp->getWriteBackFile(); 256 mWriteBackFile = temp->getWriteBackFile();
257 mSyncAlgoPrefs = temp->getSyncPrefs(); 257 mSyncAlgoPrefs = temp->getSyncPrefs();
258 } 258 }
259 mWriteBackExistingOnly = temp->getWriteBackExisting(); 259 mWriteBackExistingOnly = temp->getWriteBackExisting();
260 mIsKapiFile = temp->getIsKapiFile(); 260 mIsKapiFile = temp->getIsKapiFile();
261 mWriteBackInFuture = 0; 261 mWriteBackInFuture = 0;
262 if ( temp->getWriteBackFuture() ) { 262 if ( temp->getWriteBackFuture() ) {
263 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 263 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
264 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 264 mWriteBackInPast = temp->getWriteBackPastWeeks( );
265 } 265 }
266 mFilterInCal = temp->getFilterInCal(); 266 mFilterInCal = temp->getFilterInCal();
267 mFilterOutCal = temp->getFilterOutCal(); 267 mFilterOutCal = temp->getFilterOutCal();
268 mFilterInAB = temp->getFilterInAB(); 268 mFilterInAB = temp->getFilterInAB();
269 mFilterOutAB = temp->getFilterOutAB(); 269 mFilterOutAB = temp->getFilterOutAB();
270 270
271 if ( action == 1000 ) { 271 if ( action == 1000 ) {
272 mIsKapiFile = false; 272 mIsKapiFile = false;
273#ifdef DESKTOP_VERSION 273#ifdef DESKTOP_VERSION
274 syncKDE(); 274 syncKDE();
275#else 275#else
276 syncSharp(); 276 syncSharp();
277#endif 277#endif
278 278
279 } else if ( action == 1001 ) { 279 } else if ( action == 1001 ) {
280 syncLocalFile(); 280 syncLocalFile();
281 281
282 } else if ( action == 1002 ) { 282 } else if ( action == 1002 ) {
283 mWriteBackFile = false; 283 mWriteBackFile = false;
284 mAskForPreferences = false; 284 mAskForPreferences = false;
285 mShowSyncSummary = false; 285 mShowSyncSummary = false;
286 mSyncAlgoPrefs = 3; 286 mSyncAlgoPrefs = 3;
287 quickSyncLocalFile(); 287 quickSyncLocalFile();
288 288
289 } else if ( action >= 1003 ) { 289 } else if ( action >= 1003 ) {
290 if ( temp->getIsLocalFileSync() ) { 290 if ( temp->getIsLocalFileSync() ) {
291 switch(mTargetApp) 291 switch(mTargetApp)
292 { 292 {
293 case (KAPI): 293 case (KAPI):
294 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 294 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
295 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 295 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
296 break; 296 break;
297 case (KOPI): 297 case (KOPI):
298 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 298 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
299 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 299 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
300 break; 300 break;
301 case (PWMPI): 301 case (PWMPI):
302 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 302 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
303 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 303 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
304 break; 304 break;
305 default: 305 default:
306 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 306 qDebug("KSM::slotSyncMenu: invalid apptype selected");
307 break; 307 break;
308 308
309 } 309 }
310 } else { 310 } else {
311 if ( temp->getIsPhoneSync() ) { 311 if ( temp->getIsPhoneSync() ) {
312 mPhoneDevice = temp->getPhoneDevice( ) ; 312 mPhoneDevice = temp->getPhoneDevice( ) ;
313 mPhoneConnection = temp->getPhoneConnection( ); 313 mPhoneConnection = temp->getPhoneConnection( );
314 mPhoneModel = temp->getPhoneModel( ); 314 mPhoneModel = temp->getPhoneModel( );
315 syncPhone(); 315 syncPhone();
316 } else if ( temp->getIsPiSync() ) { 316 } else if ( temp->getIsPiSync() ) {
317 if ( mTargetApp == KAPI ) { 317 if ( mTargetApp == KAPI ) {
318 mPassWordPiSync = temp->getRemotePwAB(); 318 mPassWordPiSync = temp->getRemotePwAB();
319 mActiveSyncPort = temp->getRemotePortAB(); 319 mActiveSyncPort = temp->getRemotePortAB();
320 mActiveSyncIP = temp->getRemoteIPAB(); 320 mActiveSyncIP = temp->getRemoteIPAB();
321 } else if ( mTargetApp == KOPI ) { 321 } else if ( mTargetApp == KOPI ) {
322 mPassWordPiSync = temp->getRemotePw(); 322 mPassWordPiSync = temp->getRemotePw();
323 mActiveSyncPort = temp->getRemotePort(); 323 mActiveSyncPort = temp->getRemotePort();
324 mActiveSyncIP = temp->getRemoteIP(); 324 mActiveSyncIP = temp->getRemoteIP();
325 } else { 325 } else {
326 mPassWordPiSync = temp->getRemotePwPWM(); 326 mPassWordPiSync = temp->getRemotePwPWM();
327 mActiveSyncPort = temp->getRemotePortPWM(); 327 mActiveSyncPort = temp->getRemotePortPWM();
328 mActiveSyncIP = temp->getRemoteIPPWM(); 328 mActiveSyncIP = temp->getRemoteIPPWM();
329 } 329 }
330 syncPi(); 330 syncPi();
331 while ( !mPisyncFinished ) { 331 while ( !mPisyncFinished ) {
332 //qDebug("waiting "); 332 //qDebug("waiting ");
333 qApp->processEvents(); 333 qApp->processEvents();
334 } 334 }
335 } else 335 } else
336 syncRemote( temp ); 336 syncRemote( temp );
337 337
338 } 338 }
339 } 339 }
340 delete temp; 340 delete temp;
341 setBlockSave(false); 341 setBlockSave(false);
342} 342}
343 343
344void KSyncManager::enableQuick( bool ask ) 344void KSyncManager::enableQuick( bool ask )
345{ 345{
346 bool autoStart; 346 bool autoStart;
347 bool changed = false; 347 bool changed = false;
348 if ( ask ) { 348 if ( ask ) {
349 QDialog dia ( 0, "input-dialog", true ); 349 QDialog dia ( 0, "input-dialog", true );
350 QLineEdit lab ( &dia ); 350 QLineEdit lab ( &dia );
351 QVBoxLayout lay( &dia ); 351 QVBoxLayout lay( &dia );
352 lab.setText( mPrefs->mPassiveSyncPort ); 352 lab.setText( mPrefs->mPassiveSyncPort );
353 lay.setMargin(7); 353 lay.setMargin(7);
354 lay.setSpacing(7); 354 lay.setSpacing(7);
355 int po = 9197+mTargetApp; 355 int po = 9197+mTargetApp;
356 QLabel label ( i18n("Port number (Default: %1)").arg(po), &dia ); 356 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
357 lay.addWidget( &label); 357 lay.addWidget( &label);
358 lay.addWidget( &lab); 358 lay.addWidget( &lab);
359 359
360 QLineEdit lepw ( &dia ); 360 QLineEdit lepw ( &dia );
361 lepw.setText( mPrefs->mPassiveSyncPw ); 361 lepw.setText( mPrefs->mPassiveSyncPw );
362 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 362 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
363 lay.addWidget( &label2); 363 lay.addWidget( &label2);
364 lay.addWidget( &lepw); 364 lay.addWidget( &lepw);
365 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 365 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
366 lay.addWidget( &autostart); 366 lay.addWidget( &autostart);
367 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 367 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
368#ifdef DESKTOP_VERSION 368#ifdef DESKTOP_VERSION
369#ifdef _WIN32_ 369#ifdef _WIN32_
370 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 370 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
371 syncdesktop.hide();// not implemented! 371 syncdesktop.hide();// not implemented!
372#else 372#else
373 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 373 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
374#endif 374#endif
375 lay.addWidget( &syncdesktop); 375 lay.addWidget( &syncdesktop);
376#else 376#else
377 mPrefs->mPassiveSyncWithDesktop = false; 377 mPrefs->mPassiveSyncWithDesktop = false;
378 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
379 syncdesktop.hide(); 379 syncdesktop.hide();
380#endif 380#endif
381 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 381 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
382 382
383 QPushButton pb ( "OK", &dia); 383 QPushButton pb ( "OK", &dia);
384 lay.addWidget( &pb ); 384 lay.addWidget( &pb );
385 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 385 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
386 dia.resize( 230,120 ); 386 dia.resize( 230,120 );
387 dia.setCaption( i18n("Enter port for Pi-Sync") ); 387 dia.setCaption( i18n("Enter port for Pi-Sync") );
388 dia.show(); 388 dia.show();
389#ifndef DESKTOP_VERSION 389#ifndef DESKTOP_VERSION
390 int dw = QApplication::desktop()->width(); 390 int dw = QApplication::desktop()->width();
391 int dh = QApplication::desktop()->height(); 391 int dh = QApplication::desktop()->height();
392 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 392 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
393#endif 393#endif
394 if ( ! dia.exec() ) 394 if ( ! dia.exec() )
395 return; 395 return;
396 dia.hide(); 396 dia.hide();
397 qApp->processEvents(); 397 qApp->processEvents();
398 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 398 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
399 changed = true; 399 changed = true;
400 mPrefs->mPassiveSyncPw = lepw.text(); 400 mPrefs->mPassiveSyncPw = lepw.text();
401 } 401 }
402 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 402 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
403 mPrefs->mPassiveSyncPort = lab.text(); 403 mPrefs->mPassiveSyncPort = lab.text();
404 changed = true; 404 changed = true;
405 } 405 }
406 autoStart = autostart.isChecked(); 406 autoStart = autostart.isChecked();
407 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 407 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
408 changed = true; 408 changed = true;
409 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 409 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
410 } 410 }
411 } 411 }
412 else 412 else
413 autoStart = mPrefs->mPassiveSyncAutoStart; 413 autoStart = mPrefs->mPassiveSyncAutoStart;
414 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 414 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
415 changed = true; 415 changed = true;
416 bool ok; 416 bool ok;
417 mPrefs->mPassiveSyncAutoStart = false; 417 mPrefs->mPassiveSyncAutoStart = false;
418 Q_UINT16 port = mPrefs->mPassiveSyncPort.toUInt(&ok); 418 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
419 if ( ! ok ) { 419 qDebug("%d ", port_t);
420 KMessageBox::information( 0, i18n("No valid port")); 420 if ( ! ok || port_t > 65535 ) {
421 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
421 return; 422 return;
422 } 423 }
424 Q_UINT16 port = port_t;
423 //qDebug("port %d ", port); 425 //qDebug("port %d ", port);
424 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 426 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
425 mServerSocket->setFileName( defaultFileName() );//bbb 427 mServerSocket->setFileName( defaultFileName() );//bbb
426 if ( !mServerSocket->ok() ) { 428 if ( !mServerSocket->ok() ) {
427 KMessageBox::information( 0, i18n("Failed to bind or\nlisten to the port!")); 429 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
428 delete mServerSocket; 430 delete mServerSocket;
429 mServerSocket = 0; 431 mServerSocket = 0;
430 return; 432 return;
431 } 433 }
432 mPrefs->mPassiveSyncAutoStart = autoStart; 434 mPrefs->mPassiveSyncAutoStart = autoStart;
433 if ( changed ) { 435 if ( changed ) {
434 mPrefs->writeConfig(); 436 mPrefs->writeConfig();
435 } 437 }
436 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 438 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
437 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 439 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
438} 440}
439 441void KSyncManager::displayErrorPort()
442{
443 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
444}
440void KSyncManager::syncLocalFile() 445void KSyncManager::syncLocalFile()
441{ 446{
442 447
443 QString fn =mPrefs->mLastSyncedLocalFile; 448 QString fn =mPrefs->mLastSyncedLocalFile;
444 QString ext; 449 QString ext;
445 450
446 switch(mTargetApp) 451 switch(mTargetApp)
447 { 452 {
448 case (KAPI): 453 case (KAPI):
449 ext = "(*.vcf)"; 454 ext = "(*.vcf)";
450 break; 455 break;
451 case (KOPI): 456 case (KOPI):
452 ext = "(*.ics/*.vcs)"; 457 ext = "(*.ics/*.vcs)";
453 break; 458 break;
454 case (PWMPI): 459 case (PWMPI):
455 ext = "(*.pwm)"; 460 ext = "(*.pwm)";
456 break; 461 break;
457 default: 462 default:
458 qDebug("KSM::syncLocalFile: invalid apptype selected"); 463 qDebug("KSM::syncLocalFile: invalid apptype selected");
459 break; 464 break;
460 465
461 } 466 }
462 467
463 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 468 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
464 if ( fn == "" ) 469 if ( fn == "" )
465 return; 470 return;
466 if ( syncWithFile( fn, false ) ) { 471 if ( syncWithFile( fn, false ) ) {
467 qDebug("KSM::syncLocalFile() successful "); 472 qDebug("KSM::syncLocalFile() successful ");
468 } 473 }
469 474
470} 475}
471 476
472bool KSyncManager::syncWithFile( QString fn , bool quick ) 477bool KSyncManager::syncWithFile( QString fn , bool quick )
473{ 478{
474 bool ret = false; 479 bool ret = false;
475 QFileInfo info; 480 QFileInfo info;
476 info.setFile( fn ); 481 info.setFile( fn );
477 QString mess; 482 QString mess;
478 if ( !info. exists() ) { 483 if ( !info. exists() ) {
479 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 484 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
480 QMessageBox::warning( mParent, i18n("Warning!"), 485 QMessageBox::warning( mParent, i18n("Warning!"),
481 mess ); 486 mess );
482 return ret; 487 return ret;
483 } 488 }
484 int result = 0; 489 int result = 0;
485 if ( !quick ) { 490 if ( !quick ) {
486 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 491 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
487 result = QMessageBox::warning( mParent, i18n("Warning!"), 492 result = QMessageBox::warning( mParent, i18n("Warning!"),
488 mess, 493 mess,
489 i18n("Sync"), i18n("Cancel"), 0, 494 i18n("Sync"), i18n("Cancel"), 0,
490 0, 1 ); 495 0, 1 );
491 if ( result ) 496 if ( result )
492 return false; 497 return false;
493 } 498 }
494 if ( mAskForPreferences ) 499 if ( mAskForPreferences )
495 if ( !edit_sync_options()) { 500 if ( !edit_sync_options()) {
496 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 501 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
497 return false; 502 return false;
498 } 503 }
499 if ( result == 0 ) { 504 if ( result == 0 ) {
500 //qDebug("Now sycing ... "); 505 //qDebug("Now sycing ... ");
501 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) ) 506 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) )
502 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 507 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
503 else 508 else
504 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 509 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
505 if ( ! quick ) 510 if ( ! quick )
506 mPrefs->mLastSyncedLocalFile = fn; 511 mPrefs->mLastSyncedLocalFile = fn;
507 } 512 }
508 return ret; 513 return ret;
509} 514}
510 515
511void KSyncManager::quickSyncLocalFile() 516void KSyncManager::quickSyncLocalFile()
512{ 517{
513 518
514 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 519 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
515 qDebug("KSM::quick syncLocalFile() successful "); 520 qDebug("KSM::quick syncLocalFile() successful ");
516 521
517 } 522 }
518} 523}
519 524
520void KSyncManager::multiSync( bool askforPrefs ) 525void KSyncManager::multiSync( bool askforPrefs )
521{ 526{
522 if (blockSave()) 527 if (blockSave())
523 return; 528 return;
524 setBlockSave(true); 529 setBlockSave(true);
525 if ( askforPrefs ) { 530 if ( askforPrefs ) {
526 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 531 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
527 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 532 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
528 question, 533 question,
529 i18n("Yes"), i18n("No"), 534 i18n("Yes"), i18n("No"),
530 0, 0 ) != 0 ) { 535 0, 0 ) != 0 ) {
531 setBlockSave(false); 536 setBlockSave(false);
532 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 537 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
533 return; 538 return;
534 } 539 }
535 } 540 }
536 mCurrentSyncDevice = i18n("Multiple profiles") ; 541 mCurrentSyncDevice = i18n("Multiple profiles") ;
537 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs; 542 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
538 if ( askforPrefs ) { 543 if ( askforPrefs ) {
539 if ( !edit_sync_options()) { 544 if ( !edit_sync_options()) {
540 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") ); 545 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") );
541 return; 546 return;
542 } 547 }
543 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs; 548 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs;
544 } 549 }
545 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") ); 550 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") );
546 qApp->processEvents(); 551 qApp->processEvents();
547 int num = ringSync() ; 552 int num = ringSync() ;
548 if ( num > 1 ) 553 if ( num > 1 )
549 ringSync(); 554 ringSync();
550 setBlockSave(false); 555 setBlockSave(false);
551 if ( num ) 556 if ( num )
552 emit save(); 557 emit save();
553 if ( num ) 558 if ( num )
554 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) ); 559 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) );
555 else 560 else
556 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 561 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
557 return; 562 return;
558} 563}
559 564
560int KSyncManager::ringSync() 565int KSyncManager::ringSync()
561{ 566{
562 567
563 int syncedProfiles = 0; 568 int syncedProfiles = 0;
564 unsigned int i; 569 unsigned int i;
565 QTime timer; 570 QTime timer;
566 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 571 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
567 QStringList syncProfileNames = mSyncProfileNames; 572 QStringList syncProfileNames = mSyncProfileNames;
568 KSyncProfile* temp = new KSyncProfile (); 573 KSyncProfile* temp = new KSyncProfile ();
569 mAskForPreferences = false; 574 mAskForPreferences = false;
570 for ( i = 0; i < syncProfileNames.count(); ++i ) { 575 for ( i = 0; i < syncProfileNames.count(); ++i ) {
571 mCurrentSyncProfile = i; 576 mCurrentSyncProfile = i;
572 temp->setName(syncProfileNames[mCurrentSyncProfile]); 577 temp->setName(syncProfileNames[mCurrentSyncProfile]);
573 temp->readConfig(&config); 578 temp->readConfig(&config);
574 579
575 bool includeInRingSync = false; 580 bool includeInRingSync = false;
576 switch(mTargetApp) 581 switch(mTargetApp)
577 { 582 {
578 case (KAPI): 583 case (KAPI):
579 includeInRingSync = temp->getIncludeInRingSyncAB(); 584 includeInRingSync = temp->getIncludeInRingSyncAB();
580 break; 585 break;
581 case (KOPI): 586 case (KOPI):
582 includeInRingSync = temp->getIncludeInRingSync(); 587 includeInRingSync = temp->getIncludeInRingSync();
583 break; 588 break;
584 case (PWMPI): 589 case (PWMPI):
585 includeInRingSync = temp->getIncludeInRingSyncPWM(); 590 includeInRingSync = temp->getIncludeInRingSyncPWM();
586 break; 591 break;
587 default: 592 default:
588 qDebug("KSM::ringSync: invalid apptype selected"); 593 qDebug("KSM::ringSync: invalid apptype selected");
589 break; 594 break;
590 595
591 } 596 }
592 597
593 598
594 if ( includeInRingSync && ( i < 1 || i > 2 )) { 599 if ( includeInRingSync && ( i < 1 || i > 2 )) {
595 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 600 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
596 ++syncedProfiles; 601 ++syncedProfiles;
597 mSyncWithDesktop = false; 602 mSyncWithDesktop = false;
598 // mAskForPreferences = temp->getAskForPreferences(); 603 // mAskForPreferences = temp->getAskForPreferences();
599 mWriteBackFile = temp->getWriteBackFile(); 604 mWriteBackFile = temp->getWriteBackFile();
600 mWriteBackExistingOnly = temp->getWriteBackExisting(); 605 mWriteBackExistingOnly = temp->getWriteBackExisting();
601 mIsKapiFile = temp->getIsKapiFile(); 606 mIsKapiFile = temp->getIsKapiFile();
602 mWriteBackInFuture = 0; 607 mWriteBackInFuture = 0;
603 if ( temp->getWriteBackFuture() ) { 608 if ( temp->getWriteBackFuture() ) {
604 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 609 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
605 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 610 mWriteBackInPast = temp->getWriteBackPastWeeks( );
606 } 611 }
607 mFilterInCal = temp->getFilterInCal(); 612 mFilterInCal = temp->getFilterInCal();
608 mFilterOutCal = temp->getFilterOutCal(); 613 mFilterOutCal = temp->getFilterOutCal();
609 mFilterInAB = temp->getFilterInAB(); 614 mFilterInAB = temp->getFilterInAB();
610 mFilterOutAB = temp->getFilterOutAB(); 615 mFilterOutAB = temp->getFilterOutAB();
611 mShowSyncSummary = false; 616 mShowSyncSummary = false;
612 mCurrentSyncDevice = syncProfileNames[i] ; 617 mCurrentSyncDevice = syncProfileNames[i] ;
613 mCurrentSyncName = mLocalMachineName; 618 mCurrentSyncName = mLocalMachineName;
614 if ( i == 0 ) { 619 if ( i == 0 ) {
615 mIsKapiFile = false; 620 mIsKapiFile = false;
616#ifdef DESKTOP_VERSION 621#ifdef DESKTOP_VERSION
617 syncKDE(); 622 syncKDE();
618#else 623#else
619 syncSharp(); 624 syncSharp();
620#endif 625#endif
621 } else { 626 } else {
622 if ( temp->getIsLocalFileSync() ) { 627 if ( temp->getIsLocalFileSync() ) {
623 switch(mTargetApp) 628 switch(mTargetApp)
624 { 629 {
625 case (KAPI): 630 case (KAPI):
626 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 631 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
627 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 632 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
628 break; 633 break;
629 case (KOPI): 634 case (KOPI):
630 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 635 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
631 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 636 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
632 break; 637 break;
633 case (PWMPI): 638 case (PWMPI):
634 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 639 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
635 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 640 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
636 break; 641 break;
637 default: 642 default:
638 qDebug("KSM: invalid apptype selected"); 643 qDebug("KSM: invalid apptype selected");
639 break; 644 break;
640 } 645 }
641 } else { 646 } else {
642 if ( temp->getIsPhoneSync() ) { 647 if ( temp->getIsPhoneSync() ) {
643 mPhoneDevice = temp->getPhoneDevice( ) ; 648 mPhoneDevice = temp->getPhoneDevice( ) ;
644 mPhoneConnection = temp->getPhoneConnection( ); 649 mPhoneConnection = temp->getPhoneConnection( );
645 mPhoneModel = temp->getPhoneModel( ); 650 mPhoneModel = temp->getPhoneModel( );
646 syncPhone(); 651 syncPhone();
647 } else if ( temp->getIsPiSync() ) { 652 } else if ( temp->getIsPiSync() ) {
648 if ( mTargetApp == KAPI ) { 653 if ( mTargetApp == KAPI ) {
649 mPassWordPiSync = temp->getRemotePwAB(); 654 mPassWordPiSync = temp->getRemotePwAB();
650 mActiveSyncPort = temp->getRemotePortAB(); 655 mActiveSyncPort = temp->getRemotePortAB();
651 mActiveSyncIP = temp->getRemoteIPAB(); 656 mActiveSyncIP = temp->getRemoteIPAB();
652 } else if ( mTargetApp == KOPI ) { 657 } else if ( mTargetApp == KOPI ) {
653 mPassWordPiSync = temp->getRemotePw(); 658 mPassWordPiSync = temp->getRemotePw();
654 mActiveSyncPort = temp->getRemotePort(); 659 mActiveSyncPort = temp->getRemotePort();
655 mActiveSyncIP = temp->getRemoteIP(); 660 mActiveSyncIP = temp->getRemoteIP();
656 } else { 661 } else {
657 mPassWordPiSync = temp->getRemotePwPWM(); 662 mPassWordPiSync = temp->getRemotePwPWM();
658 mActiveSyncPort = temp->getRemotePortPWM(); 663 mActiveSyncPort = temp->getRemotePortPWM();
659 mActiveSyncIP = temp->getRemoteIPPWM(); 664 mActiveSyncIP = temp->getRemoteIPPWM();
660 } 665 }
661 syncPi(); 666 syncPi();
662 while ( !mPisyncFinished ) { 667 while ( !mPisyncFinished ) {
663 //qDebug("waiting "); 668 //qDebug("waiting ");
664 qApp->processEvents(); 669 qApp->processEvents();
665 } 670 }
666 timer.start(); 671 timer.start();
667 while ( timer.elapsed () < 2000 ) { 672 while ( timer.elapsed () < 2000 ) {
668 qApp->processEvents(); 673 qApp->processEvents();
669 } 674 }
670 } else 675 } else
671 syncRemote( temp, false ); 676 syncRemote( temp, false );
672 677
673 } 678 }
674 } 679 }
675 timer.start(); 680 timer.start();
676 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") ); 681 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") );
677 while ( timer.elapsed () < 2000 ) { 682 while ( timer.elapsed () < 2000 ) {
678 qApp->processEvents(); 683 qApp->processEvents();
679#ifndef _WIN32_ 684#ifndef _WIN32_
680 sleep (1); 685 sleep (1);
681#endif 686#endif
682 } 687 }
683 688
684 } 689 }
685 690
686 } 691 }
687 delete temp; 692 delete temp;
688 return syncedProfiles; 693 return syncedProfiles;
689} 694}
690 695
691void KSyncManager::syncRemote( KSyncProfile* prof, bool ask) 696void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
692{ 697{
693 QString question; 698 QString question;
694 if ( ask ) { 699 if ( ask ) {
695 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 700 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
696 if ( QMessageBox::information( mParent, i18n("Sync"), 701 if ( QMessageBox::information( mParent, i18n("Sync"),
697 question, 702 question,
698 i18n("Yes"), i18n("No"), 703 i18n("Yes"), i18n("No"),
699 0, 0 ) != 0 ) 704 0, 0 ) != 0 )
700 return; 705 return;
701 } 706 }
702 707
703 QString preCommand; 708 QString preCommand;
704 QString localTempFile; 709 QString localTempFile;
705 QString postCommand; 710 QString postCommand;
706 711
707 switch(mTargetApp) 712 switch(mTargetApp)
708 { 713 {
709 case (KAPI): 714 case (KAPI):
710 preCommand = prof->getPreSyncCommandAB(); 715 preCommand = prof->getPreSyncCommandAB();
711 postCommand = prof->getPostSyncCommandAB(); 716 postCommand = prof->getPostSyncCommandAB();
712 localTempFile = prof->getLocalTempFileAB(); 717 localTempFile = prof->getLocalTempFileAB();
713 break; 718 break;
714 case (KOPI): 719 case (KOPI):
715 preCommand = prof->getPreSyncCommand(); 720 preCommand = prof->getPreSyncCommand();
716 postCommand = prof->getPostSyncCommand(); 721 postCommand = prof->getPostSyncCommand();
717 localTempFile = prof->getLocalTempFile(); 722 localTempFile = prof->getLocalTempFile();
718 break; 723 break;
719 case (PWMPI): 724 case (PWMPI):
720 preCommand = prof->getPreSyncCommandPWM(); 725 preCommand = prof->getPreSyncCommandPWM();
721 postCommand = prof->getPostSyncCommandPWM(); 726 postCommand = prof->getPostSyncCommandPWM();
722 localTempFile = prof->getLocalTempFilePWM(); 727 localTempFile = prof->getLocalTempFilePWM();
723 break; 728 break;
724 default: 729 default:
725 qDebug("KSM::syncRemote: invalid apptype selected"); 730 qDebug("KSM::syncRemote: invalid apptype selected");
726 break; 731 break;
727 } 732 }
728 733
729 734
730 int fi; 735 int fi;
731 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 736 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
732 QString pwd = getPassword(); 737 QString pwd = getPassword();
733 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 738 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
734 739
735 } 740 }
736 int maxlen = 30; 741 int maxlen = 30;
737 if ( QApplication::desktop()->width() > 320 ) 742 if ( QApplication::desktop()->width() > 320 )
738 maxlen += 25; 743 maxlen += 25;
739 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 744 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
740 int fileSize = 0; 745 int fileSize = 0;
741 int result = system ( preCommand ); 746 int result = system ( preCommand );
742 // 0 : okay 747 // 0 : okay
743 // 256: no such file or dir 748 // 256: no such file or dir
744 // 749 //
745 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result ); 750 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result );
746 if ( result != 0 ) { 751 if ( result != 0 ) {
747 unsigned int len = maxlen; 752 unsigned int len = maxlen;
748 while ( len < preCommand.length() ) { 753 while ( len < preCommand.length() ) {
749 preCommand.insert( len , "\n" ); 754 preCommand.insert( len , "\n" );
750 len += maxlen +2; 755 len += maxlen +2;
751 } 756 }
752 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ; 757 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
753 QMessageBox::information( mParent, i18n("Sync - ERROR"), 758 QMessageBox::information( mParent, i18n("Sync - ERROR"),
754 question, 759 question,
755 i18n("Okay!")) ; 760 i18n("Okay!")) ;
756 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 761 mParent->topLevelWidget()->setCaption ("KDE-Pim");
757 return; 762 return;
758 } 763 }
759 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 764 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
760 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 765 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
761 766
762 if ( syncWithFile( localTempFile, true ) ) { 767 if ( syncWithFile( localTempFile, true ) ) {
763 768
764 if ( mWriteBackFile ) { 769 if ( mWriteBackFile ) {
765 int fi; 770 int fi;
766 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 771 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
767 QString pwd = getPassword(); 772 QString pwd = getPassword();
768 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 773 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
769 774
770 } 775 }
771 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 776 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
772 result = system ( postCommand ); 777 result = system ( postCommand );
773 qDebug("KSM::Sync:Writing back file result: %d ", result); 778 qDebug("KSM::Sync:Writing back file result: %d ", result);
774 if ( result != 0 ) { 779 if ( result != 0 ) {
775 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 780 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
776 return; 781 return;
777 } else { 782 } else {
778 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 783 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
779 } 784 }
780 } 785 }
781 } 786 }
782 return; 787 return;
783} 788}
784bool KSyncManager::edit_pisync_options() 789bool KSyncManager::edit_pisync_options()
785{ 790{
786 QDialog dia( mParent, "dia", true ); 791 QDialog dia( mParent, "dia", true );
787 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice ); 792 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
788 QVBoxLayout lay ( &dia ); 793 QVBoxLayout lay ( &dia );
789 lay.setSpacing( 5 ); 794 lay.setSpacing( 5 );
790 lay.setMargin( 3 ); 795 lay.setMargin( 3 );
791 QLabel lab1 ( i18n("Password for remote access:"), &dia); 796 QLabel lab1 ( i18n("Password for remote access:"), &dia);
792 lay.addWidget( &lab1 ); 797 lay.addWidget( &lab1 );
793 QLineEdit le1 (&dia ); 798 QLineEdit le1 (&dia );
794 lay.addWidget( &le1 ); 799 lay.addWidget( &le1 );
795 QLabel lab2 ( i18n("Remote IP address:"), &dia); 800 QLabel lab2 ( i18n("Remote IP address:"), &dia);
796 lay.addWidget( &lab2 ); 801 lay.addWidget( &lab2 );
797 QLineEdit le2 (&dia ); 802 QLineEdit le2 (&dia );
798 lay.addWidget( &le2 ); 803 lay.addWidget( &le2 );
799 QLabel lab3 ( i18n("Remote port number:"), &dia); 804 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia);
800 lay.addWidget( &lab3 ); 805 lay.addWidget( &lab3 );
801 QLineEdit le3 (&dia ); 806 QLineEdit le3 (&dia );
802 lay.addWidget( &le3 ); 807 lay.addWidget( &le3 );
803 QPushButton pb ( "OK", &dia); 808 QPushButton pb ( "OK", &dia);
804 lay.addWidget( &pb ); 809 lay.addWidget( &pb );
805 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 810 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
806 le1.setText( mPassWordPiSync ); 811 le1.setText( mPassWordPiSync );
807 le2.setText( mActiveSyncIP ); 812 le2.setText( mActiveSyncIP );
808 le3.setText( mActiveSyncPort ); 813 le3.setText( mActiveSyncPort );
809 if ( dia.exec() ) { 814 if ( dia.exec() ) {
810 mPassWordPiSync = le1.text(); 815 mPassWordPiSync = le1.text();
811 mActiveSyncPort = le3.text(); 816 mActiveSyncPort = le3.text();
812 mActiveSyncIP = le2.text(); 817 mActiveSyncIP = le2.text();
813 return true; 818 return true;
814 } 819 }
815 return false; 820 return false;
816} 821}
817bool KSyncManager::edit_sync_options() 822bool KSyncManager::edit_sync_options()
818{ 823{
819 824
820 QDialog dia( mParent, "dia", true ); 825 QDialog dia( mParent, "dia", true );
821 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 826 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
822 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 827 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
823 QVBoxLayout lay ( &dia ); 828 QVBoxLayout lay ( &dia );
824 lay.setSpacing( 2 ); 829 lay.setSpacing( 2 );
825 lay.setMargin( 3 ); 830 lay.setMargin( 3 );
826 lay.addWidget(&gr); 831 lay.addWidget(&gr);
827 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 832 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
828 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 833 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
829 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 834 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
830 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 835 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
831 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 836 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
832 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 837 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
833 //QRadioButton both( i18n("Take both on conflict"), &gr ); 838 //QRadioButton both( i18n("Take both on conflict"), &gr );
834 QPushButton pb ( "OK", &dia); 839 QPushButton pb ( "OK", &dia);
835 lay.addWidget( &pb ); 840 lay.addWidget( &pb );
836 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 841 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
837 switch ( mSyncAlgoPrefs ) { 842 switch ( mSyncAlgoPrefs ) {
838 case 0: 843 case 0:
839 loc.setChecked( true); 844 loc.setChecked( true);
840 break; 845 break;
841 case 1: 846 case 1:
842 rem.setChecked( true ); 847 rem.setChecked( true );
843 break; 848 break;
844 case 2: 849 case 2:
845 newest.setChecked( true); 850 newest.setChecked( true);
846 break; 851 break;
847 case 3: 852 case 3:
848 ask.setChecked( true); 853 ask.setChecked( true);
849 break; 854 break;
850 case 4: 855 case 4:
851 f_loc.setChecked( true); 856 f_loc.setChecked( true);
852 break; 857 break;
853 case 5: 858 case 5:
854 f_rem.setChecked( true); 859 f_rem.setChecked( true);
855 break; 860 break;
856 case 6: 861 case 6:
857 // both.setChecked( true); 862 // both.setChecked( true);
858 break; 863 break;
859 default: 864 default:
860 break; 865 break;
861 } 866 }
862 if ( dia.exec() ) { 867 if ( dia.exec() ) {
863 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 868 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
864 return true; 869 return true;
865 } 870 }
866 return false; 871 return false;
867} 872}
868 873
869QString KSyncManager::getPassword( ) 874QString KSyncManager::getPassword( )
870{ 875{
871 QString retfile = ""; 876 QString retfile = "";
872 QDialog dia ( mParent, "input-dialog", true ); 877 QDialog dia ( mParent, "input-dialog", true );
873 QLineEdit lab ( &dia ); 878 QLineEdit lab ( &dia );
874 lab.setEchoMode( QLineEdit::Password ); 879 lab.setEchoMode( QLineEdit::Password );
875 QVBoxLayout lay( &dia ); 880 QVBoxLayout lay( &dia );
876 lay.setMargin(7); 881 lay.setMargin(7);
877 lay.setSpacing(7); 882 lay.setSpacing(7);
878 lay.addWidget( &lab); 883 lay.addWidget( &lab);
879 dia.setFixedSize( 230,50 ); 884 dia.setFixedSize( 230,50 );
880 dia.setCaption( i18n("Enter password") ); 885 dia.setCaption( i18n("Enter password") );
881 QPushButton pb ( "OK", &dia); 886 QPushButton pb ( "OK", &dia);
882 lay.addWidget( &pb ); 887 lay.addWidget( &pb );
883 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 888 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
884 dia.show(); 889 dia.show();
885 int res = dia.exec(); 890 int res = dia.exec();
886 if ( res ) 891 if ( res )
887 retfile = lab.text(); 892 retfile = lab.text();
888 dia.hide(); 893 dia.hide();
889 qApp->processEvents(); 894 qApp->processEvents();
890 return retfile; 895 return retfile;
891 896
892} 897}
893 898
894 899
895void KSyncManager::confSync() 900void KSyncManager::confSync()
896{ 901{
897 static KSyncPrefsDialog* sp = 0; 902 static KSyncPrefsDialog* sp = 0;
898 if ( ! sp ) { 903 if ( ! sp ) {
899 sp = new KSyncPrefsDialog( mParent, "syncprefs", true ); 904 sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
900 } 905 }
901 sp->usrReadConfig(); 906 sp->usrReadConfig();
902#ifndef DESKTOP_VERSION 907#ifndef DESKTOP_VERSION
903 sp->showMaximized(); 908 sp->showMaximized();
904#else 909#else
905 sp->show(); 910 sp->show();
906#endif 911#endif
907 sp->exec(); 912 sp->exec();
908 QStringList oldSyncProfileNames = mSyncProfileNames; 913 QStringList oldSyncProfileNames = mSyncProfileNames;
909 mSyncProfileNames = sp->getSyncProfileNames(); 914 mSyncProfileNames = sp->getSyncProfileNames();
910 mLocalMachineName = sp->getLocalMachineName (); 915 mLocalMachineName = sp->getLocalMachineName ();
911 int ii; 916 int ii;
912 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) { 917 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) {
913 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) ) 918 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) )
914 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] ); 919 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] );
915 } 920 }
916 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 921 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
917} 922}
918void KSyncManager::syncKDE() 923void KSyncManager::syncKDE()
919{ 924{
920 mSyncWithDesktop = true; 925 mSyncWithDesktop = true;
921 emit save(); 926 emit save();
922 switch(mTargetApp) 927 switch(mTargetApp)
923 { 928 {
924 case (KAPI): 929 case (KAPI):
925 { 930 {
926#ifdef DESKTOP_VERSION 931#ifdef DESKTOP_VERSION
927 QString command = "kdeabdump33"; 932 QString command = "kdeabdump33";
928 QString commandfile = "kdeabdump33"; 933 QString commandfile = "kdeabdump33";
929 QString commandpath = qApp->applicationDirPath () + "/"; 934 QString commandpath = qApp->applicationDirPath () + "/";
930#else 935#else
931 QString command = "kdeabdump33"; 936 QString command = "kdeabdump33";
932 QString commandfile = "kdeabdump33"; 937 QString commandfile = "kdeabdump33";
933 QString commandpath = QDir::homeDirPath ()+"/"; 938 QString commandpath = QDir::homeDirPath ()+"/";
934#endif 939#endif
935 if ( ! QFile::exists ( commandpath+commandfile ) ) 940 if ( ! QFile::exists ( commandpath+commandfile ) )
936 command = commandfile; 941 command = commandfile;
937 else 942 else
938 command = commandpath+commandfile; 943 command = commandpath+commandfile;
939 944
940 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf"; 945 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf";
941 int result = system ( command.latin1()); 946 int result = system ( command.latin1());
942 qDebug("AB dump 33 command call result: %d ", result); 947 qDebug("AB dump 33 command call result: %d ", result);
943 if ( result != 0 ) { 948 if ( result != 0 ) {
944 qDebug("Calling AB dump version 33 failed. Trying 34... "); 949 qDebug("Calling AB dump version 33 failed. Trying 34... ");
945 commandfile = "kdeabdump34"; 950 commandfile = "kdeabdump34";
946 if ( ! QFile::exists ( commandpath+commandfile ) ) 951 if ( ! QFile::exists ( commandpath+commandfile ) )
947 command = commandfile; 952 command = commandfile;
948 else 953 else
949 command = commandpath+commandfile; 954 command = commandpath+commandfile;
950 result = system ( command.latin1()); 955 result = system ( command.latin1());
951 qDebug("AB dump 34 command call result: %d ", result); 956 qDebug("AB dump 34 command call result: %d ", result);
952 if ( result != 0 ) { 957 if ( result != 0 ) {
953 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 958 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
954 return; 959 return;
955 } 960 }
956 } 961 }
957 if ( syncWithFile( fileName,true ) ) { 962 if ( syncWithFile( fileName,true ) ) {
958 if ( mWriteBackFile ) { 963 if ( mWriteBackFile ) {
959 command += " --read"; 964 command += " --read";
960 system ( command.latin1()); 965 system ( command.latin1());
961 } 966 }
962 } 967 }
963 968
964 } 969 }
965 break; 970 break;
966 case (KOPI): 971 case (KOPI):
967 { 972 {
968#ifdef DESKTOP_VERSION 973#ifdef DESKTOP_VERSION
969 QString command = "kdecaldump33"; 974 QString command = "kdecaldump33";
970 QString commandfile = "kdecaldump33"; 975 QString commandfile = "kdecaldump33";
971 QString commandpath = qApp->applicationDirPath () + "/"; 976 QString commandpath = qApp->applicationDirPath () + "/";
972#else 977#else
973 QString command = "kdecaldump33"; 978 QString command = "kdecaldump33";
974 QString commandfile = "kdecaldump33"; 979 QString commandfile = "kdecaldump33";
975 QString commandpath = QDir::homeDirPath ()+"/"; 980 QString commandpath = QDir::homeDirPath ()+"/";
976#endif 981#endif
977 if ( ! QFile::exists ( commandpath+commandfile ) ) 982 if ( ! QFile::exists ( commandpath+commandfile ) )
978 command = commandfile; 983 command = commandfile;
979 else 984 else
980 command = commandpath+commandfile; 985 command = commandpath+commandfile;
981 986
982 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics"; 987 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics";
983 int result = system ( command.latin1()); 988 int result = system ( command.latin1());
984 qDebug("Cal dump 33 command call result result: %d ", result); 989 qDebug("Cal dump 33 command call result result: %d ", result);
985 if ( result != 0 ) { 990 if ( result != 0 ) {
986 qDebug("Calling CAL dump version 33 failed. Trying 34... "); 991 qDebug("Calling CAL dump version 33 failed. Trying 34... ");
987 commandfile = "kdecaldump34"; 992 commandfile = "kdecaldump34";
988 if ( ! QFile::exists ( commandpath+commandfile ) ) 993 if ( ! QFile::exists ( commandpath+commandfile ) )
989 command = commandfile; 994 command = commandfile;
990 else 995 else
991 command = commandpath+commandfile; 996 command = commandpath+commandfile;
992 result = system ( command.latin1()); 997 result = system ( command.latin1());
993 qDebug("Cal dump 34 command call result result: %d ", result); 998 qDebug("Cal dump 34 command call result result: %d ", result);
994 if ( result != 0 ) { 999 if ( result != 0 ) {
995 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 1000 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
996 return; 1001 return;
997 } 1002 }
998 } 1003 }
999 if ( syncWithFile( fileName,true ) ) { 1004 if ( syncWithFile( fileName,true ) ) {
1000 if ( mWriteBackFile ) { 1005 if ( mWriteBackFile ) {
1001 command += " --read"; 1006 command += " --read";
1002 system ( command.latin1()); 1007 system ( command.latin1());
1003 } 1008 }
1004 } 1009 }
1005 1010
1006 } 1011 }
1007 break; 1012 break;
1008 case (PWMPI): 1013 case (PWMPI):
1009 1014
1010 break; 1015 break;
1011 default: 1016 default:
1012 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 1017 qDebug("KSM::slotSyncMenu: invalid apptype selected");
1013 break; 1018 break;
1014 1019
1015 } 1020 }
1016} 1021}
1017 1022
1018void KSyncManager::syncSharp() 1023void KSyncManager::syncSharp()
1019{ 1024{
1020 1025
1021 if ( ! syncExternalApplication("sharp") ) 1026 if ( ! syncExternalApplication("sharp") )
1022 qDebug("KSM::ERROR sync sharp "); 1027 qDebug("KSM::ERROR sync sharp ");
1023} 1028}
1024 1029
1025bool KSyncManager::syncExternalApplication(QString resource) 1030bool KSyncManager::syncExternalApplication(QString resource)
1026{ 1031{
1027 1032
1028 emit save(); 1033 emit save();
1029 1034
1030 if ( mAskForPreferences ) 1035 if ( mAskForPreferences )
1031 if ( !edit_sync_options()) { 1036 if ( !edit_sync_options()) {
1032 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1037 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1033 return false; 1038 return false;
1034 } 1039 }
1035 1040
1036 qDebug("KSM::Sync extern %s", resource.latin1()); 1041 qDebug("KSM::Sync extern %s", resource.latin1());
1037 1042
1038 bool syncOK = mImplementation->syncExternal(this, resource); 1043 bool syncOK = mImplementation->syncExternal(this, resource);
1039 1044
1040 return syncOK; 1045 return syncOK;
1041 1046
1042} 1047}
1043 1048
1044void KSyncManager::syncPhone() 1049void KSyncManager::syncPhone()
1045{ 1050{
1046 1051
1047 syncExternalApplication("phone"); 1052 syncExternalApplication("phone");
1048 1053
1049} 1054}
1050 1055
1051void KSyncManager::showProgressBar(int percentage, QString caption, int total) 1056void KSyncManager::showProgressBar(int percentage, QString caption, int total)
1052{ 1057{
1053 if (!bar->isVisible()) 1058 if (!bar->isVisible())
1054 { 1059 {
1055 int w = 300; 1060 int w = 300;
1056 if ( QApplication::desktop()->width() < 320 ) 1061 if ( QApplication::desktop()->width() < 320 )
1057 w = 220; 1062 w = 220;
1058 int h = bar->sizeHint().height() ; 1063 int h = bar->sizeHint().height() ;
1059 int dw = QApplication::desktop()->width(); 1064 int dw = QApplication::desktop()->width();
1060 int dh = QApplication::desktop()->height(); 1065 int dh = QApplication::desktop()->height();
1061 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1066 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1062 bar->setCaption (caption); 1067 bar->setCaption (caption);
1063 bar->setTotalSteps ( total ) ; 1068 bar->setTotalSteps ( total ) ;
1064 bar->show(); 1069 bar->show();
1065 } 1070 }
1066 bar->raise(); 1071 bar->raise();
1067 bar->setProgress( percentage ); 1072 bar->setProgress( percentage );
1068 qApp->processEvents(); 1073 qApp->processEvents();
1069} 1074}
1070 1075
1071void KSyncManager::hideProgressBar() 1076void KSyncManager::hideProgressBar()
1072{ 1077{
1073 bar->hide(); 1078 bar->hide();
1074 qApp->processEvents(); 1079 qApp->processEvents();
1075} 1080}
1076 1081
1077bool KSyncManager::isProgressBarCanceled() 1082bool KSyncManager::isProgressBarCanceled()
1078{ 1083{
1079 return !bar->isVisible(); 1084 return !bar->isVisible();
1080} 1085}
1081 1086
1082QString KSyncManager::syncFileName() 1087QString KSyncManager::syncFileName()
1083{ 1088{
1084 1089
1085 QString fn = "tempfile"; 1090 QString fn = "tempfile";
1086 switch(mTargetApp) 1091 switch(mTargetApp)
1087 { 1092 {
1088 case (KAPI): 1093 case (KAPI):
1089 fn = "tempsyncab.vcf"; 1094 fn = "tempsyncab.vcf";
1090 break; 1095 break;
1091 case (KOPI): 1096 case (KOPI):
1092 fn = "tempsynccal.ics"; 1097 fn = "tempsynccal.ics";
1093 break; 1098 break;
1094 case (PWMPI): 1099 case (PWMPI):
1095 fn = "tempsyncpw.pwm"; 1100 fn = "tempsyncpw.pwm";
1096 break; 1101 break;
1097 default: 1102 default:
1098 break; 1103 break;
1099 } 1104 }
1100#ifdef _WIN32_ 1105#ifdef _WIN32_
1101 return locateLocal( "tmp", fn ); 1106 return locateLocal( "tmp", fn );
1102#else 1107#else
1103 return (QString( "/tmp/" )+ fn ); 1108 return (QString( "/tmp/" )+ fn );
1104#endif 1109#endif
1105} 1110}
1106 1111
1107void KSyncManager::syncPi() 1112void KSyncManager::syncPi()
1108{ 1113{
1109 mIsKapiFile = true; 1114 mIsKapiFile = true;
1110 mPisyncFinished = false; 1115 mPisyncFinished = false;
1111 qApp->processEvents(); 1116 qApp->processEvents();
1112 if ( mAskForPreferences ) 1117 if ( mAskForPreferences )
1113 if ( !edit_pisync_options()) { 1118 if ( !edit_pisync_options()) {
1114 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1119 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1115 mPisyncFinished = true; 1120 mPisyncFinished = true;
1116 return; 1121 return;
1117 } 1122 }
1118 bool ok; 1123 bool ok;
1119 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1124 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1120 if ( ! ok ) { 1125 if ( ! ok ) {
1121 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1126 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1122 mPisyncFinished = true; 1127 mPisyncFinished = true;
1123 return; 1128 return;
1124 } 1129 }
1125 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1130 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1126 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1131 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1127 commandSocket->readFile( syncFileName() ); 1132 commandSocket->readFile( syncFileName() );
1128} 1133}
1129 1134
1130void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1135void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1131{ 1136{
1132 //enum { success, errorW, errorR, quiet }; 1137 //enum { success, errorW, errorR, quiet };
1133 1138
1134 1139
1135 1140
1136 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1141 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1137 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1142 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1138 if ( state == KCommandSocket::errorPW ) 1143 if ( state == KCommandSocket::errorPW )
1139 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1144 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1140 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1145 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1141 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1146 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1142 else if ( state == KCommandSocket::errorCA ) 1147 else if ( state == KCommandSocket::errorCA )
1143 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1148 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1144 else if ( state == KCommandSocket::errorFI ) 1149 else if ( state == KCommandSocket::errorFI )
1145 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1150 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1146 else if ( state == KCommandSocket::errorED ) 1151 else if ( state == KCommandSocket::errorED )
1147 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1152 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1148 else if ( state == KCommandSocket::errorUN ) 1153 else if ( state == KCommandSocket::errorUN )
1149 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1154 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1150 delete s; 1155 delete s;
1151 if ( state == KCommandSocket::errorR ) { 1156 if ( state == KCommandSocket::errorR ) {
1152 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1157 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1153 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1158 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1154 commandSocket->sendStop(); 1159 commandSocket->sendStop();
1155 } 1160 }
1156 mPisyncFinished = true; 1161 mPisyncFinished = true;
1157 return; 1162 return;
1158 1163
1159 } else if ( state == KCommandSocket::errorW ) { 1164 } else if ( state == KCommandSocket::errorW ) {
1160 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1165 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1161 mPisyncFinished = true; 1166 mPisyncFinished = true;
1162 1167
1163 } else if ( state == KCommandSocket::successR ) { 1168 } else if ( state == KCommandSocket::successR ) {
1164 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1169 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1165 1170
1166 } else if ( state == KCommandSocket::successW ) { 1171 } else if ( state == KCommandSocket::successW ) {
1167 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1172 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1168 mPisyncFinished = true; 1173 mPisyncFinished = true;
1169 } else if ( state == KCommandSocket::quiet ){ 1174 } else if ( state == KCommandSocket::quiet ){
1170 qDebug("KSS: quiet "); 1175 qDebug("KSS: quiet ");
1171 mPisyncFinished = true; 1176 mPisyncFinished = true;
1172 } else { 1177 } else {
1173 qDebug("KSS: Error: unknown state: %d ", state); 1178 qDebug("KSS: Error: unknown state: %d ", state);
1174 mPisyncFinished = true; 1179 mPisyncFinished = true;
1175 } 1180 }
1176 1181
1177 delete s; 1182 delete s;
1178} 1183}
1179 1184
1180void KSyncManager::readFileFromSocket() 1185void KSyncManager::readFileFromSocket()
1181{ 1186{
1182 QString fileName = syncFileName(); 1187 QString fileName = syncFileName();
1183 bool syncOK = true; 1188 bool syncOK = true;
1184 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1189 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1185 if ( ! syncWithFile( fileName , true ) ) { 1190 if ( ! syncWithFile( fileName , true ) ) {
1186 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1191 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1187 syncOK = false; 1192 syncOK = false;
1188 } 1193 }
1189 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1194 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1190 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1195 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1191 if ( mWriteBackFile && syncOK ) 1196 if ( mWriteBackFile && syncOK ) {
1197 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1192 commandSocket->writeFile( fileName ); 1198 commandSocket->writeFile( fileName );
1199 }
1193 else { 1200 else {
1194 commandSocket->sendStop(); 1201 commandSocket->sendStop();
1195 if ( syncOK ) 1202 if ( syncOK )
1196 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1203 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1197 mPisyncFinished = true; 1204 mPisyncFinished = true;
1198 } 1205 }
1199} 1206}
1200 1207
1201KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1208KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1202{ 1209{
1203 mPassWord = pw; 1210 mPassWord = pw;
1204 mSocket = 0; 1211 mSocket = 0;
1205 mSyncActionDialog = 0; 1212 mSyncActionDialog = 0;
1206 blockRC = false; 1213 blockRC = false;
1207 mErrorMessage = 0; 1214 mErrorMessage = 0;
1208} 1215}
1209 1216
1210void KServerSocket::newConnection ( int socket ) 1217void KServerSocket::newConnection ( int socket )
1211{ 1218{
1212 // qDebug("KServerSocket:New connection %d ", socket); 1219 // qDebug("KServerSocket:New connection %d ", socket);
1213 if ( mSocket ) { 1220 if ( mSocket ) {
1214 qDebug("KSS::newConnection Socket deleted! "); 1221 qDebug("KSS::newConnection Socket deleted! ");
1215 delete mSocket; 1222 delete mSocket;
1216 mSocket = 0; 1223 mSocket = 0;
1217 } 1224 }
1218 mSocket = new QSocket( this ); 1225 mSocket = new QSocket( this );
1219 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1226 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1220 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1227 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1221 mSocket->setSocket( socket ); 1228 mSocket->setSocket( socket );
1222} 1229}
1223 1230
1224void KServerSocket::discardClient() 1231void KServerSocket::discardClient()
1225{ 1232{
1226 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1233 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1227} 1234}
1228void KServerSocket::deleteSocket() 1235void KServerSocket::deleteSocket()
1229{ 1236{
1230 qDebug("KSS::deleteSocket"); 1237 qDebug("KSS::deleteSocket");
1231 if ( mSocket ) { 1238 if ( mSocket ) {
1232 delete mSocket; 1239 delete mSocket;
1233 mSocket = 0; 1240 mSocket = 0;
1234 } 1241 }
1235 if ( mErrorMessage ) 1242 if ( mErrorMessage )
1236 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1243 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1237} 1244}
1238void KServerSocket::readClient() 1245void KServerSocket::readClient()
1239{ 1246{
1240 if ( blockRC ) 1247 if ( blockRC )
1241 return; 1248 return;
1242 if ( mSocket == 0 ) { 1249 if ( mSocket == 0 ) {
1243 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1250 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1244 return; 1251 return;
1245 } 1252 }
1246 if ( mErrorMessage ) { 1253 if ( mErrorMessage ) {
1247 mErrorMessage = 999; 1254 mErrorMessage = 999;
1248 error_connect("ERROR_ED\r\n\r\n"); 1255 error_connect("ERROR_ED\r\n\r\n");
1249 return; 1256 return;
1250 } 1257 }
1251 mErrorMessage = 0; 1258 mErrorMessage = 0;
1252 //qDebug("KServerSocket::readClient()"); 1259 //qDebug("KServerSocket::readClient()");
1253 if ( mSocket->canReadLine() ) { 1260 if ( mSocket->canReadLine() ) {
1254 QString line = mSocket->readLine(); 1261 QString line = mSocket->readLine();
1255 //qDebug("KServerSocket readline: %s ", line.latin1()); 1262 //qDebug("KServerSocket readline: %s ", line.latin1());
1256 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1263 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1257 if ( tokens[0] == "GET" ) { 1264 if ( tokens[0] == "GET" ) {
1258 if ( tokens[1] == mPassWord ) { 1265 if ( tokens[1] == mPassWord ) {
1259 //emit sendFile( mSocket ); 1266 //emit sendFile( mSocket );
1260 bool ok = false; 1267 bool ok = false;
1261 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1268 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1262 if ( ok ) { 1269 if ( ok ) {
1263 KSyncManager::mRequestedSyncEvent = dt; 1270 KSyncManager::mRequestedSyncEvent = dt;
1264 } 1271 }
1265 else 1272 else
1266 KSyncManager::mRequestedSyncEvent = QDateTime(); 1273 KSyncManager::mRequestedSyncEvent = QDateTime();
1267 send_file(); 1274 send_file();
1268 } 1275 }
1269 else { 1276 else {
1270 mErrorMessage = 1; 1277 mErrorMessage = 1;
1271 error_connect("ERROR_PW\r\n\r\n"); 1278 error_connect("ERROR_PW\r\n\r\n");
1272 } 1279 }
1273 } 1280 }
1274 if ( tokens[0] == "PUT" ) { 1281 if ( tokens[0] == "PUT" ) {
1275 if ( tokens[1] == mPassWord ) { 1282 if ( tokens[1] == mPassWord ) {
1276 //emit getFile( mSocket ); 1283 //emit getFile( mSocket );
1277 blockRC = true; 1284 blockRC = true;
1278 get_file(); 1285 get_file();
1279 } 1286 }
1280 else { 1287 else {
1281 mErrorMessage = 2; 1288 mErrorMessage = 2;
1282 error_connect("ERROR_PW\r\n\r\n"); 1289 error_connect("ERROR_PW\r\n\r\n");
1283 end_connect(); 1290 end_connect();
1284 } 1291 }
1285 } 1292 }
1286 if ( tokens[0] == "STOP" ) { 1293 if ( tokens[0] == "STOP" ) {
1287 //emit endConnect(); 1294 //emit endConnect();
1288 end_connect(); 1295 end_connect();
1289 } 1296 }
1290 } 1297 }
1291} 1298}
1292void KServerSocket::displayErrorMessage() 1299void KServerSocket::displayErrorMessage()
1293{ 1300{
1294 if ( mErrorMessage == 1 ) { 1301 if ( mErrorMessage == 1 ) {
1295 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password")); 1302 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1296 mErrorMessage = 0; 1303 mErrorMessage = 0;
1297 } 1304 }
1298 else if ( mErrorMessage == 2 ) { 1305 else if ( mErrorMessage == 2 ) {
1299 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password")); 1306 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1300 mErrorMessage = 0; 1307 mErrorMessage = 0;
1301 } 1308 }
1302} 1309}
1303void KServerSocket::error_connect( QString errmess ) 1310void KServerSocket::error_connect( QString errmess )
1304{ 1311{
1305 QTextStream os( mSocket ); 1312 QTextStream os( mSocket );
1306 os.setEncoding( QTextStream::Latin1 ); 1313 os.setEncoding( QTextStream::Latin1 );
1307 os << errmess ; 1314 os << errmess ;
1308 mSocket->close(); 1315 mSocket->close();
1309 if ( mSocket->state() == QSocket::Idle ) { 1316 if ( mSocket->state() == QSocket::Idle ) {
1310 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1317 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1311 } 1318 }
1312} 1319}
1313void KServerSocket::end_connect() 1320void KServerSocket::end_connect()
1314{ 1321{
1315 delete mSyncActionDialog; 1322 delete mSyncActionDialog;
1316 mSyncActionDialog = 0; 1323 mSyncActionDialog = 0;
1317} 1324}
1318void KServerSocket::send_file() 1325void KServerSocket::send_file()
1319{ 1326{
1320 //qDebug("MainWindow::sendFile(QSocket* s) "); 1327 //qDebug("MainWindow::sendFile(QSocket* s) ");
1321 if ( mSyncActionDialog ) 1328 if ( mSyncActionDialog )
1322 delete mSyncActionDialog; 1329 delete mSyncActionDialog;
1323 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1330 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1324 mSyncActionDialog->setCaption(i18n("Received sync request")); 1331 mSyncActionDialog->setCaption(i18n("Received sync request"));
1325 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1332 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1326 label->setAlignment ( Qt::AlignHCenter ); 1333 label->setAlignment ( Qt::AlignHCenter );
1327 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1334 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1328 lay->addWidget( label); 1335 lay->addWidget( label);
1329 lay->setMargin(7); 1336 lay->setMargin(7);
1330 lay->setSpacing(7); 1337 lay->setSpacing(7);
1331 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1338 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1332 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1339 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1333 //secs = 333; 1340 //secs = 333;
1334 if ( secs < 0 ) 1341 if ( secs < 0 )
1335 secs = secs * (-1); 1342 secs = secs * (-1);
1336 if ( secs > 30 ) 1343 if ( secs > 30 )
1337 //if ( true ) 1344 //if ( true )
1338 { 1345 {
1339 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1346 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1340 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1347 QLabel* label = new QLabel( warning, mSyncActionDialog );
1341 label->setAlignment ( Qt::AlignHCenter ); 1348 label->setAlignment ( Qt::AlignHCenter );
1342 lay->addWidget( label); 1349 lay->addWidget( label);
1343 if ( secs > 180 ) 1350 if ( secs > 180 )
1344 { 1351 {
1345 if ( secs > 300 ) { 1352 if ( secs > 300 ) {
1346 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("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!"), i18n("High clock skew!"),i18n("Synchronize!"))) { 1353 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("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!"), i18n("High clock skew!"),i18n("Synchronize!"))) {
1347 qDebug("KSS::Sync cancelled ,cs"); 1354 qDebug("KSS::Sync cancelled ,cs");
1348 mErrorMessage = 0; 1355 mErrorMessage = 0;
1349 end_connect(); 1356 end_connect();
1350 error_connect("ERROR_CA\r\n\r\n"); 1357 error_connect("ERROR_CA\r\n\r\n");
1351 return ; 1358 return ;
1352 } 1359 }
1353 } 1360 }
1354 QFont f = label->font(); 1361 QFont f = label->font();
1355 f.setPointSize ( f.pointSize() *2 ); 1362 f.setPointSize ( f.pointSize() *2 );
1356 f. setBold (true ); 1363 f. setBold (true );
1357 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1364 QLabel* label = new QLabel( warning, mSyncActionDialog );
1358 label->setFont( f ); 1365 label->setFont( f );
1359 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1366 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1360 label->setText( warning ); 1367 label->setText( warning );
1361 label->setAlignment ( Qt::AlignHCenter ); 1368 label->setAlignment ( Qt::AlignHCenter );
1362 lay->addWidget( label); 1369 lay->addWidget( label);
1363 mSyncActionDialog->setFixedSize( 230, 300); 1370 mSyncActionDialog->setFixedSize( 230, 300);
1364 } else { 1371 } else {
1365 mSyncActionDialog->setFixedSize( 230, 200); 1372 mSyncActionDialog->setFixedSize( 230, 200);
1366 } 1373 }
1367 } else { 1374 } else {
1368 mSyncActionDialog->setFixedSize( 230, 120); 1375 mSyncActionDialog->setFixedSize( 230, 120);
1369 } 1376 }
1370 } else 1377 } else
1371 mSyncActionDialog->setFixedSize( 230, 120); 1378 mSyncActionDialog->setFixedSize( 230, 120);
1372 mSyncActionDialog->show(); 1379 mSyncActionDialog->show();
1373 mSyncActionDialog->raise(); 1380 mSyncActionDialog->raise();
1374 emit request_file(); 1381 emit request_file();
1375 qApp->processEvents(); 1382 qApp->processEvents();
1376 QString fileName = mFileName; 1383 QString fileName = mFileName;
1377 QFile file( fileName ); 1384 QFile file( fileName );
1378 if (!file.open( IO_ReadOnly ) ) { 1385 if (!file.open( IO_ReadOnly ) ) {
1379 mErrorMessage = 0; 1386 mErrorMessage = 0;
1380 end_connect(); 1387 end_connect();
1381 error_connect("ERROR_FI\r\n\r\n"); 1388 error_connect("ERROR_FI\r\n\r\n");
1382 return ; 1389 return ;
1383 } 1390 }
1384 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1391 mSyncActionDialog->setCaption( i18n("Sending file...") );
1385 QTextStream ts( &file ); 1392 QTextStream ts( &file );
1386 ts.setEncoding( QTextStream::Latin1 ); 1393 ts.setEncoding( QTextStream::Latin1 );
1387 1394
1388 QTextStream os( mSocket ); 1395 QTextStream os( mSocket );
1389 os.setEncoding( QTextStream::Latin1 ); 1396 os.setEncoding( QTextStream::Latin1 );
1390 while ( ! ts.atEnd() ) { 1397 while ( ! ts.atEnd() ) {
1391 os << ts.readLine() << "\r\n"; 1398 os << ts.readLine() << "\r\n";
1392 } 1399 }
1393 os << "\r\n"; 1400 os << "\r\n";
1394 //os << ts.read(); 1401 //os << ts.read();
1395 file.close(); 1402 file.close();
1396 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1403 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1397 mSocket->close(); 1404 mSocket->close();
1398 if ( mSocket->state() == QSocket::Idle ) 1405 if ( mSocket->state() == QSocket::Idle )
1399 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1406 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1400} 1407}
1401void KServerSocket::get_file() 1408void KServerSocket::get_file()
1402{ 1409{
1403 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1410 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1404 1411
1405 piTime.start(); 1412 piTime.start();
1406 piFileString = ""; 1413 piFileString = "";
1407 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1414 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1408} 1415}
1409 1416
1410 1417
1411void KServerSocket::readBackFileFromSocket() 1418void KServerSocket::readBackFileFromSocket()
1412{ 1419{
1413 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1420 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1414 while ( mSocket->canReadLine () ) { 1421 while ( mSocket->canReadLine () ) {
1415 piTime.restart(); 1422 piTime.restart();
1416 QString line = mSocket->readLine (); 1423 QString line = mSocket->readLine ();
1417 piFileString += line; 1424 piFileString += line;
1418 //qDebug("readline: %s ", line.latin1()); 1425 //qDebug("readline: %s ", line.latin1());
1419 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1426 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1420 1427
1421 } 1428 }
1422 if ( piTime.elapsed () < 3000 ) { 1429 if ( piTime.elapsed () < 3000 ) {
1423 // wait for more 1430 // wait for more
1424 //qDebug("waitformore "); 1431 //qDebug("waitformore ");
1425 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1432 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1426 return; 1433 return;
1427 } 1434 }
1428 QString fileName = mFileName; 1435 QString fileName = mFileName;
1429 QFile file ( fileName ); 1436 QFile file ( fileName );
1430 if (!file.open( IO_WriteOnly ) ) { 1437 if (!file.open( IO_WriteOnly ) ) {
1431 delete mSyncActionDialog; 1438 delete mSyncActionDialog;
1432 mSyncActionDialog = 0; 1439 mSyncActionDialog = 0;
1433 qDebug("KSS:Error open read back file "); 1440 qDebug("KSS:Error open read back file ");
1434 piFileString = ""; 1441 piFileString = "";
1435 emit file_received( false ); 1442 emit file_received( false );
1436 blockRC = false; 1443 blockRC = false;
1437 return ; 1444 return ;
1438 1445
1439 } 1446 }
1440 1447
1441 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1448 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1442 QTextStream ts ( &file ); 1449 QTextStream ts ( &file );
1443 ts.setEncoding( QTextStream::Latin1 ); 1450 ts.setEncoding( QTextStream::Latin1 );
1444 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1451 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1445 ts << piFileString; 1452 ts << piFileString;
1446 mSocket->close(); 1453 mSocket->close();
1447 if ( mSocket->state() == QSocket::Idle ) 1454 if ( mSocket->state() == QSocket::Idle )
1448 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1455 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1449 file.close(); 1456 file.close();
1450 piFileString = ""; 1457 piFileString = "";
1451 emit file_received( true ); 1458 emit file_received( true );
1452 delete mSyncActionDialog; 1459 delete mSyncActionDialog;
1453 mSyncActionDialog = 0; 1460 mSyncActionDialog = 0;
1454 blockRC = false; 1461 blockRC = false;
1455 1462
1456} 1463}
1457 1464
1458KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1465KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1459{ 1466{
1460 mPassWord = password; 1467 mPassWord = password;
1461 mSocket = 0; 1468 mSocket = 0;
1462 mFirst = false; 1469 mFirst = false;
1463 mFirstLine = true; 1470 mFirstLine = true;
1464 mPort = port; 1471 mPort = port;
1465 mHost = host; 1472 mHost = host;
1466 tlw = cap; 1473 tlw = cap;
1467 mRetVal = quiet; 1474 mRetVal = quiet;
1468 mTimerSocket = new QTimer ( this ); 1475 mTimerSocket = new QTimer ( this );
1469 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( deleteSocket() ) ); 1476 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1477 mConnectProgress.setCaption( i18n("Pi-Sync") );
1478 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1479 mConnectCount = -1;
1470} 1480}
1471void KCommandSocket::sendFileRequest() 1481void KCommandSocket::sendFileRequest()
1472{ 1482{
1473 if ( tlw ) 1483 if ( tlw )
1474 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1484 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1475 mTimerSocket->start( 300000 ); 1485 mConnectProgress.hide();
1486 mConnectCount = 300;mConnectMax = 300;
1487 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1488 mTimerSocket->start( 100, true );
1476 QTextStream os( mSocket ); 1489 QTextStream os( mSocket );
1477 os.setEncoding( QTextStream::Latin1 ); 1490 os.setEncoding( QTextStream::Latin1 );
1478 1491
1479 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1492 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1480 os << "GET " << mPassWord << curDt <<"\r\n\r\n"; 1493 os << "GET " << mPassWord << curDt <<"\r\n\r\n";
1481} 1494}
1482 1495
1483void KCommandSocket::readFile( QString fn ) 1496void KCommandSocket::readFile( QString fn )
1484{ 1497{
1485 if ( !mSocket ) { 1498 if ( !mSocket ) {
1486 mSocket = new QSocket( this ); 1499 mSocket = new QSocket( this );
1487 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1500 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1488 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1501 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1489 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1502 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1490 } 1503 }
1491 mFileString = ""; 1504 mFileString = "";
1492 mFileName = fn; 1505 mFileName = fn;
1493 mFirst = true; 1506 mFirst = true;
1494 if ( tlw ) 1507 if ( tlw )
1495 tlw->setCaption( i18n("Trying to connect to remote...") ); 1508 tlw->setCaption( i18n("Trying to connect to remote...") );
1496 mTimerSocket->start( 20000 ); 1509 mConnectCount = 30;mConnectMax = 30;
1510 mTimerSocket->start( 1000, true );
1497 mSocket->connectToHost( mHost, mPort ); 1511 mSocket->connectToHost( mHost, mPort );
1498 qDebug("KSS: Waiting for connection"); 1512 qDebug("KSS: Waiting for connection");
1499} 1513}
1500 1514void KCommandSocket::updateConnectDialog()
1515{
1516
1517 if ( mConnectCount == mConnectMax ) {
1518 //qDebug("MAXX %d", mConnectMax);
1519 mConnectProgress.setTotalSteps ( 30 );
1520 mConnectProgress.show();
1521 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1522 }
1523 //qDebug("updateConnectDialog() %d", mConnectCount);
1524 mConnectProgress.raise();
1525 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1526 --mConnectCount;
1527 if ( mConnectCount > 0 )
1528 mTimerSocket->start( 1000, true );
1529 else
1530 deleteSocket();
1531
1532}
1501void KCommandSocket::writeFile( QString fileName ) 1533void KCommandSocket::writeFile( QString fileName )
1502{ 1534{
1503 if ( !mSocket ) { 1535 if ( !mSocket ) {
1504 mSocket = new QSocket( this ); 1536 mSocket = new QSocket( this );
1505 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1537 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1506 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1538 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1507 } 1539 }
1508 mFileName = fileName ; 1540 mFileName = fileName ;
1509 mTimerSocket->start( 20000 ); 1541 mConnectCount = 30;mConnectMax = 30;
1542 mTimerSocket->start( 1000, true );
1510 mSocket->connectToHost( mHost, mPort ); 1543 mSocket->connectToHost( mHost, mPort );
1511} 1544}
1512void KCommandSocket::writeFileToSocket() 1545void KCommandSocket::writeFileToSocket()
1513{ 1546{
1514 mTimerSocket->stop(); 1547 mTimerSocket->stop();
1515 QFile file2( mFileName ); 1548 QFile file2( mFileName );
1516 if (!file2.open( IO_ReadOnly ) ) { 1549 if (!file2.open( IO_ReadOnly ) ) {
1550 mConnectProgress.hide();
1551 mConnectCount = -1;
1517 mRetVal= errorW; 1552 mRetVal= errorW;
1518 mSocket->close(); 1553 mSocket->close();
1519 if ( mSocket->state() == QSocket::Idle ) 1554 if ( mSocket->state() == QSocket::Idle )
1520 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1555 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1521 return ; 1556 return ;
1522 } 1557 }
1558 mConnectProgress.setTotalSteps ( file2.size() );
1559 mConnectProgress.show();
1560 int count = 0;
1561 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1562 mConnectProgress.setProgress( count );
1563 mConnectProgress.blockSignals( true );
1523 QTextStream ts2( &file2 ); 1564 QTextStream ts2( &file2 );
1524 ts2.setEncoding( QTextStream::Latin1 ); 1565 ts2.setEncoding( QTextStream::Latin1 );
1525 QTextStream os2( mSocket ); 1566 QTextStream os2( mSocket );
1526 os2.setEncoding( QTextStream::Latin1 ); 1567 os2.setEncoding( QTextStream::Latin1 );
1527 os2 << "PUT " << mPassWord << "\r\n\r\n";; 1568 os2 << "PUT " << mPassWord << "\r\n\r\n";;
1528 while ( ! ts2.atEnd() ) { 1569 while ( ! ts2.atEnd() ) {
1529 os2 << ts2.readLine() << "\r\n"; 1570 qApp->processEvents();
1571 mConnectProgress.setProgress( count );
1572 QString temp = ts2.readLine();
1573 count += temp.length();
1574 os2 << temp << "\r\n";
1530 } 1575 }
1576 file2.close();
1577 mConnectProgress.hide();
1578 mConnectCount = -1;
1531 os2 << "\r\n"; 1579 os2 << "\r\n";
1532 mRetVal= successW; 1580 mRetVal= successW;
1533 file2.close();
1534 mSocket->close(); 1581 mSocket->close();
1535 if ( mSocket->state() == QSocket::Idle ) 1582 if ( mSocket->state() == QSocket::Idle )
1536 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1583 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1584 mConnectProgress.blockSignals( false );
1537} 1585}
1538void KCommandSocket::sendStop() 1586void KCommandSocket::sendStop()
1539{ 1587{
1540 if ( !mSocket ) { 1588 if ( !mSocket ) {
1541 mSocket = new QSocket( this ); 1589 mSocket = new QSocket( this );
1542 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1590 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1543 } 1591 }
1544 mSocket->connectToHost( mHost, mPort ); 1592 mSocket->connectToHost( mHost, mPort );
1545 QTextStream os2( mSocket ); 1593 QTextStream os2( mSocket );
1546 os2.setEncoding( QTextStream::Latin1 ); 1594 os2.setEncoding( QTextStream::Latin1 );
1547 os2 << "STOP\r\n\r\n"; 1595 os2 << "STOP\r\n\r\n";
1548 mSocket->close(); 1596 mSocket->close();
1549 if ( mSocket->state() == QSocket::Idle ) 1597 if ( mSocket->state() == QSocket::Idle )
1550 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1598 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1551} 1599}
1552 1600
1553void KCommandSocket::startReadFileFromSocket() 1601void KCommandSocket::startReadFileFromSocket()
1554{ 1602{
1555 if ( ! mFirst ) 1603 if ( ! mFirst )
1556 return; 1604 return;
1605 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1557 mFirst = false; 1606 mFirst = false;
1558 mTimerSocket->stop();
1559 mFileString = ""; 1607 mFileString = "";
1560 mTime.start(); 1608 mTime.start();
1561 mFirstLine = true; 1609 mFirstLine = true;
1562 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1610 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1563 1611
1564} 1612}
1565void KCommandSocket::readFileFromSocket() 1613void KCommandSocket::readFileFromSocket()
1566{ 1614{
1567 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1615 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1568 while ( mSocket->canReadLine () ) { 1616 while ( mSocket->canReadLine () ) {
1569 mTime.restart(); 1617 mTime.restart();
1570 QString line = mSocket->readLine (); 1618 QString line = mSocket->readLine ();
1571 if ( mFirstLine ) { 1619 if ( mFirstLine ) {
1572 mFirstLine = false; 1620 mFirstLine = false;
1573 if ( line.left( 6 ) == "ERROR_" ) { 1621 if ( line.left( 6 ) == "ERROR_" ) {
1622 mTimerSocket->stop();
1623 mConnectCount = -1;
1574 if ( line.left( 8 ) == "ERROR_PW" ) { 1624 if ( line.left( 8 ) == "ERROR_PW" ) {
1575 mRetVal = errorPW; 1625 mRetVal = errorPW;
1576 deleteSocket(); 1626 deleteSocket();
1577 return ; 1627 return ;
1578 } 1628 }
1579 if ( line.left( 8 ) == "ERROR_CA" ) { 1629 if ( line.left( 8 ) == "ERROR_CA" ) {
1580 mRetVal = errorCA; 1630 mRetVal = errorCA;
1581 deleteSocket(); 1631 deleteSocket();
1582 return ; 1632 return ;
1583 } 1633 }
1584 if ( line.left( 8 ) == "ERROR_FI" ) { 1634 if ( line.left( 8 ) == "ERROR_FI" ) {
1585 mRetVal = errorFI; 1635 mRetVal = errorFI;
1586 deleteSocket(); 1636 deleteSocket();
1587 return ; 1637 return ;
1588 } 1638 }
1589 if ( line.left( 8 ) == "ERROR_ED" ) { 1639 if ( line.left( 8 ) == "ERROR_ED" ) {
1590 mRetVal = errorED; 1640 mRetVal = errorED;
1591 deleteSocket(); 1641 deleteSocket();
1592 return ; 1642 return ;
1593 } 1643 }
1594 mRetVal = errorUN; 1644 mRetVal = errorUN;
1595 deleteSocket(); 1645 deleteSocket();
1596 return ; 1646 return ;
1597 } 1647 }
1598 } 1648 }
1599 mFileString += line; 1649 mFileString += line;
1600 //qDebug("readline: %s ", line.latin1()); 1650 //qDebug("readline: %s ", line.latin1());
1601 } 1651 }
1602 if ( mTime.elapsed () < 3000 ) { 1652 if ( mTime.elapsed () < 3000 ) {
1603 // wait for more 1653 // wait for more
1604 //qDebug("waitformore "); 1654 //qDebug("waitformore ");
1605 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1655 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1606 return; 1656 return;
1607 } 1657 }
1658 mTimerSocket->stop();
1659 mConnectCount = -1;
1660 mConnectProgress.hide();
1608 QString fileName = mFileName; 1661 QString fileName = mFileName;
1609 QFile file ( fileName ); 1662 QFile file ( fileName );
1610 if (!file.open( IO_WriteOnly ) ) { 1663 if (!file.open( IO_WriteOnly ) ) {
1611 mFileString = ""; 1664 mFileString = "";
1612 mRetVal = errorR; 1665 mRetVal = errorR;
1613 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1666 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1614 deleteSocket(); 1667 deleteSocket();
1615 return ; 1668 return ;
1616 1669
1617 } 1670 }
1618 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1671 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1619 QTextStream ts ( &file ); 1672 QTextStream ts ( &file );
1620 ts.setEncoding( QTextStream::Latin1 ); 1673 ts.setEncoding( QTextStream::Latin1 );
1621 ts << mFileString; 1674 ts << mFileString;
1622 file.close(); 1675 file.close();
1623 mFileString = ""; 1676 mFileString = "";
1624 mRetVal = successR; 1677 mRetVal = successR;
1625 mSocket->close(); 1678 mSocket->close();
1626 // if state is not idle, deleteSocket(); is called via 1679 // if state is not idle, deleteSocket(); is called via
1627 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1680 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1628 if ( mSocket->state() == QSocket::Idle ) 1681 if ( mSocket->state() == QSocket::Idle )
1629 deleteSocket(); 1682 deleteSocket();
1630} 1683}
1631 1684
1632void KCommandSocket::deleteSocket() 1685void KCommandSocket::deleteSocket()
1633{ 1686{
1634 //qDebug("KCommandSocket::deleteSocket() "); 1687 //qDebug("KCommandSocket::deleteSocket() ");
1635 if ( mTimerSocket->isActive () ) { 1688 mConnectProgress.hide();
1689
1690 if ( mConnectCount >= 0 ) {
1636 mTimerSocket->stop(); 1691 mTimerSocket->stop();
1637 mRetVal = errorTO; 1692 mRetVal = errorTO;
1638 qDebug("KCS::Connection to remote host timed out"); 1693 qDebug("KCS::Connection to remote host timed out");
1639 if ( mSocket ) { 1694 if ( mSocket ) {
1640 mSocket->close(); 1695 mSocket->close();
1641 //if ( mSocket->state() == QSocket::Idle ) 1696 //if ( mSocket->state() == QSocket::Idle )
1642 // deleteSocket(); 1697 // deleteSocket();
1643 delete mSocket; 1698 delete mSocket;
1644 mSocket = 0; 1699 mSocket = 0;
1645 } 1700 }
1701 if ( mConnectCount == 0 )
1646 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1702 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1703 else if ( tlw )
1704 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1647 emit commandFinished( this, mRetVal ); 1705 emit commandFinished( this, mRetVal );
1648 return; 1706 return;
1649 } 1707 }
1650 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1708 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1651 if ( mSocket) 1709 if ( mSocket)
1652 delete mSocket; 1710 delete mSocket;
1653 mSocket = 0; 1711 mSocket = 0;
1712 qDebug("commandFinished ");
1654 emit commandFinished( this, mRetVal ); 1713 emit commandFinished( this, mRetVal );
1655} 1714}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 30ec1e6..e6738b6 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -1,230 +1,236 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20 $Id$ 20 $Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qsocket.h> 27#include <qsocket.h>
28#include <qdatetime.h> 28#include <qdatetime.h>
29#include <qserversocket.h> 29#include <qserversocket.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qprogressdialog.h>
32 33
33class QPopupMenu; 34class QPopupMenu;
34class KSyncProfile; 35class KSyncProfile;
35class KPimPrefs; 36class KPimPrefs;
36class QWidget; 37class QWidget;
37class KSyncManager; 38class KSyncManager;
38class KSyncInterface; 39class KSyncInterface;
39class QProgressBar; 40class QProgressBar;
40 41
41 42
42class KServerSocket : public QServerSocket 43class KServerSocket : public QServerSocket
43{ 44{
44 Q_OBJECT 45 Q_OBJECT
45 46
46 public: 47 public:
47 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); 48 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
48 49
49 void newConnection ( int socket ) ; 50 void newConnection ( int socket ) ;
50 void setFileName( QString fn ) {mFileName = fn;}; 51 void setFileName( QString fn ) {mFileName = fn;};
51 signals: 52 signals:
52 void file_received( bool ); 53 void file_received( bool );
53 void request_file(); 54 void request_file();
54 void saveFile(); 55 void saveFile();
55 void endConnect(); 56 void endConnect();
56 private slots: 57 private slots:
57 void discardClient(); 58 void discardClient();
58 void deleteSocket(); 59 void deleteSocket();
59 void readClient(); 60 void readClient();
60 void displayErrorMessage(); 61 void displayErrorMessage();
61 void readBackFileFromSocket(); 62 void readBackFileFromSocket();
62 private : 63 private :
63 int mErrorMessage; 64 int mErrorMessage;
64 bool blockRC; 65 bool blockRC;
65 void send_file(); 66 void send_file();
66 void get_file(); 67 void get_file();
67 void end_connect(); 68 void end_connect();
68 void error_connect( QString ); 69 void error_connect( QString );
69 QDialog* mSyncActionDialog; 70 QDialog* mSyncActionDialog;
70 QSocket* mSocket; 71 QSocket* mSocket;
71 QString mPassWord; 72 QString mPassWord;
72 QString mFileName; 73 QString mFileName;
73 QTime piTime; 74 QTime piTime;
74 QString piFileString; 75 QString piFileString;
75}; 76};
76 77
77class KCommandSocket : public QObject 78class KCommandSocket : public QObject
78{ 79{
79 Q_OBJECT 80 Q_OBJECT
80 public: 81 public:
81 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet }; 82 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet };
82 KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); 83 KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 );
83 void readFile( QString ); 84 void readFile( QString );
84 void writeFile( QString ); 85 void writeFile( QString );
85 void sendStop(); 86 void sendStop();
86 87
87 private slots : 88 private slots :
88 void sendFileRequest(); 89 void sendFileRequest();
90 void updateConnectDialog();
89 91
90 signals: 92 signals:
91 void commandFinished( KCommandSocket*, int ); 93 void commandFinished( KCommandSocket*, int );
92 private slots: 94 private slots:
93 void startReadFileFromSocket(); 95 void startReadFileFromSocket();
94 void readFileFromSocket(); 96 void readFileFromSocket();
95 void deleteSocket(); 97 void deleteSocket();
96 void writeFileToSocket(); 98 void writeFileToSocket();
97 private : 99 private :
100 int mConnectCount;
101 int mConnectMax;
102 QProgressDialog mConnectProgress;
98 QWidget* tlw; 103 QWidget* tlw;
99 QSocket* mSocket; 104 QSocket* mSocket;
100 QString mPassWord; 105 QString mPassWord;
101 Q_UINT16 mPort; 106 Q_UINT16 mPort;
102 QString mHost; 107 QString mHost;
103 QString mFileName; 108 QString mFileName;
104 QTimer* mTimerSocket; 109 QTimer* mTimerSocket;
105 int mRetVal; 110 int mRetVal;
106 QTime mTime; 111 QTime mTime;
107 QString mFileString; 112 QString mFileString;
108 bool mFirst; 113 bool mFirst;
109 bool mFirstLine; 114 bool mFirstLine;
110}; 115};
111 116
112 117
113class KSyncManager : public QObject 118class KSyncManager : public QObject
114{ 119{
115 Q_OBJECT 120 Q_OBJECT
116 121
117 public: 122 public:
118 enum TargetApp { 123 enum TargetApp {
119 KOPI = 0, 124 KOPI = 0,
120 KAPI = 1, 125 KAPI = 1,
121 PWMPI = 2 }; 126 PWMPI = 2 };
122 127
123 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 128 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
124 ~KSyncManager() ; 129 ~KSyncManager() ;
125 130
126 void multiSync( bool askforPrefs ); 131 void multiSync( bool askforPrefs );
127 bool blockSave() { return mBlockSaveFlag; } 132 bool blockSave() { return mBlockSaveFlag; }
128 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 133 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
129 void setDefaultFileName( QString s) ; 134 void setDefaultFileName( QString s) ;
130 QString defaultFileName() { return mDefFileName ;} 135 QString defaultFileName() { return mDefFileName ;}
131 QString syncFileName(); 136 QString syncFileName();
132 void enableQuick( bool ask = true); 137 void enableQuick( bool ask = true);
133 138
134 bool syncWithDesktop () { return mSyncWithDesktop;} 139 bool syncWithDesktop () { return mSyncWithDesktop;}
135 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 140 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
136 QString getCurrentSyncName() { return mCurrentSyncName; } 141 QString getCurrentSyncName() { return mCurrentSyncName; }
137 142
138 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 143 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
139 void hideProgressBar(); 144 void hideProgressBar();
140 bool isProgressBarCanceled(); 145 bool isProgressBarCanceled();
141 146
142 // sync stuff 147 // sync stuff
143 QString mLocalMachineName; 148 QString mLocalMachineName;
144 QStringList mExternSyncProfiles; 149 QStringList mExternSyncProfiles;
145 QStringList mSyncProfileNames; 150 QStringList mSyncProfileNames;
146 bool mAskForPreferences; 151 bool mAskForPreferences;
147 bool mShowSyncSummary; 152 bool mShowSyncSummary;
148 bool mIsKapiFile; 153 bool mIsKapiFile;
149 bool mWriteBackExistingOnly; 154 bool mWriteBackExistingOnly;
150 int mSyncAlgoPrefs; 155 int mSyncAlgoPrefs;
151 bool mWriteBackFile; 156 bool mWriteBackFile;
152 int mWriteBackInFuture; 157 int mWriteBackInFuture;
153 int mWriteBackInPast; 158 int mWriteBackInPast;
154 QString mPhoneDevice; 159 QString mPhoneDevice;
155 QString mPhoneConnection; 160 QString mPhoneConnection;
156 QString mPhoneModel; 161 QString mPhoneModel;
157 QString mPassWordPiSync; 162 QString mPassWordPiSync;
158 QString mActiveSyncPort; 163 QString mActiveSyncPort;
159 QString mActiveSyncIP ; 164 QString mActiveSyncIP ;
160 QString mFilterInCal; 165 QString mFilterInCal;
161 QString mFilterOutCal; 166 QString mFilterOutCal;
162 QString mFilterInAB; 167 QString mFilterInAB;
163 QString mFilterOutAB; 168 QString mFilterOutAB;
164 static QDateTime mRequestedSyncEvent; 169 static QDateTime mRequestedSyncEvent;
165 170
166 signals: 171 signals:
167 void save(); 172 void save();
168 void request_file(); 173 void request_file();
169 void getFile( bool ); 174 void getFile( bool );
170 175
171 public slots: 176 public slots:
172 void slotSyncMenu( int ); 177 void slotSyncMenu( int );
173 void slotClearMenu( int action ); 178 void slotClearMenu( int action );
174 void deleteCommandSocket(KCommandSocket*s, int state); 179 void deleteCommandSocket(KCommandSocket*s, int state);
175 void readFileFromSocket(); 180 void readFileFromSocket();
176 void fillSyncMenu(); 181 void fillSyncMenu();
177 182
178 private: 183 private:
179 void syncPi(); 184 void syncPi();
180 KServerSocket * mServerSocket; 185 KServerSocket * mServerSocket;
181 KPimPrefs* mPrefs; 186 KPimPrefs* mPrefs;
182 QString mDefFileName; 187 QString mDefFileName;
183 QString mCurrentSyncDevice; 188 QString mCurrentSyncDevice;
184 QString mCurrentSyncName; 189 QString mCurrentSyncName;
185 void quickSyncLocalFile(); 190 void quickSyncLocalFile();
186 bool syncWithFile( QString fn , bool quick ); 191 bool syncWithFile( QString fn , bool quick );
187 void syncLocalFile(); 192 void syncLocalFile();
188 void syncPhone(); 193 void syncPhone();
189 void syncSharp(); 194 void syncSharp();
190 void syncKDE(); 195 void syncKDE();
191 bool syncExternalApplication(QString); 196 bool syncExternalApplication(QString);
192 int mCurrentSyncProfile ; 197 int mCurrentSyncProfile ;
193 void syncRemote( KSyncProfile* prof, bool ask = true); 198 void syncRemote( KSyncProfile* prof, bool ask = true);
194 bool edit_sync_options(); 199 bool edit_sync_options();
195 bool edit_pisync_options(); 200 bool edit_pisync_options();
196 int ringSync(); 201 int ringSync();
197 QString getPassword( ); 202 QString getPassword( );
198 bool mPisyncFinished; 203 bool mPisyncFinished;
199 bool mBlockSaveFlag; 204 bool mBlockSaveFlag;
200 QWidget* mParent; 205 QWidget* mParent;
201 KSyncInterface* mImplementation; 206 KSyncInterface* mImplementation;
202 TargetApp mTargetApp; 207 TargetApp mTargetApp;
203 QPopupMenu* mSyncMenu; 208 QPopupMenu* mSyncMenu;
204 QProgressBar* bar; 209 QProgressBar* bar;
205 bool mSyncWithDesktop; 210 bool mSyncWithDesktop;
206 211
207private slots: 212private slots:
213 void displayErrorPort();
208 void confSync(); 214 void confSync();
209 215
210 216
211}; 217};
212 218
213 219
214class KSyncInterface 220class KSyncInterface
215{ 221{
216 public : 222 public :
217 virtual void removeSyncInfo( QString syncProfile) = 0; 223 virtual void removeSyncInfo( QString syncProfile) = 0;
218 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; 224 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
219 virtual bool syncExternal(KSyncManager* manager, QString resource) 225 virtual bool syncExternal(KSyncManager* manager, QString resource)
220 { 226 {
221 // empty implementation, because some syncable applications do not 227 // empty implementation, because some syncable applications do not
222 // have an external(sharpdtm) syncmode, like pwmanager. 228 // have an external(sharpdtm) syncmode, like pwmanager.
223 return false; 229 return false;
224 } 230 }
225 231
226 232
227}; 233};
228 234
229 235
230#endif 236#endif