summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-02 14:07:31 (UTC)
committer zautrix <zautrix>2005-04-02 14:07:31 (UTC)
commitb0d17f8f2ef9b09b7d8b8aa0f6cc34f400f8fddd (patch) (unidiff)
tree942bcf89b35cf165e9147c1e4a5efa817c48007f
parent997e7660a81baa2b8aeb1b66a3cc3ebe54e00ebe (diff)
downloadkdepimpi-b0d17f8f2ef9b09b7d8b8aa0f6cc34f400f8fddd.zip
kdepimpi-b0d17f8f2ef9b09b7d8b8aa0f6cc34f400f8fddd.tar.gz
kdepimpi-b0d17f8f2ef9b09b7d8b8aa0f6cc34f400f8fddd.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt10
-rw-r--r--korganizer/koeventviewer.cpp14
-rw-r--r--korganizer/kolistview.cpp14
-rw-r--r--korganizer/kotodoview.cpp26
-rw-r--r--libkcal/alarm.cpp24
-rw-r--r--libkcal/alarm.h1
-rw-r--r--libkcal/kincidenceformatter.cpp14
7 files changed, 83 insertions, 20 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index fbab7dd..6b739ba 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1343 +1,1343 @@
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{ "Actions","Aktionen" }, 47{ "Actions","Aktionen" },
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{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" }, 93{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" },
94{ "Clone Item","Klone Eintrag" }, 94{ "Clone Item","Klone Eintrag" },
95{ "&Close","S&chließen" }, 95{ "&Close","S&chließen" },
96{ "Close","Schließen" }, 96{ "Close","Schließen" },
97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
98{ "Colors","Farben" }, 98{ "Colors","Farben" },
99{ "completed","erledigt" }, 99{ "completed","erledigt" },
100{ "completed on %1","erledigt am %1" }, 100{ "completed on %1","erledigt am %1" },
101{ "Complete","Erledigt" }, 101{ "Complete","Erledigt" },
102{ "Confidential","Vertraulich" }, 102{ "Confidential","Vertraulich" },
103{ "Configure...","Einstellungen..." }, 103{ "Configure...","Einstellungen..." },
104{ "Confirm &deletes","Löschvogang bestätigen" }, 104{ "Confirm &deletes","Löschvogang bestätigen" },
105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
106{ "Counter-event Viewer","Terminzähler Ansicht" }, 106{ "Counter-event Viewer","Terminzähler Ansicht" },
107{ "Daily ending hour:","Feierabend:" }, 107{ "Daily ending hour:","Feierabend:" },
108{ "Daily starting hour:","Anfangszeit:" }, 108{ "Daily starting hour:","Anfangszeit:" },
109{ "Daily","Täglich" }, 109{ "Daily","Täglich" },
110{ "Date Format","Datums Format" }, 110{ "Date Format","Datums Format" },
111{ "Date Format:","Datums Format:" }, 111{ "Date Format:","Datums Format:" },
112{ "DateNavigator:(nr)","Datums Navigator" }, 112{ "DateNavigator:(nr)","Datums Navigator" },
113{ "Dates: ","Datum: " }, 113{ "Dates: ","Datum: " },
114{ "Date && Time","Datum && Zeit" }, 114{ "Date && Time","Datum && Zeit" },
115{ "Day begins at:","Der Tag beginnt um:" }, 115{ "Day begins at:","Der Tag beginnt um:" },
116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
117{ "Days in What's Next:","Tage in What's Next:" }, 117{ "Days in What's Next:","Tage in What's Next:" },
118{ "day(s)","Tag(e)" }, 118{ "day(s)","Tag(e)" },
119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
120{ "day","Tag" }, 120{ "day","Tag" },
121{ "Dec","Dez" }, 121{ "Dec","Dez" },
122{ "December","Dezember" }, 122{ "December","Dezember" },
123{ "Default alarm time:","Standard Alarmzeit:" }, 123{ "Default alarm time:","Standard Alarmzeit:" },
124{ "Default appointment time:","Standard Termin Startzeit:" }, 124{ "Default appointment time:","Standard Termin Startzeit:" },
125{ "Default event color:","Standard Terminfarbe:" }, 125{ "Default event color:","Standard Terminfarbe:" },
126{ "Default","Standard" }, 126{ "Default","Standard" },
127{ "Def. duration of new app.:","Standard Termin Länge:" }, 127{ "Def. duration of new app.:","Standard Termin Länge:" },
128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" }, 128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
129{ "Delete All","Lösche alles" }, 129{ "Delete All","Lösche alles" },
130{ "Delete all selected","Lösche alle Selektierten" }, 130{ "Delete all selected","Lösche alle Selektierten" },
131{ "Delete Current","Aktuellen löschen" }, 131{ "Delete Current","Aktuellen löschen" },
132{ "Delete Event...","Lösche Termin..." }, 132{ "Delete Event...","Lösche Termin..." },
133{ "Delete Event","Lösche Termin" }, 133{ "Delete Event","Lösche Termin" },
134{ "&Delete","Löschen" }, 134{ "&Delete","Löschen" },
135{ "Delete...","Löschen..." }, 135{ "Delete...","Löschen..." },
136{ "Delete","Löschen" }, 136{ "Delete","Löschen" },
137{ "Delete Todo...","Lösche Todo..." }, 137{ "Delete Todo...","Lösche Todo..." },
138{ "Delete To-Do","Lösche Todo" }, 138{ "Delete To-Do","Lösche Todo" },
139{ "Deleting item %d ...","Lösche Eintrag %d..." }, 139{ "Deleting item %d ...","Lösche Eintrag %d..." },
140{ "Descriptions","Beschreibungen" }, 140{ "Descriptions","Beschreibungen" },
141{ "Deselect all","Deselektiere Alle" }, 141{ "Deselect all","Deselektiere Alle" },
142{ "Details","Details" }, 142{ "Details","Details" },
143{ "Dinner","Abendessen" }, 143{ "Dinner","Abendessen" },
144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
145{ "Due Date","Fällig am" }, 145{ "Due Date","Fällig am" },
146{ "Due: ","Fällig: "}, 146{ "Due: ","Fällig: "},
147{ "Due Time","Fällig um" }, 147{ "Due Time","Fällig um" },
148{ "Due:","Fällig:"}, 148{ "Due:","Fällig:"},
149{ "Duration: ","Dauer: " }, 149{ "Duration: ","Dauer: " },
150{ "Edit...","Bearbeite..." }, 150{ "Edit...","Bearbeite..." },
151{ "Edit","Bearbeite" }, 151{ "Edit","Bearbeite" },
152{ "Edit Event...","Bearbeite Termin..." }, 152{ "Edit Event...","Bearbeite Termin..." },
153{ "Edit Event","Bearbeite Termin" }, 153{ "Edit Event","Bearbeite Termin" },
154{ "Edit exceptions","Bearbeite Ausnahmen" }, 154{ "Edit exceptions","Bearbeite Ausnahmen" },
155{ "EditorBox:","Editor Fenster:" }, 155{ "EditorBox:","Editor Fenster:" },
156{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 156{ "Edit Recurrence Range","Bearbeite Wiederholung" },
157{ "Edit Todo...","Berabeite Todo..." }, 157{ "Edit Todo...","Berabeite Todo..." },
158{ "Edit To-Do","Todo bearbeiten" }, 158{ "Edit To-Do","Todo bearbeiten" },
159{ "E&mail address:","E&mail Adresse:" }, 159{ "E&mail address:","E&mail Adresse:" },
160{ "(EmptyEmail)","(KeineEmail)" }, 160{ "(EmptyEmail)","(KeineEmail)" },
161{ "(EmptyName)","(KeinName)" }, 161{ "(EmptyName)","(KeinName)" },
162{ "Enable Recurrence","Wiederholender Termin" }, 162{ "Enable Recurrence","Wiederholender Termin" },
163{ "End after","Endet nach"}, 163{ "End after","Endet nach"},
164{ "End by:","Endet am"}, 164{ "End by:","Endet am"},
165{ "End Date","End Datum" }, 165{ "End Date","End Datum" },
166{ "End:","Ende:" }, 166{ "End:","Ende:" },
167{ "End Time","End Zeit" }, 167{ "End Time","End Zeit" },
168{ "English","Englisch" }, 168{ "English","Englisch" },
169{ "Event","Termin" }, 169{ "Event","Termin" },
170{ "Event list","Termin Liste" }, 170{ "Event list","Termin Liste" },
171{ "Events","Termine" }, 171{ "Events","Termine" },
172{ "Event Viewer:","Termin Übersicht:" }, 172{ "Event Viewer:","Termin Übersicht:" },
173{ "every","jede" }, 173{ "every","jede" },
174{ "Exceptions...","Ausnahmen..." }, 174{ "Exceptions...","Ausnahmen..." },
175{ "Exceptions","Ausnahmen" }, 175{ "Exceptions","Ausnahmen" },
176{ "Exclude holidays","Ohne freie Tage" }, 176{ "Exclude holidays","Ohne freie Tage" },
177{ "Exclude Saturdays","Ohne Samstage" }, 177{ "Exclude Saturdays","Ohne Samstage" },
178{ "Feb","Feb" }, 178{ "Feb","Feb" },
179{ "February","Februar" }, 179{ "February","Februar" },
180{ "&Find","Suche!" }, 180{ "&Find","Suche!" },
181{ "Fonts","Schriftart" }, 181{ "Fonts","Schriftart" },
182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
184{ "Free","Frei" }, 184{ "Free","Frei" },
185{ "Friday","Freitag" }, 185{ "Friday","Freitag" },
186{ "Fri","Fr" }, 186{ "Fri","Fr" },
187{ "From:","Vom:" }, 187{ "From:","Vom:" },
188{ "Full &name:","Vor- und &Nachname:" }, 188{ "Full &name:","Vor- und &Nachname:" },
189{ "General","Allgemein" }, 189{ "General","Allgemein" },
190{ "German","Deutsch" }, 190{ "German","Deutsch" },
191{ "Gifts","Geschenke" }, 191{ "Gifts","Geschenke" },
192{ "Go to Today","Heute anzeigen" }, 192{ "Go to Today","Heute anzeigen" },
193{ "Help","Hilfe" }, 193{ "Help","Hilfe" },
194{ "Hide Dates","Daten ausblenden" }, 194{ "Hide Dates","Daten ausblenden" },
195{ "Highlight color:","Markierungen:" }, 195{ "Highlight color:","Markierungen:" },
196{ "Holiday color:","Freie Tage:" }, 196{ "Holiday color:","Freie Tage:" },
197{ "hour(s)","Stunde(n)" }, 197{ "hour(s)","Stunde(n)" },
198{ "In %1 days: ","In %1 Tagen: " }, 198{ "In %1 days: ","In %1 Tagen: " },
199{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 199{ "Incomplete Todo:","Unerledigte Aufgaben:" },
200{ "Information","Information" }, 200{ "Information","Information" },
201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
202{ "Jan","Jan" }, 202{ "Jan","Jan" },
203{ "January","Januar" }, 203{ "January","Januar" },
204{ "JournalView:","Journal Ansicht:" }, 204{ "JournalView:","Journal Ansicht:" },
205{ "Journals","Journale" }, 205{ "Journals","Journale" },
206{ "Jul","Jul" }, 206{ "Jul","Jul" },
207{ "July","Juli" }, 207{ "July","Juli" },
208{ "Jump to date","Springe zum Datum" }, 208{ "Jump to date","Springe zum Datum" },
209{ "June","Juni" }, 209{ "June","Juni" },
210{ "Jun","Jun" }, 210{ "Jun","Jun" },
211{ "Key Bindings...","Tastenzuordnung..." }, 211{ "Key Bindings...","Tastenzuordnung..." },
212{ "Kids","Kinder" }, 212{ "Kids","Kinder" },
213{ "Known Problems...","Bekannte Probleme..." }, 213{ "Known Problems...","Bekannte Probleme..." },
214{ "KO/Pi Find ","KO/Pi Suchdialog " }, 214{ "KO/Pi Find ","KO/Pi Suchdialog " },
215{ "KO/Pi Find: ","KO/Pi Suchen: " }, 215{ "KO/Pi Find: ","KO/Pi Suchen: " },
216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
217{ "Language:(needs restart)","Sprache (Neustart!)" }, 217{ "Language:(needs restart)","Sprache (Neustart!)" },
218{ "Language:","Sprache" }, 218{ "Language:","Sprache" },
219{ "Large","Etwas mehr" }, 219{ "Large","Etwas mehr" },
220{ "List View:","Listenansicht:" }, 220{ "List View:","Listenansicht:" },
221{ "List View","Listenansicht" }, 221{ "List View","Listenansicht" },
222{ "Load/Save","Laden/Speichern" }, 222{ "Load/Save","Laden/Speichern" },
223{ "Load Template","Lade Vorlage" }, 223{ "Load Template","Lade Vorlage" },
224{ "Locale","Localisation" }, 224{ "Locale","Localisation" },
225{ "Local temp file:","Lokale temp. Datei:" }, 225{ "Local temp file:","Lokale temp. Datei:" },
226{ "Location: ","Ort: " }, 226{ "Location: ","Ort: " },
227{ "Location:","Ort:" }, 227{ "Location:","Ort:" },
228{ "Mail client","Mail Programm" }, 228{ "Mail client","Mail Programm" },
229{ "Mail Client","Mail Programm" }, 229{ "Mail Client","Mail Programm" },
230{ "March","März" }, 230{ "March","März" },
231{ "Mar","Mär" }, 231{ "Mar","Mär" },
232{ "May","Mai" }, 232{ "May","Mai" },
233{ "M. Bains line:","M. Bains Linie:" }, 233{ "M. Bains line:","M. Bains Linie:" },
234{ "Medium","Medium" }, 234{ "Medium","Medium" },
235{ "Method","Methode" }, 235{ "Method","Methode" },
236{ "minute(s)","Minute(n)" }, 236{ "minute(s)","Minute(n)" },
237{ "Monday","Montag" }, 237{ "Monday","Montag" },
238{ "Mon","Mo" }, 238{ "Mon","Mo" },
239{ "Monthly","Monatlich" }, 239{ "Monthly","Monatlich" },
240{ "Month not long enough","Monat ist nicht lang genug" }, 240{ "Month not long enough","Monat ist nicht lang genug" },
241{ "month(s)","Monat(e)" }, 241{ "month(s)","Monat(e)" },
242{ "Month view:","Monatsansicht:" }, 242{ "Month view:","Monatsansicht:" },
243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" }, 244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" },
245{ "Move &Down","Nach unten verschieben" }, 245{ "Move &Down","Nach unten verschieben" },
246{ "Move &Up","Nach oben verschieben" }, 246{ "Move &Up","Nach oben verschieben" },
247{ "Name:","Name:" }, 247{ "Name:","Name:" },
248{ "Name","Name" }, 248{ "Name","Name" },
249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
250{ "%n Days","%n Tage" }, 250{ "%n Days","%n Tage" },
251{ "Never","Nie" }, 251{ "Never","Nie" },
252{ "New event...","Neuer Termin..." }, 252{ "New event...","Neuer Termin..." },
253{ "New event","Neuer Termin" }, 253{ "New event","Neuer Termin" },
254{ "New Event...","Neuer Termin..." }, 254{ "New Event...","Neuer Termin..." },
255{ "New Events/Todos should","Neue Termine/Todos sollten" }, 255{ "New Events/Todos should","Neue Termine/Todos sollten" },
256{ "&New","&Neu" }, 256{ "&New","&Neu" },
257{ "New","Neu", }, 257{ "New","Neu", },
258{ "New Sub-Todo...","Neues Sub-Todo..." }, 258{ "New Sub-Todo...","Neues Sub-Todo..." },
259{ "New Todo...","Neues Todo..." }, 259{ "New Todo...","Neues Todo..." },
260{ "Next Alarm: ","Nächster Alarm: ", }, 260{ "Next Alarm: ","Nächster Alarm: ", },
261{ "&Next Day","&Nächster Tag", }, 261{ "&Next Day","&Nächster Tag", },
262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
263{ "Next month","Nächster Monat" }, 263{ "Next month","Nächster Monat" },
264{ "&Next Week","&Nächste Woche" }, 264{ "&Next Week","&Nächste Woche" },
265{ "Next year","Nächstes Jahr" }, 265{ "Next year","Nächstes Jahr" },
266{ "Next Year","Nächstes Jahr" }, 266{ "Next Year","Nächstes Jahr" },
267{ "%n h","%n Std" }, 267{ "%n h","%n Std" },
268{ "No ending date","Kein End-Datum", }, 268{ "No ending date","Kein End-Datum", },
269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
270{ "No event selected.","Kein Termin selektiert" }, 270{ "No event selected.","Kein Termin selektiert" },
271{ "No","Nein" }, 271{ "No","Nein" },
272{ "No program set","Kein Programm ausgewählt", }, 272{ "No program set","Kein Programm ausgewählt", },
273{ "Normal","Normal" }, 273{ "Normal","Normal" },
274{ "[No selection]","Keine Selektion", }, 274{ "[No selection]","Keine Selektion", },
275{ "No sound set","Kein Sound ausgewählt", }, 275{ "No sound set","Kein Sound ausgewählt", },
276{ "no time ","keine Zeit ", }, 276{ "no time ","keine Zeit ", },
277{ "no time","keine Zeit", }, 277{ "no time","keine Zeit", },
278{ "No Time","Keine Zeit" }, 278{ "No Time","Keine Zeit" },
279{ "November","November" }, 279{ "November","November" },
280{ "Nov","Nov", }, 280{ "Nov","Nov", },
281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
282{ "occurrence(s)","Vorkommen" }, 282{ "occurrence(s)","Vorkommen" },
283{ "October","Oktober" }, 283{ "October","Oktober" },
284{ "Oct","Okt", }, 284{ "Oct","Okt", },
285{ "O-due!","Ü-fällig! " }, 285{ "O-due!","Ü-fällig! " },
286{ "&OK","&OK" }, 286{ "&OK","&OK" },
287{ "Ok+Show!","Ok+Anzeigen" }, 287{ "Ok+Show!","Ok+Anzeigen" },
288{ "Organizer: %1","Organisator %1" }, 288{ "Organizer: %1","Organisator %1" },
289{ "Organizer","Organisator" }, 289{ "Organizer","Organisator" },
290{ "Owner: ","Besitzer: " }, 290{ "Owner: ","Besitzer: " },
291{ "Owner:","Besitzer:" }, 291{ "Owner:","Besitzer:" },
292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
295{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." }, 295{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." },
296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
297{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." }, 297{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." },
298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
299{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." }, 299{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." },
300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
301{ "&Previous Day","Vorheriger Tag" }, 301{ "&Previous Day","Vorheriger Tag" },
302{ "Previous month","Vorheriger Monat" }, 302{ "Previous month","Vorheriger Monat" },
303{ "Previous Month","Vorheriger Monat" }, 303{ "Previous Month","Vorheriger Monat" },
304{ "&Previous Week","Vorherige Woche" }, 304{ "&Previous Week","Vorherige Woche" },
305{ "Previous year","Vorheriges Jahr" }, 305{ "Previous year","Vorheriges Jahr" },
306{ "Previous Year","Vorheriges Jahr" }, 306{ "Previous Year","Vorheriges Jahr" },
307{ "Printing","Drucken" }, 307{ "Printing","Drucken" },
308{ "Priority:","Priorität:" }, 308{ "Priority:","Priorität:" },
309{ "Private","Privat" }, 309{ "Private","Privat" },
310{ "Proceed","Weiter" }, 310{ "Proceed","Weiter" },
311{ "Public","Öffentlich" }, 311{ "Public","Öffentlich" },
312{ "Purge","Entferne" }, 312{ "Purge","Entferne" },
313{ "Purge Completed","Entferne erledigte ToDos" }, 313{ "Purge Completed","Entferne erledigte ToDos" },
314{ "Purge To-Dos","Todos bereinigen" }, 314{ "Purge To-Dos","Todos bereinigen" },
315{ "read-only","schreibgeschützt" }, 315{ "read-only","schreibgeschützt" },
316{ "Recur every","Wiederh. alle" }, 316{ "Recur every","Wiederh. alle" },
317{ "Recur in the month of","Wiederh. im Monat" }, 317{ "Recur in the month of","Wiederh. im Monat" },
318{ "Recur on the","Wiederh. am" }, 318{ "Recur on the","Wiederh. am" },
319{ "Recur on this day","Wiederh. am diesen Tag" }, 319{ "Recur on this day","Wiederh. am diesen Tag" },
320{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 320{ "Recurrence Range...","Wiederholungs Zeitraum..." },
321{ "Recurrence Range","Wiederholungs Zeitraum" }, 321{ "Recurrence Range","Wiederholungs Zeitraum" },
322{ "Recurrence Rule","Wiederholungs Regel" }, 322{ "Recurrence Rule","Wiederholungs Regel" },
323{ "Recurrence","Wiederholung" }, 323{ "Recurrence","Wiederholung" },
324{ "Recurs","Wiederholung" }, 324{ "Recurs","Wiederholung" },
325{"&Reject","Abweisen"}, 325{"&Reject","Abweisen"},
326{ "Reminder:","Alarm:" }, 326{ "Reminder:","Alarm:" },
327{ "Rem.:","Alarm:" }, 327{ "Rem.:","Alarm:" },
328{ "Rem.","Alarm:" }, 328{ "Rem.","Alarm:" },
329{ "Remote file:","Remote Datei:"}, 329{ "Remote file:","Remote Datei:"},
330{ "Remote IP:","Remote (ferne) IP:" }, 330{ "Remote IP:","Remote (ferne) IP:" },
331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
332{ "Remote user:","Remote Benutzer"}, 332{ "Remote user:","Remote Benutzer"},
333{ "&Remove","Entfe&rnen" }, 333{ "&Remove","Entfe&rnen" },
334{ "Remove","Entfernen" }, 334{ "Remove","Entfernen" },
335{ "Request response","Bemerkung anfordern" }, 335{ "Request response","Bemerkung anfordern" },
336{ "Role:","Rolle:" }, 336{ "Role:","Rolle:" },
337{ "Role","Rolle" }, 337{ "Role","Rolle" },
338{ "Sat","Sa" }, 338{ "Sat","Sa" },
339{ "Saturday","Samstag" }, 339{ "Saturday","Samstag" },
340{ "Search for:","Suche nach:" }, 340{ "Search for:","Suche nach:" },
341{ "Search In","Suche in" }, 341{ "Search In","Suche in" },
342{ "Search...","Suche..." }, 342{ "Search...","Suche..." },
343{ "Search","Suche" }, 343{ "Search","Suche" },
344{ "Select Addresses","Wähle Adressen" }, 344{ "Select Addresses","Wähle Adressen" },
345{ "Select all","Selektiere Alle" }, 345{ "Select all","Selektiere Alle" },
346{ "Select a month","Wähle Monat" }, 346{ "Select a month","Wähle Monat" },
347{ "Select a week","Wähle Woche" }, 347{ "Select a week","Wähle Woche" },
348{ "Select a year","Wähle Jahr" }, 348{ "Select a year","Wähle Jahr" },
349{ "Send directly","Sende direkt" }, 349{ "Send directly","Sende direkt" },
350{ "&Send Messages","&Sende Nachrichten", }, 350{ "&Send Messages","&Sende Nachrichten", },
351{ "Sep","Sep" }, 351{ "Sep","Sep" },
352{ "September","September" }, 352{ "September","September" },
353{ "Shopping","Einkaufen" }, 353{ "Shopping","Einkaufen" },
354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" }, 354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" },
355{ "Show Dates","Zeige Daten" }, 355{ "Show Dates","Zeige Daten" },
356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
357{ "Show Event...","Zeige Termin..." }, 357{ "Show Event...","Zeige Termin..." },
358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
361{ "Show time as:","Zeige Zeit als" }, 361{ "Show time as:","Zeige Zeit als" },
362{ "Show Todo...","Zeige To-Do" }, 362{ "Show Todo...","Zeige To-Do" },
363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"}, 363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"},
364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"}, 364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"},
365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
366{ "&Show","Zeige" }, 366{ "&Show","Zeige" },
367{ "Show...","Zeige..." }, 367{ "Show...","Zeige..." },
368{ "Show","Zeige" }, 368{ "Show","Zeige" },
369{ "Small","Klein" }, 369{ "Small","Klein" },
370{ "Sorry","Entschuldigung" }, 370{ "Sorry","Entschuldigung" },
371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
372{ "Start:","Start:" }, 372{ "Start:","Start:" },
373{ "Start Date","Start Datum" }, 373{ "Start Date","Start Datum" },
374{ "Start date: %1","Start Datum: %1" }, 374{ "Start date: %1","Start Datum: %1" },
375{ "Start Time","Start Zeit" }, 375{ "Start Time","Start Zeit" },
376{ "Status:","Status:" }, 376{ "Status:","Status:" },
377{ "Status","Status:" }, 377{ "Status","Status:" },
378{ "Summaries","Titel" }, 378{ "Summaries","Titel" },
379{ "Summary:","Titel:" }, 379{ "Summary:","Titel:" },
380{ "Summary","Titel" }, 380{ "Summary","Titel" },
381{ "Sunday","Sonntag" }, 381{ "Sunday","Sonntag" },
382{ "Sun","So" }, 382{ "Sun","So" },
383{ "Sync preferences:","Sync Einstellungen" }, 383{ "Sync preferences:","Sync Einstellungen" },
384{ "Sync Prefs","Sync Einstellungen" }, 384{ "Sync Prefs","Sync Einstellungen" },
385{ "Syncronize","Daten abgleich" }, 385{ "Syncronize","Daten abgleich" },
386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" }, 389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" },
390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
391{ "Template...","Vorlage..." }, 391{ "Template...","Vorlage..." },
392{ "This day","Dieser Tag" }, 392{ "This day","Dieser Tag" },
393{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 393{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
396{ "Thu","Do" }, 396{ "Thu","Do" },
397{ "Thursday","Donnerstag" }, 397{ "Thursday","Donnerstag" },
398{ "Time associated","Mit Zeit" }, 398{ "Time associated","Mit Zeit" },
399{ "Time bar:","Uhrzeit Zeile:" }, 399{ "Time bar:","Uhrzeit Zeile:" },
400{ "Time && Date","Zeit und Datum" }, 400{ "Time && Date","Zeit und Datum" },
401{ "Time Format","Zeit Format" }, 401{ "Time Format","Zeit Format" },
402{ "Time Format(nr):","Zeit Format(Neustart!)" }, 402{ "Time Format(nr):","Zeit Format(Neustart!)" },
403{ "Date Labels:","Datumsleiste:" }, 403{ "Date Labels:","Datumsleiste:" },
404{ "Time: ","Zeit: " }, 404{ "Time: ","Zeit: " },
405{ "Timezone:","Zeitzone:" }, 405{ "Timezone:","Zeitzone:" },
406{ "To: ","Bis: " }, 406{ "To: ","Bis: " },
407{ "To:","Bis:" }, 407{ "To:","Bis:" },
408{ "Today: ","Heute: " }, 408{ "Today: ","Heute: " },
409{ "Todo due today color:","Heute fällige To-Do's" }, 409{ "Todo due today color:","Heute fällige To-Do's" },
410{ "To-do items:","To-Do items:" }, 410{ "To-do items:","To-Do items:" },
411{ "Todo overdue color:","Überfällige To-Do's" }, 411{ "Todo overdue color:","Überfällige To-Do's" },
412{ "Todo","Todo" }, 412{ "Todo","Todo" },
413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" }, 413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" },
414{ "ToDoView:","Todo Ansicht:" }, 414{ "ToDoView:","Todo Ansicht:" },
415{ "Toggle Alarm","Wechsle Alarm" }, 415{ "Toggle Alarm","Wechsle Alarm" },
416{ "Toggle Allday","Umschalten Ganztag" }, 416{ "Toggle Allday","Umschalten Ganztag" },
417{ "Tomorrow: ","Morgen: " }, 417{ "Tomorrow: ","Morgen: " },
418{ "Tue","Di" }, 418{ "Tue","Di" },
419{ "Tuesday","Dienstag" }, 419{ "Tuesday","Dienstag" },
420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
422{ "Unknown","Unbekannt" }, 422{ "Unknown","Unbekannt" },
423{ "Up","Hinauf" }, 423{ "Up","Hinauf" },
424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
425{ "User defined","Benutzerdefiniert" }, 425{ "User defined","Benutzerdefiniert" },
426{ "User long date:","Format langes Datum:" }, 426{ "User long date:","Format langes Datum:" },
427{ "User short date:","Forma kurzes Datum:" }, 427{ "User short date:","Forma kurzes Datum:" },
428{ "View","Ansicht" }, 428{ "View","Ansicht" },
429{ "View Fonts","Schriftarten Ansichten" }, 429{ "View Fonts","Schriftarten Ansichten" },
430{ "Views","Ansichten" }, 430{ "Views","Ansichten" },
431{ "Wed","Mi" }, 431{ "Wed","Mi" },
432{ "Wednesday","Mittwoch" }, 432{ "Wednesday","Mittwoch" },
433{ "Week %1","Woche %1" }, 433{ "Week %1","Woche %1" },
434{ "Weekly","Wöchentlich" }, 434{ "Weekly","Wöchentlich" },
435{ "Week starts on Sunday","Woche beginnt Sonntags" }, 435{ "Week starts on Sunday","Woche beginnt Sonntags" },
436{ "What's Next View:","What's Next Anz." }, 436{ "What's Next View:","What's Next Anz." },
437{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 437{ "What's next ?","Was kommt als nächstes?(What's Next)" },
438{ "Working Hours","Tägliche Arbeitszeit" }, 438{ "Working Hours","Tägliche Arbeitszeit" },
439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
441{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 441{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
442{ "Yearly","Jährlich" }, 442{ "Yearly","Jährlich" },
443{ "year(s)","Jahr(e)" }, 443{ "year(s)","Jahr(e)" },
444{ "Yes","Ja" }, 444{ "Yes","Ja" },
445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
447{ "week(s) on:","Woche(n) am: " }, 447{ "week(s) on:","Woche(n) am: " },
448{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 448{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
452{ "Daylight start:","Sommerzeit Beginn:" }, 452{ "Daylight start:","Sommerzeit Beginn:" },
453{ "Daylight end:","Sommerzeit Ende:" }, 453{ "Daylight end:","Sommerzeit Ende:" },
454{ "Time Zone","Zeitzone" }, 454{ "Time Zone","Zeitzone" },
455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
457{ "minutely","minütlich" }, 457{ "minutely","minütlich" },
458{ "hourly","stündlich" }, 458{ "hourly","stündlich" },
459{ "daily","täglich" }, 459{ "daily","täglich" },
460{ "weekly","wöchentlich" }, 460{ "weekly","wöchentlich" },
461{ "monthly","monatlich" }, 461{ "monthly","monatlich" },
462{ "day-monthly","tag-monatlich" }, 462{ "day-monthly","tag-monatlich" },
463{ "month-yearly","monat-jährlich" }, 463{ "month-yearly","monat-jährlich" },
464{ "day-yearly","tag-jährlich" }, 464{ "day-yearly","tag-jährlich" },
465{ "position-yearly","pos-jährlich" }, 465{ "position-yearly","pos-jährlich" },
466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
472{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 472{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
476{ "ViewChange","Ansichtswechsel" }, 476{ "ViewChange","Ansichtswechsel" },
477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
479{ "File","Datei" }, 479{ "File","Datei" },
480{ "Clone...","Dupliziere.." }, 480{ "Clone...","Dupliziere.." },
481{ "Move...","Bewege..." }, 481{ "Move...","Bewege..." },
482{ "Beam...","Sende via IR..." }, 482{ "Beam...","Sende via IR..." },
483{ "&Clone...","Dupliziere.." }, 483{ "&Clone...","Dupliziere.." },
484{ "&Move...","Bewege..." }, 484{ "&Move...","Bewege..." },
485{ "&Beam...","Sende via IR..." }, 485{ "&Beam...","Sende via IR..." },
486{ "Show Completed","Zeige erledigte Todos" }, 486{ "Show Completed","Zeige erledigte Todos" },
487{ "Show Quick Todo","Zeige Quick Todo" }, 487{ "Show Quick Todo","Zeige Quick Todo" },
488{ "Unparent Todo","Un-sub Todo" }, 488{ "Unparent Todo","Un-sub Todo" },
489{ "Save selected to file...","Speichere Selektierte..." }, 489{ "Save selected to file...","Speichere Selektierte..." },
490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
491{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 491{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
492{ "Beam selected via IR","Sende Selekt. via IR..." }, 492{ "Beam selected via IR","Sende Selekt. via IR..." },
493{ "Search","Suchen" }, 493{ "Search","Suchen" },
494{ "Date Picker","Datum auswählen" }, 494{ "Date Picker","Datum auswählen" },
495{ "Day View","Tagesansicht" }, 495{ "Day View","Tagesansicht" },
496{ "Work Week","Arbeitswoche" }, 496{ "Work Week","Arbeitswoche" },
497{ "Week","Wochenansicht" }, 497{ "Week","Wochenansicht" },
498{ "Month","Monatsansicht" }, 498{ "Month","Monatsansicht" },
499{ "Todo View","Todo Liste" }, 499{ "Todo View","Todo Liste" },
500{ "Journal","Journal Ansicht" }, 500{ "Journal","Journal Ansicht" },
501{ "Next days","Nächste Tage" }, 501{ "Next days","Nächste Tage" },
502{ "Print agenda selection...","Drucke Agendaselektion..." }, 502{ "Print agenda selection...","Drucke Agendaselektion..." },
503{ "Toggle DateNavigator","Navigator umschalten" }, 503{ "Toggle DateNavigator","Navigator umschalten" },
504{ "Toggle FilterView","Filteransicht umschalten" }, 504{ "Toggle FilterView","Filteransicht umschalten" },
505{ "Prev. month","Vorheriger Monat" }, 505{ "Prev. month","Vorheriger Monat" },
506{ "Go backward","Gehe zurück" }, 506{ "Go backward","Gehe zurück" },
507{ "Go forward","Gehe weiter" }, 507{ "Go forward","Gehe weiter" },
508{ "Synchronize","Synchronisieren" }, 508{ "Synchronize","Synchronisieren" },
509{ "AgendaSize","Agendagröße" }, 509{ "AgendaSize","Agendagröße" },
510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
511{ "Import last file","Importiere letzte Datei" }, 511{ "Import last file","Importiere letzte Datei" },
512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
513{ "Load Calendar Backup","Lade Kalender Backup" }, 513{ "Load Calendar Backup","Lade Kalender Backup" },
514{ "Save Calendar Backup","Speichere Kalender Backup" }, 514{ "Save Calendar Backup","Speichere Kalender Backup" },
515{ "Export VCalendar","Exportiere VCalendar" }, 515{ "Export VCalendar","Exportiere VCalendar" },
516{ "Manage new categories...","Verwalte neue Kategorien..." }, 516{ "Manage new categories...","Verwalte neue Kategorien..." },
517{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 517{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
519{ "Remote via ssh","Über Netzwerk via ssh" }, 519{ "Remote via ssh","Über Netzwerk via ssh" },
520{ "With local file","Mit lokaler Datei" }, 520{ "With local file","Mit lokaler Datei" },
521{ "With last file","Mit letzter Datei" }, 521{ "With last file","Mit letzter Datei" },
522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
524{ "Save filename","Speichern: Dateinamen wählen" }, 524{ "Save filename","Speichern: Dateinamen wählen" },
525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
526{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 526{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
527{ "Overwrite!","Überschreibe!" }, 527{ "Overwrite!","Überschreibe!" },
528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" }, 529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" },
530{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 530{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
532{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 532{ "Deleting item %d ...","Lösche Eintrag %d ..." },
533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
534{ "Size","Größe" }, 534{ "Size","Größe" },
535{ "Date","Datum" }, 535{ "Date","Datum" },
536{ "Mime Type","Datei Typ" }, 536{ "Mime Type","Datei Typ" },
537{ "All Files","Alle Dateien" }, 537{ "All Files","Alle Dateien" },
538{ "Files","Dateien" }, 538{ "Files","Dateien" },
539{ "Documents","DoKumente" }, 539{ "Documents","DoKumente" },
540{ "Select Categories","Selektiere Kategorien" }, 540{ "Select Categories","Selektiere Kategorien" },
541{ " &Deselect All "," Auswahl aufheben " }, 541{ " &Deselect All "," Auswahl aufheben " },
542{ "A&dd","Hinzu" }, 542{ "A&dd","Hinzu" },
543{ "&Modify","Ändern" }, 543{ "&Modify","Ändern" },
544{ "Edit Categories","Editiere Kategorien" }, 544{ "Edit Categories","Editiere Kategorien" },
545{ " &Edit Categories "," &Editiere Kategorien " }, 545{ " &Edit Categories "," &Editiere Kategorien " },
546{ "Beam Options","Beam Einstellungen" }, 546{ "Beam Options","Beam Einstellungen" },
547{ " With timezone "," Mit Zeitzone " }, 547{ " With timezone "," Mit Zeitzone " },
548{ " Local time ", " Lokale Zeit " }, 548{ " Local time ", " Lokale Zeit " },
549{ "Manage new Categories","Verwalte neue Kategorien" }, 549{ "Manage new Categories","Verwalte neue Kategorien" },
550{ "Add to category list","Füge zur Kategorieliste hinzu" }, 550{ "Add to category list","Füge zur Kategorieliste hinzu" },
551{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 551{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
554{ "File format","Datei Format" }, 554{ "File format","Datei Format" },
555{ "Time format","Zeit Format" }, 555{ "Time format","Zeit Format" },
556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" }, 556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" },
557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
559{ "h","Std" }, 559{ "h","Std" },
560{ "min","Min" }, 560{ "min","Min" },
561{ "hou","Std" }, 561{ "hou","Std" },
562{ "day","Tag" }, 562{ "day","Tag" },
563{ "French","Französich" }, 563{ "French","Französich" },
564{ "Time","Zeit" }, 564{ "Time","Zeit" },
565{ "Event Viewer","Termin Ansicht" }, 565{ "Event Viewer","Termin Ansicht" },
566{ "Cancel Sync","Sync Abbrechen" }, 566{ "Cancel Sync","Sync Abbrechen" },
567{ "Remote","Fern" }, 567{ "Remote","Fern" },
568{ "Local","Lokal" }, 568{ "Local","Lokal" },
569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
570{ "Local: ","Lokal: " }, 570{ "Local: ","Lokal: " },
571{ "Remote: ","Fern: " }, 571{ "Remote: ","Fern: " },
572{ "Last modified: ","Zuletzt geändert: " }, 572{ "Last modified: ","Zuletzt geändert: " },
573{ "Location: ","Ort: " }, 573{ "Location: ","Ort: " },
574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
583{ "( %1 min before )","( %1 min vorher )" }, 583{ "( %1 min before )","( %1 min vorher )" },
584{ "<b>Alarm on: ","<b>Alarm am: " }, 584{ "<b>Alarm on: ","<b>Alarm am: " },
585{ "<b>Details: </b>","<b>Details: </b>" }, 585{ "<b>Details: </b>","<b>Details: </b>" },
586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
588{ "Organizer","Organisator" }, 588{ "Organizer","Organisator" },
589{ "Save","Speichern" }, 589{ "Save","Speichern" },
590{ "Exit (+save)","Beenden (+ speichern)" }, 590{ "Exit (+save)","Beenden (+ speichern)" },
591{ "Home","Zuhause" }, 591{ "Home","Zuhause" },
592{ "Office","Büro" }, 592{ "Office","Büro" },
593{ "Libary","Bücherei" }, 593{ "Libary","Bücherei" },
594{ "Doctor","Arzt" }, 594{ "Doctor","Arzt" },
595{ "Beach","Strand" }, 595{ "Beach","Strand" },
596{ "Conference room","Konferenzraum" }, 596{ "Conference room","Konferenzraum" },
597{ "Drive Home","Heimfahrt" }, 597{ "Drive Home","Heimfahrt" },
598{ "Watch TV","Tv gucken" }, 598{ "Watch TV","Tv gucken" },
599{ "Phone call","Telefonanruf" }, 599{ "Phone call","Telefonanruf" },
600{ "Pay bill","Rechnung bezahlen" }, 600{ "Pay bill","Rechnung bezahlen" },
601{ "Read book","Buch lesen" }, 601{ "Read book","Buch lesen" },
602{ "Watering plants","Pflanzen giessen" }, 602{ "Watering plants","Pflanzen giessen" },
603{"Appointment","Verabredung" }, 603{"Appointment","Verabredung" },
604{"Birthday","Geburtstag" }, 604{"Birthday","Geburtstag" },
605{"Business","Geschäft" }, 605{"Business","Geschäft" },
606{"Business Travel","Geschäftsreise" }, 606{"Business Travel","Geschäftsreise" },
607{"Cinema","Kino" }, 607{"Cinema","Kino" },
608{"Customer","Kunde" }, 608{"Customer","Kunde" },
609{"Break","Pause" }, 609{"Break","Pause" },
610{"Breakfast","Frühstück" }, 610{"Breakfast","Frühstück" },
611{"Competition","Wettkampf" }, 611{"Competition","Wettkampf" },
612{"Dinner","Abendessen" }, 612{"Dinner","Abendessen" },
613{"Education","Erziehung" }, 613{"Education","Erziehung" },
614{"Family","Familie" }, 614{"Family","Familie" },
615{"Favorites","Favoriten" }, 615{"Favorites","Favoriten" },
616{"Festival","Festival" }, 616{"Festival","Festival" },
617{"Fishing","Angeln" }, 617{"Fishing","Angeln" },
618{"Flight","Flug" }, 618{"Flight","Flug" },
619{"Gifts","Geschenk" }, 619{"Gifts","Geschenk" },
620{"Holiday","Feiertag" }, 620{"Holiday","Feiertag" },
621{"Holiday Cards","Ansichtskarten" }, 621{"Holiday Cards","Ansichtskarten" },
622{"Hot Contacts","Heisse Kontakte" }, 622{"Hot Contacts","Heisse Kontakte" },
623{"Hiking","Wandern" }, 623{"Hiking","Wandern" },
624{"Hunting","Jagen" }, 624{"Hunting","Jagen" },
625{"Key Customer","Wichtiger Kunde" }, 625{"Key Customer","Wichtiger Kunde" },
626{"Kids","Kinder" }, 626{"Kids","Kinder" },
627{"Lunch","Mittagessen" }, 627{"Lunch","Mittagessen" },
628{"Meeting","Treffen" }, 628{"Meeting","Treffen" },
629{"Miscellaneous","Verschiedenes" }, 629{"Miscellaneous","Verschiedenes" },
630{"Partner","Partner" }, 630{"Partner","Partner" },
631{"Party","Partie" }, 631{"Party","Partie" },
632{"Personal","Privat" }, 632{"Personal","Privat" },
633{"Personal Travel","Privatreise"}, 633{"Personal Travel","Privatreise"},
634{"PHB","PHB" }, 634{"PHB","PHB" },
635{"Phone Calls","Telefonanruf" }, 635{"Phone Calls","Telefonanruf" },
636{"Projects","Projekt" }, 636{"Projects","Projekt" },
637{"Recurring","Wiederholend" }, 637{"Recurring","Wiederholend" },
638{"School","Schule" }, 638{"School","Schule" },
639{"Shopping","Einkaufen" }, 639{"Shopping","Einkaufen" },
640{"Speach","Rede" }, 640{"Speach","Rede" },
641{"Special Occasion","Spez.Gelegenheit" }, 641{"Special Occasion","Spez.Gelegenheit" },
642{"Sports","Sport" }, 642{"Sports","Sport" },
643{"Talk","Vortrag" }, 643{"Talk","Vortrag" },
644{"Travel","Reise" }, 644{"Travel","Reise" },
645{"TV","TV" }, 645{"TV","TV" },
646{"Germany","Deutschland" }, 646{"Germany","Deutschland" },
647{"Sweden","Schweden" }, 647{"Sweden","Schweden" },
648{"Forest","Wald" }, 648{"Forest","Wald" },
649{ "Desert","Wüste" }, 649{ "Desert","Wüste" },
650{ "Kitchen","Küche" }, 650{ "Kitchen","Küche" },
651{ "Lake","See" }, 651{ "Lake","See" },
652{"University","Universität"}, 652{"University","Universität"},
653{"Vacation","Urlaub" }, 653{"Vacation","Urlaub" },
654{"VIP","VIP" }, 654{"VIP","VIP" },
655{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 655{ "Import Sharp Calendar","Importiere Sharp Kalender" },
656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
658{ "Cancelled","Gecancelt" }, 658{ "Cancelled","Gecancelt" },
659{ "Multiple sync","Mehrfach Sync" }, 659{ "Multiple sync","Mehrfach Sync" },
660{ "Local file","Lokale Datei" }, 660{ "Local file","Lokale Datei" },
661{ "Last file","Letzte Datei" }, 661{ "Last file","Letzte Datei" },
662{ "Keys + Colors...","Tasten + Farben..." }, 662{ "Keys + Colors...","Tasten + Farben..." },
663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
665{ "Choose...","Wähle..." }, 665{ "Choose...","Wähle..." },
666{ "Use colors for application:","Setze Farben für Programm:" }, 666{ "Use colors for application:","Setze Farben für Programm:" },
667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." }, 669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." },
670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." }, 670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." },
671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
672{ "Show in every cell ","Zeige in jeder Zelle " }, 672{ "Show in every cell ","Zeige in jeder Zelle " },
673{ "short month","kurzen Monat" }, 673{ "short month","kurzen Monat" },
674{ "icons","Icons" }, 674{ "icons","Icons" },
675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
676{ "Categorie colors are applied to text","Kategorie Farben färben Text" }, 676{ "Categorie colors are applied to text","Kategorie Farben färben Text" },
677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
678{ "Day color odd months","Tagesfarbe ungerade Monate" }, 678{ "Day color odd months","Tagesfarbe ungerade Monate" },
679{ "Day color even months","Tagesfarbe gerade Monate" }, 679{ "Day color even months","Tagesfarbe gerade Monate" },
680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
683{ "Colors are applied to text","Farben werden auf Text angewendet" }, 683{ "Colors are applied to text","Farben werden auf Text angewendet" },
684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
686{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 686{ "Play beeps count:","Anzahl der Alarmpiepse: " },
687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
688{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 688{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
689{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 689{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
691{ "New profile","Neues Profil" }, 691{ "New profile","Neues Profil" },
692{ "Clone profile","Klone Profil" }, 692{ "Clone profile","Klone Profil" },
693{ "Delete profile","Lösche Profil" }, 693{ "Delete profile","Lösche Profil" },
694{ "Profile:","Profil:" }, 694{ "Profile:","Profil:" },
695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
699{ "Write back file","Schreibe Datei zurück" }, 699{ "Write back file","Schreibe Datei zurück" },
700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
702{ "Local device name:","Name dieses Gerätes:" }, 702{ "Local device name:","Name dieses Gerätes:" },
703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
704{ "Sync preferences","Synchronisations Einstellungen" }, 704{ "Sync preferences","Synchronisations Einstellungen" },
705{ "Profile kind","Profil Art" }, 705{ "Profile kind","Profil Art" },
706{ "Local file","Lokale Datei" }, 706{ "Local file","Lokale Datei" },
707{ "Local file:","Lokale Datei:" }, 707{ "Local file:","Lokale Datei:" },
708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
709{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 709{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
712{ "Device","Gerät:" }, 712{ "Device","Gerät:" },
713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
715{ "Synchronization successful","Synchronisation erfolgreich" }, 715{ "Synchronization successful","Synchronisation erfolgreich" },
716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
719{ "Enter password","Passwort eingeben" }, 719{ "Enter password","Passwort eingeben" },
720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
725{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 725{ "Edit Calendar Filters","Editiere Kalendar Filter" },
726{ "Enter filter name:","Neuer Filter Name:" }, 726{ "Enter filter name:","Neuer Filter Name:" },
727{ "Add Filter","Filter hinzufügen" }, 727{ "Add Filter","Filter hinzufügen" },
728{ "Question","Frage" }, 728{ "Question","Frage" },
729{ "Filter position: ","Filter Position: " }, 729{ "Filter position: ","Filter Position: " },
730{ "Month View","Monatsansicht" }, 730{ "Month View","Monatsansicht" },
731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
732{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 732{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
735{ "Access: ","Zugriff: " }, 735{ "Access: ","Zugriff: " },
736{ "Needs Action","Aktion notwendig" }, 736{ "Needs Action","Aktion notwendig" },
737{ "Accepted","Akzeptiert" }, 737{ "Accepted","Akzeptiert" },
738{ "Declined","Abgelehnt" }, 738{ "Declined","Abgelehnt" },
739{ "Tentative","Vorläufig" }, 739{ "Tentative","Vorläufig" },
740{ "Delegated","Beauftragt" }, 740{ "Delegated","Beauftragt" },
741{ "Completed","Vollständig" }, 741{ "Completed","Vollständig" },
742{ "In Process","In Bearbeitung" }, 742{ "In Process","In Bearbeitung" },
743{ "Participant","Teilnehmer" }, 743{ "Participant","Teilnehmer" },
744{ "Optional Participant","Möglicher Teilnehmer" }, 744{ "Optional Participant","Möglicher Teilnehmer" },
745{ "Observer","Beobachter" }, 745{ "Observer","Beobachter" },
746{ "Chair","Vorsitzender" }, 746{ "Chair","Vorsitzender" },
747{ "Not supported \non desktop!\n","" }, 747{ "Not supported \non desktop!\n","" },
748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die 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) " }, 748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die 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) " },
749{ "Date range: ","Datums Zeitspanne: " }, 749{ "Date range: ","Datums Zeitspanne: " },
750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
752{ "Add / remove events","Add./entferne Termine" }, 752{ "Add / remove events","Add./entferne Termine" },
753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
756{ "Overwrite","Überschreiben" }, 756{ "Overwrite","Überschreiben" },
757{ "Sync+save","Syncen+speichern" }, 757{ "Sync+save","Syncen+speichern" },
758{ "Default","Standard" }, 758{ "Default","Standard" },
759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
760{ " %d items?"," %d Einträge?" }, 760{ " %d items?"," %d Einträge?" },
761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
763{ "Current","Aktuelle" }, 763{ "Current","Aktuelle" },
764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
765{ "All","Alle" }, 765{ "All","Alle" },
766{ "Data Loss Warning","Datenverlust Warnung" }, 766{ "Data Loss Warning","Datenverlust Warnung" },
767{ "Proceed","Weitermachen" }, 767{ "Proceed","Weitermachen" },
768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
769{ "Filter disabled ","Filter abgeschaltet" }, 769{ "Filter disabled ","Filter abgeschaltet" },
770{ "Filter selected: ","Gewählter Filter: " }, 770{ "Filter selected: ","Gewählter Filter: " },
771{ "Toggle Cancel","Gecancelt ändern" }, 771{ "Toggle Cancel","Gecancelt ändern" },
772{ "&Toggle Cancel","Gecancel&t ändern" }, 772{ "&Toggle Cancel","Gecancel&t ändern" },
773{ "Configure Toolbar","Konfiguriere Toolbar" }, 773{ "Configure Toolbar","Konfiguriere Toolbar" },
774{ "Stretched TB","Gedehnte TB" }, 774{ "Stretched TB","Gedehnte TB" },
775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
779{ "Imported file successfully","Datei erfolgreich importiert" }, 779{ "Imported file successfully","Datei erfolgreich importiert" },
780{ "Error importing file","Fehler beim Importieren der Datei" }, 780{ "Error importing file","Fehler beim Importieren der Datei" },
781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
783{ "Overwrite!","Überschreiben!" }, 783{ "Overwrite!","Überschreiben!" },
784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
785{ "Load backup filename","Lade Backup Dateiname" }, 785{ "Load backup filename","Lade Backup Dateiname" },
786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
788{ "Save backup filename","Speichere Backup Dateiname" }, 788{ "Save backup filename","Speichere Backup Dateiname" },
789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
791{ "Details of attendee","Teilnehmerdetails" }, 791{ "Details of attendee","Teilnehmerdetails" },
792{ "Work phone:\n","Telefon Arbeit:\n" }, 792{ "Work phone:\n","Telefon Arbeit:\n" },
793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
794{ "Home phone:\n","Telefon privat:\n" }, 794{ "Home phone:\n","Telefon privat:\n" },
795{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 795{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
796{ "Email:\n","Email:\n" }, 796{ "Email:\n","Email:\n" },
797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
798{ "Audio Al.: ","Audio Al.: " }, 798{ "Audio Al.: ","Audio Al.: " },
799{ "Proc.Al.: ","Proz.Al.: " }, 799{ "Proc.Al.: ","Proz.Al.: " },
800{ "No sound set","Kein Sound definiert" }, 800{ "No sound set","Kein Sound definiert" },
801{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 801{ "*.wav|Wav Files","*.wav|Wav Dateien" },
802{ "No program set","Kein Programm definiert" }, 802{ "No program set","Kein Programm definiert" },
803{ "Running '%1'","Ausführen '%1'" }, 803{ "Running '%1'","Ausführen '%1'" },
804{ "Playing '%1'","Abspielen '%1'" }, 804{ "Playing '%1'","Abspielen '%1'" },
805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
807{ "Load!","Laden!" }, 807{ "Load!","Laden!" },
808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
812{ "Features + hints...","Eigenschaften + Tipps..." }, 812{ "Features + hints...","Eigenschaften + Tipps..." },
813{ "User translation...","Benutzer Übersetzung..." }, 813{ "User translation...","Benutzer Übersetzung..." },
814{ "Sync HowTo...","Synchronisation HowTo..." }, 814{ "Sync HowTo...","Synchronisation HowTo..." },
815{ "Print calendar...","Drucke Kalender..." }, 815{ "Print calendar...","Drucke Kalender..." },
816{ "Anniversary","Jahrestag" }, 816{ "Anniversary","Jahrestag" },
817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
821{ "<b>Access: </b>","<b>Zugriff: </b>" }, 821{ "<b>Access: </b>","<b>Zugriff: </b>" },
822{ "(%1 min before)","(%1 min vorher)" }, 822{ "(%1 min before)","(%1 min vorher)" },
823{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 823{ "<b>Categories: </b>","<b>Kategorien: </b>" },
824{ "Save Journal/Description...","Speichere Journal/Details..." }, 824{ "Save Journal/Description...","Speichere Journal/Details..." },
825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
826{ "Continue","Weitermachen" }, 826{ "Continue","Weitermachen" },
827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
828{ "Attendee:","Teilnehmer:" }, 828{ "Attendee:","Teilnehmer:" },
829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
830{ "On day ","Am Tag " }, 830{ "On day ","Am Tag " },
831{ "%1 of ","%1 des Monats" }, 831{ "%1 of ","%1 des Monats" },
832{ "%1 of the year","%1 des Jahres" }, 832{ "%1 of the year","%1 des Jahres" },
833{ "Anonymous","Anonymo" }, 833{ "Anonymous","Anonymo" },
834{ "nobody@nowhere","niemand@nirgendwo" }, 834{ "nobody@nowhere","niemand@nirgendwo" },
835{ "calendar.html","calendar.html" }, 835{ "calendar.html","calendar.html" },
836{ " Local Time"," Locale Zeit" }, 836{ " Local Time"," Locale Zeit" },
837{ "Unknown Name","Unbekannter Name" }, 837{ "Unknown Name","Unbekannter Name" },
838{ "unknown@nowhere","unbekannt@nirgendwo" }, 838{ "unknown@nowhere","unbekannt@nirgendwo" },
839{ "Beam via IR!","Beam via IR!" }, 839{ "Beam via IR!","Beam via IR!" },
840{ "Next Month","Nächster Monat" }, 840{ "Next Month","Nächster Monat" },
841{ "Prio","Prio" }, 841{ "Prio","Prio" },
842{ "Reparent Todo","Mache Sub-Todo" }, 842{ "Reparent Todo","Mache Sub-Todo" },
843{ "tomorrow","morgen" }, 843{ "tomorrow","morgen" },
844{ "today","heute" }, 844{ "today","heute" },
845{ "yesterday","gestern" }, 845{ "yesterday","gestern" },
846{ "Ok","Ok" }, 846{ "Ok","Ok" },
847{ "Ok+Agenda","Ok+Agenda" }, 847{ "Ok+Agenda","Ok+Agenda" },
848{ "Email","Email" }, 848{ "Email","Email" },
849{ "RSVP","RSVP" }, 849{ "RSVP","RSVP" },
850{ "Email:","Email:" }, 850{ "Email:","Email:" },
851{ "Appointment Time ","Termin Zeit " }, 851{ "Appointment Time ","Termin Zeit " },
852{ "2","2" }, 852{ "2","2" },
853{ "3","3" }, 853{ "3","3" },
854{ "4","4" }, 854{ "4","4" },
855{ " 0 %"," 0 %" }, 855{ " 0 %"," 0 %" },
856{ " 20 %"," 20 %" }, 856{ " 20 %"," 20 %" },
857{ " 40 %"," 40 %" }, 857{ " 40 %"," 40 %" },
858{ " 60 %"," 60 %" }, 858{ " 60 %"," 60 %" },
859{ " 80 %"," 80 %" }, 859{ " 80 %"," 80 %" },
860{ "100 %","100 %" }, 860{ "100 %","100 %" },
861{ "Filter","Filter" }, 861{ "Filter","Filter" },
862{ "Configure","Konfiguriere" }, 862{ "Configure","Konfiguriere" },
863{ "What's Next","What's Next" }, 863{ "What's Next","What's Next" },
864{ "Complete calendar...","Kompletten Kalender..." }, 864{ "Complete calendar...","Kompletten Kalender..." },
865{ "Filtered calendar...","Gefilterten Kalender..." }, 865{ "Filtered calendar...","Gefilterten Kalender..." },
866{ "Export to phone","Exportiere zum Handy" }, 866{ "Export to phone","Exportiere zum Handy" },
867{ "Beam receive enabled","Beam Empfang an" }, 867{ "Beam receive enabled","Beam Empfang an" },
868{ "What's new?","Was ist neu?" }, 868{ "What's new?","Was ist neu?" },
869{ "FAQ...","FAQ..." }, 869{ "FAQ...","FAQ..." },
870{ "Licence...","Licence..." }, 870{ "Licence...","Licence..." },
871{ "What's This?","What's This?" }, 871{ "What's This?","What's This?" },
872{ "&Edit...","&Editiere..." }, 872{ "&Edit...","&Editiere..." },
873{ "Oktober","Oktober" }, 873{ "Oktober","Oktober" },
874{ "Title","Titel" }, 874{ "Title","Titel" },
875{ "%1 %","%1 %" }, 875{ "%1 %","%1 %" },
876{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 876{ "Enable Pi-Sync","Schalte Pi-Sync an" },
877{ "Import!","Importiere!" }, 877{ "Import!","Importiere!" },
878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
879{ "Export to phone options","Export ans Handy Optionen" }, 879{ "Export to phone options","Export ans Handy Optionen" },
880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
881{ "I/O device: ","I/O device: " }, 881{ "I/O device: ","I/O device: " },
882{ "Connection: ","Connection: " }, 882{ "Connection: ","Connection: " },
883{ "Model(opt.): ","Model(opt.): " }, 883{ "Model(opt.): ","Model(opt.): " },
884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
887{ "Export to mobile phone!","Exportiere auf das Handy!" }, 887{ "Export to mobile phone!","Exportiere auf das Handy!" },
888{ "Export complete calendar","Exportiere kompletten Kalender" }, 888{ "Export complete calendar","Exportiere kompletten Kalender" },
889{ "Writing to phone...","Sende Daten ans Handy..." }, 889{ "Writing to phone...","Sende Daten ans Handy..." },
890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
891{ "Retry","Nochmal versuchen" }, 891{ "Retry","Nochmal versuchen" },
892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
895{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 895{ "Export filtered calendar","Exportiere gefilterten Kalender" },
896{ "Preferences","Vorlieben" }, 896{ "Preferences","Vorlieben" },
897{ "Global","Global" }, 897{ "Global","Global" },
898{ "Phone","Phone" }, 898{ "Phone","Phone" },
899{ "SMS","SMS" }, 899{ "SMS","SMS" },
900{ "Fax","Fax" }, 900{ "Fax","Fax" },
901{ "Pager","Pager" }, 901{ "Pager","Pager" },
902{ "SIP","SIP" }, 902{ "SIP","SIP" },
903{ "Italian","Italienisch" }, 903{ "Italian","Italienisch" },
904{ "24:00","24:00" }, 904{ "24:00","24:00" },
905{ "12:00am","12:00am" }, 905{ "12:00am","12:00am" },
906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
912{ "Used Mail Client","Benutzter Mail Client" }, 912{ "Used Mail Client","Benutzter Mail Client" },
913{ "Channel:","Channel:" }, 913{ "Channel:","Channel:" },
914{ "Message:","Message:" }, 914{ "Message:","Message:" },
915{ "Parameters:","Parameter:" }, 915{ "Parameters:","Parameter:" },
916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
917{ "extra Message:","extra Message:" }, 917{ "extra Message:","extra Message:" },
918{ "extra Parameters:","extra Parameter:" }, 918{ "extra Parameters:","extra Parameter:" },
919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
920{ "External Apps.","Externe Appl." }, 920{ "External Apps.","Externe Appl." },
921{ "24 hours","24 Std." }, 921{ "24 hours","24 Std." },
922{ "3 hours","3 Std." }, 922{ "3 hours","3 Std." },
923{ "1 hour","1 Std." }, 923{ "1 hour","1 Std." },
924{ "15 minutes","15 Min." }, 924{ "15 minutes","15 Min." },
925{ "5 minutes","5 Min." }, 925{ "5 minutes","5 Min." },
926{ "1 minute","1 Min." }, 926{ "1 minute","1 Min." },
927{ "23","23" }, 927{ "23","23" },
928{ "Mon 15","Mon 15" }, 928{ "Mon 15","Mon 15" },
929{ "Configure KO","Konfiguriere KO" }, 929{ "Configure KO","Konfiguriere KO" },
930{ "Event text","Termin Text" }, 930{ "Event text","Termin Text" },
931{ "ToDo","ToDo" }, 931{ "ToDo","ToDo" },
932{ "Today","Heute" }, 932{ "Today","Heute" },
933{ "What's Next View","What's Next Ansicht" }, 933{ "What's Next View","What's Next Ansicht" },
934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, 934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" },
935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, 935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" },
936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
937{ "Alarm","Alarm" }, 937{ "Alarm","Alarm" },
938{ "Used %1 Client","Benutzter %1 Client" }, 938{ "Used %1 Client","Benutzter %1 Client" },
939{ "No email client installed","Kein Email Klient installiert" }, 939{ "No email client installed","Kein Email Klient installiert" },
940{ "Userdefined email client","Benutzerdef. Email Klient" }, 940{ "Userdefined email client","Benutzerdef. Email Klient" },
941{ "OM/Pi email client","OM/Pi Email Klient" }, 941{ "OM/Pi email client","OM/Pi Email Klient" },
942{ "Include in multiple ","Beziehe in multiple " }, 942{ "Include in multiple ","Beziehe in multiple " },
943{ "calendar ","Kalender " }, 943{ "calendar ","Kalender " },
944{ "addressbook ","Adressbuch " }, 944{ "addressbook ","Adressbuch " },
945{ "pwmanager","PWmanager" }, 945{ "pwmanager","PWmanager" },
946{ " sync"," Sync ein" }, 946{ " sync"," Sync ein" },
947{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 947{ "Write back synced data","Schreibe gesyncte Daten zurück" },
948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
953{ "Help...","Hilfe..." }, 953{ "Help...","Hilfe..." },
954{ "Local file Cal:","Lokale Datei Kal:" }, 954{ "Local file Cal:","Lokale Datei Kal:" },
955{ "Local file ABook:","Lokale Datei ABuch:" }, 955{ "Local file ABook:","Lokale Datei ABuch:" },
956{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 956{ "Local file PWMgr:","Lokale Datei PWMgr:" },
957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
958{ "Calendar:","Kalender:" }, 958{ "Calendar:","Kalender:" },
959{ "AddressBook:","AdressBuch:" }, 959{ "AddressBook:","AdressBuch:" },
960{ "PWManager:","PWManager:" }, 960{ "PWManager:","PWManager:" },
961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
962{ "ssh/scp","ssh/scp" }, 962{ "ssh/scp","ssh/scp" },
963{ "ftp","ftp" }, 963{ "ftp","ftp" },
964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
970{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 970{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
973{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 973{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
978{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 978{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
980{ "KDE-Pim Sync","KDE-Pim Sync" }, 980{ "KDE-Pim Sync","KDE-Pim Sync" },
981{ "Multiple profiles","Multi-Sync Profile" }, 981{ "Multiple profiles","Multi-Sync Profile" },
982{ "Device: ","Gerät: " }, 982{ "Device: ","Gerät: " },
983{ "Multiple sync started.","Multi-Sync gestartet." }, 983{ "Multiple sync started.","Multi-Sync gestartet." },
984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
985{ "Turn filter on","Schalte Filter an" }, 985{ "Turn filter on","Schalte Filter an" },
986{ "Turn filter off","Schalte Filter aus" }, 986{ "Turn filter off","Schalte Filter aus" },
987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+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" }, 1024{ "<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" },
1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, 1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" },
1028{ "<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" }, 1028{ "<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" },
1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1030{ "<p><b>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 " }, 1030{ "<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 " },
1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, 1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" },
1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, 1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" },
1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1046{ "KO/Pi FAQ","KO/Pi FAQ" }, 1046{ "KO/Pi FAQ","KO/Pi FAQ" },
1047{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1047{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1048{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1048{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1049{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1049{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1050{ "From: ","Von: " }, 1050{ "From: ","Von: " },
1051{ "Remove sync info","Entferne Sync Info" }, 1051{ "Remove sync info","Entferne Sync Info" },
1052{ "For all profiles","Für alle Profile" }, 1052{ "For all profiles","Für alle Profile" },
1053{ "Hide not Running","Verstecke nicht Laufende" }, 1053{ "Hide not Running","Verstecke nicht Laufende" },
1054{ "ME","ME" }, 1054{ "ME","ME" },
1055{ "Toolbar","Toolbar" }, 1055{ "Toolbar","Toolbar" },
1056{ "Undo Delete...","Löschen rückgängig machen..." }, 1056{ "Undo Delete...","Löschen rückgängig machen..." },
1057{ "Undo Delete","Löschen rückgängig machen" }, 1057{ "Undo Delete","Löschen rückgängig machen" },
1058{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1058{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1059{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1059{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1060{ "Januar","Januar" }, 1060{ "Januar","Januar" },
1061{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1061{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1062{ "No Filter","Kein Filter" }, 1062{ "No Filter","Kein Filter" },
1063{ "Multiple Sync options","Multi Sync Optionen" }, 1063{ "Multiple Sync options","Multi Sync Optionen" },
1064{ "Sync algo options","Sync Ablauf Optionen" }, 1064{ "Sync algo options","Sync Ablauf Optionen" },
1065{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1065{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1066{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1066{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1067{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1067{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1068{ "Write back options","Optionen zum Zurückschreiben" }, 1068{ "Write back options","Optionen zum Zurückschreiben" },
1069{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1069{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1070{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1070{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1071{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1071{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1072{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1072{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1073{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1073{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1074{ "Time period","Zeitspanne" }, 1074{ "Time period","Zeitspanne" },
1075{ "From ","Von " }, 1075{ "From ","Von " },
1076{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1076{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1077{ " weeks in the future "," Wochen in der Zukunft " }, 1077{ " weeks in the future "," Wochen in der Zukunft " },
1078{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1078{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1079{ "Local temp file:","Lokale temp Datei:" }, 1079{ "Local temp file:","Lokale temp Datei:" },
1080{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1080{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1081{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1081{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1082{ "Language","Sprache" }, 1082{ "Language","Sprache" },
1083{ "Time Format","Zeit Format" }, 1083{ "Time Format","Zeit Format" },
1084{ "Time Zone","Zeit Zone" }, 1084{ "Time Zone","Zeit Zone" },
1085{ "%1 groups subscribed","%1 Guppen abboniert" }, 1085{ "%1 groups subscribed","%1 Guppen abboniert" },
1086{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1086{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1087{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1087{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1088{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1088{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1089{ "Save settings","Speichere Einstellungen" }, 1089{ "Save settings","Speichere Einstellungen" },
1090{ "Save standard","Speichere Standard" }, 1090{ "Save standard","Speichere Standard" },
1091{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1091{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1092{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1092{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1093{ "Data storage path","Daten Speicherpfad" }, 1093{ "Data storage path","Daten Speicherpfad" },
1094{ "Language","Sprache" }, 1094{ "Language","Sprache" },
1095{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1095{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1096{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1096{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1097{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1097{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1098{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1098{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1099{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1099{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1100{ "KO/Pi","KO/Pi" }, 1100{ "KO/Pi","KO/Pi" },
1101{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1101{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1102{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1102{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1103{ "Sound.Al.: ","Sound.Al.: " }, 1103{ "Sound.Al.: ","Sound.Al.: " },
1104{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1104{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1105{ "Restore","Wiederherstellen" }, 1105{ "Restore","Wiederherstellen" },
1106{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1106{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1107{ "% completed","% erledigt" }, 1107{ "% completed","% erledigt" },
1108{ "%d item(s) found.","%d Item(s) gefunden." }, 1108{ "%d item(s) found.","%d Item(s) gefunden." },
1109{ "Set complete","Setze auf erledigt" }, 1109{ "Set complete","Setze auf erledigt" },
1110{ "(cancelled)","(gecancelt)" }, 1110{ "(cancelled)","(gecancelt)" },
1111{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1111{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1112{ " Local time "," Locale Zeit " }, 1112{ " Local time "," Locale Zeit " },
1113{ "Form2","Form2" }, 1113{ "Form2","Form2" },
1114{ "Filter enabled","Filter angeschaltet" }, 1114{ "Filter enabled","Filter angeschaltet" },
1115{ "Edit Filters","Ändere Filter" }, 1115{ "Edit Filters","Ändere Filter" },
1116{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1116{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1117{ "Agenda","Agenda" }, 1117{ "Agenda","Agenda" },
1118{ " ("," (" }, 1118{ " ("," (" },
1119{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1119{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1120{ "Print","Print" }, 1120{ "Print","Print" },
1121{ "&Setup Printer...","Drucker &Setup..." }, 1121{ "&Setup Printer...","Drucker &Setup..." },
1122{ "View Type","Zeige Typ" }, 1122{ "View Type","Zeige Typ" },
1123{ "Page &orientation:","Seiten Ausrichtung:" }, 1123{ "Page &orientation:","Seiten Ausrichtung:" },
1124{ "Use Default of Selected Style","Default des selektierten Stils" }, 1124{ "Use Default of Selected Style","Default des selektierten Stils" },
1125{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1125{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1126{ "Portrait","Portrait" }, 1126{ "Portrait","Portrait" },
1127{ "Landscape","Landschaft" }, 1127{ "Landscape","Landschaft" },
1128{ "Print day","Drucke Tag" }, 1128{ "Print day","Drucke Tag" },
1129{ "CalPrintDay_Base","CalPrintDay_Base" }, 1129{ "CalPrintDay_Base","CalPrintDay_Base" },
1130{ "Date && Time Range","Datum && Zeitspanne" }, 1130{ "Date && Time Range","Datum && Zeitspanne" },
1131{ "&End date:","&Enddatum:" }, 1131{ "&End date:","&Enddatum:" },
1132{ "&Start date:","&Startdatum:" }, 1132{ "&Start date:","&Startdatum:" },
1133{ "Start &time:","Startzeit:" }, 1133{ "Start &time:","Startzeit:" },
1134{ "End ti&me:","Endzeit:" }, 1134{ "End ti&me:","Endzeit:" },
1135{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1135{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1136{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1136{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1137{ "Alt+D","Alt+D" }, 1137{ "Alt+D","Alt+D" },
1138{ "&Use colors","Nutze Farben" }, 1138{ "&Use colors","Nutze Farben" },
1139{ "Alt+U","Alt+U" }, 1139{ "Alt+U","Alt+U" },
1140{ "Print week","Drucke Woche" }, 1140{ "Print week","Drucke Woche" },
1141{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1141{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1142{ "Use &colors","Nutze Farben" }, 1142{ "Use &colors","Nutze Farben" },
1143{ "Type of View","Typ der Ansicht" }, 1143{ "Type of View","Typ der Ansicht" },
1144{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1144{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1145{ "Alt+F","Alt+F" }, 1145{ "Alt+F","Alt+F" },
1146{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1146{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1147{ "Alt+T","Alt+T" }, 1147{ "Alt+T","Alt+T" },
1148{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1148{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1149{ "Print month","Drucke Monat" }, 1149{ "Print month","Drucke Monat" },
1150{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1150{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1151{ "&Start month:","&Startmonat:" }, 1151{ "&Start month:","&Startmonat:" },
1152{ "&End month:","&Endmonat:" }, 1152{ "&End month:","&Endmonat:" },
1153{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1153{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1154{ "Print todos","Drucke Todos" }, 1154{ "Print todos","Drucke Todos" },
1155{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1155{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1156{ "Include &description of the item","Inclusive Itembeschreibung" }, 1156{ "Include &description of the item","Inclusive Itembeschreibung" },
1157{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1157{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1158{ "Include &priority of the item","Inclusive Priorität des Items" }, 1158{ "Include &priority of the item","Inclusive Priorität des Items" },
1159{ "Items to Print","Zu druckende Items" }, 1159{ "Items to Print","Zu druckende Items" },
1160{ "&From:","Von:" }, 1160{ "&From:","Von:" },
1161{ "&To:","Bis:" }, 1161{ "&To:","Bis:" },
1162{ "Print &all todo items","Drucke alle Todo Items" }, 1162{ "Print &all todo items","Drucke alle Todo Items" },
1163{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1163{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1164{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1164{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1165{ "Todo List","Todo Liste" }, 1165{ "Todo List","Todo Liste" },
1166{ "&Title:","&Titel:" }, 1166{ "&Title:","&Titel:" },
1167{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1167{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1168{ "Todo list","Todo Liste" }, 1168{ "Todo list","Todo Liste" },
1169{ "&Print...","Drucke..." }, 1169{ "&Print...","Drucke..." },
1170{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1170{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1171{ "[Unconfigured]","[Unkonfiguriert]" }, 1171{ "[Unconfigured]","[Unkonfiguriert]" },
1172{ "OK","OK" }, 1172{ "OK","OK" },
1173{ "FilterEditor","FilterEditor" }, 1173{ "FilterEditor","FilterEditor" },
1174{ "Include","Inclusive" }, 1174{ "Include","Inclusive" },
1175{ "Exclude","Exclusive" }, 1175{ "Exclude","Exclusive" },
1176{ "Edit Selection...","Editiere Auswahl" }, 1176{ "Edit Selection...","Editiere Auswahl" },
1177{ "recurring events","wiederholende Termine" }, 1177{ "recurring events","wiederholende Termine" },
1178{ "recurr. events","wiederh.Termine" }, 1178{ "recurr. events","wiederh.Termine" },
1179{ "completed to-dos","erledigte Todos" }, 1179{ "completed to-dos","erledigte Todos" },
1180{ "events","Termine" }, 1180{ "events","Termine" },
1181{ "todos","Todos" }, 1181{ "todos","Todos" },
1182{ "journals","Journale" }, 1182{ "journals","Journale" },
1183{ "public","öffentl." }, 1183{ "public","öffentl." },
1184{ "private","privat" }, 1184{ "private","privat" },
1185{ "confidential","vertraul." }, 1185{ "confidential","vertraul." },
1186{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, 1186{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1187{ "Yesterday","Gestern" }, 1187{ "Yesterday","Gestern" },
1188{ "Day after tomorrow","Übermorgen" }, 1188{ "Day after tomorrow","Übermorgen" },
1189{ "Tomorrow","Morgen" }, 1189{ "Tomorrow","Morgen" },
1190{ "Day before yesterday","Vorgestern" }, 1190{ "Day before yesterday","Vorgestern" },
1191{ "Size %1","Größe %1" }, 1191{ "Size %1","Größe %1" },
1192{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1192{ "New Agendasize: %1","Neue Agendagröße: %1" },
1193{ " (%1 y.)"," (%1 J.)" }, 1193{ " (%1 y.)"," (%1 J.)" },
1194{ "Allday:","Ganztägig:" }, 1194{ "Allday:","Ganztägig:" },
1195{ "compl.todos","erled.Todos" }, 1195{ "compl.todos","erled.Todos" },
1196{ "Day view","Tagesansicht" }, 1196{ "Day view","Tagesansicht" },
1197{ "Next days","Nächste Tage" }, 1197{ "Next days","Nächste Tage" },
1198{ "Next week","Nächste Woche" }, 1198{ "Next week","Nächste Woche" },
1199{ "Next two weeks","Nächste zwei Wochen" }, 1199{ "Next two weeks","Nächste zwei Wochen" },
1200{ "This month","Dieser Monat" }, 1200{ "This month","Dieser Monat" },
1201{ "Journal view","Journal" }, 1201{ "Journal view","Journal" },
1202{ "Display all opened","Zeige alle geöffnet" }, 1202{ "Display all opened","Zeige alle geöffnet" },
1203{ "Display all closed","Zeige alle geschlossen" }, 1203{ "Display all closed","Zeige alle geschlossen" },
1204{ "Display all flat","Zeige alle flach" }, 1204{ "Display all flat","Zeige alle flach" },
1205{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1205{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1206{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1206{ "Default todo done color:","Standard Todo erledigt Farbe" },
1207{ "Select week %1-%2","Wähle Woche %1-%2" }, 1207{ "Select week %1-%2","Wähle Woche %1-%2" },
1208{ "Select Week","Wähle Woche" }, 1208{ "Select Week","Wähle Woche" },
1209{ "Set alarm for selected...","Setze Alarm für Selekt..." }, 1209{ "Set alarm for selected...","Setze Alarm für Selekt..." },
1210{ "Set Alarm!","Setze Alarm!" }, 1210{ "Set Alarm!","Setze Alarm!" },
1211{ "Canged alarm for %1 items","Alarm für %1 Items geändert" }, 1211{ "Canged alarm for %1 items","Alarm für %1 Items geändert" },
1212{ " and "," und " }, 1212{ " and "," und " },
1213{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1213{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1214{ "Mail to selected","Mail an Ausgewählte" }, 1214{ "Mail to selected","Mail an Ausgewählte" },
1215{ "Mail to all","Mail an Alle" }, 1215{ "Mail to all","Mail an Alle" },
1216{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1216{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1217{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1217{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1218{ " on"," am" }, 1218{ " on"," am" },
1219{ " completed on "," erledigt am " }, 1219{ " completed on "," erledigt am " },
1220{ "Save as Event template","Speichere als Vorlage" }, 1220{ "Save as Event template","Speichere als Vorlage" },
1221{ "Load Event template","Lade Termin Vorlage" }, 1221{ "Load Event template","Lade Termin Vorlage" },
1222{ "Save as Journal template","Speichere als Journal Vorlage" }, 1222{ "Save as Journal template","Speichere als Journal Vorlage" },
1223{ "Insert Journal template","Füge Journal Vorlage ein" }, 1223{ "Insert Journal template","Füge Journal Vorlage ein" },
1224{ "Sub todos:<br>","Unter Todos:<br>" }, 1224{ "Sub todos:<br>","Unter Todos:<br>" },
1225{ "Parent todo:<br>","Über Todo:<br>" }, 1225{ "Parent todo:<br>","Über Todo:<br>" },
1226{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1226{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1227{ " completed"," erledigt" }, 1227{ " completed"," erledigt" },
1228{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.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!" }, 1228{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.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!" },
1229{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1229{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1230{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1230{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1231{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1231{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1232{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 1232{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
1233{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1233{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1234{ "Error","Fehler" }, 1234{ "Error","Fehler" },
1235{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1235{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1236{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1236{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1237{ "Warning","Warnung" }, 1237{ "Warning","Warnung" },
1238{ "Select week number","Wähle Wochen Nummer" }, 1238{ "Select week number","Wähle Wochen Nummer" },
1239{ "Februar","Februar" }, 1239{ "Februar","Februar" },
1240{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1240{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1241{ "W","W" }, 1241{ "W","W" },
1242{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1242{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1243{ "T: %1","T: %1" }, 1243{ "T: %1","T: %1" },
1244{ "Start: ","Start: " }, 1244{ "Start: ","Start: " },
1245{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1245{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1246{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1246{ "Password for remote access:","Passwort für fernen Zugriff:" },
1247{ "Remote IP address:","Ferne IP Adresse:" }, 1247{ "Remote IP address:","Ferne IP Adresse:" },
1248{ "Remote port number:","Ferne Port Nummer:" }, 1248{ "Remote port number:","Ferne Port Nummer:" },
1249{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1249{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1250{ "Remote from: ","Fern von: " }, 1250{ "Remote from: ","Fern von: " },
1251{ "Local from: ","Lokal von: " }, 1251{ "Local from: ","Lokal von: " },
1252{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 1252{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
1253{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1253{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1254{ "Write back","Schreibe zurück" }, 1254{ "Write back","Schreibe zurück" },
1255{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1255{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1256{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1256{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1257{ "Received sync request","Sync Anfrage erhalten" }, 1257{ "Received sync request","Sync Anfrage erhalten" },
1258{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 1258{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
1259{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1259{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1260{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1260{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1261{ "Sending file...","Sende Datei..." }, 1261{ "Sending file...","Sende Datei..." },
1262{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1262{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1263{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1263{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1264{ "Received %1 bytes","%1 Bytes erhalten" }, 1264{ "Received %1 bytes","%1 Bytes erhalten" },
1265{ "Writing file to disk...","Speichere Datei..." }, 1265{ "Writing file to disk...","Speichere Datei..." },
1266{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1266{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1267{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1267{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1268{ "Synchronize!","Synchronisiere!" }, 1268{ "Synchronize!","Synchronisiere!" },
1269{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1269{ "High clock skew!","Großer Uhrzeitunterschied!" },
1270{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1270{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1271{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 1271{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
1272{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1272{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1273{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1273{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1274{ "List week view","Listenwochenansicht" }, 1274{ "List week view","Listenwochenansicht" },
1275{ "List week","Listenwochenansicht" }, 1275{ "List week","Listenwochenansicht" },
1276{ "Next Week","Nächste Woche" }, 1276{ "Next Week","Nächste Woche" },
1277{ "Previous Week","Vorherige Woche" }, 1277{ "Previous Week","Vorherige Woche" },
1278{ "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." }, 1278{ "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." },
1279{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1279{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1280{ "Details","Details" }, 1280{ "Details","Details" },
1281{ "Created time","Erstellt Zeit" }, 1281{ "Created time","Erstellt Zeit" },
1282{ "Last modified time","Geändert Zeit" }, 1282{ "Last modified time","Geändert Zeit" },
1283{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1283{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1284{ "View Options","Anzeige Optionen" }, 1284{ "View Options","Anzeige Optionen" },
1285{ "<b>Created: ","<b>Erstellt am: " }, 1285{ "<b>Created: ","<b>Erstellt am: " },
1286{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1286{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1287{ "Journal: ","Journal: " }, 1287{ "Journal: ","Journal: " },
1288{ "yearly","jährlich" }, 1288{ "yearly","jährlich" },
1289{ "(%1) ","%1-" }, 1289{ "(%1) ","%1-" },
1290{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1290{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1291{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1291{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1292{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1292{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1293{ "Summary/Loc.","Titel/Ort" }, 1293{ "Summary/Loc.","Titel/Ort" },
1294{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1294{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1295{ "Week Number","Wochennummer" }, 1295{ "Week Number","Wochennummer" },
1296{ "Import","Importiere" }, 1296{ "Import","Importiere" },
1297{ "Export","Exportiere" }, 1297{ "Export","Exportiere" },
1298{ "Beam","Beame" }, 1298{ "Beam","Beame" },
1299{ "Export selected","Exportiere Selektierte" }, 1299{ "Export selected","Exportiere Selektierte" },
1300{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1300{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1301{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1301{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1302{ "Journal/Details...","Journale/Details..." }, 1302{ "Journal/Details...","Journale/Details..." },
1303{ "Agenda View","Agenda Ansicht" }, 1303{ "Agenda View","Agenda Ansicht" },
1304{ "Show current time","Zeige aktuelle Zeit" }, 1304{ "Show current time","Zeige aktuelle Zeit" },
1305{ "Edit new item","Bearbeite neuen Eintrag" }, 1305{ "Edit new item","Bearbeite neuen Eintrag" },
1306{ "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" }, 1306{ "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" },
1307{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1307{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1308{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1308{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1309{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1309{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1310{ "%1 days\n","%1 Tagen\n" }, 1310{ "%1 days\n","%1 Tagen\n" },
1311{ "1 day\n","1 Tag\n" }, 1311{ "1 day\n","1 Tag\n" },
1312{ "%1 hours\n","%1 Stunden\n" }, 1312{ "%1 hours\n","%1 Stunden\n" },
1313{ "1 hour\n","1 Stunde\n" }, 1313{ "1 hour\n","1 Stunde\n" },
1314{ "%1 minutes\n","%1 Minuten\n" }, 1314{ "%1 minutes\n","%1 Minuten\n" },
1315{ "1 minute\n","1 Minute\n" }, 1315{ "1 minute\n","1 Minute\n" },
1316{ "Only one toolbar","Nur eine Toolbar" }, 1316{ "Only one toolbar","Nur eine Toolbar" },
1317{ "Print","Drucke" }, 1317{ "Print","Drucke" },
1318{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1318{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1319{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1319{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1320{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1320{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1321{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1321{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1322{ "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" }, 1322{ "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" },
1323{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1323{ "KO/Pi Printout","KO/Pi Ausdruck" },
1324{ "Print unscaled","Drucke unskaliert" }, 1324{ "Print unscaled","Drucke unskaliert" },
1325{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1325{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1326{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1326{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1327{ "Printout Mode","Druck Modus" }, 1327{ "Printout Mode","Druck Modus" },
1328{ "Filter menu icon","Filtermenu Icon" }, 1328{ "Filter menu icon","Filtermenu Icon" },
1329{ "<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" }, 1329{ "<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" },
1330{ "<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" }, 1330{ "<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" },
1331{ "%1d","%1t" },
1332{ "%1h","%1std" },
1333{ "%1min","%1min" },
1334{ "( %1 before )","( %1 vorher )" },
1331{ "","" }, 1335{ "","" },
1332{ "","" }, 1336{ "","" },
1333{ "","" }, 1337{ "","" },
1334{ "","" }, 1338{ "","" },
1335{ "","" }, 1339{ "","" },
1336{ "","" }, 1340{ "","" },
1337{ "","" }, 1341{ "","" },
1338{ "","" }, 1342{ "","" },
1339{ "","" }, 1343{ "","" } \ No newline at end of file
1340{ "","" },
1341{ "","" },
1342{ "","" },
1343{ "","" }, \ No newline at end of file
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index dbe0668..bdad248 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -1,761 +1,771 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qcstring.h> 20#include <qcstring.h>
21#include <qwhatsthis.h> 21#include <qwhatsthis.h>
22#include <qdialog.h> 22#include <qdialog.h>
23#include <qapplication.h> 23#include <qapplication.h>
24#include <qlabel.h> 24#include <qlabel.h>
25#include <qlayout.h> 25#include <qlayout.h>
26 26
27#include <klocale.h> 27#include <klocale.h>
28#include <kapplication.h> 28#include <kapplication.h>
29#include <libkcal/event.h> 29#include <libkcal/event.h>
30#include <libkcal/todo.h> 30#include <libkcal/todo.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kiconloader.h> 32#include <kiconloader.h>
33#include <krun.h> 33#include <krun.h>
34#include <kglobal.h> 34#include <kglobal.h>
35#include <kprocess.h> 35#include <kprocess.h>
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38#include <kabc/stdaddressbook.h> 38#include <kabc/stdaddressbook.h>
39 39
40#ifndef KORG_NODCOP 40#ifndef KORG_NODCOP
41#include <dcopclient.h> 41#include <dcopclient.h>
42#include "korganizer.h" 42#include "korganizer.h"
43#include "koprefs.h" 43#include "koprefs.h"
44#include "actionmanager.h" 44#include "actionmanager.h"
45#endif 45#endif
46 46
47#include "koeventviewer.h" 47#include "koeventviewer.h"
48//#ifndef KORG_NOKABC 48//#ifndef KORG_NOKABC
49//#include <kabc/stdaddressbook.h> 49//#include <kabc/stdaddressbook.h>
50//#define size count 50//#define size count
51//#endif 51//#endif
52 52
53#ifdef DESKTOP_VERSION 53#ifdef DESKTOP_VERSION
54#include <kabc/addresseedialog.h> 54#include <kabc/addresseedialog.h>
55#include <kabc/addresseeview.h> 55#include <kabc/addresseeview.h>
56#include <qprinter.h> 56#include <qprinter.h>
57#include <qpainter.h> 57#include <qpainter.h>
58#include <qpaintdevicemetrics.h> 58#include <qpaintdevicemetrics.h>
59#else //DESKTOP_VERSION 59#else //DESKTOP_VERSION
60#include <externalapphandler.h> 60#include <externalapphandler.h>
61#include <qtopia/qcopenvelope_qws.h> 61#include <qtopia/qcopenvelope_qws.h>
62#endif //DESKTOP_VERSION 62#endif //DESKTOP_VERSION
63 63
64KOEventViewer::KOEventViewer(QWidget *parent,const char *name) 64KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
65 : QTextBrowser(parent,name) 65 : QTextBrowser(parent,name)
66{ 66{
67 mSyncMode = false; 67 mSyncMode = false;
68 mColorMode = 0; 68 mColorMode = 0;
69} 69}
70 70
71KOEventViewer::~KOEventViewer() 71KOEventViewer::~KOEventViewer()
72{ 72{
73} 73}
74 74
75void KOEventViewer::printMe() 75void KOEventViewer::printMe()
76{ 76{
77#ifdef DESKTOP_VERSION 77#ifdef DESKTOP_VERSION
78 78
79 KOPrintPrefs pp ( this ); 79 KOPrintPrefs pp ( this );
80 if (!pp.exec() ) 80 if (!pp.exec() )
81 return; 81 return;
82 int scaleval = pp.printMode() ; 82 int scaleval = pp.printMode() ;
83 83
84 QPrinter printer; 84 QPrinter printer;
85 if (!printer.setup() ) 85 if (!printer.setup() )
86 return; 86 return;
87 QPainter p; 87 QPainter p;
88 p.begin ( &printer ); 88 p.begin ( &printer );
89 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); 89 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
90 float dx, dy; 90 float dx, dy;
91 int wid = (m.width() * 9)/10; 91 int wid = (m.width() * 9)/10;
92 dx = (float) wid/(float)contentsWidth (); 92 dx = (float) wid/(float)contentsWidth ();
93 dy = (float)(m.height()) / (float)contentsHeight (); 93 dy = (float)(m.height()) / (float)contentsHeight ();
94 float scale; 94 float scale;
95 // scale to fit the width or height of the paper 95 // scale to fit the width or height of the paper
96 if ( dx < dy ) 96 if ( dx < dy )
97 scale = dx; 97 scale = dx;
98 else 98 else
99 scale = dy; 99 scale = dy;
100 100
101 p.translate( m.width()/10,0 ); 101 p.translate( m.width()/10,0 );
102 qDebug("Scale: %f ", scale ); 102 qDebug("Scale: %f ", scale );
103 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { 103 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) {
104 qDebug("SCALE "); 104 qDebug("SCALE ");
105 p.scale( scale, scale ); 105 p.scale( scale, scale );
106 } 106 }
107 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); 107 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () );
108 p.end(); 108 p.end();
109#endif 109#endif
110 110
111} 111}
112void KOEventViewer::setSource(const QString& n) 112void KOEventViewer::setSource(const QString& n)
113{ 113{
114 114
115 if ( n.left(3) == "uid" ) 115 if ( n.left(3) == "uid" )
116#ifdef DESKTOP_VERSION 116#ifdef DESKTOP_VERSION
117 { 117 {
118 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 118 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
119 KABC::AddressBook::Iterator it; 119 KABC::AddressBook::Iterator it;
120 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 120 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
121 // LR I do not understand, why the uid string is different on zaurus and desktop 121 // LR I do not understand, why the uid string is different on zaurus and desktop
122 QString uid = "uid://"+(*it).uid(); 122 QString uid = "uid://"+(*it).uid();
123 123
124 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); 124 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
125 if (n == uid ) { 125 if (n == uid ) {
126 //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); 126 //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
127 QDialog dia( this,"dia123", true ); 127 QDialog dia( this,"dia123", true );
128 dia.setCaption( i18n("Details of attendee") ); 128 dia.setCaption( i18n("Details of attendee") );
129 QVBoxLayout lay ( &dia ); 129 QVBoxLayout lay ( &dia );
130 KABC::AddresseeView av ( &dia ); 130 KABC::AddresseeView av ( &dia );
131 av.setAddressee( (*it) ); 131 av.setAddressee( (*it) );
132 lay.addWidget( &av ); 132 lay.addWidget( &av );
133 if ( QApplication::desktop()->width() < 480 ) 133 if ( QApplication::desktop()->width() < 480 )
134 dia.resize( 220, 240); 134 dia.resize( 220, 240);
135 else { 135 else {
136 dia.resize( 400,400); 136 dia.resize( 400,400);
137 } 137 }
138 dia.exec(); 138 dia.exec();
139 break; 139 break;
140 } 140 }
141 } 141 }
142 return; 142 return;
143 } 143 }
144#else 144#else
145 { 145 {
146 if ( "uid:organizer" == n ) { 146 if ( "uid:organizer" == n ) {
147 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 147 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
148 return; 148 return;
149 } 149 }
150 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 150 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
151 if (attendees.count()) { 151 if (attendees.count()) {
152 Attendee *a; 152 Attendee *a;
153 for(a=attendees.first();a;a=attendees.next()) { 153 for(a=attendees.first();a;a=attendees.next()) {
154 if ( "uid:"+a->uid() == n ) { 154 if ( "uid:"+a->uid() == n ) {
155 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 155 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
156 return; 156 return;
157 } 157 }
158 } 158 }
159 } 159 }
160 return; 160 return;
161 } 161 }
162 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 162 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
163 // the result should now arrive through method insertAttendees 163 // the result should now arrive through method insertAttendees
164 //QString uid = "uid:"+(*it).uid(); 164 //QString uid = "uid:"+(*it).uid();
165#endif 165#endif
166 if ( n.left(6) == "mailto" ) { 166 if ( n.left(6) == "mailto" ) {
167 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 167 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
168#ifndef DESKTOP_VERSION 168#ifndef DESKTOP_VERSION
169 if ( n.mid(7,3) == "ALL" ) { 169 if ( n.mid(7,3) == "ALL" ) {
170 qDebug("all "); 170 qDebug("all ");
171 mailToAttendees( true ); 171 mailToAttendees( true );
172 } else if ( n.mid(7,4) == "RSVP" ) { 172 } else if ( n.mid(7,4) == "RSVP" ) {
173 mailToAttendees( false ); 173 mailToAttendees( false );
174 qDebug("rsvp "); 174 qDebug("rsvp ");
175 } else { 175 } else {
176 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 176 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
177 e << n.mid(7); 177 e << n.mid(7);
178 } 178 }
179#endif 179#endif
180 180
181 } 181 }
182 182
183 183
184#ifndef KORG_NODCOP 184#ifndef KORG_NODCOP
185 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 185 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
186 QString tmpStr; 186 QString tmpStr;
187 if (n.startsWith("mailto:")) { 187 if (n.startsWith("mailto:")) {
188 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 188 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
189 //emit showIncidence(n); 189 //emit showIncidence(n);
190 return; 190 return;
191 } else if (n.startsWith("uid:")) { 191 } else if (n.startsWith("uid:")) {
192 DCOPClient *client = KApplication::kApplication()->dcopClient(); 192 DCOPClient *client = KApplication::kApplication()->dcopClient();
193 const QByteArray noParamData; 193 const QByteArray noParamData;
194 const QByteArray paramData; 194 const QByteArray paramData;
195 QByteArray replyData; 195 QByteArray replyData;
196 QCString replyTypeStr; 196 QCString replyTypeStr;
197#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 197#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
198 bool foundAbbrowser = PING_ABBROWSER; 198 bool foundAbbrowser = PING_ABBROWSER;
199 199
200 if (foundAbbrowser) { 200 if (foundAbbrowser) {
201 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 201 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
202 //client->send("kaddressbook","KAddressBookIface", 202 //client->send("kaddressbook","KAddressBookIface",
203 QDataStream arg(paramData, IO_WriteOnly); 203 QDataStream arg(paramData, IO_WriteOnly);
204 arg << n.mid(6); 204 arg << n.mid(6);
205 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 205 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
206 return; 206 return;
207 } else { 207 } else {
208 /* 208 /*
209 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 209 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
210 We start it without its main interface 210 We start it without its main interface
211 */ 211 */
212 KIconLoader* iconLoader = new KIconLoader(); 212 KIconLoader* iconLoader = new KIconLoader();
213 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 213 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
214 ActionManager::setStartedKAddressBook(true); 214 ActionManager::setStartedKAddressBook(true);
215 tmpStr = "kaddressbook --editor-only --uid "; 215 tmpStr = "kaddressbook --editor-only --uid ";
216 tmpStr += KProcess::quote(n.mid(6)); 216 tmpStr += KProcess::quote(n.mid(6));
217 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 217 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
218 return; 218 return;
219 } 219 }
220 } else { 220 } else {
221 //QTextBrowser::setSource(n); 221 //QTextBrowser::setSource(n);
222 } 222 }
223#endif 223#endif
224} 224}
225void KOEventViewer::mailToAttendees( bool all ) 225void KOEventViewer::mailToAttendees( bool all )
226{ 226{
227 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 227 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
228 if (attendees.count() == 0) return; 228 if (attendees.count() == 0) return;
229 QStringList nameList; 229 QStringList nameList;
230 QStringList emailList; 230 QStringList emailList;
231 QStringList uidList; 231 QStringList uidList;
232 Attendee* a; 232 Attendee* a;
233 for(a=attendees.first();a;a=attendees.next()) { 233 for(a=attendees.first();a;a=attendees.next()) {
234 if ( !all && !a->RSVP() ) continue; 234 if ( !all && !a->RSVP() ) continue;
235 if (!a->email().isEmpty()) { 235 if (!a->email().isEmpty()) {
236 nameList.append (a->name() ); 236 nameList.append (a->name() );
237 emailList.append (a->email() ); 237 emailList.append (a->email() );
238 uidList.append (a->uid() ); 238 uidList.append (a->uid() );
239 } 239 }
240 } 240 }
241 QString uid = "ComposeMailUIpick2"+mMailSubject; 241 QString uid = "ComposeMailUIpick2"+mMailSubject;
242#ifndef DESKTOP_VERSION 242#ifndef DESKTOP_VERSION
243 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 243 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
244#endif 244#endif
245 245
246} 246}
247void KOEventViewer::addTag(const QString & tag,const QString & text) 247void KOEventViewer::addTag(const QString & tag,const QString & text)
248{ 248{
249 int number=text.contains("\n"); 249 int number=text.contains("\n");
250 QString str = "<" + tag + ">"; 250 QString str = "<" + tag + ">";
251 QString tmpText=text; 251 QString tmpText=text;
252 QString tmpStr=str; 252 QString tmpStr=str;
253 if(number !=-1) 253 if(number !=-1)
254 { 254 {
255 if (number > 0) { 255 if (number > 0) {
256 int pos=0; 256 int pos=0;
257 QString tmp; 257 QString tmp;
258 for(int i=0;i<=number;i++) { 258 for(int i=0;i<=number;i++) {
259 pos=tmpText.find("\n"); 259 pos=tmpText.find("\n");
260 tmp=tmpText.left(pos); 260 tmp=tmpText.left(pos);
261 tmpText=tmpText.right(tmpText.length()-pos-1); 261 tmpText=tmpText.right(tmpText.length()-pos-1);
262 tmpStr+=tmp+"<br>"; 262 tmpStr+=tmp+"<br>";
263 } 263 }
264 } 264 }
265 else tmpStr += tmpText; 265 else tmpStr += tmpText;
266 tmpStr+="</" + tag + ">"; 266 tmpStr+="</" + tag + ">";
267 mText.append(tmpStr); 267 mText.append(tmpStr);
268 } 268 }
269 else 269 else
270 { 270 {
271 str += text + "</" + tag + ">"; 271 str += text + "</" + tag + ">";
272 mText.append(str); 272 mText.append(str);
273 } 273 }
274} 274}
275 275
276void KOEventViewer::setColorMode( int m ) 276void KOEventViewer::setColorMode( int m )
277{ 277{
278 mColorMode = m; 278 mColorMode = m;
279} 279}
280void KOEventViewer::appendEvent(Event *event, int mode ) 280void KOEventViewer::appendEvent(Event *event, int mode )
281{ 281{
282 mMailSubject = ""; 282 mMailSubject = "";
283 mCurrentIncidence = event; 283 mCurrentIncidence = event;
284 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 284 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
285 topLevelWidget()->setCaption(i18n("Event Viewer")); 285 topLevelWidget()->setCaption(i18n("Event Viewer"));
286 if ( mode == 0 ) { 286 if ( mode == 0 ) {
287 addTag("h2",deTag(event->summary())); 287 addTag("h2",deTag(event->summary()));
288 } 288 }
289 else { 289 else {
290 if ( mColorMode == 1 ) { 290 if ( mColorMode == 1 ) {
291 mText +="<font color=\"#00A000\">"; 291 mText +="<font color=\"#00A000\">";
292 } 292 }
293 if ( mColorMode == 2 ) { 293 if ( mColorMode == 2 ) {
294 mText +="<font color=\"#C00000\">"; 294 mText +="<font color=\"#C00000\">";
295 } 295 }
296 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 296 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
297 if ( mode == 1 ) { 297 if ( mode == 1 ) {
298 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 298 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
299 } else { 299 } else {
300 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 300 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
301 } 301 }
302 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 302 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
303 if ( mColorMode ) 303 if ( mColorMode )
304 mText += "</font>"; 304 mText += "</font>";
305 } 305 }
306 mMailSubject += i18n( "Meeting " )+ event->summary(); 306 mMailSubject += i18n( "Meeting " )+ event->summary();
307 if (event->cancelled ()) { 307 if (event->cancelled ()) {
308 mText +="<font color=\"#B00000\">"; 308 mText +="<font color=\"#B00000\">";
309 addTag("i",i18n("This event has been cancelled!")); 309 addTag("i",i18n("This event has been cancelled!"));
310 mText.append("<br>"); 310 mText.append("<br>");
311 mText += "</font>"; 311 mText += "</font>";
312 mMailSubject += i18n("(cancelled)"); 312 mMailSubject += i18n("(cancelled)");
313 } 313 }
314 if (!event->location().isEmpty()) { 314 if (!event->location().isEmpty()) {
315 addTag("b",i18n("Location: ")); 315 addTag("b",i18n("Location: "));
316 mText.append(deTag(event->location())+"<br>"); 316 mText.append(deTag(event->location())+"<br>");
317 mMailSubject += i18n(" at ") + event->location(); 317 mMailSubject += i18n(" at ") + event->location();
318 } 318 }
319 if (event->doesFloat()) { 319 if (event->doesFloat()) {
320 if (event->isMultiDay()) { 320 if (event->isMultiDay()) {
321 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 321 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
322 .arg(event->dtStartDateStr(shortDate)) 322 .arg(event->dtStartDateStr(shortDate))
323 .arg(event->dtEndDateStr(shortDate))); 323 .arg(event->dtEndDateStr(shortDate)));
324 } else { 324 } else {
325 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 325 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
326 } 326 }
327 } else { 327 } else {
328 if (event->isMultiDay()) { 328 if (event->isMultiDay()) {
329 mText.append(i18n("<p><b>From:</b> %1</p> ") 329 mText.append(i18n("<p><b>From:</b> %1</p> ")
330 .arg(event->dtStartStr( shortDate))); 330 .arg(event->dtStartStr( shortDate)));
331 mText.append(i18n("<p><b>To:</b> %1</p>") 331 mText.append(i18n("<p><b>To:</b> %1</p>")
332 .arg(event->dtEndStr(shortDate))); 332 .arg(event->dtEndStr(shortDate)));
333 } else { 333 } else {
334 mText.append(i18n("<p><b>On:</b> %1</p> ") 334 mText.append(i18n("<p><b>On:</b> %1</p> ")
335 .arg(event->dtStartDateStr( shortDate ))); 335 .arg(event->dtStartDateStr( shortDate )));
336 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 336 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
337 .arg(event->dtStartTimeStr()) 337 .arg(event->dtStartTimeStr())
338 .arg(event->dtEndTimeStr())); 338 .arg(event->dtEndTimeStr()));
339 } 339 }
340 } 340 }
341 341
342 if (event->recurrence()->doesRecur()) { 342 if (event->recurrence()->doesRecur()) {
343 343
344 QString recurText = event->recurrence()->recurrenceText(); 344 QString recurText = event->recurrence()->recurrenceText();
345 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 345 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
346 bool ok; 346 bool ok;
347 QDate start = QDate::currentDate(); 347 QDate start = QDate::currentDate();
348 QDateTime next; 348 QDateTime next;
349 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 349 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
350 if ( ok ) { 350 if ( ok ) {
351 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 351 addTag("p",i18n("<b>Next recurrence is on:</b>") );
352 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 352 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
353 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 353 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
354 354
355 } else { 355 } else {
356 bool last; 356 bool last;
357 QDate nextd; 357 QDate nextd;
358 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 358 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
359 if ( last ) { 359 if ( last ) {
360 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 360 addTag("p",i18n("<b>Last recurrence was on:</b>") );
361 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 361 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
362 } 362 }
363 } 363 }
364 } else { 364 } else {
365 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 365 mMailSubject += i18n(" - " )+event->dtStartStr( true );
366 366
367 } 367 }
368 368
369 369
370 if (event->isAlarmEnabled()) { 370 if (event->isAlarmEnabled()) {
371 Alarm *alarm =event->alarms().first() ; 371 Alarm *alarm =event->alarms().first() ;
372 QDateTime t = alarm->time(); 372 QDateTime t = alarm->time();
373 int min = t.secsTo( event->dtStart() )/60; 373 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
374 QString s =i18n("( %1 min before )").arg( min );
375 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 374 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
376 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 375 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
377 //addTag("p",s); 376 //addTag("p",s);
378 } 377 }
379 378
380 addTag("b",i18n("Access: ")); 379 addTag("b",i18n("Access: "));
381 mText.append(event->secrecyStr()+"<br>"); 380 mText.append(event->secrecyStr()+"<br>");
382 381
383 382
384 if ( KOPrefs::instance()->mEVshowDetails ) { 383 if ( KOPrefs::instance()->mEVshowDetails ) {
385 if (!event->description().isEmpty()) { 384 if (!event->description().isEmpty()) {
386 addTag("p",i18n("<b>Details: </b>")); 385 addTag("p",i18n("<b>Details: </b>"));
387 addTag("p",deTag(event->description())); 386 addTag("p",deTag(event->description()));
388 } 387 }
389 } 388 }
390 formatCategories(event); 389 formatCategories(event);
391 390
392 formatReadOnly(event); 391 formatReadOnly(event);
393 formatAttendees(event); 392 formatAttendees(event);
394 393
395 if ( KOPrefs::instance()->mEVshowCreated ) { 394 if ( KOPrefs::instance()->mEVshowCreated ) {
396 addTag("p",i18n("<b>Created: ") +" </b>"); 395 addTag("p",i18n("<b>Created: ") +" </b>");
397 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 396 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
398 397
399 } 398 }
400 if ( KOPrefs::instance()->mEVshowChanged ) { 399 if ( KOPrefs::instance()->mEVshowChanged ) {
401 addTag("p",i18n("<b>Last modified: ") +" </b>"); 400 addTag("p",i18n("<b>Last modified: ") +" </b>");
402 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 401 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
403 402
404 } 403 }
405 setText(mText); 404 setText(mText);
406 //QWhatsThis::add(this,mText); 405 //QWhatsThis::add(this,mText);
407 406
408} 407}
409 408
410void KOEventViewer::appendTodo(Todo *event, int mode ) 409void KOEventViewer::appendTodo(Todo *event, int mode )
411{ 410{
412 mMailSubject = ""; 411 mMailSubject = "";
413 mCurrentIncidence = event; 412 mCurrentIncidence = event;
414 topLevelWidget()->setCaption(i18n("Todo Viewer")); 413 topLevelWidget()->setCaption(i18n("Todo Viewer"));
415 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 414 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
416 if (mode == 0 ) 415 if (mode == 0 )
417 addTag("h2",deTag(event->summary())); 416 addTag("h2",deTag(event->summary()));
418 else { 417 else {
419 if ( mColorMode == 1 ) { 418 if ( mColorMode == 1 ) {
420 mText +="<font color=\"#00A000\">"; 419 mText +="<font color=\"#00A000\">";
421 } 420 }
422 if ( mColorMode == 2 ) { 421 if ( mColorMode == 2 ) {
423 mText +="<font color=\"#B00000\">"; 422 mText +="<font color=\"#B00000\">";
424 } 423 }
425 if ( mode == 1 ) { 424 if ( mode == 1 ) {
426 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 425 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
427 } else { 426 } else {
428 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 427 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
429 } 428 }
430 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 429 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
431 if ( mColorMode ) 430 if ( mColorMode )
432 mText += "</font>"; 431 mText += "</font>";
433 } 432 }
434 mMailSubject += i18n( "Todo " )+ event->summary(); 433 mMailSubject += i18n( "Todo " )+ event->summary();
435 434
436 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 435 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
437 mText +="<font color=\"#B00000\">"; 436 mText +="<font color=\"#B00000\">";
438 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 437 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
439 mText += "</font>"; 438 mText += "</font>";
440 } else { 439 } else {
441 mText.append(i18n("<p><i>%1 % completed</i></p>") 440 mText.append(i18n("<p><i>%1 % completed</i></p>")
442 .arg(event->percentComplete())); 441 .arg(event->percentComplete()));
443 } 442 }
444 443
445 if (event->cancelled ()) { 444 if (event->cancelled ()) {
446 mText +="<font color=\"#B00000\">"; 445 mText +="<font color=\"#B00000\">";
447 addTag("i",i18n("This todo has been cancelled!")); 446 addTag("i",i18n("This todo has been cancelled!"));
448 mText.append("<br>"); 447 mText.append("<br>");
449 mText += "</font>"; 448 mText += "</font>";
450 mMailSubject += i18n("(cancelled)"); 449 mMailSubject += i18n("(cancelled)");
451 } 450 }
452 451
453 if (!event->location().isEmpty()) { 452 if (!event->location().isEmpty()) {
454 addTag("b",i18n("Location: ")); 453 addTag("b",i18n("Location: "));
455 mText.append(deTag(event->location())+"<br>"); 454 mText.append(deTag(event->location())+"<br>");
456 mMailSubject += i18n(" at ") + event->location(); 455 mMailSubject += i18n(" at ") + event->location();
457 } 456 }
458 457
459 if (event->recurrence()->doesRecur()) { 458 if (event->recurrence()->doesRecur()) {
460 459
461 QString recurText = event->recurrence()->recurrenceText(); 460 QString recurText = event->recurrence()->recurrenceText();
462 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 461 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
463 462
464 } 463 }
465 if (event->hasStartDate()) { 464 if (event->hasStartDate()) {
466 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 465 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
467 } 466 }
468 if (event->hasDueDate()) { 467 if (event->hasDueDate()) {
469 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 468 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
470 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 469 mMailSubject += i18n(" - " )+event->dtDueStr( true );
471 } 470 }
471
472
473 if (event->isAlarmEnabled()) {
474 Alarm *alarm =event->alarms().first() ;
475 QDateTime t = alarm->time();
476 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
477 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
478 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
479 //addTag("p",s);
480 }
481
472 addTag("b",i18n("Access: ")); 482 addTag("b",i18n("Access: "));
473 mText.append(event->secrecyStr()+"<br>"); 483 mText.append(event->secrecyStr()+"<br>");
474 if ( KOPrefs::instance()->mEVshowDetails ) { 484 if ( KOPrefs::instance()->mEVshowDetails ) {
475 if (!event->description().isEmpty()) { 485 if (!event->description().isEmpty()) {
476 addTag("p",i18n("<b>Details: </b>")); 486 addTag("p",i18n("<b>Details: </b>"));
477 addTag("p",deTag(event->description())); 487 addTag("p",deTag(event->description()));
478 } 488 }
479 } 489 }
480 490
481 formatCategories(event); 491 formatCategories(event);
482 492
483 mText.append(i18n("<p><b>Priority:</b> %2</p>") 493 mText.append(i18n("<p><b>Priority:</b> %2</p>")
484 .arg(QString::number(event->priority()))); 494 .arg(QString::number(event->priority())));
485 495
486 formatReadOnly(event); 496 formatReadOnly(event);
487 formatAttendees(event); 497 formatAttendees(event);
488 if ( event->relatedTo() ) { 498 if ( event->relatedTo() ) {
489 addTag("b",i18n("Parent todo:<br>")); 499 addTag("b",i18n("Parent todo:<br>"));
490 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 500 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
491 } 501 }
492 QPtrList<Incidence> Relations = event->relations(); 502 QPtrList<Incidence> Relations = event->relations();
493 Incidence *to; 503 Incidence *to;
494 if ( Relations.first() ) 504 if ( Relations.first() )
495 addTag("b",i18n("Sub todos:<br>")); 505 addTag("b",i18n("Sub todos:<br>"));
496 for (to=Relations.first();to;to=Relations.next()) { 506 for (to=Relations.first();to;to=Relations.next()) {
497 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 507 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
498 508
499 } 509 }
500 if ( KOPrefs::instance()->mEVshowCreated ) { 510 if ( KOPrefs::instance()->mEVshowCreated ) {
501 addTag("p",i18n("<b>Created: ") +" </b>"); 511 addTag("p",i18n("<b>Created: ") +" </b>");
502 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 512 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
503 513
504 } 514 }
505 if ( KOPrefs::instance()->mEVshowChanged ) { 515 if ( KOPrefs::instance()->mEVshowChanged ) {
506 addTag("p",i18n("<b>Last modified: ") +" </b>"); 516 addTag("p",i18n("<b>Last modified: ") +" </b>");
507 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 517 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
508 518
509 } 519 }
510 setText(mText); 520 setText(mText);
511} 521}
512 522
513void KOEventViewer::formatCategories(Incidence *event) 523void KOEventViewer::formatCategories(Incidence *event)
514{ 524{
515 if (!event->categoriesStr().isEmpty()) { 525 if (!event->categoriesStr().isEmpty()) {
516 if (event->categories().count() == 1) { 526 if (event->categories().count() == 1) {
517 addTag("h3",i18n("Category")); 527 addTag("h3",i18n("Category"));
518 } else { 528 } else {
519 addTag("h3",i18n("Categories")); 529 addTag("h3",i18n("Categories"));
520 } 530 }
521 addTag("p",event->categoriesStr()); 531 addTag("p",event->categoriesStr());
522 } 532 }
523} 533}
524void KOEventViewer::formatAttendees(Incidence *event) 534void KOEventViewer::formatAttendees(Incidence *event)
525{ 535{
526 QPtrList<Attendee> attendees = event->attendees(); 536 QPtrList<Attendee> attendees = event->attendees();
527 if (attendees.count()) { 537 if (attendees.count()) {
528 538
529 539
530 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 540 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
531 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 541 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
532 addTag("h3",i18n("Organizer")); 542 addTag("h3",i18n("Organizer"));
533 mText.append("<ul><li>"); 543 mText.append("<ul><li>");
534#ifndef KORG_NOKABC 544#ifndef KORG_NOKABC
535 545
536#ifdef DESKTOP_VERSION 546#ifdef DESKTOP_VERSION
537 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 547 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
538 KABC::Addressee::List addressList; 548 KABC::Addressee::List addressList;
539 addressList = add_book->findByEmail(event->organizer()); 549 addressList = add_book->findByEmail(event->organizer());
540 KABC::Addressee o = addressList.first(); 550 KABC::Addressee o = addressList.first();
541 if (!o.isEmpty() && addressList.size()<2) { 551 if (!o.isEmpty() && addressList.size()<2) {
542 mText += "<a href=\"uid:" + o.uid() + "\">"; 552 mText += "<a href=\"uid:" + o.uid() + "\">";
543 mText += o.formattedName(); 553 mText += o.formattedName();
544 mText += "</a>\n"; 554 mText += "</a>\n";
545 } else { 555 } else {
546 mText.append(event->organizer()); 556 mText.append(event->organizer());
547 } 557 }
548#else //DESKTOP_VERSION 558#else //DESKTOP_VERSION
549 mText += "<a href=\"uid:organizer\">"; 559 mText += "<a href=\"uid:organizer\">";
550 mText += event->organizer(); 560 mText += event->organizer();
551 mText += "</a>\n"; 561 mText += "</a>\n";
552#endif //DESKTOP_VERSION 562#endif //DESKTOP_VERSION
553 563
554 564
555#else 565#else
556 mText.append(event->organizer()); 566 mText.append(event->organizer());
557#endif 567#endif
558 568
559 if (iconPath) { 569 if (iconPath) {
560 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 570 mText += " <a href=\"mailto:" + event->organizer() + "\">";
561 mText += "<IMG src=\"" + iconPath + "\">"; 571 mText += "<IMG src=\"" + iconPath + "\">";
562 mText += "</a>\n"; 572 mText += "</a>\n";
563 } 573 }
564 mText.append("</li></ul>"); 574 mText.append("</li></ul>");
565 575
566 addTag("h3",i18n("Attendees")); 576 addTag("h3",i18n("Attendees"));
567 Attendee *a; 577 Attendee *a;
568 mText.append("<ul>"); 578 mText.append("<ul>");
569 int a_count = 0; 579 int a_count = 0;
570 int a_count_nr = 0; 580 int a_count_nr = 0;
571 581
572 for(a=attendees.first();a;a=attendees.next()) { 582 for(a=attendees.first();a;a=attendees.next()) {
573#ifndef KORG_NOKABC 583#ifndef KORG_NOKABC
574#ifdef DESKTOP_VERSION 584#ifdef DESKTOP_VERSION
575 if (a->name().isEmpty()) { 585 if (a->name().isEmpty()) {
576 addressList = add_book->findByEmail(a->email()); 586 addressList = add_book->findByEmail(a->email());
577 KABC::Addressee o = addressList.first(); 587 KABC::Addressee o = addressList.first();
578 if (!o.isEmpty() && addressList.size()<2) { 588 if (!o.isEmpty() && addressList.size()<2) {
579 mText += "<a href=\"uid:" + o.uid() + "\">"; 589 mText += "<a href=\"uid:" + o.uid() + "\">";
580 mText += o.formattedName(); 590 mText += o.formattedName();
581 mText += "</a>\n"; 591 mText += "</a>\n";
582 } else { 592 } else {
583 mText += "<li>"; 593 mText += "<li>";
584 mText.append(a->email()); 594 mText.append(a->email());
585 mText += "\n"; 595 mText += "\n";
586 } 596 }
587 } else { 597 } else {
588 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 598 mText += "<li><a href=\"uid:" + a->uid() + "\">";
589 if (!a->name().isEmpty()) mText += a->name(); 599 if (!a->name().isEmpty()) mText += a->name();
590 else mText += a->email(); 600 else mText += a->email();
591 mText += "</a>\n"; 601 mText += "</a>\n";
592 } 602 }
593#else //DESKTOP_VERSION 603#else //DESKTOP_VERSION
594 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 604 mText += "<li><a href=\"uid:" + a->uid() + "\">";
595 if (!a->name().isEmpty()) mText += a->name(); 605 if (!a->name().isEmpty()) mText += a->name();
596 else mText += a->email(); 606 else mText += a->email();
597 mText += "</a>\n"; 607 mText += "</a>\n";
598#endif //DESKTOP_VERSION 608#endif //DESKTOP_VERSION
599#else 609#else
600 //qDebug("nokabc "); 610 //qDebug("nokabc ");
601 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 611 mText += "<li><a href=\"uid:" + a->uid() + "\">";
602 if (!a->name().isEmpty()) mText += a->name(); 612 if (!a->name().isEmpty()) mText += a->name();
603 else mText += a->email(); 613 else mText += a->email();
604 mText += "</a>\n"; 614 mText += "</a>\n";
605#endif 615#endif
606 616
607 617
608 if (!a->email().isEmpty()) { 618 if (!a->email().isEmpty()) {
609 if (iconPath) { 619 if (iconPath) {
610 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 620 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
611 if ( a->RSVP() ) { 621 if ( a->RSVP() ) {
612 ++a_count_nr; 622 ++a_count_nr;
613 mText += "<IMG src=\"" + iconPath + "\">"; 623 mText += "<IMG src=\"" + iconPath + "\">";
614 } 624 }
615 else { 625 else {
616 ++a_count; 626 ++a_count;
617 mText += "<IMG src=\"" + NOiconPath + "\">"; 627 mText += "<IMG src=\"" + NOiconPath + "\">";
618 } 628 }
619 mText += "</a>\n"; 629 mText += "</a>\n";
620 } 630 }
621 } 631 }
622 if (a->status() != Attendee::NeedsAction ) 632 if (a->status() != Attendee::NeedsAction )
623 mText +="[" + a->statusStr() + "] "; 633 mText +="[" + a->statusStr() + "] ";
624 if (a->role() == Attendee::Chair ) 634 if (a->role() == Attendee::Chair )
625 mText +="(" + a->roleStr().left(1) + ".)"; 635 mText +="(" + a->roleStr().left(1) + ".)";
626 } 636 }
627 mText.append("</li></ul>"); 637 mText.append("</li></ul>");
628 if ( (a_count+a_count_nr) > 1 ) { 638 if ( (a_count+a_count_nr) > 1 ) {
629 mText += "<a href=\"mailto:ALL\">"; 639 mText += "<a href=\"mailto:ALL\">";
630 mText += i18n( "Mail to all" ); 640 mText += i18n( "Mail to all" );
631 mText += "</a> ( "; 641 mText += "</a> ( ";
632 mText += "<IMG src=\"" + iconPath + "\">"; 642 mText += "<IMG src=\"" + iconPath + "\">";
633 mText += i18n( " and " ); 643 mText += i18n( " and " );
634 mText += "<IMG src=\"" + NOiconPath + "\"> )"; 644 mText += "<IMG src=\"" + NOiconPath + "\"> )";
635 mText += "<br>\n"; 645 mText += "<br>\n";
636 646
637 647
638 } 648 }
639 if ( a_count_nr > 1 ) { 649 if ( a_count_nr > 1 ) {
640 mText += "<a href=\"mailto:RSVP\">"; 650 mText += "<a href=\"mailto:RSVP\">";
641 mText += i18n( "Mail to selected" ); 651 mText += i18n( "Mail to selected" );
642 mText += "</a> ( "; 652 mText += "</a> ( ";
643 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); 653 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
644 mText += "<br>\n"; 654 mText += "<br>\n";
645 } 655 }
646 } 656 }
647 657
648} 658}
649void KOEventViewer::appendJournal(Journal *jour, int mode ) 659void KOEventViewer::appendJournal(Journal *jour, int mode )
650{ 660{
651 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 661 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
652 if (mode == 0 ) { 662 if (mode == 0 ) {
653 addTag("h2",i18n("Journal from: ")); 663 addTag("h2",i18n("Journal from: "));
654 } 664 }
655 else { 665 else {
656 if ( mode == 1 ) { 666 if ( mode == 1 ) {
657 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 667 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
658 } else { 668 } else {
659 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 669 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
660 } 670 }
661 } 671 }
662 topLevelWidget()->setCaption("Journal Viewer"); 672 topLevelWidget()->setCaption("Journal Viewer");
663 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 673 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
664 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 674 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
665 if (!jour->description().isEmpty()) { 675 if (!jour->description().isEmpty()) {
666 addTag("p",deTag(jour->description())); 676 addTag("p",deTag(jour->description()));
667 } 677 }
668 setText(mText); 678 setText(mText);
669} 679}
670 680
671void KOEventViewer::formatReadOnly(Incidence *event) 681void KOEventViewer::formatReadOnly(Incidence *event)
672{ 682{
673 if (event->isReadOnly()) { 683 if (event->isReadOnly()) {
674 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 684 addTag("p","<em>(" + i18n("read-only") + ")</em>");
675 } 685 }
676} 686}
677void KOEventViewer::setSyncMode( bool b ) 687void KOEventViewer::setSyncMode( bool b )
678{ 688{
679 mSyncMode = b; 689 mSyncMode = b;
680} 690}
681 691
682void KOEventViewer::setTodo(Todo *event, bool clearV ) 692void KOEventViewer::setTodo(Todo *event, bool clearV )
683{ 693{
684 if ( clearV ) 694 if ( clearV )
685 clearEvents(); 695 clearEvents();
686 if ( mSyncMode ) { 696 if ( mSyncMode ) {
687 if ( clearV ) 697 if ( clearV )
688 appendTodo(event,1 ); 698 appendTodo(event,1 );
689 else 699 else
690 appendTodo(event,2); 700 appendTodo(event,2);
691 } else 701 } else
692 appendTodo(event); 702 appendTodo(event);
693} 703}
694void KOEventViewer::setJournal(Journal *event, bool clearV ) 704void KOEventViewer::setJournal(Journal *event, bool clearV )
695{ 705{
696 if ( clearV ) 706 if ( clearV )
697 clearEvents(); 707 clearEvents();
698 if ( mSyncMode ) { 708 if ( mSyncMode ) {
699 if ( clearV ) 709 if ( clearV )
700 appendJournal(event, 1); 710 appendJournal(event, 1);
701 else 711 else
702 appendJournal(event, 2); 712 appendJournal(event, 2);
703 } else 713 } else
704 appendJournal(event); 714 appendJournal(event);
705} 715}
706 716
707void KOEventViewer::setEvent(Event *event) 717void KOEventViewer::setEvent(Event *event)
708{ 718{
709 clearEvents(); 719 clearEvents();
710 if ( mSyncMode ) 720 if ( mSyncMode )
711 appendEvent(event, 1); 721 appendEvent(event, 1);
712 else 722 else
713 appendEvent(event); 723 appendEvent(event);
714} 724}
715 725
716void KOEventViewer::addEvent(Event *event) 726void KOEventViewer::addEvent(Event *event)
717{ 727{
718 if ( mSyncMode ) 728 if ( mSyncMode )
719 appendEvent(event, 2); 729 appendEvent(event, 2);
720 else 730 else
721 appendEvent(event); 731 appendEvent(event);
722} 732}
723 733
724void KOEventViewer::clearEvents(bool now) 734void KOEventViewer::clearEvents(bool now)
725{ 735{
726 mText = ""; 736 mText = "";
727 if (now) setText(mText); 737 if (now) setText(mText);
728} 738}
729 739
730void KOEventViewer::addText(QString text) 740void KOEventViewer::addText(QString text)
731{ 741{
732 mText.append(text); 742 mText.append(text);
733 setText(mText); 743 setText(mText);
734} 744}
735QString KOEventViewer::deTag(QString text) 745QString KOEventViewer::deTag(QString text)
736{ 746{
737#if QT_VERSION >= 0x030000 747#if QT_VERSION >= 0x030000
738 text.replace( '<' , "&lt;" ); 748 text.replace( '<' , "&lt;" );
739 text.replace( '>' , "&gt;" ); 749 text.replace( '>' , "&gt;" );
740#else 750#else
741 if ( text.find ('<') >= 0 ) { 751 if ( text.find ('<') >= 0 ) {
742 text.replace( QRegExp("<") , "&lt;" ); 752 text.replace( QRegExp("<") , "&lt;" );
743 } 753 }
744 if ( text.find ('>') >= 0 ) { 754 if ( text.find ('>') >= 0 ) {
745 text.replace( QRegExp(">") , "&gt;" ); 755 text.replace( QRegExp(">") , "&gt;" );
746 } 756 }
747#endif 757#endif
748 return text; 758 return text;
749} 759}
750void KOEventViewer::keyPressEvent ( QKeyEvent * e ) 760void KOEventViewer::keyPressEvent ( QKeyEvent * e )
751{ 761{
752 switch ( e->key() ) { 762 switch ( e->key() ) {
753 case Qt::Key_Return: 763 case Qt::Key_Return:
754 case Qt::Key_Enter : 764 case Qt::Key_Enter :
755 e->ignore(); 765 e->ignore();
756 break; 766 break;
757 default: 767 default:
758 QTextBrowser::keyPressEvent ( e ); 768 QTextBrowser::keyPressEvent ( e );
759 break; 769 break;
760 } 770 }
761} 771}
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 15e094d..e0e138e 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,1242 +1,1250 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qwhatsthis.h> 35#include <qwhatsthis.h>
36#include <qregexp.h> 36#include <qregexp.h>
37 37
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42 42
43#include <libkdepim/kpimglobalprefs.h> 43#include <libkdepim/kpimglobalprefs.h>
44#include <libkcal/calendar.h> 44#include <libkcal/calendar.h>
45#include <libkcal/calendarlocal.h> 45#include <libkcal/calendarlocal.h>
46#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
47#include <libkcal/vcalformat.h> 47#include <libkcal/vcalformat.h>
48#include <libkcal/recurrence.h> 48#include <libkcal/recurrence.h>
49#include <libkcal/filestorage.h> 49#include <libkcal/filestorage.h>
50#include <libkdepim/categoryselectdialog.h> 50#include <libkdepim/categoryselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 51#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 52#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 53#include <qpe/qpeapplication.h>
54#else 54#else
55#include <qapplication.h> 55#include <qapplication.h>
56#endif 56#endif
57 57
58#ifndef KORG_NOPRINTER 58#ifndef KORG_NOPRINTER
59#include "calprinter.h" 59#include "calprinter.h"
60#endif 60#endif
61#include "koglobals.h" 61#include "koglobals.h"
62#include "koprefs.h" 62#include "koprefs.h"
63#include "kfiledialog.h" 63#include "kfiledialog.h"
64 64
65#include "kolistview.h" 65#include "kolistview.h"
66 66
67 67
68 68
69 69
70class KOListViewWhatsThis :public QWhatsThis 70class KOListViewWhatsThis :public QWhatsThis
71{ 71{
72public: 72public:
73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
74 74
75protected: 75protected:
76 virtual QString text( const QPoint& p) 76 virtual QString text( const QPoint& p)
77 { 77 {
78 return _view->getWhatsThisText(p) ; 78 return _view->getWhatsThisText(p) ;
79 } 79 }
80private: 80private:
81 QWidget* _wid; 81 QWidget* _wid;
82 KOListView * _view; 82 KOListView * _view;
83}; 83};
84 84
85 85
86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
87{ 87{
88 mItem = item; 88 mItem = item;
89 mDate = date; 89 mDate = date;
90} 90}
91 91
92ListItemVisitor::~ListItemVisitor() 92ListItemVisitor::~ListItemVisitor()
93{ 93{
94} 94}
95 95
96bool ListItemVisitor::visit(Event *e) 96bool ListItemVisitor::visit(Event *e)
97{ 97{
98 98
99 bool ok = false; 99 bool ok = false;
100 QString start, end; 100 QString start, end;
101 QDate ds, de; 101 QDate ds, de;
102 if ( e->doesRecur() ) { 102 if ( e->doesRecur() ) {
103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
104 if ( ok ) { 104 if ( ok ) {
105 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 105 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
106 start = KGlobal::locale()->formatDate(ds,true); 106 start = KGlobal::locale()->formatDate(ds,true);
107 de = ds.addDays( days); 107 de = ds.addDays( days);
108 end = KGlobal::locale()->formatDate(de,true); 108 end = KGlobal::locale()->formatDate(de,true);
109 } 109 }
110 110
111 } 111 }
112 if ( ! ok ) { 112 if ( ! ok ) {
113 start =e->dtStartDateStr(); 113 start =e->dtStartDateStr();
114 end = e->dtEndDateStr(); 114 end = e->dtEndDateStr();
115 ds = e->dtStart().date(); 115 ds = e->dtStart().date();
116 de = e->dtEnd().date(); 116 de = e->dtEnd().date();
117 } 117 }
118 mItem->setText(0,e->summary()); 118 mItem->setText(0,e->summary());
119 mItem->setText(1,start); 119 mItem->setText(1,start);
120 mItem->setText(2,e->dtStartTimeStr()); 120 mItem->setText(2,e->dtStartTimeStr());
121 mItem->setText(3,end); 121 mItem->setText(3,end);
122 mItem->setText(4,e->dtEndTimeStr()); 122 mItem->setText(4,e->dtEndTimeStr());
123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 123 if ( e->isAlarmEnabled() ) {
124 mItem->setText(5,e->alarms().first()->offsetText() );
125 } else {
126 mItem->setText(5, i18n("No"));
127 }
124 mItem->setText(6, e->recurrence()->recurrenceText()); 128 mItem->setText(6, e->recurrence()->recurrenceText());
125 mItem->setText(7,"---"); 129 mItem->setText(7,"---");
126 mItem->setText(8,"---"); 130 mItem->setText(8,"---");
127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 131 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
128 mItem->setText(10,e->categoriesStr()); 132 mItem->setText(10,e->categoriesStr());
129 133
130 QString key; 134 QString key;
131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 135 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 136 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
133 mItem->setSortKey(1,key); 137 mItem->setSortKey(1,key);
134 138
135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 139 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 140 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
137 mItem->setSortKey(3,key); 141 mItem->setSortKey(3,key);
138 142
139 return true; 143 return true;
140} 144}
141 145
142bool ListItemVisitor::visit(Todo *t) 146bool ListItemVisitor::visit(Todo *t)
143{ 147{
144 mItem->setText(0,i18n("Todo: %1").arg(t->summary())); 148 mItem->setText(0,i18n("Todo: %1").arg(t->summary()));
145 if (t->hasStartDate()) { 149 if (t->hasStartDate()) {
146 mItem->setText(1,t->dtStartDateStr()); 150 mItem->setText(1,t->dtStartDateStr());
147 if (t->doesFloat()) { 151 if (t->doesFloat()) {
148 mItem->setText(2,"---"); 152 mItem->setText(2,"---");
149 } else { 153 } else {
150 mItem->setText(2,t->dtStartTimeStr()); 154 mItem->setText(2,t->dtStartTimeStr());
151 } 155 }
152 } else { 156 } else {
153 mItem->setText(1,"---"); 157 mItem->setText(1,"---");
154 mItem->setText(2,"---"); 158 mItem->setText(2,"---");
155 } 159 }
156 mItem->setText(3,"---"); 160 mItem->setText(3,"---");
157 mItem->setText(4,"---"); 161 mItem->setText(4,"---");
158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 162 if ( t->isAlarmEnabled() ) {
163 mItem->setText(5,t->alarms().first()->offsetText() );
164 } else {
165 mItem->setText(5, i18n("No"));
166 }
159 mItem->setText(6, t->recurrence()->recurrenceText()); 167 mItem->setText(6, t->recurrence()->recurrenceText());
160 if (t->hasDueDate()) { 168 if (t->hasDueDate()) {
161 mItem->setText(7,t->dtDueDateStr()); 169 mItem->setText(7,t->dtDueDateStr());
162 if (t->doesFloat()) { 170 if (t->doesFloat()) {
163 mItem->setText(8,"---"); 171 mItem->setText(8,"---");
164 } else { 172 } else {
165 mItem->setText(8,t->dtDueTimeStr()); 173 mItem->setText(8,t->dtDueTimeStr());
166 } 174 }
167 } else { 175 } else {
168 mItem->setText(7,"---"); 176 mItem->setText(7,"---");
169 mItem->setText(8,"---"); 177 mItem->setText(8,"---");
170 } 178 }
171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 179 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
172 mItem->setText(10,t->categoriesStr()); 180 mItem->setText(10,t->categoriesStr());
173 181
174 QString key; 182 QString key;
175 QDate d; 183 QDate d;
176 if (t->hasDueDate()) { 184 if (t->hasDueDate()) {
177 d = t->dtDue().date(); 185 d = t->dtDue().date();
178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 186 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 187 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
180 mItem->setSortKey(7,key); 188 mItem->setSortKey(7,key);
181 } 189 }
182 if ( t->hasStartDate() ) { 190 if ( t->hasStartDate() ) {
183 d = t->dtStart().date(); 191 d = t->dtStart().date();
184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 192 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 193 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
186 mItem->setSortKey(1,key); 194 mItem->setSortKey(1,key);
187 } 195 }
188 return true; 196 return true;
189} 197}
190 198
191bool ListItemVisitor::visit(Journal * j) 199bool ListItemVisitor::visit(Journal * j)
192{ 200{
193 QString des = j->description().left(30); 201 QString des = j->description().left(30);
194 des = des.simplifyWhiteSpace (); 202 des = des.simplifyWhiteSpace ();
195 des.replace (QRegExp ("\\n"),"" ); 203 des.replace (QRegExp ("\\n"),"" );
196 des.replace (QRegExp ("\\r"),"" ); 204 des.replace (QRegExp ("\\r"),"" );
197 mItem->setText(0,i18n("Journal: ")+des.left(25)); 205 mItem->setText(0,i18n("Journal: ")+des.left(25));
198 mItem->setText(1,j->dtStartDateStr()); 206 mItem->setText(1,j->dtStartDateStr());
199 mItem->setText(2,"---"); 207 mItem->setText(2,"---");
200 mItem->setText(3,"---"); 208 mItem->setText(3,"---");
201 mItem->setText(4,"---"); 209 mItem->setText(4,"---");
202 mItem->setText(5,"---"); 210 mItem->setText(5,"---");
203 mItem->setText(6,"---"); 211 mItem->setText(6,"---");
204 mItem->setText(7,j->dtStartDateStr()); 212 mItem->setText(7,j->dtStartDateStr());
205 mItem->setText(8,"---"); 213 mItem->setText(8,"---");
206 mItem->setText(9,"---"); 214 mItem->setText(9,"---");
207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 215 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
208 216
209 QString key; 217 QString key;
210 QDate d = j->dtStart().date(); 218 QDate d = j->dtStart().date();
211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 219 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
212 mItem->setSortKey(1,key); 220 mItem->setSortKey(1,key);
213 mItem->setSortKey(7,key); 221 mItem->setSortKey(7,key);
214 222
215 return true; 223 return true;
216} 224}
217 225
218KOListView::KOListView(Calendar *calendar, QWidget *parent, 226KOListView::KOListView(Calendar *calendar, QWidget *parent,
219 const char *name) 227 const char *name)
220 : KOEventView(calendar, parent, name) 228 : KOEventView(calendar, parent, name)
221{ 229{
222 mActiveItem = 0; 230 mActiveItem = 0;
223 mListView = new KOListViewListView(this); 231 mListView = new KOListViewListView(this);
224 mListView->addColumn(i18n("Summary")); 232 mListView->addColumn(i18n("Summary"));
225 mListView->addColumn(i18n("Start Date")); 233 mListView->addColumn(i18n("Start Date"));
226 mListView->addColumn(i18n("Start Time")); 234 mListView->addColumn(i18n("Start Time"));
227 mListView->addColumn(i18n("End Date")); 235 mListView->addColumn(i18n("End Date"));
228 mListView->addColumn(i18n("End Time")); 236 mListView->addColumn(i18n("End Time"));
229 mListView->addColumn(i18n("Alarm")); // alarm set? 237 mListView->addColumn(i18n("Alarm")); // alarm set?
230 mListView->addColumn(i18n("Recurs")); // recurs? 238 mListView->addColumn(i18n("Recurs")); // recurs?
231 mListView->addColumn(i18n("Due Date")); 239 mListView->addColumn(i18n("Due Date"));
232 mListView->addColumn(i18n("Due Time")); 240 mListView->addColumn(i18n("Due Time"));
233 mListView->addColumn(i18n("Cancelled")); 241 mListView->addColumn(i18n("Cancelled"));
234 mListView->addColumn(i18n("Categories")); 242 mListView->addColumn(i18n("Categories"));
235 243
236 mListView->setColumnAlignment(0,AlignLeft); 244 mListView->setColumnAlignment(0,AlignLeft);
237 mListView->setColumnAlignment(1,AlignLeft); 245 mListView->setColumnAlignment(1,AlignLeft);
238 mListView->setColumnAlignment(2,AlignHCenter); 246 mListView->setColumnAlignment(2,AlignHCenter);
239 mListView->setColumnAlignment(3,AlignLeft); 247 mListView->setColumnAlignment(3,AlignLeft);
240 mListView->setColumnAlignment(4,AlignHCenter); 248 mListView->setColumnAlignment(4,AlignHCenter);
241 mListView->setColumnAlignment(5,AlignLeft); 249 mListView->setColumnAlignment(5,AlignLeft);
242 mListView->setColumnAlignment(6,AlignLeft); 250 mListView->setColumnAlignment(6,AlignLeft);
243 mListView->setColumnAlignment(7,AlignLeft); 251 mListView->setColumnAlignment(7,AlignLeft);
244 mListView->setColumnAlignment(8,AlignLeft); 252 mListView->setColumnAlignment(8,AlignLeft);
245 mListView->setColumnAlignment(9,AlignLeft); 253 mListView->setColumnAlignment(9,AlignLeft);
246 mListView->setColumnAlignment(10,AlignLeft); 254 mListView->setColumnAlignment(10,AlignLeft);
247 mListView->setColumnWidthMode(10, QListView::Manual); 255 mListView->setColumnWidthMode(10, QListView::Manual);
248 new KOListViewWhatsThis(mListView->viewport(),this); 256 new KOListViewWhatsThis(mListView->viewport(),this);
249 257
250 int iii = 0; 258 int iii = 0;
251 for ( iii = 0; iii< 10 ; ++iii ) 259 for ( iii = 0; iii< 10 ; ++iii )
252 mListView->setColumnWidthMode( iii, QListView::Manual ); 260 mListView->setColumnWidthMode( iii, QListView::Manual );
253 261
254 QBoxLayout *layoutTop = new QVBoxLayout(this); 262 QBoxLayout *layoutTop = new QVBoxLayout(this);
255 layoutTop->addWidget(mListView); 263 layoutTop->addWidget(mListView);
256 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 264 mListView->setFont ( KOPrefs::instance()->mListViewFont );
257 mPopupMenu = eventPopup(); 265 mPopupMenu = eventPopup();
258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 266 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
259 i18n("Select all"),this, 267 i18n("Select all"),this,
260 SLOT(allSelection()),true); 268 SLOT(allSelection()),true);
261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 269 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
262 i18n("Deselect all"),this, 270 i18n("Deselect all"),this,
263 SLOT(clearSelection()),true); 271 SLOT(clearSelection()),true);
264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 272 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
265 i18n("Delete all selected"),this, 273 i18n("Delete all selected"),this,
266 SLOT(deleteAll()),true); 274 SLOT(deleteAll()),true);
267 mPopupMenu->insertSeparator(); 275 mPopupMenu->insertSeparator();
268 QPopupMenu * exportPO = new QPopupMenu ( this ); 276 QPopupMenu * exportPO = new QPopupMenu ( this );
269 mPopupMenu->insertItem( i18n("Export selected"), exportPO ); 277 mPopupMenu->insertItem( i18n("Export selected"), exportPO );
270 exportPO->insertItem( i18n("As iCal (ics) file..."),this, 278 exportPO->insertItem( i18n("As iCal (ics) file..."),this,
271 SLOT(saveToFile())); 279 SLOT(saveToFile()));
272 exportPO->insertItem( i18n("As vCal (vcs) file..."),this, 280 exportPO->insertItem( i18n("As vCal (vcs) file..."),this,
273 SLOT(saveToFileVCS())); 281 SLOT(saveToFileVCS()));
274 exportPO->insertItem( i18n("Journal/Details..."),this, 282 exportPO->insertItem( i18n("Journal/Details..."),this,
275 SLOT(saveDescriptionToFile())); 283 SLOT(saveDescriptionToFile()));
276 // mPopupMenu->insertSeparator(); 284 // mPopupMenu->insertSeparator();
277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 285 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
278 i18n("Add Categ. to selected..."),this, 286 i18n("Add Categ. to selected..."),this,
279 SLOT(addCat()),true); 287 SLOT(addCat()),true);
280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 288 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
281 i18n("Set Categ. for selected..."),this, 289 i18n("Set Categ. for selected..."),this,
282 SLOT(setCat()),true); 290 SLOT(setCat()),true);
283 //mPopupMenu->insertSeparator(); 291 //mPopupMenu->insertSeparator();
284 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 292 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
285 i18n("Set alarm for selected..."),this, 293 i18n("Set alarm for selected..."),this,
286 SLOT(setAlarm()),true); 294 SLOT(setAlarm()),true);
287 295
288 296
289#ifndef DESKTOP_VERSION 297#ifndef DESKTOP_VERSION
290 mPopupMenu->insertSeparator(); 298 mPopupMenu->insertSeparator();
291 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 299 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
292 i18n("Beam selected via IR"),this, 300 i18n("Beam selected via IR"),this,
293 SLOT(beamSelected()),true); 301 SLOT(beamSelected()),true);
294#endif 302#endif
295 /* 303 /*
296 mPopupMenu = new QPopupMenu; 304 mPopupMenu = new QPopupMenu;
297 mPopupMenu->insertItem(i18n("Edit Event"), this, 305 mPopupMenu->insertItem(i18n("Edit Event"), this,
298 SLOT (editEvent())); 306 SLOT (editEvent()));
299 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 307 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
300 SLOT (deleteEvent())); 308 SLOT (deleteEvent()));
301 mPopupMenu->insertSeparator(); 309 mPopupMenu->insertSeparator();
302 mPopupMenu->insertItem(i18n("Show Dates"), this, 310 mPopupMenu->insertItem(i18n("Show Dates"), this,
303 SLOT(showDates())); 311 SLOT(showDates()));
304 mPopupMenu->insertItem(i18n("Hide Dates"), this, 312 mPopupMenu->insertItem(i18n("Hide Dates"), this,
305 SLOT(hideDates())); 313 SLOT(hideDates()));
306 */ 314 */
307 QObject::connect(mListView,SIGNAL( newEvent()), 315 QObject::connect(mListView,SIGNAL( newEvent()),
308 this,SIGNAL(signalNewEvent())); 316 this,SIGNAL(signalNewEvent()));
309 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 317 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
310 this,SLOT(defaultItemAction(QListViewItem *))); 318 this,SLOT(defaultItemAction(QListViewItem *)));
311 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *, 319 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *,
312 const QPoint &, int )), 320 const QPoint &, int )),
313 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 321 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
314 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 322 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
315 SLOT(processSelectionChange(QListViewItem *))); 323 SLOT(processSelectionChange(QListViewItem *)));
316 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 324 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
317 SIGNAL(showIncidenceSignal(Incidence *)) ); 325 SIGNAL(showIncidenceSignal(Incidence *)) );
318 326
319 readSettings(KOGlobals::config(),"KOListView Layout"); 327 readSettings(KOGlobals::config(),"KOListView Layout");
320} 328}
321 329
322KOListView::~KOListView() 330KOListView::~KOListView()
323{ 331{
324 delete mPopupMenu; 332 delete mPopupMenu;
325} 333}
326QString KOListView::getWhatsThisText(QPoint p) 334QString KOListView::getWhatsThisText(QPoint p)
327{ 335{
328 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 336 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
329 if ( item ) 337 if ( item )
330 return KIncidenceFormatter::instance()->getFormattedText( item->data(), 338 return KIncidenceFormatter::instance()->getFormattedText( item->data(),
331 KOPrefs::instance()->mWTshowDetails, 339 KOPrefs::instance()->mWTshowDetails,
332 KOPrefs::instance()->mWTshowCreated, 340 KOPrefs::instance()->mWTshowCreated,
333 KOPrefs::instance()->mWTshowChanged); 341 KOPrefs::instance()->mWTshowChanged);
334 return i18n("That is the list view" ); 342 return i18n("That is the list view" );
335 343
336} 344}
337 345
338void KOListView::updateList() 346void KOListView::updateList()
339{ 347{
340 // qDebug(" KOListView::updateList() "); 348 // qDebug(" KOListView::updateList() ");
341 349
342} 350}
343 351
344void KOListView::addCat( ) 352void KOListView::addCat( )
345{ 353{
346 setCategories( false ); 354 setCategories( false );
347} 355}
348void KOListView::setCat() 356void KOListView::setCat()
349{ 357{
350 setCategories( true ); 358 setCategories( true );
351} 359}
352void KOListView::setAlarm() 360void KOListView::setAlarm()
353{ 361{
354 KOAlarmPrefs kap( this); 362 KOAlarmPrefs kap( this);
355 if ( !kap.exec() ) 363 if ( !kap.exec() )
356 return; 364 return;
357 365
358 366
359 QStringList itemList; 367 QStringList itemList;
360 QPtrList<KOListViewItem> sel ; 368 QPtrList<KOListViewItem> sel ;
361 QListViewItem *qitem = mListView->firstChild (); 369 QListViewItem *qitem = mListView->firstChild ();
362 while ( qitem ) { 370 while ( qitem ) {
363 if ( qitem->isSelected() ) { 371 if ( qitem->isSelected() ) {
364 Incidence* inc = ((KOListViewItem *) qitem)->data(); 372 Incidence* inc = ((KOListViewItem *) qitem)->data();
365 if ( inc->type() != "Journal" ) { 373 if ( inc->type() != "Journal" ) {
366 if ( inc->type() == "Todo" ) { 374 if ( inc->type() == "Todo" ) {
367 if ( ((Todo*)inc)->hasDueDate() ) 375 if ( ((Todo*)inc)->hasDueDate() )
368 sel.append(((KOListViewItem *)qitem)); 376 sel.append(((KOListViewItem *)qitem));
369 } else 377 } else
370 sel.append(((KOListViewItem *)qitem)); 378 sel.append(((KOListViewItem *)qitem));
371 } 379 }
372 } 380 }
373 qitem = qitem->nextSibling(); 381 qitem = qitem->nextSibling();
374 } 382 }
375 int count = 0; 383 int count = 0;
376 KOListViewItem * item, *temp; 384 KOListViewItem * item, *temp;
377 item = sel.first(); 385 item = sel.first();
378 Incidence* inc; 386 Incidence* inc;
379 while ( item ) { 387 while ( item ) {
380 inc = item->data(); 388 inc = item->data();
381 ++count; 389 ++count;
382 if (kap.mAlarmButton->isChecked()) { 390 if (kap.mAlarmButton->isChecked()) {
383 if (inc->alarms().count() == 0) 391 if (inc->alarms().count() == 0)
384 inc->newAlarm(); 392 inc->newAlarm();
385 QPtrList<Alarm> alarms = inc->alarms(); 393 QPtrList<Alarm> alarms = inc->alarms();
386 Alarm *alarm; 394 Alarm *alarm;
387 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 395 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
388 alarm->setEnabled(true); 396 alarm->setEnabled(true);
389 int j = kap.mAlarmTimeEdit->value()* -60; 397 int j = kap.mAlarmTimeEdit->value()* -60;
390 if (kap.mAlarmIncrCombo->currentItem() == 1) 398 if (kap.mAlarmIncrCombo->currentItem() == 1)
391 j = j * 60; 399 j = j * 60;
392 else if (kap.mAlarmIncrCombo->currentItem() == 2) 400 else if (kap.mAlarmIncrCombo->currentItem() == 2)
393 j = j * (60 * 24); 401 j = j * (60 * 24);
394 alarm->setStartOffset( j ); 402 alarm->setStartOffset( j );
395 403
396 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 404 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
397 alarm->setProcedureAlarm(kap.mAlarmProgram); 405 alarm->setProcedureAlarm(kap.mAlarmProgram);
398 } 406 }
399 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 407 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
400 alarm->setAudioAlarm(kap.mAlarmSound); 408 alarm->setAudioAlarm(kap.mAlarmSound);
401 else 409 else
402 alarm->setType(Alarm::Invalid); 410 alarm->setType(Alarm::Invalid);
403 //alarm->setAudioAlarm("default"); 411 //alarm->setAudioAlarm("default");
404 // TODO: Deal with multiple alarms 412 // TODO: Deal with multiple alarms
405 break; // For now, stop after the first alarm 413 break; // For now, stop after the first alarm
406 } 414 }
407 } else { 415 } else {
408 Alarm* alarm = inc->alarms().first(); 416 Alarm* alarm = inc->alarms().first();
409 if ( alarm ) { 417 if ( alarm ) {
410 alarm->setEnabled(false); 418 alarm->setEnabled(false);
411 alarm->setType(Alarm::Invalid); 419 alarm->setType(Alarm::Invalid);
412 } 420 }
413 } 421 }
414 temp = item; 422 temp = item;
415 item = sel.next(); 423 item = sel.next();
416 mUidDict.remove( inc->uid() ); 424 mUidDict.remove( inc->uid() );
417 delete temp;; 425 delete temp;;
418 addIncidence( inc ); 426 addIncidence( inc );
419 } 427 }
420 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) ); 428 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) );
421 qDebug("KO: Set alarm for %d items", count); 429 qDebug("KO: Set alarm for %d items", count);
422 calendar()->reInitAlarmSettings(); 430 calendar()->reInitAlarmSettings();
423} 431}
424void KOListView::setCategories( bool removeOld ) 432void KOListView::setCategories( bool removeOld )
425{ 433{
426 434
427 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 435 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
428 if (! csd->exec()) { 436 if (! csd->exec()) {
429 delete csd; 437 delete csd;
430 return; 438 return;
431 } 439 }
432 QStringList catList = csd->selectedCategories(); 440 QStringList catList = csd->selectedCategories();
433 delete csd; 441 delete csd;
434 // if ( catList.count() == 0 ) 442 // if ( catList.count() == 0 )
435 // return; 443 // return;
436 catList.sort(); 444 catList.sort();
437 QString categoriesStr = catList.join(","); 445 QString categoriesStr = catList.join(",");
438 int i; 446 int i;
439 QStringList itemList; 447 QStringList itemList;
440 QPtrList<KOListViewItem> sel ; 448 QPtrList<KOListViewItem> sel ;
441 QListViewItem *qitem = mListView->firstChild (); 449 QListViewItem *qitem = mListView->firstChild ();
442 while ( qitem ) { 450 while ( qitem ) {
443 if ( qitem->isSelected() ) { 451 if ( qitem->isSelected() ) {
444 sel.append(((KOListViewItem *)qitem)); 452 sel.append(((KOListViewItem *)qitem));
445 } 453 }
446 qitem = qitem->nextSibling(); 454 qitem = qitem->nextSibling();
447 } 455 }
448 KOListViewItem * item, *temp; 456 KOListViewItem * item, *temp;
449 item = sel.first(); 457 item = sel.first();
450 Incidence* inc; 458 Incidence* inc;
451 while ( item ) { 459 while ( item ) {
452 inc = item->data(); 460 inc = item->data();
453 if ( removeOld ) { 461 if ( removeOld ) {
454 inc->setCategories( categoriesStr ); 462 inc->setCategories( categoriesStr );
455 } else { 463 } else {
456 itemList = QStringList::split (",", inc->categoriesStr() ); 464 itemList = QStringList::split (",", inc->categoriesStr() );
457 for( i = 0; i< catList.count(); ++i ) { 465 for( i = 0; i< catList.count(); ++i ) {
458 if ( !itemList.contains (catList[i])) 466 if ( !itemList.contains (catList[i]))
459 itemList.append( catList[i] ); 467 itemList.append( catList[i] );
460 } 468 }
461 itemList.sort(); 469 itemList.sort();
462 inc->setCategories( itemList.join(",") ); 470 inc->setCategories( itemList.join(",") );
463 } 471 }
464 temp = item; 472 temp = item;
465 item = sel.next(); 473 item = sel.next();
466 mUidDict.remove( inc->uid() ); 474 mUidDict.remove( inc->uid() );
467 delete temp;; 475 delete temp;;
468 addIncidence( inc ); 476 addIncidence( inc );
469 } 477 }
470} 478}
471 479
472void KOListView::beamSelected() 480void KOListView::beamSelected()
473{ 481{
474 int icount = 0; 482 int icount = 0;
475 QPtrList<Incidence> delSel ; 483 QPtrList<Incidence> delSel ;
476 QListViewItem *item = mListView->firstChild (); 484 QListViewItem *item = mListView->firstChild ();
477 while ( item ) { 485 while ( item ) {
478 if ( item->isSelected() ) { 486 if ( item->isSelected() ) {
479 delSel.append(((KOListViewItem *)item)->data()); 487 delSel.append(((KOListViewItem *)item)->data());
480 ++icount; 488 ++icount;
481 } 489 }
482 490
483 item = item->nextSibling(); 491 item = item->nextSibling();
484 } 492 }
485 if ( icount ) { 493 if ( icount ) {
486 emit beamIncidenceList( delSel ); 494 emit beamIncidenceList( delSel );
487 return; 495 return;
488 QString fn ; 496 QString fn ;
489 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 497 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
490 QString mes; 498 QString mes;
491 bool createbup = true; 499 bool createbup = true;
492 if ( createbup ) { 500 if ( createbup ) {
493 QString description = "\n"; 501 QString description = "\n";
494 CalendarLocal* cal = new CalendarLocal(); 502 CalendarLocal* cal = new CalendarLocal();
495 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 503 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
496 Incidence *incidence = delSel.first(); 504 Incidence *incidence = delSel.first();
497 while ( incidence ) { 505 while ( incidence ) {
498 Incidence *in = incidence->clone(); 506 Incidence *in = incidence->clone();
499 description += in->summary() + "\n"; 507 description += in->summary() + "\n";
500 cal->addIncidence( in ); 508 cal->addIncidence( in );
501 incidence = delSel.next(); 509 incidence = delSel.next();
502 } 510 }
503 FileStorage storage( cal, fn, new VCalFormat ); 511 FileStorage storage( cal, fn, new VCalFormat );
504 storage.save(); 512 storage.save();
505 delete cal; 513 delete cal;
506 mes = i18n("KO/Pi: Ready for beaming"); 514 mes = i18n("KO/Pi: Ready for beaming");
507 topLevelWidget()->setCaption(mes); 515 topLevelWidget()->setCaption(mes);
508 516
509#ifndef DESKTOP_VERSION 517#ifndef DESKTOP_VERSION
510 Ir *ir = new Ir( this ); 518 Ir *ir = new Ir( this );
511 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 519 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
512 ir->send( fn, description, "text/x-vCalendar" ); 520 ir->send( fn, description, "text/x-vCalendar" );
513#endif 521#endif
514 } 522 }
515 } 523 }
516} 524}
517void KOListView::beamDone( Ir *ir ) 525void KOListView::beamDone( Ir *ir )
518{ 526{
519#ifndef DESKTOP_VERSION 527#ifndef DESKTOP_VERSION
520 delete ir; 528 delete ir;
521#endif 529#endif
522 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 530 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
523} 531}
524 532
525void KOListView::saveDescriptionToFile() 533void KOListView::saveDescriptionToFile()
526{ 534{
527 535
528 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 536 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
529 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 537 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
530 i18n("Continue"), i18n("Cancel"), 0, 538 i18n("Continue"), i18n("Cancel"), 0,
531 0, 1 ); 539 0, 1 );
532 if ( result != 0 ) { 540 if ( result != 0 ) {
533 return; 541 return;
534 } 542 }
535 int icount = 0; 543 int icount = 0;
536 QPtrList<Incidence> delSel ; 544 QPtrList<Incidence> delSel ;
537 QListViewItem *item = mListView->firstChild (); 545 QListViewItem *item = mListView->firstChild ();
538 while ( item ) { 546 while ( item ) {
539 if ( item->isSelected() ) { 547 if ( item->isSelected() ) {
540 delSel.append(((KOListViewItem *)item)->data()); 548 delSel.append(((KOListViewItem *)item)->data());
541 ++icount; 549 ++icount;
542 } 550 }
543 551
544 item = item->nextSibling(); 552 item = item->nextSibling();
545 } 553 }
546 if ( icount ) { 554 if ( icount ) {
547 QString fn = KOPrefs::instance()->mLastSaveFile; 555 QString fn = KOPrefs::instance()->mLastSaveFile;
548 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 556 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
549 557
550 if ( fn == "" ) 558 if ( fn == "" )
551 return; 559 return;
552 QFileInfo info; 560 QFileInfo info;
553 info.setFile( fn ); 561 info.setFile( fn );
554 QString mes; 562 QString mes;
555 bool createbup = true; 563 bool createbup = true;
556 if ( info. exists() ) { 564 if ( info. exists() ) {
557 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 565 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
558 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 566 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
559 i18n("Overwrite!"), i18n("Cancel"), 0, 567 i18n("Overwrite!"), i18n("Cancel"), 0,
560 0, 1 ); 568 0, 1 );
561 if ( result != 0 ) { 569 if ( result != 0 ) {
562 createbup = false; 570 createbup = false;
563 } 571 }
564 } 572 }
565 if ( createbup ) { 573 if ( createbup ) {
566 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 574 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
567 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 575 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
568 Incidence *incidence = delSel.first(); 576 Incidence *incidence = delSel.first();
569 icount = 0; 577 icount = 0;
570 while ( incidence ) { 578 while ( incidence ) {
571 if ( incidence->type() == "Journal" ) { 579 if ( incidence->type() == "Journal" ) {
572 text += "\n************************************\n"; 580 text += "\n************************************\n";
573 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 581 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
574 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 582 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
575 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 583 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
576 ++icount; 584 ++icount;
577 585
578 } else { 586 } else {
579 if ( !incidence->description().isEmpty() ) { 587 if ( !incidence->description().isEmpty() ) {
580 text += "\n************************************\n"; 588 text += "\n************************************\n";
581 if ( incidence->type() == "Todo" ) 589 if ( incidence->type() == "Todo" )
582 text += i18n("To-Do: "); 590 text += i18n("To-Do: ");
583 text += incidence->summary(); 591 text += incidence->summary();
584 if ( incidence->hasStartDate() ) 592 if ( incidence->hasStartDate() )
585 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 593 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
586 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 594 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
587 if ( !incidence->location().isEmpty() ) 595 if ( !incidence->location().isEmpty() )
588 text += "\n" +i18n("Location: ") + incidence->location(); 596 text += "\n" +i18n("Location: ") + incidence->location();
589 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 597 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
590 ++icount; 598 ++icount;
591 599
592 } 600 }
593 } 601 }
594 incidence = delSel.next(); 602 incidence = delSel.next();
595 } 603 }
596 QFile file( fn ); 604 QFile file( fn );
597 if (!file.open( IO_WriteOnly ) ) { 605 if (!file.open( IO_WriteOnly ) ) {
598 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 606 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
599 return; 607 return;
600 } 608 }
601 QTextStream ts( &file ); 609 QTextStream ts( &file );
602 ts << text; 610 ts << text;
603 file.close(); 611 file.close();
604 //qDebug("%s ", text.latin1()); 612 //qDebug("%s ", text.latin1());
605 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 613 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
606 KOPrefs::instance()->mLastSaveFile = fn; 614 KOPrefs::instance()->mLastSaveFile = fn;
607 topLevelWidget()->setCaption(mes); 615 topLevelWidget()->setCaption(mes);
608 } 616 }
609 } 617 }
610} 618}
611void KOListView::saveToFileVCS() 619void KOListView::saveToFileVCS()
612{ 620{
613 writeToFile( false ); 621 writeToFile( false );
614} 622}
615void KOListView::saveToFile() 623void KOListView::saveToFile()
616{ 624{
617 writeToFile( true ); 625 writeToFile( true );
618} 626}
619void KOListView::writeToFile( bool iCal ) 627void KOListView::writeToFile( bool iCal )
620{ 628{
621 629
622 int icount = 0; 630 int icount = 0;
623 QPtrList<Incidence> delSel ; 631 QPtrList<Incidence> delSel ;
624 QListViewItem *item = mListView->firstChild (); 632 QListViewItem *item = mListView->firstChild ();
625 bool journal = iCal; // warn only for vCal 633 bool journal = iCal; // warn only for vCal
626 while ( item ) { 634 while ( item ) {
627 if ( item->isSelected() ) { 635 if ( item->isSelected() ) {
628 if ( !journal ) 636 if ( !journal )
629 if ( ((KOListViewItem *)item)->data()->type() == "Journal") 637 if ( ((KOListViewItem *)item)->data()->type() == "Journal")
630 journal = true; 638 journal = true;
631 delSel.append(((KOListViewItem *)item)->data()); 639 delSel.append(((KOListViewItem *)item)->data());
632 ++icount; 640 ++icount;
633 } 641 }
634 642
635 item = item->nextSibling(); 643 item = item->nextSibling();
636 } 644 }
637 if ( !iCal && journal ) { 645 if ( !iCal && journal ) {
638 int result = KMessageBox::warningContinueCancel(this, 646 int result = KMessageBox::warningContinueCancel(this,
639 i18n("The journal entries can not be\nexported to a vCalendar file."), 647 i18n("The journal entries can not be\nexported to a vCalendar file."),
640 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 648 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
641 true); 649 true);
642 if (result != KMessageBox::Continue) return; 650 if (result != KMessageBox::Continue) return;
643 } 651 }
644 if ( icount ) { 652 if ( icount ) {
645 QString fn = KOPrefs::instance()->mLastSaveFile; 653 QString fn = KOPrefs::instance()->mLastSaveFile;
646 QString extension; 654 QString extension;
647 if ( iCal ) { 655 if ( iCal ) {
648 if ( fn.right( 4 ).lower() == ".vcs" ) { 656 if ( fn.right( 4 ).lower() == ".vcs" ) {
649 fn = fn.left( fn.length() -3) + "ics"; 657 fn = fn.left( fn.length() -3) + "ics";
650 } 658 }
651 } else { 659 } else {
652 if ( fn.right( 4 ).lower() == ".ics" ) { 660 if ( fn.right( 4 ).lower() == ".ics" ) {
653 fn = fn.left( fn.length() -3) + "vcs"; 661 fn = fn.left( fn.length() -3) + "vcs";
654 } 662 }
655 } 663 }
656 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 664 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
657 665
658 if ( fn == "" ) 666 if ( fn == "" )
659 return; 667 return;
660 QFileInfo info; 668 QFileInfo info;
661 info.setFile( fn ); 669 info.setFile( fn );
662 QString mes; 670 QString mes;
663 bool createbup = true; 671 bool createbup = true;
664 if ( info. exists() ) { 672 if ( info. exists() ) {
665 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 673 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
666 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 674 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
667 i18n("Overwrite!"), i18n("Cancel"), 0, 675 i18n("Overwrite!"), i18n("Cancel"), 0,
668 0, 1 ); 676 0, 1 );
669 if ( result != 0 ) { 677 if ( result != 0 ) {
670 createbup = false; 678 createbup = false;
671 } 679 }
672 } 680 }
673 if ( createbup ) { 681 if ( createbup ) {
674 CalendarLocal cal; 682 CalendarLocal cal;
675 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 683 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
676 Incidence *incidence = delSel.first(); 684 Incidence *incidence = delSel.first();
677 while ( incidence ) { 685 while ( incidence ) {
678 cal.addIncidence( incidence->clone() ); 686 cal.addIncidence( incidence->clone() );
679 incidence = delSel.next(); 687 incidence = delSel.next();
680 } 688 }
681 if ( iCal ) { 689 if ( iCal ) {
682 ICalFormat format; 690 ICalFormat format;
683 format.save( &cal, fn ); 691 format.save( &cal, fn );
684 } else { 692 } else {
685 693
686 VCalFormat format; 694 VCalFormat format;
687 format.save( &cal, fn ); 695 format.save( &cal, fn );
688 } 696 }
689 mes = i18n("KO/Pi:Saved %1").arg(fn ); 697 mes = i18n("KO/Pi:Saved %1").arg(fn );
690 KOPrefs::instance()->mLastSaveFile = fn; 698 KOPrefs::instance()->mLastSaveFile = fn;
691 topLevelWidget()->setCaption(mes); 699 topLevelWidget()->setCaption(mes);
692 } 700 }
693 } 701 }
694} 702}
695void KOListView::deleteAll() 703void KOListView::deleteAll()
696{ 704{
697 int icount = 0; 705 int icount = 0;
698 QPtrList<Incidence> delSel ; 706 QPtrList<Incidence> delSel ;
699 QListViewItem *item = mListView->firstChild (); 707 QListViewItem *item = mListView->firstChild ();
700 while ( item ) { 708 while ( item ) {
701 if ( item->isSelected() ) { 709 if ( item->isSelected() ) {
702 delSel.append(((KOListViewItem *)item)->data()); 710 delSel.append(((KOListViewItem *)item)->data());
703 ++icount; 711 ++icount;
704 } 712 }
705 713
706 item = item->nextSibling(); 714 item = item->nextSibling();
707 } 715 }
708 if ( icount ) { 716 if ( icount ) {
709 Incidence *incidence = delSel.first(); 717 Incidence *incidence = delSel.first();
710 Incidence *toDelete; 718 Incidence *toDelete;
711 KOPrefs *p = KOPrefs::instance(); 719 KOPrefs *p = KOPrefs::instance();
712 bool confirm = p->mConfirm; 720 bool confirm = p->mConfirm;
713 QString mess; 721 QString mess;
714 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 722 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
715 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { 723 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) {
716 p->mConfirm = false; 724 p->mConfirm = false;
717 int delCounter = 0; 725 int delCounter = 0;
718 QDialog dia ( this, "p-dialog", true ); 726 QDialog dia ( this, "p-dialog", true );
719 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 727 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
720 QVBoxLayout lay( &dia ); 728 QVBoxLayout lay( &dia );
721 lay.setMargin(7); 729 lay.setMargin(7);
722 lay.setSpacing(7); 730 lay.setSpacing(7);
723 lay.addWidget( &lab); 731 lay.addWidget( &lab);
724 QProgressBar bar( icount, &dia ); 732 QProgressBar bar( icount, &dia );
725 lay.addWidget( &bar); 733 lay.addWidget( &bar);
726 int w = 220; 734 int w = 220;
727 int h = 50; 735 int h = 50;
728 int dw = QApplication::desktop()->width(); 736 int dw = QApplication::desktop()->width();
729 int dh = QApplication::desktop()->height(); 737 int dh = QApplication::desktop()->height();
730 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 738 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
731 //dia.resize( 240,50 ); 739 //dia.resize( 240,50 );
732 dia.show(); 740 dia.show();
733 741
734 while ( incidence ) { 742 while ( incidence ) {
735 bar.setProgress( delCounter ); 743 bar.setProgress( delCounter );
736 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 744 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
737 dia.setCaption( mess ); 745 dia.setCaption( mess );
738 qApp->processEvents(); 746 qApp->processEvents();
739 toDelete = (incidence); 747 toDelete = (incidence);
740 incidence = delSel.next(); 748 incidence = delSel.next();
741 emit deleteIncidenceSignal(toDelete ); 749 emit deleteIncidenceSignal(toDelete );
742 if ( dia.result() != 0 ) 750 if ( dia.result() != 0 )
743 break; 751 break;
744 752
745 } 753 }
746 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 754 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
747 topLevelWidget ()->setCaption( mess ); 755 topLevelWidget ()->setCaption( mess );
748 p->mConfirm = confirm; 756 p->mConfirm = confirm;
749 } 757 }
750 } 758 }
751 759
752 760
753} 761}
754int KOListView::maxDatesHint() 762int KOListView::maxDatesHint()
755{ 763{
756 return 0; 764 return 0;
757} 765}
758 766
759int KOListView::currentDateCount() 767int KOListView::currentDateCount()
760{ 768{
761 return 0; 769 return 0;
762} 770}
763 771
764QPtrList<Incidence> KOListView::selectedIncidences() 772QPtrList<Incidence> KOListView::selectedIncidences()
765{ 773{
766 QPtrList<Incidence> eventList; 774 QPtrList<Incidence> eventList;
767 QListViewItem *item = mListView->firstChild (); 775 QListViewItem *item = mListView->firstChild ();
768 while ( item ) { 776 while ( item ) {
769 if ( item->isSelected() ) { 777 if ( item->isSelected() ) {
770 eventList.append(((KOListViewItem *)item)->data()); 778 eventList.append(((KOListViewItem *)item)->data());
771 } 779 }
772 780
773 item = item->nextSibling(); 781 item = item->nextSibling();
774 } 782 }
775 783
776 // // QListViewItem *item = mListView->selectedItem(); 784 // // QListViewItem *item = mListView->selectedItem();
777 //if (item) eventList.append(((KOListViewItem *)item)->data()); 785 //if (item) eventList.append(((KOListViewItem *)item)->data());
778 786
779 return eventList; 787 return eventList;
780} 788}
781 789
782DateList KOListView::selectedDates() 790DateList KOListView::selectedDates()
783{ 791{
784 DateList eventList; 792 DateList eventList;
785 return eventList; 793 return eventList;
786} 794}
787 795
788void KOListView::showDates(bool show) 796void KOListView::showDates(bool show)
789{ 797{
790 // Shouldn't we set it to a value greater 0? When showDates is called with 798 // Shouldn't we set it to a value greater 0? When showDates is called with
791 // show == true at first, then the columnwidths are set to zero. 799 // show == true at first, then the columnwidths are set to zero.
792 static int oldColWidth1 = 0; 800 static int oldColWidth1 = 0;
793 static int oldColWidth3 = 0; 801 static int oldColWidth3 = 0;
794 802
795 if (!show) { 803 if (!show) {
796 oldColWidth1 = mListView->columnWidth(1); 804 oldColWidth1 = mListView->columnWidth(1);
797 oldColWidth3 = mListView->columnWidth(3); 805 oldColWidth3 = mListView->columnWidth(3);
798 mListView->setColumnWidth(1, 0); 806 mListView->setColumnWidth(1, 0);
799 mListView->setColumnWidth(3, 0); 807 mListView->setColumnWidth(3, 0);
800 } else { 808 } else {
801 mListView->setColumnWidth(1, oldColWidth1); 809 mListView->setColumnWidth(1, oldColWidth1);
802 mListView->setColumnWidth(3, oldColWidth3); 810 mListView->setColumnWidth(3, oldColWidth3);
803 } 811 }
804 mListView->repaint(); 812 mListView->repaint();
805} 813}
806 814
807void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 815void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
808 const QDate &td) 816 const QDate &td)
809{ 817{
810#ifndef KORG_NOPRINTER 818#ifndef KORG_NOPRINTER
811 calPrinter->preview(CalPrinter::Day, fd, td); 819 calPrinter->preview(CalPrinter::Day, fd, td);
812#endif 820#endif
813} 821}
814 822
815void KOListView::showDates() 823void KOListView::showDates()
816{ 824{
817 showDates(true); 825 showDates(true);
818} 826}
819 827
820void KOListView::hideDates() 828void KOListView::hideDates()
821{ 829{
822 showDates(false); 830 showDates(false);
823} 831}
824void KOListView::resetFocus() 832void KOListView::resetFocus()
825{ 833{
826 mListView->setFocus(); 834 mListView->setFocus();
827} 835}
828void KOListView::updateView() 836void KOListView::updateView()
829{ 837{
830 mListView->setFocus(); 838 mListView->setFocus();
831 if ( mListView->firstChild () ) 839 if ( mListView->firstChild () )
832 mListView->setCurrentItem( mListView->firstChild () ); 840 mListView->setCurrentItem( mListView->firstChild () );
833} 841}
834void KOListView::updateConfig() 842void KOListView::updateConfig()
835{ 843{
836 844
837 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 845 mListView->setFont ( KOPrefs::instance()->mListViewFont );
838 updateView(); 846 updateView();
839 847
840} 848}
841void KOListView::setStartDate(const QDate &start) 849void KOListView::setStartDate(const QDate &start)
842{ 850{
843 mStartDate = start; 851 mStartDate = start;
844} 852}
845 853
846void KOListView::showDates(const QDate &start, const QDate &end) 854void KOListView::showDates(const QDate &start, const QDate &end)
847{ 855{
848 clear(); 856 clear();
849 mStartDate = start; 857 mStartDate = start;
850 QDate date = start; 858 QDate date = start;
851 QPtrList<Journal> j_list; 859 QPtrList<Journal> j_list;
852 while( date <= end ) { 860 while( date <= end ) {
853 addEvents(calendar()->events(date)); 861 addEvents(calendar()->events(date));
854 addTodos(calendar()->todos(date)); 862 addTodos(calendar()->todos(date));
855 Journal* jo = calendar()->journal(date); 863 Journal* jo = calendar()->journal(date);
856 if ( jo ) 864 if ( jo )
857 j_list.append( jo ); 865 j_list.append( jo );
858 date = date.addDays( 1 ); 866 date = date.addDays( 1 );
859 } 867 }
860 addJournals(j_list); 868 addJournals(j_list);
861 emit incidenceSelected( 0 ); 869 emit incidenceSelected( 0 );
862 updateView(); 870 updateView();
863 871
864} 872}
865 873
866void KOListView::addEvents(QPtrList<Event> eventList) 874void KOListView::addEvents(QPtrList<Event> eventList)
867{ 875{
868 Event *ev; 876 Event *ev;
869 for(ev = eventList.first(); ev; ev = eventList.next()) { 877 for(ev = eventList.first(); ev; ev = eventList.next()) {
870 addIncidence(ev); 878 addIncidence(ev);
871 } 879 }
872 if ( !mListView->currentItem() ){ 880 if ( !mListView->currentItem() ){
873 updateView(); 881 updateView();
874 } 882 }
875} 883}
876 884
877void KOListView::addTodos(QPtrList<Todo> eventList) 885void KOListView::addTodos(QPtrList<Todo> eventList)
878{ 886{
879 Todo *ev; 887 Todo *ev;
880 for(ev = eventList.first(); ev; ev = eventList.next()) { 888 for(ev = eventList.first(); ev; ev = eventList.next()) {
881 addIncidence(ev); 889 addIncidence(ev);
882 } 890 }
883 if ( !mListView->currentItem() ){ 891 if ( !mListView->currentItem() ){
884 updateView(); 892 updateView();
885 } 893 }
886} 894}
887void KOListView::addJournals(QPtrList<Journal> eventList) 895void KOListView::addJournals(QPtrList<Journal> eventList)
888{ 896{
889 Journal *ev; 897 Journal *ev;
890 for(ev = eventList.first(); ev; ev = eventList.next()) { 898 for(ev = eventList.first(); ev; ev = eventList.next()) {
891 addIncidence(ev); 899 addIncidence(ev);
892 } 900 }
893 if ( !mListView->currentItem() ){ 901 if ( !mListView->currentItem() ){
894 updateView(); 902 updateView();
895 } 903 }
896} 904}
897 905
898void KOListView::addIncidence(Incidence *incidence) 906void KOListView::addIncidence(Incidence *incidence)
899{ 907{
900 if ( mUidDict.find( incidence->uid() ) ) return; 908 if ( mUidDict.find( incidence->uid() ) ) return;
901 909
902 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 910 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
903 mUidDict.insert( incidence->uid(), incidence ); 911 mUidDict.insert( incidence->uid(), incidence );
904 912
905 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 913 KOListViewItem *item = new KOListViewItem( incidence, mListView );
906 ListItemVisitor v(item, mStartDate ); 914 ListItemVisitor v(item, mStartDate );
907 if (incidence->accept(v)) return; 915 if (incidence->accept(v)) return;
908 else delete item; 916 else delete item;
909 //qDebug("delete item "); 917 //qDebug("delete item ");
910} 918}
911 919
912void KOListView::showEvents(QPtrList<Event> eventList) 920void KOListView::showEvents(QPtrList<Event> eventList)
913{ 921{
914 clear(); 922 clear();
915 923
916 addEvents(eventList); 924 addEvents(eventList);
917 925
918 // After new creation of list view no events are selected. 926 // After new creation of list view no events are selected.
919 emit incidenceSelected( 0 ); 927 emit incidenceSelected( 0 );
920} 928}
921int KOListView::count() 929int KOListView::count()
922{ 930{
923 return mListView->childCount(); 931 return mListView->childCount();
924} 932}
925 933
926void KOListView::changeEventDisplay(Event *event, int action) 934void KOListView::changeEventDisplay(Event *event, int action)
927{ 935{
928 KOListViewItem *item; 936 KOListViewItem *item;
929 937
930 switch(action) { 938 switch(action) {
931 case KOGlobals::EVENTADDED: 939 case KOGlobals::EVENTADDED:
932 addIncidence( event ); 940 addIncidence( event );
933 break; 941 break;
934 case KOGlobals::EVENTEDITED: 942 case KOGlobals::EVENTEDITED:
935 item = getItemForEvent(event); 943 item = getItemForEvent(event);
936 if (item) { 944 if (item) {
937 mUidDict.remove( event->uid() ); 945 mUidDict.remove( event->uid() );
938 delete item; 946 delete item;
939 addIncidence( event ); 947 addIncidence( event );
940 } 948 }
941 break; 949 break;
942 case KOGlobals::EVENTDELETED: 950 case KOGlobals::EVENTDELETED:
943 item = getItemForEvent(event); 951 item = getItemForEvent(event);
944 if (item) { 952 if (item) {
945 mUidDict.remove( event->uid() ); 953 mUidDict.remove( event->uid() );
946 delete item; 954 delete item;
947 } 955 }
948 break; 956 break;
949 default: 957 default:
950 ; 958 ;
951 } 959 }
952} 960}
953 961
954KOListViewItem *KOListView::getItemForEvent(Event *event) 962KOListViewItem *KOListView::getItemForEvent(Event *event)
955{ 963{
956 KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); 964 KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
957 while (item) { 965 while (item) {
958 if (item->data() == event) return item; 966 if (item->data() == event) return item;
959 item = (KOListViewItem *)item->nextSibling(); 967 item = (KOListViewItem *)item->nextSibling();
960 } 968 }
961 return 0; 969 return 0;
962} 970}
963 971
964void KOListView::defaultItemAction(QListViewItem *i) 972void KOListView::defaultItemAction(QListViewItem *i)
965{ 973{
966 KOListViewItem *item = static_cast<KOListViewItem *>( i ); 974 KOListViewItem *item = static_cast<KOListViewItem *>( i );
967 if ( item ) defaultAction( item->data() ); 975 if ( item ) defaultAction( item->data() );
968 976
969} 977}
970 978
971void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) 979void KOListView::popupMenu(QListViewItem *item,const QPoint &,int)
972{ 980{
973 mActiveItem = (KOListViewItem *)item; 981 mActiveItem = (KOListViewItem *)item;
974 if (mActiveItem) { 982 if (mActiveItem) {
975 Incidence *incidence = mActiveItem->data(); 983 Incidence *incidence = mActiveItem->data();
976 mPopupMenu->showIncidencePopup(incidence); 984 mPopupMenu->showIncidencePopup(incidence);
977 985
978 /* 986 /*
979 if ( incidence && incidence->type() == "Event" ) { 987 if ( incidence && incidence->type() == "Event" ) {
980 Event *event = static_cast<Event *>( incidence ); 988 Event *event = static_cast<Event *>( incidence );
981 mPopupMenu->showEventPopup(event); 989 mPopupMenu->showEventPopup(event);
982 } 990 }
983 */ 991 */
984 } 992 }
985} 993}
986 994
987void KOListView::readSettings(KConfig *config, QString setting) 995void KOListView::readSettings(KConfig *config, QString setting)
988{ 996{
989 // qDebug("KOListView::readSettings "); 997 // qDebug("KOListView::readSettings ");
990 mListView->restoreLayout(config,setting); 998 mListView->restoreLayout(config,setting);
991} 999}
992 1000
993void KOListView::writeSettings(KConfig *config, QString setting) 1001void KOListView::writeSettings(KConfig *config, QString setting)
994{ 1002{
995 // qDebug("KOListView::writeSettings "); 1003 // qDebug("KOListView::writeSettings ");
996 mListView->saveLayout(config, setting); 1004 mListView->saveLayout(config, setting);
997} 1005}
998 1006
999void KOListView::processSelectionChange(QListViewItem *) 1007void KOListView::processSelectionChange(QListViewItem *)
1000{ 1008{
1001 1009
1002 KOListViewItem *item = 1010 KOListViewItem *item =
1003 static_cast<KOListViewItem *>( mListView->currentItem() ); 1011 static_cast<KOListViewItem *>( mListView->currentItem() );
1004 1012
1005 if ( !item ) { 1013 if ( !item ) {
1006 emit incidenceSelected( 0 ); 1014 emit incidenceSelected( 0 );
1007 } else { 1015 } else {
1008 emit incidenceSelected( item->data() ); 1016 emit incidenceSelected( item->data() );
1009 } 1017 }
1010} 1018}
1011 1019
1012void KOListView::clearSelection() 1020void KOListView::clearSelection()
1013{ 1021{
1014 mListView->selectAll( false ); 1022 mListView->selectAll( false );
1015} 1023}
1016void KOListView::allSelection() 1024void KOListView::allSelection()
1017{ 1025{
1018 mListView->selectAll( true ); 1026 mListView->selectAll( true );
1019} 1027}
1020 1028
1021void KOListView::clear() 1029void KOListView::clear()
1022{ 1030{
1023 mListView->clear(); 1031 mListView->clear();
1024 mUidDict.clear(); 1032 mUidDict.clear();
1025} 1033}
1026 1034
1027Incidence* KOListView::currentItem() 1035Incidence* KOListView::currentItem()
1028{ 1036{
1029 if ( mListView->currentItem() ) 1037 if ( mListView->currentItem() )
1030 return ((KOListViewItem*) mListView->currentItem())->data(); 1038 return ((KOListViewItem*) mListView->currentItem())->data();
1031 return 0; 1039 return 0;
1032} 1040}
1033void KOListView::keyPressEvent ( QKeyEvent *e) 1041void KOListView::keyPressEvent ( QKeyEvent *e)
1034{ 1042{
1035 1043
1036 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { 1044 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) {
1037 deleteAll(); 1045 deleteAll();
1038 return; 1046 return;
1039 } 1047 }
1040 1048
1041 e->ignore(); 1049 e->ignore();
1042} 1050}
1043void KOListViewListView::keyPressEvent ( QKeyEvent *e) 1051void KOListViewListView::keyPressEvent ( QKeyEvent *e)
1044{ 1052{
1045 1053
1046 switch ( e->key() ) { 1054 switch ( e->key() ) {
1047 case Qt::Key_Down: 1055 case Qt::Key_Down:
1048 if ( e->state() == ShiftButton ) { 1056 if ( e->state() == ShiftButton ) {
1049 QListViewItem* cn = currentItem(); 1057 QListViewItem* cn = currentItem();
1050 if ( !cn ) 1058 if ( !cn )
1051 cn = firstChild(); 1059 cn = firstChild();
1052 if ( !cn ) 1060 if ( !cn )
1053 return; 1061 return;
1054 while ( cn->nextSibling() ) 1062 while ( cn->nextSibling() )
1055 cn = cn->nextSibling(); 1063 cn = cn->nextSibling();
1056 setCurrentItem ( cn ); 1064 setCurrentItem ( cn );
1057 ensureItemVisible ( cn ); 1065 ensureItemVisible ( cn );
1058 1066
1059 e->accept(); 1067 e->accept();
1060 return; 1068 return;
1061 } 1069 }
1062 if ( e->state() == ControlButton ) { 1070 if ( e->state() == ControlButton ) {
1063 int count = childCount (); 1071 int count = childCount ();
1064 int jump = count / 5; 1072 int jump = count / 5;
1065 QListViewItem* cn; 1073 QListViewItem* cn;
1066 cn = currentItem(); 1074 cn = currentItem();
1067 if ( ! cn ) 1075 if ( ! cn )
1068 return; 1076 return;
1069 if ( jump == 0 ) 1077 if ( jump == 0 )
1070 jump = 1; 1078 jump = 1;
1071 while ( jump && cn->nextSibling() ) { 1079 while ( jump && cn->nextSibling() ) {
1072 cn = cn->nextSibling(); 1080 cn = cn->nextSibling();
1073 --jump; 1081 --jump;
1074 } 1082 }
1075 setCurrentItem ( cn ); 1083 setCurrentItem ( cn );
1076 ensureItemVisible ( cn ); 1084 ensureItemVisible ( cn );
1077 1085
1078 } else 1086 } else
1079 QListView::keyPressEvent ( e ) ; 1087 QListView::keyPressEvent ( e ) ;
1080 e->accept(); 1088 e->accept();
1081 break; 1089 break;
1082 1090
1083 case Qt::Key_Up: 1091 case Qt::Key_Up:
1084 if ( e->state() == ShiftButton ) { 1092 if ( e->state() == ShiftButton ) {
1085 QListViewItem* cn = firstChild(); 1093 QListViewItem* cn = firstChild();
1086 if ( cn ) { 1094 if ( cn ) {
1087 setCurrentItem ( cn ); 1095 setCurrentItem ( cn );
1088 ensureItemVisible ( cn ); 1096 ensureItemVisible ( cn );
1089 } 1097 }
1090 e->accept(); 1098 e->accept();
1091 return; 1099 return;
1092 } 1100 }
1093 if ( e->state() == ControlButton ) { 1101 if ( e->state() == ControlButton ) {
1094 int count = childCount (); 1102 int count = childCount ();
1095 int jump = count / 5; 1103 int jump = count / 5;
1096 QListViewItem* cn; 1104 QListViewItem* cn;
1097 cn = currentItem(); 1105 cn = currentItem();
1098 if ( ! cn ) 1106 if ( ! cn )
1099 return; 1107 return;
1100 if ( jump == 0 ) 1108 if ( jump == 0 )
1101 jump = 1; 1109 jump = 1;
1102 while ( jump && cn->itemAbove ()) { 1110 while ( jump && cn->itemAbove ()) {
1103 cn = cn->itemAbove (); 1111 cn = cn->itemAbove ();
1104 --jump; 1112 --jump;
1105 } 1113 }
1106 setCurrentItem ( cn ); 1114 setCurrentItem ( cn );
1107 ensureItemVisible ( cn ); 1115 ensureItemVisible ( cn );
1108 } else 1116 } else
1109 QListView::keyPressEvent ( e ) ; 1117 QListView::keyPressEvent ( e ) ;
1110 e->accept(); 1118 e->accept();
1111 break; 1119 break;
1112 case Qt::Key_I: { 1120 case Qt::Key_I: {
1113 QListViewItem* cn; 1121 QListViewItem* cn;
1114 cn = currentItem(); 1122 cn = currentItem();
1115 if ( cn ) { 1123 if ( cn ) {
1116 KOListViewItem* ci = (KOListViewItem*)( cn ); 1124 KOListViewItem* ci = (KOListViewItem*)( cn );
1117 if ( ci ){ 1125 if ( ci ){
1118 //emit showIncidence( ci->data()); 1126 //emit showIncidence( ci->data());
1119 cn = cn->nextSibling(); 1127 cn = cn->nextSibling();
1120 if ( cn ) { 1128 if ( cn ) {
1121 setCurrentItem ( cn ); 1129 setCurrentItem ( cn );
1122 ensureItemVisible ( cn ); 1130 ensureItemVisible ( cn );
1123 } 1131 }
1124 emit showIncidence( ci->data()); 1132 emit showIncidence( ci->data());
1125 } 1133 }
1126 } 1134 }
1127 e->accept(); 1135 e->accept();
1128 } 1136 }
1129 break; 1137 break;
1130 case Qt::Key_Return: 1138 case Qt::Key_Return:
1131 case Qt::Key_Enter: 1139 case Qt::Key_Enter:
1132 { 1140 {
1133 QListViewItem* cn; 1141 QListViewItem* cn;
1134 cn = currentItem(); 1142 cn = currentItem();
1135 if ( cn ) { 1143 if ( cn ) {
1136 KOListViewItem* ci = (KOListViewItem*)( cn ); 1144 KOListViewItem* ci = (KOListViewItem*)( cn );
1137 if ( ci ){ 1145 if ( ci ){
1138 if ( e->state() == ShiftButton ) 1146 if ( e->state() == ShiftButton )
1139 ci->setSelected( false ); 1147 ci->setSelected( false );
1140 else 1148 else
1141 ci->setSelected( true ); 1149 ci->setSelected( true );
1142 cn = cn->nextSibling(); 1150 cn = cn->nextSibling();
1143 if ( cn ) { 1151 if ( cn ) {
1144 setCurrentItem ( cn ); 1152 setCurrentItem ( cn );
1145 ensureItemVisible ( cn ); 1153 ensureItemVisible ( cn );
1146 } 1154 }
1147 } 1155 }
1148 } 1156 }
1149 e->accept(); 1157 e->accept();
1150 } 1158 }
1151 break; 1159 break;
1152 default: 1160 default:
1153 e->ignore(); 1161 e->ignore();
1154 } 1162 }
1155} 1163}
1156KOListViewListView::KOListViewListView(KOListView * lv ) 1164KOListViewListView::KOListViewListView(KOListView * lv )
1157 : KListView( lv, "kolistlistview", false ) 1165 : KListView( lv, "kolistlistview", false )
1158{ 1166{
1159 mPopupTimer = new QTimer(this); 1167 mPopupTimer = new QTimer(this);
1160 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 1168 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
1161#ifndef DESKTOP_VERSION 1169#ifndef DESKTOP_VERSION
1162 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 1170 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
1163#endif 1171#endif
1164 setSelectionMode( QListView::Multi ); 1172 setSelectionMode( QListView::Multi );
1165 setMultiSelection( true); 1173 setMultiSelection( true);
1166} 1174}
1167void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1175void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1168{ 1176{
1169 if (!e) return; 1177 if (!e) return;
1170 QPoint vp = contentsToViewport(e->pos()); 1178 QPoint vp = contentsToViewport(e->pos());
1171 QListViewItem *item = itemAt(vp); 1179 QListViewItem *item = itemAt(vp);
1172 if (!item) { 1180 if (!item) {
1173 emit newEvent(); 1181 emit newEvent();
1174 return; 1182 return;
1175 } 1183 }
1176 KListView::contentsMouseDoubleClickEvent(e); 1184 KListView::contentsMouseDoubleClickEvent(e);
1177} 1185}
1178#if 0 1186#if 0
1179void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1187void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1180{ 1188{
1181 //qDebug("contentsMousePressEvent++++ "); 1189 //qDebug("contentsMousePressEvent++++ ");
1182 KListView::contentsMousePressEvent( e ); 1190 KListView::contentsMousePressEvent( e );
1183 if ( e->button() == RightButton ) { 1191 if ( e->button() == RightButton ) {
1184 QListViewItem* ci = currentItem(); 1192 QListViewItem* ci = currentItem();
1185 clearSelection () ; 1193 clearSelection () ;
1186 if ( ci ) 1194 if ( ci )
1187 ci->setSelected( true ); 1195 ci->setSelected( true );
1188 } 1196 }
1189} 1197}
1190void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1198void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1191{ 1199{
1192 KListView::contentsMouseReleaseEvent(e); 1200 KListView::contentsMouseReleaseEvent(e);
1193} 1201}
1194void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1202void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1195{ 1203{
1196 KListView::contentsMouseMoveEvent(e); 1204 KListView::contentsMouseMoveEvent(e);
1197} 1205}
1198#endif 1206#endif
1199void KOListViewListView::popupMenu() 1207void KOListViewListView::popupMenu()
1200{ 1208{
1201 mPopupTimer->stop(); 1209 mPopupTimer->stop();
1202 //qDebug("HUUUUUUUUUUUUUUUUUUUU "); 1210 //qDebug("HUUUUUUUUUUUUUUUUUUUU ");
1203 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton ); 1211 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton );
1204 QApplication::postEvent( this->viewport(), e ); 1212 QApplication::postEvent( this->viewport(), e );
1205} 1213}
1206void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1214void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1207{ 1215{
1208 //qDebug("contentsMousePressEvent++++ "); 1216 //qDebug("contentsMousePressEvent++++ ");
1209 mYMousePos = mapToGlobal( (e->pos())).y(); 1217 mYMousePos = mapToGlobal( (e->pos())).y();
1210 if ( e->button() == LeftButton ) { 1218 if ( e->button() == LeftButton ) {
1211 mPopupTimer->start( 600 ); 1219 mPopupTimer->start( 600 );
1212 mEventPos = e->pos(); 1220 mEventPos = e->pos();
1213 mEventGlobalPos = e->globalPos(); 1221 mEventGlobalPos = e->globalPos();
1214 } 1222 }
1215 KListView::contentsMousePressEvent( e ); 1223 KListView::contentsMousePressEvent( e );
1216 if ( e->button() == RightButton ) { 1224 if ( e->button() == RightButton ) {
1217 QListViewItem* ci = currentItem(); 1225 QListViewItem* ci = currentItem();
1218 //clearSelection(); 1226 //clearSelection();
1219 if ( ci ) 1227 if ( ci )
1220 ci->setSelected( true ); 1228 ci->setSelected( true );
1221 } 1229 }
1222} 1230}
1223void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1231void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1224{ 1232{
1225 mPopupTimer->stop(); 1233 mPopupTimer->stop();
1226 KListView::contentsMouseReleaseEvent(e); 1234 KListView::contentsMouseReleaseEvent(e);
1227} 1235}
1228void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1236void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1229{ 1237{
1230 // qDebug("contentsMouseMoveEv....... "); 1238 // qDebug("contentsMouseMoveEv....... ");
1231 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); 1239 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() );
1232 int diff = mYMousePos - mapToGlobal( (e->pos())).y(); 1240 int diff = mYMousePos - mapToGlobal( (e->pos())).y();
1233 if ( diff < 0 ) diff = -diff; 1241 if ( diff < 0 ) diff = -diff;
1234 if ( diff > 15 ) 1242 if ( diff > 15 )
1235 mPopupTimer->stop(); 1243 mPopupTimer->stop();
1236 else { 1244 else {
1237 mEventPos = e->pos(); 1245 mEventPos = e->pos();
1238 mEventGlobalPos = e->globalPos(); 1246 mEventGlobalPos = e->globalPos();
1239 } 1247 }
1240 KListView::contentsMouseMoveEvent(e); 1248 KListView::contentsMouseMoveEvent(e);
1241} 1249}
1242 1250
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 0a315cb..01cf0ff 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1413 +1,1423 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qheader.h> 25#include <qheader.h>
26#include <qcursor.h> 26#include <qcursor.h>
27#include <qwhatsthis.h> 27#include <qwhatsthis.h>
28 28
29#include <qvbox.h> 29#include <qvbox.h>
30#include <kdebug.h> 30#include <kdebug.h>
31#include "koprefs.h" 31#include "koprefs.h"
32#include <klocale.h> 32#include <klocale.h>
33#include <kglobal.h> 33#include <kglobal.h>
34#include <kiconloader.h> 34#include <kiconloader.h>
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <libkcal/icaldrag.h> 37#include <libkcal/icaldrag.h>
38#include <libkcal/vcaldrag.h> 38#include <libkcal/vcaldrag.h>
39#include <libkcal/calfilter.h> 39#include <libkcal/calfilter.h>
40#include <libkcal/dndfactory.h> 40#include <libkcal/dndfactory.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <kresources/resourceselectdialog.h> 43#include <kresources/resourceselectdialog.h>
44#include <libkcal/kincidenceformatter.h> 44#include <libkcal/kincidenceformatter.h>
45#ifndef DESKTOP_VERSION 45#ifndef DESKTOP_VERSION
46#include <qpe/qpeapplication.h> 46#include <qpe/qpeapplication.h>
47#else 47#else
48#include <qapplication.h> 48#include <qapplication.h>
49#endif 49#endif
50#ifndef KORG_NOPRINTER 50#ifndef KORG_NOPRINTER
51#include "calprinter.h" 51#include "calprinter.h"
52#endif 52#endif
53#include "docprefs.h" 53#include "docprefs.h"
54 54
55#include "kotodoview.h" 55#include "kotodoview.h"
56using namespace KOrg; 56using namespace KOrg;
57 57
58 58
59class KOTodoViewWhatsThis :public QWhatsThis 59class KOTodoViewWhatsThis :public QWhatsThis
60{ 60{
61public: 61public:
62 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 62 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
63 63
64protected: 64protected:
65 virtual QString text( const QPoint& p) 65 virtual QString text( const QPoint& p)
66 { 66 {
67 return _view->getWhatsThisText(p) ; 67 return _view->getWhatsThisText(p) ;
68 } 68 }
69private: 69private:
70 QWidget* _wid; 70 QWidget* _wid;
71 KOTodoView * _view; 71 KOTodoView * _view;
72}; 72};
73 73
74KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 74KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
75 const char *name) : 75 const char *name) :
76 KListView(parent,name) 76 KListView(parent,name)
77{ 77{
78 mName = QString ( name ); 78 mName = QString ( name );
79 mCalendar = calendar; 79 mCalendar = calendar;
80#ifndef DESKTOP_VERSION 80#ifndef DESKTOP_VERSION
81 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 81 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
82#endif 82#endif
83 mOldCurrent = 0; 83 mOldCurrent = 0;
84 mMousePressed = false; 84 mMousePressed = false;
85 85
86 setAcceptDrops(true); 86 setAcceptDrops(true);
87 viewport()->setAcceptDrops(true); 87 viewport()->setAcceptDrops(true);
88 int size = 16; 88 int size = 16;
89 if (qApp->desktop()->width() < 300 ) 89 if (qApp->desktop()->width() < 300 )
90 size = 12; 90 size = 12;
91 setTreeStepSize( size + 6 ); 91 setTreeStepSize( size + 6 );
92 92
93} 93}
94 94
95void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 95void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
96{ 96{
97#ifndef KORG_NODND 97#ifndef KORG_NODND
98// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 98// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
99 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 99 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
100 !QTextDrag::canDecode( e ) ) { 100 !QTextDrag::canDecode( e ) ) {
101 e->ignore(); 101 e->ignore();
102 return; 102 return;
103 } 103 }
104 104
105 mOldCurrent = currentItem(); 105 mOldCurrent = currentItem();
106#endif 106#endif
107} 107}
108 108
109 109
110void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 110void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
111{ 111{
112#ifndef KORG_NODND 112#ifndef KORG_NODND
113// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 113// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
114 114
115 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 115 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
116 !QTextDrag::canDecode( e ) ) { 116 !QTextDrag::canDecode( e ) ) {
117 e->ignore(); 117 e->ignore();
118 return; 118 return;
119 } 119 }
120 120
121 e->accept(); 121 e->accept();
122#endif 122#endif
123} 123}
124 124
125void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 125void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
126{ 126{
127#ifndef KORG_NODND 127#ifndef KORG_NODND
128// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 128// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
129 129
130 setCurrentItem(mOldCurrent); 130 setCurrentItem(mOldCurrent);
131 setSelected(mOldCurrent,true); 131 setSelected(mOldCurrent,true);
132#endif 132#endif
133} 133}
134 134
135void KOTodoListView::contentsDropEvent(QDropEvent *e) 135void KOTodoListView::contentsDropEvent(QDropEvent *e)
136{ 136{
137#ifndef KORG_NODND 137#ifndef KORG_NODND
138// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 138// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
139 139
140 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 140 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
141 !QTextDrag::canDecode( e ) ) { 141 !QTextDrag::canDecode( e ) ) {
142 e->ignore(); 142 e->ignore();
143 return; 143 return;
144 } 144 }
145 145
146 DndFactory factory( mCalendar ); 146 DndFactory factory( mCalendar );
147 Todo *todo = factory.createDropTodo(e); 147 Todo *todo = factory.createDropTodo(e);
148 148
149 if (todo) { 149 if (todo) {
150 e->acceptAction(); 150 e->acceptAction();
151 151
152 KOTodoViewItem *destination = 152 KOTodoViewItem *destination =
153 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 153 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
154 Todo *destinationEvent = 0; 154 Todo *destinationEvent = 0;
155 if (destination) destinationEvent = destination->todo(); 155 if (destination) destinationEvent = destination->todo();
156 156
157 Todo *existingTodo = mCalendar->todo(todo->uid()); 157 Todo *existingTodo = mCalendar->todo(todo->uid());
158 158
159 if(existingTodo) { 159 if(existingTodo) {
160 Incidence *to = destinationEvent; 160 Incidence *to = destinationEvent;
161 while(to) { 161 while(to) {
162 if (to->uid() == todo->uid()) { 162 if (to->uid() == todo->uid()) {
163 KMessageBox::sorry(this, 163 KMessageBox::sorry(this,
164 i18n("Cannot move To-Do to itself\nor a child of itself"), 164 i18n("Cannot move To-Do to itself\nor a child of itself"),
165 i18n("Drop To-Do")); 165 i18n("Drop To-Do"));
166 delete todo; 166 delete todo;
167 return; 167 return;
168 } 168 }
169 to = to->relatedTo(); 169 to = to->relatedTo();
170 } 170 }
171 internalDrop = true; 171 internalDrop = true;
172 if ( destinationEvent ) 172 if ( destinationEvent )
173 reparentTodoSignal( destinationEvent, existingTodo ); 173 reparentTodoSignal( destinationEvent, existingTodo );
174 else 174 else
175 unparentTodoSignal(existingTodo); 175 unparentTodoSignal(existingTodo);
176 delete todo; 176 delete todo;
177 } else { 177 } else {
178 mCalendar->addTodo(todo); 178 mCalendar->addTodo(todo);
179 emit todoDropped(todo, KOGlobals::EVENTADDED); 179 emit todoDropped(todo, KOGlobals::EVENTADDED);
180 if ( destinationEvent ) 180 if ( destinationEvent )
181 reparentTodoSignal( destinationEvent, todo ); 181 reparentTodoSignal( destinationEvent, todo );
182 } 182 }
183 } 183 }
184 else { 184 else {
185 QString text; 185 QString text;
186 if (QTextDrag::decode(e,text)) { 186 if (QTextDrag::decode(e,text)) {
187 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 187 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
188 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 188 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
189 qDebug("Dropped : " + text); 189 qDebug("Dropped : " + text);
190 QStringList emails = QStringList::split(",",text); 190 QStringList emails = QStringList::split(",",text);
191 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 191 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
192 int pos = (*it).find("<"); 192 int pos = (*it).find("<");
193 QString name = (*it).left(pos); 193 QString name = (*it).left(pos);
194 QString email = (*it).mid(pos); 194 QString email = (*it).mid(pos);
195 if (!email.isEmpty() && todoi) { 195 if (!email.isEmpty() && todoi) {
196 todoi->todo()->addAttendee(new Attendee(name,email)); 196 todoi->todo()->addAttendee(new Attendee(name,email));
197 } 197 }
198 } 198 }
199 } 199 }
200 else { 200 else {
201 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); 201 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable ");
202 e->ignore(); 202 e->ignore();
203 } 203 }
204 } 204 }
205#endif 205#endif
206} 206}
207 207
208void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 208void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
209{ 209{
210 210
211 QPoint p(contentsToViewport(e->pos())); 211 QPoint p(contentsToViewport(e->pos()));
212 QListViewItem *i = itemAt(p); 212 QListViewItem *i = itemAt(p);
213 bool rootClicked = true; 213 bool rootClicked = true;
214 if (i) { 214 if (i) {
215 // if the user clicked into the root decoration of the item, don't 215 // if the user clicked into the root decoration of the item, don't
216 // try to start a drag! 216 // try to start a drag!
217 int X = p.x(); 217 int X = p.x();
218 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); 218 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() );
219 if (X > header()->sectionPos(0) + 219 if (X > header()->sectionPos(0) +
220 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 220 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
221 itemMargin() || 221 itemMargin() +i->height()||
222 X < header()->sectionPos(0)) { 222 X < header()->sectionPos(0)) {
223 rootClicked = false; 223 rootClicked = false;
224 } 224 }
225 } else {
226 rootClicked = false;
225 } 227 }
226#ifndef KORG_NODND 228#ifndef KORG_NODND
227 mMousePressed = false; 229 mMousePressed = false;
228 if (! rootClicked ) { 230 if (! rootClicked ) {
229 mPressPos = e->pos(); 231 mPressPos = e->pos();
230 mMousePressed = true; 232 mMousePressed = true;
231 } 233 }
232#endif 234#endif
233 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); 235 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked);
234#ifndef DESKTOP_VERSION 236#ifndef DESKTOP_VERSION
235 if (!( e->button() == RightButton && rootClicked) ) 237 if (!( e->button() == RightButton && rootClicked) )
236 QListView::contentsMousePressEvent(e); 238 QListView::contentsMousePressEvent(e);
237#else 239#else
238 QListView::contentsMousePressEvent(e); 240 QListView::contentsMousePressEvent(e);
239#endif 241#endif
240} 242}
241void KOTodoListView::paintEvent(QPaintEvent* e) 243void KOTodoListView::paintEvent(QPaintEvent* e)
242{ 244{
243 emit paintNeeded(); 245 emit paintNeeded();
244 QListView::paintEvent( e); 246 QListView::paintEvent( e);
245} 247}
246void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 248void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
247{ 249{
248 250
249#ifndef KORG_NODND 251#ifndef KORG_NODND
250 //QListView::contentsMouseMoveEvent(e); 252 //QListView::contentsMouseMoveEvent(e);
251 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 253 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
252 QApplication::startDragDistance()*3) { 254 QApplication::startDragDistance()*3) {
253 mMousePressed = false; 255 mMousePressed = false;
254 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 256 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
255 if (item) { 257 if (item) {
256 DndFactory factory( mCalendar ); 258 DndFactory factory( mCalendar );
257 ICalDrag *vd = factory.createDrag( 259 ICalDrag *vd = factory.createDrag(
258 ((KOTodoViewItem *)item)->todo(),viewport()); 260 ((KOTodoViewItem *)item)->todo(),viewport());
259 internalDrop = false; 261 internalDrop = false;
260 // we cannot do any senseful here, because the DnD is still broken in Qt 262 // we cannot do any senseful here, because the DnD is still broken in Qt
261 if (vd->drag()) { 263 if (vd->drag()) {
262 if ( !internalDrop ) { 264 if ( !internalDrop ) {
263 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); 265 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() );
264 qDebug("Dnd: External move: Delete drag source "); 266 qDebug("Dnd: External move: Delete drag source ");
265 } else 267 } else
266 qDebug("Dnd: Internal move "); 268 qDebug("Dnd: Internal move ");
267 269
268 } else { 270 } else {
269 if ( !internalDrop ) { 271 if ( !internalDrop ) {
270 qDebug("Dnd: External Copy"); 272 qDebug("Dnd: External Copy");
271 } else 273 } else
272 qDebug("DnD: Internal copy: Copy pending"); 274 qDebug("DnD: Internal copy: Copy pending");
273 } 275 }
274 } 276 }
275 } 277 }
276#endif 278#endif
277} 279}
278void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) 280void KOTodoListView::keyReleaseEvent ( QKeyEvent *e )
279{ 281{
280 if ( !e->isAutoRepeat() ) { 282 if ( !e->isAutoRepeat() ) {
281 mFlagKeyPressed = false; 283 mFlagKeyPressed = false;
282 } 284 }
283} 285}
284 286
285 287
286void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 288void KOTodoListView::keyPressEvent ( QKeyEvent * e )
287{ 289{
288 qApp->processEvents(); 290 qApp->processEvents();
289 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 291 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
290 e->ignore(); 292 e->ignore();
291 // qDebug(" ignore %d",e->isAutoRepeat() ); 293 // qDebug(" ignore %d",e->isAutoRepeat() );
292 return; 294 return;
293 } 295 }
294 if (! e->isAutoRepeat() ) 296 if (! e->isAutoRepeat() )
295 mFlagKeyPressed = true; 297 mFlagKeyPressed = true;
296 QListViewItem* cn; 298 QListViewItem* cn;
297 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 299 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
298 cn = currentItem(); 300 cn = currentItem();
299 if ( cn ) { 301 if ( cn ) {
300 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 302 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
301 if ( ci ){ 303 if ( ci ){
302 if ( e->state() == ShiftButton ) 304 if ( e->state() == ShiftButton )
303 ci->setOn( false ); 305 ci->setOn( false );
304 else 306 else
305 ci->setOn( true ); 307 ci->setOn( true );
306 cn = cn->itemBelow(); 308 cn = cn->itemBelow();
307 if ( cn ) { 309 if ( cn ) {
308 setCurrentItem ( cn ); 310 setCurrentItem ( cn );
309 ensureItemVisible ( cn ); 311 ensureItemVisible ( cn );
310 } 312 }
311 313
312 } 314 }
313 } 315 }
314 316
315 return; 317 return;
316 } 318 }
317 319
318 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 320 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
319 switch ( e->key() ) { 321 switch ( e->key() ) {
320 case Qt::Key_Down: 322 case Qt::Key_Down:
321 case Qt::Key_Up: 323 case Qt::Key_Up:
322 QListView::keyPressEvent ( e ); 324 QListView::keyPressEvent ( e );
323 break; 325 break;
324 case Qt::Key_Left: 326 case Qt::Key_Left:
325 case Qt::Key_Right: 327 case Qt::Key_Right:
326 QListView::keyPressEvent ( e ); 328 QListView::keyPressEvent ( e );
327 e->accept(); 329 e->accept();
328 return; 330 return;
329 break; 331 break;
330 default: 332 default:
331 e->ignore(); 333 e->ignore();
332 break; 334 break;
333 } 335 }
334 return; 336 return;
335 } 337 }
336 e->ignore(); 338 e->ignore();
337} 339}
338void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 340void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
339{ 341{
340 QListView::contentsMouseReleaseEvent(e); 342 QListView::contentsMouseReleaseEvent(e);
341 mMousePressed = false; 343 mMousePressed = false;
342} 344}
343 345
344void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 346void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
345{ 347{
346 if (!e) return; 348 if (!e) return;
347 349
348 QPoint vp = contentsToViewport(e->pos()); 350 QPoint vp = contentsToViewport(e->pos());
349 351
350 QListViewItem *item = itemAt(vp); 352 QListViewItem *item = itemAt(vp);
351 353
352 emit double_Clicked(item); 354 emit double_Clicked(item);
353 if (!item) return; 355 if (!item) return;
354 356
355 emit doubleClicked(item,vp,0); 357 emit doubleClicked(item,vp,0);
356} 358}
357 359
358///////////////////////////////////////////////////////////////////////////// 360/////////////////////////////////////////////////////////////////////////////
359 361
360KOQuickTodo::KOQuickTodo(QWidget *parent) : 362KOQuickTodo::KOQuickTodo(QWidget *parent) :
361 QLineEdit(parent) 363 QLineEdit(parent)
362{ 364{
363 setText(i18n("Click to add a new Todo")); 365 setText(i18n("Click to add a new Todo"));
364} 366}
365 367
366void KOQuickTodo::focusInEvent(QFocusEvent *ev) 368void KOQuickTodo::focusInEvent(QFocusEvent *ev)
367{ 369{
368 if ( text()==i18n("Click to add a new Todo") ) 370 if ( text()==i18n("Click to add a new Todo") )
369 setText(""); 371 setText("");
370 QLineEdit::focusInEvent(ev); 372 QLineEdit::focusInEvent(ev);
371} 373}
372 374
373void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 375void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
374{ 376{
375 setText(i18n("Click to add a new Todo")); 377 setText(i18n("Click to add a new Todo"));
376 QLineEdit::focusOutEvent(ev); 378 QLineEdit::focusOutEvent(ev);
377} 379}
378 380
379///////////////////////////////////////////////////////////////////////////// 381/////////////////////////////////////////////////////////////////////////////
380 382
381KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 383KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
382 KOrg::BaseView(calendar,parent,name) 384 KOrg::BaseView(calendar,parent,name)
383{ 385{
384 mPendingUpdateBeforeRepaint = false; 386 mPendingUpdateBeforeRepaint = false;
385 isFlatDisplay = false; 387 isFlatDisplay = false;
386 mNavigator = 0; 388 mNavigator = 0;
387 QBoxLayout *topLayout = new QVBoxLayout(this); 389 QBoxLayout *topLayout = new QVBoxLayout(this);
388 mName = QString ( name ); 390 mName = QString ( name );
389 mBlockUpdate = false; 391 mBlockUpdate = false;
390 mQuickAdd = new KOQuickTodo(this); 392 mQuickAdd = new KOQuickTodo(this);
391 topLayout->addWidget(mQuickAdd); 393 topLayout->addWidget(mQuickAdd);
392 394
393 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 395 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
394 396
395 mTodoListView = new KOTodoListView(calendar,this, name ); 397 mTodoListView = new KOTodoListView(calendar,this, name );
396 topLayout->addWidget(mTodoListView); 398 topLayout->addWidget(mTodoListView);
397 //mTodoListView->header()->setMaximumHeight(30); 399 //mTodoListView->header()->setMaximumHeight(30);
398 mTodoListView->setRootIsDecorated(true); 400 mTodoListView->setRootIsDecorated(true);
399 mTodoListView->setAllColumnsShowFocus(true); 401 mTodoListView->setAllColumnsShowFocus(true);
400 402
401 mTodoListView->setShowSortIndicator(true); 403 mTodoListView->setShowSortIndicator(true);
402 404
403 mTodoListView->addColumn(i18n("Todo")); 405 mTodoListView->addColumn(i18n("Todo"));
404 mTodoListView->addColumn(i18n("Prio")); 406 mTodoListView->addColumn(i18n("Prio"));
405 mTodoListView->setColumnAlignment(1,AlignHCenter); 407 mTodoListView->setColumnAlignment(1,AlignHCenter);
406 mTodoListView->addColumn(i18n("Complete")); 408 mTodoListView->addColumn(i18n("Complete"));
407 mTodoListView->setColumnAlignment(2,AlignCenter); 409 mTodoListView->setColumnAlignment(2,AlignCenter);
408 410
409 mTodoListView->addColumn(i18n("Due Date")); 411 mTodoListView->addColumn(i18n("Due Date"));
410 mTodoListView->setColumnAlignment(3,AlignLeft); 412 mTodoListView->setColumnAlignment(3,AlignLeft);
411 mTodoListView->addColumn(i18n("Due Time")); 413 mTodoListView->addColumn(i18n("Due Time"));
412 mTodoListView->setColumnAlignment(4,AlignHCenter); 414 mTodoListView->setColumnAlignment(4,AlignHCenter);
413 415
414 mTodoListView->addColumn(i18n("Start Date")); 416 mTodoListView->addColumn(i18n("Start Date"));
415 mTodoListView->setColumnAlignment(5,AlignLeft); 417 mTodoListView->setColumnAlignment(5,AlignLeft);
416 mTodoListView->addColumn(i18n("Start Time")); 418 mTodoListView->addColumn(i18n("Start Time"));
417 mTodoListView->setColumnAlignment(6,AlignHCenter); 419 mTodoListView->setColumnAlignment(6,AlignHCenter);
418 420
419 mTodoListView->addColumn(i18n("Cancelled")); 421 mTodoListView->addColumn(i18n("Cancelled"));
420 mTodoListView->addColumn(i18n("Categories")); 422 mTodoListView->addColumn(i18n("Categories"));
421#if 0 423#if 0
422 mTodoListView->addColumn(i18n("Sort Id")); 424 mTodoListView->addColumn(i18n("Sort Id"));
423 mTodoListView->setColumnAlignment(4,AlignHCenter); 425 mTodoListView->setColumnAlignment(4,AlignHCenter);
424#endif 426#endif
425 427
426 mTodoListView->setMinimumHeight( 60 ); 428 mTodoListView->setMinimumHeight( 60 );
427 mTodoListView->setItemsRenameable( true ); 429 mTodoListView->setItemsRenameable( true );
428 mTodoListView->setRenameable( 0 ); 430 mTodoListView->setRenameable( 0 );
429 mTodoListView->setColumnWidth( 0, 120 ); 431 mTodoListView->setColumnWidth( 0, 120 );
430 mTodoListView->setColumnWidthMode(0, QListView::Manual); 432 mTodoListView->setColumnWidthMode(0, QListView::Manual);
431 mTodoListView->setColumnWidthMode(1, QListView::Manual); 433 mTodoListView->setColumnWidthMode(1, QListView::Manual);
432 mTodoListView->setColumnWidthMode(2, QListView::Manual); 434 mTodoListView->setColumnWidthMode(2, QListView::Manual);
433 mTodoListView->setColumnWidthMode(3, QListView::Manual); 435 mTodoListView->setColumnWidthMode(3, QListView::Manual);
434 mTodoListView->setColumnWidthMode(4, QListView::Manual); 436 mTodoListView->setColumnWidthMode(4, QListView::Manual);
435 mTodoListView->setColumnWidthMode(5, QListView::Manual); 437 mTodoListView->setColumnWidthMode(5, QListView::Manual);
436 mTodoListView->setColumnWidthMode(6, QListView::Manual); 438 mTodoListView->setColumnWidthMode(6, QListView::Manual);
437 mTodoListView->setColumnWidthMode(7, QListView::Manual); 439 mTodoListView->setColumnWidthMode(7, QListView::Manual);
438 mTodoListView->setColumnWidthMode(8, QListView::Manual); 440 mTodoListView->setColumnWidthMode(8, QListView::Manual);
439 441
440 442
441 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this); 443 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this);
442 444
443 mPriorityPopupMenu = new QPopupMenu(this); 445 mPriorityPopupMenu = new QPopupMenu(this);
444 for (int i = 1; i <= 5; i++) { 446 for (int i = 1; i <= 5; i++) {
445 QString label = QString ("%1").arg (i); 447 QString label = QString ("%1").arg (i);
446 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 448 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
447 } 449 }
448 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 450 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
449 451
450 mPercentageCompletedPopupMenu = new QPopupMenu(this); 452 mPercentageCompletedPopupMenu = new QPopupMenu(this);
451 for (int i = 0; i <= 100; i+=20) { 453 for (int i = 0; i <= 100; i+=20) {
452 QString label = QString ("%1 %").arg (i); 454 QString label = QString ("%1 %").arg (i);
453 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 455 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
454 } 456 }
455 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 457 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
456 458
457 459
458 460
459 mItemPopupMenu = new QPopupMenu(this); 461 mItemPopupMenu = new QPopupMenu(this);
460 mItemPopupMenu->insertItem(i18n("Show..."), this, 462 mItemPopupMenu->insertItem(i18n("Show..."), this,
461 SLOT (showTodo())); 463 SLOT (showTodo()));
462 mItemPopupMenu->insertItem(i18n("Edit..."), this, 464 mItemPopupMenu->insertItem(i18n("Edit..."), this,
463 SLOT (editTodo())); 465 SLOT (editTodo()));
464 mItemPopupMenu->insertItem( i18n("Delete"), this, 466 mItemPopupMenu->insertItem( i18n("Delete"), this,
465 SLOT (deleteTodo())); 467 SLOT (deleteTodo()));
466 mItemPopupMenu->insertItem( i18n("Clone..."), this, 468 mItemPopupMenu->insertItem( i18n("Clone..."), this,
467 SLOT (cloneTodo())); 469 SLOT (cloneTodo()));
468 mItemPopupMenu->insertItem( i18n("Move..."), this, 470 mItemPopupMenu->insertItem( i18n("Move..."), this,
469 SLOT (moveTodo())); 471 SLOT (moveTodo()));
470 mItemPopupMenu->insertItem( i18n("Beam..."), this, 472 mItemPopupMenu->insertItem( i18n("Beam..."), this,
471 SLOT (beamTodo())); 473 SLOT (beamTodo()));
472 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 474 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
473 SLOT (cancelTodo())); 475 SLOT (cancelTodo()));
474 mItemPopupMenu->insertSeparator(); 476 mItemPopupMenu->insertSeparator();
475 477
476 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 478 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
477 SLOT (newTodo())); 479 SLOT (newTodo()));
478 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 480 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
479 SLOT (newSubTodo())); 481 SLOT (newSubTodo()));
480 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 482 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
481 SLOT (unparentTodo()),0,21); 483 SLOT (unparentTodo()),0,21);
482 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 484 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
483 SLOT (reparentTodo()),0,22); 485 SLOT (reparentTodo()),0,22);
484 mItemPopupMenu->insertSeparator(); 486 mItemPopupMenu->insertSeparator();
485#if 0 487#if 0
486 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 488 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
487 this, SLOT( purgeCompleted() ) ); 489 this, SLOT( purgeCompleted() ) );
488 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 490 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
489 this, SLOT( toggleCompleted() ),0, 33 ); 491 this, SLOT( toggleCompleted() ),0, 33 );
490 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 492 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
491 this, SLOT( toggleQuickTodo() ),0, 34 ); 493 this, SLOT( toggleQuickTodo() ),0, 34 );
492 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 494 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
493 this, SLOT( toggleRunning() ),0, 35 ); 495 this, SLOT( toggleRunning() ),0, 35 );
494 496
495#endif 497#endif
496 mPopupMenu = new QPopupMenu(this); 498 mPopupMenu = new QPopupMenu(this);
497 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 499 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
498 SLOT (newTodo()),0,1); 500 SLOT (newTodo()),0,1);
499 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 501 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
500 this, SLOT(purgeCompleted()),0,2); 502 this, SLOT(purgeCompleted()),0,2);
501 mPopupMenu->insertItem(i18n("Show Completed"), 503 mPopupMenu->insertItem(i18n("Show Completed"),
502 this, SLOT( toggleCompleted() ),0,3 ); 504 this, SLOT( toggleCompleted() ),0,3 );
503 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 505 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
504 this, SLOT( toggleQuickTodo() ),0,4 ); 506 this, SLOT( toggleQuickTodo() ),0,4 );
505 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 507 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
506 this, SLOT( toggleRunning() ),0,5 ); 508 this, SLOT( toggleRunning() ),0,5 );
507 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 509 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
508 this, SLOT( setAllOpen() ),0,6 ); 510 this, SLOT( setAllOpen() ),0,6 );
509 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 511 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
510 this, SLOT( setAllClose() ),0,7 ); 512 this, SLOT( setAllClose() ),0,7 );
511 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 513 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
512 this, SLOT( setAllFlat() ),0,8 ); 514 this, SLOT( setAllFlat() ),0,8 );
513 mDocPrefs = new DocPrefs( name ); 515 mDocPrefs = new DocPrefs( name );
514 516
515 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 517 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
516 mPopupMenu->setCheckable( true ); 518 mPopupMenu->setCheckable( true );
517 mItemPopupMenu->setCheckable( true ); 519 mItemPopupMenu->setCheckable( true );
518 520
519 521
520 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 522 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
521 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 523 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
522 524
523 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 525 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
524 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 526 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
525 527
526 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 528 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
527 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 529 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
528 530
529 531
530 // Double clicking conflicts with opening/closing the subtree 532 // Double clicking conflicts with opening/closing the subtree
531 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 533 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
532 SLOT( editItem( QListViewItem *) ) ); 534 SLOT( editItem( QListViewItem *) ) );
533 /* 535 /*
534 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 536 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
535 const QPoint &,int ) ), 537 const QPoint &,int ) ),
536 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 538 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
537 */ 539 */
538 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 540 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
539 const QPoint &,int ) ), 541 const QPoint &,int ) ),
540 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 542 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
541 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 543 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
542 SLOT( itemClicked( QListViewItem * ) ) ); 544 SLOT( itemClicked( QListViewItem * ) ) );
543 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 545 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
544 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 546 SLOT( itemDoubleClicked( QListViewItem * ) ) );
545 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 547 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
546 SLOT( updateView() ) ); 548 SLOT( updateView() ) );
547 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 549 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
548 SLOT( todoModified(Todo *, int) ) ); 550 SLOT( todoModified(Todo *, int) ) );
549 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 551 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
550 SLOT( itemStateChanged( QListViewItem * ) ) ); 552 SLOT( itemStateChanged( QListViewItem * ) ) );
551 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 553 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
552 SLOT( itemStateChanged( QListViewItem * ) ) ); 554 SLOT( itemStateChanged( QListViewItem * ) ) );
553 connect( mTodoListView, SIGNAL( paintNeeded() ), 555 connect( mTodoListView, SIGNAL( paintNeeded() ),
554 SLOT( paintNeeded()) ); 556 SLOT( paintNeeded()) );
555 557
556#if 0 558#if 0
557 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 559 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
558 SLOT(selectionChanged(QListViewItem *))); 560 SLOT(selectionChanged(QListViewItem *)));
559 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 561 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
560 SLOT(selectionChanged(QListViewItem *))); 562 SLOT(selectionChanged(QListViewItem *)));
561 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 563 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
562 SLOT(selectionChanged(QListViewItem *))); 564 SLOT(selectionChanged(QListViewItem *)));
563#endif 565#endif
564 566
565 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) )); 567 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) ));
566 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) )); 568 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) ));
567 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) )); 569 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) ));
568 570
569 connect( mTodoListView, SIGNAL(selectionChanged() ), 571 connect( mTodoListView, SIGNAL(selectionChanged() ),
570 SLOT( processSelectionChange() ) ); 572 SLOT( processSelectionChange() ) );
571 connect( mQuickAdd, SIGNAL( returnPressed () ), 573 connect( mQuickAdd, SIGNAL( returnPressed () ),
572 SLOT( addQuickTodo() ) ); 574 SLOT( addQuickTodo() ) );
573 575
574} 576}
575 577
576KOTodoView::~KOTodoView() 578KOTodoView::~KOTodoView()
577{ 579{
578 // delete mKOTodoViewWhatsThis; 580 // delete mKOTodoViewWhatsThis;
579 delete mDocPrefs; 581 delete mDocPrefs;
580} 582}
581QString KOTodoView::getWhatsThisText(QPoint p) 583QString KOTodoView::getWhatsThisText(QPoint p)
582{ 584{
583 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p ); 585 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p );
584 if ( item ) 586 if ( item )
585 return KIncidenceFormatter::instance()->getFormattedText( item->todo(), 587 return KIncidenceFormatter::instance()->getFormattedText( item->todo(),
586 KOPrefs::instance()->mWTshowDetails, 588 KOPrefs::instance()->mWTshowDetails,
587 KOPrefs::instance()->mWTshowCreated, 589 KOPrefs::instance()->mWTshowCreated,
588 KOPrefs::instance()->mWTshowChanged); 590 KOPrefs::instance()->mWTshowChanged);
589 return i18n("That is the todo view" ); 591 return i18n("That is the todo view" );
590 592
591} 593}
592 594
593void KOTodoView::jumpToDate () 595void KOTodoView::jumpToDate ()
594{ 596{
595 // if (mActiveItem) { 597 // if (mActiveItem) {
596// mActiveItem->todo()); 598// mActiveItem->todo());
597// if ( mActiveItem->todo()->hasDueDate() ) 599// if ( mActiveItem->todo()->hasDueDate() )
598// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 600// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
599} 601}
600void KOTodoView::paintNeeded() 602void KOTodoView::paintNeeded()
601{ 603{
602 if ( mPendingUpdateBeforeRepaint ) { 604 if ( mPendingUpdateBeforeRepaint ) {
603 updateView(); 605 updateView();
604 mPendingUpdateBeforeRepaint = false; 606 mPendingUpdateBeforeRepaint = false;
605 } 607 }
606} 608}
607void KOTodoView::paintEvent(QPaintEvent * pevent) 609void KOTodoView::paintEvent(QPaintEvent * pevent)
608{ 610{
609 if ( mPendingUpdateBeforeRepaint ) { 611 if ( mPendingUpdateBeforeRepaint ) {
610 updateView(); 612 updateView();
611 mPendingUpdateBeforeRepaint = false; 613 mPendingUpdateBeforeRepaint = false;
612 } 614 }
613 KOrg::BaseView::paintEvent( pevent); 615 KOrg::BaseView::paintEvent( pevent);
614} 616}
615 617
616void KOTodoView::updateView() 618void KOTodoView::updateView()
617{ 619{
618 pendingSubtodo = 0; 620 pendingSubtodo = 0;
619 if ( mBlockUpdate ) { 621 if ( mBlockUpdate ) {
620 return; 622 return;
621 } 623 }
622 if ( !isVisible() ) { 624 if ( !isVisible() ) {
623 mPendingUpdateBeforeRepaint = true; 625 mPendingUpdateBeforeRepaint = true;
624 return; 626 return;
625 } 627 }
626 storeCurrentItem(); 628 storeCurrentItem();
627 //qDebug("KOTodoView::updateView() %x", this); 629 //qDebug("KOTodoView::updateView() %x", this);
628 if ( isFlatDisplay ) { 630 if ( isFlatDisplay ) {
629 displayAllFlat(); 631 displayAllFlat();
630 resetCurrentItem(); 632 resetCurrentItem();
631 return; 633 return;
632 } 634 }
633 //qDebug("update "); 635 //qDebug("update ");
634// kdDebug() << "KOTodoView::updateView()" << endl; 636// kdDebug() << "KOTodoView::updateView()" << endl;
635 QFont fo = KOPrefs::instance()->mTodoViewFont; 637 QFont fo = KOPrefs::instance()->mTodoViewFont;
636 638
637 639
638 mTodoListView->clear(); 640 mTodoListView->clear();
639 if ( mName == "todolistsmall" ) { 641 if ( mName == "todolistsmall" ) {
640 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 642 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
641 int ps = fo.pointSize() -2; 643 int ps = fo.pointSize() -2;
642 if ( ps > 12 ) 644 if ( ps > 12 )
643 ps -= 2; 645 ps -= 2;
644 fo.setPointSize( ps ); 646 fo.setPointSize( ps );
645 } 647 }
646 } 648 }
647 649
648 mTodoListView->setFont( fo ); 650 mTodoListView->setFont( fo );
649 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 651 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
650 //mTodoListView->header()->setMaximumHeight(fm.height()); 652 //mTodoListView->header()->setMaximumHeight(fm.height());
651 QPtrList<Todo> todoList = calendar()->todos(); 653 QPtrList<Todo> todoList = calendar()->todos();
652 654
653/* 655/*
654 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 656 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
655 Event *t; 657 Event *t;
656 for(t = todoList.first(); t; t = todoList.next()) { 658 for(t = todoList.first(); t; t = todoList.next()) {
657 kdDebug() << " " << t->getSummary() << endl; 659 kdDebug() << " " << t->getSummary() << endl;
658 660
659 if (t->getRelatedTo()) { 661 if (t->getRelatedTo()) {
660 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 662 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
661 } 663 }
662 664
663 QPtrList<Event> l = t->getRelations(); 665 QPtrList<Event> l = t->getRelations();
664 Event *c; 666 Event *c;
665 for(c=l.first();c;c=l.next()) { 667 for(c=l.first();c;c=l.next()) {
666 kdDebug() << " - relation: " << c->getSummary() << endl; 668 kdDebug() << " - relation: " << c->getSummary() << endl;
667 } 669 }
668 } 670 }
669*/ 671*/
670 672
671 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 673 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
672 // specific order of events. That means that we have to generate parent items 674 // specific order of events. That means that we have to generate parent items
673 // recursively for proper hierarchical display of Todos. 675 // recursively for proper hierarchical display of Todos.
674 mTodoMap.clear(); 676 mTodoMap.clear();
675 Todo *todo; 677 Todo *todo;
676 todo = todoList.first();// todo; todo = todoList.next()) { 678 todo = todoList.first();// todo; todo = todoList.next()) {
677 while ( todo ) { 679 while ( todo ) {
678 bool next = true; 680 bool next = true;
679 // qDebug("todo %s ", todo->summary().latin1()); 681 // qDebug("todo %s ", todo->summary().latin1());
680 Incidence *incidence = todo->relatedTo(); 682 Incidence *incidence = todo->relatedTo();
681 while ( incidence ) { 683 while ( incidence ) {
682 if ( incidence->type() == "Todo") { 684 if ( incidence->type() == "Todo") {
683 //qDebug("related %s ",incidence->summary().latin1() ); 685 //qDebug("related %s ",incidence->summary().latin1() );
684 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 686 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
685 //qDebug("related not found "); 687 //qDebug("related not found ");
686 todoList.remove( ); 688 todoList.remove( );
687 todo = todoList.current(); 689 todo = todoList.current();
688 next = false; 690 next = false;
689 incidence = 0; 691 incidence = 0;
690 692
691 } else { 693 } else {
692 //qDebug("related found "); 694 //qDebug("related found ");
693 incidence = incidence->relatedTo(); 695 incidence = incidence->relatedTo();
694 } 696 }
695 } else 697 } else
696 incidence = 0; 698 incidence = 0;
697 } 699 }
698 if ( next ) 700 if ( next )
699 todo = todoList.next(); 701 todo = todoList.next();
700 } 702 }
701// qDebug("again .... "); 703// qDebug("again .... ");
702// for(todo = todoList.first(); todo; todo = todoList.next()) { 704// for(todo = todoList.first(); todo; todo = todoList.next()) {
703 705
704// qDebug("yytodo %s ", todo->summary().latin1()); 706// qDebug("yytodo %s ", todo->summary().latin1());
705// } 707// }
706 //qDebug("for "); 708 //qDebug("for ");
707 for(todo = todoList.first(); todo; todo = todoList.next()) { 709 for(todo = todoList.first(); todo; todo = todoList.next()) {
708 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 710 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
709 { 711 {
710 insertTodoItem(todo); 712 insertTodoItem(todo);
711 } 713 }
712 } 714 }
713 //qDebug("for end "); 715 //qDebug("for end ");
714 // Restore opened/closed state 716 // Restore opened/closed state
715 mTodoListView->blockSignals( true ); 717 mTodoListView->blockSignals( true );
716 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 718 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
717 mTodoListView->blockSignals( false ); 719 mTodoListView->blockSignals( false );
718 resetCurrentItem(); 720 resetCurrentItem();
719 processSelectionChange(); 721 processSelectionChange();
720} 722}
721 723
722void KOTodoView::storeCurrentItem() 724void KOTodoView::storeCurrentItem()
723{ 725{
724 mCurItem = 0; 726 mCurItem = 0;
725 mCurItemRootParent = 0; 727 mCurItemRootParent = 0;
726 mCurItemAbove = 0; 728 mCurItemAbove = 0;
727 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 729 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
728 if (mActiveItem) { 730 if (mActiveItem) {
729 mCurItem = mActiveItem->todo(); 731 mCurItem = mActiveItem->todo();
730 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove (); 732 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove ();
731 if ( activeItemAbove ) 733 if ( activeItemAbove )
732 mCurItemAbove = activeItemAbove->todo(); 734 mCurItemAbove = activeItemAbove->todo();
733 while ( mActiveItem->parent() != 0 ) 735 mCurItemRootParent = mCurItem;
734 mActiveItem = (KOTodoViewItem*)mActiveItem->parent(); 736 while ( mCurItemRootParent->relatedTo() != 0 )
735 mCurItemRootParent = mActiveItem->todo(); 737 mCurItemRootParent = mCurItemRootParent->relatedTo();
736 } 738 }
737 mActiveItem = 0; 739 mActiveItem = 0;
738} 740}
739 741
740void KOTodoView::resetCurrentItem() 742void KOTodoView::resetCurrentItem()
741{ 743{
742 mTodoListView->setFocus(); 744 mTodoListView->setFocus();
743 KOTodoViewItem* foundItem = 0; 745 KOTodoViewItem* foundItem = 0;
744 KOTodoViewItem* foundItemRoot = 0; 746 KOTodoViewItem* foundItemRoot = 0;
745 KOTodoViewItem* foundItemAbove = 0; 747 KOTodoViewItem* foundItemAbove = 0;
746 if ( mTodoListView->firstChild () ) { 748 if ( mTodoListView->firstChild () ) {
747 if ( mCurItem ) { 749 if ( mCurItem ) {
748 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild (); 750 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild ();
749 while ( item ) { 751 while ( item ) {
750 if ( item->todo() == mCurItem ) { 752 if ( item->todo() == mCurItem ) {
751 foundItem = item; 753 foundItem = item;
752 break; 754 break;
753 } else if ( item->todo() == mCurItemAbove ) { 755 } else if ( item->todo() == mCurItemAbove ) {
754 foundItemAbove = item; 756 foundItemAbove = item;
755 757
756 } else if ( item->todo() == mCurItemRootParent ) { 758 } else if ( item->todo() == mCurItemRootParent ) {
757 foundItemRoot = item; 759 foundItemRoot = item;
758 } 760 }
759 item = (KOTodoViewItem*)item->itemBelow(); 761 item = (KOTodoViewItem*)item->itemBelow();
760 } 762 }
761 if ( ! foundItem ) { 763 if ( ! foundItem ) {
762 if ( foundItemAbove ) 764 if ( foundItemRoot )
763 foundItem = foundItemAbove;
764 else
765 foundItem = foundItemRoot; 765 foundItem = foundItemRoot;
766 else
767 foundItem = foundItemAbove;
766 } 768 }
767 } 769 }
768 if ( foundItem ) { 770 if ( foundItem ) {
769 mTodoListView->setCurrentItem( foundItem ); 771 mTodoListView->setCurrentItem( foundItem );
770 mTodoListView->ensureItemVisible( foundItem ); 772 mTodoListView->ensureItemVisible( foundItem );
771 } else { 773 } else {
772 mTodoListView->setCurrentItem( mTodoListView->firstChild () ); 774 mTodoListView->setCurrentItem( mTodoListView->firstChild () );
773 } 775 }
774 } 776 }
775 mTodoListView->setFocus(); 777 mTodoListView->setFocus();
776} 778}
777//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove; 779//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove;
778bool KOTodoView::checkTodo( Todo * todo ) 780bool KOTodoView::checkTodo( Todo * todo )
779{ 781{
780 782
781 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 783 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
782 return false; 784 return false;
783 if ( !todo->isCompleted() ) { 785 if ( !todo->isCompleted() ) {
784 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() ) 786 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() )
785 return true; 787 return true;
786 } 788 }
787 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 789 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
788 if ( todo->hasStartDate() ) 790 if ( todo->hasStartDate() )
789 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 791 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
790 return false; 792 return false;
791 if ( todo->hasDueDate() ) 793 if ( todo->hasDueDate() )
792 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 794 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
793 return false; 795 return false;
794 } 796 }
795 return true; 797 return true;
796} 798}
797 799
798void KOTodoView::restoreItemState( QListViewItem *item ) 800void KOTodoView::restoreItemState( QListViewItem *item )
799{ 801{
800 pendingSubtodo = 0; 802 pendingSubtodo = 0;
801 while( item ) { 803 while( item ) {
802 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 804 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
803 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 805 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
804 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 806 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
805 item = item->nextSibling(); 807 item = item->nextSibling();
806 } 808 }
807} 809}
808 810
809 811
810QMap<Todo *,KOTodoViewItem *>::ConstIterator 812QMap<Todo *,KOTodoViewItem *>::ConstIterator
811 KOTodoView::insertTodoItem(Todo *todo) 813 KOTodoView::insertTodoItem(Todo *todo)
812{ 814{
813 815
814// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 816// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
815 // TODO: Check, if dynmaic cast is necessary 817 // TODO: Check, if dynmaic cast is necessary
816 818
817 pendingSubtodo = 0; 819 pendingSubtodo = 0;
818 Incidence *incidence = todo->relatedTo(); 820 Incidence *incidence = todo->relatedTo();
819 if (incidence && incidence->type() == "Todo") { 821 if (incidence && incidence->type() == "Todo") {
820 Todo *relatedTodo = static_cast<Todo *>(incidence); 822 Todo *relatedTodo = static_cast<Todo *>(incidence);
821 823
822// kdDebug() << " has Related" << endl; 824// kdDebug() << " has Related" << endl;
823 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 825 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
824 itemIterator = mTodoMap.find(relatedTodo); 826 itemIterator = mTodoMap.find(relatedTodo);
825 if (itemIterator == mTodoMap.end()) { 827 if (itemIterator == mTodoMap.end()) {
826// kdDebug() << " related not yet in list" << endl; 828// kdDebug() << " related not yet in list" << endl;
827 itemIterator = insertTodoItem (relatedTodo); 829 itemIterator = insertTodoItem (relatedTodo);
828 } 830 }
829 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 831 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
830 // and one into the map. Sure finding is more easy but why? -zecke 832 // and one into the map. Sure finding is more easy but why? -zecke
831 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 833 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
832 return mTodoMap.insert(todo,todoItem); 834 return mTodoMap.insert(todo,todoItem);
833 } else { 835 } else {
834// kdDebug() << " no Related" << endl; 836// kdDebug() << " no Related" << endl;
835 // see above -zecke 837 // see above -zecke
836 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 838 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
837 return mTodoMap.insert(todo,todoItem); 839 return mTodoMap.insert(todo,todoItem);
838 } 840 }
839} 841}
840 842
841 843
842void KOTodoView::updateConfig() 844void KOTodoView::updateConfig()
843{ 845{
844 updateView(); 846 updateView();
845 mTodoListView->repaintContents(); 847 mTodoListView->repaintContents();
846} 848}
847 849
848QPtrList<Incidence> KOTodoView::selectedIncidences() 850QPtrList<Incidence> KOTodoView::selectedIncidences()
849{ 851{
850 QPtrList<Incidence> selected; 852 QPtrList<Incidence> selected;
851 853
852 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 854 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
853// if (!item) item = mActiveItem; 855// if (!item) item = mActiveItem;
854 if (item) selected.append(item->todo()); 856 if (item) selected.append(item->todo());
855 857
856 return selected; 858 return selected;
857} 859}
858 860
859QPtrList<Todo> KOTodoView::selectedTodos() 861QPtrList<Todo> KOTodoView::selectedTodos()
860{ 862{
861 QPtrList<Todo> selected; 863 QPtrList<Todo> selected;
862 864
863 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 865 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
864// if (!item) item = mActiveItem; 866// if (!item) item = mActiveItem;
865 if (item) selected.append(item->todo()); 867 if (item) selected.append(item->todo());
866 868
867 return selected; 869 return selected;
868} 870}
869 871
870void KOTodoView::changeEventDisplay(Event *, int) 872void KOTodoView::changeEventDisplay(Event *, int)
871{ 873{
872 updateView(); 874 updateView();
873} 875}
874 876
875void KOTodoView::showDates(const QDate &, const QDate &) 877void KOTodoView::showDates(const QDate &, const QDate &)
876{ 878{
877} 879}
878 880
879void KOTodoView::showEvents(QPtrList<Event>) 881void KOTodoView::showEvents(QPtrList<Event>)
880{ 882{
881 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 883 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
882} 884}
883 885
884void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 886void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
885 const QDate &td) 887 const QDate &td)
886{ 888{
887#ifndef KORG_NOPRINTER 889#ifndef KORG_NOPRINTER
888 calPrinter->preview(CalPrinter::Todolist, fd, td); 890 calPrinter->preview(CalPrinter::Todolist, fd, td);
889#endif 891#endif
890} 892}
891 893
892void KOTodoView::editItem(QListViewItem *item ) 894void KOTodoView::editItem(QListViewItem *item )
893{ 895{
894 // qDebug("editItem(QListViewItem *item ) "); 896 // qDebug("editItem(QListViewItem *item ) ");
895 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 897 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
896} 898}
897 899
898void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 900void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
899{ 901{
900 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 902 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
901} 903}
902 904
903void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column) 905void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column)
904{ 906{
905 pendingSubtodo = 0; 907 pendingSubtodo = 0;
906 mActiveItem = (KOTodoViewItem *)item; 908 mActiveItem = (KOTodoViewItem *)item;
907 if (item) { 909 if (item) {
908 switch (column){ 910 switch (column){
909 case 1: 911 case 1:
910 mPriorityPopupMenu->popup(QCursor::pos ()); break; 912 mPriorityPopupMenu->popup(QCursor::pos ()); break;
911 case 2: 913 case 2:
912 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 914 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
913 case 3: 915 case 3:
914 moveTodo(); 916 moveTodo();
915 break; 917 break;
916 case 8: 918 case 8:
917 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 919 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
918 default: 920 default:
919 mItemPopupMenu->popup(QCursor::pos()); 921 mItemPopupMenu->popup(QCursor::pos());
920 } 922 }
921 } else mPopupMenu->popup(QCursor::pos()); 923 } else mPopupMenu->popup(QCursor::pos());
922} 924}
923void KOTodoView::newTodo() 925void KOTodoView::newTodo()
924{ 926{
925 emit newTodoSignal(); 927 emit newTodoSignal();
926} 928}
927 929
928void KOTodoView::newSubTodo() 930void KOTodoView::newSubTodo()
929{ 931{
930 if (mActiveItem) { 932 if (mActiveItem) {
931 emit newSubTodoSignal(mActiveItem->todo()); 933 emit newSubTodoSignal(mActiveItem->todo());
932 } 934 }
933} 935}
934void KOTodoView::unparentTodo() 936void KOTodoView::unparentTodo()
935{ 937{
936 if (mActiveItem) { 938 if (mActiveItem) {
937 emit unparentTodoSignal(mActiveItem->todo()); 939 emit unparentTodoSignal(mActiveItem->todo());
938 } 940 }
939} 941}
940 942
941void KOTodoView::reparentTodo() 943void KOTodoView::reparentTodo()
942{ 944{
943 if (mActiveItem) { 945 if (mActiveItem) {
944 qDebug("KOTodoView::reparentTodo() "); 946 qDebug("KOTodoView::reparentTodo() ");
945 topLevelWidget()->setCaption(i18n("Click on new parent item")); 947 topLevelWidget()->setCaption(i18n("Click on new parent item"));
946 pendingSubtodo = mActiveItem; 948 pendingSubtodo = mActiveItem;
947 } 949 }
948} 950}
949void KOTodoView::editTodo() 951void KOTodoView::editTodo()
950{ 952{
951 if (mActiveItem) { 953 if (mActiveItem) {
952 emit editTodoSignal(mActiveItem->todo()); 954 emit editTodoSignal(mActiveItem->todo());
953 } 955 }
954} 956}
955void KOTodoView::cloneTodo() 957void KOTodoView::cloneTodo()
956{ 958{
957 if (mActiveItem) { 959 if (mActiveItem) {
958 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 960 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
959 } 961 }
960} 962}
961void KOTodoView::cancelTodo() 963void KOTodoView::cancelTodo()
962{ 964{
963 if (mActiveItem) { 965 if (mActiveItem) {
964 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 966 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
965 } 967 }
966} 968}
967void KOTodoView::moveTodo() 969void KOTodoView::moveTodo()
968{ 970{
969 if (mActiveItem) { 971 if (mActiveItem) {
970 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 972 emit moveTodoSignal((Incidence*)mActiveItem->todo());
971 } 973 }
972} 974}
973void KOTodoView::beamTodo() 975void KOTodoView::beamTodo()
974{ 976{
975 if (mActiveItem) { 977 if (mActiveItem) {
976 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 978 emit beamTodoSignal((Incidence*)mActiveItem->todo());
977 } 979 }
978} 980}
979 981
980 982
981void KOTodoView::showTodo() 983void KOTodoView::showTodo()
982{ 984{
983 if (mActiveItem) { 985 if (mActiveItem) {
984 emit showTodoSignal(mActiveItem->todo()); 986 emit showTodoSignal(mActiveItem->todo());
985 } 987 }
986} 988}
987 989
988void KOTodoView::deleteTodo() 990void KOTodoView::deleteTodo()
989{ 991{
990 if (mActiveItem) { 992 if (mActiveItem) {
991 emit deleteTodoSignal(mActiveItem->todo()); 993 emit deleteTodoSignal(mActiveItem->todo());
992 } 994 }
993} 995}
994 996
995void KOTodoView::setNewPriority(int index) 997void KOTodoView::setNewPriority(int index)
996{ 998{
997 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 999 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
998 mActiveItem->todo()->setPriority(mPriority[index]); 1000 mActiveItem->todo()->setPriority(mPriority[index]);
999 mActiveItem->construct(); 1001 mActiveItem->construct();
1000 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 1002 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
1001 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1003 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1002 } 1004 }
1003} 1005}
1004 1006
1005void KOTodoView::setNewPercentage(int index) 1007void KOTodoView::setNewPercentage(int index)
1006{ 1008{
1007 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 1009 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
1008 1010
1009 if ( mPercentage[index] == 100 && !mActiveItem->isOn() ) { 1011 if ( mPercentage[index] == 100 && !mActiveItem->isOn() ) {
1010 mActiveItem->setOn( true ); 1012 mActiveItem->setOn( true );
1011 return; 1013 return;
1012 } else if ( mPercentage[index] != 100 && mActiveItem->isOn() ) { 1014 } else if ( mPercentage[index] != 100 && mActiveItem->isOn() ) {
1013 KOTodoViewItem* par = (static_cast<KOTodoViewItem*>(mActiveItem->parent())); 1015 KOTodoViewItem* par = (static_cast<KOTodoViewItem*>(mActiveItem->parent()));
1014 if ( par && par->isOn() ) 1016 if ( par && par->isOn() )
1015 par->setOn( false ); 1017 par->setOn( false );
1016 } 1018 }
1017 if (mPercentage[index] == 100) { 1019 if (mPercentage[index] == 100) {
1018 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 1020 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
1019 } else { 1021 } else {
1020 mActiveItem->todo()->setCompleted(false); 1022 mActiveItem->todo()->setCompleted(false);
1021 } 1023 }
1022 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 1024 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
1023 mActiveItem->construct(); 1025 mActiveItem->construct();
1024 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 1026 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
1025 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1027 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1026 } 1028 }
1027} 1029}
1028 1030
1029 1031
1030QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 1032QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
1031{ 1033{
1032 QPopupMenu* tempMenu = new QPopupMenu (this); 1034 QPopupMenu* tempMenu = new QPopupMenu (this);
1033 QStringList checkedCategories = todoItem->todo()->categories (); 1035 QStringList checkedCategories = todoItem->todo()->categories ();
1034 1036
1035 tempMenu->setCheckable (true); 1037 tempMenu->setCheckable (true);
1036 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 1038 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
1037 it != KOPrefs::instance()->mCustomCategories.end (); 1039 it != KOPrefs::instance()->mCustomCategories.end ();
1038 ++it) { 1040 ++it) {
1039 int index = tempMenu->insertItem (*it); 1041 int index = tempMenu->insertItem (*it);
1040 mCategory[index] = *it; 1042 mCategory[index] = *it;
1041 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 1043 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
1042 } 1044 }
1043 1045
1044 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 1046 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
1045 return tempMenu; 1047 return tempMenu;
1046 1048
1047 1049
1048} 1050}
1049void KOTodoView::changedCategories(int index) 1051void KOTodoView::changedCategories(int index)
1050{ 1052{
1051 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 1053 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
1052 QStringList categories = mActiveItem->todo()->categories (); 1054 QStringList categories = mActiveItem->todo()->categories ();
1053 QString colcat = categories.first(); 1055 QString colcat = categories.first();
1054 if (categories.find (mCategory[index]) != categories.end ()) 1056 if (categories.find (mCategory[index]) != categories.end ())
1055 categories.remove (mCategory[index]); 1057 categories.remove (mCategory[index]);
1056 else 1058 else
1057 categories.insert (categories.end(), mCategory[index]); 1059 categories.insert (categories.end(), mCategory[index]);
1058 categories.sort (); 1060 categories.sort ();
1059 if ( !colcat.isEmpty() ) { 1061 if ( !colcat.isEmpty() ) {
1060 if ( categories.find ( colcat ) != categories.end () ) { 1062 if ( categories.find ( colcat ) != categories.end () ) {
1061 categories.remove( colcat ); 1063 categories.remove( colcat );
1062 categories.prepend( colcat ); 1064 categories.prepend( colcat );
1063 } 1065 }
1064 } 1066 }
1065 mActiveItem->todo()->setCategories (categories); 1067 mActiveItem->todo()->setCategories (categories);
1066 mActiveItem->construct(); 1068 mActiveItem->construct();
1067 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1069 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1068 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 1070 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
1069 } 1071 }
1070} 1072}
1071void KOTodoView::itemDoubleClicked(QListViewItem *item) 1073void KOTodoView::itemDoubleClicked(QListViewItem *item)
1072{ 1074{
1073 if ( pendingSubtodo != 0 ) { 1075 if ( pendingSubtodo != 0 ) {
1074 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1076 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1075 } 1077 }
1076 pendingSubtodo = 0; 1078 pendingSubtodo = 0;
1077 int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() ); 1079 int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() );
1078 //qDebug("ROW %d ", row); 1080 //qDebug("ROW %d ", row);
1079 if (!item) { 1081 if (!item) {
1080 newTodo(); 1082 newTodo();
1081 return; 1083 return;
1082 } else { 1084 } else {
1083 if ( row == 1 ) { 1085 if ( row == 1 ) {
1084 mActiveItem = (KOTodoViewItem *) item; 1086 mActiveItem = (KOTodoViewItem *) item;
1085 newSubTodo(); 1087 newSubTodo();
1086 return; 1088 return;
1087 } 1089 }
1088 } 1090 }
1089 if ( KOPrefs::instance()->mEditOnDoubleClick ) 1091 if ( KOPrefs::instance()->mEditOnDoubleClick )
1090 editItem( item ); 1092 editItem( item );
1091 else 1093 else
1092 showItem( item , QPoint(), 0 ); 1094 showItem( item , QPoint(), 0 );
1093} 1095}
1094void KOTodoView::itemClicked(QListViewItem *item) 1096void KOTodoView::itemClicked(QListViewItem *item)
1095{ 1097{
1096 //qDebug("KOTodoView::itemClicked %d", item); 1098 //qDebug("KOTodoView::itemClicked %d", item);
1097 if (!item) { 1099 if (!item) {
1098 if ( pendingSubtodo != 0 ) { 1100 if ( pendingSubtodo != 0 ) {
1099 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1101 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1100 } 1102 }
1101 pendingSubtodo = 0; 1103 pendingSubtodo = 0;
1102 return; 1104 return;
1103 } 1105 }
1104 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1106 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1105 if ( pendingSubtodo != 0 ) { 1107 if ( pendingSubtodo != 0 ) {
1106 bool allowReparent = true; 1108 bool allowReparent = true;
1107 QListViewItem *par = item; 1109 QListViewItem *par = item;
1108 while ( par ) { 1110 while ( par ) {
1109 if ( par == pendingSubtodo ) { 1111 if ( par == pendingSubtodo ) {
1110 allowReparent = false; 1112 allowReparent = false;
1111 break; 1113 break;
1112 } 1114 }
1113 par = par->parent(); 1115 par = par->parent();
1114 } 1116 }
1115 if ( !allowReparent ) { 1117 if ( !allowReparent ) {
1116 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 1118 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
1117 qDebug("Recursive reparenting not possible "); 1119 qDebug("Recursive reparenting not possible ");
1118 pendingSubtodo = 0; 1120 pendingSubtodo = 0;
1119 } else { 1121 } else {
1120 Todo* newParent = todoItem->todo(); 1122 Todo* newParent = todoItem->todo();
1121 Todo* newSub = pendingSubtodo->todo(); 1123 Todo* newSub = pendingSubtodo->todo();
1122 pendingSubtodo = 0; 1124 pendingSubtodo = 0;
1123 emit reparentTodoSignal( newParent,newSub ); 1125 emit reparentTodoSignal( newParent,newSub );
1124 return; 1126 return;
1125 } 1127 }
1126 } 1128 }
1127#if 0 1129#if 0
1128 // handled by the item itself 1130 // handled by the item itself
1129 bool completed = todoItem->todo()->isCompleted(); // Completed or not? 1131 bool completed = todoItem->todo()->isCompleted(); // Completed or not?
1130 qDebug("com %d ",completed ); 1132 qDebug("com %d ",completed );
1131 qDebug("itemclicked "); 1133 qDebug("itemclicked ");
1132 if (todoItem->isOn()) { 1134 if (todoItem->isOn()) {
1133 qDebug("on "); 1135 qDebug("on ");
1134 if (!completed) { 1136 if (!completed) {
1135 qDebug("set true "); 1137 qDebug("set true ");
1136 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 1138 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
1137 } 1139 }
1138 } else { 1140 } else {
1139 qDebug("not on "); 1141 qDebug("not on ");
1140 if (completed) { 1142 if (completed) {
1141 qDebug("set false "); 1143 qDebug("set false ");
1142 todoItem->todo()->setCompleted(false); 1144 todoItem->todo()->setCompleted(false);
1143 } 1145 }
1144 } 1146 }
1145#endif 1147#endif
1146} 1148}
1147 1149
1148void KOTodoView::setDocumentId( const QString &id ) 1150void KOTodoView::setDocumentId( const QString &id )
1149{ 1151{
1150 kdDebug() << "KOTodoView::setDocumentId()" << endl; 1152 kdDebug() << "KOTodoView::setDocumentId()" << endl;
1151 1153
1152 mDocPrefs->setDoc( id ); 1154 mDocPrefs->setDoc( id );
1153} 1155}
1154 1156
1155void KOTodoView::itemStateChanged( QListViewItem *item ) 1157void KOTodoView::itemStateChanged( QListViewItem *item )
1156{ 1158{
1157 if (!item) return; 1159 if (!item) return;
1158 1160
1159 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1161 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1160 1162
1161// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 1163// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
1162 1164
1163 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 1165 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
1164} 1166}
1165 1167
1166void KOTodoView::saveLayout(KConfig *config, const QString &group) const 1168void KOTodoView::saveLayout(KConfig *config, const QString &group) const
1167{ 1169{
1168 mTodoListView->saveLayout(config,group); 1170 mTodoListView->saveLayout(config,group);
1169} 1171}
1170 1172
1171void KOTodoView::restoreLayout(KConfig *config, const QString &group) 1173void KOTodoView::restoreLayout(KConfig *config, const QString &group)
1172{ 1174{
1173 mTodoListView->restoreLayout(config,group); 1175 mTodoListView->restoreLayout(config,group);
1174} 1176}
1175 1177
1176void KOTodoView::processSelectionChange() 1178void KOTodoView::processSelectionChange()
1177{ 1179{
1178// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 1180// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
1179 1181
1180 KOTodoViewItem *item = 1182 KOTodoViewItem *item =
1181 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 1183 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
1182 1184
1183 if ( !item ) { 1185 if ( !item ) {
1184 emit incidenceSelected( 0 ); 1186 emit incidenceSelected( 0 );
1185 } else { 1187 } else {
1186 emit incidenceSelected( item->todo() ); 1188 emit incidenceSelected( item->todo() );
1187 } 1189 }
1188} 1190}
1189 1191
1190void KOTodoView::modified(bool b) 1192void KOTodoView::modified(bool b)
1191{ 1193{
1192 emit isModified(b); 1194 emit isModified(b);
1193} 1195}
1194void KOTodoView::setTodoModified( Todo* todo ) 1196void KOTodoView::setTodoModified( Todo* todo )
1195{ 1197{
1196 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1198 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1197} 1199}
1198void KOTodoView::clearSelection() 1200void KOTodoView::clearSelection()
1199{ 1201{
1200 mTodoListView->selectAll( false ); 1202 mTodoListView->selectAll( false );
1201} 1203}
1202void KOTodoView::setAllOpen() 1204void KOTodoView::setAllOpen()
1203{ 1205{
1204 if ( isFlatDisplay ) { 1206 if ( isFlatDisplay ) {
1205 isFlatDisplay = false; 1207 isFlatDisplay = false;
1206 mPopupMenu->setItemChecked( 8,false ); 1208 mPopupMenu->setItemChecked( 8,false );
1207 updateView(); 1209 updateView();
1210 } else {
1211 storeCurrentItem();
1208 } 1212 }
1209 setOpen(mTodoListView->firstChild(), true); 1213 setOpen(mTodoListView->firstChild(), true);
1214 resetCurrentItem();
1210} 1215}
1211void KOTodoView::setAllClose() 1216void KOTodoView::setAllClose()
1212{ 1217{
1213 if ( isFlatDisplay ) { 1218 if ( isFlatDisplay ) {
1214 isFlatDisplay = false; 1219 isFlatDisplay = false;
1215 mPopupMenu->setItemChecked( 8,false ); 1220 mPopupMenu->setItemChecked( 8,false );
1216 updateView(); 1221 updateView();
1222 } else {
1223 storeCurrentItem();
1217 } 1224 }
1218 setOpen(mTodoListView->firstChild(), false); 1225 setOpen(mTodoListView->firstChild(), false);
1226 resetCurrentItem();
1219} 1227}
1220void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1228void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1221{ 1229{
1222 1230
1223 while ( item ) { 1231 while ( item ) {
1224 setOpen( item->firstChild(), setOpenI ); 1232 setOpen( item->firstChild(), setOpenI );
1225 item->setOpen( setOpenI ); 1233 item->setOpen( setOpenI );
1226 item = item->nextSibling(); 1234 item = item->nextSibling();
1227 } 1235 }
1228} 1236}
1229 1237
1230void KOTodoView::displayAllFlat() 1238void KOTodoView::displayAllFlat()
1231{ 1239{
1232 pendingSubtodo = 0; 1240 pendingSubtodo = 0;
1233 if ( mBlockUpdate ) { 1241 if ( mBlockUpdate ) {
1234 return; 1242 return;
1235 } 1243 }
1236 mPopupMenu->setItemChecked( 8,true ); 1244 mPopupMenu->setItemChecked( 8,true );
1237 isFlatDisplay = true; 1245 isFlatDisplay = true;
1238 QPtrList<Todo> todoList = calendar()->todos(); 1246 QPtrList<Todo> todoList = calendar()->todos();
1239 mTodoMap.clear(); 1247 mTodoMap.clear();
1240 mTodoListView->clear(); 1248 mTodoListView->clear();
1241 Todo *todo; 1249 Todo *todo;
1242 for(todo = todoList.first(); todo; todo = todoList.next()) { 1250 for(todo = todoList.first(); todo; todo = todoList.next()) {
1243 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1251 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1244 mTodoMap.insert(todo,todoItem); 1252 mTodoMap.insert(todo,todoItem);
1245 } 1253 }
1246 mTodoListView->setFocus(); 1254 mTodoListView->setFocus();
1247 processSelectionChange(); 1255 processSelectionChange();
1248} 1256}
1249 1257
1250void KOTodoView::setAllFlat() 1258void KOTodoView::setAllFlat()
1251{ 1259{
1252 if ( isFlatDisplay ) { 1260 if ( isFlatDisplay ) {
1253 isFlatDisplay = false; 1261 isFlatDisplay = false;
1254 mPopupMenu->setItemChecked( 8,false ); 1262 mPopupMenu->setItemChecked( 8,false );
1255 updateView(); 1263 updateView();
1256 return; 1264 return;
1257 } 1265 }
1266 storeCurrentItem();
1258 displayAllFlat(); 1267 displayAllFlat();
1268 resetCurrentItem();
1259} 1269}
1260 1270
1261void KOTodoView::purgeCompleted() 1271void KOTodoView::purgeCompleted()
1262{ 1272{
1263 emit purgeCompletedSignal(); 1273 emit purgeCompletedSignal();
1264} 1274}
1265void KOTodoView::toggleQuickTodo() 1275void KOTodoView::toggleQuickTodo()
1266{ 1276{
1267 if ( mQuickAdd->isVisible() ) { 1277 if ( mQuickAdd->isVisible() ) {
1268 mQuickAdd->hide(); 1278 mQuickAdd->hide();
1269 KOPrefs::instance()->mEnableQuickTodo = false; 1279 KOPrefs::instance()->mEnableQuickTodo = false;
1270 } 1280 }
1271 else { 1281 else {
1272 mQuickAdd->show(); 1282 mQuickAdd->show();
1273 KOPrefs::instance()->mEnableQuickTodo = true; 1283 KOPrefs::instance()->mEnableQuickTodo = true;
1274 } 1284 }
1275 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1285 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1276 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1286 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1277} 1287}
1278 1288
1279void KOTodoView::toggleRunning() 1289void KOTodoView::toggleRunning()
1280{ 1290{
1281 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1291 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1282 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1292 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1283 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1293 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1284 updateView(); 1294 updateView();
1285} 1295}
1286 1296
1287void KOTodoView::toggleCompleted() 1297void KOTodoView::toggleCompleted()
1288{ 1298{
1289 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1299 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1290 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1300 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1291 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1301 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1292 updateView(); 1302 updateView();
1293} 1303}
1294 1304
1295void KOTodoView::addQuickTodo() 1305void KOTodoView::addQuickTodo()
1296{ 1306{
1297 Todo *todo = new Todo(); 1307 Todo *todo = new Todo();
1298 todo->setSummary(mQuickAdd->text()); 1308 todo->setSummary(mQuickAdd->text());
1299 todo->setOrganizer(KOPrefs::instance()->email()); 1309 todo->setOrganizer(KOPrefs::instance()->email());
1300 CalFilter * cf = mCalendar->filter(); 1310 CalFilter * cf = mCalendar->filter();
1301 if ( cf ) { 1311 if ( cf ) {
1302 if ( cf->isEnabled()&& cf->showCategories()) { 1312 if ( cf->isEnabled()&& cf->showCategories()) {
1303 todo->setCategories(cf->categoryList()); 1313 todo->setCategories(cf->categoryList());
1304 } 1314 }
1305 if ( cf->isEnabled() ) 1315 if ( cf->isEnabled() )
1306 todo->setSecrecy( cf->getSecrecy()); 1316 todo->setSecrecy( cf->getSecrecy());
1307 } 1317 }
1308 mCalendar->addTodo(todo); 1318 mCalendar->addTodo(todo);
1309 mQuickAdd->setText(""); 1319 mQuickAdd->setText("");
1310 todoModified (todo, KOGlobals::EVENTADDED ); 1320 todoModified (todo, KOGlobals::EVENTADDED );
1311 updateView(); 1321 updateView();
1312} 1322}
1313 1323
1314void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1324void KOTodoView::keyPressEvent ( QKeyEvent * e )
1315{ 1325{
1316 // e->ignore(); 1326 // e->ignore();
1317 //return; 1327 //return;
1318 //qDebug("KOTodoView::keyPressEvent "); 1328 //qDebug("KOTodoView::keyPressEvent ");
1319 switch ( e->key() ) { 1329 switch ( e->key() ) {
1320 case Qt::Key_Down: 1330 case Qt::Key_Down:
1321 case Qt::Key_Up: 1331 case Qt::Key_Up:
1322 QWidget::keyPressEvent ( e ); 1332 QWidget::keyPressEvent ( e );
1323 break; 1333 break;
1324 1334
1325 case Qt::Key_Q: 1335 case Qt::Key_Q:
1326 toggleQuickTodo(); 1336 toggleQuickTodo();
1327 break; 1337 break;
1328 case Qt::Key_U: 1338 case Qt::Key_U:
1329 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1339 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1330 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1340 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1331 unparentTodo(); 1341 unparentTodo();
1332 e->accept(); 1342 e->accept();
1333 } else 1343 } else
1334 e->ignore(); 1344 e->ignore();
1335 break; 1345 break;
1336 case Qt::Key_S: 1346 case Qt::Key_S:
1337 if ( e->state() == Qt::ControlButton ) { 1347 if ( e->state() == Qt::ControlButton ) {
1338 e->ignore(); 1348 e->ignore();
1339 break; 1349 break;
1340 } 1350 }
1341 if ( e->state() == Qt::ShiftButton ) { 1351 if ( e->state() == Qt::ShiftButton ) {
1342 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1352 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1343 reparentTodo(); 1353 reparentTodo();
1344 e->accept(); 1354 e->accept();
1345 } else 1355 } else
1346 e->ignore(); 1356 e->ignore();
1347 break; 1357 break;
1348 case Qt::Key_P: 1358 case Qt::Key_P:
1349 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1359 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1350 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1360 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1351 if ( pendingSubtodo ) 1361 if ( pendingSubtodo )
1352 itemClicked(mActiveItem); 1362 itemClicked(mActiveItem);
1353 e->accept(); 1363 e->accept();
1354 } else 1364 } else
1355 e->ignore(); 1365 e->ignore();
1356 break; 1366 break;
1357 case Qt::Key_Escape: 1367 case Qt::Key_Escape:
1358 if ( pendingSubtodo ) { 1368 if ( pendingSubtodo ) {
1359 itemClicked(0); 1369 itemClicked(0);
1360 e->accept(); 1370 e->accept();
1361 } else 1371 } else
1362 e->ignore(); 1372 e->ignore();
1363 break; 1373 break;
1364 default: 1374 default:
1365 e->ignore(); 1375 e->ignore();
1366 } 1376 }
1367 1377
1368 if ( true ) { 1378 if ( true ) {
1369 if ( e->key() == Qt::Key_I ) { 1379 if ( e->key() == Qt::Key_I ) {
1370 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1380 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1371 if ( cn ) { 1381 if ( cn ) {
1372 mActiveItem = cn; 1382 mActiveItem = cn;
1373 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1383 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1374 if ( ci ){ 1384 if ( ci ){
1375 showTodo(); 1385 showTodo();
1376 cn = (KOTodoViewItem*)cn->itemBelow(); 1386 cn = (KOTodoViewItem*)cn->itemBelow();
1377 if ( cn ) { 1387 if ( cn ) {
1378 mTodoListView->setCurrentItem ( cn ); 1388 mTodoListView->setCurrentItem ( cn );
1379 mTodoListView->ensureItemVisible ( cn ); 1389 mTodoListView->ensureItemVisible ( cn );
1380 } 1390 }
1381 1391
1382 } 1392 }
1383 } 1393 }
1384 e->accept(); 1394 e->accept();
1385 1395
1386 } 1396 }
1387 1397
1388 } 1398 }
1389 1399
1390} 1400}
1391void KOTodoView::updateTodo( Todo * t, int type ) 1401void KOTodoView::updateTodo( Todo * t, int type )
1392{ 1402{
1393 if ( mBlockUpdate) 1403 if ( mBlockUpdate)
1394 return; 1404 return;
1395 1405
1396 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1406 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1397 itemIterator = mTodoMap.find(t); 1407 itemIterator = mTodoMap.find(t);
1398 if (itemIterator != mTodoMap.end()) { 1408 if (itemIterator != mTodoMap.end()) {
1399 (*itemIterator)->construct(); 1409 (*itemIterator)->construct();
1400 } else { 1410 } else {
1401 if ( type == KOGlobals::EVENTADDED ) { 1411 if ( type == KOGlobals::EVENTADDED ) {
1402 insertTodoItem( t ); 1412 insertTodoItem( t );
1403 } 1413 }
1404 } 1414 }
1405 1415
1406} 1416}
1407 1417
1408void KOTodoView::todoModified(Todo * t , int p ) 1418void KOTodoView::todoModified(Todo * t , int p )
1409{ 1419{
1410 mBlockUpdate = true; 1420 mBlockUpdate = true;
1411 emit todoModifiedSignal ( t, p ); 1421 emit todoModifiedSignal ( t, p );
1412 mBlockUpdate = false; 1422 mBlockUpdate = false;
1413} 1423}
diff --git a/libkcal/alarm.cpp b/libkcal/alarm.cpp
index 1fc7169..d8f15b5 100644
--- a/libkcal/alarm.cpp
+++ b/libkcal/alarm.cpp
@@ -1,457 +1,481 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <kdebug.h> 22#include <kdebug.h>
23#include <klocale.h>
23 24
24#include "incidence.h" 25#include "incidence.h"
25#include "todo.h" 26#include "todo.h"
26 27
27#include "alarm.h" 28#include "alarm.h"
28 29
29using namespace KCal; 30using namespace KCal;
30#include <qwidget.h> 31#include <qwidget.h>
31Alarm::Alarm(Incidence *parent) 32Alarm::Alarm(Incidence *parent)
32 : mParent(parent), 33 : mParent(parent),
33 mType(Audio), 34 mType(Audio),
34 mDescription(""), // to make operator==() not fail 35 mDescription(""), // to make operator==() not fail
35 mFile(""), // to make operator==() not fail 36 mFile(""), // to make operator==() not fail
36 mMailSubject(""), // to make operator==() not fail 37 mMailSubject(""), // to make operator==() not fail
37 mAlarmSnoozeTime(5), 38 mAlarmSnoozeTime(5),
38 mAlarmRepeatCount(0), 39 mAlarmRepeatCount(0),
39 mEndOffset(false), 40 mEndOffset(false),
40 mHasTime(false), 41 mHasTime(false),
41 mAlarmEnabled(false) 42 mAlarmEnabled(false)
42{ 43{
43 44
44} 45}
45 46
46Alarm::~Alarm() 47Alarm::~Alarm()
47{ 48{
48} 49}
49 50
50bool Alarm::operator==( const Alarm& rhs ) const 51bool Alarm::operator==( const Alarm& rhs ) const
51{ 52{
52 53
53 if ( mType != rhs.mType || 54 if ( mType != rhs.mType ||
54 mAlarmSnoozeTime != rhs.mAlarmSnoozeTime || 55 mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ||
55 mAlarmRepeatCount != rhs.mAlarmRepeatCount || 56 mAlarmRepeatCount != rhs.mAlarmRepeatCount ||
56 mAlarmEnabled != rhs.mAlarmEnabled || 57 mAlarmEnabled != rhs.mAlarmEnabled ||
57 mHasTime != rhs.mHasTime) 58 mHasTime != rhs.mHasTime)
58 return false; 59 return false;
59 60
60#if 0 61#if 0
61 if ( mType != rhs.mType ) { 62 if ( mType != rhs.mType ) {
62 63
63 qDebug("aaa1 "); 64 qDebug("aaa1 ");
64 return false; 65 return false;
65 } 66 }
66 67
67 if ( mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ) { 68 if ( mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ) {
68 69
69 qDebug("aaa2 "); 70 qDebug("aaa2 ");
70 return false; 71 return false;
71 } 72 }
72 73
73 74
74 if ( mAlarmRepeatCount != rhs.mAlarmRepeatCount ) { 75 if ( mAlarmRepeatCount != rhs.mAlarmRepeatCount ) {
75 76
76 qDebug("aaa3 "); 77 qDebug("aaa3 ");
77 return false; 78 return false;
78 } 79 }
79 80
80 if ( mAlarmEnabled != rhs.mAlarmEnabled ) { 81 if ( mAlarmEnabled != rhs.mAlarmEnabled ) {
81 82
82 qDebug("aaa4 "); 83 qDebug("aaa4 ");
83 return false; 84 return false;
84 } 85 }
85 86
86 if ( mHasTime != rhs.mHasTime ) { 87 if ( mHasTime != rhs.mHasTime ) {
87 88
88 qDebug("aaa5 "); 89 qDebug("aaa5 ");
89 return false; 90 return false;
90 } 91 }
91#endif 92#endif
92 93
93 94
94 if (mHasTime) { 95 if (mHasTime) {
95 if (mAlarmTime != rhs.mAlarmTime) 96 if (mAlarmTime != rhs.mAlarmTime)
96 return false; 97 return false;
97 } else { 98 } else {
98 if (mOffset != rhs.mOffset || 99 if (mOffset != rhs.mOffset ||
99 mEndOffset != rhs.mEndOffset) 100 mEndOffset != rhs.mEndOffset)
100 return false; 101 return false;
101 } 102 }
102 switch (mType) { 103 switch (mType) {
103 case Display: 104 case Display:
104 return mDescription == rhs.mDescription; 105 return mDescription == rhs.mDescription;
105 106
106 case Email: 107 case Email:
107 return mDescription == rhs.mDescription && 108 return mDescription == rhs.mDescription &&
108 mMailAttachFiles == rhs.mMailAttachFiles && 109 mMailAttachFiles == rhs.mMailAttachFiles &&
109 mMailAddresses == rhs.mMailAddresses && 110 mMailAddresses == rhs.mMailAddresses &&
110 mMailSubject == rhs.mMailSubject; 111 mMailSubject == rhs.mMailSubject;
111 112
112 case Procedure: 113 case Procedure:
113 return mFile == rhs.mFile && 114 return mFile == rhs.mFile &&
114 mDescription == rhs.mDescription; 115 mDescription == rhs.mDescription;
115 116
116 case Audio: 117 case Audio:
117 return mFile == rhs.mFile; 118 return mFile == rhs.mFile;
118 119
119 case Invalid: 120 case Invalid:
120 break; 121 break;
121 } 122 }
122 return false; 123 return false;
123} 124}
124 125
125void Alarm::setType(Alarm::Type type) 126void Alarm::setType(Alarm::Type type)
126{ 127{
127 if (type == mType) 128 if (type == mType)
128 return; 129 return;
129 130
130 switch (type) { 131 switch (type) {
131 case Display: 132 case Display:
132 mDescription = ""; 133 mDescription = "";
133 break; 134 break;
134 case Procedure: 135 case Procedure:
135 mFile = mDescription = ""; 136 mFile = mDescription = "";
136 break; 137 break;
137 case Audio: 138 case Audio:
138 mFile = ""; 139 mFile = "";
139 break; 140 break;
140 case Email: 141 case Email:
141 mMailSubject = mDescription = ""; 142 mMailSubject = mDescription = "";
142 mMailAddresses.clear(); 143 mMailAddresses.clear();
143 mMailAttachFiles.clear(); 144 mMailAttachFiles.clear();
144 break; 145 break;
145 case Invalid: 146 case Invalid:
146 break; 147 break;
147 default: 148 default:
148 return; 149 return;
149 } 150 }
150 mType = type; 151 mType = type;
151 mParent->updated(); 152 mParent->updated();
152} 153}
153 154
154Alarm::Type Alarm::type() const 155Alarm::Type Alarm::type() const
155{ 156{
156 return mType; 157 return mType;
157} 158}
158 159
159void Alarm::setAudioAlarm(const QString &audioFile) 160void Alarm::setAudioAlarm(const QString &audioFile)
160{ 161{
161 mType = Audio; 162 mType = Audio;
162 mFile = audioFile; 163 mFile = audioFile;
163 mParent->updated(); 164 mParent->updated();
164} 165}
165 166
166void Alarm::setAudioFile(const QString &audioFile) 167void Alarm::setAudioFile(const QString &audioFile)
167{ 168{
168 if (mType == Audio) { 169 if (mType == Audio) {
169 mFile = audioFile; 170 mFile = audioFile;
170 mParent->updated(); 171 mParent->updated();
171 } 172 }
172} 173}
173 174
174QString Alarm::audioFile() const 175QString Alarm::audioFile() const
175{ 176{
176 return (mType == Audio) ? mFile : QString::null; 177 return (mType == Audio) ? mFile : QString::null;
177} 178}
178 179
179void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments) 180void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments)
180{ 181{
181 mType = Procedure; 182 mType = Procedure;
182 mFile = programFile; 183 mFile = programFile;
183 mDescription = arguments; 184 mDescription = arguments;
184 mParent->updated(); 185 mParent->updated();
185} 186}
186 187
187void Alarm::setProgramFile(const QString &programFile) 188void Alarm::setProgramFile(const QString &programFile)
188{ 189{
189 if (mType == Procedure) { 190 if (mType == Procedure) {
190 mFile = programFile; 191 mFile = programFile;
191 mParent->updated(); 192 mParent->updated();
192 } 193 }
193} 194}
194 195
195QString Alarm::programFile() const 196QString Alarm::programFile() const
196{ 197{
197 return (mType == Procedure) ? mFile : QString::null; 198 return (mType == Procedure) ? mFile : QString::null;
198} 199}
199 200
200void Alarm::setProgramArguments(const QString &arguments) 201void Alarm::setProgramArguments(const QString &arguments)
201{ 202{
202 if (mType == Procedure) { 203 if (mType == Procedure) {
203 mDescription = arguments; 204 mDescription = arguments;
204 mParent->updated(); 205 mParent->updated();
205 } 206 }
206} 207}
207 208
208QString Alarm::programArguments() const 209QString Alarm::programArguments() const
209{ 210{
210 return (mType == Procedure) ? mDescription : QString::null; 211 return (mType == Procedure) ? mDescription : QString::null;
211} 212}
212 213
213void Alarm::setEmailAlarm(const QString &subject, const QString &text, 214void Alarm::setEmailAlarm(const QString &subject, const QString &text,
214 const QValueList<Person> &addressees, const QStringList &attachments) 215 const QValueList<Person> &addressees, const QStringList &attachments)
215{ 216{
216 mType = Email; 217 mType = Email;
217 mMailSubject = subject; 218 mMailSubject = subject;
218 mDescription = text; 219 mDescription = text;
219 mMailAddresses = addressees; 220 mMailAddresses = addressees;
220 mMailAttachFiles = attachments; 221 mMailAttachFiles = attachments;
221 mParent->updated(); 222 mParent->updated();
222} 223}
223 224
224void Alarm::setMailAddress(const Person &mailAddress) 225void Alarm::setMailAddress(const Person &mailAddress)
225{ 226{
226 if (mType == Email) { 227 if (mType == Email) {
227 mMailAddresses.clear(); 228 mMailAddresses.clear();
228 mMailAddresses += mailAddress; 229 mMailAddresses += mailAddress;
229 mParent->updated(); 230 mParent->updated();
230 } 231 }
231} 232}
232 233
233void Alarm::setMailAddresses(const QValueList<Person> &mailAddresses) 234void Alarm::setMailAddresses(const QValueList<Person> &mailAddresses)
234{ 235{
235 if (mType == Email) { 236 if (mType == Email) {
236 mMailAddresses = mailAddresses; 237 mMailAddresses = mailAddresses;
237 mParent->updated(); 238 mParent->updated();
238 } 239 }
239} 240}
240 241
241void Alarm::addMailAddress(const Person &mailAddress) 242void Alarm::addMailAddress(const Person &mailAddress)
242{ 243{
243 if (mType == Email) { 244 if (mType == Email) {
244 mMailAddresses += mailAddress; 245 mMailAddresses += mailAddress;
245 mParent->updated(); 246 mParent->updated();
246 } 247 }
247} 248}
248 249
249QValueList<Person> Alarm::mailAddresses() const 250QValueList<Person> Alarm::mailAddresses() const
250{ 251{
251 return (mType == Email) ? mMailAddresses : QValueList<Person>(); 252 return (mType == Email) ? mMailAddresses : QValueList<Person>();
252} 253}
253 254
254void Alarm::setMailSubject(const QString &mailAlarmSubject) 255void Alarm::setMailSubject(const QString &mailAlarmSubject)
255{ 256{
256 if (mType == Email) { 257 if (mType == Email) {
257 mMailSubject = mailAlarmSubject; 258 mMailSubject = mailAlarmSubject;
258 mParent->updated(); 259 mParent->updated();
259 } 260 }
260} 261}
261 262
262QString Alarm::mailSubject() const 263QString Alarm::mailSubject() const
263{ 264{
264 return (mType == Email) ? mMailSubject : QString::null; 265 return (mType == Email) ? mMailSubject : QString::null;
265} 266}
266 267
267void Alarm::setMailAttachment(const QString &mailAttachFile) 268void Alarm::setMailAttachment(const QString &mailAttachFile)
268{ 269{
269 if (mType == Email) { 270 if (mType == Email) {
270 mMailAttachFiles.clear(); 271 mMailAttachFiles.clear();
271 mMailAttachFiles += mailAttachFile; 272 mMailAttachFiles += mailAttachFile;
272 mParent->updated(); 273 mParent->updated();
273 } 274 }
274} 275}
275 276
276void Alarm::setMailAttachments(const QStringList &mailAttachFiles) 277void Alarm::setMailAttachments(const QStringList &mailAttachFiles)
277{ 278{
278 if (mType == Email) { 279 if (mType == Email) {
279 mMailAttachFiles = mailAttachFiles; 280 mMailAttachFiles = mailAttachFiles;
280 mParent->updated(); 281 mParent->updated();
281 } 282 }
282} 283}
283 284
284void Alarm::addMailAttachment(const QString &mailAttachFile) 285void Alarm::addMailAttachment(const QString &mailAttachFile)
285{ 286{
286 if (mType == Email) { 287 if (mType == Email) {
287 mMailAttachFiles += mailAttachFile; 288 mMailAttachFiles += mailAttachFile;
288 mParent->updated(); 289 mParent->updated();
289 } 290 }
290} 291}
291 292
292QStringList Alarm::mailAttachments() const 293QStringList Alarm::mailAttachments() const
293{ 294{
294 return (mType == Email) ? mMailAttachFiles : QStringList(); 295 return (mType == Email) ? mMailAttachFiles : QStringList();
295} 296}
296 297
297void Alarm::setMailText(const QString &text) 298void Alarm::setMailText(const QString &text)
298{ 299{
299 if (mType == Email) { 300 if (mType == Email) {
300 mDescription = text; 301 mDescription = text;
301 mParent->updated(); 302 mParent->updated();
302 } 303 }
303} 304}
304 305
305QString Alarm::mailText() const 306QString Alarm::mailText() const
306{ 307{
307 return (mType == Email) ? mDescription : QString::null; 308 return (mType == Email) ? mDescription : QString::null;
308} 309}
309 310
310void Alarm::setDisplayAlarm(const QString &text) 311void Alarm::setDisplayAlarm(const QString &text)
311{ 312{
312 mType = Display; 313 mType = Display;
313 mDescription = text; 314 mDescription = text;
314 mParent->updated(); 315 mParent->updated();
315} 316}
316 317
317void Alarm::setText(const QString &text) 318void Alarm::setText(const QString &text)
318{ 319{
319 if (mType == Display) { 320 if (mType == Display) {
320 mDescription = text; 321 mDescription = text;
321 mParent->updated(); 322 mParent->updated();
322 } 323 }
323} 324}
324 325
325QString Alarm::text() const 326QString Alarm::text() const
326{ 327{
327 return (mType == Display) ? mDescription : QString::null; 328 return (mType == Display) ? mDescription : QString::null;
328} 329}
329 330
330void Alarm::setTime(const QDateTime &alarmTime) 331void Alarm::setTime(const QDateTime &alarmTime)
331{ 332{
332 mAlarmTime = alarmTime; 333 mAlarmTime = alarmTime;
333 mHasTime = true; 334 mHasTime = true;
334 335
335 mParent->updated(); 336 mParent->updated();
336} 337}
337int Alarm::offset() 338int Alarm::offset()
338{ 339{
339 if ( hasTime() ) { 340 if ( hasTime() ) {
340 if (mParent->type()=="Todo") { 341 if (mParent->type()=="Todo") {
341 Todo *t = static_cast<Todo*>(mParent); 342 Todo *t = static_cast<Todo*>(mParent);
342 return t->dtDue().secsTo( mAlarmTime ) ; 343 return t->dtDue().secsTo( mAlarmTime ) ;
343 } else 344 } else
344 return mParent->dtStart().secsTo( mAlarmTime ) ; 345 return mParent->dtStart().secsTo( mAlarmTime ) ;
345 } 346 }
346 else 347 else
347 { 348 {
348 return mOffset.asSeconds(); 349 return mOffset.asSeconds();
349 } 350 }
350 351
351} 352}
353QString Alarm::offsetText()
354{
355 int min = -offset()/60;
356 int hours = min /60;
357 min = min % 60;
358 int days = hours /24;
359 hours = hours % 24;
360 QString message;
361 qDebug("%d %d %d ", days, hours, min );
362 if ( days > 0 )
363 message += i18n("%1d").arg( days );
364 if ( hours > 0 ) {
365 if ( !message.isEmpty() ) message += "/";
366 message += i18n("%1h").arg( hours );
367 }
368 if ( min > 0 ) {
369 if ( !message.isEmpty() ) message += "/";
370 message += i18n("%1min").arg( min );
371 }
372 if ( message.isEmpty() )
373 message = i18n("%1min").arg( 0 );
374 return message;
375}
352 376
353 377
354QDateTime Alarm::time() const 378QDateTime Alarm::time() const
355{ 379{
356 if ( hasTime() ) 380 if ( hasTime() )
357 return mAlarmTime; 381 return mAlarmTime;
358 else 382 else
359 { 383 {
360 if (mParent->type()=="Todo") { 384 if (mParent->type()=="Todo") {
361 Todo *t = static_cast<Todo*>(mParent); 385 Todo *t = static_cast<Todo*>(mParent);
362 return mOffset.end( t->dtDue() ); 386 return mOffset.end( t->dtDue() );
363 } else if (mEndOffset) { 387 } else if (mEndOffset) {
364 return mOffset.end( mParent->dtEnd() ); 388 return mOffset.end( mParent->dtEnd() );
365 } else { 389 } else {
366 return mOffset.end( mParent->dtStart() ); 390 return mOffset.end( mParent->dtStart() );
367 } 391 }
368 } 392 }
369} 393}
370 394
371bool Alarm::hasTime() const 395bool Alarm::hasTime() const
372{ 396{
373 return mHasTime; 397 return mHasTime;
374} 398}
375 399
376void Alarm::setSnoozeTime(int alarmSnoozeTime) 400void Alarm::setSnoozeTime(int alarmSnoozeTime)
377{ 401{
378 mAlarmSnoozeTime = alarmSnoozeTime; 402 mAlarmSnoozeTime = alarmSnoozeTime;
379 mParent->updated(); 403 mParent->updated();
380} 404}
381 405
382int Alarm::snoozeTime() const 406int Alarm::snoozeTime() const
383{ 407{
384 return mAlarmSnoozeTime; 408 return mAlarmSnoozeTime;
385} 409}
386 410
387void Alarm::setRepeatCount(int alarmRepeatCount) 411void Alarm::setRepeatCount(int alarmRepeatCount)
388{ 412{
389 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl; 413 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl;
390 414
391 mAlarmRepeatCount = alarmRepeatCount; 415 mAlarmRepeatCount = alarmRepeatCount;
392 mParent->updated(); 416 mParent->updated();
393} 417}
394 418
395int Alarm::repeatCount() const 419int Alarm::repeatCount() const
396{ 420{
397 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl; 421 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl;
398 return mAlarmRepeatCount; 422 return mAlarmRepeatCount;
399} 423}
400 424
401void Alarm::toggleAlarm() 425void Alarm::toggleAlarm()
402{ 426{
403 mAlarmEnabled = !mAlarmEnabled; 427 mAlarmEnabled = !mAlarmEnabled;
404 mParent->updated(); 428 mParent->updated();
405} 429}
406 430
407void Alarm::setEnabled(bool enable) 431void Alarm::setEnabled(bool enable)
408{ 432{
409 mAlarmEnabled = enable; 433 mAlarmEnabled = enable;
410 mParent->updated(); 434 mParent->updated();
411} 435}
412 436
413bool Alarm::enabled() const 437bool Alarm::enabled() const
414{ 438{
415 return mAlarmEnabled; 439 return mAlarmEnabled;
416} 440}
417 441
418void Alarm::setStartOffset( const Duration &offset ) 442void Alarm::setStartOffset( const Duration &offset )
419{ 443{
420 mOffset = offset; 444 mOffset = offset;
421 mEndOffset = false; 445 mEndOffset = false;
422 mHasTime = false; 446 mHasTime = false;
423 mParent->updated(); 447 mParent->updated();
424} 448}
425 449
426Duration Alarm::startOffset() const 450Duration Alarm::startOffset() const
427{ 451{
428 return (mHasTime || mEndOffset) ? 0 : mOffset; 452 return (mHasTime || mEndOffset) ? 0 : mOffset;
429} 453}
430 454
431bool Alarm::hasStartOffset() const 455bool Alarm::hasStartOffset() const
432{ 456{
433 return !mHasTime && !mEndOffset; 457 return !mHasTime && !mEndOffset;
434} 458}
435 459
436bool Alarm::hasEndOffset() const 460bool Alarm::hasEndOffset() const
437{ 461{
438 return !mHasTime && mEndOffset; 462 return !mHasTime && mEndOffset;
439} 463}
440 464
441void Alarm::setEndOffset( const Duration &offset ) 465void Alarm::setEndOffset( const Duration &offset )
442{ 466{
443 mOffset = offset; 467 mOffset = offset;
444 mEndOffset = true; 468 mEndOffset = true;
445 mHasTime = false; 469 mHasTime = false;
446 mParent->updated(); 470 mParent->updated();
447} 471}
448 472
449Duration Alarm::endOffset() const 473Duration Alarm::endOffset() const
450{ 474{
451 return (mHasTime || !mEndOffset) ? 0 : mOffset; 475 return (mHasTime || !mEndOffset) ? 0 : mOffset;
452} 476}
453 477
454void Alarm::setParent( Incidence *parent ) 478void Alarm::setParent( Incidence *parent )
455{ 479{
456 mParent = parent; 480 mParent = parent;
457} 481}
diff --git a/libkcal/alarm.h b/libkcal/alarm.h
index 682b626..ac6ea0d 100644
--- a/libkcal/alarm.h
+++ b/libkcal/alarm.h
@@ -1,245 +1,246 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#ifndef KCAL_ALARM_H 21#ifndef KCAL_ALARM_H
22#define KCAL_ALARM_H 22#define KCAL_ALARM_H
23 23
24#include <qstring.h> 24#include <qstring.h>
25#include <qvaluelist.h> 25#include <qvaluelist.h>
26 26
27#include "customproperties.h" 27#include "customproperties.h"
28#include "duration.h" 28#include "duration.h"
29#include "person.h" 29#include "person.h"
30 30
31namespace KCal { 31namespace KCal {
32 32
33class Incidence; 33class Incidence;
34 34
35/** 35/**
36 This class represents an alarm notification. 36 This class represents an alarm notification.
37*/ 37*/
38class Alarm : public CustomProperties 38class Alarm : public CustomProperties
39{ 39{
40 public: 40 public:
41 enum Type { Invalid, Display, Procedure, Email, Audio }; 41 enum Type { Invalid, Display, Procedure, Email, Audio };
42 typedef QValueList<Alarm *> List; 42 typedef QValueList<Alarm *> List;
43 43
44 /** Construct a new alarm with variables initialized to "sane" values. */ 44 /** Construct a new alarm with variables initialized to "sane" values. */
45 explicit Alarm(Incidence *parent); 45 explicit Alarm(Incidence *parent);
46 /** Destruct Alarm object. */ 46 /** Destruct Alarm object. */
47 ~Alarm(); 47 ~Alarm();
48 48
49 /** Compare this alarm with another one. */ 49 /** Compare this alarm with another one. */
50 bool operator==(const Alarm &) const; 50 bool operator==(const Alarm &) const;
51 bool operator!=(const Alarm &a) const { return !operator==(a); } 51 bool operator!=(const Alarm &a) const { return !operator==(a); }
52 52
53 /** Set the type of the alarm. 53 /** Set the type of the alarm.
54 If the specified type is different from the current type of the alarm, 54 If the specified type is different from the current type of the alarm,
55 the alarm's type-specific properties are initialised to null. 55 the alarm's type-specific properties are initialised to null.
56 @param type type of alarm. 56 @param type type of alarm.
57 */ 57 */
58 void setType(Type type); 58 void setType(Type type);
59 /** Return the type of the alarm */ 59 /** Return the type of the alarm */
60 Type type() const; 60 Type type() const;
61 int offset(); 61 int offset();
62 QString offsetText();
62 /** Set the alarm to be a display alarm. 63 /** Set the alarm to be a display alarm.
63 @param text text to display when the alarm is triggered. 64 @param text text to display when the alarm is triggered.
64 */ 65 */
65 void setDisplayAlarm(const QString &text); 66 void setDisplayAlarm(const QString &text);
66 /** Set the text to be displayed when the alarm is triggered. 67 /** Set the text to be displayed when the alarm is triggered.
67 Ignored if the alarm is not a display alarm. 68 Ignored if the alarm is not a display alarm.
68 */ 69 */
69 void setText(const QString &text); 70 void setText(const QString &text);
70 /** Return the text string that displays when the alarm is triggered. */ 71 /** Return the text string that displays when the alarm is triggered. */
71 QString text() const; 72 QString text() const;
72 73
73 /** Set the alarm to be an audio alarm. 74 /** Set the alarm to be an audio alarm.
74 @param audioFile optional file to play when the alarm is triggered. 75 @param audioFile optional file to play when the alarm is triggered.
75 */ 76 */
76 void setAudioAlarm(const QString &audioFile = QString::null); 77 void setAudioAlarm(const QString &audioFile = QString::null);
77 /** Set the file to play when the audio alarm is triggered. 78 /** Set the file to play when the audio alarm is triggered.
78 Ignored if the alarm is not an audio alarm. 79 Ignored if the alarm is not an audio alarm.
79 */ 80 */
80 void setAudioFile(const QString &audioFile); 81 void setAudioFile(const QString &audioFile);
81 /** Return the name of the audio file for the alarm. 82 /** Return the name of the audio file for the alarm.
82 @return The audio file for the alarm, or QString::null if not an audio alarm. 83 @return The audio file for the alarm, or QString::null if not an audio alarm.
83 */ 84 */
84 QString audioFile() const; 85 QString audioFile() const;
85 86
86 /** Set the alarm to be a procedure alarm. 87 /** Set the alarm to be a procedure alarm.
87 @param programFile program to execute when the alarm is triggered. 88 @param programFile program to execute when the alarm is triggered.
88 @param arguments arguments to supply to programFile. 89 @param arguments arguments to supply to programFile.
89 */ 90 */
90 void setProcedureAlarm(const QString &programFile, const QString &arguments = QString::null); 91 void setProcedureAlarm(const QString &programFile, const QString &arguments = QString::null);
91 /** Set the program file to execute when the alarm is triggered. 92 /** Set the program file to execute when the alarm is triggered.
92 Ignored if the alarm is not a procedure alarm. 93 Ignored if the alarm is not a procedure alarm.
93 */ 94 */
94 void setProgramFile(const QString &programFile); 95 void setProgramFile(const QString &programFile);
95 /** Return the name of the program file to execute when the alarm is triggered. 96 /** Return the name of the program file to execute when the alarm is triggered.
96 @return the program file name, or QString::null if not a procedure alarm. 97 @return the program file name, or QString::null if not a procedure alarm.
97 */ 98 */
98 QString programFile() const; 99 QString programFile() const;
99 /** Set the arguments to the program to execute when the alarm is triggered. 100 /** Set the arguments to the program to execute when the alarm is triggered.
100 Ignored if the alarm is not a procedure alarm. 101 Ignored if the alarm is not a procedure alarm.
101 */ 102 */
102 void setProgramArguments(const QString &arguments); 103 void setProgramArguments(const QString &arguments);
103 /** Return the arguments to the program to run when the alarm is triggered. 104 /** Return the arguments to the program to run when the alarm is triggered.
104 @return the program arguments, or QString::null if not a procedure alarm. 105 @return the program arguments, or QString::null if not a procedure alarm.
105 */ 106 */
106 QString programArguments() const; 107 QString programArguments() const;
107 108
108 /** Set the alarm to be an email alarm. 109 /** Set the alarm to be an email alarm.
109 @param subject subject line of email. 110 @param subject subject line of email.
110 @param text body of email. 111 @param text body of email.
111 @param addressees email addresses of recipient(s). 112 @param addressees email addresses of recipient(s).
112 @param attachments optional names of files to attach to the email. 113 @param attachments optional names of files to attach to the email.
113 */ 114 */
114 void setEmailAlarm(const QString &subject, const QString &text, const QValueList<Person> &addressees, 115 void setEmailAlarm(const QString &subject, const QString &text, const QValueList<Person> &addressees,
115 const QStringList &attachments = QStringList()); 116 const QStringList &attachments = QStringList());
116 117
117 /** Send mail to this address when the alarm is triggered. 118 /** Send mail to this address when the alarm is triggered.
118 Ignored if the alarm is not an email alarm. 119 Ignored if the alarm is not an email alarm.
119 */ 120 */
120 void setMailAddress(const Person &mailAlarmAddress); 121 void setMailAddress(const Person &mailAlarmAddress);
121 /** Send mail to these addresses when the alarm is triggered. 122 /** Send mail to these addresses when the alarm is triggered.
122 Ignored if the alarm is not an email alarm. 123 Ignored if the alarm is not an email alarm.
123 */ 124 */
124 void setMailAddresses(const QValueList<Person> &mailAlarmAddresses); 125 void setMailAddresses(const QValueList<Person> &mailAlarmAddresses);
125 /** Add this address to the list of addresses to send mail to when the alarm is triggered. 126 /** Add this address to the list of addresses to send mail to when the alarm is triggered.
126 Ignored if the alarm is not an email alarm. 127 Ignored if the alarm is not an email alarm.
127 */ 128 */
128 void addMailAddress(const Person &mailAlarmAddress); 129 void addMailAddress(const Person &mailAlarmAddress);
129 /** return the addresses to send mail to when an alarm goes off */ 130 /** return the addresses to send mail to when an alarm goes off */
130 QValueList<Person> mailAddresses() const; 131 QValueList<Person> mailAddresses() const;
131 132
132 /** Set the subject line of the mail. 133 /** Set the subject line of the mail.
133 Ignored if the alarm is not an email alarm. 134 Ignored if the alarm is not an email alarm.
134 */ 135 */
135 void setMailSubject(const QString &mailAlarmSubject); 136 void setMailSubject(const QString &mailAlarmSubject);
136 /** return the subject line of the mail */ 137 /** return the subject line of the mail */
137 QString mailSubject() const; 138 QString mailSubject() const;
138 139
139 /** Attach this filename to the email. 140 /** Attach this filename to the email.
140 Ignored if the alarm is not an email alarm. 141 Ignored if the alarm is not an email alarm.
141 */ 142 */
142 void setMailAttachment(const QString &mailAttachFile); 143 void setMailAttachment(const QString &mailAttachFile);
143 /** Attach these filenames to the email. 144 /** Attach these filenames to the email.
144 Ignored if the alarm is not an email alarm. 145 Ignored if the alarm is not an email alarm.
145 */ 146 */
146 void setMailAttachments(const QStringList &mailAttachFiles); 147 void setMailAttachments(const QStringList &mailAttachFiles);
147 /** Add this filename to the list of files to attach to the email. 148 /** Add this filename to the list of files to attach to the email.
148 Ignored if the alarm is not an email alarm. 149 Ignored if the alarm is not an email alarm.
149 */ 150 */
150 void addMailAttachment(const QString &mailAttachFile); 151 void addMailAttachment(const QString &mailAttachFile);
151 /** return the filenames to attach to the email */ 152 /** return the filenames to attach to the email */
152 QStringList mailAttachments() const; 153 QStringList mailAttachments() const;
153 154
154 /** Set the email body text. 155 /** Set the email body text.
155 Ignored if the alarm is not an email alarm. 156 Ignored if the alarm is not an email alarm.
156 */ 157 */
157 void setMailText(const QString &text); 158 void setMailText(const QString &text);
158 /** Return the email body text. 159 /** Return the email body text.
159 @return the body text, or QString::null if not an email alarm. 160 @return the body text, or QString::null if not an email alarm.
160 */ 161 */
161 QString mailText() const; 162 QString mailText() const;
162 163
163 /** set the time to trigger an alarm */ 164 /** set the time to trigger an alarm */
164 void setTime(const QDateTime &alarmTime); 165 void setTime(const QDateTime &alarmTime);
165 /** return the date/time when an alarm goes off */ 166 /** return the date/time when an alarm goes off */
166 QDateTime time() const; 167 QDateTime time() const;
167 /** Return true, if the alarm has an explicit date/time. */ 168 /** Return true, if the alarm has an explicit date/time. */
168 bool hasTime() const; 169 bool hasTime() const;
169 170
170 /** Set offset of alarm in time relative to the start of the event. */ 171 /** Set offset of alarm in time relative to the start of the event. */
171 void setStartOffset(const Duration &); 172 void setStartOffset(const Duration &);
172 /** Return offset of alarm in time relative to the start of the event. 173 /** Return offset of alarm in time relative to the start of the event.
173 * If the alarm's time is not defined in terms of an offset relative 174 * If the alarm's time is not defined in terms of an offset relative
174 * to the start of the event, returns zero. 175 * to the start of the event, returns zero.
175 */ 176 */
176 Duration startOffset() const; 177 Duration startOffset() const;
177 /** Return whether the alarm is defined in terms of an offset relative 178 /** Return whether the alarm is defined in terms of an offset relative
178 * to the start of the event. 179 * to the start of the event.
179 */ 180 */
180 bool hasStartOffset() const; 181 bool hasStartOffset() const;
181 182
182 /** Set offset of alarm in time relative to the end of the event. */ 183 /** Set offset of alarm in time relative to the end of the event. */
183 void setEndOffset(const Duration &); 184 void setEndOffset(const Duration &);
184 /** Return offset of alarm in time relative to the end of the event. 185 /** Return offset of alarm in time relative to the end of the event.
185 * If the alarm's time is not defined in terms of an offset relative 186 * If the alarm's time is not defined in terms of an offset relative
186 * to the end of the event, returns zero. 187 * to the end of the event, returns zero.
187 */ 188 */
188 Duration endOffset() const; 189 Duration endOffset() const;
189 /** Return whether the alarm is defined in terms of an offset relative 190 /** Return whether the alarm is defined in terms of an offset relative
190 * to the end of the event. 191 * to the end of the event.
191 */ 192 */
192 bool hasEndOffset() const; 193 bool hasEndOffset() const;
193 194
194 /** Set the interval between snoozes for the alarm. 195 /** Set the interval between snoozes for the alarm.
195 @param snoozeTime the time in minutes between snoozes. 196 @param snoozeTime the time in minutes between snoozes.
196 */ 197 */
197 void setSnoozeTime(int alarmSnoozeTime); 198 void setSnoozeTime(int alarmSnoozeTime);
198 /** Get how long the alarm snooze interval is. 199 /** Get how long the alarm snooze interval is.
199 @return the number of minutes between snoozes. 200 @return the number of minutes between snoozes.
200 */ 201 */
201 int snoozeTime() const; 202 int snoozeTime() const;
202 203
203 /** set how many times an alarm is to repeat itself (w/snoozes) */ 204 /** set how many times an alarm is to repeat itself (w/snoozes) */
204 void setRepeatCount(int alarmRepeatCount); 205 void setRepeatCount(int alarmRepeatCount);
205 /** get how many times an alarm repeats */ 206 /** get how many times an alarm repeats */
206 int repeatCount() const; 207 int repeatCount() const;
207 208
208 /** toggles the value of alarm to be either on or off. 209 /** toggles the value of alarm to be either on or off.
209 set's the alarm time to be x minutes before dtStart time. */ 210 set's the alarm time to be x minutes before dtStart time. */
210 void toggleAlarm(); 211 void toggleAlarm();
211 212
212 /** set the alarm enabled status */ 213 /** set the alarm enabled status */
213 void setEnabled(bool enable); 214 void setEnabled(bool enable);
214 /** get the alarm enabled status */ 215 /** get the alarm enabled status */
215 bool enabled() const; 216 bool enabled() const;
216 217
217 /** Set the alarm's parent incidence */ 218 /** Set the alarm's parent incidence */
218 void setParent( Incidence * ); 219 void setParent( Incidence * );
219 /** get the alarm's parent incidence */ 220 /** get the alarm's parent incidence */
220 Incidence *parent() const { return mParent; } 221 Incidence *parent() const { return mParent; }
221 222
222 private: 223 private:
223 Incidence *mParent; // the incidence which this alarm belongs to 224 Incidence *mParent; // the incidence which this alarm belongs to
224 Type mType; // type of alarm 225 Type mType; // type of alarm
225 QString mDescription; // text to display/email body/procedure arguments 226 QString mDescription; // text to display/email body/procedure arguments
226 QString mFile; // procedure program to run/optional audio file to play 227 QString mFile; // procedure program to run/optional audio file to play
227 QStringList mMailAttachFiles; // filenames to attach to email 228 QStringList mMailAttachFiles; // filenames to attach to email
228 QValueList<Person> mMailAddresses; // who to mail for reminder 229 QValueList<Person> mMailAddresses; // who to mail for reminder
229 QString mMailSubject; // subject of email 230 QString mMailSubject; // subject of email
230 231
231 int mAlarmSnoozeTime; // number of minutes after alarm to 232 int mAlarmSnoozeTime; // number of minutes after alarm to
232 // snooze before ringing again 233 // snooze before ringing again
233 int mAlarmRepeatCount; // number of times for alarm to repeat 234 int mAlarmRepeatCount; // number of times for alarm to repeat
234 // after the initial time 235 // after the initial time
235 236
236 QDateTime mAlarmTime; // time at which to trigger the alarm 237 QDateTime mAlarmTime; // time at which to trigger the alarm
237 Duration mOffset; // time relative to incidence DTSTART to trigger the alarm 238 Duration mOffset; // time relative to incidence DTSTART to trigger the alarm
238 bool mEndOffset; // if true, mOffset relates to DTEND, not DTSTART 239 bool mEndOffset; // if true, mOffset relates to DTEND, not DTSTART
239 bool mHasTime; // use mAlarmTime, not mOffset 240 bool mHasTime; // use mAlarmTime, not mOffset
240 bool mAlarmEnabled; 241 bool mAlarmEnabled;
241}; 242};
242 243
243} 244}
244 245
245#endif 246#endif
diff --git a/libkcal/kincidenceformatter.cpp b/libkcal/kincidenceformatter.cpp
index e506a96..d67ad52 100644
--- a/libkcal/kincidenceformatter.cpp
+++ b/libkcal/kincidenceformatter.cpp
@@ -1,393 +1,403 @@
1#include "kincidenceformatter.h" 1#include "kincidenceformatter.h"
2#include <kstaticdeleter.h> 2#include <kstaticdeleter.h>
3#include <kglobal.h> 3#include <kglobal.h>
4#include <klocale.h> 4#include <klocale.h>
5#ifdef DEKTOP_VERSION 5#ifdef DEKTOP_VERSION
6#include <kabc/stdaddressbook.h> 6#include <kabc/stdaddressbook.h>
7#define size count 7#define size count
8#endif 8#endif
9 9
10KIncidenceFormatter* KIncidenceFormatter::mInstance = 0; 10KIncidenceFormatter* KIncidenceFormatter::mInstance = 0;
11static KStaticDeleter<KIncidenceFormatter> insd; 11static KStaticDeleter<KIncidenceFormatter> insd;
12 12
13QString KIncidenceFormatter::getFormattedText( Incidence * inc, bool details, bool created , bool modified ) 13QString KIncidenceFormatter::getFormattedText( Incidence * inc, bool details, bool created , bool modified )
14{ 14{
15// #ifndef QT_NO_INPUTDIALOG 15// #ifndef QT_NO_INPUTDIALOG
16// return QInputDialog::getItem( caption, label, items, current, editable ); 16// return QInputDialog::getItem( caption, label, items, current, editable );
17// #else 17// #else
18// return QString::null; 18// return QString::null;
19// #endif 19// #endif
20 mDetails = details; 20 mDetails = details;
21 mCreated = created ; 21 mCreated = created ;
22 mModified = modified; 22 mModified = modified;
23 mText = ""; 23 mText = "";
24 if ( inc->type() == "Event" ) 24 if ( inc->type() == "Event" )
25 setEvent((Event *) inc ); 25 setEvent((Event *) inc );
26 else if ( inc->type() == "Todo" ) 26 else if ( inc->type() == "Todo" )
27 setTodo((Todo *) inc ); 27 setTodo((Todo *) inc );
28 return mText; 28 return mText;
29} 29}
30 30
31KIncidenceFormatter* KIncidenceFormatter::instance() 31KIncidenceFormatter* KIncidenceFormatter::instance()
32{ 32{
33 if (!mInstance) { 33 if (!mInstance) {
34 mInstance = insd.setObject(new KIncidenceFormatter()); 34 mInstance = insd.setObject(new KIncidenceFormatter());
35 } 35 }
36 return mInstance; 36 return mInstance;
37} 37}
38KIncidenceFormatter::~KIncidenceFormatter() 38KIncidenceFormatter::~KIncidenceFormatter()
39{ 39{
40 if (mInstance == this) 40 if (mInstance == this)
41 mInstance = insd.setObject(0); 41 mInstance = insd.setObject(0);
42 //qDebug("KIncidenceFormatter::~KIncidenceFormatter "); 42 //qDebug("KIncidenceFormatter::~KIncidenceFormatter ");
43} 43}
44KIncidenceFormatter::KIncidenceFormatter() 44KIncidenceFormatter::KIncidenceFormatter()
45{ 45{
46 mColorMode = 0; 46 mColorMode = 0;
47} 47}
48void KIncidenceFormatter::setEvent(Event *event) 48void KIncidenceFormatter::setEvent(Event *event)
49{ 49{
50 int mode = 0; 50 int mode = 0;
51 mCurrentIncidence = event; 51 mCurrentIncidence = event;
52 bool shortDate = true; 52 bool shortDate = true;
53 if ( mode == 0 ) { 53 if ( mode == 0 ) {
54 addTag("h3",deTag(event->summary())); 54 addTag("h3",deTag(event->summary()));
55 } 55 }
56 else { 56 else {
57 if ( mColorMode == 1 ) { 57 if ( mColorMode == 1 ) {
58 mText +="<font color=\"#00A000\">"; 58 mText +="<font color=\"#00A000\">";
59 } 59 }
60 if ( mColorMode == 2 ) { 60 if ( mColorMode == 2 ) {
61 mText +="<font color=\"#C00000\">"; 61 mText +="<font color=\"#C00000\">";
62 } 62 }
63 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 63 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
64 if ( mode == 1 ) { 64 if ( mode == 1 ) {
65 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 65 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
66 } else { 66 } else {
67 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 67 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
68 } 68 }
69 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 69 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
70 if ( mColorMode ) 70 if ( mColorMode )
71 mText += "</font>"; 71 mText += "</font>";
72 } 72 }
73 if (event->cancelled ()) { 73 if (event->cancelled ()) {
74 mText +="<font color=\"#B00000\">"; 74 mText +="<font color=\"#B00000\">";
75 addTag("i",i18n("This event has been cancelled!")); 75 addTag("i",i18n("This event has been cancelled!"));
76 mText.append("<br>"); 76 mText.append("<br>");
77 mText += "</font>"; 77 mText += "</font>";
78 } 78 }
79 if (!event->location().isEmpty()) { 79 if (!event->location().isEmpty()) {
80 addTag("b",i18n("Location: ")); 80 addTag("b",i18n("Location: "));
81 mText.append(deTag(event->location())+"<br>"); 81 mText.append(deTag(event->location())+"<br>");
82 } 82 }
83 if (event->doesFloat()) { 83 if (event->doesFloat()) {
84 if (event->isMultiDay()) { 84 if (event->isMultiDay()) {
85 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 85 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
86 .arg(event->dtStartDateStr(shortDate)) 86 .arg(event->dtStartDateStr(shortDate))
87 .arg(event->dtEndDateStr(shortDate))); 87 .arg(event->dtEndDateStr(shortDate)));
88 } else { 88 } else {
89 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 89 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
90 } 90 }
91 } else { 91 } else {
92 if (event->isMultiDay()) { 92 if (event->isMultiDay()) {
93 mText.append(i18n("<p><b>From:</b> %1</p> ") 93 mText.append(i18n("<p><b>From:</b> %1</p> ")
94 .arg(event->dtStartStr( shortDate))); 94 .arg(event->dtStartStr( shortDate)));
95 mText.append(i18n("<p><b>To:</b> %1</p>") 95 mText.append(i18n("<p><b>To:</b> %1</p>")
96 .arg(event->dtEndStr(shortDate))); 96 .arg(event->dtEndStr(shortDate)));
97 } else { 97 } else {
98 mText.append(i18n("<p><b>On:</b> %1</p> ") 98 mText.append(i18n("<p><b>On:</b> %1</p> ")
99 .arg(event->dtStartDateStr( shortDate ))); 99 .arg(event->dtStartDateStr( shortDate )));
100 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 100 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
101 .arg(event->dtStartTimeStr()) 101 .arg(event->dtStartTimeStr())
102 .arg(event->dtEndTimeStr())); 102 .arg(event->dtEndTimeStr()));
103 } 103 }
104 } 104 }
105 105
106 if (event->recurrence()->doesRecur()) { 106 if (event->recurrence()->doesRecur()) {
107 107
108 QString recurText = event->recurrence()->recurrenceText(); 108 QString recurText = event->recurrence()->recurrenceText();
109 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 109 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
110 110
111 bool ok; 111 bool ok;
112 QDate start = QDate::currentDate(); 112 QDate start = QDate::currentDate();
113 QDateTime next; 113 QDateTime next;
114 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 114 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
115 if ( ok ) { 115 if ( ok ) {
116 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 116 addTag("p",i18n("<b>Next recurrence is on:</b>") );
117 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 117 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
118 118
119 } else { 119 } else {
120 bool last; 120 bool last;
121 QDate nextd; 121 QDate nextd;
122 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 122 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
123 if ( last ) { 123 if ( last ) {
124 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 124 addTag("p",i18n("<b>Last recurrence was on:</b>") );
125 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 125 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
126 } 126 }
127 } 127 }
128 } 128 }
129 129
130 130
131 if (event->isAlarmEnabled()) { 131 if (event->isAlarmEnabled()) {
132 Alarm *alarm =event->alarms().first() ; 132 Alarm *alarm =event->alarms().first() ;
133 QDateTime t = alarm->time(); 133 QDateTime t = alarm->time();
134 int min = t.secsTo( event->dtStart() )/60; 134 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
135 QString s =i18n("(%1 min before)").arg( min );
136 addTag("p",i18n("<b>Alarm on: </b>") + s + ": "+KGlobal::locale()->formatDateTime( t, shortDate )); 135 addTag("p",i18n("<b>Alarm on: </b>") + s + ": "+KGlobal::locale()->formatDateTime( t, shortDate ));
137 //addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 136 //addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
138 //addTag("p",s); 137 //addTag("p",s);
139 } 138 }
140 139
140
141
141 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() ); 142 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() );
142 // mText.append(event->secrecyStr()+"<br>"); 143 // mText.append(event->secrecyStr()+"<br>");
143 formatCategories(event); 144 formatCategories(event);
144 if ( mDetails ) { 145 if ( mDetails ) {
145 if (!event->description().isEmpty()) { 146 if (!event->description().isEmpty()) {
146 addTag("p",i18n("<b>Details: </b>")); 147 addTag("p",i18n("<b>Details: </b>"));
147 addTag("p",deTag(event->description())); 148 addTag("p",deTag(event->description()));
148 } 149 }
149 } 150 }
150 151
151 formatReadOnly(event); 152 formatReadOnly(event);
152 formatAttendees(event); 153 formatAttendees(event);
153 154
154 if ( mCreated ) { 155 if ( mCreated ) {
155 addTag("p",i18n("<b>Created: ") +" </b>"); 156 addTag("p",i18n("<b>Created: ") +" </b>");
156 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 157 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
157 158
158 } 159 }
159 if ( mModified ) { 160 if ( mModified ) {
160 addTag("p",i18n("<b>Last modified: ") +" </b>"); 161 addTag("p",i18n("<b>Last modified: ") +" </b>");
161 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 162 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
162 163
163 } 164 }
164 165
165} 166}
166 167
167void KIncidenceFormatter::setTodo(Todo *event ) 168void KIncidenceFormatter::setTodo(Todo *event )
168{ 169{
169 int mode = 0; 170 int mode = 0;
170 mCurrentIncidence = event; 171 mCurrentIncidence = event;
171 bool shortDate = true; 172 bool shortDate = true;
172 if (mode == 0 ) 173 if (mode == 0 )
173 addTag("h3",deTag(event->summary())); 174 addTag("h3",deTag(event->summary()));
174 else { 175 else {
175 if ( mColorMode == 1 ) { 176 if ( mColorMode == 1 ) {
176 mText +="<font color=\"#00A000\">"; 177 mText +="<font color=\"#00A000\">";
177 } 178 }
178 if ( mColorMode == 2 ) { 179 if ( mColorMode == 2 ) {
179 mText +="<font color=\"#B00000\">"; 180 mText +="<font color=\"#B00000\">";
180 } 181 }
181 if ( mode == 1 ) { 182 if ( mode == 1 ) {
182 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 183 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
183 } else { 184 } else {
184 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 185 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
185 } 186 }
186 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 187 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
187 if ( mColorMode ) 188 if ( mColorMode )
188 mText += "</font>"; 189 mText += "</font>";
189 } 190 }
190 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 191 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
191 mText +="<font color=\"#B00000\">"; 192 mText +="<font color=\"#B00000\">";
192 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(shortDate) ) ); 193 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(shortDate) ) );
193 mText += "</font>"; 194 mText += "</font>";
194 } else { 195 } else {
195 mText.append(i18n("<p><i>%1 % completed</i></p>") 196 mText.append(i18n("<p><i>%1 % completed</i></p>")
196 .arg(event->percentComplete())); 197 .arg(event->percentComplete()));
197 } 198 }
198 if (event->cancelled ()) { 199 if (event->cancelled ()) {
199 mText +="<font color=\"#B00000\">"; 200 mText +="<font color=\"#B00000\">";
200 addTag("i",i18n("This todo has been cancelled!")); 201 addTag("i",i18n("This todo has been cancelled!"));
201 mText.append("<br>"); 202 mText.append("<br>");
202 mText += "</font>"; 203 mText += "</font>";
203 } 204 }
204 205
205 if (!event->location().isEmpty()) { 206 if (!event->location().isEmpty()) {
206 addTag("b",i18n("Location: ")); 207 addTag("b",i18n("Location: "));
207 mText.append(deTag(event->location())+"<br>"); 208 mText.append(deTag(event->location())+"<br>");
208 } 209 }
209 210
210 if (event->recurrence()->doesRecur()) { 211 if (event->recurrence()->doesRecur()) {
211 212
212 QString recurText = event->recurrence()->recurrenceText(); 213 QString recurText = event->recurrence()->recurrenceText();
213 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 214 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
214 } 215 }
215 216
216 if (event->hasStartDate()) { 217 if (event->hasStartDate()) {
217 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(shortDate))); 218 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(shortDate)));
218 } 219 }
219 220
220 221
221 if (event->hasDueDate()) { 222 if (event->hasDueDate()) {
222 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(shortDate))); 223 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(shortDate)));
223 } 224 }
224 mText.append(i18n("<p><b>Priority:</b> %2</p>") 225 mText.append(i18n("<p><b>Priority:</b> %2</p>")
225 .arg(QString::number(event->priority()))); 226 .arg(QString::number(event->priority())));
226 227
228 if (event->isAlarmEnabled()) {
229 Alarm *alarm =event->alarms().first() ;
230 QDateTime t = alarm->time();
231 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
232 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
233 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
234 //addTag("p",s);
235 }
236
227 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() ); 237 addTag("p",i18n("<b>Access: </b>") +event->secrecyStr() );
228 formatCategories(event); 238 formatCategories(event);
229 if ( mDetails ) { 239 if ( mDetails ) {
230 if (!event->description().isEmpty()) { 240 if (!event->description().isEmpty()) {
231 addTag("p",i18n("<b>Details: </b>")); 241 addTag("p",i18n("<b>Details: </b>"));
232 addTag("p",deTag(event->description())); 242 addTag("p",deTag(event->description()));
233 } 243 }
234 } 244 }
235 formatReadOnly(event); 245 formatReadOnly(event);
236 formatAttendees(event); 246 formatAttendees(event);
237 if ( mCreated ) { 247 if ( mCreated ) {
238 addTag("p",i18n("<b>Created: ") +" </b>"); 248 addTag("p",i18n("<b>Created: ") +" </b>");
239 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 249 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
240 250
241 } 251 }
242 if ( mModified ) { 252 if ( mModified ) {
243 addTag("p",i18n("<b>Last modified: ") +" </b>"); 253 addTag("p",i18n("<b>Last modified: ") +" </b>");
244 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 254 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
245 255
246 } 256 }
247} 257}
248 258
249void KIncidenceFormatter::setJournal(Journal* ) 259void KIncidenceFormatter::setJournal(Journal* )
250{ 260{
251 261
252} 262}
253 263
254void KIncidenceFormatter::formatCategories(Incidence *event) 264void KIncidenceFormatter::formatCategories(Incidence *event)
255{ 265{
256 if (!event->categoriesStr().isEmpty()) { 266 if (!event->categoriesStr().isEmpty()) {
257 addTag("p",i18n("<b>Categories: </b>")+event->categoriesStr() ); 267 addTag("p",i18n("<b>Categories: </b>")+event->categoriesStr() );
258 //mText.append(event->categoriesStr()); 268 //mText.append(event->categoriesStr());
259 } 269 }
260} 270}
261void KIncidenceFormatter::addTag(const QString & tag,const QString & text) 271void KIncidenceFormatter::addTag(const QString & tag,const QString & text)
262{ 272{
263 int number=text.contains("\n"); 273 int number=text.contains("\n");
264 QString str = "<" + tag + ">"; 274 QString str = "<" + tag + ">";
265 QString tmpText=text; 275 QString tmpText=text;
266 QString tmpStr=str; 276 QString tmpStr=str;
267 if(number !=-1) 277 if(number !=-1)
268 { 278 {
269 if (number > 0) { 279 if (number > 0) {
270 int pos=0; 280 int pos=0;
271 QString tmp; 281 QString tmp;
272 for(int i=0;i<=number;i++) { 282 for(int i=0;i<=number;i++) {
273 pos=tmpText.find("\n"); 283 pos=tmpText.find("\n");
274 tmp=tmpText.left(pos); 284 tmp=tmpText.left(pos);
275 tmpText=tmpText.right(tmpText.length()-pos-1); 285 tmpText=tmpText.right(tmpText.length()-pos-1);
276 tmpStr+=tmp+"<br>"; 286 tmpStr+=tmp+"<br>";
277 } 287 }
278 } 288 }
279 else tmpStr += tmpText; 289 else tmpStr += tmpText;
280 tmpStr+="</" + tag + ">"; 290 tmpStr+="</" + tag + ">";
281 mText.append(tmpStr); 291 mText.append(tmpStr);
282 } 292 }
283 else 293 else
284 { 294 {
285 str += text + "</" + tag + ">"; 295 str += text + "</" + tag + ">";
286 mText.append(str); 296 mText.append(str);
287 } 297 }
288} 298}
289 299
290void KIncidenceFormatter::formatAttendees(Incidence *event) 300void KIncidenceFormatter::formatAttendees(Incidence *event)
291{ 301{
292 QPtrList<Attendee> attendees = event->attendees(); 302 QPtrList<Attendee> attendees = event->attendees();
293 if (attendees.count()) { 303 if (attendees.count()) {
294 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 304 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
295 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 305 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
296 addTag("h3",i18n("Organizer")); 306 addTag("h3",i18n("Organizer"));
297 mText.append("<ul><li>"); 307 mText.append("<ul><li>");
298#if 0 308#if 0
299 //ndef KORG_NOKABC 309 //ndef KORG_NOKABC
300 310
301 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 311 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
302 KABC::Addressee::List addressList; 312 KABC::Addressee::List addressList;
303 addressList = add_book->findByEmail(event->organizer()); 313 addressList = add_book->findByEmail(event->organizer());
304 KABC::Addressee o = addressList.first(); 314 KABC::Addressee o = addressList.first();
305 if (!o.isEmpty() && addressList.size()<2) { 315 if (!o.isEmpty() && addressList.size()<2) {
306 mText += "<a href=\"uid:" + o.uid() + "\">"; 316 mText += "<a href=\"uid:" + o.uid() + "\">";
307 mText += o.formattedName(); 317 mText += o.formattedName();
308 mText += "</a>\n"; 318 mText += "</a>\n";
309 } else { 319 } else {
310 mText.append(event->organizer()); 320 mText.append(event->organizer());
311 } 321 }
312#else 322#else
313 mText.append(event->organizer()); 323 mText.append(event->organizer());
314#endif 324#endif
315 if (iconPath) { 325 if (iconPath) {
316 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 326 mText += " <a href=\"mailto:" + event->organizer() + "\">";
317 mText += "<IMG src=\"" + iconPath + "\">"; 327 mText += "<IMG src=\"" + iconPath + "\">";
318 mText += "</a>\n"; 328 mText += "</a>\n";
319 } 329 }
320 mText.append("</li></ul>"); 330 mText.append("</li></ul>");
321 331
322 addTag("h3",i18n("Attendees")); 332 addTag("h3",i18n("Attendees"));
323 Attendee *a; 333 Attendee *a;
324 mText.append("<ul>"); 334 mText.append("<ul>");
325 for(a=attendees.first();a;a=attendees.next()) { 335 for(a=attendees.first();a;a=attendees.next()) {
326#if 0 336#if 0
327//ndef KORG_NOKABC 337//ndef KORG_NOKABC
328 if (a->name().isEmpty()) { 338 if (a->name().isEmpty()) {
329 addressList = add_book->findByEmail(a->email()); 339 addressList = add_book->findByEmail(a->email());
330 KABC::Addressee o = addressList.first(); 340 KABC::Addressee o = addressList.first();
331 if (!o.isEmpty() && addressList.size()<2) { 341 if (!o.isEmpty() && addressList.size()<2) {
332 mText += "<a href=\"uid:" + o.uid() + "\">"; 342 mText += "<a href=\"uid:" + o.uid() + "\">";
333 mText += o.formattedName(); 343 mText += o.formattedName();
334 mText += "</a>\n"; 344 mText += "</a>\n";
335 } else { 345 } else {
336 mText += "<li>"; 346 mText += "<li>";
337 mText.append(a->email()); 347 mText.append(a->email());
338 mText += "\n"; 348 mText += "\n";
339 } 349 }
340 } else { 350 } else {
341 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 351 mText += "<li><a href=\"uid:" + a->uid() + "\">";
342 if (!a->name().isEmpty()) mText += a->name(); 352 if (!a->name().isEmpty()) mText += a->name();
343 else mText += a->email(); 353 else mText += a->email();
344 mText += "</a>\n"; 354 mText += "</a>\n";
345 } 355 }
346#else 356#else
347 //qDebug("nokabc "); 357 //qDebug("nokabc ");
348 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 358 mText += "<li><a href=\"uid:" + a->uid() + "\">";
349 if (!a->name().isEmpty()) mText += a->name(); 359 if (!a->name().isEmpty()) mText += a->name();
350 else mText += a->email(); 360 else mText += a->email();
351 mText += "</a>\n"; 361 mText += "</a>\n";
352#endif 362#endif
353 363
354 if (!a->email().isEmpty()) { 364 if (!a->email().isEmpty()) {
355 if (iconPath) { 365 if (iconPath) {
356 mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">"; 366 mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">";
357 if ( a->RSVP() ) 367 if ( a->RSVP() )
358 mText += "<IMG src=\"" + iconPath + "\">"; 368 mText += "<IMG src=\"" + iconPath + "\">";
359 else 369 else
360 mText += "<IMG src=\"" + NOiconPath + "\">"; 370 mText += "<IMG src=\"" + NOiconPath + "\">";
361 mText += "</a>\n"; 371 mText += "</a>\n";
362 } 372 }
363 } 373 }
364 if (a->status() != Attendee::NeedsAction ) 374 if (a->status() != Attendee::NeedsAction )
365 mText +="[" + a->statusStr() + "] "; 375 mText +="[" + a->statusStr() + "] ";
366 if (a->role() == Attendee::Chair ) 376 if (a->role() == Attendee::Chair )
367 mText +="(" + a->roleStr().left(1) + ".)"; 377 mText +="(" + a->roleStr().left(1) + ".)";
368 } 378 }
369 mText.append("</li></ul>"); 379 mText.append("</li></ul>");
370 } 380 }
371} 381}
372 382
373void KIncidenceFormatter::formatReadOnly(Incidence *event) 383void KIncidenceFormatter::formatReadOnly(Incidence *event)
374{ 384{
375 if (event->isReadOnly()) { 385 if (event->isReadOnly()) {
376 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 386 addTag("p","<em>(" + i18n("read-only") + ")</em>");
377 } 387 }
378} 388}
379QString KIncidenceFormatter::deTag(QString text) 389QString KIncidenceFormatter::deTag(QString text)
380{ 390{
381#if QT_VERSION >= 0x030000 391#if QT_VERSION >= 0x030000
382 text.replace( '<' , "&lt;" ); 392 text.replace( '<' , "&lt;" );
383 text.replace( '>' , "&gt;" ); 393 text.replace( '>' , "&gt;" );
384#else 394#else
385 if ( text.find ('<') >= 0 ) { 395 if ( text.find ('<') >= 0 ) {
386 text.replace( QRegExp("<") , "&lt;" ); 396 text.replace( QRegExp("<") , "&lt;" );
387 } 397 }
388 if ( text.find ('>') >= 0 ) { 398 if ( text.find ('>') >= 0 ) {
389 text.replace( QRegExp(">") , "&gt;" ); 399 text.replace( QRegExp(">") , "&gt;" );
390 } 400 }
391#endif 401#endif
392 return text; 402 return text;
393} 403}