summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt5
-rw-r--r--korganizer/journalentry.cpp53
-rw-r--r--korganizer/journalentry.h4
-rw-r--r--korganizer/kodaymatrix.cpp27
-rw-r--r--korganizer/koeventviewer.cpp3
-rw-r--r--korganizer/kojournalview.cpp22
-rw-r--r--korganizer/kojournalview.h2
-rw-r--r--korganizer/kolistview.cpp14
-rw-r--r--korganizer/searchdialog.cpp37
9 files changed, 113 insertions, 54 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 4df2005..510f4bf 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1467 +1,1472 @@
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","Lösche alles" }, 128{ "Delete All","Lösche alles" },
129{ "Delete all selected","Lösche alle Selektierten" }, 129{ "Delete all selected","Lösche alle Selektierten" },
130{ "Delete Current","Aktuellen löschen" }, 130{ "Delete Current","Aktuellen löschen" },
131{ "Delete Event...","Lösche Termin..." }, 131{ "Delete Event...","Lösche Termin..." },
132{ "Delete Event","Lösche Termin" }, 132{ "Delete Event","Lösche Termin" },
133{ "&Delete","Löschen" }, 133{ "&Delete","Löschen" },
134{ "Delete...","Löschen..." }, 134{ "Delete...","Löschen..." },
135{ "Delete","Löschen" }, 135{ "Delete","Löschen" },
136{ "Delete Todo...","Lösche Todo..." }, 136{ "Delete Todo...","Lösche Todo..." },
137{ "Delete To-Do","Lösche Todo" }, 137{ "Delete To-Do","Lösche Todo" },
138{ "Deleting item %d ...","Lösche Eintrag %d..." }, 138{ "Deleting item %d ...","Lösche Eintrag %d..." },
139{ "Descriptions","Beschreibungen" }, 139{ "Descriptions","Beschreibungen" },
140{ "Deselect all","Deselektiere Alle" }, 140{ "Deselect all","Deselektiere Alle" },
141{ "Details","Details" }, 141{ "Details","Details" },
142{ "Dinner","Abendessen" }, 142{ "Dinner","Abendessen" },
143{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 143{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
144{ "Due Date","Fällig am" }, 144{ "Due Date","Fällig am" },
145{ "Due: ","Fällig: "}, 145{ "Due: ","Fällig: "},
146{ "Due Time","Fällig um" }, 146{ "Due Time","Fällig um" },
147{ "Due:","Fällig:"}, 147{ "Due:","Fällig:"},
148{ "Duration: ","Dauer: " }, 148{ "Duration: ","Dauer: " },
149{ "Edit...","Bearbeite..." }, 149{ "Edit...","Bearbeite..." },
150{ "Edit","Bearbeite" }, 150{ "Edit","Bearbeite" },
151{ "Edit Event...","Bearbeite Termin..." }, 151{ "Edit Event...","Bearbeite Termin..." },
152{ "Edit Event","Bearbeite Termin" }, 152{ "Edit Event","Bearbeite Termin" },
153{ "Edit exceptions","Bearbeite Ausnahmen" }, 153{ "Edit exceptions","Bearbeite Ausnahmen" },
154{ "EditorBox:","Editor Fenster:" }, 154{ "EditorBox:","Editor Fenster:" },
155{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 155{ "Edit Recurrence Range","Bearbeite Wiederholung" },
156{ "Edit Todo...","Berabeite Todo..." }, 156{ "Edit Todo...","Berabeite Todo..." },
157{ "Edit To-Do","Todo bearbeiten" }, 157{ "Edit To-Do","Todo bearbeiten" },
158{ "E&mail address:","E&mail Adresse:" }, 158{ "E&mail address:","E&mail Adresse:" },
159{ "(EmptyEmail)","(KeineEmail)" }, 159{ "(EmptyEmail)","(KeineEmail)" },
160{ "(EmptyName)","(KeinName)" }, 160{ "(EmptyName)","(KeinName)" },
161{ "Enable Recurrence","Wiederholung anschalten" }, 161{ "Enable Recurrence","Wiederholung anschalten" },
162{ "End after","Endet nach"}, 162{ "End after","Endet nach"},
163{ "End by:","Endet am"}, 163{ "End by:","Endet am"},
164{ "End Date","End Datum" }, 164{ "End Date","End Datum" },
165{ "End:","Ende:" }, 165{ "End:","Ende:" },
166{ "End Time","End Zeit" }, 166{ "End Time","End Zeit" },
167{ "English","Englisch" }, 167{ "English","Englisch" },
168{ "Event","Termin" }, 168{ "Event","Termin" },
169{ "Event list","Termin Liste" }, 169{ "Event list","Termin Liste" },
170{ "Events","Termine" }, 170{ "Events","Termine" },
171{ "Event Viewer:","Termin Übersicht:" }, 171{ "Event Viewer:","Termin Übersicht:" },
172{ "every","jede" }, 172{ "every","jede" },
173{ "Exceptions...","Ausnahmen..." }, 173{ "Exceptions...","Ausnahmen..." },
174{ "Exceptions","Ausnahmen" }, 174{ "Exceptions","Ausnahmen" },
175{ "Exclude holidays","Ohne freie Tage" }, 175{ "Exclude holidays","Ohne freie Tage" },
176{ "Exclude Saturdays","Ohne Samstage" }, 176{ "Exclude Saturdays","Ohne Samstage" },
177{ "Feb","Feb" }, 177{ "Feb","Feb" },
178{ "February","Februar" }, 178{ "February","Februar" },
179{ "&Find","Suche!" }, 179{ "&Find","Suche!" },
180{ "Fonts","Schriftart" }, 180{ "Fonts","Schriftart" },
181{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 181{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
182{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 182{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
183{ "Free","Frei" }, 183{ "Free","Frei" },
184{ "Friday","Freitag" }, 184{ "Friday","Freitag" },
185{ "Fri","Fr" }, 185{ "Fri","Fr" },
186{ "From:","Vom:" }, 186{ "From:","Vom:" },
187{ "Full &name:","Vor- und &Nachname:" }, 187{ "Full &name:","Vor- und &Nachname:" },
188{ "General","Allgemein" }, 188{ "General","Allgemein" },
189{ "German","Deutsch" }, 189{ "German","Deutsch" },
190{ "Gifts","Geschenke" }, 190{ "Gifts","Geschenke" },
191{ "Go to Today","Heute anzeigen" }, 191{ "Go to Today","Heute anzeigen" },
192{ "Help","Hilfe" }, 192{ "Help","Hilfe" },
193{ "Hide Dates","Daten ausblenden" }, 193{ "Hide Dates","Daten ausblenden" },
194{ "Highlight color:","Markierungen:" }, 194{ "Highlight color:","Markierungen:" },
195{ "Holiday color:","Freie Tage:" }, 195{ "Holiday color:","Freie Tage:" },
196{ "hour(s)","Stunde(n)" }, 196{ "hour(s)","Stunde(n)" },
197{ "In %1 days: ","In %1 Tagen: " }, 197{ "In %1 days: ","In %1 Tagen: " },
198{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 198{ "Incomplete Todo:","Unerledigte Aufgaben:" },
199{ "Information","Information" }, 199{ "Information","Information" },
200{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 200{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
201{ "Jan","Jan" }, 201{ "Jan","Jan" },
202{ "January","Januar" }, 202{ "January","Januar" },
203{ "JournalView:","Journal Ansicht:" }, 203{ "JournalView:","Journal Ansicht:" },
204{ "Journals","Journale" }, 204{ "Journals","Journale" },
205{ "Jul","Jul" }, 205{ "Jul","Jul" },
206{ "July","Juli" }, 206{ "July","Juli" },
207{ "Jump to date","Springe zum Datum" }, 207{ "Jump to date","Springe zum Datum" },
208{ "June","Juni" }, 208{ "June","Juni" },
209{ "Jun","Jun" }, 209{ "Jun","Jun" },
210{ "Key Bindings...","Tastenzuordnung..." }, 210{ "Key Bindings...","Tastenzuordnung..." },
211{ "Kids","Kinder" }, 211{ "Kids","Kinder" },
212{ "Known Problems...","Bekannte Probleme..." }, 212{ "Known Problems...","Bekannte Probleme..." },
213{ "KO/Pi Find ","KO/Pi Suchdialog " }, 213{ "KO/Pi Find ","KO/Pi Suchdialog " },
214{ "KO/Pi Find: ","KO/Pi Suchen: " }, 214{ "KO/Pi Find: ","KO/Pi Suchen: " },
215{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 215{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
216{ "Language:(needs restart)","Sprache (Neustart!)" }, 216{ "Language:(needs restart)","Sprache (Neustart!)" },
217{ "Language:","Sprache" }, 217{ "Language:","Sprache" },
218{ "Large","Etwas mehr" }, 218{ "Large","Etwas mehr" },
219{ "List View:","Listenansicht:" }, 219{ "List View:","Listenansicht:" },
220{ "List View","Listenansicht" }, 220{ "List View","Listenansicht" },
221{ "Load/Save","Laden/Speichern" }, 221{ "Load/Save","Laden/Speichern" },
222{ "Load Template","Lade Vorlage" }, 222{ "Load Template","Lade Vorlage" },
223{ "Locale","Localisation" }, 223{ "Locale","Localisation" },
224{ "Local temp file:","Lokale temp. Datei:" }, 224{ "Local temp file:","Lokale temp. Datei:" },
225{ "Location: ","Ort: " }, 225{ "Location: ","Ort: " },
226{ "Location:","Ort:" }, 226{ "Location:","Ort:" },
227{ "Mail client","Mail Programm" }, 227{ "Mail client","Mail Programm" },
228{ "Mail Client","Mail Programm" }, 228{ "Mail Client","Mail Programm" },
229{ "March","März" }, 229{ "March","März" },
230{ "Mar","Mär" }, 230{ "Mar","Mär" },
231{ "May","Mai" }, 231{ "May","Mai" },
232{ "M. Bains line:","M. Bains Linie:" }, 232{ "M. Bains line:","M. Bains Linie:" },
233{ "Medium","Medium" }, 233{ "Medium","Medium" },
234{ "Method","Methode" }, 234{ "Method","Methode" },
235{ "minute(s)","Minute(n)" }, 235{ "minute(s)","Minute(n)" },
236{ "Monday","Montag" }, 236{ "Monday","Montag" },
237{ "Mon","Mo" }, 237{ "Mon","Mo" },
238{ "Monthly","Monatlich" }, 238{ "Monthly","Monatlich" },
239{ "Month not long enough","Monat ist nicht lang genug" }, 239{ "Month not long enough","Monat ist nicht lang genug" },
240{ "month(s)","Monat(e)" }, 240{ "month(s)","Monat(e)" },
241{ "Month view:","Monatsansicht:" }, 241{ "Month view:","Monatsansicht:" },
242{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 242{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
243{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" }, 243{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" },
244{ "Move &Down","Nach unten verschieben" }, 244{ "Move &Down","Nach unten verschieben" },
245{ "Move &Up","Nach oben verschieben" }, 245{ "Move &Up","Nach oben verschieben" },
246{ "Name:","Name:" }, 246{ "Name:","Name:" },
247{ "Name","Name" }, 247{ "Name","Name" },
248{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 248{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
249{ "%n Days","%n Tage" }, 249{ "%n Days","%n Tage" },
250{ "Never","Nie" }, 250{ "Never","Nie" },
251{ "New event...","Neuer Termin..." }, 251{ "New event...","Neuer Termin..." },
252{ "New event","Neuer Termin" }, 252{ "New event","Neuer Termin" },
253{ "New Event...","Neuer Termin..." }, 253{ "New Event...","Neuer Termin..." },
254{ "New Events/Todos should","Neue Termine/Todos sollten" }, 254{ "New Events/Todos should","Neue Termine/Todos sollten" },
255{ "&New","&Neu" }, 255{ "&New","&Neu" },
256{ "New","Neu", }, 256{ "New","Neu", },
257{ "New Sub-Todo...","Neues Sub-Todo..." }, 257{ "New Sub-Todo...","Neues Sub-Todo..." },
258{ "New Todo...","Neues Todo..." }, 258{ "New Todo...","Neues Todo..." },
259{ "Next Alarm: ","Nächster Alarm: ", }, 259{ "Next Alarm: ","Nächster Alarm: ", },
260{ "&Next Day","&Nächster Tag", }, 260{ "&Next Day","&Nächster Tag", },
261{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 261{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
262{ "Next month","Nächster Monat" }, 262{ "Next month","Nächster Monat" },
263{ "&Next Week","&Nächste Woche" }, 263{ "&Next Week","&Nächste Woche" },
264{ "Next year","Nächstes Jahr" }, 264{ "Next year","Nächstes Jahr" },
265{ "Next Year","Nächstes Jahr" }, 265{ "Next Year","Nächstes Jahr" },
266{ "%n h","%n Std" }, 266{ "%n h","%n Std" },
267{ "No ending date","Kein End-Datum", }, 267{ "No ending date","Kein End-Datum", },
268{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 268{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
269{ "No event selected.","Kein Termin selektiert" }, 269{ "No event selected.","Kein Termin selektiert" },
270{ "No","Nein" }, 270{ "No","Nein" },
271{ "No program set","Kein Programm ausgewählt", }, 271{ "No program set","Kein Programm ausgewählt", },
272{ "Normal","Normal" }, 272{ "Normal","Normal" },
273{ "[No selection]","Keine Selektion", }, 273{ "[No selection]","Keine Selektion", },
274{ "No sound set","Kein Sound ausgewählt", }, 274{ "No sound set","Kein Sound ausgewählt", },
275{ "no time ","keine Zeit ", }, 275{ "no time ","keine Zeit ", },
276{ "no time","keine Zeit", }, 276{ "no time","keine Zeit", },
277{ "No Time","Keine Zeit" }, 277{ "No Time","Keine Zeit" },
278{ "November","November" }, 278{ "November","November" },
279{ "Nov","Nov", }, 279{ "Nov","Nov", },
280{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 280{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
281{ "occurrence(s)","Vorkommen" }, 281{ "occurrence(s)","Vorkommen" },
282{ "October","Oktober" }, 282{ "October","Oktober" },
283{ "Oct","Okt", }, 283{ "Oct","Okt", },
284{ "O-due!","Ü-fällig! " }, 284{ "O-due!","Ü-fällig! " },
285{ "&OK","&OK" }, 285{ "&OK","&OK" },
286{ "Ok+Show!","Ok+Anzeigen" }, 286{ "Ok+Show!","Ok+Anzeigen" },
287{ "Organizer: %1","Organisator %1" }, 287{ "Organizer: %1","Organisator %1" },
288{ "Organizer","Organisator" }, 288{ "Organizer","Organisator" },
289{ "Owner: ","Besitzer: " }, 289{ "Owner: ","Besitzer: " },
290{ "Owner:","Besitzer:" }, 290{ "Owner:","Besitzer:" },
291{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 291{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
292{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 292{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
293{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 293{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
294{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." }, 294{ "Please specify a valid end date,\nfor example '%1'.","Bitte gültiges Enddatum angeben,\nz.B.'%1'." },
295{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 295{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
296{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." }, 296{ "Please specify a valid start date,\nfor example '%1'.","Bitte gültiges Startdatum angeben,\nz.B. '%1'." },
297{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 297{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
298{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." }, 298{ "Please specify a valid start time,\nfor example '%1'.","Bitte gültige Startzeit angeben,\nz.B. '%1'." },
299{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 299{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
300{ "&Previous Day","Vorheriger Tag" }, 300{ "&Previous Day","Vorheriger Tag" },
301{ "Previous month","Vorheriger Monat" }, 301{ "Previous month","Vorheriger Monat" },
302{ "Previous Month","Vorheriger Monat" }, 302{ "Previous Month","Vorheriger Monat" },
303{ "&Previous Week","Vorherige Woche" }, 303{ "&Previous Week","Vorherige Woche" },
304{ "Previous year","Vorheriges Jahr" }, 304{ "Previous year","Vorheriges Jahr" },
305{ "Previous Year","Vorheriges Jahr" }, 305{ "Previous Year","Vorheriges Jahr" },
306{ "Printing","Drucken" }, 306{ "Printing","Drucken" },
307{ "Priority:","Priorität:" }, 307{ "Priority:","Priorität:" },
308{ "Private","Privat" }, 308{ "Private","Privat" },
309{ "Proceed","Weiter" }, 309{ "Proceed","Weiter" },
310{ "Public","Öffentlich" }, 310{ "Public","Öffentlich" },
311{ "Purge","Entferne" }, 311{ "Purge","Entferne" },
312{ "Purge Completed","Entferne erledigte Todos" }, 312{ "Purge Completed","Entferne erledigte Todos" },
313{ "Purge Todos","Todos bereinigen" }, 313{ "Purge Todos","Todos bereinigen" },
314{ "read-only","schreibgeschützt" }, 314{ "read-only","schreibgeschützt" },
315{ "Recur every","Wiederh. alle" }, 315{ "Recur every","Wiederh. alle" },
316{ "Recur in the month of","Wiederh. im Monat" }, 316{ "Recur in the month of","Wiederh. im Monat" },
317{ "Recur on the","Wiederh. am" }, 317{ "Recur on the","Wiederh. am" },
318{ "Recur on this day","Wiederh. am diesen Tag" }, 318{ "Recur on this day","Wiederh. am diesen Tag" },
319{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 319{ "Recurrence Range...","Wiederholungs Zeitraum..." },
320{ "Recurrence Range","Wiederholungs Zeitraum" }, 320{ "Recurrence Range","Wiederholungs Zeitraum" },
321{ "Recurrence Rule","Wiederholungs Regel" }, 321{ "Recurrence Rule","Wiederholungs Regel" },
322{ "Recurrence","Wiederholung" }, 322{ "Recurrence","Wiederholung" },
323{ "Recurs","Wiederholung" }, 323{ "Recurs","Wiederholung" },
324{"&Reject","Abweisen"}, 324{"&Reject","Abweisen"},
325{ "Reminder:","Alarm:" }, 325{ "Reminder:","Alarm:" },
326{ "Rem.:","Alarm:" }, 326{ "Rem.:","Alarm:" },
327{ "Rem.","Alarm:" }, 327{ "Rem.","Alarm:" },
328{ "Remote file:","Remote Datei:"}, 328{ "Remote file:","Remote Datei:"},
329{ "Remote IP:","Remote (ferne) IP:" }, 329{ "Remote IP:","Remote (ferne) IP:" },
330{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 330{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
331{ "Remote user:","Remote Benutzer"}, 331{ "Remote user:","Remote Benutzer"},
332{ "&Remove","Entfe&rnen" }, 332{ "&Remove","Entfe&rnen" },
333{ "Remove","Entfernen" }, 333{ "Remove","Entfernen" },
334{ "Request response","Bemerkung anfordern" }, 334{ "Request response","Bemerkung anfordern" },
335{ "Role:","Rolle:" }, 335{ "Role:","Rolle:" },
336{ "Role","Rolle" }, 336{ "Role","Rolle" },
337{ "Sat","Sa" }, 337{ "Sat","Sa" },
338{ "Saturday","Samstag" }, 338{ "Saturday","Samstag" },
339{ "Search for:","Suche nach:" }, 339{ "Search for:","Suche nach:" },
340{ "Search In","Suche in" }, 340{ "Search In","Suche in" },
341{ "Search...","Suche..." }, 341{ "Search...","Suche..." },
342{ "Search","Suche" }, 342{ "Search","Suche" },
343{ "Select Addresses","Wähle Adressen" }, 343{ "Select Addresses","Wähle Adressen" },
344{ "Select all","Selektiere Alle" }, 344{ "Select all","Selektiere Alle" },
345{ "Select a month","Wähle Monat" }, 345{ "Select a month","Wähle Monat" },
346{ "Select a week","Wähle Woche" }, 346{ "Select a week","Wähle Woche" },
347{ "Select a year","Wähle Jahr" }, 347{ "Select a year","Wähle Jahr" },
348{ "Send directly","Sende direkt" }, 348{ "Send directly","Sende direkt" },
349{ "&Send Messages","&Sende Nachrichten", }, 349{ "&Send Messages","&Sende Nachrichten", },
350{ "Sep","Sep" }, 350{ "Sep","Sep" },
351{ "September","September" }, 351{ "September","September" },
352{ "Shopping","Einkaufen" }, 352{ "Shopping","Einkaufen" },
353{ "Show Dates","Zeige Daten" }, 353{ "Show Dates","Zeige Daten" },
354{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 354{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
355{ "Show Event...","Zeige Termin..." }, 355{ "Show Event...","Zeige Termin..." },
356{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 356{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
357{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 357{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
358{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 358{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
359{ "Show time as:","Zeige Zeit als" }, 359{ "Show time as:","Zeige Zeit als" },
360{ "Show Todo...","Zeige To-Do" }, 360{ "Show Todo...","Zeige To-Do" },
361{ "Vertical screen layout(Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 361{ "Vertical screen layout(Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
362{ "&Show","Zeige" }, 362{ "&Show","Zeige" },
363{ "Show...","Zeige..." }, 363{ "Show...","Zeige..." },
364{ "Show","Zeige" }, 364{ "Show","Zeige" },
365{ "Small","Klein" }, 365{ "Small","Klein" },
366{ "Sorry","Entschuldigung" }, 366{ "Sorry","Entschuldigung" },
367{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 367{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
368{ "Start:","Start:" }, 368{ "Start:","Start:" },
369{ "Start Date","Start Datum" }, 369{ "Start Date","Start Datum" },
370{ "Start date: %1","Start Datum: %1" }, 370{ "Start date: %1","Start Datum: %1" },
371{ "Start Time","Start Zeit" }, 371{ "Start Time","Start Zeit" },
372{ "Status:","Status:" }, 372{ "Status:","Status:" },
373{ "Status","Status:" }, 373{ "Status","Status:" },
374{ "Summaries","Titel" }, 374{ "Summaries","Titel" },
375{ "Summary:","Titel:" }, 375{ "Summary:","Titel:" },
376{ "Summary","Titel" }, 376{ "Summary","Titel" },
377{ "Sunday","Sonntag" }, 377{ "Sunday","Sonntag" },
378{ "Sun","So" }, 378{ "Sun","So" },
379{ "Sync preferences:","Sync Einstellungen" }, 379{ "Sync preferences:","Sync Einstellungen" },
380{ "Sync Prefs","Sync Einstellungen" }, 380{ "Sync Prefs","Sync Einstellungen" },
381{ "Syncronize","Daten abgleich" }, 381{ "Syncronize","Daten abgleich" },
382{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 382{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
383{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 383{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
384{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 384{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
385{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" }, 385{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" },
386{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 386{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
387{ "Template...","Vorlage..." }, 387{ "Template...","Vorlage..." },
388{ "This day","Dieser Tag" }, 388{ "This day","Dieser Tag" },
389{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 389{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
390{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 390{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
391{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 391{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
392{ "Thu","Do" }, 392{ "Thu","Do" },
393{ "Thursday","Donnerstag" }, 393{ "Thursday","Donnerstag" },
394{ "Time associated","Mit Zeit" }, 394{ "Time associated","Mit Zeit" },
395{ "Time bar:","Uhrzeit Zeile:" }, 395{ "Time bar:","Uhrzeit Zeile:" },
396{ "Time && Date","Zeit und Datum" }, 396{ "Time && Date","Zeit und Datum" },
397{ "Time Format","Zeit Format" }, 397{ "Time Format","Zeit Format" },
398{ "Time Format(nr):","Zeit Format(Neustart!)" }, 398{ "Time Format(nr):","Zeit Format(Neustart!)" },
399{ "Date Labels:","Datumsleiste:" }, 399{ "Date Labels:","Datumsleiste:" },
400{ "Time: ","Zeit: " }, 400{ "Time: ","Zeit: " },
401{ "Timezone:","Zeitzone:" }, 401{ "Timezone:","Zeitzone:" },
402{ "To: ","Bis: " }, 402{ "To: ","Bis: " },
403{ "To:","Bis:" }, 403{ "To:","Bis:" },
404{ "Today: ","Heute: " }, 404{ "Today: ","Heute: " },
405{ "Todo due today color:","Heute fällige To-Do's" }, 405{ "Todo due today color:","Heute fällige To-Do's" },
406{ "To-do items:","To-Do items:" }, 406{ "To-do items:","To-Do items:" },
407{ "Todo overdue color:","Überfällige To-Do's" }, 407{ "Todo overdue color:","Überfällige To-Do's" },
408{ "Todo","Todo" }, 408{ "Todo","Todo" },
409{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" }, 409{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" },
410{ "ToDoView:","Todo Ansicht:" }, 410{ "ToDoView:","Todo Ansicht:" },
411{ "Toggle Alarm","Wechsle Alarm" }, 411{ "Toggle Alarm","Wechsle Alarm" },
412{ "Toggle Allday","Umschalten Ganztag" }, 412{ "Toggle Allday","Umschalten Ganztag" },
413{ "Tomorrow: ","Morgen: " }, 413{ "Tomorrow: ","Morgen: " },
414{ "Tue","Di" }, 414{ "Tue","Di" },
415{ "Tuesday","Dienstag" }, 415{ "Tuesday","Dienstag" },
416{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 416{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
417{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 417{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
418{ "Unknown","Unbekannt" }, 418{ "Unknown","Unbekannt" },
419{ "Up","Hinauf" }, 419{ "Up","Hinauf" },
420{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 420{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
421{ "User defined","Benutzerdefiniert" }, 421{ "User defined","Benutzerdefiniert" },
422{ "User long date:","Format langes Datum:" }, 422{ "User long date:","Format langes Datum:" },
423{ "User short date:","Forma kurzes Datum:" }, 423{ "User short date:","Forma kurzes Datum:" },
424{ "View","Ansicht" }, 424{ "View","Ansicht" },
425{ "View Fonts","Schriftarten Ansichten" }, 425{ "View Fonts","Schriftarten Ansichten" },
426{ "Views","Ansichten" }, 426{ "Views","Ansichten" },
427{ "Wed","Mi" }, 427{ "Wed","Mi" },
428{ "Wednesday","Mittwoch" }, 428{ "Wednesday","Mittwoch" },
429{ "Week %1","Woche %1" }, 429{ "Week %1","Woche %1" },
430{ "Weekly","Wöchentlich" }, 430{ "Weekly","Wöchentlich" },
431{ "Week starts on Sunday","Woche beginnt Sonntags" }, 431{ "Week starts on Sunday","Woche beginnt Sonntags" },
432{ "What's Next View:","What's Next Anz." }, 432{ "What's Next View:","What's Next Anz." },
433{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 433{ "What's next ?","Was kommt als nächstes?(What's Next)" },
434{ "Working Hours","Tägliche Arbeitszeit" }, 434{ "Working Hours","Tägliche Arbeitszeit" },
435{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 435{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
436{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 436{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
437{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 437{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
438{ "Yearly","Jährlich" }, 438{ "Yearly","Jährlich" },
439{ "year(s)","Jahr(e)" }, 439{ "year(s)","Jahr(e)" },
440{ "Yes","Ja" }, 440{ "Yes","Ja" },
441{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 441{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
442{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 442{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
443{ "week(s) on:","Woche(n) am: " }, 443{ "week(s) on:","Woche(n) am: " },
444{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 444{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
445{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 445{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
446{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 446{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
447{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 447{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
448{ "Daylight start:","Sommerzeit Start:" }, 448{ "Daylight start:","Sommerzeit Start:" },
449{ "Daylight end:","Sommerzeit Ende:" }, 449{ "Daylight end:","Sommerzeit Ende:" },
450{ "Time Zone","Zeitzone" }, 450{ "Time Zone","Zeitzone" },
451{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 451{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
452{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 452{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
453{ "minutely","minütlich" }, 453{ "minutely","minütlich" },
454{ "hourly","stündlich" }, 454{ "hourly","stündlich" },
455{ "daily","täglich" }, 455{ "daily","täglich" },
456{ "weekly","wöchentlich" }, 456{ "weekly","wöchentlich" },
457{ "monthly","monatlich" }, 457{ "monthly","monatlich" },
458{ "day-monthly","tag-monatlich" }, 458{ "day-monthly","tag-monatlich" },
459{ "month-yearly","monat-jährlich" }, 459{ "month-yearly","monat-jährlich" },
460{ "day-yearly","tag-jährlich" }, 460{ "day-yearly","tag-jährlich" },
461{ "position-yearly","pos-jährlich" }, 461{ "position-yearly","pos-jährlich" },
462{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 462{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
463{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 463{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
464{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 464{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
465{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 465{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
466{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 466{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
467{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 467{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
468{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 468{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
469{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 469{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
470{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 470{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
471{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 471{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
472{ "ViewChange","Ansichtswechsel" }, 472{ "ViewChange","Ansichtswechsel" },
473{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 473{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
474{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 474{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
475{ "File","Datei" }, 475{ "File","Datei" },
476{ "Clone...","Dupliziere.." }, 476{ "Clone...","Dupliziere.." },
477{ "Move...","Bewege..." }, 477{ "Move...","Bewege..." },
478{ "Beam...","Sende via IR..." }, 478{ "Beam...","Sende via IR..." },
479{ "&Clone...","Dupliziere.." }, 479{ "&Clone...","Dupliziere.." },
480{ "&Move...","Bewege..." }, 480{ "&Move...","Bewege..." },
481{ "&Beam...","Sende via IR..." }, 481{ "&Beam...","Sende via IR..." },
482{ "Show Completed","Zeige erledigte Todos" }, 482{ "Show Completed","Zeige erledigte Todos" },
483{ "Show Quick Todo","Zeige Quick Todo" }, 483{ "Show Quick Todo","Zeige Quick Todo" },
484{ "Unparent Todo","Un-sub Todo" }, 484{ "Unparent Todo","Un-sub Todo" },
485{ "Save selected to file...","Speichere Selektierte..." }, 485{ "Save selected to file...","Speichere Selektierte..." },
486{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 486{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
487{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 487{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
488{ "Beam selected via IR","Sende Selekt. via IR..." }, 488{ "Beam selected via IR","Sende Selekt. via IR..." },
489{ "Search","Suchen" }, 489{ "Search","Suchen" },
490{ "Date Picker","Datum auswählen" }, 490{ "Date Picker","Datum auswählen" },
491{ "Day View","Tagesansicht" }, 491{ "Day View","Tagesansicht" },
492{ "Work Week","Arbeitswoche" }, 492{ "Work Week","Arbeitswoche" },
493{ "Week","Wochenansicht" }, 493{ "Week","Wochenansicht" },
494{ "Month","Monatsansicht" }, 494{ "Month","Monatsansicht" },
495{ "Todo View","Todo Liste" }, 495{ "Todo View","Todo Liste" },
496{ "Journal","Journal" }, 496{ "Journal","Journal" },
497{ "Next days","Nächste Tage" }, 497{ "Next days","Nächste Tage" },
498{ "Print agenda selection...","Drucke Agendaselektion..." }, 498{ "Print agenda selection...","Drucke Agendaselektion..." },
499{ "Toggle DateNavigator","Navigator umschalten" }, 499{ "Toggle DateNavigator","Navigator umschalten" },
500{ "Toggle FilterView","Filteransicht umschalten" }, 500{ "Toggle FilterView","Filteransicht umschalten" },
501{ "Prev. month","Vorheriger Monat" }, 501{ "Prev. month","Vorheriger Monat" },
502{ "Go backward","Gehe zurück" }, 502{ "Go backward","Gehe zurück" },
503{ "Go forward","Gehe weiter" }, 503{ "Go forward","Gehe weiter" },
504{ "Synchronize","Synchronisieren" }, 504{ "Synchronize","Synchronisieren" },
505{ "AgendaSize","Agendagröße" }, 505{ "AgendaSize","Agendagröße" },
506{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 506{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
507{ "Import last file","Importiere letzte Datei" }, 507{ "Import last file","Importiere letzte Datei" },
508{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 508{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
509{ "Load Calendar Backup","Lade Kalender Backup" }, 509{ "Load Calendar Backup","Lade Kalender Backup" },
510{ "Save Calendar Backup","Speichere Kalender Backup" }, 510{ "Save Calendar Backup","Speichere Kalender Backup" },
511{ "Export VCalendar","Exportiere VCalendar" }, 511{ "Export VCalendar","Exportiere VCalendar" },
512{ "Manage new categories...","Verwalte neue Kategorien..." }, 512{ "Manage new categories...","Verwalte neue Kategorien..." },
513{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 513{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
514{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 514{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
515{ "Remote via ssh","Über Netzwerk via ssh" }, 515{ "Remote via ssh","Über Netzwerk via ssh" },
516{ "With local file","Mit lokaler Datei" }, 516{ "With local file","Mit lokaler Datei" },
517{ "With last file","Mit letzter Datei" }, 517{ "With last file","Mit letzter Datei" },
518{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 518{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
519{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 519{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
520{ "Save filename","Speichern: Dateinamen wählen" }, 520{ "Save filename","Speichern: Dateinamen wählen" },
521{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 521{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
522{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 522{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
523{ "Overwrite!","Überschreibe!" }, 523{ "Overwrite!","Überschreibe!" },
524{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 524{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
525{ "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" }, 525{ "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" },
526{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 526{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
527{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 527{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
528{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 528{ "Deleting item %d ...","Lösche Eintrag %d ..." },
529{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 529{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
530{ "Size","Größe" }, 530{ "Size","Größe" },
531{ "Date","Datum" }, 531{ "Date","Datum" },
532{ "Mime Type","Datei Typ" }, 532{ "Mime Type","Datei Typ" },
533{ "All Files","Alle Dateien" }, 533{ "All Files","Alle Dateien" },
534{ "Files","Dateien" }, 534{ "Files","Dateien" },
535{ "Documents","DoKumente" }, 535{ "Documents","DoKumente" },
536{ "Select Categories","Selektiere Kategorien" }, 536{ "Select Categories","Selektiere Kategorien" },
537{ " &Deselect All "," Auswahl aufheben " }, 537{ " &Deselect All "," Auswahl aufheben " },
538{ "A&dd","Hinzu" }, 538{ "A&dd","Hinzu" },
539{ "&Modify","Ändern" }, 539{ "&Modify","Ändern" },
540{ "Edit Categories","Editiere Kategorien" }, 540{ "Edit Categories","Editiere Kategorien" },
541{ " &Edit Categories "," &Editiere Kategorien " }, 541{ " &Edit Categories "," &Editiere Kategorien " },
542{ "Beam Options","Beam Einstellungen" }, 542{ "Beam Options","Beam Einstellungen" },
543{ " With timezone "," Mit Zeitzone " }, 543{ " With timezone "," Mit Zeitzone " },
544{ " Local time ", " Lokale Zeit " }, 544{ " Local time ", " Lokale Zeit " },
545{ "Manage new Categories","Verwalte neue Kategorien" }, 545{ "Manage new Categories","Verwalte neue Kategorien" },
546{ "Add to category list","Füge zur Kategorieliste hinzu" }, 546{ "Add to category list","Füge zur Kategorieliste hinzu" },
547{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 547{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
548{ "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 " }, 548{ "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 " },
549{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 549{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
550{ "File format","Datei Format" }, 550{ "File format","Datei Format" },
551{ "Time format","Zeit Format" }, 551{ "Time format","Zeit Format" },
552{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 552{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
553{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 553{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
554{ "h","Std" }, 554{ "h","Std" },
555{ "min","Min" }, 555{ "min","Min" },
556{ "hou","Std" }, 556{ "hou","Std" },
557{ "day","Tag" }, 557{ "day","Tag" },
558{ "French","Französich" }, 558{ "French","Französich" },
559{ "Time","Zeit" }, 559{ "Time","Zeit" },
560{ "Event Viewer","Termin Ansicht" }, 560{ "Event Viewer","Termin Ansicht" },
561{ "Cancel Sync","Sync Abbrechen" }, 561{ "Cancel Sync","Sync Abbrechen" },
562{ "Remote","Fern" }, 562{ "Remote","Fern" },
563{ "Local","Lokal" }, 563{ "Local","Lokal" },
564{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 564{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
565{ "Local: ","Lokal: " }, 565{ "Local: ","Lokal: " },
566{ "Remote: ","Fern: " }, 566{ "Remote: ","Fern: " },
567{ "Last modified: ","Zuletzt geändert: " }, 567{ "Last modified: ","Zuletzt geändert: " },
568{ "Location: ","Ort: " }, 568{ "Location: ","Ort: " },
569{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 569{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
570{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 570{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
571{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 571{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
572{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 572{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
573{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 573{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
574{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 574{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
575{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 575{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
576{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 576{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
577{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 577{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
578{ "( %1 min before )","( %1 min vorher )" }, 578{ "( %1 min before )","( %1 min vorher )" },
579{ "<b>Alarm on: ","<b>Alarm am: " }, 579{ "<b>Alarm on: ","<b>Alarm am: " },
580{ "<b>Details: </b>","<b>Details: </b>" }, 580{ "<b>Details: </b>","<b>Details: </b>" },
581{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 581{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
582{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 582{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
583{ "Organizer","Organisator" }, 583{ "Organizer","Organisator" },
584{ "Save","Speichern" }, 584{ "Save","Speichern" },
585{ "Exit (+save)","Beenden (+ speichern)" }, 585{ "Exit (+save)","Beenden (+ speichern)" },
586{ "Home","Zuhause" }, 586{ "Home","Zuhause" },
587{ "Office","Büro" }, 587{ "Office","Büro" },
588{ "Library","Bibliothek" }, 588{ "Library","Bibliothek" },
589{ "Doctor","Arzt" }, 589{ "Doctor","Arzt" },
590{ "Beach","Strand" }, 590{ "Beach","Strand" },
591{ "Conference room","Konferenzraum" }, 591{ "Conference room","Konferenzraum" },
592{ "Drive Home","Heimfahrt" }, 592{ "Drive Home","Heimfahrt" },
593{ "Watch TV","Tv gucken" }, 593{ "Watch TV","Tv gucken" },
594{ "Phone call","Telefonanruf" }, 594{ "Phone call","Telefonanruf" },
595{ "Pay bill","Rechnung bezahlen" }, 595{ "Pay bill","Rechnung bezahlen" },
596{ "Read book","Buch lesen" }, 596{ "Read book","Buch lesen" },
597{ "Watering plants","Pflanzen giessen" }, 597{ "Watering plants","Pflanzen giessen" },
598{"Appointment","Verabredung" }, 598{"Appointment","Verabredung" },
599{"Birthday","Geburtstag" }, 599{"Birthday","Geburtstag" },
600{"Business","Geschäft" }, 600{"Business","Geschäft" },
601{"Business Travel","Geschäftsreise" }, 601{"Business Travel","Geschäftsreise" },
602{"Cinema","Kino" }, 602{"Cinema","Kino" },
603{"Customer","Kunde" }, 603{"Customer","Kunde" },
604{"Break","Pause" }, 604{"Break","Pause" },
605{"Breakfast","Frühstück" }, 605{"Breakfast","Frühstück" },
606{"Competition","Wettkampf" }, 606{"Competition","Wettkampf" },
607{"Dinner","Abendessen" }, 607{"Dinner","Abendessen" },
608{"Education","Erziehung" }, 608{"Education","Erziehung" },
609{"Family","Familie" }, 609{"Family","Familie" },
610{"Favorites","Favoriten" }, 610{"Favorites","Favoriten" },
611{"Festival","Festival" }, 611{"Festival","Festival" },
612{"Fishing","Angeln" }, 612{"Fishing","Angeln" },
613{"Flight","Flug" }, 613{"Flight","Flug" },
614{"Gifts","Geschenk" }, 614{"Gifts","Geschenk" },
615{"Holiday","Feiertag" }, 615{"Holiday","Feiertag" },
616{"Holiday Cards","Ansichtskarten" }, 616{"Holiday Cards","Ansichtskarten" },
617{"Hot Contacts","Heisse Kontakte" }, 617{"Hot Contacts","Heisse Kontakte" },
618{"Hiking","Wandern" }, 618{"Hiking","Wandern" },
619{"Hunting","Jagen" }, 619{"Hunting","Jagen" },
620{"Key Customer","Wichtiger Kunde" }, 620{"Key Customer","Wichtiger Kunde" },
621{"Kids","Kinder" }, 621{"Kids","Kinder" },
622{"Lunch","Mittagessen" }, 622{"Lunch","Mittagessen" },
623{"Meeting","Treffen" }, 623{"Meeting","Treffen" },
624{"Miscellaneous","Verschiedenes" }, 624{"Miscellaneous","Verschiedenes" },
625{"Partner","Partner" }, 625{"Partner","Partner" },
626{"Party","Partie" }, 626{"Party","Partie" },
627{"Personal","Privat" }, 627{"Personal","Privat" },
628{"Personal Travel","Privatreise"}, 628{"Personal Travel","Privatreise"},
629{"PHB","PHB" }, 629{"PHB","PHB" },
630{"Phone Calls","Telefonanruf" }, 630{"Phone Calls","Telefonanruf" },
631{"Projects","Projekt" }, 631{"Projects","Projekt" },
632{"Recurring","Wiederholend" }, 632{"Recurring","Wiederholend" },
633{"School","Schule" }, 633{"School","Schule" },
634{"Shopping","Einkaufen" }, 634{"Shopping","Einkaufen" },
635{"Speach","Rede" }, 635{"Speach","Rede" },
636{"Special Occasion","Spez.Gelegenheit" }, 636{"Special Occasion","Spez.Gelegenheit" },
637{"Sports","Sport" }, 637{"Sports","Sport" },
638{"Talk","Vortrag" }, 638{"Talk","Vortrag" },
639{"Travel","Reise" }, 639{"Travel","Reise" },
640{"TV","TV" }, 640{"TV","TV" },
641{"Germany","Deutschland" }, 641{"Germany","Deutschland" },
642{"Sweden","Schweden" }, 642{"Sweden","Schweden" },
643{"Forest","Wald" }, 643{"Forest","Wald" },
644{ "Desert","Wüste" }, 644{ "Desert","Wüste" },
645{ "Kitchen","Küche" }, 645{ "Kitchen","Küche" },
646{ "Lake","See" }, 646{ "Lake","See" },
647{"University","Universität"}, 647{"University","Universität"},
648{"Vacation","Urlaub" }, 648{"Vacation","Urlaub" },
649{"VIP","VIP" }, 649{"VIP","VIP" },
650{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 650{ "Import Sharp Calendar","Importiere Sharp Kalender" },
651{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 651{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
652{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 652{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
653{ "Cancelled","Gecancelt" }, 653{ "Cancelled","Gecancelt" },
654{ "Multiple sync","Mehrfach Sync" }, 654{ "Multiple sync","Mehrfach Sync" },
655{ "Local file","Lokale Datei" }, 655{ "Local file","Lokale Datei" },
656{ "Last file","Letzte Datei" }, 656{ "Last file","Letzte Datei" },
657{ "Keys + Colors...","Tasten + Farben..." }, 657{ "Keys + Colors...","Tasten + Farben..." },
658{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 658{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
659{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 659{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
660{ "Choose...","Wähle..." }, 660{ "Choose...","Wähle..." },
661{ "Use colors for application:","Setze Farben für Programm:" }, 661{ "Use colors for application:","Setze Farben für Programm:" },
662{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 662{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
663{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 663{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
664{ "Show parent To-Do's","Zeige Ober-Todos" }, 664{ "Show parent To-Do's","Zeige Ober-Todos" },
665{ "Show location","Zeige Orte" }, 665{ "Show location","Zeige Orte" },
666{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 666{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
667{ "Show in every cell ","Zeige in jeder Zelle " }, 667{ "Show in every cell ","Zeige in jeder Zelle " },
668{ "short month","kurzen Monat" }, 668{ "short month","kurzen Monat" },
669{ "icons","Icons" }, 669{ "icons","Icons" },
670{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 670{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
671{ "Category colors are applied to text","Kategorie Farben färben Text" }, 671{ "Category colors are applied to text","Kategorie Farben färben Text" },
672{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 672{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
673{ "Day color odd months","Tagesfarbe ungerade Monate" }, 673{ "Day color odd months","Tagesfarbe ungerade Monate" },
674{ "Day color even months","Tagesfarbe gerade Monate" }, 674{ "Day color even months","Tagesfarbe gerade Monate" },
675{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 675{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
676{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 676{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
677{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 677{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
678{ "Colors are applied to text","Farben werden auf Text angewendet" }, 678{ "Colors are applied to text","Farben werden auf Text angewendet" },
679{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 679{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
680{ "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" }, 680{ "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" },
681{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 681{ "Play beeps count:","Anzahl der Alarmpiepse: " },
682{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 682{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
683{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 683{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
684{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 684{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
685{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 685{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
686{ "New profile","Neues Profil" }, 686{ "New profile","Neues Profil" },
687{ "Clone profile","Klone Profil" }, 687{ "Clone profile","Klone Profil" },
688{ "Delete profile","Lösche Profil" }, 688{ "Delete profile","Lösche Profil" },
689{ "Profile:","Profil:" }, 689{ "Profile:","Profil:" },
690{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 690{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
691{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 691{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
692{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 692{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
693{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 693{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
694{ "Write back file","Schreibe Datei zurück" }, 694{ "Write back file","Schreibe Datei zurück" },
695{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 695{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
696{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 696{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
697{ "Local device name:","Name dieses Gerätes:" }, 697{ "Local device name:","Name dieses Gerätes:" },
698{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 698{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
699{ "Sync preferences","Synchronisations Einstellungen" }, 699{ "Sync preferences","Synchronisations Einstellungen" },
700{ "Profile kind","Profil Art" }, 700{ "Profile kind","Profil Art" },
701{ "Local file","Lokale Datei" }, 701{ "Local file","Lokale Datei" },
702{ "Local file:","Lokale Datei:" }, 702{ "Local file:","Lokale Datei:" },
703{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 703{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
704{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 704{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
705{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 705{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
706{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 706{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
707{ "Device","Gerät:" }, 707{ "Device","Gerät:" },
708{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 708{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
709{ "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" }, 709{ "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" },
710{ "Synchronization successful","Synchronisation erfolgreich" }, 710{ "Synchronization successful","Synchronisation erfolgreich" },
711{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 711{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
712{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 712{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
713{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 713{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
714{ "Enter password","Passwort eingeben" }, 714{ "Enter password","Passwort eingeben" },
715{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 715{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
716{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 716{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
717{ "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" }, 717{ "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" },
718{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 718{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
719{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 719{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
720{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 720{ "Edit Calendar Filters","Editiere Kalendar Filter" },
721{ "Enter filter name:","Neuer Filter Name:" }, 721{ "Enter filter name:","Neuer Filter Name:" },
722{ "Add Filter","Filter hinzufügen" }, 722{ "Add Filter","Filter hinzufügen" },
723{ "Question","Frage" }, 723{ "Question","Frage" },
724{ "Filter position: ","Filter Position: " }, 724{ "Filter position: ","Filter Position: " },
725{ "Month View","Monatsansicht" }, 725{ "Month View","Monatsansicht" },
726{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 726{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
727{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 727{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
728{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 728{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
729{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 729{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
730{ "Access: ","Zugriff: " }, 730{ "Access: ","Zugriff: " },
731{ "Needs Action","Aktion notwendig" }, 731{ "Needs Action","Aktion notwendig" },
732{ "Accepted","Akzeptiert" }, 732{ "Accepted","Akzeptiert" },
733{ "Declined","Abgelehnt" }, 733{ "Declined","Abgelehnt" },
734{ "Tentative","Vorläufig" }, 734{ "Tentative","Vorläufig" },
735{ "Delegated","Beauftragt" }, 735{ "Delegated","Beauftragt" },
736{ "Completed","Vollständig" }, 736{ "Completed","Vollständig" },
737{ "In Process","In Bearbeitung" }, 737{ "In Process","In Bearbeitung" },
738{ "Participant","Teilnehmer" }, 738{ "Participant","Teilnehmer" },
739{ "Optional Participant","Möglicher Teilnehmer" }, 739{ "Optional Participant","Möglicher Teilnehmer" },
740{ "Observer","Beobachter" }, 740{ "Observer","Beobachter" },
741{ "Chair","Vorsitzender" }, 741{ "Chair","Vorsitzender" },
742{ "Not supported \non desktop!\n","" }, 742{ "Not supported \non desktop!\n","" },
743{ "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) " }, 743{ "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) " },
744{ "Date range: ","Datums Zeitspanne: " }, 744{ "Date range: ","Datums Zeitspanne: " },
745{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 745{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
746{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 746{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
747{ "Add / remove events","Add./entferne Termine" }, 747{ "Add / remove events","Add./entferne Termine" },
748{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 748{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
749{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 749{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
750{ "\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" }, 750{ "\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" },
751{ "Overwrite","Überschreiben" }, 751{ "Overwrite","Überschreiben" },
752{ "Sync+save","Syncen+speichern" }, 752{ "Sync+save","Syncen+speichern" },
753{ "Default","Standard" }, 753{ "Default","Standard" },
754{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 754{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
755{ " %d items?"," %d Einträge?" }, 755{ " %d items?"," %d Einträge?" },
756{ "\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?" }, 756{ "\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?" },
757{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 757{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
758{ "Current","Aktuelle" }, 758{ "Current","Aktuelle" },
759{ "\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" }, 759{ "\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" },
760{ "All","Alle" }, 760{ "All","Alle" },
761{ "Data Loss Warning","Datenverlust Warnung" }, 761{ "Data Loss Warning","Datenverlust Warnung" },
762{ "Proceed","Weitermachen" }, 762{ "Proceed","Weitermachen" },
763{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 763{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
764{ "Filter disabled ","Filter abgeschaltet" }, 764{ "Filter disabled ","Filter abgeschaltet" },
765{ "Filter selected: ","Gewählter Filter: " }, 765{ "Filter selected: ","Gewählter Filter: " },
766{ "Toggle Cancel","Gecancelt ändern" }, 766{ "Toggle Cancel","Gecancelt ändern" },
767{ "&Toggle Cancel","Gecancel&t ändern" }, 767{ "&Toggle Cancel","Gecancel&t ändern" },
768{ "Configure Toolbar","Konfiguriere Toolbar" }, 768{ "Configure Toolbar","Konfiguriere Toolbar" },
769{ "Stretched TB","Gedehnte TB" }, 769{ "Stretched TB","Gedehnte TB" },
770{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 770{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
771{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 771{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
772{ "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" }, 772{ "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" },
773{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 773{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
774{ "Imported file successfully","Datei erfolgreich importiert" }, 774{ "Imported file successfully","Datei erfolgreich importiert" },
775{ "Error importing file","Fehler beim Importieren der Datei" }, 775{ "Error importing file","Fehler beim Importieren der Datei" },
776{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 776{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
777{ "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" }, 777{ "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" },
778{ "Overwrite!","Überschreiben!" }, 778{ "Overwrite!","Überschreiben!" },
779{ "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" }, 779{ "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" },
780{ "Load backup filename","Lade Backup Dateiname" }, 780{ "Load backup filename","Lade Backup Dateiname" },
781{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 781{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
782{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 782{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
783{ "Save backup filename","Speichere Backup Dateiname" }, 783{ "Save backup filename","Speichere Backup Dateiname" },
784{ "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" }, 784{ "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" },
785{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 785{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
786{ "Details of attendee","Teilnehmerdetails" }, 786{ "Details of attendee","Teilnehmerdetails" },
787{ "Work phone:\n","Telefon Arbeit:\n" }, 787{ "Work phone:\n","Telefon Arbeit:\n" },
788{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 788{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
789{ "Home phone:\n","Telefon privat:\n" }, 789{ "Home phone:\n","Telefon privat:\n" },
790{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 790{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
791{ "Email:\n","Email:\n" }, 791{ "Email:\n","Email:\n" },
792{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 792{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
793{ "Audio Al.: ","Audio Al.: " }, 793{ "Audio Al.: ","Audio Al.: " },
794{ "Proc.Al.: ","Proz.Al.: " }, 794{ "Proc.Al.: ","Proz.Al.: " },
795{ "No sound set","Kein Sound definiert" }, 795{ "No sound set","Kein Sound definiert" },
796{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 796{ "*.wav|Wav Files","*.wav|Wav Dateien" },
797{ "No program set","Kein Programm definiert" }, 797{ "No program set","Kein Programm definiert" },
798{ "Running '%1'","Ausführen '%1'" }, 798{ "Running '%1'","Ausführen '%1'" },
799{ "Playing '%1'","Abspielen '%1'" }, 799{ "Playing '%1'","Abspielen '%1'" },
800{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 800{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
801{ "Load!","Laden!" }, 801{ "Load!","Laden!" },
802{ "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" }, 802{ "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" },
803{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 803{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
804{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 804{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
805{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 805{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
806{ "Features + hints...","Eigenschaften + Tipps..." }, 806{ "Features + hints...","Eigenschaften + Tipps..." },
807{ "User translation...","Benutzer Übersetzung..." }, 807{ "User translation...","Benutzer Übersetzung..." },
808{ "Sync HowTo...","Synchronisation HowTo..." }, 808{ "Sync HowTo...","Synchronisation HowTo..." },
809{ "Print calendar...","Drucke Kalender..." }, 809{ "Print calendar...","Drucke Kalender..." },
810{ "Anniversary","Jahrestag" }, 810{ "Anniversary","Jahrestag" },
811{ "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" }, 811{ "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" },
812{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 812{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
813{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 813{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
814{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 814{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
815{ "<b>Access: </b>","<b>Zugriff: </b>" }, 815{ "<b>Access: </b>","<b>Zugriff: </b>" },
816{ "(%1 min before)","(%1 min vorher)" }, 816{ "(%1 min before)","(%1 min vorher)" },
817{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 817{ "<b>Categories: </b>","<b>Kategorien: </b>" },
818{ "Save Journal/Description...","Speichere Journal/Details..." }, 818{ "Save Journal/Description...","Speichere Journal/Details..." },
819{ "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." }, 819{ "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." },
820{ "Continue","Weitermachen" }, 820{ "Continue","Weitermachen" },
821{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 821{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
822{ "Attendee:","Teilnehmer:" }, 822{ "Attendee:","Teilnehmer:" },
823{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 823{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
824{ "On day ","Am Tag " }, 824{ "On day ","Am Tag " },
825{ "%1 of ","%1 des Monats" }, 825{ "%1 of ","%1 des Monats" },
826{ "%1 of the year","%1 des Jahres" }, 826{ "%1 of the year","%1 des Jahres" },
827{ "Anonymous","Anonymo" }, 827{ "Anonymous","Anonymo" },
828{ "nobody@nowhere","niemand@nirgendwo" }, 828{ "nobody@nowhere","niemand@nirgendwo" },
829{ "calendar.html","calendar.html" }, 829{ "calendar.html","calendar.html" },
830{ " Local Time"," Locale Zeit" }, 830{ " Local Time"," Locale Zeit" },
831{ "Unknown Name","Unbekannter Name" }, 831{ "Unknown Name","Unbekannter Name" },
832{ "unknown@nowhere","unbekannt@nirgendwo" }, 832{ "unknown@nowhere","unbekannt@nirgendwo" },
833{ "Beam via IR!","Beam via IR!" }, 833{ "Beam via IR!","Beam via IR!" },
834{ "Next Month","Nächster Monat" }, 834{ "Next Month","Nächster Monat" },
835{ "Prio","Prio" }, 835{ "Prio","Prio" },
836{ "Reparent Todo","Mache Sub-Todo" }, 836{ "Reparent Todo","Mache Sub-Todo" },
837{ "tomorrow","morgen" }, 837{ "tomorrow","morgen" },
838{ "today","heute" }, 838{ "today","heute" },
839{ "yesterday","gestern" }, 839{ "yesterday","gestern" },
840{ "Ok","Ok" }, 840{ "Ok","Ok" },
841{ "Ok+Agenda","Ok+Agenda" }, 841{ "Ok+Agenda","Ok+Agenda" },
842{ "Email","Email" }, 842{ "Email","Email" },
843{ "RSVP","RSVP" }, 843{ "RSVP","RSVP" },
844{ "Email:","Email:" }, 844{ "Email:","Email:" },
845{ "Appointment Time ","Termin Zeit " }, 845{ "Appointment Time ","Termin Zeit " },
846{ "2","2" }, 846{ "2","2" },
847{ "3","3" }, 847{ "3","3" },
848{ "4","4" }, 848{ "4","4" },
849{ " 0 %"," 0 %" }, 849{ " 0 %"," 0 %" },
850{ " 20 %"," 20 %" }, 850{ " 20 %"," 20 %" },
851{ " 40 %"," 40 %" }, 851{ " 40 %"," 40 %" },
852{ " 60 %"," 60 %" }, 852{ " 60 %"," 60 %" },
853{ " 80 %"," 80 %" }, 853{ " 80 %"," 80 %" },
854{ "100 %","100 %" }, 854{ "100 %","100 %" },
855{ "Filter","Filter" }, 855{ "Filter","Filter" },
856{ "Configure","Konfiguriere" }, 856{ "Configure","Konfiguriere" },
857{ "What's Next","What's Next" }, 857{ "What's Next","What's Next" },
858{ "Complete calendar...","Kompletten Kalender..." }, 858{ "Complete calendar...","Kompletten Kalender..." },
859{ "Filtered calendar...","Gefilterten Kalender..." }, 859{ "Filtered calendar...","Gefilterten Kalender..." },
860{ "Export to phone","Exportiere zum Handy" }, 860{ "Export to phone","Exportiere zum Handy" },
861{ "Beam receive enabled","Beam Empfang an" }, 861{ "Beam receive enabled","Beam Empfang an" },
862{ "What's new?","Was ist neu?" }, 862{ "What's new?","Was ist neu?" },
863{ "FAQ...","FAQ..." }, 863{ "FAQ...","FAQ..." },
864{ "Licence...","Licence..." }, 864{ "Licence...","Licence..." },
865{ "What's This?","What's This?" }, 865{ "What's This?","What's This?" },
866{ "&Edit...","&Editiere..." }, 866{ "&Edit...","&Editiere..." },
867{ "Oktober","Oktober" }, 867{ "Oktober","Oktober" },
868{ "Title","Titel" }, 868{ "Title","Titel" },
869{ "%1 %","%1 %" }, 869{ "%1 %","%1 %" },
870{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 870{ "Enable Pi-Sync","Schalte Pi-Sync an" },
871{ "Import!","Importiere!" }, 871{ "Import!","Importiere!" },
872{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 872{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
873{ "Export to phone options","Export ans Handy Optionen" }, 873{ "Export to phone options","Export ans Handy Optionen" },
874{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 874{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
875{ "I/O device: ","I/O device: " }, 875{ "I/O device: ","I/O device: " },
876{ "Connection: ","Connection: " }, 876{ "Connection: ","Connection: " },
877{ "Model(opt.): ","Model(opt.): " }, 877{ "Model(opt.): ","Model(opt.): " },
878{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 878{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
879{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 879{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
880{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" }, 880{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" },
881{ "Export to mobile phone!","Exportiere auf das Handy!" }, 881{ "Export to mobile phone!","Exportiere auf das Handy!" },
882{ "Export complete calendar","Exportiere kompletten Kalender" }, 882{ "Export complete calendar","Exportiere kompletten Kalender" },
883{ "Writing to phone...","Sende Daten ans Handy..." }, 883{ "Writing to phone...","Sende Daten ans Handy..." },
884{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 884{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
885{ "Retry","Nochmal versuchen" }, 885{ "Retry","Nochmal versuchen" },
886{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 886{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
887{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 887{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
888{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 888{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
889{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 889{ "Export filtered calendar","Exportiere gefilterten Kalender" },
890{ "Preferences","Vorlieben" }, 890{ "Preferences","Vorlieben" },
891{ "Global","Global" }, 891{ "Global","Global" },
892{ "Phone","Phone" }, 892{ "Phone","Phone" },
893{ "SMS","SMS" }, 893{ "SMS","SMS" },
894{ "Fax","Fax" }, 894{ "Fax","Fax" },
895{ "Pager","Pager" }, 895{ "Pager","Pager" },
896{ "SIP","SIP" }, 896{ "SIP","SIP" },
897{ "Italian","Italienisch" }, 897{ "Italian","Italienisch" },
898{ "24:00","24:00" }, 898{ "24:00","24:00" },
899{ "12:00am","12:00am" }, 899{ "12:00am","12:00am" },
900{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 900{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
901{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 901{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
902{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 902{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
903{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 903{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
904{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 904{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
905{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 905{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
906{ "Used Mail Client","Benutzter Mail Client" }, 906{ "Used Mail Client","Benutzter Mail Client" },
907{ "Channel:","Channel:" }, 907{ "Channel:","Channel:" },
908{ "Message:","Message:" }, 908{ "Message:","Message:" },
909{ "Parameters:","Parameter:" }, 909{ "Parameters:","Parameter:" },
910{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 910{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
911{ "extra Message:","extra Message:" }, 911{ "extra Message:","extra Message:" },
912{ "extra Parameters:","extra Parameter:" }, 912{ "extra Parameters:","extra Parameter:" },
913{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 913{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
914{ "External Apps.","Externe Appl." }, 914{ "External Apps.","Externe Appl." },
915{ "24 hours","24 Std." }, 915{ "24 hours","24 Std." },
916{ "3 hours","3 Std." }, 916{ "3 hours","3 Std." },
917{ "1 hour","1 Std." }, 917{ "1 hour","1 Std." },
918{ "15 minutes","15 Min." }, 918{ "15 minutes","15 Min." },
919{ "5 minutes","5 Min." }, 919{ "5 minutes","5 Min." },
920{ "1 minute","1 Min." }, 920{ "1 minute","1 Min." },
921{ "23","23" }, 921{ "23","23" },
922{ "Mon 15","Mon 15" }, 922{ "Mon 15","Mon 15" },
923{ "Configure KO","Konfiguriere KO" }, 923{ "Configure KO","Konfiguriere KO" },
924{ "Event text","Termin Text" }, 924{ "Event text","Termin Text" },
925{ "ToDo","Todo" }, 925{ "ToDo","Todo" },
926{ "Today","Heute" }, 926{ "Today","Heute" },
927{ "What's Next View","What's Next Ansicht" }, 927{ "What's Next View","What's Next Ansicht" },
928{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 928{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
929{ "Alarm","Alarm" }, 929{ "Alarm","Alarm" },
930{ "Used %1 Client","Benutzter %1 Client" }, 930{ "Used %1 Client","Benutzter %1 Client" },
931{ "No email client installed","Kein Email Klient installiert" }, 931{ "No email client installed","Kein Email Klient installiert" },
932{ "Userdefined email client","Benutzerdef. Email Klient" }, 932{ "Userdefined email client","Benutzerdef. Email Klient" },
933{ "OM/Pi email client","OM/Pi Email Klient" }, 933{ "OM/Pi email client","OM/Pi Email Klient" },
934{ "Include in multiple ","Beziehe in multiple " }, 934{ "Include in multiple ","Beziehe in multiple " },
935{ "calendar ","Kalender " }, 935{ "calendar ","Kalender " },
936{ "addressbook ","Adressbuch " }, 936{ "addressbook ","Adressbuch " },
937{ "pwmanager","PWmanager" }, 937{ "pwmanager","PWmanager" },
938{ " sync"," Sync ein" }, 938{ " sync"," Sync ein" },
939{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 939{ "Write back synced data","Schreibe gesyncte Daten zurück" },
940{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 940{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
941{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 941{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
942{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 942{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
943{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 943{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
944{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 944{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
945{ "Help...","Hilfe..." }, 945{ "Help...","Hilfe..." },
946{ "Local file Cal:","Lokale Datei Kal:" }, 946{ "Local file Cal:","Lokale Datei Kal:" },
947{ "Local file ABook:","Lokale Datei ABuch:" }, 947{ "Local file ABook:","Lokale Datei ABuch:" },
948{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 948{ "Local file PWMgr:","Lokale Datei PWMgr:" },
949{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 949{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
950{ "Calendar:","Kalender:" }, 950{ "Calendar:","Kalender:" },
951{ "AddressBook:","AdressBuch:" }, 951{ "AddressBook:","AdressBuch:" },
952{ "PWManager:","PWManager:" }, 952{ "PWManager:","PWManager:" },
953{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 953{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
954{ "ssh/scp","ssh/scp" }, 954{ "ssh/scp","ssh/scp" },
955{ "ftp","ftp" }, 955{ "ftp","ftp" },
956{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 956{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
957{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 957{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
958{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 958{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
959{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 959{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
960{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 960{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
961{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 961{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
962{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 962{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
963{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 963{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
964{ "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" }, 964{ "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" },
965{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 965{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
966{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 966{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
967{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 967{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
968{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 968{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
969{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 969{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
970{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 970{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
971{ "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!" }, 971{ "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!" },
972{ "KDE-Pim Sync","KDE-Pim Sync" }, 972{ "KDE-Pim Sync","KDE-Pim Sync" },
973{ "Multiple profiles","Multi-Sync Profile" }, 973{ "Multiple profiles","Multi-Sync Profile" },
974{ "Device: ","Gerät: " }, 974{ "Device: ","Gerät: " },
975{ "Multiple sync started.","Multi-Sync gestartet." }, 975{ "Multiple sync started.","Multi-Sync gestartet." },
976{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 976{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
977{ "Turn filter on","Schalte Filter an" }, 977{ "Turn filter on","Schalte Filter an" },
978{ "Turn filter off","Schalte Filter aus" }, 978{ "Turn filter off","Schalte Filter aus" },
979{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 979{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
980{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 980{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
981{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 981{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
982{ "<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" }, 982{ "<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" },
983{ "<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" }, 983{ "<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" },
984{ "<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" }, 984{ "<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" },
985{ "<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" }, 985{ "<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" },
986{ "<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" }, 986{ "<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" },
987{ "<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" }, 987{ "<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" },
988{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 988{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
989{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 989{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
990{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 990{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
991{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 991{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
992{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 992{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
993{ "<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" }, 993{ "<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" },
994{ "<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" }, 994{ "<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" },
995{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 995{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
996{ "<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" }, 996{ "<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" },
997{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 997{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
998{ "<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" }, 998{ "<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" },
999{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 999{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1000{ "<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" }, 1000{ "<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" },
1001{ "<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" }, 1001{ "<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" },
1002{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1002{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1003{ "<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" }, 1003{ "<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" },
1004{ "<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" }, 1004{ "<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" },
1005{ "<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" }, 1005{ "<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" },
1006{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1006{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1007{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1007{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1008{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1008{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1009{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1009{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1010{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1010{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1011{ "<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" }, 1011{ "<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" },
1012{ "<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" }, 1012{ "<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" },
1013{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1013{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1014{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1014{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1015{ "<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" }, 1015{ "<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" },
1016{ "<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" }, 1016{ "<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" },
1017{ "<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" }, 1017{ "<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" },
1018{ "<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" }, 1018{ "<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" },
1019{ "<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" }, 1019{ "<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" },
1020{ "<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" }, 1020{ "<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" },
1021{ "<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" }, 1021{ "<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" },
1022{ "<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 " }, 1022{ "<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 " },
1023{ "<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" }, 1023{ "<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" },
1024{ "<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" }, 1024{ "<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" },
1025{ "<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" }, 1025{ "<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" },
1026{ "<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" }, 1026{ "<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" },
1027{ "<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" }, 1027{ "<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" },
1028{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1028{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1029{ "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" }, 1029{ "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" },
1030{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1030{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1031{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1031{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1032{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1032{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1033{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, 1033{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" },
1034{ "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" }, 1034{ "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" },
1035{ "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" }, 1035{ "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" },
1036{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1036{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1037{ "KO/Pi FAQ","KO/Pi FAQ" }, 1037{ "KO/Pi FAQ","KO/Pi FAQ" },
1038{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1038{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1039{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1039{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1040{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1040{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1041{ "From: ","Von: " }, 1041{ "From: ","Von: " },
1042{ "Remove sync info","Entferne Sync Info" }, 1042{ "Remove sync info","Entferne Sync Info" },
1043{ "For all profiles","Für alle Profile" }, 1043{ "For all profiles","Für alle Profile" },
1044{ "Hide not Running","Verstecke nicht Laufende" }, 1044{ "Hide not Running","Verstecke nicht Laufende" },
1045{ "ME","ME" }, 1045{ "ME","ME" },
1046{ "Toolbar","Toolbar" }, 1046{ "Toolbar","Toolbar" },
1047{ "Undo Delete...","Löschen rückgängig machen..." }, 1047{ "Undo Delete...","Löschen rückgängig machen..." },
1048{ "Undo Delete","Löschen rückgängig machen" }, 1048{ "Undo Delete","Löschen rückgängig machen" },
1049{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1049{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1050{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1050{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1051{ "Januar","Januar" }, 1051{ "Januar","Januar" },
1052{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1052{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1053{ "No Filter","Kein Filter" }, 1053{ "No Filter","Kein Filter" },
1054{ "Multiple Sync options","Multi Sync Optionen" }, 1054{ "Multiple Sync options","Multi Sync Optionen" },
1055{ "Sync algo options","Sync Ablauf Optionen" }, 1055{ "Sync algo options","Sync Ablauf Optionen" },
1056{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1056{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1057{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1057{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1058{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1058{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1059{ "Write back options","Optionen zum Zurückschreiben" }, 1059{ "Write back options","Optionen zum Zurückschreiben" },
1060{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1060{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1061{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1061{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1062{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1062{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1063{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1063{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1064{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1064{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1065{ "Time period","Zeitspanne" }, 1065{ "Time period","Zeitspanne" },
1066{ "From ","Von " }, 1066{ "From ","Von " },
1067{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1067{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1068{ " weeks in the future "," Wochen in der Zukunft " }, 1068{ " weeks in the future "," Wochen in der Zukunft " },
1069{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1069{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1070{ "Local temp file:","Lokale temp Datei:" }, 1070{ "Local temp file:","Lokale temp Datei:" },
1071{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1071{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1072{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1072{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1073{ "Language","Sprache" }, 1073{ "Language","Sprache" },
1074{ "Time Format","Zeit Format" }, 1074{ "Time Format","Zeit Format" },
1075{ "Time Zone","Zeit Zone" }, 1075{ "Time Zone","Zeit Zone" },
1076{ "%1 groups subscribed","%1 Guppen abboniert" }, 1076{ "%1 groups subscribed","%1 Guppen abboniert" },
1077{ "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" }, 1077{ "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" },
1078{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1078{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1079{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1079{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1080{ "Save settings","Speichere Einstellungen" }, 1080{ "Save settings","Speichere Einstellungen" },
1081{ "Save standard","Speichere Standard" }, 1081{ "Save standard","Speichere Standard" },
1082{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1082{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1083{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1083{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1084{ "Data storage path","Daten Speicherpfad" }, 1084{ "Data storage path","Daten Speicherpfad" },
1085{ "Language","Sprache" }, 1085{ "Language","Sprache" },
1086{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1086{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1087{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1087{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1088{ "Show events that are done","Zeige abgelaufene Termine" }, 1088{ "Show events that are done","Zeige abgelaufene Termine" },
1089{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1089{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1090{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1090{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1091{ "KO/Pi","KO/Pi" }, 1091{ "KO/Pi","KO/Pi" },
1092{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1092{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1093{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1093{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1094{ "Sound.Al.: ","Sound.Al.: " }, 1094{ "Sound.Al.: ","Sound.Al.: " },
1095{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1095{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1096{ "Restore","Wiederherstellen" }, 1096{ "Restore","Wiederherstellen" },
1097{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1097{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1098{ "% completed","% erledigt" }, 1098{ "% completed","% erledigt" },
1099{ "%d item(s) found.","%d Item(s) gefunden." }, 1099{ "%d item(s) found.","%d Item(s) gefunden." },
1100{ "Set complete","Setze auf erledigt" }, 1100{ "Set complete","Setze auf erledigt" },
1101{ "(cancelled)","(gecancelt)" }, 1101{ "(cancelled)","(gecancelt)" },
1102{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1102{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1103{ " Local time "," Locale Zeit " }, 1103{ " Local time "," Locale Zeit " },
1104{ "Form2","Form2" }, 1104{ "Form2","Form2" },
1105{ "Filter enabled","Filter angeschaltet" }, 1105{ "Filter enabled","Filter angeschaltet" },
1106{ "Edit Filters","Ändere Filter" }, 1106{ "Edit Filters","Ändere Filter" },
1107{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1107{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1108{ "Agenda","Agenda" }, 1108{ "Agenda","Agenda" },
1109{ " ("," (" }, 1109{ " ("," (" },
1110{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1110{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1111{ "Print","Print" }, 1111{ "Print","Print" },
1112{ "&Setup Printer...","Drucker &Setup..." }, 1112{ "&Setup Printer...","Drucker &Setup..." },
1113{ "View Type","Zeige Typ" }, 1113{ "View Type","Zeige Typ" },
1114{ "Page &orientation:","Seiten Ausrichtung:" }, 1114{ "Page &orientation:","Seiten Ausrichtung:" },
1115{ "Use Default of Selected Style","Default des selektierten Stils" }, 1115{ "Use Default of Selected Style","Default des selektierten Stils" },
1116{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1116{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1117{ "Portrait","Portrait" }, 1117{ "Portrait","Portrait" },
1118{ "Landscape","Landschaft" }, 1118{ "Landscape","Landschaft" },
1119{ "Print day","Drucke Tag" }, 1119{ "Print day","Drucke Tag" },
1120{ "CalPrintDay_Base","CalPrintDay_Base" }, 1120{ "CalPrintDay_Base","CalPrintDay_Base" },
1121{ "Date && Time Range","Datum && Zeitspanne" }, 1121{ "Date && Time Range","Datum && Zeitspanne" },
1122{ "&End date:","&Enddatum:" }, 1122{ "&End date:","&Enddatum:" },
1123{ "&Start date:","&Startdatum:" }, 1123{ "&Start date:","&Startdatum:" },
1124{ "Start &time:","Startzeit:" }, 1124{ "Start &time:","Startzeit:" },
1125{ "End ti&me:","Endzeit:" }, 1125{ "End ti&me:","Endzeit:" },
1126{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1126{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1127{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1127{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1128{ "Alt+D","Alt+D" }, 1128{ "Alt+D","Alt+D" },
1129{ "&Use colors","Nutze Farben" }, 1129{ "&Use colors","Nutze Farben" },
1130{ "Alt+U","Alt+U" }, 1130{ "Alt+U","Alt+U" },
1131{ "Print week","Drucke Woche" }, 1131{ "Print week","Drucke Woche" },
1132{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1132{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1133{ "Use &colors","Nutze Farben" }, 1133{ "Use &colors","Nutze Farben" },
1134{ "Type of View","Typ der Ansicht" }, 1134{ "Type of View","Typ der Ansicht" },
1135{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1135{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1136{ "Alt+F","Alt+F" }, 1136{ "Alt+F","Alt+F" },
1137{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1137{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1138{ "Alt+T","Alt+T" }, 1138{ "Alt+T","Alt+T" },
1139{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1139{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1140{ "Print month","Drucke Monat" }, 1140{ "Print month","Drucke Monat" },
1141{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1141{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1142{ "&Start month:","&Startmonat:" }, 1142{ "&Start month:","&Startmonat:" },
1143{ "&End month:","&Endmonat:" }, 1143{ "&End month:","&Endmonat:" },
1144{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1144{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1145{ "Print todos","Drucke Todos" }, 1145{ "Print todos","Drucke Todos" },
1146{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1146{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1147{ "Include &description of the item","Inclusive Itembeschreibung" }, 1147{ "Include &description of the item","Inclusive Itembeschreibung" },
1148{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1148{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1149{ "Include &priority of the item","Inclusive Priorität des Items" }, 1149{ "Include &priority of the item","Inclusive Priorität des Items" },
1150{ "Items to Print","Zu druckende Items" }, 1150{ "Items to Print","Zu druckende Items" },
1151{ "&From:","Von:" }, 1151{ "&From:","Von:" },
1152{ "&To:","Bis:" }, 1152{ "&To:","Bis:" },
1153{ "Print &all todo items","Drucke alle Todo Items" }, 1153{ "Print &all todo items","Drucke alle Todo Items" },
1154{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1154{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1155{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1155{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1156{ "Todo List","Todo Liste" }, 1156{ "Todo List","Todo Liste" },
1157{ "&Title:","&Titel:" }, 1157{ "&Title:","&Titel:" },
1158{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" }, 1158{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" },
1159{ "Todo list","Todo Liste" }, 1159{ "Todo list","Todo Liste" },
1160{ "&Print...","Drucke..." }, 1160{ "&Print...","Drucke..." },
1161{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1161{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1162{ "[Unconfigured]","[Unkonfiguriert]" }, 1162{ "[Unconfigured]","[Unkonfiguriert]" },
1163{ "OK","OK" }, 1163{ "OK","OK" },
1164{ "FilterEditor","FilterEditor" }, 1164{ "FilterEditor","FilterEditor" },
1165{ "Include","Inclusive" }, 1165{ "Include","Inclusive" },
1166{ "Exclude","Exclusive" }, 1166{ "Exclude","Exclusive" },
1167{ "Edit Selection...","Editiere Auswahl" }, 1167{ "Edit Selection...","Editiere Auswahl" },
1168{ "recurring events","wiederholende Termine" }, 1168{ "recurring events","wiederholende Termine" },
1169{ "recurr. events","wiederh.Termine" }, 1169{ "recurr. events","wiederh.Termine" },
1170{ "completed to-dos","erledigte Todos" }, 1170{ "completed to-dos","erledigte Todos" },
1171{ "events","Termine" }, 1171{ "events","Termine" },
1172{ "todos","Todos" }, 1172{ "todos","Todos" },
1173{ "journals","Journale" }, 1173{ "journals","Journale" },
1174{ "public","öffentl." }, 1174{ "public","öffentl." },
1175{ "private","privat" }, 1175{ "private","privat" },
1176{ "confidential","vertraul." }, 1176{ "confidential","vertraul." },
1177{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" }, 1177{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" },
1178{ "Yesterday","Gestern" }, 1178{ "Yesterday","Gestern" },
1179{ "Day after tomorrow","Übermorgen" }, 1179{ "Day after tomorrow","Übermorgen" },
1180{ "Tomorrow","Morgen" }, 1180{ "Tomorrow","Morgen" },
1181{ "Day before yesterday","Vorgestern" }, 1181{ "Day before yesterday","Vorgestern" },
1182{ "Size %1","Größe %1" }, 1182{ "Size %1","Größe %1" },
1183{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1183{ "New Agendasize: %1","Neue Agendagröße: %1" },
1184{ " (%1 y.)"," (%1 J.)" }, 1184{ " (%1 y.)"," (%1 J.)" },
1185{ "Allday:","Ganztägig:" }, 1185{ "Allday:","Ganztägig:" },
1186{ "compl.todos","erled.Todos" }, 1186{ "compl.todos","erled.Todos" },
1187{ "Day view","Tagesansicht" }, 1187{ "Day view","Tagesansicht" },
1188{ "Next days","Nächste Tage" }, 1188{ "Next days","Nächste Tage" },
1189{ "Next week","Nächste Woche" }, 1189{ "Next week","Nächste Woche" },
1190{ "Next two weeks","Nächste zwei Wochen" }, 1190{ "Next two weeks","Nächste zwei Wochen" },
1191{ "This month","Dieser Monat" }, 1191{ "This month","Dieser Monat" },
1192{ "Journal view","Journal" }, 1192{ "Journal view","Journal" },
1193{ "Display all opened","Zeige alle geöffnet" }, 1193{ "Display all opened","Zeige alle geöffnet" },
1194{ "Display all closed","Zeige alle geschlossen" }, 1194{ "Display all closed","Zeige alle geschlossen" },
1195{ "Display all flat","Zeige alle flach" }, 1195{ "Display all flat","Zeige alle flach" },
1196{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1196{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1197{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1197{ "Default todo done color:","Standard Todo erledigt Farbe" },
1198{ "Select week %1-%2","Wähle Woche %1-%2" }, 1198{ "Select week %1-%2","Wähle Woche %1-%2" },
1199{ "Select Week","Wähle Woche" }, 1199{ "Select Week","Wähle Woche" },
1200{ "Set alarm for selected...","Setze Alarm für Selekt..." }, 1200{ "Set alarm for selected...","Setze Alarm für Selekt..." },
1201{ "Set Alarm!","Setze Alarm!" }, 1201{ "Set Alarm!","Setze Alarm!" },
1202{ "Changed alarm for %1 items","Alarm für %1 Items geändert" }, 1202{ "Changed alarm for %1 items","Alarm für %1 Items geändert" },
1203{ " and "," und " }, 1203{ " and "," und " },
1204{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1204{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1205{ "Mail to selected","Mail an Ausgewählte" }, 1205{ "Mail to selected","Mail an Ausgewählte" },
1206{ "Mail to all","Mail an Alle" }, 1206{ "Mail to all","Mail an Alle" },
1207{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1207{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1208{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1208{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1209{ " on"," am" }, 1209{ " on"," am" },
1210{ " completed on "," erledigt am " }, 1210{ " completed on "," erledigt am " },
1211{ "Save as Event template","Speichere als Vorlage" }, 1211{ "Save as Event template","Speichere als Vorlage" },
1212{ "Load Event template","Lade Termin Vorlage" }, 1212{ "Load Event template","Lade Termin Vorlage" },
1213{ "Save as Journal template","Speichere als Journal Vorlage" }, 1213{ "Save as Journal template","Speichere als Journal Vorlage" },
1214{ "Insert Journal template","Füge Journal Vorlage ein" }, 1214{ "Insert Journal template","Füge Journal Vorlage ein" },
1215{ "Sub todos:<br>","Unter Todos:<br>" }, 1215{ "Sub todos:<br>","Unter Todos:<br>" },
1216{ "Parent todo:<br>","Über Todo:<br>" }, 1216{ "Parent todo:<br>","Über Todo:<br>" },
1217{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1217{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1218{ " completed"," erledigt" }, 1218{ " completed"," erledigt" },
1219{ "(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!" }, 1219{ "(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!" },
1220{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1220{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1221{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1221{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1222{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1222{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1223{ "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?" }, 1223{ "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?" },
1224{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1224{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1225{ "Error","Fehler" }, 1225{ "Error","Fehler" },
1226{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1226{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1227{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1227{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1228{ "Warning","Warnung" }, 1228{ "Warning","Warnung" },
1229{ "Select week number","Wähle Wochen Nummer" }, 1229{ "Select week number","Wähle Wochen Nummer" },
1230{ "Februar","Februar" }, 1230{ "Februar","Februar" },
1231{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1231{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1232{ "W","W" }, 1232{ "W","W" },
1233{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1233{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1234{ "T: %1","T: %1" }, 1234{ "T: %1","T: %1" },
1235{ "Start: ","Start: " }, 1235{ "Start: ","Start: " },
1236{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1236{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1237{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1237{ "Password for remote access:","Passwort für fernen Zugriff:" },
1238{ "Remote IP address:","Ferne IP Adresse:" }, 1238{ "Remote IP address:","Ferne IP Adresse:" },
1239{ "Remote port number:","Ferne Port Nummer:" }, 1239{ "Remote port number:","Ferne Port Nummer:" },
1240{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1240{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1241{ "Remote from: ","Fern von: " }, 1241{ "Remote from: ","Fern von: " },
1242{ "Local from: ","Lokal von: " }, 1242{ "Local from: ","Lokal von: " },
1243{ "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" }, 1243{ "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" },
1244{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1244{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1245{ "Write back","Schreibe zurück" }, 1245{ "Write back","Schreibe zurück" },
1246{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1246{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1247{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1247{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1248{ "Received sync request","Sync Anfrage erhalten" }, 1248{ "Received sync request","Sync Anfrage erhalten" },
1249{ "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." }, 1249{ "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." },
1250{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1250{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1251{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1251{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1252{ "Sending file...","Sende Datei..." }, 1252{ "Sending file...","Sende Datei..." },
1253{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1253{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1254{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1254{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1255{ "Received %1 bytes","%1 Bytes erhalten" }, 1255{ "Received %1 bytes","%1 Bytes erhalten" },
1256{ "Writing file to disk...","Speichere Datei..." }, 1256{ "Writing file to disk...","Speichere Datei..." },
1257{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1257{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1258{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1258{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1259{ "Synchronize!","Synchronisiere!" }, 1259{ "Synchronize!","Synchronisiere!" },
1260{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1260{ "High clock skew!","Großer Uhrzeitunterschied!" },
1261{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1261{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1262{ "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!" }, 1262{ "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!" },
1263{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1263{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1264{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1264{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1265{ "List week view","Listenwochenansicht" }, 1265{ "List week view","Listenwochenansicht" },
1266{ "List week","Listenwochenansicht" }, 1266{ "List week","Listenwochenansicht" },
1267{ "Next Week","Nächste Woche" }, 1267{ "Next Week","Nächste Woche" },
1268{ "Previous Week","Vorherige Woche" }, 1268{ "Previous Week","Vorherige Woche" },
1269{ "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." }, 1269{ "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." },
1270{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1270{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1271{ "Details","Details" }, 1271{ "Details","Details" },
1272{ "Created time","Erstellt Zeit" }, 1272{ "Created time","Erstellt Zeit" },
1273{ "Last modified time","Geändert Zeit" }, 1273{ "Last modified time","Geändert Zeit" },
1274{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1274{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1275{ "View Options","Anzeige Optionen" }, 1275{ "View Options","Anzeige Optionen" },
1276{ "<b>Created: ","<b>Erstellt am: " }, 1276{ "<b>Created: ","<b>Erstellt am: " },
1277{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1277{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1278{ "Journal: ","Journal: " }, 1278{ "Journal: ","Journal: " },
1279{ "yearly","jährlich" }, 1279{ "yearly","jährlich" },
1280{ "(%1) ","%1-" }, 1280{ "(%1) ","%1-" },
1281{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1281{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1282{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1282{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1283{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1283{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1284{ "Summary/Loc.","Titel/Ort" }, 1284{ "Summary/Loc.","Titel/Ort" },
1285{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1285{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1286{ "Week Number","Wochennummer" }, 1286{ "Week Number","Wochennummer" },
1287{ "Import","Importiere" }, 1287{ "Import","Importiere" },
1288{ "Export","Exportiere" }, 1288{ "Export","Exportiere" },
1289{ "Beam","Beame" }, 1289{ "Beam","Beame" },
1290{ "Export selected","Exportiere Selektierte" }, 1290{ "Export selected","Exportiere Selektierte" },
1291{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1291{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1292{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1292{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1293{ "Journal/Details...","Journale/Details..." }, 1293{ "Journal/Details...","Journale/Details..." },
1294{ "Agenda View","Agenda Ansicht" }, 1294{ "Agenda View","Agenda Ansicht" },
1295{ "Show current time","Zeige aktuelle Zeit" }, 1295{ "Show current time","Zeige aktuelle Zeit" },
1296{ "Edit new item","Bearbeite neuen Eintrag" }, 1296{ "Edit new item","Bearbeite neuen Eintrag" },
1297{ "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" }, 1297{ "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" },
1298{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1298{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1299{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1299{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1300{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1300{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1301{ "%1 days\n","%1 Tagen\n" }, 1301{ "%1 days\n","%1 Tagen\n" },
1302{ "1 day\n","1 Tag\n" }, 1302{ "1 day\n","1 Tag\n" },
1303{ "%1 hours\n","%1 Stunden\n" }, 1303{ "%1 hours\n","%1 Stunden\n" },
1304{ "1 hour\n","1 Stunde\n" }, 1304{ "1 hour\n","1 Stunde\n" },
1305{ "%1 minutes\n","%1 Minuten\n" }, 1305{ "%1 minutes\n","%1 Minuten\n" },
1306{ "1 minute\n","1 Minute\n" }, 1306{ "1 minute\n","1 Minute\n" },
1307{ "Only one toolbar","Nur eine Toolbar" }, 1307{ "Only one toolbar","Nur eine Toolbar" },
1308{ "Print","Drucke" }, 1308{ "Print","Drucke" },
1309{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1309{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1310{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1310{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1311{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1311{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1312{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1312{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1313{ "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" }, 1313{ "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" },
1314{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1314{ "KO/Pi Printout","KO/Pi Ausdruck" },
1315{ "Print unscaled","Drucke unskaliert" }, 1315{ "Print unscaled","Drucke unskaliert" },
1316{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1316{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1317{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1317{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1318{ "Printout Mode","Druck Modus" }, 1318{ "Printout Mode","Druck Modus" },
1319{ "Filter menu icon","Filtermenu Icon" }, 1319{ "Filter menu icon","Filtermenu Icon" },
1320{ "<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" }, 1320{ "<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" },
1321{ "<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" }, 1321{ "<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" },
1322{ "%1d","%1t" }, 1322{ "%1d","%1t" },
1323{ "%1h","%1std" }, 1323{ "%1h","%1std" },
1324{ "%1min","%1min" }, 1324{ "%1min","%1min" },
1325{ "( %1 before )","( %1 vorher )" }, 1325{ "( %1 before )","( %1 vorher )" },
1326{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1326{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1327{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1327{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1328{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1328{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1329{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1329{ "Show Sync Events","Zeige Sync-Ereignisse" },
1330{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1330{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1331{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1331{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1332{ " on "," am " }, 1332{ " on "," am " },
1333{ "On: ","Am: " }, 1333{ "On: ","Am: " },
1334{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1334{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1335{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1335{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1336{ "Color for running todos:","Farbe für laufende Todos:" }, 1336{ "Color for running todos:","Farbe für laufende Todos:" },
1337{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" }, 1337{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" },
1338{ "Todo is started","Todo ist gestartet" }, 1338{ "Todo is started","Todo ist gestartet" },
1339{ "Stop todo","Stoppe Todo" }, 1339{ "Stop todo","Stoppe Todo" },
1340{ "Todo is stopped","Todo ist gestoppt" }, 1340{ "Todo is stopped","Todo ist gestoppt" },
1341{ "Start todo","Starte Todo" }, 1341{ "Start todo","Starte Todo" },
1342{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" }, 1342{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" },
1343{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" }, 1343{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" },
1344{ "Todo has subtodos","Todo hat Untertodos" }, 1344{ "Todo has subtodos","Todo hat Untertodos" },
1345{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1345{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1346{ "Colors","Farben" }, 1346{ "Colors","Farben" },
1347{ "Click on new parent item","Klicke auf neues Übertodo" }, 1347{ "Click on new parent item","Klicke auf neues Übertodo" },
1348{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1348{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1349{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" }, 1349{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" },
1350{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1350{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1351{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" }, 1351{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" },
1352{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1352{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1353{ "times","Zeiten" }, 1353{ "times","Zeiten" },
1354{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" }, 1354{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" },
1355{ "Backup enabled","Backup angeschaltet" }, 1355{ "Backup enabled","Backup angeschaltet" },
1356{ "Use standard backup dir","Standard Backupverzeichnis" }, 1356{ "Use standard backup dir","Standard Backupverzeichnis" },
1357{ "Number of Backups:","Anzahl der Backups" }, 1357{ "Number of Backups:","Anzahl der Backups" },
1358{ "Make backup every ","Mache ein Backup alle " }, 1358{ "Make backup every ","Mache ein Backup alle " },
1359{ " days"," Tage" }, 1359{ " days"," Tage" },
1360{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." }, 1360{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." },
1361{ "Backup Failed!","Backup Problem!" }, 1361{ "Backup Failed!","Backup Problem!" },
1362{ "Try again now","Versuche jetzt nochmal" }, 1362{ "Try again now","Versuche jetzt nochmal" },
1363{ "Try again later","Versuche später nochmal" }, 1363{ "Try again later","Versuche später nochmal" },
1364{ "Try again tomorrow","Versuche morgen nochmal" }, 1364{ "Try again tomorrow","Versuche morgen nochmal" },
1365{ "Disable backup","Schalte Backup ab" }, 1365{ "Disable backup","Schalte Backup ab" },
1366{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 1366{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
1367{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 1367{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
1368{ "Choose action","Wähle Aktion" }, 1368{ "Choose action","Wähle Aktion" },
1369{ "Comment for todo:","Kommentar zum Todo:" }, 1369{ "Comment for todo:","Kommentar zum Todo:" },
1370{ "Stop+note","Stop+Notiz" }, 1370{ "Stop+note","Stop+Notiz" },
1371{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1371{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1372{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1372{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1373{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" }, 1373{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
1374{ "Print complete list","Drucke komplette Liste" }, 1374{ "Print complete list","Drucke komplette Liste" },
1375{ "Hide all selected","Verstecke Selektierte" }, 1375{ "Hide all selected","Verstecke Selektierte" },
1376{ "Add items","hinzufügen" }, 1376{ "Add items","hinzufügen" },
1377{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" }, 1377{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" },
1378{ "Print List View...","Drucke Listenansicht..." }, 1378{ "Print List View...","Drucke Listenansicht..." },
1379{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." }, 1379{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." },
1380{ "Configure KO/Pi...","Konfiguriere KO/Pi..." }, 1380{ "Configure KO/Pi...","Konfiguriere KO/Pi..." },
1381{ "Global Settings...","Globale Einstellungen..." }, 1381{ "Global Settings...","Globale Einstellungen..." },
1382{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, 1382{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" },
1383{ "(disabled)","(abgeschaltet)" }, 1383{ "(disabled)","(abgeschaltet)" },
1384{ "New Calendar","Neuer Kalender" }, 1384{ "New Calendar","Neuer Kalender" },
1385{ "Calendar","Kalender" }, 1385{ "Calendar","Kalender" },
1386{ "Filter selector","Filterauswahl" }, 1386{ "Filter selector","Filterauswahl" },
1387{ "Filtermenu","Filtermenu" }, 1387{ "Filtermenu","Filtermenu" },
1388{ "Toggle Fullscreen","Vollbild umschalten" }, 1388{ "Toggle Fullscreen","Vollbild umschalten" },
1389{ "Toggle Resource View","Resourcenansicht umschalten" }, 1389{ "Toggle Resource View","Resourcenansicht umschalten" },
1390{ "Storage HowTo...","Speicherort HowTo..." }, 1390{ "Storage HowTo...","Speicherort HowTo..." },
1391{ "Timetracking HowTo...","Timetracking HowTo..." }, 1391{ "Timetracking HowTo...","Timetracking HowTo..." },
1392{ "Juni","Juni" }, 1392{ "Juni","Juni" },
1393{ "Juli","Juli" }, 1393{ "Juli","Juli" },
1394{ "ToDo:","ToDo:" }, 1394{ "ToDo:","ToDo:" },
1395{ "Set Calendar","Setze Kalender" }, 1395{ "Set Calendar","Setze Kalender" },
1396{ "Todo: %1","Todo: %1" }, 1396{ "Todo: %1","Todo: %1" },
1397{ ": (Prio ",": (Prio " }, 1397{ ": (Prio ",": (Prio " },
1398{ "Todos","Todos" }, 1398{ "Todos","Todos" },
1399{ "Todo Viewer","Todo Viewer" }, 1399{ "Todo Viewer","Todo Viewer" },
1400{ "Todo ","Todo " }, 1400{ "Todo ","Todo " },
1401{ " Calendar \n Resource "," Kalender \n Resource " }, 1401{ " Calendar \n Resource "," Kalender \n Resource " },
1402{ " Color "," Farbe " }, 1402{ " Color "," Farbe " },
1403{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, 1403{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" },
1404{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, 1404{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" },
1405{ "Add new Calendar","Füge Kalender hinzu" }, 1405{ "Add new Calendar","Füge Kalender hinzu" },
1406{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1406{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1407{ "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" }, 1407{ "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" },
1408{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1408{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1409{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1409{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1410{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, 1410{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." },
1411{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, 1411{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" },
1412{ "Global application font for all apps:","Globale Schriftart:" }, 1412{ "Global application font for all apps:","Globale Schriftart:" },
1413{ "Application Font","Applikationsschriftart" }, 1413{ "Application Font","Applikationsschriftart" },
1414{ "Kx/Pi","Kx/Pi" }, 1414{ "Kx/Pi","Kx/Pi" },
1415{ "Backup","Backup" }, 1415{ "Backup","Backup" },
1416{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1416{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1417{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1417{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1418{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1418{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1419{ "Choose Color","Wähle Farbe" }, 1419{ "Choose Color","Wähle Farbe" },
1420{ " OK "," OK " }, 1420{ " OK "," OK " },
1421{ " Cancel "," Abbrechen " }, 1421{ " Cancel "," Abbrechen " },
1422{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1422{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1423{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1423{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1424{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1424{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1425{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1425{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1426{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1426{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1427{ "%1\nis running!","%1\nist am Laufen!" }, 1427{ "%1\nis running!","%1\nist am Laufen!" },
1428{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1428{ "Additional Comment:","Zusätzlicher Kommentar:" },
1429{ "Stop and save","Stopp und Speichern" }, 1429{ "Stop and save","Stopp und Speichern" },
1430{ "Continue running","Weiter laufen lassen" }, 1430{ "Continue running","Weiter laufen lassen" },
1431{ "Stop - do not save","Stopp - nicht Speichern" }, 1431{ "Stop - do not save","Stopp - nicht Speichern" },
1432{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1432{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1433{ "Time mismatch!","Zeiten stimmen nicht!" }, 1433{ "Time mismatch!","Zeiten stimmen nicht!" },
1434{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1434{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1435{ "Yes, stop todo","Ja, stoppe Todo" }, 1435{ "Yes, stop todo","Ja, stoppe Todo" },
1436{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1436{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1437{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1437{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1438{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1438{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1439{ "Spouse","Ehegatte" }, 1439{ "Spouse","Ehegatte" },
1440{ "Notes","Notizen" }, 1440{ "Notes","Notizen" },
1441{ "Messanger","Messanger" }, 1441{ "Messanger","Messanger" },
1442{ "Assistant","Assistent" }, 1442{ "Assistant","Assistent" },
1443{ "Manager","Manager" }, 1443{ "Manager","Manager" },
1444{ "Secrecy","Sichtbar" }, 1444{ "Secrecy","Sichtbar" },
1445{ "male","männlich" }, 1445{ "male","männlich" },
1446{ "female","weiblich" }, 1446{ "female","weiblich" },
1447{ "Hide!","Verbergen!" }, 1447{ "Hide!","Verbergen!" },
1448{ "Show!","Anzeigen!" }, 1448{ "Show!","Anzeigen!" },
1449{ "Details","Details" }, 1449{ "Details","Details" },
1450{ "Profession","Beruf" }, 1450{ "Profession","Beruf" },
1451{ "Children","Kinder" }, 1451{ "Children","Kinder" },
1452{ "Department","Abteilung" }, 1452{ "Department","Abteilung" },
1453{ "Backup cancelled","Backup abgebrochen" }, 1453{ "Backup cancelled","Backup abgebrochen" },
1454{ "Backup globally disabled","Backup global abgeschaltet" }, 1454{ "Backup globally disabled","Backup global abgeschaltet" },
1455{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1455{ "Backup succesfully finished","Backup erfolgreich beendet" },
1456{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1456{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1457{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1457{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1458{ "Birthdays","Geburtstage" }, 1458{ "Birthdays","Geburtstage" },
1459{ "KO/Pi import information!","KO/Pi Import Information!" }, 1459{ "KO/Pi import information!","KO/Pi Import Information!" },
1460{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1460{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1461{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1461{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1462{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1462{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1463{ "Reload","Neu laden" }, 1463{ "Reload","Neu laden" },
1464{ "Timezone settings","Zeitzoneneinstellung" }, 1464{ "Timezone settings","Zeitzoneneinstellung" },
1465{ " Title: "," Titel: " },
1466{ "","" },
1467{ "","" },
1468{ "","" },
1469{ "","" },
1465{ "","" }, 1470{ "","" },
1466{ "","" }, 1471{ "","" },
1467{ "","" }, \ No newline at end of file 1472{ "","" }, \ No newline at end of file
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp
index 0b923ad..05bfd31 100644
--- a/korganizer/journalentry.cpp
+++ b/korganizer/journalentry.cpp
@@ -1,292 +1,281 @@
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 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// 24//
25// Journal Entry 25// Journal Entry
26 26
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qvbox.h> 29#include <qvbox.h>
30#include <qfile.h> 30#include <qfile.h>
31#include <qdir.h> 31#include <qdir.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qtextcodec.h> 33#include <qtextcodec.h>
34#include <qpixmap.h> 34#include <qpixmap.h>
35#include <qpushbutton.h> 35#include <qpushbutton.h>
36#include <qapplication.h> 36#include <qapplication.h>
37 37
38#include <kdebug.h> 38#include <kdebug.h>
39#include <kglobal.h> 39#include <kglobal.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <ktextedit.h> 41#include <ktextedit.h>
42#include <kfiledialog.h> 42#include <kfiledialog.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44#include "koprefs.h" 44#include "koprefs.h"
45#include <klineedit.h>
45 46
46#include <libkcal/journal.h> 47#include <libkcal/journal.h>
47#include <libkcal/calendarresources.h> 48#include <libkcal/calendarresources.h>
48#include <libkcal/resourcecalendar.h> 49#include <libkcal/resourcecalendar.h>
49#include <kresources/resourceselectdialog.h> 50#include <kresources/resourceselectdialog.h>
50 51
51#include "journalentry.h" 52#include "journalentry.h"
52//#include "journalentry.moc" 53//#include "journalentry.moc"
53#ifndef DESKTOP_VERSION 54#ifndef DESKTOP_VERSION
54#include <qpe/qpeapplication.h> 55#include <qpe/qpeapplication.h>
55#endif 56#endif
56JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) : 57JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) :
57 QFrame(parent) 58 QFrame(parent)
58{ 59{
59 heiHint = QApplication::desktop()->height() / 5 ; 60 heiHint = QApplication::desktop()->height() / 5 ;
60 showOnlyMode = false; 61 showOnlyMode = false;
61 mCalendar = calendar; 62 mCalendar = calendar;
62 mJournal = 0; 63 mJournal = 0;
63 mDirty = false; 64 mDirty = false;
64 65
65 QHBox * vb = new QHBox ( this ); 66 QHBox * vb = new QHBox ( this );
66 QPushButton * newJournal = new QPushButton( vb );
67 QIconSet icon; 67 QIconSet icon;
68 if ( QApplication::desktop()->width() < 321 )
69 icon = SmallIcon("ko16old");
70 else
71 icon = SmallIcon("ko24old");
72 newJournal->setIconSet (icon ) ;
73 int size = newJournal->sizeHint().height();
74 newJournal->setFixedSize( size, size );
75
76 68
77 QPushButton * toggleJournal = new QPushButton( vb ); 69 QPushButton * toggleJournal = new QPushButton( vb );
78 icon = SmallIcon("1updownarrow"); 70 icon = SmallIcon("1updownarrow");
79 toggleJournal->setIconSet (icon ) ; 71 toggleJournal->setIconSet (icon ) ;
80 //int size = toggleJournal->sizeHint().height(); 72 int size = toggleJournal->sizeHint().height();
81 toggleJournal->setFixedSize( size * 2 /3 , size ); 73 toggleJournal->setFixedSize( size * 2 /3 , size );
82 74 new QLabel(i18n(" Title: "),vb);
83 75 mTitle = new KLineEdit ( vb );
84
85 mTitleLabel = new QLabel(i18n("Title"),vb); 76 mTitleLabel = new QLabel(i18n("Title"),vb);
86 mTitleLabel->setMargin(2); 77 mTitleLabel->setMargin(0);
87 mTitleLabel->setAlignment(AlignCenter); 78 mTitleLabel->setAlignment(AlignCenter);
88 QPushButton * loadTemplate = new QPushButton( vb ); 79 QPushButton * loadTemplate = new QPushButton( vb );
89 QPushButton * saveTemplate = new QPushButton( vb ); 80 QPushButton * saveTemplate = new QPushButton( vb );
90 if ( QApplication::desktop()->width() < 321 ) 81 if ( QApplication::desktop()->width() < 321 )
91 icon = SmallIcon("fileexport16"); 82 icon = SmallIcon("fileexport16");
92 else 83 else
93 icon = SmallIcon("fileexport"); 84 icon = SmallIcon("fileexport");
94 saveTemplate->setIconSet (icon ) ; 85 saveTemplate->setIconSet (icon ) ;
95 //size = saveTemplate->sizeHint().height(); 86 //size = saveTemplate->sizeHint().height();
96 saveTemplate->setFixedSize( size, size ); 87 saveTemplate->setFixedSize( size, size );
97 if ( QApplication::desktop()->width() < 321 ) 88 if ( QApplication::desktop()->width() < 321 )
98 icon = SmallIcon("fileimport16"); 89 icon = SmallIcon("fileimport16");
99 else 90 else
100 icon = SmallIcon("fileimport"); 91 icon = SmallIcon("fileimport");
101 loadTemplate->setIconSet (icon ) ; 92 loadTemplate->setIconSet (icon ) ;
102 loadTemplate->setFixedSize( size, size ); 93 loadTemplate->setFixedSize( size, size );
103 mEditor = new KTextEdit(this); 94 mEditor = new KTextEdit(this);
104 connect(mEditor,SIGNAL(textChanged()),SLOT(setDirty())); 95 connect(mEditor,SIGNAL(textChanged()),SLOT(setDirty()));
105#ifndef DESKTOP_VERSION 96#ifndef DESKTOP_VERSION
106 QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold ); 97 QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold );
107#endif 98#endif
108 mEditor->setWordWrap( KTextEdit::WidgetWidth ); 99 mEditor->setWordWrap( KTextEdit::WidgetWidth );
109 QBoxLayout *topLayout = new QVBoxLayout(this); 100 QBoxLayout *topLayout = new QVBoxLayout(this);
110 topLayout->addWidget(vb); 101 topLayout->addWidget(vb);
111 topLayout->addWidget(mEditor); 102 topLayout->addWidget(mEditor);
112 mEditor->installEventFilter(this); 103 mEditor->installEventFilter(this);
113 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 104 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
105 connect( mTitle, SIGNAL( textChanged ( const QString & ) ), this , SLOT( setDirty() ) );
114 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 106 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
115 connect( newJournal, SIGNAL( clicked() ), this , SIGNAL( newJournal() ) );
116 connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) ); 107 connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) );
117} 108}
118 109
119JournalEntry::~JournalEntry() 110JournalEntry::~JournalEntry()
120{ 111{
121 qDebug("JournalEntry::~JournalEntry() "); 112 //qDebug("JournalEntry::~JournalEntry() ");
122} 113}
123QSize JournalEntry::sizeHint() const 114QSize JournalEntry::sizeHint() const
124{ 115{
125 return QSize ( 240, heiHint ); 116 return QSize ( 240, heiHint );
126} 117}
127void JournalEntry::slotSaveTemplate() 118void JournalEntry::slotSaveTemplate()
128{ 119{
129 QString fileName =locateLocal( "templates", "journals" ); 120 QString fileName =locateLocal( "templates", "journals" );
130 QDir t_dir; 121 QDir t_dir;
131 if ( !t_dir.exists(fileName) ) 122 if ( !t_dir.exists(fileName) )
132 t_dir.mkdir ( fileName ); 123 t_dir.mkdir ( fileName );
133 fileName += "/journal"; 124 fileName += "/journal";
134 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this ); 125 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this );
135 if ( fileName.length() == 0 ) 126 if ( fileName.length() == 0 )
136 return; 127 return;
137 128
138 QFile fileIn( fileName ); 129 QFile fileIn( fileName );
139 if (!fileIn.open( IO_WriteOnly ) ) { 130 if (!fileIn.open( IO_WriteOnly ) ) {
140 KMessageBox::error( this, i18n("Error saving template file\n '%1'.") 131 KMessageBox::error( this, i18n("Error saving template file\n '%1'.")
141 .arg( fileName ) ); 132 .arg( fileName ) );
142 return; 133 return;
143 } 134 }
144 // QString text; 135 // QString text;
145 QTextStream tsIn( &fileIn ); 136 QTextStream tsIn( &fileIn );
146 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 137 tsIn.setCodec( QTextCodec::codecForName("utf8") );
147 tsIn << mEditor->text(); 138 tsIn << mEditor->text();
148 fileIn.close(); 139 fileIn.close();
149} 140}
150void JournalEntry::slotLoadTemplate() 141void JournalEntry::slotLoadTemplate()
151{ 142{
152 QString fileName =locateLocal( "templates", "journals" ); 143 QString fileName =locateLocal( "templates", "journals" );
153 QDir t_dir; 144 QDir t_dir;
154 if ( !t_dir.exists(fileName) ) 145 if ( !t_dir.exists(fileName) )
155 t_dir.mkdir ( fileName ); 146 t_dir.mkdir ( fileName );
156 fileName += "/journal"; 147 fileName += "/journal";
157 fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this ); 148 fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this );
158 if ( fileName.length() == 0 ) 149 if ( fileName.length() == 0 )
159 return; 150 return;
160 QFile fileIn( fileName ); 151 QFile fileIn( fileName );
161 if (!fileIn.open( IO_ReadOnly ) ) { 152 if (!fileIn.open( IO_ReadOnly ) ) {
162 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 153 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
163 .arg( fileName ) ); 154 .arg( fileName ) );
164 return; 155 return;
165 } 156 }
166 QTextStream tsIn( &fileIn ); 157 QTextStream tsIn( &fileIn );
167 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 158 tsIn.setCodec( QTextCodec::codecForName("utf8") );
168 QString text = tsIn.read(); 159 QString text = tsIn.read();
169 fileIn.close(); 160 fileIn.close();
170 int line, col; 161 int line, col;
171 mEditor->getCursorPosition (& line, & col ); 162 mEditor->getCursorPosition (& line, & col );
172 mEditor-> insertAt ( text, line, col, true ); 163 mEditor-> insertAt ( text, line, col, true );
173 //mEditor->setIgnoreMark( true ); 164 //mEditor->setIgnoreMark( true );
174 setDirty(); 165 setDirty();
175} 166}
176void JournalEntry::setDate(const QDate &date) 167void JournalEntry::setDate(const QDate &date)
177{ 168{
178 showOnlyMode = false; 169 showOnlyMode = false;
179 mDate = date; 170 mDate = date;
180 writeJournal(); 171 writeJournal();
181 int id = mCalendar->defaultCalendar(); 172 int id = mCalendar->defaultCalendar();
182 if ( id == 1 ) { 173 QString calname = KOPrefs::instance()->getCalendar( id )->mName;
183 mTitleLabel->setText(KGlobal::locale()->formatDate(date)); 174 mTitleLabel->setText( " (" + calname +")");
184 } else {
185 QString calname = KOPrefs::instance()->getCalendar( id )->mName;
186 mTitleLabel->setText( KGlobal::locale()->formatDate(mDate,true) + " (" + calname +")");
187 }
188} 175}
189 176
190void JournalEntry::toggleShowJournal() 177void JournalEntry::toggleShowJournal()
191{ 178{
179 flushEntry();
192 if ( showOnlyMode ) 180 if ( showOnlyMode )
193 emit showJournalOnly( 0 ); 181 emit showJournalOnly( 0 );
194 else 182 else
195 emit showJournalOnly( mJournal ); 183 emit showJournalOnly( mJournal );
196} 184}
197 185void JournalEntry::setShowOnly()
186{
187 showOnlyMode = true;
188 mEditor->setFocus();
189}
198void JournalEntry::setJournal(Journal *journal) 190void JournalEntry::setJournal(Journal *journal)
199{ 191{
200 writeJournal(); 192 writeJournal();
201 193
202 mJournal = journal; 194 mJournal = journal;
203 195 mTitle->setText(mJournal->summary());
204 mEditor->setText(mJournal->description()); 196 mEditor->setText(mJournal->description());
205 int id = mJournal->calID(); 197 int id = mJournal->calID();
206 if ( id > 1 ) { 198
207 QString calname = KOPrefs::instance()->getCalendar( id )->mName; 199 QString calname = KOPrefs::instance()->getCalendar( id )->mName;
208 mTitleLabel->setText( KGlobal::locale()->formatDate(mDate,true) + " (" + calname +")"); 200 mTitleLabel->setText( " (" + calname +")");
209 } else { 201
210 mTitleLabel->setText(KGlobal::locale()->formatDate(mDate));
211 }
212 mDirty = false; 202 mDirty = false;
213} 203}
214 204
215Journal *JournalEntry::journal() const 205Journal *JournalEntry::journal() const
216{ 206{
217 return mJournal; 207 return mJournal;
218} 208}
219 209
220void JournalEntry::setDirty() 210void JournalEntry::setDirty()
221{ 211{
222 mDirty = true; 212 mDirty = true;
223 213
224// kdDebug() << "JournalEntry::setDirty()" << endl; 214// kdDebug() << "JournalEntry::setDirty()" << endl;
225} 215}
226 216
227void JournalEntry::clear() 217void JournalEntry::clear()
228{ 218{
229 mJournal = 0; 219 mJournal = 0;
230 mEditor->setText(""); 220 mEditor->setText("");
231} 221}
232 222
233bool JournalEntry::eventFilter( QObject *o, QEvent *e ) 223bool JournalEntry::eventFilter( QObject *o, QEvent *e )
234{ 224{
235// kdDebug() << "JournalEntry::event received " << e->type() << endl; 225// kdDebug() << "JournalEntry::event received " << e->type() << endl;
236 226
237 if ( e->type() == QEvent::FocusOut ) { 227 if ( e->type() == QEvent::FocusOut ) {
238 writeJournal(); 228 writeJournal();
239 } 229 }
240 if ( e->type() == QEvent::KeyPress ) { 230 if ( e->type() == QEvent::KeyPress ) {
241 QKeyEvent * k = (QKeyEvent *) e; 231 QKeyEvent * k = (QKeyEvent *) e;
242 if ( k->state() == Qt::ControlButton ) { 232 if ( k->state() == Qt::ControlButton ) {
243 k->ignore(); 233 k->ignore();
244 //return true; 234 //return true;
245 } 235 }
246 } 236 }
247 237
248 return QFrame::eventFilter( o, e ); // standard event processing 238 return QFrame::eventFilter( o, e ); // standard event processing
249} 239}
250 240
251void JournalEntry::writeJournal() 241void JournalEntry::writeJournal()
252{ 242{
253// kdDebug() << "JournalEntry::writeJournal()" << endl; 243// kdDebug() << "JournalEntry::writeJournal()" << endl;
254 if (!mDirty) return; 244 if (!mDirty) return;
255 245
256 if (mEditor->text().isEmpty()) { 246 if (mEditor->text().isEmpty()) {
257 if ( mJournal ) { 247 if ( mJournal ) {
258 mDirty = false; 248 mDirty = false;
259 bool conf = KOPrefs::instance()->mConfirm; 249 bool conf = KOPrefs::instance()->mConfirm;
260 KOPrefs::instance()->mConfirm = false; 250 KOPrefs::instance()->mConfirm = false;
261 emit deleteJournal(mJournal); 251 emit deleteJournal(mJournal);
262 KOPrefs::instance()->mConfirm = conf; 252 KOPrefs::instance()->mConfirm = conf;
263 mJournal = 0; 253 mJournal = 0;
264 } 254 }
265 return; 255 return;
266 } 256 }
267 257
268// kdDebug() << "JournalEntry::writeJournal()..." << endl; 258// kdDebug() << "JournalEntry::writeJournal()..." << endl;
269 259
270 if (!mJournal) { 260 if (!mJournal) {
271 mJournal = new Journal; 261 mJournal = new Journal;
272 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); 262 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0)));
273 mCalendar->addJournal(mJournal); 263 mCalendar->addJournal(mJournal);
274 } 264 }
275 265
276 mJournal->setDescription(mEditor->text()); 266 mJournal->setDescription(mEditor->text());
277 //qDebug("tttt%s ", mEditor->text().latin1()); 267 mJournal->setSummary(mTitle->text());
278
279 mDirty = false; 268 mDirty = false;
280} 269}
281 270
282void JournalEntry::flushEntry() 271void JournalEntry::flushEntry()
283{ 272{
284 if (!mDirty) return; 273 if (!mDirty) return;
285 274
286 writeJournal(); 275 writeJournal();
287} 276}
288void JournalEntry::keyPressEvent ( QKeyEvent * e ) 277void JournalEntry::keyPressEvent ( QKeyEvent * e )
289{ 278{
290 e->ignore(); 279 e->ignore();
291 280
292} 281}
diff --git a/korganizer/journalentry.h b/korganizer/journalentry.h
index b0e9cc7..b37cabd 100644
--- a/korganizer/journalentry.h
+++ b/korganizer/journalentry.h
@@ -1,82 +1,84 @@
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 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#ifndef JOURNALENTRY_H 23#ifndef JOURNALENTRY_H
24#define JOURNALENTRY_H 24#define JOURNALENTRY_H
25// 25//
26// Widget showing one Journal entry 26// Widget showing one Journal entry
27 27
28#include <qframe.h> 28#include <qframe.h>
29 29
30#include <libkcal/calendar.h> 30#include <libkcal/calendar.h>
31 31
32class QLabel; 32class QLabel;
33class KTextEdit; 33class KTextEdit;
34class KLineEdit;
34 35
35using namespace KCal; 36using namespace KCal;
36 37
37class JournalEntry : public QFrame { 38class JournalEntry : public QFrame {
38 Q_OBJECT 39 Q_OBJECT
39 public: 40 public:
40 JournalEntry(Calendar *,QWidget *parent); 41 JournalEntry(Calendar *,QWidget *parent);
41 virtual ~JournalEntry(); 42 virtual ~JournalEntry();
42 43
43 void setJournal(Journal *); 44 void setJournal(Journal *);
44 Journal *journal() const; 45 Journal *journal() const;
45 46
46 void setDate(const QDate &); 47 void setDate(const QDate &);
47 48
48 void clear(); 49 void clear();
49 50
50 void flushEntry(); 51 void flushEntry();
51 void setShowOnly() {showOnlyMode = true;} 52 void setShowOnly();
52 QSize sizeHint() const; 53 QSize sizeHint() const;
53 54
54 protected slots: 55 protected slots:
55 void slotSaveTemplate(); 56 void slotSaveTemplate();
56 void slotLoadTemplate(); 57 void slotLoadTemplate();
57 void setDirty(); 58 void setDirty();
58 void toggleShowJournal(); 59 void toggleShowJournal();
59 signals: 60 signals:
60 void deleteJournal(Journal *); 61 void deleteJournal(Journal *);
61 void newJournal(); 62 void newJournal();
62 void showJournalOnly( Journal * ); 63 void showJournalOnly( Journal * );
63 64
64 protected: 65 protected:
65 bool eventFilter( QObject *o, QEvent *e ); 66 bool eventFilter( QObject *o, QEvent *e );
66 67
67 void writeJournal(); 68 void writeJournal();
68 69
69 private: 70 private:
70 bool showOnlyMode; 71 bool showOnlyMode;
71 Calendar *mCalendar; 72 Calendar *mCalendar;
72 Journal *mJournal; 73 Journal *mJournal;
73 QDate mDate; 74 QDate mDate;
74 void keyPressEvent ( QKeyEvent * ) ; 75 void keyPressEvent ( QKeyEvent * ) ;
75 QLabel *mTitleLabel; 76 QLabel *mTitleLabel;
77 KLineEdit * mTitle;
76 KTextEdit *mEditor; 78 KTextEdit *mEditor;
77 int heiHint; 79 int heiHint;
78 80
79 bool mDirty; 81 bool mDirty;
80}; 82};
81 83
82#endif 84#endif
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 3468657..067c34c 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -1,1205 +1,1216 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at> 3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at>
4 Parts of the source code have been copied from kdpdatebutton.cpp 4 Parts of the source code have been copied from kdpdatebutton.cpp
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 ode for Qt in the source distribution. 22 without including the source ode for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qevent.h> 25#include <qevent.h>
26#include <qpainter.h> 26#include <qpainter.h>
27#include <qptrlist.h> 27#include <qptrlist.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qwhatsthis.h> 29#include <qwhatsthis.h>
30 30
31#include <kglobal.h> 31#include <kglobal.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <klocale.h> 33#include <klocale.h>
34 34
35#include <libkcal/vcaldrag.h> 35#include <libkcal/vcaldrag.h>
36#include <libkcal/icaldrag.h> 36#include <libkcal/icaldrag.h>
37#include <libkcal/dndfactory.h> 37#include <libkcal/dndfactory.h>
38#include <libkcal/calendarresources.h> 38#include <libkcal/calendarresources.h>
39#include <libkcal/resourcecalendar.h> 39#include <libkcal/resourcecalendar.h>
40#include <kresources/resourceselectdialog.h> 40#include <kresources/resourceselectdialog.h>
41 41
42#include <kcalendarsystem.h> 42#include <kcalendarsystem.h>
43 43
44#ifndef KORG_NOPLUGINS 44#ifndef KORG_NOPLUGINS
45#include "kocore.h" 45#include "kocore.h"
46#endif 46#endif
47#include "koprefs.h" 47#include "koprefs.h"
48#include "koglobals.h" 48#include "koglobals.h"
49 49
50#include "kodaymatrix.h" 50#include "kodaymatrix.h"
51 51
52// ============================================================================ 52// ============================================================================
53// D Y N A M I C T I P 53// D Y N A M I C T I P
54// ============================================================================ 54// ============================================================================
55 55
56DynamicTip::DynamicTip( QWidget * parent ) 56DynamicTip::DynamicTip( QWidget * parent )
57 : QToolTip( parent ) 57 : QToolTip( parent )
58{ 58{
59 matrix = (KODayMatrix*)parent; 59 matrix = (KODayMatrix*)parent;
60} 60}
61 61
62class KODaymatrixWhatsThis :public QWhatsThis 62class KODaymatrixWhatsThis :public QWhatsThis
63{ 63{
64public: 64public:
65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; 65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;};
66 ~KODaymatrixWhatsThis() { ; }; 66 ~KODaymatrixWhatsThis() { ; };
67 67
68protected: 68protected:
69 virtual QString text( const QPoint& p ) 69 virtual QString text( const QPoint& p )
70 { 70 {
71 return _view->getWhatsThisText( p ) ; 71 return _view->getWhatsThisText( p ) ;
72 } 72 }
73private: 73private:
74 KODayMatrix * _view; 74 KODayMatrix * _view;
75}; 75};
76 76
77void DynamicTip::maybeTip( const QPoint &pos ) 77void DynamicTip::maybeTip( const QPoint &pos )
78{ 78{
79 //calculate which cell of the matrix the mouse is in 79 //calculate which cell of the matrix the mouse is in
80 QRect sz = matrix->frameRect(); 80 QRect sz = matrix->frameRect();
81 int dheight = sz.height()*7 / 42; 81 int dheight = sz.height()*7 / 42;
82 int dwidth = sz.width() / 7; 82 int dwidth = sz.width() / 7;
83 int row = pos.y()/dheight; 83 int row = pos.y()/dheight;
84 int col = pos.x()/dwidth; 84 int col = pos.x()/dwidth;
85 85
86 QRect rct(col*dwidth, row*dheight, dwidth, dheight); 86 QRect rct(col*dwidth, row*dheight, dwidth, dheight);
87 87
88// kdDebug() << "DynamicTip::maybeTip matrix cell index [" << 88// kdDebug() << "DynamicTip::maybeTip matrix cell index [" <<
89// col << "][" << row << "] => " <<(col+row*7) << endl; 89// col << "][" << row << "] => " <<(col+row*7) << endl;
90 90
91 //show holiday names only 91 //show holiday names only
92 QString str = matrix->getHolidayLabel(col+row*7); 92 QString str = matrix->getHolidayLabel(col+row*7);
93 if (str.isEmpty()) return; 93 if (str.isEmpty()) return;
94 tip(rct, str); 94 tip(rct, str);
95} 95}
96 96
97 97
98// ============================================================================ 98// ============================================================================
99// K O D A Y M A T R I X 99// K O D A Y M A T R I X
100// ============================================================================ 100// ============================================================================
101 101
102const int KODayMatrix::NOSELECTION = -1000; 102const int KODayMatrix::NOSELECTION = -1000;
103const int KODayMatrix::NUMDAYS = 42; 103const int KODayMatrix::NUMDAYS = 42;
104 104
105KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) 105KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
106 : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) 106 : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 )
107 107
108 108
109{ 109{
110 mLastView = -1; 110 mLastView = -1;
111 oldW = 0; 111 oldW = 0;
112 oldH = 0; 112 oldH = 0;
113 myPix.resize( 150, 120 ); 113 myPix.resize( 150, 120 );
114 mRedrawNeeded = true; 114 mRedrawNeeded = true;
115 mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); 115 mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this);
116 mPendingUpdateBeforeRepaint = false; 116 mPendingUpdateBeforeRepaint = false;
117 mouseDown = false; 117 mouseDown = false;
118 // initialize dynamic arrays 118 // initialize dynamic arrays
119 bDays.resize ( NUMDAYS ); 119 bDays.resize ( NUMDAYS );
120 pDays.resize ( NUMDAYS ); 120 pDays.resize ( NUMDAYS );
121 hDays.resize ( NUMDAYS ); 121 hDays.resize ( NUMDAYS );
122 eDays.resize ( NUMDAYS ); 122 eDays.resize ( NUMDAYS );
123 days = new QDate[NUMDAYS]; 123 days = new QDate[NUMDAYS];
124 daylbls = new QString[NUMDAYS]; 124 daylbls = new QString[NUMDAYS];
125 //events = new int[NUMDAYS]; 125 //events = new int[NUMDAYS];
126 mToolTip = new DynamicTip(this); 126 mToolTip = new DynamicTip(this);
127 127
128 // set default values used for drawing the matrix 128 // set default values used for drawing the matrix
129 mDefaultBackColor = palette().active().base(); 129 mDefaultBackColor = palette().active().base();
130 mDefaultTextColor = palette().active().foreground(); 130 mDefaultTextColor = palette().active().foreground();
131 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); 131 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor);
132 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); 132 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor);
133 mSelectedDaysColor = QColor("white"); 133 mSelectedDaysColor = QColor("white");
134 mTodayMarginWidth = 2; 134 mTodayMarginWidth = 2;
135 mSelEnd = mSelStart = NOSELECTION; 135 mSelEnd = mSelStart = NOSELECTION;
136 136
137 setAcceptDrops(true); 137 setAcceptDrops(true);
138 //setFont( QFont("Arial", 10) ); 138 //setFont( QFont("Arial", 10) );
139 139
140 mUpdateTimer = new QTimer( this ); 140 mUpdateTimer = new QTimer( this );
141 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); 141 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() ));
142 mRepaintTimer = new QTimer( this ); 142 mRepaintTimer = new QTimer( this );
143 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); 143 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
144 mDayChanged = false; 144 mDayChanged = false;
145 updateView(); 145 updateView();
146} 146}
147QString KODayMatrix::getWhatsThisText( QPoint p ) 147QString KODayMatrix::getWhatsThisText( QPoint p )
148{ 148{
149 149
150 int tmp = getDayIndexFrom(p.x(), p.y()); 150 int tmp = getDayIndexFrom(p.x(), p.y());
151 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) 151 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar )
152 return QString(); 152 return QString();
153 QDate mDate = days[tmp]; 153 QDate mDate = days[tmp];
154 QPtrList<Event> eventlist = mCalendar->events(mDate); 154 QPtrList<Event> eventlist = mCalendar->events(mDate);
155 Event *event; 155 Event *event;
156 QStringList mToolTip; 156 QStringList mToolTip;
157 for(event=eventlist.first();event != 0;event=eventlist.next()) { 157 for(event=eventlist.first();event != 0;event=eventlist.next()) {
158 QString mToolTipText; 158 QString mToolTipText;
159 QString text; 159 QString text;
160 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day 160 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
161 if (event->isMultiDay()) { 161 if (event->isMultiDay()) {
162 QString prefix = "<->";multiday = 2; 162 QString prefix = "<->";multiday = 2;
163 QString time; 163 QString time;
164 if ( event->doesRecur() ) { 164 if ( event->doesRecur() ) {
165 if ( event->recursOn( mDate) ) { 165 if ( event->recursOn( mDate) ) {
166 prefix ="->" ;multiday = 1; 166 prefix ="->" ;multiday = 1;
167 } 167 }
168 else { 168 else {
169 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 169 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
170 if ( event->recursOn( mDate.addDays( -days)) ) { 170 if ( event->recursOn( mDate.addDays( -days)) ) {
171 prefix ="<-" ;multiday = 3; 171 prefix ="<-" ;multiday = 3;
172 } 172 }
173 } 173 }
174 } else { 174 } else {
175 if (mDate == event->dtStart().date()) { 175 if (mDate == event->dtStart().date()) {
176 prefix ="->" ;multiday = 1; 176 prefix ="->" ;multiday = 1;
177 } else if (mDate == event->dtEnd().date()) { 177 } else if (mDate == event->dtEnd().date()) {
178 prefix ="<-" ;multiday = 3; 178 prefix ="<-" ;multiday = 3;
179 } 179 }
180 } 180 }
181 if ( !event->doesFloat() ) { 181 if ( !event->doesFloat() ) {
182 if ( mDate == event->dtStart().date () ) 182 if ( mDate == event->dtStart().date () )
183 time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; 183 time = KGlobal::locale()->formatTime(event->dtStart().time())+" ";
184 else if ( mDate == event->dtEnd().date () ) 184 else if ( mDate == event->dtEnd().date () )
185 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; 185 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
186 186
187 } 187 }
188 text = time + event->summary(); 188 text = time + event->summary();
189 mToolTipText += prefix + text; 189 mToolTipText += prefix + text;
190 } else { 190 } else {
191 if (event->doesFloat()) { 191 if (event->doesFloat()) {
192 text = event->summary(); 192 text = event->summary();
193 mToolTipText += text; 193 mToolTipText += text;
194 } 194 }
195 else { 195 else {
196 text = KGlobal::locale()->formatTime(event->dtStart().time()); 196 text = KGlobal::locale()->formatTime(event->dtStart().time());
197 text += " " + event->summary(); 197 text += " " + event->summary();
198 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 198 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
199 } 199 }
200 } 200 }
201 if ( !event->location().isEmpty() ) 201 if ( !event->location().isEmpty() )
202 mToolTipText += " (" + event->location() + ")"; 202 mToolTipText += " (" + event->location() + ")";
203 //qDebug("TTT: %s ", mToolTipText.latin1()); 203 //qDebug("TTT: %s ", mToolTipText.latin1());
204 mToolTip.append( deTag( mToolTipText ) ); 204 mToolTip.append( deTag( mToolTipText ) );
205 } 205 }
206 mToolTip.sort(); 206 mToolTip.sort();
207 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 207 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
208 QPtrList<Todo> todolist = mCalendar->todos(mDate); 208 QPtrList<Todo> todolist = mCalendar->todos(mDate);
209 Todo *todo; 209 Todo *todo;
210 for(todo=todolist.first();todo != 0;todo=todolist.next()) { 210 for(todo=todolist.first();todo != 0;todo=todolist.next()) {
211 QString mToolTipText; 211 QString mToolTipText;
212 if ( !todo->doesFloat() ) 212 if ( !todo->doesFloat() )
213 mToolTipText += KGlobal::locale()->formatTime(todo->dtDue().time())+" "; 213 mToolTipText += KGlobal::locale()->formatTime(todo->dtDue().time())+" ";
214 mToolTipText += todo->summary(); 214 mToolTipText += todo->summary();
215 if ( !todo->location().isEmpty() ) 215 if ( !todo->location().isEmpty() )
216 mToolTipText += " (" + todo->location() + ")"; 216 mToolTipText += " (" + todo->location() + ")";
217 mToolTipText = deTag( mToolTipText); 217 mToolTipText = deTag( mToolTipText);
218 mToolTipText = "<b>" + i18n("Todo: ") + "</b>"+ mToolTipText; 218 mToolTipText = "<b>" + i18n("Todo: ") + "</b>"+ mToolTipText;
219 mToolTip.append( mToolTipText ); 219 mToolTip.append( mToolTipText );
220 } 220 }
221 } 221 }
222 if (KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 222 if (KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
223 Journal *j = mCalendar->journal( mDate ); 223 QPtrList<Journal> j_list = mCalendar->journals4Date( mDate );
224 if ( j ) { 224 Journal *j = j_list.first();
225 QString mToolTipText = j->description().left(100); 225 while ( j ) {
226 if ( j->description().length() > 100 ) 226 QString mToolTipText;
227 mToolTipText += " ..."; 227 if ( !j->summary().isEmpty() ) {
228 mToolTipText = deTag( mToolTipText); 228 mToolTipText = j->summary().left(30);
229 if ( j->summary().length() > 30 )
230 mToolTipText += " ...";
231 } else {
232 mToolTipText = j->description().left(25);
233 if ( j->description().length() > 25 )
234 mToolTipText += " ...";
235 mToolTipText = deTag( mToolTipText);
236 }
229 mToolTipText = "<b>" + i18n("Journal: ") + "</b>"+ mToolTipText; 237 mToolTipText = "<b>" + i18n("Journal: ") + "</b>"+ mToolTipText;
230 mToolTip.append( mToolTipText ); 238 mToolTip.append( mToolTipText );
239 j = j_list.next();
231 } 240 }
232 } 241 }
233 return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>"); 242 return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>");
234} 243}
235 244
236 245
237QString KODayMatrix::deTag( QString mToolTipText ) 246QString KODayMatrix::deTag( QString mToolTipText )
238{ 247{
239 248
240#if QT_VERSION >= 0x030000 249#if QT_VERSION >= 0x030000
241 mToolTipText.replace( '<' , "&lt;" ); 250 mToolTipText.replace( '<' , "&lt;" );
242 mToolTipText.replace( '>' , "&gt;" ); 251 mToolTipText.replace( '>' , "&gt;" );
243#else 252#else
244 if ( mToolTipText.find ('<') >= 0 ) { 253 if ( mToolTipText.find ('<') >= 0 ) {
245 mToolTipText.replace( QRegExp("<") , "&lt;" ); 254 mToolTipText.replace( QRegExp("<") , "&lt;" );
246 } 255 }
247 if ( mToolTipText.find ('>') >= 0 ) { 256 if ( mToolTipText.find ('>') >= 0 ) {
248 mToolTipText.replace( QRegExp(">") , "&gt;" ); 257 mToolTipText.replace( QRegExp(">") , "&gt;" );
249 } 258 }
250#endif 259#endif
251 return mToolTipText; 260 return mToolTipText;
252} 261}
253void KODayMatrix::setCalendar( Calendar *cal ) 262void KODayMatrix::setCalendar( Calendar *cal )
254{ 263{
255 mCalendar = cal; 264 mCalendar = cal;
256 265
257 setAcceptDrops( mCalendar ); 266 setAcceptDrops( mCalendar );
258 267
259 updateEvents(); 268 updateEvents();
260} 269}
261 270
262QColor KODayMatrix::getShadedColor(QColor color) 271QColor KODayMatrix::getShadedColor(QColor color)
263{ 272{
264 QColor shaded; 273 QColor shaded;
265 int h=0; 274 int h=0;
266 int s=0; 275 int s=0;
267 int v=0; 276 int v=0;
268 color.hsv(&h,&s,&v); 277 color.hsv(&h,&s,&v);
269 s = s/4; 278 s = s/4;
270 v = 192+v/4; 279 v = 192+v/4;
271 shaded.setHsv(h,s,v); 280 shaded.setHsv(h,s,v);
272 281
273 return shaded; 282 return shaded;
274} 283}
275 284
276KODayMatrix::~KODayMatrix() 285KODayMatrix::~KODayMatrix()
277{ 286{
278#if QT_VERSION >= 0x030000 287#if QT_VERSION >= 0x030000
279 288
280#else 289#else
281 delete mKODaymatrixWhatsThis; 290 delete mKODaymatrixWhatsThis;
282#endif 291#endif
283 292
284 // delete mKODaymatrixWhatsThis; 293 // delete mKODaymatrixWhatsThis;
285 delete [] days; 294 delete [] days;
286 delete [] daylbls; 295 delete [] daylbls;
287 //delete [] events; 296 //delete [] events;
288 delete mToolTip; 297 delete mToolTip;
289} 298}
290 299
291/* 300/*
292void KODayMatrix::setStartDate(QDate start) 301void KODayMatrix::setStartDate(QDate start)
293{ 302{
294 updateView(start); 303 updateView(start);
295} 304}
296*/ 305*/
297 306
298void KODayMatrix::addSelectedDaysTo(DateList& selDays) 307void KODayMatrix::addSelectedDaysTo(DateList& selDays)
299{ 308{
300 309
301 if (mSelStart == NOSELECTION) { 310 if (mSelStart == NOSELECTION) {
302 return; 311 return;
303 } 312 }
304 313
305 //cope with selection being out of matrix limits at top (< 0) 314 //cope with selection being out of matrix limits at top (< 0)
306 int i0 = mSelStart; 315 int i0 = mSelStart;
307 if (i0 < 0) { 316 if (i0 < 0) {
308 for (int i = i0; i < 0; i++) { 317 for (int i = i0; i < 0; i++) {
309 selDays.append(days[0].addDays(i)); 318 selDays.append(days[0].addDays(i));
310 } 319 }
311 i0 = 0; 320 i0 = 0;
312 } 321 }
313 322
314 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) 323 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1)
315 if (mSelEnd > NUMDAYS-1) { 324 if (mSelEnd > NUMDAYS-1) {
316 for (int i = i0; i <= NUMDAYS-1; i++) { 325 for (int i = i0; i <= NUMDAYS-1; i++) {
317 selDays.append(days[i]); 326 selDays.append(days[i]);
318 } 327 }
319 for (int i = NUMDAYS; i < mSelEnd; i++) { 328 for (int i = NUMDAYS; i < mSelEnd; i++) {
320 selDays.append(days[0].addDays(i)); 329 selDays.append(days[0].addDays(i));
321 } 330 }
322 331
323 // apply normal routine to selection being entirely within matrix limits 332 // apply normal routine to selection being entirely within matrix limits
324 } else { 333 } else {
325 for (int i = i0; i <= mSelEnd; i++) { 334 for (int i = i0; i <= mSelEnd; i++) {
326 selDays.append(days[i]); 335 selDays.append(days[i]);
327 } 336 }
328 } 337 }
329} 338}
330 339
331bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 340bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
332{ 341{
333 mRedrawNeeded = true; 342 mRedrawNeeded = true;
334 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); 343 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION );
335 mSelStart = startdate.daysTo(start); 344 mSelStart = startdate.daysTo(start);
336 if ( mSelStart < 0 ) 345 if ( mSelStart < 0 )
337 mSelStart = 0; 346 mSelStart = 0;
338 mSelEnd = startdate.daysTo(end); 347 mSelEnd = startdate.daysTo(end);
339 if ( mSelEnd > NUMDAYS-1 ) 348 if ( mSelEnd > NUMDAYS-1 )
340 mSelEnd = NUMDAYS-1; 349 mSelEnd = NUMDAYS-1;
341 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { 350 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) {
342 clearSelection(); 351 clearSelection();
343 if ( noSel ) 352 if ( noSel )
344 return false; 353 return false;
345 } 354 }
346 355
347 return true; 356 return true;
348} 357}
349void KODayMatrix::clearSelection() 358void KODayMatrix::clearSelection()
350{ 359{
351 mSelEnd = mSelStart = NOSELECTION; 360 mSelEnd = mSelStart = NOSELECTION;
352} 361}
353 362
354 363
355void KODayMatrix::recalculateToday() 364void KODayMatrix::recalculateToday()
356{ 365{
357 today = -1; 366 today = -1;
358 for (int i=0; i<NUMDAYS; i++) { 367 for (int i=0; i<NUMDAYS; i++) {
359 //events[i] = 0; 368 //events[i] = 0;
360 days[i] = startdate.addDays(i); 369 days[i] = startdate.addDays(i);
361 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 370 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
362 371
363 // if today is in the currently displayed month, hilight today 372 // if today is in the currently displayed month, hilight today
364 if (days[i].year() == QDate::currentDate().year() && 373 if (days[i].year() == QDate::currentDate().year() &&
365 days[i].month() == QDate::currentDate().month() && 374 days[i].month() == QDate::currentDate().month() &&
366 days[i].day() == QDate::currentDate().day()) { 375 days[i].day() == QDate::currentDate().day()) {
367 today = i; 376 today = i;
368 } 377 }
369 } 378 }
370 // qDebug(QString("Today is visible at %1.").arg(today)); 379 // qDebug(QString("Today is visible at %1.").arg(today));
371} 380}
372 381
373void KODayMatrix::updateView() 382void KODayMatrix::updateView()
374{ 383{
375 updateView(startdate); 384 updateView(startdate);
376} 385}
377void KODayMatrix::repaintViewTimed() 386void KODayMatrix::repaintViewTimed()
378{ 387{
379 mRedrawNeeded = true; 388 mRedrawNeeded = true;
380 // bDays.fill( false); 389 // bDays.fill( false);
381 //pDays.fill( false); 390 //pDays.fill( false);
382 //hDays.fill( false); 391 //hDays.fill( false);
383 //eDays.fill( false); 392 //eDays.fill( false);
384 mRepaintTimer->stop(); 393 mRepaintTimer->stop();
385 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday 394 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
386 int i; 395 int i;
387 for(i = 0; i < NUMDAYS; i++) { 396 for(i = 0; i < NUMDAYS; i++) {
388 if ( ( (i+startDay) % 7 == 0 ) ) { 397 if ( ( (i+startDay) % 7 == 0 ) ) {
389 pDays.setBit(i); 398 pDays.setBit(i);
390 } 399 }
391 } 400 }
392 repaint(false); 401 repaint(false);
393} 402}
394void KODayMatrix::computeEvent(Event *event, int i ) 403void KODayMatrix::computeEvent(Event *event, int i )
395{ 404{
396 QString holiStr = mHolidays[i]; 405 QString holiStr = mHolidays[i];
397 if ( event->isHoliday()) { 406 if ( event->isHoliday()) {
398 pDays.setBit(i); 407 pDays.setBit(i);
399 hDays.setBit(i); 408 hDays.setBit(i);
400 if ( !holiStr.isEmpty() ) 409 if ( !holiStr.isEmpty() )
401 holiStr += "\n"; 410 holiStr += "\n";
402 holiStr += event->summary(); 411 holiStr += event->summary();
403 if ( !event->location().isEmpty() ) 412 if ( !event->location().isEmpty() )
404 holiStr += " (" + event->location() + ")"; 413 holiStr += " (" + event->location() + ")";
405 mHolidays[i] =holiStr ; 414 mHolidays[i] =holiStr ;
406 eDays.setBit(i); 415 eDays.setBit(i);
407 } 416 }
408 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) { 417 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) {
409 if ( event->isBirthday()) { 418 if ( event->isBirthday()) {
410 pDays.setBit(i); 419 pDays.setBit(i);
411 if ( !holiStr.isEmpty() ) 420 if ( !holiStr.isEmpty() )
412 holiStr += "\n"; 421 holiStr += "\n";
413 holiStr += i18n("Birthday") + ": "+event->summary(); 422 holiStr += i18n("Birthday") + ": "+event->summary();
414 if ( !event->location().isEmpty() ) 423 if ( !event->location().isEmpty() )
415 holiStr += " (" + event->location() + ")"; 424 holiStr += " (" + event->location() + ")";
416 bDays.setBit(i); 425 bDays.setBit(i);
417 mHolidays[i] =holiStr ; 426 mHolidays[i] =holiStr ;
418 } 427 }
419 } 428 }
420 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) 429 if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW )
421 eDays.setBit(i); 430 eDays.setBit(i);
422} 431}
423void KODayMatrix::updateViewTimed() 432void KODayMatrix::updateViewTimed()
424{ 433{
425 mUpdateTimer->stop(); 434 mUpdateTimer->stop();
426 if ( !mCalendar ) { 435 if ( !mCalendar ) {
427 qDebug("NOT CAL "); 436 qDebug("NOT CAL ");
428 return; 437 return;
429 } 438 }
430#if 1 439#if 1
431 440
432 441
433 int i; 442 int i;
434 int timeSpan = NUMDAYS-1; 443 int timeSpan = NUMDAYS-1;
435 QPtrList<Event> events = mCalendar->events(); 444 QPtrList<Event> events = mCalendar->events();
436 Event *event; 445 Event *event;
437 QDateTime dt; 446 QDateTime dt;
438 bool ok; 447 bool ok;
439 bDays.fill( false); 448 bDays.fill( false);
440 pDays.fill( false); 449 pDays.fill( false);
441 hDays.fill( false); 450 hDays.fill( false);
442 eDays.fill( false); 451 eDays.fill( false);
443 mHolidays.clear(); 452 mHolidays.clear();
444 QDate mStartDate = days[0]; 453 QDate mStartDate = days[0];
445 QDate endDate = mStartDate.addDays( timeSpan ); 454 QDate endDate = mStartDate.addDays( timeSpan );
446 for( event = events.first(); event; event = events.next() ) { // for event 455 for( event = events.first(); event; event = events.next() ) { // for event
447 ushort recurType = event->recurrence()->doesRecur(); 456 ushort recurType = event->recurrence()->doesRecur();
448 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 457 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
449 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 458 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
450 continue; 459 continue;
451 } 460 }
452 if ( event->doesRecur() ) { 461 if ( event->doesRecur() ) {
453 bool last; 462 bool last;
454 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 463 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
455 QDateTime incidenceEnd; 464 QDateTime incidenceEnd;
456 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 465 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
457 bool invalid = false; 466 bool invalid = false;
458 while( true ) { 467 while( true ) {
459 if ( incidenceStart.isValid() ) { 468 if ( incidenceStart.isValid() ) {
460 incidenceEnd = incidenceStart.addDays( eventlen ); 469 incidenceEnd = incidenceStart.addDays( eventlen );
461 int st = incidenceStart.date().daysTo( endDate ); 470 int st = incidenceStart.date().daysTo( endDate );
462 if ( st >= 0 ) { // start before timeend 471 if ( st >= 0 ) { // start before timeend
463 int end = mStartDate.daysTo( incidenceEnd.date() ); 472 int end = mStartDate.daysTo( incidenceEnd.date() );
464 if ( end >= 0 ) { // end after timestart --- got one! 473 if ( end >= 0 ) { // end after timestart --- got one!
465 //normalize 474 //normalize
466 st = timeSpan - st; 475 st = timeSpan - st;
467 if ( st < 0 ) st = 0; 476 if ( st < 0 ) st = 0;
468 if ( end > timeSpan ) end = timeSpan; 477 if ( end > timeSpan ) end = timeSpan;
469 int iii; 478 int iii;
470 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 479 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
471 for ( iii = st;iii<= end;++iii) { 480 for ( iii = st;iii<= end;++iii) {
472 computeEvent( event, iii ); 481 computeEvent( event, iii );
473 } 482 }
474 } 483 }
475 } 484 }
476 } else { 485 } else {
477 if ( invalid ) 486 if ( invalid )
478 break; 487 break;
479 invalid = true; 488 invalid = true;
480 //qDebug("invalid %s", event->summary().latin1()); 489 //qDebug("invalid %s", event->summary().latin1());
481 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 490 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
482 } 491 }
483 if ( last ) 492 if ( last )
484 break; 493 break;
485 bool ok; 494 bool ok;
486 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 495 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
487 if ( ! ok ) 496 if ( ! ok )
488 break; 497 break;
489 if ( incidenceStart.date() > endDate ) 498 if ( incidenceStart.date() > endDate )
490 break; 499 break;
491 } 500 }
492 } else { // no recur 501 } else { // no recur
493 int st = event->dtStart().date().daysTo( endDate ); 502 int st = event->dtStart().date().daysTo( endDate );
494 if ( st >= 0 ) { // start before timeend 503 if ( st >= 0 ) { // start before timeend
495 int end = mStartDate.daysTo( event->dtEnd().date() ); 504 int end = mStartDate.daysTo( event->dtEnd().date() );
496 if ( end >= 0 ) { // end after timestart --- got one! 505 if ( end >= 0 ) { // end after timestart --- got one!
497 //normalize 506 //normalize
498 st = timeSpan - st; 507 st = timeSpan - st;
499 if ( st < 0 ) st = 0; 508 if ( st < 0 ) st = 0;
500 if ( end > timeSpan ) end = timeSpan; 509 if ( end > timeSpan ) end = timeSpan;
501 int iii; 510 int iii;
502 for ( iii = st;iii<= end;++iii) 511 for ( iii = st;iii<= end;++iii)
503 computeEvent( event, iii ); 512 computeEvent( event, iii );
504 } 513 }
505 } 514 }
506 } 515 }
507 } 516 }
508 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday 517 int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
509 for(i = 0; i < NUMDAYS; i++) { 518 for(i = 0; i < NUMDAYS; i++) {
510 if ( ( (i+startDay) % 7 == 0 ) ) { 519 if ( ( (i+startDay) % 7 == 0 ) ) {
511 pDays.setBit(i); 520 pDays.setBit(i);
512 } 521 }
513 } 522 }
514 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 523 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
515 bDays.fill( false); 524 bDays.fill( false);
516 // insert due todos 525 // insert due todos
517 QPtrList<Todo> todos = mCalendar->todos( ); 526 QPtrList<Todo> todos = mCalendar->todos( );
518 Todo *todo; 527 Todo *todo;
519 for(todo = todos.first(); todo; todo = todos.next()) { 528 for(todo = todos.first(); todo; todo = todos.next()) {
520 //insertTodo( todo ); 529 //insertTodo( todo );
521 if ( todo->hasDueDate() ) { 530 if ( todo->hasDueDate() ) {
522 int day = mStartDate.daysTo( todo->dtDue().date() ); 531 int day = mStartDate.daysTo( todo->dtDue().date() );
523 if ( day >= 0 && day < timeSpan + 1) { 532 if ( day >= 0 && day < timeSpan + 1) {
524 int i = day; 533 int i = day;
525 QString holiStr = mHolidays[i]; 534 QString holiStr = mHolidays[i];
526 pDays.setBit(i); 535 pDays.setBit(i);
527 if ( !holiStr.isEmpty() ) 536 if ( !holiStr.isEmpty() )
528 holiStr += "\n"; 537 holiStr += "\n";
529 holiStr += i18n("Todo") + ": "+todo->summary(); 538 holiStr += i18n("Todo") + ": "+todo->summary();
530 if ( !todo->location().isEmpty() ) 539 if ( !todo->location().isEmpty() )
531 holiStr += " (" + todo->location() + ")"; 540 holiStr += " (" + todo->location() + ")";
532 bDays.setBit(i); 541 bDays.setBit(i);
533 mHolidays[i] =holiStr ; 542 mHolidays[i] =holiStr ;
534 eDays.setBit(i); 543 eDays.setBit(i);
535 } 544 }
536 } 545 }
537 } 546 }
538 } 547 }
539 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 548 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
540 bDays.fill( false); 549 bDays.fill( false);
541 // insert due todos 550 // insert due todos
542 QPtrList<Journal> todos = mCalendar->journals( ); 551 QPtrList<Journal> todos = mCalendar->journals( );
543 Journal *todo; 552 Journal *todo;
544 for(todo = todos.first(); todo; todo = todos.next()) { 553 for(todo = todos.first(); todo; todo = todos.next()) {
545 int day = mStartDate.daysTo( todo->dtStart().date() ); 554 int day = mStartDate.daysTo( todo->dtStart().date() );
546 if ( day >= 0 && day < timeSpan + 1) { 555 if ( day >= 0 && day < timeSpan + 1) {
547 int i = day; 556 int i = day;
548 QString holiStr = mHolidays[i]; 557 QString holiStr = mHolidays[i];
549 pDays.setBit(i); 558 pDays.setBit(i);
550 if ( !holiStr.isEmpty() ) 559 if ( !holiStr.isEmpty() )
551 holiStr += "\n"; 560 holiStr += "\n";
552 holiStr += i18n("Journal"); 561 holiStr += i18n("Journal: ")+todo->summary().left(25);
562 if ( todo->summary().length() > 25 )
563 holiStr +="...";
553 bDays.setBit(i); 564 bDays.setBit(i);
554 mHolidays[i] =holiStr ; 565 mHolidays[i] =holiStr ;
555 eDays.setBit(i); 566 eDays.setBit(i);
556 567
557 } 568 }
558 } 569 }
559 } 570 }
560#else 571#else
561 //qDebug("KODayMatrix::updateViewTimed "); 572 //qDebug("KODayMatrix::updateViewTimed ");
562 for(int i = 0; i < NUMDAYS; i++) { 573 for(int i = 0; i < NUMDAYS; i++) {
563 // if events are set for the day then remember to draw it bold 574 // if events are set for the day then remember to draw it bold
564 QPtrList<Event> eventlist = mCalendar->events(days[i]); 575 QPtrList<Event> eventlist = mCalendar->events(days[i]);
565 Event *event; 576 Event *event;
566 int numEvents = eventlist.count(); 577 int numEvents = eventlist.count();
567 QString holiStr = ""; 578 QString holiStr = "";
568 bDays.clearBit(i); 579 bDays.clearBit(i);
569 hDays.clearBit(i); 580 hDays.clearBit(i);
570 eDays.clearBit(i); 581 eDays.clearBit(i);
571 for(event=eventlist.first();event != 0;event=eventlist.next()) { 582 for(event=eventlist.first();event != 0;event=eventlist.next()) {
572 ushort recurType = event->recurrence()->doesRecur(); 583 ushort recurType = event->recurrence()->doesRecur();
573 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 584 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
574 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 585 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
575 numEvents--; 586 numEvents--;
576 } 587 }
577 if ( event->isHoliday()) { 588 if ( event->isHoliday()) {
578 hDays.setBit(i); 589 hDays.setBit(i);
579 if ( !holiStr.isEmpty() ) 590 if ( !holiStr.isEmpty() )
580 holiStr += "\n"; 591 holiStr += "\n";
581 holiStr += event->summary(); 592 holiStr += event->summary();
582 if ( !event->location().isEmpty() ) 593 if ( !event->location().isEmpty() )
583 holiStr += " (" + event->location() + ")"; 594 holiStr += " (" + event->location() + ")";
584 } 595 }
585 if ( event->isBirthday()) { 596 if ( event->isBirthday()) {
586 if ( !holiStr.isEmpty() ) 597 if ( !holiStr.isEmpty() )
587 holiStr += "\n"; 598 holiStr += "\n";
588 holiStr += i18n("Birthday") + ": "+event->summary(); 599 holiStr += i18n("Birthday") + ": "+event->summary();
589 if ( !event->location().isEmpty() ) 600 if ( !event->location().isEmpty() )
590 holiStr += " (" + event->location() + ")"; 601 holiStr += " (" + event->location() + ")";
591 bDays.setBit(i); 602 bDays.setBit(i);
592 } 603 }
593 } 604 }
594 if ( numEvents ) 605 if ( numEvents )
595 eDays.setBit(i); 606 eDays.setBit(i);
596 //if it is a holy day then draw it red. Sundays are consider holidays, too 607 //if it is a holy day then draw it red. Sundays are consider holidays, too
597 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || 608 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
598 !holiStr.isEmpty()) { 609 !holiStr.isEmpty()) {
599 mHolidays[i] = holiStr; 610 mHolidays[i] = holiStr;
600 } else { 611 } else {
601 mHolidays[i] = QString::null; 612 mHolidays[i] = QString::null;
602 } 613 }
603 } 614 }
604#endif 615#endif
605 mRedrawNeeded = true; 616 mRedrawNeeded = true;
606 if ( ! mPendingUpdateBeforeRepaint ) 617 if ( ! mPendingUpdateBeforeRepaint )
607 repaint(false); 618 repaint(false);
608} 619}
609void KODayMatrix::updateView(QDate actdate) 620void KODayMatrix::updateView(QDate actdate)
610{ 621{
611 if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView ) 622 if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView )
612 mRedrawNeeded = true; 623 mRedrawNeeded = true;
613 mLastView = KOPrefs::instance()->mCurrentDisplayedView; 624 mLastView = KOPrefs::instance()->mCurrentDisplayedView;
614 if ( ! actdate.isValid() ) { 625 if ( ! actdate.isValid() ) {
615 //qDebug("date not valid "); 626 //qDebug("date not valid ");
616 return; 627 return;
617 } 628 }
618 mDayChanged = false; 629 mDayChanged = false;
619 //flag to indicate if the starting day of the matrix has changed by this call 630 //flag to indicate if the starting day of the matrix has changed by this call
620 //mDayChanged = false; 631 //mDayChanged = false;
621 // if a new startdate is to be set then apply Cornelius's calculation 632 // if a new startdate is to be set then apply Cornelius's calculation
622 // of the first day to be shown 633 // of the first day to be shown
623 if (actdate != startdate) { 634 if (actdate != startdate) {
624 // reset index of selection according to shift of starting date from startdate to actdate 635 // reset index of selection according to shift of starting date from startdate to actdate
625 if (mSelStart != NOSELECTION) { 636 if (mSelStart != NOSELECTION) {
626 int tmp = actdate.daysTo(startdate); 637 int tmp = actdate.daysTo(startdate);
627 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; 638 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
628 // shift selection if new one would be visible at least partly ! 639 // shift selection if new one would be visible at least partly !
629 640
630 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { 641 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
631 // nested if is required for next X display pushed from a different month - correction required 642 // nested if is required for next X display pushed from a different month - correction required
632 // otherwise, for month forward and backward, it must be avoided 643 // otherwise, for month forward and backward, it must be avoided
633 if( mSelStart > NUMDAYS || mSelStart < 0 ) 644 if( mSelStart > NUMDAYS || mSelStart < 0 )
634 mSelStart = mSelStart + tmp; 645 mSelStart = mSelStart + tmp;
635 if( mSelEnd > NUMDAYS || mSelEnd < 0 ) 646 if( mSelEnd > NUMDAYS || mSelEnd < 0 )
636 mSelEnd = mSelEnd + tmp; 647 mSelEnd = mSelEnd + tmp;
637 } 648 }
638 } 649 }
639 startdate = actdate; 650 startdate = actdate;
640 mDayChanged = true; 651 mDayChanged = true;
641 recalculateToday(); 652 recalculateToday();
642 mRedrawNeeded = true; 653 mRedrawNeeded = true;
643 } 654 }
644 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); 655 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() );
645 if ( !isVisible() ) { 656 if ( !isVisible() ) {
646 mPendingUpdateBeforeRepaint = true; 657 mPendingUpdateBeforeRepaint = true;
647 } else { 658 } else {
648#ifdef DESKTOP_VERSION 659#ifdef DESKTOP_VERSION
649 //mRepaintTimer->start( 100 ); 660 //mRepaintTimer->start( 100 );
650 //updateViewTimed(); 661 //updateViewTimed();
651 mUpdateTimer->start( 50 ); 662 mUpdateTimer->start( 50 );
652#else 663#else
653 mRepaintTimer->start( 350 ); 664 mRepaintTimer->start( 350 );
654 mUpdateTimer->start( 800 ); 665 mUpdateTimer->start( 800 );
655#endif 666#endif
656 } 667 }
657} 668}
658void KODayMatrix::updateEvents() 669void KODayMatrix::updateEvents()
659{ 670{
660 if ( !mCalendar ) return; 671 if ( !mCalendar ) return;
661 672
662 for( int i = 0; i < NUMDAYS; i++ ) { 673 for( int i = 0; i < NUMDAYS; i++ ) {
663 // if events are set for the day then remember to draw it bold 674 // if events are set for the day then remember to draw it bold
664 QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); 675 QPtrList<Event> eventlist = mCalendar->events( days[ i ] );
665 int numEvents = eventlist.count(); 676 int numEvents = eventlist.count();
666 Event *event; 677 Event *event;
667 for( event = eventlist.first(); event != 0;event=eventlist.next()) { 678 for( event = eventlist.first(); event != 0;event=eventlist.next()) {
668 ushort recurType = event->doesRecur(); 679 ushort recurType = event->doesRecur();
669 680
670 if ( ( recurType == Recurrence::rDaily && 681 if ( ( recurType == Recurrence::rDaily &&
671 !KOPrefs::instance()->mDailyRecur ) || 682 !KOPrefs::instance()->mDailyRecur ) ||
672 ( recurType == Recurrence::rWeekly && 683 ( recurType == Recurrence::rWeekly &&
673 !KOPrefs::instance()->mWeeklyRecur ) ) { 684 !KOPrefs::instance()->mWeeklyRecur ) ) {
674 numEvents--; 685 numEvents--;
675 } 686 }
676 } 687 }
677 if ( numEvents ) 688 if ( numEvents )
678 eDays.setBit(i); 689 eDays.setBit(i);
679 else 690 else
680 eDays.clearBit(i); 691 eDays.clearBit(i);
681 } 692 }
682} 693}
683 694
684const QDate& KODayMatrix::getDate(int offset) 695const QDate& KODayMatrix::getDate(int offset)
685{ 696{
686 if (offset < 0 || offset > NUMDAYS-1) { 697 if (offset < 0 || offset > NUMDAYS-1) {
687 qDebug("Wrong offset2 %d", offset); 698 qDebug("Wrong offset2 %d", offset);
688 return days[0]; 699 return days[0];
689 } 700 }
690 return days[offset]; 701 return days[offset];
691} 702}
692 703
693QString KODayMatrix::getHolidayLabel(int offset) 704QString KODayMatrix::getHolidayLabel(int offset)
694{ 705{
695 if (offset < 0 || offset > NUMDAYS-1) { 706 if (offset < 0 || offset > NUMDAYS-1) {
696 qDebug("Wrong offset1 %d", offset); 707 qDebug("Wrong offset1 %d", offset);
697 return QString(); 708 return QString();
698 } 709 }
699 return mHolidays[offset]; 710 return mHolidays[offset];
700} 711}
701 712
702int KODayMatrix::getDayIndexFrom(int x, int y) 713int KODayMatrix::getDayIndexFrom(int x, int y)
703{ 714{
704 int colModulo = (width()-2) % 7; 715 int colModulo = (width()-2) % 7;
705 int rowModulo = (height()-2) % 6; 716 int rowModulo = (height()-2) % 6;
706#if 0 717#if 0
707 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? 718 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ?
708 6 - x/daysize.width() : x/daysize.width()); 719 6 - x/daysize.width() : x/daysize.width());
709#endif 720#endif
710 int xVal = (x-colModulo/2-2)/daysize.width(); 721 int xVal = (x-colModulo/2-2)/daysize.width();
711 int yVal = (y-rowModulo/2-2)/daysize.height(); 722 int yVal = (y-rowModulo/2-2)/daysize.height();
712 723
713 724
714 return 7*(yVal) + xVal; 725 return 7*(yVal) + xVal;
715 726
716} 727}
717 728
718// ---------------------------------------------------------------------------- 729// ----------------------------------------------------------------------------
719// M O U S E E V E N T H A N D L I N G 730// M O U S E E V E N T H A N D L I N G
720// ---------------------------------------------------------------------------- 731// ----------------------------------------------------------------------------
721 732
722void KODayMatrix::mousePressEvent (QMouseEvent* e) 733void KODayMatrix::mousePressEvent (QMouseEvent* e)
723{ 734{
724 735
725 if ( e->button() == LeftButton ) 736 if ( e->button() == LeftButton )
726 mouseDown = true; 737 mouseDown = true;
727 mSelStart = getDayIndexFrom(e->x(), e->y()); 738 mSelStart = getDayIndexFrom(e->x(), e->y());
728 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; 739 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
729 mSelInit = mSelStart; 740 mSelInit = mSelStart;
730 mSelEnd = mSelStart; 741 mSelEnd = mSelStart;
731 mRedrawNeeded = true; 742 mRedrawNeeded = true;
732 repaint(false); 743 repaint(false);
733} 744}
734 745
735void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) 746void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
736{ 747{
737 mRedrawNeeded = true; 748 mRedrawNeeded = true;
738 if ( e->button() == LeftButton ) 749 if ( e->button() == LeftButton )
739 if ( ! mouseDown ) { 750 if ( ! mouseDown ) {
740 return; 751 return;
741 } 752 }
742 else 753 else
743 mouseDown = false; 754 mouseDown = false;
744 int tmp = getDayIndexFrom(e->x(), e->y()); 755 int tmp = getDayIndexFrom(e->x(), e->y());
745 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 756 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
746 757
747 if (mSelInit > tmp) { 758 if (mSelInit > tmp) {
748 mSelEnd = mSelInit; 759 mSelEnd = mSelInit;
749 if (tmp != mSelStart) { 760 if (tmp != mSelStart) {
750 mSelStart = tmp; 761 mSelStart = tmp;
751 repaint(false); 762 repaint(false);
752 } 763 }
753 } else { 764 } else {
754 mSelStart = mSelInit; 765 mSelStart = mSelInit;
755 766
756 //repaint only if selection has changed 767 //repaint only if selection has changed
757 if (tmp != mSelEnd) { 768 if (tmp != mSelEnd) {
758 mSelEnd = tmp; 769 mSelEnd = tmp;
759 repaint(false); 770 repaint(false);
760 } 771 }
761 } 772 }
762 773
763 DateList daylist; 774 DateList daylist;
764 if ( mSelStart < 0 ) 775 if ( mSelStart < 0 )
765 mSelStart = 0; 776 mSelStart = 0;
766 for (int i = mSelStart; i <= mSelEnd; i++) { 777 for (int i = mSelStart; i <= mSelEnd; i++) {
767 daylist.append(days[i]); 778 daylist.append(days[i]);
768 } 779 }
769 emit selected((const DateList)daylist); 780 emit selected((const DateList)daylist);
770 781
771} 782}
772 783
773void KODayMatrix::mouseMoveEvent (QMouseEvent* e) 784void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
774{ 785{
775 if ( ! mouseDown ) { 786 if ( ! mouseDown ) {
776 return; 787 return;
777 } 788 }
778 mRedrawNeeded = true; 789 mRedrawNeeded = true;
779 int tmp = getDayIndexFrom(e->x(), e->y()); 790 int tmp = getDayIndexFrom(e->x(), e->y());
780 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 791 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
781 792
782 if (mSelInit > tmp) { 793 if (mSelInit > tmp) {
783 mSelEnd = mSelInit; 794 mSelEnd = mSelInit;
784 if (tmp != mSelStart) { 795 if (tmp != mSelStart) {
785 mSelStart = tmp; 796 mSelStart = tmp;
786 repaint(false); 797 repaint(false);
787 } 798 }
788 } else { 799 } else {
789 mSelStart = mSelInit; 800 mSelStart = mSelInit;
790 801
791 //repaint only if selection has changed 802 //repaint only if selection has changed
792 if (tmp != mSelEnd) { 803 if (tmp != mSelEnd) {
793 mSelEnd = tmp; 804 mSelEnd = tmp;
794 repaint(false); 805 repaint(false);
795 } 806 }
796 } 807 }
797} 808}
798 809
799// ---------------------------------------------------------------------------- 810// ----------------------------------------------------------------------------
800// D R A G ' N D R O P H A N D L I N G 811// D R A G ' N D R O P H A N D L I N G
801// ---------------------------------------------------------------------------- 812// ----------------------------------------------------------------------------
802 813
803void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) 814void KODayMatrix::dragEnterEvent(QDragEnterEvent *e)
804{ 815{
805#ifndef KORG_NODND 816#ifndef KORG_NODND
806 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 817 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
807 e->ignore(); 818 e->ignore();
808 return; 819 return;
809 } 820 }
810 821
811 // some visual feedback 822 // some visual feedback
812// oldPalette = palette(); 823// oldPalette = palette();
813// setPalette(my_HilitePalette); 824// setPalette(my_HilitePalette);
814// update(); 825// update();
815#endif 826#endif
816} 827}
817 828
818void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) 829void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
819{ 830{
820#ifndef KORG_NODND 831#ifndef KORG_NODND
821 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 832 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
822 e->ignore(); 833 e->ignore();
823 return; 834 return;
824 } 835 }
825 836
826 e->accept(); 837 e->accept();
827#endif 838#endif
828} 839}
829 840
830void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 841void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
831{ 842{
832#ifndef KORG_NODND 843#ifndef KORG_NODND
833// setPalette(oldPalette); 844// setPalette(oldPalette);
834// update(); 845// update();
835#endif 846#endif
836} 847}
837 848
838void KODayMatrix::dropEvent(QDropEvent *e) 849void KODayMatrix::dropEvent(QDropEvent *e)
839{ 850{
840#ifndef KORG_NODND 851#ifndef KORG_NODND
841// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 852// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
842 853
843 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 854 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
844 e->ignore(); 855 e->ignore();
845 return; 856 return;
846 } 857 }
847 858
848 DndFactory factory( mCalendar ); 859 DndFactory factory( mCalendar );
849 Event *event = factory.createDrop(e); 860 Event *event = factory.createDrop(e);
850 861
851 if (event) { 862 if (event) {
852 e->acceptAction(); 863 e->acceptAction();
853 864
854 Event *existingEvent = mCalendar->event(event->uid()); 865 Event *existingEvent = mCalendar->event(event->uid());
855 866
856 if(existingEvent) { 867 if(existingEvent) {
857 // uniquify event 868 // uniquify event
858 event->recreate(); 869 event->recreate();
859/* 870/*
860 KMessageBox::sorry(this, 871 KMessageBox::sorry(this,
861 i18n("Event already exists in this calendar."), 872 i18n("Event already exists in this calendar."),
862 i18n("Drop Event")); 873 i18n("Drop Event"));
863 delete event; 874 delete event;
864 return; 875 return;
865*/ 876*/
866 } 877 }
867// kdDebug() << "Drop new Event" << endl; 878// kdDebug() << "Drop new Event" << endl;
868 // Adjust date 879 // Adjust date
869 QDateTime start = event->dtStart(); 880 QDateTime start = event->dtStart();
870 QDateTime end = event->dtEnd(); 881 QDateTime end = event->dtEnd();
871 int duration = start.daysTo(end); 882 int duration = start.daysTo(end);
872 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 883 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
873 884
874 start.setDate(days[idx]); 885 start.setDate(days[idx]);
875 end.setDate(days[idx].addDays(duration)); 886 end.setDate(days[idx].addDays(duration));
876 887
877 event->setDtStart(start); 888 event->setDtStart(start);
878 event->setDtEnd(end); 889 event->setDtEnd(end);
879 mCalendar->addEvent(event); 890 mCalendar->addEvent(event);
880 891
881 emit eventDropped(event); 892 emit eventDropped(event);
882 } else { 893 } else {
883// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 894// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
884 e->ignore(); 895 e->ignore();
885 } 896 }
886#endif 897#endif
887} 898}
888 899
889// ---------------------------------------------------------------------------- 900// ----------------------------------------------------------------------------
890// P A I N T E V E N T H A N D L I N G 901// P A I N T E V E N T H A N D L I N G
891// ---------------------------------------------------------------------------- 902// ----------------------------------------------------------------------------
892 903
893void KODayMatrix::paintEvent(QPaintEvent * pevent) 904void KODayMatrix::paintEvent(QPaintEvent * pevent)
894{ 905{
895 906
896 if ( width() <= 0 || height() <= 0 ) 907 if ( width() <= 0 || height() <= 0 )
897 return; 908 return;
898 if ( mPendingUpdateBeforeRepaint ) { 909 if ( mPendingUpdateBeforeRepaint ) {
899 updateViewTimed(); 910 updateViewTimed();
900 mPendingUpdateBeforeRepaint = false; 911 mPendingUpdateBeforeRepaint = false;
901 } 912 }
902#if 0 913#if 0
903 if ( myPix.width() != width() || myPix.height()!=height() ) { 914 if ( myPix.width() != width() || myPix.height()!=height() ) {
904 myPix.resize(size() ); 915 myPix.resize(size() );
905 mRedrawNeeded = true; 916 mRedrawNeeded = true;
906 } 917 }
907#endif 918#endif
908 if ( oldW != width() || oldH !=height() ) 919 if ( oldW != width() || oldH !=height() )
909 mRedrawNeeded = true; 920 mRedrawNeeded = true;
910 921
911 oldH = height() ; 922 oldH = height() ;
912 oldW = width(); 923 oldW = width();
913 if ( myPix.width() < width() || myPix.height() < height() ) { 924 if ( myPix.width() < width() || myPix.height() < height() ) {
914 myPix.resize(size() ); 925 myPix.resize(size() );
915 mRedrawNeeded = true; 926 mRedrawNeeded = true;
916 927
917 } 928 }
918 929
919 if ( mRedrawNeeded ) { 930 if ( mRedrawNeeded ) {
920 //qDebug("REDRAW "); 931 //qDebug("REDRAW ");
921 QPainter p(&myPix); 932 QPainter p(&myPix);
922 p.setFont(font()); 933 p.setFont(font());
923 934
924 935
925 int dheight = daysize.height(); 936 int dheight = daysize.height();
926 int dwidth = daysize.width(); 937 int dwidth = daysize.width();
927 int row,col; 938 int row,col;
928 int selw, selh; 939 int selw, selh;
929 int xyOff = frameWidth(); 940 int xyOff = frameWidth();
930 int colModulo = (width()-2) % 7; 941 int colModulo = (width()-2) % 7;
931 int rowModulo = (height()-2) % 6; 942 int rowModulo = (height()-2) % 6;
932 //qDebug("col %d row %d ",colModulo,rowModulo ); 943 //qDebug("col %d row %d ",colModulo,rowModulo );
933 944
934 bool isRTL = KOGlobals::self()->reverseLayout(); 945 bool isRTL = KOGlobals::self()->reverseLayout();
935 946
936 // draw background and topleft frame 947 // draw background and topleft frame
937 p.fillRect(0,0,width(),height(), mDefaultBackColor); 948 p.fillRect(0,0,width(),height(), mDefaultBackColor);
938 //p.setPen(mDefaultTextColor); 949 //p.setPen(mDefaultTextColor);
939 //p.drawRect(0, 0, width(), height()); 950 //p.drawRect(0, 0, width(), height());
940 int mSelStartT = mSelStart; 951 int mSelStartT = mSelStart;
941 int mSelEndT = mSelEnd; 952 int mSelEndT = mSelEnd;
942 if ( mSelEndT >= NUMDAYS ) 953 if ( mSelEndT >= NUMDAYS )
943 mSelEndT = NUMDAYS-1; 954 mSelEndT = NUMDAYS-1;
944 // draw selected days with highlighted background color 955 // draw selected days with highlighted background color
945 if (mSelStart != NOSELECTION) { 956 if (mSelStart != NOSELECTION) {
946 bool skip = false; 957 bool skip = false;
947 if ( ! mouseDown ) { 958 if ( ! mouseDown ) {
948 int mo = days[20].month(); 959 int mo = days[20].month();
949 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 960 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
950 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 961 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
951 int startMo = days[mSelStartT].month(); 962 int startMo = days[mSelStartT].month();
952 int endMo = days[mSelEndT].month(); 963 int endMo = days[mSelEndT].month();
953 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 964 if ( startMo == 12 && mo == 1 && endMo <= 2 )
954 startMo = 1; 965 startMo = 1;
955 if ( endMo == 1 && mo == 12 ) 966 if ( endMo == 1 && mo == 12 )
956 endMo = 12; 967 endMo = 12;
957 if ( mo == 12 && startMo == 1 ) 968 if ( mo == 12 && startMo == 1 )
958 startMo = 13; 969 startMo = 13;
959 if ( (startMo > mo || endMo < mo) ) { 970 if ( (startMo > mo || endMo < mo) ) {
960 skip = true; 971 skip = true;
961 } else { 972 } else {
962 if ( days[mSelStartT].month() != mo ) { 973 if ( days[mSelStartT].month() != mo ) {
963 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 974 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
964 mSelStartT += add +1; 975 mSelStartT += add +1;
965 } 976 }
966 if ( days[mSelEndT].month() != mo ) { 977 if ( days[mSelEndT].month() != mo ) {
967 int sub = days[mSelEndT].day(); 978 int sub = days[mSelEndT].day();
968 mSelEndT -= sub ; 979 mSelEndT -= sub ;
969 } 980 }
970 } 981 }
971 } 982 }
972 //qDebug("SKIP %d ", skip); 983 //qDebug("SKIP %d ", skip);
973 if ( ! skip ) { 984 if ( ! skip ) {
974 row = mSelStartT/7; 985 row = mSelStartT/7;
975 col = mSelStartT -row*7; 986 col = mSelStartT -row*7;
976 QColor selcol = KOPrefs::instance()->mHighlightColor; 987 QColor selcol = KOPrefs::instance()->mHighlightColor;
977 int addCol = 0; 988 int addCol = 0;
978 int addRow = 0; 989 int addRow = 0;
979 int addRow2 = 0; 990 int addRow2 = 0;
980 int addCol2 = 0; 991 int addCol2 = 0;
981 if (row == mSelEndT/7) { 992 if (row == mSelEndT/7) {
982 if ( rowModulo ) { 993 if ( rowModulo ) {
983 if ( row >= 6 - rowModulo ) 994 if ( row >= 6 - rowModulo )
984 addRow = row - 5 + rowModulo; 995 addRow = row - 5 + rowModulo;
985 } 996 }
986 if ( colModulo ) { 997 if ( colModulo ) {
987 int colt1 = mSelEndT%7; 998 int colt1 = mSelEndT%7;
988 //qDebug("colt1 %d ", colt1 ); 999 //qDebug("colt1 %d ", colt1 );
989 if ( colt1 >= 7 - colModulo ) 1000 if ( colt1 >= 7 - colModulo )
990 addCol = colt1 - 7 + colModulo+1; 1001 addCol = colt1 - 7 + colModulo+1;
991 int colt = mSelStartT%7; 1002 int colt = mSelStartT%7;
992 if ( colt >= 7 - colModulo ) 1003 if ( colt >= 7 - colModulo )
993 addCol2 = colt - 7 + colModulo; 1004 addCol2 = colt - 7 + colModulo;
994 addCol -= addCol2; 1005 addCol -= addCol2;
995 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 1006 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
996 } 1007 }
997 // Single row selection 1008 // Single row selection
998 //if ( row == 0) 1009 //if ( row == 0)
999 // addRow = 1; 1010 // addRow = 1;
1000 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 1011 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
1001 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 1012 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
1002 } else { 1013 } else {
1003 // draw first row to the right 1014 // draw first row to the right
1004 if ( colModulo ) { 1015 if ( colModulo ) {
1005 if ( col >= 7 - colModulo ) 1016 if ( col >= 7 - colModulo )
1006 addCol2 = col - 7 + colModulo; 1017 addCol2 = col - 7 + colModulo;
1007 } 1018 }
1008 if ( rowModulo ) { 1019 if ( rowModulo ) {
1009 if ( row >= 6 - rowModulo ) 1020 if ( row >= 6 - rowModulo )
1010 addRow = row - 5 + rowModulo; 1021 addRow = row - 5 + rowModulo;
1011 } 1022 }
1012 //if ( row == 0) 1023 //if ( row == 0)
1013 // addRow = 1; 1024 // addRow = 1;
1014 int drawWid = width()-(col*dwidth+1+addCol2)-1; 1025 int drawWid = width()-(col*dwidth+1+addCol2)-1;
1015 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, 1026 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
1016 dheight+1, selcol); 1027 dheight+1, selcol);
1017 // draw full block till last line 1028 // draw full block till last line
1018 selh = mSelEndT/7-row; 1029 selh = mSelEndT/7-row;
1019 addRow = 0; 1030 addRow = 0;
1020 if ( rowModulo ) { 1031 if ( rowModulo ) {
1021 if ( mSelEndT/7 >= 6 - rowModulo ) 1032 if ( mSelEndT/7 >= 6 - rowModulo )
1022 addRow = mSelEndT/7 - 5 + rowModulo; 1033 addRow = mSelEndT/7 - 5 + rowModulo;
1023 } 1034 }
1024 //qDebug("%d %d %d ",selh, row, addRow ); 1035 //qDebug("%d %d %d ",selh, row, addRow );
1025 int addrow2 = addRow-selh+1; 1036 int addrow2 = addRow-selh+1;
1026 if ( addrow2 < 0 ) 1037 if ( addrow2 < 0 )
1027 addrow2 = 0; 1038 addrow2 = 0;
1028 if (selh > 1) { 1039 if (selh > 1) {
1029 p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); 1040 p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
1030 } 1041 }
1031 // draw last block from left to mSelEndT 1042 // draw last block from left to mSelEndT
1032 selw = mSelEndT-7*(mSelEndT/7)+1; 1043 selw = mSelEndT-7*(mSelEndT/7)+1;
1033 //qDebug("esl %d ",selw ); 1044 //qDebug("esl %d ",selw );
1034 int add = 0; 1045 int add = 0;
1035 if ( colModulo ) { 1046 if ( colModulo ) {
1036 add = 7 - colModulo; 1047 add = 7 - colModulo;
1037 if ( selw > add ) 1048 if ( selw > add )
1038 add = selw - add; 1049 add = selw - add;
1039 else 1050 else
1040 add = 0; 1051 add = 0;
1041 } 1052 }
1042 //qDebug("add %d ", add); 1053 //qDebug("add %d ", add);
1043 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, 1054 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow,
1044 selw*dwidth+add, dheight+1, selcol); 1055 selw*dwidth+add, dheight+1, selcol);
1045 } 1056 }
1046 } 1057 }
1047 } 1058 }
1048 1059
1049 // iterate over all days in the matrix and draw the day label in appropriate colors 1060 // iterate over all days in the matrix and draw the day label in appropriate colors
1050 QColor actcol = mDefaultTextColorShaded; 1061 QColor actcol = mDefaultTextColorShaded;
1051 p.setPen(actcol); 1062 p.setPen(actcol);
1052 QPen tmppen; 1063 QPen tmppen;
1053 for(int i = 0; i < NUMDAYS; i++) { 1064 for(int i = 0; i < NUMDAYS; i++) {
1054 row = i/7; 1065 row = i/7;
1055 col = isRTL ? 6-(i-row*7) : i-row*7; 1066 col = isRTL ? 6-(i-row*7) : i-row*7;
1056 1067
1057 // if it is the first day of a month switch color from normal to shaded and vice versa 1068 // if it is the first day of a month switch color from normal to shaded and vice versa
1058 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { 1069 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
1059 if (actcol == mDefaultTextColorShaded) { 1070 if (actcol == mDefaultTextColorShaded) {
1060 actcol = mDefaultTextColor; 1071 actcol = mDefaultTextColor;
1061 } else { 1072 } else {
1062 actcol = mDefaultTextColorShaded; 1073 actcol = mDefaultTextColorShaded;
1063 } 1074 }
1064 p.setPen(actcol); 1075 p.setPen(actcol);
1065 } 1076 }
1066 if (actcol == mDefaultTextColorShaded) { 1077 if (actcol == mDefaultTextColorShaded) {
1067 if ( ! mouseDown ) { 1078 if ( ! mouseDown ) {
1068 continue; 1079 continue;
1069 } 1080 }
1070 } 1081 }
1071 //Reset pen color after selected days block 1082 //Reset pen color after selected days block
1072 if (i == mSelEndT+1) { 1083 if (i == mSelEndT+1) {
1073 p.setPen(actcol); 1084 p.setPen(actcol);
1074 } 1085 }
1075 1086
1076 // if today then draw rectangle around day 1087 // if today then draw rectangle around day
1077 if (today == i) { 1088 if (today == i) {
1078 tmppen = p.pen(); 1089 tmppen = p.pen();
1079 QPen mTodayPen(p.pen()); 1090 QPen mTodayPen(p.pen());
1080 if ( daysize.width() < 20 ) 1091 if ( daysize.width() < 20 )
1081 mTodayPen.setWidth(1); 1092 mTodayPen.setWidth(1);
1082 else 1093 else
1083 mTodayPen.setWidth(mTodayMarginWidth); 1094 mTodayPen.setWidth(mTodayMarginWidth);
1084 //draw red rectangle for holidays 1095 //draw red rectangle for holidays
1085 if (pDays.testBit(i)) { 1096 if (pDays.testBit(i)) {
1086 if (actcol == mDefaultTextColor) { 1097 if (actcol == mDefaultTextColor) {
1087 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); 1098 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
1088 } else { 1099 } else {
1089 mTodayPen.setColor(mHolidayColorShaded); 1100 mTodayPen.setColor(mHolidayColorShaded);
1090 } 1101 }
1091 } 1102 }
1092 //draw gray rectangle for today if in selection 1103 //draw gray rectangle for today if in selection
1093 if (i >= mSelStartT && i <= mSelEndT) { 1104 if (i >= mSelStartT && i <= mSelEndT) {
1094 QColor grey("grey"); 1105 QColor grey("grey");
1095 mTodayPen.setColor(grey); 1106 mTodayPen.setColor(grey);
1096 } 1107 }
1097 p.setPen(mTodayPen); 1108 p.setPen(mTodayPen);
1098 1109
1099 1110
1100 int addCol = 0; 1111 int addCol = 0;
1101 int addRow = 0; 1112 int addRow = 0;
1102 if (rowModulo) { 1113 if (rowModulo) {
1103 if ( row >= 6 - rowModulo ) 1114 if ( row >= 6 - rowModulo )
1104 addRow = row - 5 + rowModulo; 1115 addRow = row - 5 + rowModulo;
1105 } 1116 }
1106 if ( colModulo ) { 1117 if ( colModulo ) {
1107 if ( col >= 7 - colModulo ) 1118 if ( col >= 7 - colModulo )
1108 addCol = col - 6 + colModulo-1; 1119 addCol = col - 6 + colModulo-1;
1109 } 1120 }
1110 1121
1111 addCol += 1; 1122 addCol += 1;
1112 if ( row == 0 ) 1123 if ( row == 0 )
1113 addRow = 1; 1124 addRow = 1;
1114 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1); 1125 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1);
1115 p.setPen(tmppen); 1126 p.setPen(tmppen);
1116 } 1127 }
1117 1128
1118 // if any events are on that day then draw it using a bold font 1129 // if any events are on that day then draw it using a bold font
1119 if ( eDays.testBit(i) ) { 1130 if ( eDays.testBit(i) ) {
1120 QFont myFont = font(); 1131 QFont myFont = font();
1121 myFont.setBold(true); 1132 myFont.setBold(true);
1122 p.setFont(myFont); 1133 p.setFont(myFont);
1123 } 1134 }
1124 1135
1125 // if it is a holiday then use the default holiday color 1136 // if it is a holiday then use the default holiday color
1126 if ( pDays.testBit(i)) { 1137 if ( pDays.testBit(i)) {
1127 if ( bDays.testBit(i) ) { 1138 if ( bDays.testBit(i) ) {
1128 if ( hDays.testBit(i) ) 1139 if ( hDays.testBit(i) )
1129 p.setPen(QColor(0,200,0)); 1140 p.setPen(QColor(0,200,0));
1130 else 1141 else
1131 p.setPen(QColor(Qt::blue)); 1142 p.setPen(QColor(Qt::blue));
1132 } else { 1143 } else {
1133 if (actcol == mDefaultTextColor ) { 1144 if (actcol == mDefaultTextColor ) {
1134 p.setPen(KOPrefs::instance()->mHolidayColor); 1145 p.setPen(KOPrefs::instance()->mHolidayColor);
1135 } else { 1146 } else {
1136 p.setPen(mHolidayColorShaded); 1147 p.setPen(mHolidayColorShaded);
1137 } 1148 }
1138 } 1149 }
1139 } 1150 }
1140 1151
1141 // draw selected days with special color 1152 // draw selected days with special color
1142 // DO NOT specially highlight holidays in selection ! 1153 // DO NOT specially highlight holidays in selection !
1143 if (i >= mSelStartT && i <= mSelEndT) { 1154 if (i >= mSelStartT && i <= mSelEndT) {
1144 ;//p.setPen(mSelectedDaysColor); 1155 ;//p.setPen(mSelectedDaysColor);
1145 } 1156 }
1146 1157
1147 int addCol = 0; 1158 int addCol = 0;
1148 int addRow = 0; 1159 int addRow = 0;
1149 if ( colModulo ) { 1160 if ( colModulo ) {
1150 if ( col >= 7 - colModulo ) 1161 if ( col >= 7 - colModulo )
1151 addCol = col - 7 + colModulo; 1162 addCol = col - 7 + colModulo;
1152 } 1163 }
1153 if ( rowModulo ) { 1164 if ( rowModulo ) {
1154 if ( row >= 6 - rowModulo ) 1165 if ( row >= 6 - rowModulo )
1155 addRow = row - 5 + rowModulo; 1166 addRow = row - 5 + rowModulo;
1156 } 1167 }
1157 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); 1168 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
1158 ++addCol;//++addCol; 1169 ++addCol;//++addCol;
1159 if ( row == 0) 1170 if ( row == 0)
1160 addRow = 1; 1171 addRow = 1;
1161 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, 1172 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
1162 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 1173 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
1163 1174
1164 // reset color to actual color 1175 // reset color to actual color
1165 if (pDays.testBit(i)) { 1176 if (pDays.testBit(i)) {
1166 p.setPen(actcol); 1177 p.setPen(actcol);
1167 } 1178 }
1168 // reset bold font to plain font 1179 // reset bold font to plain font
1169 if ( eDays.testBit(i)) { 1180 if ( eDays.testBit(i)) {
1170 QFont myFont = font(); 1181 QFont myFont = font();
1171 myFont.setBold(false); 1182 myFont.setBold(false);
1172 p.setFont(myFont); 1183 p.setFont(myFont);
1173 } 1184 }
1174 } 1185 }
1175 p.setPen(mDefaultTextColor); 1186 p.setPen(mDefaultTextColor);
1176 p.drawRect(0, 0, width(), height()); 1187 p.drawRect(0, 0, width(), height());
1177 } else { 1188 } else {
1178 //qDebug("NO redraw "); 1189 //qDebug("NO redraw ");
1179 } 1190 }
1180 1191
1181 bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP); 1192 bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP);
1182 mRedrawNeeded = false; 1193 mRedrawNeeded = false;
1183} 1194}
1184 1195
1185// ---------------------------------------------------------------------------- 1196// ----------------------------------------------------------------------------
1186// R E SI Z E E V E N T H A N D L I N G 1197// R E SI Z E E V E N T H A N D L I N G
1187// ---------------------------------------------------------------------------- 1198// ----------------------------------------------------------------------------
1188 1199
1189void KODayMatrix::resizeEvent(QResizeEvent *) 1200void KODayMatrix::resizeEvent(QResizeEvent *)
1190{ 1201{
1191 QRect sz = frameRect(); 1202 QRect sz = frameRect();
1192 daysize.setHeight(sz.height()*7 / NUMDAYS); 1203 daysize.setHeight(sz.height()*7 / NUMDAYS);
1193 daysize.setWidth(sz.width() / 7); 1204 daysize.setWidth(sz.width() / 7);
1194} 1205}
1195 1206
1196QSize KODayMatrix::sizeHint() const 1207QSize KODayMatrix::sizeHint() const
1197{ 1208{
1198 1209
1199 QFontMetrics fm ( font() ); 1210 QFontMetrics fm ( font() );
1200 int wid = fm.width( "30") *7+3; 1211 int wid = fm.width( "30") *7+3;
1201 int hei = fm.height() * 6+3; 1212 int hei = fm.height() * 6+3;
1202 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); 1213 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei);
1203 return QSize ( wid, hei ); 1214 return QSize ( wid, hei );
1204 1215
1205} 1216}
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 6315827..dcbb99f 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -1,800 +1,803 @@
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 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { 102 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) {
103 p.scale( scale, scale ); 103 p.scale( scale, scale );
104 } 104 }
105 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); 105 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () );
106 p.end(); 106 p.end();
107#endif 107#endif
108 108
109} 109}
110void KOEventViewer::setSource(const QString& n) 110void KOEventViewer::setSource(const QString& n)
111{ 111{
112 112
113 if ( n.left(3) == "uid" ) 113 if ( n.left(3) == "uid" )
114#ifdef DESKTOP_VERSION 114#ifdef DESKTOP_VERSION
115 { 115 {
116 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 116 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
117 KABC::AddressBook::Iterator it; 117 KABC::AddressBook::Iterator it;
118 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 118 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
119 // LR I do not understand, why the uid string is different on zaurus and desktop 119 // LR I do not understand, why the uid string is different on zaurus and desktop
120 QString uid = "uid://"+(*it).uid(); 120 QString uid = "uid://"+(*it).uid();
121 121
122 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); 122 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
123 if (n == uid ) { 123 if (n == uid ) {
124 //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); 124 //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
125 QDialog dia( this,"dia123", true ); 125 QDialog dia( this,"dia123", true );
126 dia.setCaption( i18n("Details of attendee") ); 126 dia.setCaption( i18n("Details of attendee") );
127 QVBoxLayout lay ( &dia ); 127 QVBoxLayout lay ( &dia );
128 KABC::AddresseeView av ( &dia ); 128 KABC::AddresseeView av ( &dia );
129 av.setAddressee( (*it) ); 129 av.setAddressee( (*it) );
130 lay.addWidget( &av ); 130 lay.addWidget( &av );
131 if ( QApplication::desktop()->width() < 480 ) 131 if ( QApplication::desktop()->width() < 480 )
132 dia.resize( 220, 240); 132 dia.resize( 220, 240);
133 else { 133 else {
134 dia.resize( 400,400); 134 dia.resize( 400,400);
135 } 135 }
136 dia.exec(); 136 dia.exec();
137 break; 137 break;
138 } 138 }
139 } 139 }
140 return; 140 return;
141 } 141 }
142#else 142#else
143 { 143 {
144 if ( "uid:organizer" == n ) { 144 if ( "uid:organizer" == n ) {
145 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 145 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
146 return; 146 return;
147 } 147 }
148 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 148 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
149 if (attendees.count()) { 149 if (attendees.count()) {
150 Attendee *a; 150 Attendee *a;
151 for(a=attendees.first();a;a=attendees.next()) { 151 for(a=attendees.first();a;a=attendees.next()) {
152 if ( "uid:"+a->uid() == n ) { 152 if ( "uid:"+a->uid() == n ) {
153 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 153 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
154 return; 154 return;
155 } 155 }
156 } 156 }
157 } 157 }
158 return; 158 return;
159 } 159 }
160 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 160 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
161 // the result should now arrive through method insertAttendees 161 // the result should now arrive through method insertAttendees
162 //QString uid = "uid:"+(*it).uid(); 162 //QString uid = "uid:"+(*it).uid();
163#endif 163#endif
164 if ( n.left(6) == "mailto" ) { 164 if ( n.left(6) == "mailto" ) {
165 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 165 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
166#ifndef DESKTOP_VERSION 166#ifndef DESKTOP_VERSION
167 if ( n.mid(7,3) == "ALL" ) { 167 if ( n.mid(7,3) == "ALL" ) {
168 mailToAttendees( true ); 168 mailToAttendees( true );
169 } else if ( n.mid(7,4) == "RSVP" ) { 169 } else if ( n.mid(7,4) == "RSVP" ) {
170 mailToAttendees( false ); 170 mailToAttendees( false );
171 } else { 171 } else {
172 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 172 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
173 e << n.mid(7); 173 e << n.mid(7);
174 } 174 }
175#endif 175#endif
176 176
177 } 177 }
178 178
179 179
180#ifndef KORG_NODCOP 180#ifndef KORG_NODCOP
181 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 181 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
182 QString tmpStr; 182 QString tmpStr;
183 if (n.startsWith("mailto:")) { 183 if (n.startsWith("mailto:")) {
184 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 184 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
185 //emit showIncidence(n); 185 //emit showIncidence(n);
186 return; 186 return;
187 } else if (n.startsWith("uid:")) { 187 } else if (n.startsWith("uid:")) {
188 DCOPClient *client = KApplication::kApplication()->dcopClient(); 188 DCOPClient *client = KApplication::kApplication()->dcopClient();
189 const QByteArray noParamData; 189 const QByteArray noParamData;
190 const QByteArray paramData; 190 const QByteArray paramData;
191 QByteArray replyData; 191 QByteArray replyData;
192 QCString replyTypeStr; 192 QCString replyTypeStr;
193#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 193#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
194 bool foundAbbrowser = PING_ABBROWSER; 194 bool foundAbbrowser = PING_ABBROWSER;
195 195
196 if (foundAbbrowser) { 196 if (foundAbbrowser) {
197 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 197 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
198 //client->send("kaddressbook","KAddressBookIface", 198 //client->send("kaddressbook","KAddressBookIface",
199 QDataStream arg(paramData, IO_WriteOnly); 199 QDataStream arg(paramData, IO_WriteOnly);
200 arg << n.mid(6); 200 arg << n.mid(6);
201 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 201 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
202 return; 202 return;
203 } else { 203 } else {
204 /* 204 /*
205 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 205 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
206 We start it without its main interface 206 We start it without its main interface
207 */ 207 */
208 KIconLoader* iconLoader = new KIconLoader(); 208 KIconLoader* iconLoader = new KIconLoader();
209 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 209 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
210 ActionManager::setStartedKAddressBook(true); 210 ActionManager::setStartedKAddressBook(true);
211 tmpStr = "kaddressbook --editor-only --uid "; 211 tmpStr = "kaddressbook --editor-only --uid ";
212 tmpStr += KProcess::quote(n.mid(6)); 212 tmpStr += KProcess::quote(n.mid(6));
213 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 213 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
214 return; 214 return;
215 } 215 }
216 } else { 216 } else {
217 //QTextBrowser::setSource(n); 217 //QTextBrowser::setSource(n);
218 } 218 }
219#endif 219#endif
220} 220}
221void KOEventViewer::mailToAttendees( bool all ) 221void KOEventViewer::mailToAttendees( bool all )
222{ 222{
223 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 223 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
224 if (attendees.count() == 0) return; 224 if (attendees.count() == 0) return;
225 QStringList nameList; 225 QStringList nameList;
226 QStringList emailList; 226 QStringList emailList;
227 QStringList uidList; 227 QStringList uidList;
228 Attendee* a; 228 Attendee* a;
229 for(a=attendees.first();a;a=attendees.next()) { 229 for(a=attendees.first();a;a=attendees.next()) {
230 if ( !all && !a->RSVP() ) continue; 230 if ( !all && !a->RSVP() ) continue;
231 if (!a->email().isEmpty()) { 231 if (!a->email().isEmpty()) {
232 nameList.append (a->name() ); 232 nameList.append (a->name() );
233 emailList.append (a->email() ); 233 emailList.append (a->email() );
234 uidList.append (a->uid() ); 234 uidList.append (a->uid() );
235 } 235 }
236 } 236 }
237 QString uid = "ComposeMailUIpick2"+mMailSubject; 237 QString uid = "ComposeMailUIpick2"+mMailSubject;
238#ifndef DESKTOP_VERSION 238#ifndef DESKTOP_VERSION
239 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 239 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
240#endif 240#endif
241 241
242} 242}
243void KOEventViewer::addTag(const QString & tag,const QString & text) 243void KOEventViewer::addTag(const QString & tag,const QString & text)
244{ 244{
245 int number=text.contains("\n"); 245 int number=text.contains("\n");
246 QString str = "<" + tag + ">"; 246 QString str = "<" + tag + ">";
247 QString tmpText=text; 247 QString tmpText=text;
248 QString tmpStr=str; 248 QString tmpStr=str;
249 if(number !=-1) 249 if(number !=-1)
250 { 250 {
251 if (number > 0) { 251 if (number > 0) {
252 int pos=0; 252 int pos=0;
253 QString tmp; 253 QString tmp;
254 for(int i=0;i<=number;i++) { 254 for(int i=0;i<=number;i++) {
255 pos=tmpText.find("\n"); 255 pos=tmpText.find("\n");
256 tmp=tmpText.left(pos); 256 tmp=tmpText.left(pos);
257 tmpText=tmpText.right(tmpText.length()-pos-1); 257 tmpText=tmpText.right(tmpText.length()-pos-1);
258 tmpStr+=tmp+"<br>"; 258 tmpStr+=tmp+"<br>";
259 } 259 }
260 } 260 }
261 else tmpStr += tmpText; 261 else tmpStr += tmpText;
262 tmpStr+="</" + tag + ">"; 262 tmpStr+="</" + tag + ">";
263 mText.append(tmpStr); 263 mText.append(tmpStr);
264 } 264 }
265 else 265 else
266 { 266 {
267 str += text + "</" + tag + ">"; 267 str += text + "</" + tag + ">";
268 mText.append(str); 268 mText.append(str);
269 } 269 }
270} 270}
271 271
272void KOEventViewer::setColorMode( int m ) 272void KOEventViewer::setColorMode( int m )
273{ 273{
274 mColorMode = m; 274 mColorMode = m;
275} 275}
276void KOEventViewer::appendEvent(Event *event, int mode ) 276void KOEventViewer::appendEvent(Event *event, int mode )
277{ 277{
278 mMailSubject = ""; 278 mMailSubject = "";
279 mCurrentIncidence = event; 279 mCurrentIncidence = event;
280 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 280 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
281 bool wideScreen = ( QApplication::desktop()->width() >= 640 ); 281 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
282 topLevelWidget()->setCaption(i18n("Event Viewer")); 282 topLevelWidget()->setCaption(i18n("Event Viewer"));
283 if ( mode == 0 ) { 283 if ( mode == 0 ) {
284 addTag("h2",deTag(event->summary())); 284 addTag("h2",deTag(event->summary()));
285 formatReadOnly(event); 285 formatReadOnly(event);
286 } 286 }
287 else { 287 else {
288 if ( mColorMode == 1 ) { 288 if ( mColorMode == 1 ) {
289 mText +="<font color=\"#00A000\">"; 289 mText +="<font color=\"#00A000\">";
290 } 290 }
291 if ( mColorMode == 2 ) { 291 if ( mColorMode == 2 ) {
292 mText +="<font color=\"#C00000\">"; 292 mText +="<font color=\"#C00000\">";
293 } 293 }
294 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 294 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
295 if ( mode == 1 ) { 295 if ( mode == 1 ) {
296 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 296 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
297 } else { 297 } else {
298 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 298 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
299 } 299 }
300 formatReadOnly(event); 300 formatReadOnly(event);
301 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 301 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
302 if ( mColorMode ) 302 if ( mColorMode )
303 mText += "</font>"; 303 mText += "</font>";
304 } 304 }
305 mMailSubject += i18n( "Meeting " )+ event->summary(); 305 mMailSubject += i18n( "Meeting " )+ event->summary();
306 if (event->cancelled ()) { 306 if (event->cancelled ()) {
307 mText +="<font color=\"#B00000\">"; 307 mText +="<font color=\"#B00000\">";
308 addTag("i",i18n("This event has been cancelled!")); 308 addTag("i",i18n("This event has been cancelled!"));
309 mText.append("<br>"); 309 mText.append("<br>");
310 mText += "</font>"; 310 mText += "</font>";
311 mMailSubject += i18n("(cancelled)"); 311 mMailSubject += i18n("(cancelled)");
312 } 312 }
313 313
314 if (event->doesFloat()) { 314 if (event->doesFloat()) {
315 if (event->isMultiDay()) { 315 if (event->isMultiDay()) {
316 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 316 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
317 .arg(event->dtStartDateStr(shortDate)) 317 .arg(event->dtStartDateStr(shortDate))
318 .arg(event->dtEndDateStr(shortDate))); 318 .arg(event->dtEndDateStr(shortDate)));
319 } else { 319 } else {
320 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 320 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
321 } 321 }
322 } else { 322 } else {
323 if (event->isMultiDay()) { 323 if (event->isMultiDay()) {
324 mText.append(i18n("<p><b>From:</b> %1</p> ") 324 mText.append(i18n("<p><b>From:</b> %1</p> ")
325 .arg(event->dtStartStr( shortDate))); 325 .arg(event->dtStartStr( shortDate)));
326 mText.append(i18n("<p><b>To:</b> %1</p>") 326 mText.append(i18n("<p><b>To:</b> %1</p>")
327 .arg(event->dtEndStr(shortDate))); 327 .arg(event->dtEndStr(shortDate)));
328 } else { 328 } else {
329 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 329 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
330 .arg(event->dtStartTimeStr()) 330 .arg(event->dtStartTimeStr())
331 .arg(event->dtEndTimeStr())); 331 .arg(event->dtEndTimeStr()));
332 mText.append(i18n("<p><b>On:</b> %1</p> ") 332 mText.append(i18n("<p><b>On:</b> %1</p> ")
333 .arg(event->dtStartDateStr( shortDate ))); 333 .arg(event->dtStartDateStr( shortDate )));
334 } 334 }
335 } 335 }
336 if (!event->location().isEmpty()) { 336 if (!event->location().isEmpty()) {
337 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); 337 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
338 mMailSubject += i18n(" at ") + event->location(); 338 mMailSubject += i18n(" at ") + event->location();
339 } 339 }
340 if (event->recurrence()->doesRecur()) { 340 if (event->recurrence()->doesRecur()) {
341 341
342 QString recurText = event->recurrence()->recurrenceText(); 342 QString recurText = event->recurrence()->recurrenceText();
343 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 343 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
344 bool ok; 344 bool ok;
345 QDate start = QDate::currentDate(); 345 QDate start = QDate::currentDate();
346 QDateTime next; 346 QDateTime next;
347 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 347 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
348 if ( ok ) { 348 if ( ok ) {
349 if ( wideScreen ){ 349 if ( wideScreen ){
350 addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) ); 350 addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) );
351 } else { 351 } else {
352 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 352 addTag("p",i18n("<b>Next recurrence is on:</b>") );
353 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 353 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
354 } 354 }
355 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 355 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
356 356
357 } else { 357 } else {
358 bool last; 358 bool last;
359 QDate nextd; 359 QDate nextd;
360 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 360 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
361 if ( last ) { 361 if ( last ) {
362 if ( wideScreen ){ 362 if ( wideScreen ){
363 addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate )); 363 addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate ));
364 } else{ 364 } else{
365 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 365 addTag("p",i18n("<b>Last recurrence was on:</b>") );
366 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 366 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
367 } 367 }
368 } 368 }
369 } 369 }
370 } else { 370 } else {
371 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 371 mMailSubject += i18n(" - " )+event->dtStartStr( true );
372 372
373 } 373 }
374 374
375 375
376 if (event->isAlarmEnabled()) { 376 if (event->isAlarmEnabled()) {
377 Alarm *alarm =event->alarms().first() ; 377 Alarm *alarm =event->alarms().first() ;
378 QDateTime t = alarm->time(); 378 QDateTime t = alarm->time();
379 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 379 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
380 if(wideScreen ){ 380 if(wideScreen ){
381 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); 381 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
382 }else{ 382 }else{
383 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 383 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
384 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 384 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
385 } 385 }
386 //addTag("p",s); 386 //addTag("p",s);
387 } 387 }
388 388
389 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); 389 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
390 390
391 formatCategories(event); 391 formatCategories(event);
392 392
393 formatAttendees(event); 393 formatAttendees(event);
394 394
395 if ( KOPrefs::instance()->mEVshowCreated ) { 395 if ( KOPrefs::instance()->mEVshowCreated ) {
396 if(wideScreen ){ 396 if(wideScreen ){
397 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 397 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
398 }else{ 398 }else{
399 addTag("p",i18n("<b>Created: ") +" </b>"); 399 addTag("p",i18n("<b>Created: ") +" </b>");
400 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 400 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
401 } 401 }
402 402
403 403
404 } 404 }
405 if ( KOPrefs::instance()->mEVshowChanged ) { 405 if ( KOPrefs::instance()->mEVshowChanged ) {
406 if(wideScreen ){ 406 if(wideScreen ){
407 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 407 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
408 }else{ 408 }else{
409 addTag("p",i18n("<b>Last modified: ") +" </b>"); 409 addTag("p",i18n("<b>Last modified: ") +" </b>");
410 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 410 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
411 } 411 }
412 412
413 } 413 }
414 if ( KOPrefs::instance()->mEVshowDetails ) { 414 if ( KOPrefs::instance()->mEVshowDetails ) {
415 if (!event->description().isEmpty()) { 415 if (!event->description().isEmpty()) {
416 addTag("p",i18n("<b>Details: </b>")); 416 addTag("p",i18n("<b>Details: </b>"));
417 addTag("p",deTag(event->description())); 417 addTag("p",deTag(event->description()));
418 } 418 }
419 } 419 }
420 setText(mText); 420 setText(mText);
421 //QWhatsThis::add(this,mText); 421 //QWhatsThis::add(this,mText);
422 422
423} 423}
424 424
425void KOEventViewer::appendTodo(Todo *event, int mode ) 425void KOEventViewer::appendTodo(Todo *event, int mode )
426{ 426{
427 mMailSubject = ""; 427 mMailSubject = "";
428 mCurrentIncidence = event; 428 mCurrentIncidence = event;
429 topLevelWidget()->setCaption(i18n("Todo Viewer")); 429 topLevelWidget()->setCaption(i18n("Todo Viewer"));
430 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 430 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
431 bool wideScreen = ( QApplication::desktop()->width() >= 640 ); 431 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
432 if (mode == 0 ) { 432 if (mode == 0 ) {
433 addTag("h2",deTag(event->summary())); 433 addTag("h2",deTag(event->summary()));
434 formatReadOnly(event); 434 formatReadOnly(event);
435 } 435 }
436 else { 436 else {
437 if ( mColorMode == 1 ) { 437 if ( mColorMode == 1 ) {
438 mText +="<font color=\"#00A000\">"; 438 mText +="<font color=\"#00A000\">";
439 } 439 }
440 if ( mColorMode == 2 ) { 440 if ( mColorMode == 2 ) {
441 mText +="<font color=\"#B00000\">"; 441 mText +="<font color=\"#B00000\">";
442 } 442 }
443 if ( mode == 1 ) { 443 if ( mode == 1 ) {
444 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 444 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
445 } else { 445 } else {
446 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 446 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
447 } 447 }
448 formatReadOnly(event); 448 formatReadOnly(event);
449 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 449 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
450 if ( mColorMode ) 450 if ( mColorMode )
451 mText += "</font>"; 451 mText += "</font>";
452 } 452 }
453 mMailSubject += i18n( "Todo " )+ event->summary(); 453 mMailSubject += i18n( "Todo " )+ event->summary();
454 454
455 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 455 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
456 mText +="<font color=\"#B00000\">"; 456 mText +="<font color=\"#B00000\">";
457 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 457 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
458 mText += "</font>"; 458 mText += "</font>";
459 } else { 459 } else {
460 mText.append(i18n("<p><i>%1 % completed</i></p>") 460 mText.append(i18n("<p><i>%1 % completed</i></p>")
461 .arg(event->percentComplete())); 461 .arg(event->percentComplete()));
462 } 462 }
463 463
464 if (event->cancelled ()) { 464 if (event->cancelled ()) {
465 mText +="<font color=\"#B00000\">"; 465 mText +="<font color=\"#B00000\">";
466 addTag("i",i18n("This todo has been cancelled!")); 466 addTag("i",i18n("This todo has been cancelled!"));
467 mText.append("<br>"); 467 mText.append("<br>");
468 mText += "</font>"; 468 mText += "</font>";
469 mMailSubject += i18n("(cancelled)"); 469 mMailSubject += i18n("(cancelled)");
470 } 470 }
471 471
472 472
473 473
474 if (event->recurrence()->doesRecur()) { 474 if (event->recurrence()->doesRecur()) {
475 475
476 QString recurText = event->recurrence()->recurrenceText(); 476 QString recurText = event->recurrence()->recurrenceText();
477 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 477 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
478 478
479 } 479 }
480 if (event->hasStartDate()) { 480 if (event->hasStartDate()) {
481 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 481 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
482 } 482 }
483 if (event->hasDueDate()) { 483 if (event->hasDueDate()) {
484 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 484 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
485 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 485 mMailSubject += i18n(" - " )+event->dtDueStr( true );
486 } 486 }
487 if (!event->location().isEmpty()) { 487 if (!event->location().isEmpty()) {
488 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); 488 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
489 mMailSubject += i18n(" at ") + event->location(); 489 mMailSubject += i18n(" at ") + event->location();
490 } 490 }
491 mText.append(i18n("<p><b>Priority:</b> %2</p>") 491 mText.append(i18n("<p><b>Priority:</b> %2</p>")
492 .arg(QString::number(event->priority()))); 492 .arg(QString::number(event->priority())));
493 493
494 if (event->isAlarmEnabled()) { 494 if (event->isAlarmEnabled()) {
495 Alarm *alarm =event->alarms().first() ; 495 Alarm *alarm =event->alarms().first() ;
496 QDateTime t = alarm->time(); 496 QDateTime t = alarm->time();
497 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 497 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
498 if ( wideScreen ) { 498 if ( wideScreen ) {
499 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); 499 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
500 } else { 500 } else {
501 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 501 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
502 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 502 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
503 } 503 }
504 } 504 }
505 505
506 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); 506 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
507 507
508 formatCategories(event); 508 formatCategories(event);
509 509
510 formatAttendees(event); 510 formatAttendees(event);
511 511
512 if ( KOPrefs::instance()->mEVshowCreated ) { 512 if ( KOPrefs::instance()->mEVshowCreated ) {
513 if(wideScreen ){ 513 if(wideScreen ){
514 514
515 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 515 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
516 516
517 } else { 517 } else {
518 addTag("p",i18n("<b>Created: ") +" </b>"); 518 addTag("p",i18n("<b>Created: ") +" </b>");
519 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 519 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
520 } 520 }
521 } 521 }
522 if ( KOPrefs::instance()->mEVshowChanged ) { 522 if ( KOPrefs::instance()->mEVshowChanged ) {
523 if(wideScreen ){ 523 if(wideScreen ){
524 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 524 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
525 525
526 } else { 526 } else {
527 addTag("p",i18n("<b>Last modified: ") +" </b>"); 527 addTag("p",i18n("<b>Last modified: ") +" </b>");
528 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 528 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
529 } 529 }
530 } 530 }
531 if ( event->relatedTo() ) { 531 if ( event->relatedTo() ) {
532 addTag("b",i18n("Parent todo:<br>")); 532 addTag("b",i18n("Parent todo:<br>"));
533 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 533 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
534 } 534 }
535 QPtrList<Incidence> Relations = event->relations(); 535 QPtrList<Incidence> Relations = event->relations();
536 Incidence *to; 536 Incidence *to;
537 if ( Relations.first() ) 537 if ( Relations.first() )
538 addTag("b",i18n("Sub todos:<br>")); 538 addTag("b",i18n("Sub todos:<br>"));
539 for (to=Relations.first();to;to=Relations.next()) { 539 for (to=Relations.first();to;to=Relations.next()) {
540 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 540 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
541 541
542 } 542 }
543 543
544 if ( KOPrefs::instance()->mEVshowDetails ) { 544 if ( KOPrefs::instance()->mEVshowDetails ) {
545 if (!event->description().isEmpty()) { 545 if (!event->description().isEmpty()) {
546 addTag("p",i18n("<b>Details: </b>")); 546 addTag("p",i18n("<b>Details: </b>"));
547 addTag("p",deTag(event->description())); 547 addTag("p",deTag(event->description()));
548 } 548 }
549 } 549 }
550 setText(mText); 550 setText(mText);
551} 551}
552 552
553void KOEventViewer::formatCategories(Incidence *event) 553void KOEventViewer::formatCategories(Incidence *event)
554{ 554{
555 if (!event->categoriesStr().isEmpty()) { 555 if (!event->categoriesStr().isEmpty()) {
556 if (event->categories().count() == 1) { 556 if (event->categories().count() == 1) {
557 addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace()); 557 addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace());
558 } else { 558 } else {
559 addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ; 559 addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ;
560 } 560 }
561 } 561 }
562} 562}
563void KOEventViewer::formatAttendees(Incidence *event) 563void KOEventViewer::formatAttendees(Incidence *event)
564{ 564{
565 QPtrList<Attendee> attendees = event->attendees(); 565 QPtrList<Attendee> attendees = event->attendees();
566 if (attendees.count()) { 566 if (attendees.count()) {
567 567
568 568
569 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 569 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
570 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 570 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
571 addTag("h3",i18n("Organizer")); 571 addTag("h3",i18n("Organizer"));
572 mText.append("<ul><li>"); 572 mText.append("<ul><li>");
573#ifndef KORG_NOKABC 573#ifndef KORG_NOKABC
574 574
575#ifdef DESKTOP_VERSION 575#ifdef DESKTOP_VERSION
576 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 576 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
577 KABC::Addressee::List addressList; 577 KABC::Addressee::List addressList;
578 addressList = add_book->findByEmail(event->organizer()); 578 addressList = add_book->findByEmail(event->organizer());
579 KABC::Addressee o = addressList.first(); 579 KABC::Addressee o = addressList.first();
580 if (!o.isEmpty() && addressList.size()<2) { 580 if (!o.isEmpty() && addressList.size()<2) {
581 mText += "<a href=\"uid:" + o.uid() + "\">"; 581 mText += "<a href=\"uid:" + o.uid() + "\">";
582 mText += o.formattedName(); 582 mText += o.formattedName();
583 mText += "</a>\n"; 583 mText += "</a>\n";
584 } else { 584 } else {
585 mText.append(event->organizer()); 585 mText.append(event->organizer());
586 } 586 }
587#else //DESKTOP_VERSION 587#else //DESKTOP_VERSION
588 mText += "<a href=\"uid:organizer\">"; 588 mText += "<a href=\"uid:organizer\">";
589 mText += event->organizer(); 589 mText += event->organizer();
590 mText += "</a>\n"; 590 mText += "</a>\n";
591#endif //DESKTOP_VERSION 591#endif //DESKTOP_VERSION
592 592
593 593
594#else 594#else
595 mText.append(event->organizer()); 595 mText.append(event->organizer());
596#endif 596#endif
597 597
598 if (iconPath) { 598 if (iconPath) {
599 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 599 mText += " <a href=\"mailto:" + event->organizer() + "\">";
600 mText += "<IMG src=\"" + iconPath + "\">"; 600 mText += "<IMG src=\"" + iconPath + "\">";
601 mText += "</a>\n"; 601 mText += "</a>\n";
602 } 602 }
603 mText.append("</li></ul>"); 603 mText.append("</li></ul>");
604 604
605 addTag("h3",i18n("Attendees")); 605 addTag("h3",i18n("Attendees"));
606 Attendee *a; 606 Attendee *a;
607 mText.append("<ul>"); 607 mText.append("<ul>");
608 int a_count = 0; 608 int a_count = 0;
609 int a_count_nr = 0; 609 int a_count_nr = 0;
610 610
611 for(a=attendees.first();a;a=attendees.next()) { 611 for(a=attendees.first();a;a=attendees.next()) {
612#ifndef KORG_NOKABC 612#ifndef KORG_NOKABC
613#ifdef DESKTOP_VERSION 613#ifdef DESKTOP_VERSION
614 if (a->name().isEmpty()) { 614 if (a->name().isEmpty()) {
615 addressList = add_book->findByEmail(a->email()); 615 addressList = add_book->findByEmail(a->email());
616 KABC::Addressee o = addressList.first(); 616 KABC::Addressee o = addressList.first();
617 if (!o.isEmpty() && addressList.size()<2) { 617 if (!o.isEmpty() && addressList.size()<2) {
618 mText += "<a href=\"uid:" + o.uid() + "\">"; 618 mText += "<a href=\"uid:" + o.uid() + "\">";
619 mText += o.formattedName(); 619 mText += o.formattedName();
620 mText += "</a>\n"; 620 mText += "</a>\n";
621 } else { 621 } else {
622 mText += "<li>"; 622 mText += "<li>";
623 mText.append(a->email()); 623 mText.append(a->email());
624 mText += "\n"; 624 mText += "\n";
625 } 625 }
626 } else { 626 } else {
627 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 627 mText += "<li><a href=\"uid:" + a->uid() + "\">";
628 if (!a->name().isEmpty()) mText += a->name(); 628 if (!a->name().isEmpty()) mText += a->name();
629 else mText += a->email(); 629 else mText += a->email();
630 mText += "</a>\n"; 630 mText += "</a>\n";
631 } 631 }
632#else //DESKTOP_VERSION 632#else //DESKTOP_VERSION
633 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 633 mText += "<li><a href=\"uid:" + a->uid() + "\">";
634 if (!a->name().isEmpty()) mText += a->name(); 634 if (!a->name().isEmpty()) mText += a->name();
635 else mText += a->email(); 635 else mText += a->email();
636 mText += "</a>\n"; 636 mText += "</a>\n";
637#endif //DESKTOP_VERSION 637#endif //DESKTOP_VERSION
638#else 638#else
639 //qDebug("nokabc "); 639 //qDebug("nokabc ");
640 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 640 mText += "<li><a href=\"uid:" + a->uid() + "\">";
641 if (!a->name().isEmpty()) mText += a->name(); 641 if (!a->name().isEmpty()) mText += a->name();
642 else mText += a->email(); 642 else mText += a->email();
643 mText += "</a>\n"; 643 mText += "</a>\n";
644#endif 644#endif
645 645
646 646
647 if (!a->email().isEmpty()) { 647 if (!a->email().isEmpty()) {
648 if (iconPath) { 648 if (iconPath) {
649 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 649 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
650 if ( a->RSVP() ) { 650 if ( a->RSVP() ) {
651 ++a_count_nr; 651 ++a_count_nr;
652 mText += "<IMG src=\"" + iconPath + "\">"; 652 mText += "<IMG src=\"" + iconPath + "\">";
653 } 653 }
654 else { 654 else {
655 ++a_count; 655 ++a_count;
656 mText += "<IMG src=\"" + NOiconPath + "\">"; 656 mText += "<IMG src=\"" + NOiconPath + "\">";
657 } 657 }
658 mText += "</a>\n"; 658 mText += "</a>\n";
659 } 659 }
660 } 660 }
661 if (a->status() != Attendee::NeedsAction ) 661 if (a->status() != Attendee::NeedsAction )
662 mText +="[" + a->statusStr() + "] "; 662 mText +="[" + a->statusStr() + "] ";
663 if (a->role() == Attendee::Chair ) 663 if (a->role() == Attendee::Chair )
664 mText +="(" + a->roleStr().left(1) + ".)"; 664 mText +="(" + a->roleStr().left(1) + ".)";
665 } 665 }
666 mText.append("</li></ul>"); 666 mText.append("</li></ul>");
667 if ( (a_count+a_count_nr) > 1 ) { 667 if ( (a_count+a_count_nr) > 1 ) {
668 mText += "<a href=\"mailto:ALL\">"; 668 mText += "<a href=\"mailto:ALL\">";
669 mText += i18n( "Mail to all" ); 669 mText += i18n( "Mail to all" );
670 mText += "</a> ( "; 670 mText += "</a> ( ";
671 mText += "<IMG src=\"" + iconPath + "\">"; 671 mText += "<IMG src=\"" + iconPath + "\">";
672 mText += i18n( " and " ); 672 mText += i18n( " and " );
673 mText += "<IMG src=\"" + NOiconPath + "\"> )"; 673 mText += "<IMG src=\"" + NOiconPath + "\"> )";
674 mText += "<br>\n"; 674 mText += "<br>\n";
675 675
676 676
677 } 677 }
678 if ( a_count_nr > 1 ) { 678 if ( a_count_nr > 1 ) {
679 mText += "<a href=\"mailto:RSVP\">"; 679 mText += "<a href=\"mailto:RSVP\">";
680 mText += i18n( "Mail to selected" ); 680 mText += i18n( "Mail to selected" );
681 mText += "</a> ( "; 681 mText += "</a> ( ";
682 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); 682 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
683 mText += "<br>\n"; 683 mText += "<br>\n";
684 } 684 }
685 } 685 }
686 686
687} 687}
688void KOEventViewer::appendJournal(Journal *jour, int mode ) 688void KOEventViewer::appendJournal(Journal *jour, int mode )
689{ 689{
690 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 690 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
691 if (mode == 0 ) { 691 if (mode == 0 ) {
692 addTag("h2",i18n("Journal from: ")); 692 addTag("h2",i18n("Journal from: "));
693 } 693 }
694 else { 694 else {
695 if ( mode == 1 ) { 695 if ( mode == 1 ) {
696 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 696 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
697 } else { 697 } else {
698 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 698 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
699 } 699 }
700 } 700 }
701 topLevelWidget()->setCaption("Journal Viewer"); 701 topLevelWidget()->setCaption("Journal Viewer");
702 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 702 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
703 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 703 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
704 if (!jour->summary().isEmpty()) {
705 addTag("p",i18n(" Title: ") + deTag(jour->summary()));
706 }
704 if (!jour->description().isEmpty()) { 707 if (!jour->description().isEmpty()) {
705 addTag("p",deTag(jour->description())); 708 addTag("p",deTag(jour->description()));
706 } 709 }
707 setText(mText); 710 setText(mText);
708} 711}
709 712
710void KOEventViewer::formatReadOnly(Incidence *event) 713void KOEventViewer::formatReadOnly(Incidence *event)
711{ 714{
712 if (event->isReadOnly()) { 715 if (event->isReadOnly()) {
713 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 716 addTag("p","<em>(" + i18n("read-only") + ")</em>");
714 } 717 }
715} 718}
716void KOEventViewer::setSyncMode( bool b ) 719void KOEventViewer::setSyncMode( bool b )
717{ 720{
718 mSyncMode = b; 721 mSyncMode = b;
719} 722}
720 723
721void KOEventViewer::setTodo(Todo *event, bool clearV ) 724void KOEventViewer::setTodo(Todo *event, bool clearV )
722{ 725{
723 if ( clearV ) 726 if ( clearV )
724 clearEvents(); 727 clearEvents();
725 if ( mSyncMode ) { 728 if ( mSyncMode ) {
726 if ( clearV ) 729 if ( clearV )
727 appendTodo(event,1 ); 730 appendTodo(event,1 );
728 else 731 else
729 appendTodo(event,2); 732 appendTodo(event,2);
730 } else 733 } else
731 appendTodo(event); 734 appendTodo(event);
732} 735}
733void KOEventViewer::setJournal(Journal *event, bool clearV ) 736void KOEventViewer::setJournal(Journal *event, bool clearV )
734{ 737{
735 if ( clearV ) 738 if ( clearV )
736 clearEvents(); 739 clearEvents();
737 if ( mSyncMode ) { 740 if ( mSyncMode ) {
738 if ( clearV ) 741 if ( clearV )
739 appendJournal(event, 1); 742 appendJournal(event, 1);
740 else 743 else
741 appendJournal(event, 2); 744 appendJournal(event, 2);
742 } else 745 } else
743 appendJournal(event); 746 appendJournal(event);
744} 747}
745 748
746void KOEventViewer::setEvent(Event *event) 749void KOEventViewer::setEvent(Event *event)
747{ 750{
748 clearEvents(); 751 clearEvents();
749 if ( mSyncMode ) 752 if ( mSyncMode )
750 appendEvent(event, 1); 753 appendEvent(event, 1);
751 else 754 else
752 appendEvent(event); 755 appendEvent(event);
753} 756}
754 757
755void KOEventViewer::addEvent(Event *event) 758void KOEventViewer::addEvent(Event *event)
756{ 759{
757 if ( mSyncMode ) 760 if ( mSyncMode )
758 appendEvent(event, 2); 761 appendEvent(event, 2);
759 else 762 else
760 appendEvent(event); 763 appendEvent(event);
761} 764}
762 765
763void KOEventViewer::clearEvents(bool now) 766void KOEventViewer::clearEvents(bool now)
764{ 767{
765 mText = ""; 768 mText = "";
766 if (now) setText(mText); 769 if (now) setText(mText);
767} 770}
768 771
769void KOEventViewer::addText(QString text) 772void KOEventViewer::addText(QString text)
770{ 773{
771 mText.append(text); 774 mText.append(text);
772 setText(mText); 775 setText(mText);
773} 776}
774QString KOEventViewer::deTag(QString text) 777QString KOEventViewer::deTag(QString text)
775{ 778{
776#if QT_VERSION >= 0x030000 779#if QT_VERSION >= 0x030000
777 text.replace( '<' , "&lt;" ); 780 text.replace( '<' , "&lt;" );
778 text.replace( '>' , "&gt;" ); 781 text.replace( '>' , "&gt;" );
779#else 782#else
780 if ( text.find ('<') >= 0 ) { 783 if ( text.find ('<') >= 0 ) {
781 text.replace( QRegExp("<") , "&lt;" ); 784 text.replace( QRegExp("<") , "&lt;" );
782 } 785 }
783 if ( text.find ('>') >= 0 ) { 786 if ( text.find ('>') >= 0 ) {
784 text.replace( QRegExp(">") , "&gt;" ); 787 text.replace( QRegExp(">") , "&gt;" );
785 } 788 }
786#endif 789#endif
787 return text; 790 return text;
788} 791}
789void KOEventViewer::keyPressEvent ( QKeyEvent * e ) 792void KOEventViewer::keyPressEvent ( QKeyEvent * e )
790{ 793{
791 switch ( e->key() ) { 794 switch ( e->key() ) {
792 case Qt::Key_Return: 795 case Qt::Key_Return:
793 case Qt::Key_Enter : 796 case Qt::Key_Enter :
794 e->ignore(); 797 e->ignore();
795 break; 798 break;
796 default: 799 default:
797 QTextBrowser::keyPressEvent ( e ); 800 QTextBrowser::keyPressEvent ( e );
798 break; 801 break;
799 } 802 }
800} 803}
diff --git a/korganizer/kojournalview.cpp b/korganizer/kojournalview.cpp
index 9e354d3..4fc9013 100644
--- a/korganizer/kojournalview.cpp
+++ b/korganizer/kojournalview.cpp
@@ -1,195 +1,217 @@
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 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// 24//
25// View of Journal entries 25// View of Journal entries
26 26
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qscrollview.h> 28#include <qscrollview.h>
29#include <qpopupmenu.h> 29#include <qpopupmenu.h>
30#include <qhbox.h>
31#include <qpushbutton.h>
32#include <qlabel.h>
33#include <qpushbutton.h>
34#include <qapplication.h>
30 35
31#include <klocale.h> 36#include <klocale.h>
32#include <kdebug.h> 37#include <kdebug.h>
33#include "koprefs.h" 38#include "koprefs.h"
39#include <kglobal.h>
34 40
35#include <libkcal/calendar.h> 41#include <libkcal/calendar.h>
36 42
37#include "journalentry.h" 43#include "journalentry.h"
38 44
39#include "kojournalview.h" 45#include "kojournalview.h"
40using namespace KOrg; 46using namespace KOrg;
41 47
42KOJournalView::KOJournalView(Calendar *calendar, QWidget *parent, 48KOJournalView::KOJournalView(Calendar *calendar, QWidget *parent,
43 const char *name) 49 const char *name)
44 : KOrg::BaseView(calendar, parent, name) 50 : KOrg::BaseView(calendar, parent, name)
45{ 51{
46 mCalendar = calendar; 52 mCalendar = calendar;
47 QScrollView * sv = new QScrollView( this ); 53 QScrollView * sv = new QScrollView( this );
48 QHBoxLayout * hbl = new QHBoxLayout( this ); 54 QHBoxLayout * hbl = new QHBoxLayout( this );
49 hbl->addWidget( sv ); 55 hbl->addWidget( sv );
50 parWid = new QWidget( sv->viewport() ); 56 parWid = new QWidget( sv->viewport() );
51 sv->addChild(parWid); 57 sv->addChild(parWid);
52 sv->setResizePolicy( QScrollView:: AutoOneFit ); 58 sv->setResizePolicy( QScrollView:: AutoOneFit );
53 mTopLayout = new QVBoxLayout(parWid); 59 mTopLayout = new QVBoxLayout(parWid);
60 QHBox * vb = new QHBox ( parWid );
61 QPushButton * newJournal = new QPushButton( vb );
62 QIconSet icon;
63 if ( QApplication::desktop()->width() < 321 )
64 icon = SmallIcon("ko16old");
65 else
66 icon = SmallIcon("ko24old");
67 newJournal->setIconSet (icon ) ;
68 int size = newJournal->sizeHint().height();
69 newJournal->setFixedSize( size, size );
70 mDateLabel = new QLabel ( vb );
71 mTopLayout->addWidget( vb );
72 mDateLabel->setMargin(2);
73 mDateLabel->setAlignment(AlignCenter);
74 connect( newJournal, SIGNAL( clicked() ), this , SLOT( newJournal() ) );
54 getNewEntry(); 75 getNewEntry();
55} 76}
56 77
57KOJournalView::~KOJournalView() 78KOJournalView::~KOJournalView()
58{ 79{
59} 80}
60 81
61int KOJournalView::currentDateCount() 82int KOJournalView::currentDateCount()
62{ 83{
63 return 0; 84 return 0;
64} 85}
65JournalEntry* KOJournalView::getNewEntry() 86JournalEntry* KOJournalView::getNewEntry()
66{ 87{
67 JournalEntry* Entry = new JournalEntry(mCalendar,parWid); 88 JournalEntry* Entry = new JournalEntry(mCalendar,parWid);
68 jEntries.append( Entry ); 89 jEntries.append( Entry );
69 mTopLayout->addWidget(Entry); 90 mTopLayout->addWidget(Entry);
70 Entry->setFont ( KOPrefs::instance()->mJornalViewFont ); 91 Entry->setFont ( KOPrefs::instance()->mJornalViewFont );
71 connect ( Entry,SIGNAL(deleteJournal(Journal *) ),this ,SIGNAL(deleteJournal(Journal *) ) ) ; 92 connect ( Entry,SIGNAL(deleteJournal(Journal *) ),this ,SIGNAL(deleteJournal(Journal *) ) ) ;
72 connect ( Entry,SIGNAL(newJournal() ),this ,SLOT(newJournal() ) ) ; 93 connect ( Entry,SIGNAL(newJournal() ),this ,SLOT(newJournal() ) ) ;
73 connect ( Entry,SIGNAL(showJournalOnly( Journal * ) ),this ,SLOT(showOnly ( Journal* ) ) ) ; 94 connect ( Entry,SIGNAL(showJournalOnly( Journal * ) ),this ,SLOT(showOnly ( Journal* ) ) ) ;
74 return Entry; 95 return Entry;
75} 96}
76 97
77QPtrList<Incidence> KOJournalView::selectedIncidences() 98QPtrList<Incidence> KOJournalView::selectedIncidences()
78{ 99{
79 QPtrList<Incidence> eventList; 100 QPtrList<Incidence> eventList;
80 101
81 return eventList; 102 return eventList;
82} 103}
83void KOJournalView::updateConfig() 104void KOJournalView::updateConfig()
84{ 105{
85 JournalEntry* mEntry = jEntries.first(); 106 JournalEntry* mEntry = jEntries.first();
86 while ( mEntry ) { 107 while ( mEntry ) {
87 mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); 108 mEntry->setFont ( KOPrefs::instance()->mJornalViewFont );
88 mEntry = jEntries.next(); 109 mEntry = jEntries.next();
89 } 110 }
90} 111}
91void KOJournalView::updateView() 112void KOJournalView::updateView()
92{ 113{
93 JournalEntry* mEntry = jEntries.first(); 114 JournalEntry* mEntry = jEntries.first();
94 while ( mEntry ) { 115 while ( mEntry ) {
95 mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); 116 mEntry->setFont ( KOPrefs::instance()->mJornalViewFont );
96 mEntry = jEntries.next(); 117 mEntry = jEntries.next();
97 } 118 }
98 showDates( mDate, QDate() ); 119 showDates( mDate, QDate() );
99} 120}
100 121
101void KOJournalView::flushView() 122void KOJournalView::flushView()
102{ 123{
103 JournalEntry* mEntry = jEntries.first(); 124 JournalEntry* mEntry = jEntries.first();
104 while ( mEntry ) { 125 while ( mEntry ) {
105 mEntry->flushEntry(); 126 mEntry->flushEntry();
106 mEntry = jEntries.next(); 127 mEntry = jEntries.next();
107 } 128 }
108} 129}
109 130
110void KOJournalView::clearList() 131void KOJournalView::clearList()
111{ 132{
112 JournalEntry* mEntry = jEntries.first(); 133 JournalEntry* mEntry = jEntries.first();
113 while ( mEntry ) { 134 while ( mEntry ) {
114 mEntry->clear(); 135 mEntry->clear();
115 mEntry = jEntries.next(); 136 mEntry = jEntries.next();
116 } 137 }
117} 138}
118void KOJournalView::newJournal() 139void KOJournalView::newJournal()
119{ 140{
120 Journal* mJournal = new Journal; 141 Journal* mJournal = new Journal;
121 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); 142 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0)));
122 mCalendar->addJournal(mJournal); 143 mCalendar->addJournal(mJournal);
123 showDates( mDate, QDate() ); 144 showDates( mDate, QDate() );
124} 145}
125 146
126void KOJournalView::showOnly ( Journal* j ) 147void KOJournalView::showOnly ( Journal* j )
127{ 148{
128 if ( j == 0 ) { 149 if ( j == 0 ) {
129 showDates( mDate, QDate() ); 150 showDates( mDate, QDate() );
130 return; 151 return;
131 } 152 }
132 QPtrList<Journal> jl; 153 QPtrList<Journal> jl;
133 jl.append ( j ); 154 jl.append ( j );
134 showList( jl ); 155 showList( jl );
135 JournalEntry* mEntry = jEntries.first(); 156 JournalEntry* mEntry = jEntries.first();
136 mEntry->setShowOnly(); 157 mEntry->setShowOnly();
137} 158}
138void KOJournalView::showList(QPtrList<Journal> jl) 159void KOJournalView::showList(QPtrList<Journal> jl)
139{ 160{
140 JournalEntry* mEntry = jEntries.first(); 161 JournalEntry* mEntry = jEntries.first();
141 JournalEntry* firstEntry = mEntry; 162 JournalEntry* firstEntry = mEntry;
142 int count = jl.count(); 163 int count = jl.count();
143 int iii = 0; 164 int iii = 0;
144 while ( iii < count ) { 165 while ( iii < count ) {
145 if ( !mEntry ) { 166 if ( !mEntry ) {
146 mEntry = getNewEntry(); 167 mEntry = getNewEntry();
147 mEntry->show(); 168 mEntry->show();
148 mEntry->setDate(mDate); 169 mEntry->setDate(mDate);
149 mEntry->setJournal(jl.at(iii)); 170 mEntry->setJournal(jl.at(iii));
150 mEntry = 0; 171 mEntry = 0;
151 } else { 172 } else {
152 mEntry->setDate(mDate); 173 mEntry->setDate(mDate);
153 mEntry->setJournal(jl.at(iii)); 174 mEntry->setJournal(jl.at(iii));
154 mEntry->show(); 175 mEntry->show();
155 mEntry = jEntries.next(); 176 mEntry = jEntries.next();
156 } 177 }
157 ++iii; 178 ++iii;
158 } 179 }
159 while ( mEntry ) { 180 while ( mEntry ) {
160 mEntry->setDate(mDate); 181 mEntry->setDate(mDate);
161 mEntry->clear(); 182 mEntry->clear();
162 if ( mEntry != firstEntry ) 183 if ( mEntry != firstEntry )
163 mEntry->hide(); 184 mEntry->hide();
164 else 185 else
165 mEntry->show(); 186 mEntry->show();
166 mEntry = jEntries.next(); 187 mEntry = jEntries.next();
167 } 188 }
168} 189}
169 190
170void KOJournalView::showDates(const QDate &start, const QDate &) 191void KOJournalView::showDates(const QDate &start, const QDate &)
171{ 192{
172 mDate = start; 193 mDate = start;
194 mDateLabel-> setText(KGlobal::locale()->formatDate(mDate));
173 QPtrList<Journal> jl = calendar()->journals4Date( start ); 195 QPtrList<Journal> jl = calendar()->journals4Date( start );
174 showList( jl ); 196 showList( jl );
175} 197}
176 198
177void KOJournalView::showEvents(QPtrList<Event>) 199void KOJournalView::showEvents(QPtrList<Event>)
178{ 200{
179 // After new creation of list view no events are selected. 201 // After new creation of list view no events are selected.
180// emit incidenceSelected( 0 ); 202// emit incidenceSelected( 0 );
181} 203}
182 204
183void KOJournalView::changeEventDisplay(Event *, int /*action*/) 205void KOJournalView::changeEventDisplay(Event *, int /*action*/)
184{ 206{
185 updateView(); 207 updateView();
186} 208}
187 209
188void KOJournalView::keyPressEvent ( QKeyEvent * e ) 210void KOJournalView::keyPressEvent ( QKeyEvent * e )
189{ 211{
190 //qDebug("keyPressEven "); 212 //qDebug("keyPressEven ");
191 if ( e->state() == Qt::ControlButton ) { 213 if ( e->state() == Qt::ControlButton ) {
192 if ( e->key () == Qt::Key_Right || e->key () == Qt::Key_Left ) 214 if ( e->key () == Qt::Key_Right || e->key () == Qt::Key_Left )
193 e->ignore(); 215 e->ignore();
194 } 216 }
195} 217}
diff --git a/korganizer/kojournalview.h b/korganizer/kojournalview.h
index 0437d95..331bdfa 100644
--- a/korganizer/kojournalview.h
+++ b/korganizer/kojournalview.h
@@ -1,77 +1,79 @@
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 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#ifndef _KOJOURNALVIEW_H 23#ifndef _KOJOURNALVIEW_H
24#define _KOJOURNALVIEW_H 24#define _KOJOURNALVIEW_H
25 25
26#include <korganizer/baseview.h> 26#include <korganizer/baseview.h>
27#include <qlayout.h> 27#include <qlayout.h>
28 28
29class JournalEntry; 29class JournalEntry;
30class QLabel;
30 31
31/** 32/**
32 * This class provides a journal view. 33 * This class provides a journal view.
33 34
34 * @short View for Journal components. 35 * @short View for Journal components.
35 * @author Cornelius Schumacher <schumacher@kde.org> 36 * @author Cornelius Schumacher <schumacher@kde.org>
36 * @see KOBaseView 37 * @see KOBaseView
37 */ 38 */
38class KOJournalView : public KOrg::BaseView 39class KOJournalView : public KOrg::BaseView
39{ 40{
40 Q_OBJECT 41 Q_OBJECT
41 public: 42 public:
42 KOJournalView(Calendar *calendar, QWidget *parent = 0, 43 KOJournalView(Calendar *calendar, QWidget *parent = 0,
43 const char *name = 0); 44 const char *name = 0);
44 ~KOJournalView(); 45 ~KOJournalView();
45 46
46 virtual int currentDateCount(); 47 virtual int currentDateCount();
47 void clearList(); 48 void clearList();
48 virtual QPtrList<Incidence> selectedIncidences(); 49 virtual QPtrList<Incidence> selectedIncidences();
49 DateList selectedDates() 50 DateList selectedDates()
50 {DateList q; 51 {DateList q;
51 return q;}; 52 return q;};
52 signals: 53 signals:
53 void deleteJournal(Journal *); 54 void deleteJournal(Journal *);
54 public slots: 55 public slots:
55 void showOnly ( Journal* ); 56 void showOnly ( Journal* );
56 void newJournal(); 57 void newJournal();
57 void updateView(); 58 void updateView();
58 void flushView(); 59 void flushView();
59 void updateConfig(); 60 void updateConfig();
60 void showDates( const QDate &start, const QDate &end ); 61 void showDates( const QDate &start, const QDate &end );
61 void showEvents(QPtrList<Event> eventList); 62 void showEvents(QPtrList<Event> eventList);
62 63
63 void changeEventDisplay(Event *, int); 64 void changeEventDisplay(Event *, int);
64 65
65 private: 66 private:
66 void showList(QPtrList<Journal> jl); 67 void showList(QPtrList<Journal> jl);
67 Calendar *mCalendar; 68 Calendar *mCalendar;
68 JournalEntry* getNewEntry(); 69 JournalEntry* getNewEntry();
69 QPtrList<JournalEntry> jEntries; 70 QPtrList<JournalEntry> jEntries;
70 void keyPressEvent ( QKeyEvent * ) ; 71 void keyPressEvent ( QKeyEvent * ) ;
71 QBoxLayout *mTopLayout; 72 QBoxLayout *mTopLayout;
72 QWidget *parWid; 73 QWidget *parWid;
74 QLabel * mDateLabel;
73 QDate mDate; 75 QDate mDate;
74 76
75}; 77};
76 78
77#endif 79#endif
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 22d9ac0..0c1ac7a 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,1465 +1,1471 @@
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#include <qpainter.h> 37#include <qpainter.h>
38#include <qpaintdevicemetrics.h> 38#include <qpaintdevicemetrics.h>
39 39
40#include <klocale.h> 40#include <klocale.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <kiconloader.h> 42#include <kiconloader.h>
43#include <kglobal.h> 43#include <kglobal.h>
44 44
45#include <libkdepim/kpimglobalprefs.h> 45#include <libkdepim/kpimglobalprefs.h>
46#include <libkcal/calendar.h> 46#include <libkcal/calendar.h>
47#include <libkcal/calendarlocal.h> 47#include <libkcal/calendarlocal.h>
48#include <libkcal/icalformat.h> 48#include <libkcal/icalformat.h>
49#include <libkcal/vcalformat.h> 49#include <libkcal/vcalformat.h>
50#include <libkcal/recurrence.h> 50#include <libkcal/recurrence.h>
51#include <libkcal/filestorage.h> 51#include <libkcal/filestorage.h>
52#include <libkdepim/categoryselectdialog.h> 52#include <libkdepim/categoryselectdialog.h>
53#include <libkcal/kincidenceformatter.h> 53#include <libkcal/kincidenceformatter.h>
54#ifndef DESKTOP_VERSION 54#ifndef DESKTOP_VERSION
55#include <qpe/qpeapplication.h> 55#include <qpe/qpeapplication.h>
56#else 56#else
57#include <qapplication.h> 57#include <qapplication.h>
58#endif 58#endif
59 59
60#ifndef KORG_NOPRINTER 60#ifndef KORG_NOPRINTER
61#include "calprinter.h" 61#include "calprinter.h"
62#endif 62#endif
63#include "koglobals.h" 63#include "koglobals.h"
64#include "koprefs.h" 64#include "koprefs.h"
65#include "kfiledialog.h" 65#include "kfiledialog.h"
66 66
67#include "kolistview.h" 67#include "kolistview.h"
68#include "koeventviewer.h" 68#include "koeventviewer.h"
69 69
70extern QPixmap* sgListViewCompletedPix[6]; 70extern QPixmap* sgListViewCompletedPix[6];
71 71
72class KOListViewWhatsThis :public QWhatsThis 72class KOListViewWhatsThis :public QWhatsThis
73{ 73{
74public: 74public:
75 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 75 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
76 76
77protected: 77protected:
78 virtual QString text( const QPoint& p) 78 virtual QString text( const QPoint& p)
79 { 79 {
80 return _view->getWhatsThisText(p) ; 80 return _view->getWhatsThisText(p) ;
81 } 81 }
82private: 82private:
83 QWidget* _wid; 83 QWidget* _wid;
84 KOListView * _view; 84 KOListView * _view;
85}; 85};
86 86
87 87
88ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 88ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
89{ 89{
90 mItem = item; 90 mItem = item;
91 mDate = date; 91 mDate = date;
92} 92}
93 93
94ListItemVisitor::~ListItemVisitor() 94ListItemVisitor::~ListItemVisitor()
95{ 95{
96} 96}
97 97
98bool ListItemVisitor::visit(Event *e) 98bool ListItemVisitor::visit(Event *e)
99{ 99{
100 bool ok = false; 100 bool ok = false;
101 QString start, end; 101 QString start, end;
102 QDate ds, de; 102 QDate ds, de;
103 if ( e->doesRecur() ) { 103 if ( e->doesRecur() ) {
104 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 104 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
105 if ( ok ) { 105 if ( ok ) {
106 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 106 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
107 start = KGlobal::locale()->formatDate(ds,true); 107 start = KGlobal::locale()->formatDate(ds,true);
108 de = ds.addDays( days); 108 de = ds.addDays( days);
109 end = KGlobal::locale()->formatDate(de,true); 109 end = KGlobal::locale()->formatDate(de,true);
110 } 110 }
111 111
112 } 112 }
113 if ( ! ok ) { 113 if ( ! ok ) {
114 start =e->dtStartDateStr(); 114 start =e->dtStartDateStr();
115 end = e->dtEndDateStr(); 115 end = e->dtEndDateStr();
116 ds = e->dtStart().date(); 116 ds = e->dtStart().date();
117 de = e->dtEnd().date(); 117 de = e->dtEnd().date();
118 } 118 }
119 mItem->setText(0,e->summary()); 119 mItem->setText(0,e->summary());
120 mItem->setText(1,start); 120 mItem->setText(1,start);
121 if ( e->doesFloat() ) 121 if ( e->doesFloat() )
122 mItem->setText(2,"---"); 122 mItem->setText(2,"---");
123 else 123 else
124 mItem->setText(2,e->dtStartTimeStr()); 124 mItem->setText(2,e->dtStartTimeStr());
125 mItem->setText(3,end); 125 mItem->setText(3,end);
126 if ( e->doesFloat() ) 126 if ( e->doesFloat() )
127 mItem->setText(4,"---"); 127 mItem->setText(4,"---");
128 else 128 else
129 mItem->setText(4,e->dtEndTimeStr()); 129 mItem->setText(4,e->dtEndTimeStr());
130 if ( e->isAlarmEnabled() ) { 130 if ( e->isAlarmEnabled() ) {
131 mItem->setText(5,e->alarms().first()->offsetText() ); 131 mItem->setText(5,e->alarms().first()->offsetText() );
132 } else { 132 } else {
133 mItem->setText(5, i18n("No")); 133 mItem->setText(5, i18n("No"));
134 } 134 }
135 mItem->setText(6, e->recurrence()->recurrenceText()); 135 mItem->setText(6, e->recurrence()->recurrenceText());
136 if( ! e->doesRecur() ) 136 if( ! e->doesRecur() )
137 mItem->setSortKey( 6, "-" ); 137 mItem->setSortKey( 6, "-" );
138 mItem->setText(7,"---"); 138 mItem->setText(7,"---");
139 mItem->setText(8,"---"); 139 mItem->setText(8,"---");
140 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 140 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
141 mItem->setText(10,e->categoriesStr()); 141 mItem->setText(10,e->categoriesStr());
142 mItem->setText(11, KOPrefs::instance()->calName( e->calID() )); 142 mItem->setText(11, KOPrefs::instance()->calName( e->calID() ));
143 143
144 QString key; 144 QString key;
145 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 145 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
146 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 146 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
147 mItem->setSortKey(1,key); 147 mItem->setSortKey(1,key);
148 148
149 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 149 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
150 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 150 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
151 mItem->setSortKey(3,key); 151 mItem->setSortKey(3,key);
152 return true; 152 return true;
153} 153}
154 154
155bool ListItemVisitor::visit(Todo *t) 155bool ListItemVisitor::visit(Todo *t)
156{ 156{
157 mItem->setText(0,t->summary()); 157 mItem->setText(0,t->summary());
158 if ( t->isCompleted() ) { 158 if ( t->isCompleted() ) {
159 mItem->setSortKey(0,"99"+ t->summary().left(10)); 159 mItem->setSortKey(0,"99"+ t->summary().left(10));
160 } else 160 } else
161 mItem->setSortKey(0,QString::number( t->percentComplete() )+ t->summary().left(10)); 161 mItem->setSortKey(0,QString::number( t->percentComplete() )+ t->summary().left(10));
162 mItem->setPixmap( 0, *(sgListViewCompletedPix[t->percentComplete()/20])); 162 mItem->setPixmap( 0, *(sgListViewCompletedPix[t->percentComplete()/20]));
163 if (t->hasStartDate()) { 163 if (t->hasStartDate()) {
164 mItem->setText(1,t->dtStartDateStr()); 164 mItem->setText(1,t->dtStartDateStr());
165 if (t->doesFloat()) { 165 if (t->doesFloat()) {
166 mItem->setText(2,"---"); 166 mItem->setText(2,"---");
167 } else { 167 } else {
168 mItem->setText(2,t->dtStartTimeStr()); 168 mItem->setText(2,t->dtStartTimeStr());
169 } 169 }
170 } else { 170 } else {
171 mItem->setText(1,"---"); 171 mItem->setText(1,"---");
172 mItem->setText(2,"---"); 172 mItem->setText(2,"---");
173 } 173 }
174 mItem->setText(3,"---"); 174 mItem->setText(3,"---");
175 mItem->setText(4,"---"); 175 mItem->setText(4,"---");
176 if ( t->isAlarmEnabled() ) { 176 if ( t->isAlarmEnabled() ) {
177 mItem->setText(5,t->alarms().first()->offsetText() ); 177 mItem->setText(5,t->alarms().first()->offsetText() );
178 } else { 178 } else {
179 mItem->setText(5, i18n("No")); 179 mItem->setText(5, i18n("No"));
180 } 180 }
181 mItem->setText(6, t->recurrence()->recurrenceText()); 181 mItem->setText(6, t->recurrence()->recurrenceText());
182 if( ! t->doesRecur() ) 182 if( ! t->doesRecur() )
183 mItem->setSortKey( 6, "-" ); 183 mItem->setSortKey( 6, "-" );
184 if (t->hasDueDate()) { 184 if (t->hasDueDate()) {
185 mItem->setText(7,t->dtDueDateStr()); 185 mItem->setText(7,t->dtDueDateStr());
186 if (t->doesFloat()) { 186 if (t->doesFloat()) {
187 mItem->setText(8,"---"); 187 mItem->setText(8,"---");
188 } else { 188 } else {
189 mItem->setText(8,t->dtDueTimeStr()); 189 mItem->setText(8,t->dtDueTimeStr());
190 } 190 }
191 } else { 191 } else {
192 mItem->setText(7,"---"); 192 mItem->setText(7,"---");
193 mItem->setText(8,"---"); 193 mItem->setText(8,"---");
194 } 194 }
195 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 195 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
196 mItem->setText(10,t->categoriesStr()); 196 mItem->setText(10,t->categoriesStr());
197 mItem->setText(11, KOPrefs::instance()->calName( t->calID() )); 197 mItem->setText(11, KOPrefs::instance()->calName( t->calID() ));
198 198
199 QString key; 199 QString key;
200 QDate d; 200 QDate d;
201 if (t->hasDueDate()) { 201 if (t->hasDueDate()) {
202 d = t->dtDue().date(); 202 d = t->dtDue().date();
203 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 203 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
204 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 204 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
205 mItem->setSortKey(7,key); 205 mItem->setSortKey(7,key);
206 } 206 }
207 if ( t->hasStartDate() ) { 207 if ( t->hasStartDate() ) {
208 d = t->dtStart().date(); 208 d = t->dtStart().date();
209 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 209 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
210 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 210 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
211 mItem->setSortKey(1,key); 211 mItem->setSortKey(1,key);
212 } 212 }
213 return true; 213 return true;
214} 214}
215 215
216bool ListItemVisitor::visit(Journal * j) 216bool ListItemVisitor::visit(Journal * j)
217{ 217{
218 QString des = j->description().left(30); 218
219 des = des.simplifyWhiteSpace (); 219 QString des;
220 des.replace (QRegExp ("\\n"),"" ); 220 if ( !j->summary().isEmpty() ) {
221 des.replace (QRegExp ("\\r"),"" ); 221 des = j->summary();
222 } else {
223 des = j->description().left(30);
224 des = des.simplifyWhiteSpace ();
225 des.replace (QRegExp ("\\n"),"" );
226 des.replace (QRegExp ("\\r"),"" );
227 }
222 mItem->setText(0,i18n("Journal: ")+des.left(25)); 228 mItem->setText(0,i18n("Journal: ")+des.left(25));
223 mItem->setText(1,j->dtStartDateStr()); 229 mItem->setText(1,j->dtStartDateStr());
224 mItem->setText(2,"---"); 230 mItem->setText(2,"---");
225 mItem->setText(3,"---"); 231 mItem->setText(3,"---");
226 mItem->setText(4,"---"); 232 mItem->setText(4,"---");
227 mItem->setText(5,"---"); 233 mItem->setText(5,"---");
228 mItem->setText(6,"---"); 234 mItem->setText(6,"---");
229 mItem->setText(7,j->dtStartDateStr()); 235 mItem->setText(7,j->dtStartDateStr());
230 mItem->setText(8,"---"); 236 mItem->setText(8,"---");
231 mItem->setText(9,"---"); 237 mItem->setText(9,"---");
232 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 238 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
233 mItem->setText(11, KOPrefs::instance()->calName( j->calID() )); 239 mItem->setText(11, KOPrefs::instance()->calName( j->calID() ));
234 240
235 QString key; 241 QString key;
236 QDate d = j->dtStart().date(); 242 QDate d = j->dtStart().date();
237 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 243 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
238 mItem->setSortKey(1,key); 244 mItem->setSortKey(1,key);
239 mItem->setSortKey(7,key); 245 mItem->setSortKey(7,key);
240 246
241 return true; 247 return true;
242} 248}
243 249
244KOListView::KOListView(Calendar *calendar, QWidget *parent, 250KOListView::KOListView(Calendar *calendar, QWidget *parent,
245 const char *name) 251 const char *name)
246 : KOEventView(calendar, parent, name) 252 : KOEventView(calendar, parent, name)
247{ 253{
248 254
249 mActiveItem = 0; 255 mActiveItem = 0;
250 mForceShowCompletedTodos = false; 256 mForceShowCompletedTodos = false;
251 mListView = new KOListViewListView(this); 257 mListView = new KOListViewListView(this);
252 mListView->addColumn(i18n("Summary")); 258 mListView->addColumn(i18n("Summary"));
253 mListView->addColumn(i18n("Start Date")); 259 mListView->addColumn(i18n("Start Date"));
254 mListView->addColumn(i18n("Start Time")); 260 mListView->addColumn(i18n("Start Time"));
255 mListView->addColumn(i18n("End Date")); 261 mListView->addColumn(i18n("End Date"));
256 mListView->addColumn(i18n("End Time")); 262 mListView->addColumn(i18n("End Time"));
257 mListView->addColumn(i18n("Alarm")); // alarm set? 263 mListView->addColumn(i18n("Alarm")); // alarm set?
258 mListView->addColumn(i18n("Recurs")); // recurs? 264 mListView->addColumn(i18n("Recurs")); // recurs?
259 mListView->addColumn(i18n("Due Date")); 265 mListView->addColumn(i18n("Due Date"));
260 mListView->addColumn(i18n("Due Time")); 266 mListView->addColumn(i18n("Due Time"));
261 mListView->addColumn(i18n("Cancelled")); 267 mListView->addColumn(i18n("Cancelled"));
262 mListView->addColumn(i18n("Categories")); 268 mListView->addColumn(i18n("Categories"));
263 mListView->addColumn(i18n("Calendar")); 269 mListView->addColumn(i18n("Calendar"));
264 270
265 mListView->setColumnAlignment(0,AlignLeft); 271 mListView->setColumnAlignment(0,AlignLeft);
266 mListView->setColumnAlignment(1,AlignLeft); 272 mListView->setColumnAlignment(1,AlignLeft);
267 mListView->setColumnAlignment(2,AlignHCenter); 273 mListView->setColumnAlignment(2,AlignHCenter);
268 mListView->setColumnAlignment(3,AlignLeft); 274 mListView->setColumnAlignment(3,AlignLeft);
269 mListView->setColumnAlignment(4,AlignHCenter); 275 mListView->setColumnAlignment(4,AlignHCenter);
270 mListView->setColumnAlignment(5,AlignLeft); 276 mListView->setColumnAlignment(5,AlignLeft);
271 mListView->setColumnAlignment(6,AlignLeft); 277 mListView->setColumnAlignment(6,AlignLeft);
272 mListView->setColumnAlignment(7,AlignLeft); 278 mListView->setColumnAlignment(7,AlignLeft);
273 mListView->setColumnAlignment(8,AlignLeft); 279 mListView->setColumnAlignment(8,AlignLeft);
274 mListView->setColumnAlignment(9,AlignLeft); 280 mListView->setColumnAlignment(9,AlignLeft);
275 mListView->setColumnAlignment(10,AlignLeft); 281 mListView->setColumnAlignment(10,AlignLeft);
276 mListView->setColumnAlignment(11,AlignLeft); 282 mListView->setColumnAlignment(11,AlignLeft);
277 mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this); 283 mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this);
278 284
279 int iii = 0; 285 int iii = 0;
280 for ( iii = 0; iii< 12 ; ++iii ) 286 for ( iii = 0; iii< 12 ; ++iii )
281 mListView->setColumnWidthMode( iii, QListView::Manual ); 287 mListView->setColumnWidthMode( iii, QListView::Manual );
282 288
283 QBoxLayout *layoutTop = new QVBoxLayout(this); 289 QBoxLayout *layoutTop = new QVBoxLayout(this);
284 layoutTop->addWidget(mListView); 290 layoutTop->addWidget(mListView);
285 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 291 mListView->setFont ( KOPrefs::instance()->mListViewFont );
286 mPopupMenu = eventPopup(); 292 mPopupMenu = eventPopup();
287 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 293 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
288 i18n("Select all"),this, 294 i18n("Select all"),this,
289 SLOT(allSelection()),true); 295 SLOT(allSelection()),true);
290 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 296 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
291 i18n("Deselect all"),this, 297 i18n("Deselect all"),this,
292 SLOT(clearSelection()),true); 298 SLOT(clearSelection()),true);
293 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 299 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
294 i18n("Delete all selected"),this, 300 i18n("Delete all selected"),this,
295 SLOT(deleteAll()),true); 301 SLOT(deleteAll()),true);
296 302
297 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 303 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
298 i18n("Hide all selected"),this, 304 i18n("Hide all selected"),this,
299 SLOT(hideAll()),true); 305 SLOT(hideAll()),true);
300 306
301 mPopupMenu->insertSeparator(); 307 mPopupMenu->insertSeparator();
302#ifdef DESKTOP_VERSION 308#ifdef DESKTOP_VERSION
303 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 309 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
304 i18n("Print complete list"),this, 310 i18n("Print complete list"),this,
305 SLOT(printList()),true); 311 SLOT(printList()),true);
306 mPopupMenu->insertSeparator(); 312 mPopupMenu->insertSeparator();
307#endif 313#endif
308 mCalPopup = new QPopupMenu ( this ); 314 mCalPopup = new QPopupMenu ( this );
309 mPopupMenu->insertItem( i18n("Set Calendar"), mCalPopup ); 315 mPopupMenu->insertItem( i18n("Set Calendar"), mCalPopup );
310 316
311 QObject::connect(mCalPopup,SIGNAL(aboutToShow()),this, 317 QObject::connect(mCalPopup,SIGNAL(aboutToShow()),this,
312 SLOT( populateCalPopup() )); 318 SLOT( populateCalPopup() ));
313 QObject::connect(mCalPopup,SIGNAL(activated( int )),this, 319 QObject::connect(mCalPopup,SIGNAL(activated( int )),this,
314 SLOT( setCalendar( int ) )); 320 SLOT( setCalendar( int ) ));
315 QPopupMenu * exportPO = new QPopupMenu ( this ); 321 QPopupMenu * exportPO = new QPopupMenu ( this );
316 mPopupMenu->insertItem( i18n("Export selected"), exportPO ); 322 mPopupMenu->insertItem( i18n("Export selected"), exportPO );
317 exportPO->insertItem( i18n("As iCal (ics) file..."),this, 323 exportPO->insertItem( i18n("As iCal (ics) file..."),this,
318 SLOT(saveToFile())); 324 SLOT(saveToFile()));
319 exportPO->insertItem( i18n("As vCal (vcs) file..."),this, 325 exportPO->insertItem( i18n("As vCal (vcs) file..."),this,
320 SLOT(saveToFileVCS())); 326 SLOT(saveToFileVCS()));
321 exportPO->insertItem( i18n("Journal/Details..."),this, 327 exportPO->insertItem( i18n("Journal/Details..."),this,
322 SLOT(saveDescriptionToFile())); 328 SLOT(saveDescriptionToFile()));
323 // mPopupMenu->insertSeparator(); 329 // mPopupMenu->insertSeparator();
324 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 330 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
325 i18n("Add Categ. to selected..."),this, 331 i18n("Add Categ. to selected..."),this,
326 SLOT(addCat()),true); 332 SLOT(addCat()),true);
327 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 333 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
328 i18n("Set Categ. for selected..."),this, 334 i18n("Set Categ. for selected..."),this,
329 SLOT(setCat()),true); 335 SLOT(setCat()),true);
330 //mPopupMenu->insertSeparator(); 336 //mPopupMenu->insertSeparator();
331 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 337 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
332 i18n("Set alarm for selected..."),this, 338 i18n("Set alarm for selected..."),this,
333 SLOT(setAlarm()),true); 339 SLOT(setAlarm()),true);
334 340
335 341
336 342
337#ifndef DESKTOP_VERSION 343#ifndef DESKTOP_VERSION
338 mPopupMenu->insertSeparator(); 344 mPopupMenu->insertSeparator();
339 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 345 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
340 i18n("Beam selected via IR"),this, 346 i18n("Beam selected via IR"),this,
341 SLOT(beamSelected()),true); 347 SLOT(beamSelected()),true);
342#endif 348#endif
343 /* 349 /*
344 mPopupMenu = new QPopupMenu; 350 mPopupMenu = new QPopupMenu;
345 mPopupMenu->insertItem(i18n("Edit Event"), this, 351 mPopupMenu->insertItem(i18n("Edit Event"), this,
346 SLOT (editEvent())); 352 SLOT (editEvent()));
347 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 353 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
348 SLOT (deleteEvent())); 354 SLOT (deleteEvent()));
349 mPopupMenu->insertSeparator(); 355 mPopupMenu->insertSeparator();
350 mPopupMenu->insertItem(i18n("Show Dates"), this, 356 mPopupMenu->insertItem(i18n("Show Dates"), this,
351 SLOT(showDates())); 357 SLOT(showDates()));
352 mPopupMenu->insertItem(i18n("Hide Dates"), this, 358 mPopupMenu->insertItem(i18n("Hide Dates"), this,
353 SLOT(hideDates())); 359 SLOT(hideDates()));
354 */ 360 */
355 QObject::connect(mListView,SIGNAL( newEvent()), 361 QObject::connect(mListView,SIGNAL( newEvent()),
356 this,SIGNAL(signalNewEvent())); 362 this,SIGNAL(signalNewEvent()));
357 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 363 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
358 this,SLOT(defaultItemAction(QListViewItem *))); 364 this,SLOT(defaultItemAction(QListViewItem *)));
359 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *, 365 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *,
360 const QPoint &, int )), 366 const QPoint &, int )),
361 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 367 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
362 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 368 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
363 SLOT(processSelectionChange(QListViewItem *))); 369 SLOT(processSelectionChange(QListViewItem *)));
364 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 370 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
365 SIGNAL(showIncidenceSignal(Incidence *)) ); 371 SIGNAL(showIncidenceSignal(Incidence *)) );
366 372
367 readSettings(KOGlobals::config(),"KOListView Layout"); 373 readSettings(KOGlobals::config(),"KOListView Layout");
368} 374}
369 375
370KOListView::~KOListView() 376KOListView::~KOListView()
371{ 377{
372 delete mPopupMenu; 378 delete mPopupMenu;
373#if QT_VERSION >= 0x030000 379#if QT_VERSION >= 0x030000
374 380
375#else 381#else
376 delete mKOListViewWhatsThis; 382 delete mKOListViewWhatsThis;
377#endif 383#endif
378} 384}
379 385
380QString KOListView::getWhatsThisText(QPoint p) 386QString KOListView::getWhatsThisText(QPoint p)
381{ 387{
382 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 388 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
383 if ( item ) 389 if ( item )
384 return KIncidenceFormatter::instance()->getFormattedText( item->data(), 390 return KIncidenceFormatter::instance()->getFormattedText( item->data(),
385 KOPrefs::instance()->mWTshowDetails, 391 KOPrefs::instance()->mWTshowDetails,
386 KOPrefs::instance()->mWTshowCreated, 392 KOPrefs::instance()->mWTshowCreated,
387 KOPrefs::instance()->mWTshowChanged); 393 KOPrefs::instance()->mWTshowChanged);
388 return i18n("That is the list view" ); 394 return i18n("That is the list view" );
389 395
390} 396}
391 397
392void KOListView::setCalendar( int c ) 398void KOListView::setCalendar( int c )
393{ 399{
394 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 400 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
395 i18n("This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!").arg( KOPrefs::instance()->calName( c ) ), 401 i18n("This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!").arg( KOPrefs::instance()->calName( c ) ),
396 i18n("Continue"), i18n("Cancel"), 0, 402 i18n("Continue"), i18n("Cancel"), 0,
397 0, 1 ); 403 0, 1 );
398 if ( result != 0 ) { 404 if ( result != 0 ) {
399 return; 405 return;
400 } 406 }
401 407
402 QPtrList<Incidence> delSel = getSelectedIncidences() ; 408 QPtrList<Incidence> delSel = getSelectedIncidences() ;
403 int icount = delSel.count(); 409 int icount = delSel.count();
404 if ( icount ) { 410 if ( icount ) {
405 Incidence *incidence = delSel.first(); 411 Incidence *incidence = delSel.first();
406 while ( incidence ) { 412 while ( incidence ) {
407 incidence->setCalID( c ); 413 incidence->setCalID( c );
408 KOListViewItem * item = getItemForEvent( incidence ); 414 KOListViewItem * item = getItemForEvent( incidence );
409 if ( item ) { 415 if ( item ) {
410 ListItemVisitor v(item, mStartDate ); 416 ListItemVisitor v(item, mStartDate );
411 incidence->accept(v); 417 incidence->accept(v);
412 } 418 }
413 incidence = delSel.next(); 419 incidence = delSel.next();
414 } 420 }
415 } 421 }
416 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 422 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
417 KopiCalendarFile * cal = calendars.first(); 423 KopiCalendarFile * cal = calendars.first();
418 while ( cal ) { 424 while ( cal ) {
419 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 425 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
420 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 426 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
421 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 427 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
422 if ( cal->isStandard ) 428 if ( cal->isStandard )
423 mCalendar->setDefaultCalendar( cal->mCalNumber ); 429 mCalendar->setDefaultCalendar( cal->mCalNumber );
424 cal = calendars.next(); 430 cal = calendars.next();
425 } 431 }
426 mCalendar->setSyncEventsReadOnly(); 432 mCalendar->setSyncEventsReadOnly();
427 mCalendar->reInitAlarmSettings(); 433 mCalendar->reInitAlarmSettings();
428 434
429} 435}
430void KOListView::populateCalPopup() 436void KOListView::populateCalPopup()
431{ 437{
432 mCalPopup->clear(); 438 mCalPopup->clear();
433 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 439 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
434 while ( kkf ) { 440 while ( kkf ) {
435 mCalPopup->insertItem( kkf->mName, kkf->mCalNumber); 441 mCalPopup->insertItem( kkf->mName, kkf->mCalNumber);
436 kkf = KOPrefs::instance()->mCalendars.next(); 442 kkf = KOPrefs::instance()->mCalendars.next();
437 } 443 }
438} 444}
439void KOListView::updateList() 445void KOListView::updateList()
440{ 446{
441 // qDebug(" KOListView::updateList() "); 447 // qDebug(" KOListView::updateList() ");
442 448
443} 449}
444 450
445void KOListView::clearList() 451void KOListView::clearList()
446{ 452{
447 clear (); 453 clear ();
448} 454}
449void KOListView::addCat( ) 455void KOListView::addCat( )
450{ 456{
451 setCategories( false ); 457 setCategories( false );
452} 458}
453void KOListView::setCat() 459void KOListView::setCat()
454{ 460{
455 setCategories( true ); 461 setCategories( true );
456} 462}
457 463
458void KOListView::setAlarm() 464void KOListView::setAlarm()
459{ 465{
460 KOAlarmPrefs kap( this); 466 KOAlarmPrefs kap( this);
461 if ( !kap.exec() ) 467 if ( !kap.exec() )
462 return; 468 return;
463 QStringList itemList; 469 QStringList itemList;
464 QPtrList<KOListViewItem> sel ; 470 QPtrList<KOListViewItem> sel ;
465 QListViewItem *qitem = mListView->firstChild (); 471 QListViewItem *qitem = mListView->firstChild ();
466 while ( qitem ) { 472 while ( qitem ) {
467 if ( qitem->isSelected() ) { 473 if ( qitem->isSelected() ) {
468 Incidence* inc = ((KOListViewItem *) qitem)->data(); 474 Incidence* inc = ((KOListViewItem *) qitem)->data();
469 if ( inc->typeID() != journalID ) { 475 if ( inc->typeID() != journalID ) {
470 if ( inc->typeID() == todoID ) { 476 if ( inc->typeID() == todoID ) {
471 if ( ((Todo*)inc)->hasDueDate() ) 477 if ( ((Todo*)inc)->hasDueDate() )
472 sel.append(((KOListViewItem *)qitem)); 478 sel.append(((KOListViewItem *)qitem));
473 } else 479 } else
474 sel.append(((KOListViewItem *)qitem)); 480 sel.append(((KOListViewItem *)qitem));
475 } 481 }
476 } 482 }
477 qitem = qitem->nextSibling(); 483 qitem = qitem->nextSibling();
478 } 484 }
479 int count = 0; 485 int count = 0;
480 KOListViewItem * item, *temp; 486 KOListViewItem * item, *temp;
481 item = sel.first(); 487 item = sel.first();
482 Incidence* inc; 488 Incidence* inc;
483 while ( item ) { 489 while ( item ) {
484 inc = item->data(); 490 inc = item->data();
485 ++count; 491 ++count;
486 if (kap.mAlarmButton->isChecked()) { 492 if (kap.mAlarmButton->isChecked()) {
487 if (inc->alarms().count() == 0) 493 if (inc->alarms().count() == 0)
488 inc->newAlarm(); 494 inc->newAlarm();
489 QPtrList<Alarm> alarms = inc->alarms(); 495 QPtrList<Alarm> alarms = inc->alarms();
490 Alarm *alarm; 496 Alarm *alarm;
491 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 497 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
492 alarm->setEnabled(true); 498 alarm->setEnabled(true);
493 int j = kap.mAlarmTimeEdit->value()* -60; 499 int j = kap.mAlarmTimeEdit->value()* -60;
494 if (kap.mAlarmIncrCombo->currentItem() == 1) 500 if (kap.mAlarmIncrCombo->currentItem() == 1)
495 j = j * 60; 501 j = j * 60;
496 else if (kap.mAlarmIncrCombo->currentItem() == 2) 502 else if (kap.mAlarmIncrCombo->currentItem() == 2)
497 j = j * (60 * 24); 503 j = j * (60 * 24);
498 alarm->setStartOffset( j ); 504 alarm->setStartOffset( j );
499 505
500 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 506 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
501 alarm->setProcedureAlarm(kap.mAlarmProgram); 507 alarm->setProcedureAlarm(kap.mAlarmProgram);
502 } 508 }
503 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 509 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
504 alarm->setAudioAlarm(kap.mAlarmSound); 510 alarm->setAudioAlarm(kap.mAlarmSound);
505 else 511 else
506 alarm->setType(Alarm::Invalid); 512 alarm->setType(Alarm::Invalid);
507 //alarm->setAudioAlarm("default"); 513 //alarm->setAudioAlarm("default");
508 // TODO: Deal with multiple alarms 514 // TODO: Deal with multiple alarms
509 break; // For now, stop after the first alarm 515 break; // For now, stop after the first alarm
510 } 516 }
511 } else { 517 } else {
512 Alarm* alarm = inc->alarms().first(); 518 Alarm* alarm = inc->alarms().first();
513 if ( alarm ) { 519 if ( alarm ) {
514 alarm->setEnabled(false); 520 alarm->setEnabled(false);
515 alarm->setType(Alarm::Invalid); 521 alarm->setType(Alarm::Invalid);
516 } 522 }
517 } 523 }
518 ListItemVisitor v(item, mStartDate ); 524 ListItemVisitor v(item, mStartDate );
519 inc->accept(v); 525 inc->accept(v);
520 item = sel.next(); 526 item = sel.next();
521 } 527 }
522 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) ); 528 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) );
523 qDebug("KO: Set alarm for %d items", count); 529 qDebug("KO: Set alarm for %d items", count);
524 calendar()->reInitAlarmSettings(); 530 calendar()->reInitAlarmSettings();
525 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 531 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
526} 532}
527void KOListView::setCategories( bool removeOld ) 533void KOListView::setCategories( bool removeOld )
528{ 534{
529 535
530 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 536 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
531 csd->setColorEnabled(); 537 csd->setColorEnabled();
532 if (! csd->exec()) { 538 if (! csd->exec()) {
533 delete csd; 539 delete csd;
534 return; 540 return;
535 } 541 }
536 QStringList catList = csd->selectedCategories(); 542 QStringList catList = csd->selectedCategories();
537 delete csd; 543 delete csd;
538 // if ( catList.count() == 0 ) 544 // if ( catList.count() == 0 )
539 // return; 545 // return;
540 //catList.sort(); 546 //catList.sort();
541 QString categoriesStr = catList.join(","); 547 QString categoriesStr = catList.join(",");
542 int i; 548 int i;
543 QStringList itemList; 549 QStringList itemList;
544 QPtrList<KOListViewItem> sel ; 550 QPtrList<KOListViewItem> sel ;
545 QListViewItem *qitem = mListView->firstChild (); 551 QListViewItem *qitem = mListView->firstChild ();
546 while ( qitem ) { 552 while ( qitem ) {
547 if ( qitem->isSelected() ) { 553 if ( qitem->isSelected() ) {
548 sel.append(((KOListViewItem *)qitem)); 554 sel.append(((KOListViewItem *)qitem));
549 } 555 }
550 qitem = qitem->nextSibling(); 556 qitem = qitem->nextSibling();
551 } 557 }
552 KOListViewItem * item, *temp; 558 KOListViewItem * item, *temp;
553 item = sel.first(); 559 item = sel.first();
554 if( item ) { 560 if( item ) {
555 Incidence* inc = item->data() ; 561 Incidence* inc = item->data() ;
556 bool setSub = false; 562 bool setSub = false;
557 if( inc->typeID() == todoID && sel.count() == 1 && inc->relations().count() > 0 ) { 563 if( inc->typeID() == todoID && sel.count() == 1 && inc->relations().count() > 0 ) {
558 int result = KMessageBox::warningYesNoCancel(this, 564 int result = KMessageBox::warningYesNoCancel(this,
559 i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ), 565 i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ),
560 i18n("Todo has subtodos"), 566 i18n("Todo has subtodos"),
561 i18n("Yes"), 567 i18n("Yes"),
562 i18n("No")); 568 i18n("No"));
563 if (result == KMessageBox::Cancel) item = 0; 569 if (result == KMessageBox::Cancel) item = 0;
564 if (result == KMessageBox::Yes) setSub = true; 570 if (result == KMessageBox::Yes) setSub = true;
565 } 571 }
566 while ( item ) { 572 while ( item ) {
567 inc = item->data(); 573 inc = item->data();
568 if ( removeOld ) { 574 if ( removeOld ) {
569 inc->setCategories( catList, setSub ); 575 inc->setCategories( catList, setSub );
570 } else { 576 } else {
571 inc->addCategories( catList, setSub ); 577 inc->addCategories( catList, setSub );
572 } 578 }
573 ListItemVisitor v(item, mStartDate ); 579 ListItemVisitor v(item, mStartDate );
574 inc->accept(v); 580 inc->accept(v);
575 item = sel.next(); 581 item = sel.next();
576 } 582 }
577 } 583 }
578 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 584 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
579} 585}
580 586
581void KOListView::beamSelected() 587void KOListView::beamSelected()
582{ 588{
583 QPtrList<Incidence> delSel = getSelectedIncidences() ; 589 QPtrList<Incidence> delSel = getSelectedIncidences() ;
584 int icount = delSel.count(); 590 int icount = delSel.count();
585 if ( icount ) { 591 if ( icount ) {
586 emit beamIncidenceList( delSel ); 592 emit beamIncidenceList( delSel );
587 return; 593 return;
588 QString fn ; 594 QString fn ;
589 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 595 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
590 QString mes; 596 QString mes;
591 bool createbup = true; 597 bool createbup = true;
592 if ( createbup ) { 598 if ( createbup ) {
593 QString description = "\n"; 599 QString description = "\n";
594 CalendarLocal* cal = new CalendarLocal(); 600 CalendarLocal* cal = new CalendarLocal();
595 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 601 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
596 Incidence *incidence = delSel.first(); 602 Incidence *incidence = delSel.first();
597 while ( incidence ) { 603 while ( incidence ) {
598 Incidence *in = incidence->clone(); 604 Incidence *in = incidence->clone();
599 description += in->summary() + "\n"; 605 description += in->summary() + "\n";
600 cal->addIncidence( in ); 606 cal->addIncidence( in );
601 incidence = delSel.next(); 607 incidence = delSel.next();
602 } 608 }
603 FileStorage storage( cal, fn, new VCalFormat ); 609 FileStorage storage( cal, fn, new VCalFormat );
604 storage.save(); 610 storage.save();
605 delete cal; 611 delete cal;
606 mes = i18n("KO/Pi: Ready for beaming"); 612 mes = i18n("KO/Pi: Ready for beaming");
607 topLevelWidget()->setCaption(mes); 613 topLevelWidget()->setCaption(mes);
608 614
609#ifndef DESKTOP_VERSION 615#ifndef DESKTOP_VERSION
610 Ir *ir = new Ir( this ); 616 Ir *ir = new Ir( this );
611 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 617 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
612 ir->send( fn, description, "text/x-vCalendar" ); 618 ir->send( fn, description, "text/x-vCalendar" );
613#endif 619#endif
614 } 620 }
615 } 621 }
616} 622}
617void KOListView::beamDone( Ir *ir ) 623void KOListView::beamDone( Ir *ir )
618{ 624{
619#ifndef DESKTOP_VERSION 625#ifndef DESKTOP_VERSION
620 delete ir; 626 delete ir;
621#endif 627#endif
622 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 628 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
623} 629}
624 630
625void KOListView::saveDescriptionToFile() 631void KOListView::saveDescriptionToFile()
626{ 632{
627 633
628 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 634 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
629 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 635 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
630 i18n("Continue"), i18n("Cancel"), 0, 636 i18n("Continue"), i18n("Cancel"), 0,
631 0, 1 ); 637 0, 1 );
632 if ( result != 0 ) { 638 if ( result != 0 ) {
633 return; 639 return;
634 } 640 }
635 QPtrList<Incidence> delSel = getSelectedIncidences() ; 641 QPtrList<Incidence> delSel = getSelectedIncidences() ;
636 int icount = delSel.count(); 642 int icount = delSel.count();
637 if ( icount ) { 643 if ( icount ) {
638 QString fn = KOPrefs::instance()->mLastSaveFile; 644 QString fn = KOPrefs::instance()->mLastSaveFile;
639 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 645 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
640 646
641 if ( fn == "" ) 647 if ( fn == "" )
642 return; 648 return;
643 QFileInfo info; 649 QFileInfo info;
644 info.setFile( fn ); 650 info.setFile( fn );
645 QString mes; 651 QString mes;
646 bool createbup = true; 652 bool createbup = true;
647 if ( info. exists() ) { 653 if ( info. exists() ) {
648 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 654 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
649 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 655 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
650 i18n("Overwrite!"), i18n("Cancel"), 0, 656 i18n("Overwrite!"), i18n("Cancel"), 0,
651 0, 1 ); 657 0, 1 );
652 if ( result != 0 ) { 658 if ( result != 0 ) {
653 createbup = false; 659 createbup = false;
654 } 660 }
655 } 661 }
656 if ( createbup ) { 662 if ( createbup ) {
657 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 663 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
658 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 664 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
659 Incidence *incidence = delSel.first(); 665 Incidence *incidence = delSel.first();
660 icount = 0; 666 icount = 0;
661 while ( incidence ) { 667 while ( incidence ) {
662 if ( incidence->typeID() == journalID ) { 668 if ( incidence->typeID() == journalID ) {
663 text += "\n************************************\n"; 669 text += "\n************************************\n";
664 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 670 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
665 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 671 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
666 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 672 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
667 ++icount; 673 ++icount;
668 674
669 } else { 675 } else {
670 if ( !incidence->description().isEmpty() ) { 676 if ( !incidence->description().isEmpty() ) {
671 text += "\n************************************\n"; 677 text += "\n************************************\n";
672 if ( incidence->typeID() == todoID ) 678 if ( incidence->typeID() == todoID )
673 text += i18n("To-Do: "); 679 text += i18n("To-Do: ");
674 text += incidence->summary(); 680 text += incidence->summary();
675 if ( incidence->hasStartDate() ) 681 if ( incidence->hasStartDate() )
676 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 682 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
677 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 683 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
678 if ( !incidence->location().isEmpty() ) 684 if ( !incidence->location().isEmpty() )
679 text += "\n" +i18n("Location: ") + incidence->location(); 685 text += "\n" +i18n("Location: ") + incidence->location();
680 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 686 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
681 ++icount; 687 ++icount;
682 688
683 } 689 }
684 } 690 }
685 incidence = delSel.next(); 691 incidence = delSel.next();
686 } 692 }
687 QFile file( fn ); 693 QFile file( fn );
688 if (!file.open( IO_WriteOnly ) ) { 694 if (!file.open( IO_WriteOnly ) ) {
689 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 695 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
690 return; 696 return;
691 } 697 }
692 QTextStream ts( &file ); 698 QTextStream ts( &file );
693 ts << text; 699 ts << text;
694 file.close(); 700 file.close();
695 //qDebug("%s ", text.latin1()); 701 //qDebug("%s ", text.latin1());
696 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 702 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
697 KOPrefs::instance()->mLastSaveFile = fn; 703 KOPrefs::instance()->mLastSaveFile = fn;
698 topLevelWidget()->setCaption(mes); 704 topLevelWidget()->setCaption(mes);
699 } 705 }
700 } 706 }
701} 707}
702void KOListView::saveToFileVCS() 708void KOListView::saveToFileVCS()
703{ 709{
704 writeToFile( false ); 710 writeToFile( false );
705} 711}
706void KOListView::saveToFile() 712void KOListView::saveToFile()
707{ 713{
708 writeToFile( true ); 714 writeToFile( true );
709} 715}
710QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos ) 716QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos )
711{ 717{
712 QPtrList<Incidence> delSel ; 718 QPtrList<Incidence> delSel ;
713 bool addSubTodos = false; 719 bool addSubTodos = false;
714 bool askSubTodos = true; 720 bool askSubTodos = true;
715 QListViewItem *item = mListView->firstChild (); 721 QListViewItem *item = mListView->firstChild ();
716 while ( item ) { 722 while ( item ) {
717 if ( item->isSelected() ) { 723 if ( item->isSelected() ) {
718 Incidence* inc = ((KOListViewItem *)item)->data(); 724 Incidence* inc = ((KOListViewItem *)item)->data();
719 if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) { 725 if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) {
720 if ( (inc->typeID() == todoID && includeTodos) || 726 if ( (inc->typeID() == todoID && includeTodos) ||
721 (inc->typeID() == eventID && includeEvents) || 727 (inc->typeID() == eventID && includeEvents) ||
722 (inc->typeID() == journalID && includeJournals) ) { 728 (inc->typeID() == journalID && includeJournals) ) {
723 if ( inc->typeID() == todoID && onlyDueTodos ) { 729 if ( inc->typeID() == todoID && onlyDueTodos ) {
724 if ( ((Todo*)inc)->hasDueDate() ) 730 if ( ((Todo*)inc)->hasDueDate() )
725 delSel.append( inc ); 731 delSel.append( inc );
726 } else 732 } else
727 delSel.append( inc ); 733 delSel.append( inc );
728 734
729 } 735 }
730 } 736 }
731 if ( inc->typeID() == todoID ) { 737 if ( inc->typeID() == todoID ) {
732 Todo * todo = (Todo*) inc; 738 Todo * todo = (Todo*) inc;
733 if ( todo->relations().count() ) { 739 if ( todo->relations().count() ) {
734 if ( askSubTodos ) { 740 if ( askSubTodos ) {
735 int result = KMessageBox::warningYesNoCancel(this, 741 int result = KMessageBox::warningYesNoCancel(this,
736 i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"), 742 i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"),
737 i18n("Todo has subtodos"), 743 i18n("Todo has subtodos"),
738 i18n("Yes"), 744 i18n("Yes"),
739 i18n("No")); 745 i18n("No"));
740 if ( result == KMessageBox::Cancel ) { 746 if ( result == KMessageBox::Cancel ) {
741 delSel.clear(); 747 delSel.clear();
742 return delSel; 748 return delSel;
743 } 749 }
744 if (result == KMessageBox::Yes) 750 if (result == KMessageBox::Yes)
745 addSubTodos = true; 751 addSubTodos = true;
746 askSubTodos = false; 752 askSubTodos = false;
747 } 753 }
748 if ( addSubTodos ) { 754 if ( addSubTodos ) {
749 inc->addRelationsToList( &delSel ); 755 inc->addRelationsToList( &delSel );
750 } 756 }
751 } 757 }
752 } 758 }
753 } 759 }
754 item = item->nextSibling(); 760 item = item->nextSibling();
755 } 761 }
756 return delSel; 762 return delSel;
757} 763}
758 764
759void KOListView::writeToFile( bool iCal ) 765void KOListView::writeToFile( bool iCal )
760{ 766{
761 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed; 767 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;
762 if ( !iCal ) { 768 if ( !iCal ) {
763 bool journal = false; 769 bool journal = false;
764 Incidence *incidence = delSel.first(); 770 Incidence *incidence = delSel.first();
765 while ( incidence ) { 771 while ( incidence ) {
766 if ( incidence->typeID() == journalID ) { 772 if ( incidence->typeID() == journalID ) {
767 journal = true; 773 journal = true;
768 break; 774 break;
769 } 775 }
770 incidence = delSel.next(); 776 incidence = delSel.next();
771 } 777 }
772 if ( journal ) { 778 if ( journal ) {
773 int result = KMessageBox::warningContinueCancel(this, 779 int result = KMessageBox::warningContinueCancel(this,
774 i18n("The journal entries can not be\nexported to a vCalendar file."), 780 i18n("The journal entries can not be\nexported to a vCalendar file."),
775 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 781 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
776 true); 782 true);
777 if (result != KMessageBox::Continue) return; 783 if (result != KMessageBox::Continue) return;
778 } 784 }
779 } 785 }
780 if ( delSel.count() ) { 786 if ( delSel.count() ) {
781 QString fn = KOPrefs::instance()->mLastSaveFile; 787 QString fn = KOPrefs::instance()->mLastSaveFile;
782 QString extension; 788 QString extension;
783 if ( iCal ) { 789 if ( iCal ) {
784 if ( fn.right( 4 ).lower() == ".vcs" ) { 790 if ( fn.right( 4 ).lower() == ".vcs" ) {
785 fn = fn.left( fn.length() -3) + "ics"; 791 fn = fn.left( fn.length() -3) + "ics";
786 } 792 }
787 } else { 793 } else {
788 if ( fn.right( 4 ).lower() == ".ics" ) { 794 if ( fn.right( 4 ).lower() == ".ics" ) {
789 fn = fn.left( fn.length() -3) + "vcs"; 795 fn = fn.left( fn.length() -3) + "vcs";
790 } 796 }
791 } 797 }
792 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 798 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
793 799
794 if ( fn == "" ) 800 if ( fn == "" )
795 return; 801 return;
796 QFileInfo info; 802 QFileInfo info;
797 info.setFile( fn ); 803 info.setFile( fn );
798 QString mes; 804 QString mes;
799 bool createbup = true; 805 bool createbup = true;
800 if ( info. exists() ) { 806 if ( info. exists() ) {
801 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 807 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
802 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 808 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
803 i18n("Overwrite!"), i18n("Cancel"), 0, 809 i18n("Overwrite!"), i18n("Cancel"), 0,
804 0, 1 ); 810 0, 1 );
805 if ( result != 0 ) { 811 if ( result != 0 ) {
806 createbup = false; 812 createbup = false;
807 } 813 }
808 } 814 }
809 if ( createbup ) { 815 if ( createbup ) {
810 CalendarLocal cal; 816 CalendarLocal cal;
811 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 817 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
812 Incidence *incidence = delSel.first(); 818 Incidence *incidence = delSel.first();
813 while ( incidence ) { 819 while ( incidence ) {
814 cal.addIncidence( incidence->clone() ); 820 cal.addIncidence( incidence->clone() );
815 incidence = delSel.next(); 821 incidence = delSel.next();
816 } 822 }
817 if ( iCal ) { 823 if ( iCal ) {
818 ICalFormat format; 824 ICalFormat format;
819 format.save( &cal, fn ); 825 format.save( &cal, fn );
820 } else { 826 } else {
821 827
822 VCalFormat format; 828 VCalFormat format;
823 format.save( &cal, fn ); 829 format.save( &cal, fn );
824 } 830 }
825 mes = i18n("KO/Pi:Saved %1").arg(fn ); 831 mes = i18n("KO/Pi:Saved %1").arg(fn );
826 KOPrefs::instance()->mLastSaveFile = fn; 832 KOPrefs::instance()->mLastSaveFile = fn;
827 topLevelWidget()->setCaption(mes); 833 topLevelWidget()->setCaption(mes);
828 } 834 }
829 } 835 }
830 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 836 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
831} 837}
832void KOListView::hideAll() 838void KOListView::hideAll()
833{ 839{
834 QPtrList<QListViewItem> delSel ; 840 QPtrList<QListViewItem> delSel ;
835 QListViewItem *item = mListView->firstChild (); 841 QListViewItem *item = mListView->firstChild ();
836 while ( item ) { 842 while ( item ) {
837 if ( item->isSelected() ) { 843 if ( item->isSelected() ) {
838 delSel.append(item); 844 delSel.append(item);
839 } 845 }
840 item = item->nextSibling(); 846 item = item->nextSibling();
841 } 847 }
842 item = delSel.first() ; 848 item = delSel.first() ;
843 while ( item ) { 849 while ( item ) {
844 QListViewItem * del = item; 850 QListViewItem * del = item;
845 item = delSel.next(); 851 item = delSel.next();
846 delete del; 852 delete del;
847 } 853 }
848} 854}
849void KOListView::printList() 855void KOListView::printList()
850{ 856{
851 mListView->printList(); 857 mListView->printList();
852} 858}
853void KOListView::deleteAll() 859void KOListView::deleteAll()
854{ 860{
855 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;; 861 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;;
856 if ( delSel.count() ) { 862 if ( delSel.count() ) {
857 int icount = delSel.count(); 863 int icount = delSel.count();
858 Incidence *incidence = delSel.first(); 864 Incidence *incidence = delSel.first();
859 Incidence *toDelete; 865 Incidence *toDelete;
860 KOPrefs *p = KOPrefs::instance(); 866 KOPrefs *p = KOPrefs::instance();
861 bool confirm = p->mConfirm; 867 bool confirm = p->mConfirm;
862 QString mess; 868 QString mess;
863 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 869 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
864 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")) ) { 870 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")) ) {
865 p->mConfirm = false; 871 p->mConfirm = false;
866 int delCounter = 0; 872 int delCounter = 0;
867 QDialog dia ( this, "p-dialog", true ); 873 QDialog dia ( this, "p-dialog", true );
868 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 874 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
869 QVBoxLayout lay( &dia ); 875 QVBoxLayout lay( &dia );
870 lay.setMargin(7); 876 lay.setMargin(7);
871 lay.setSpacing(7); 877 lay.setSpacing(7);
872 lay.addWidget( &lab); 878 lay.addWidget( &lab);
873 QProgressBar bar( icount, &dia ); 879 QProgressBar bar( icount, &dia );
874 lay.addWidget( &bar); 880 lay.addWidget( &bar);
875 int w = 220; 881 int w = 220;
876 int h = 50; 882 int h = 50;
877 int dw = QApplication::desktop()->width(); 883 int dw = QApplication::desktop()->width();
878 int dh = QApplication::desktop()->height(); 884 int dh = QApplication::desktop()->height();
879 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 885 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
880 //dia.resize( 240,50 ); 886 //dia.resize( 240,50 );
881 dia.show(); 887 dia.show();
882 888
883 while ( incidence ) { 889 while ( incidence ) {
884 bar.setProgress( delCounter ); 890 bar.setProgress( delCounter );
885 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 891 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
886 dia.setCaption( mess ); 892 dia.setCaption( mess );
887 qApp->processEvents(); 893 qApp->processEvents();
888 toDelete = (incidence); 894 toDelete = (incidence);
889 incidence = delSel.next(); 895 incidence = delSel.next();
890 emit deleteIncidenceSignal(toDelete ); 896 emit deleteIncidenceSignal(toDelete );
891 if ( dia.result() != 0 ) 897 if ( dia.result() != 0 )
892 break; 898 break;
893 899
894 } 900 }
895 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 901 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
896 topLevelWidget ()->setCaption( mess ); 902 topLevelWidget ()->setCaption( mess );
897 p->mConfirm = confirm; 903 p->mConfirm = confirm;
898 } 904 }
899 } 905 }
900 906
901 907
902} 908}
903int KOListView::maxDatesHint() 909int KOListView::maxDatesHint()
904{ 910{
905 return 0; 911 return 0;
906} 912}
907 913
908int KOListView::currentDateCount() 914int KOListView::currentDateCount()
909{ 915{
910 return 0; 916 return 0;
911} 917}
912 918
913QPtrList<Incidence> KOListView::selectedIncidences() 919QPtrList<Incidence> KOListView::selectedIncidences()
914{ 920{
915 QPtrList<Incidence> eventList; 921 QPtrList<Incidence> eventList;
916 QListViewItem *item = mListView->firstChild (); 922 QListViewItem *item = mListView->firstChild ();
917 while ( item ) { 923 while ( item ) {
918 if ( item->isSelected() ) { 924 if ( item->isSelected() ) {
919 eventList.append(((KOListViewItem *)item)->data()); 925 eventList.append(((KOListViewItem *)item)->data());
920 } 926 }
921 927
922 item = item->nextSibling(); 928 item = item->nextSibling();
923 } 929 }
924 930
925 // // QListViewItem *item = mListView->selectedItem(); 931 // // QListViewItem *item = mListView->selectedItem();
926 //if (item) eventList.append(((KOListViewItem *)item)->data()); 932 //if (item) eventList.append(((KOListViewItem *)item)->data());
927 933
928 return eventList; 934 return eventList;
929} 935}
930 936
931DateList KOListView::selectedDates() 937DateList KOListView::selectedDates()
932{ 938{
933 DateList eventList; 939 DateList eventList;
934 return eventList; 940 return eventList;
935} 941}
936 942
937void KOListView::showDates(bool show) 943void KOListView::showDates(bool show)
938{ 944{
939 // Shouldn't we set it to a value greater 0? When showDates is called with 945 // Shouldn't we set it to a value greater 0? When showDates is called with
940 // show == true at first, then the columnwidths are set to zero. 946 // show == true at first, then the columnwidths are set to zero.
941 static int oldColWidth1 = 0; 947 static int oldColWidth1 = 0;
942 static int oldColWidth3 = 0; 948 static int oldColWidth3 = 0;
943 949
944 if (!show) { 950 if (!show) {
945 oldColWidth1 = mListView->columnWidth(1); 951 oldColWidth1 = mListView->columnWidth(1);
946 oldColWidth3 = mListView->columnWidth(3); 952 oldColWidth3 = mListView->columnWidth(3);
947 mListView->setColumnWidth(1, 0); 953 mListView->setColumnWidth(1, 0);
948 mListView->setColumnWidth(3, 0); 954 mListView->setColumnWidth(3, 0);
949 } else { 955 } else {
950 mListView->setColumnWidth(1, oldColWidth1); 956 mListView->setColumnWidth(1, oldColWidth1);
951 mListView->setColumnWidth(3, oldColWidth3); 957 mListView->setColumnWidth(3, oldColWidth3);
952 } 958 }
953 mListView->repaint(); 959 mListView->repaint();
954} 960}
955 961
956void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 962void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
957 const QDate &td) 963 const QDate &td)
958{ 964{
959#ifndef KORG_NOPRINTER 965#ifndef KORG_NOPRINTER
960 calPrinter->preview(CalPrinter::Day, fd, td); 966 calPrinter->preview(CalPrinter::Day, fd, td);
961#endif 967#endif
962} 968}
963 969
964void KOListView::showDates() 970void KOListView::showDates()
965{ 971{
966 showDates(true); 972 showDates(true);
967} 973}
968 974
969void KOListView::hideDates() 975void KOListView::hideDates()
970{ 976{
971 showDates(false); 977 showDates(false);
972} 978}
973 979
974void KOListView::resetFocus() 980void KOListView::resetFocus()
975{ 981{
976 topLevelWidget()->setActiveWindow(); 982 topLevelWidget()->setActiveWindow();
977 topLevelWidget()->raise(); 983 topLevelWidget()->raise();
978 mListView->setFocus(); 984 mListView->setFocus();
979} 985}
980void KOListView::updateView() 986void KOListView::updateView()
981{ 987{
982 mListView->setFocus(); 988 mListView->setFocus();
983 if ( mListView->firstChild () ) 989 if ( mListView->firstChild () )
984 mListView->setCurrentItem( mListView->firstChild () ); 990 mListView->setCurrentItem( mListView->firstChild () );
985} 991}
986void KOListView::updateConfig() 992void KOListView::updateConfig()
987{ 993{
988 994
989 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 995 mListView->setFont ( KOPrefs::instance()->mListViewFont );
990 updateView(); 996 updateView();
991 997
992} 998}
993void KOListView::setStartDate(const QDate &start) 999void KOListView::setStartDate(const QDate &start)
994{ 1000{
995 mStartDate = start; 1001 mStartDate = start;
996} 1002}
997 1003
998void KOListView::showDates(const QDate &start, const QDate &end) 1004void KOListView::showDates(const QDate &start, const QDate &end)
999{ 1005{
1000 clear(); 1006 clear();
1001 mStartDate = start; 1007 mStartDate = start;
1002 QDate date = start; 1008 QDate date = start;
1003 QPtrList<Journal> j_list; 1009 QPtrList<Journal> j_list;
1004 while( date <= end ) { 1010 while( date <= end ) {
1005 addEvents(calendar()->events(date)); 1011 addEvents(calendar()->events(date));
1006 addTodos(calendar()->todos(date)); 1012 addTodos(calendar()->todos(date));
1007 Journal* jo = calendar()->journal(date); 1013 Journal* jo = calendar()->journal(date);
1008 if ( jo ) 1014 if ( jo )
1009 j_list.append( jo ); 1015 j_list.append( jo );
1010 date = date.addDays( 1 ); 1016 date = date.addDays( 1 );
1011 } 1017 }
1012 addJournals(j_list); 1018 addJournals(j_list);
1013 emit incidenceSelected( 0 ); 1019 emit incidenceSelected( 0 );
1014 updateView(); 1020 updateView();
1015 1021
1016} 1022}
1017 1023
1018void KOListView::addEvents(QPtrList<Event> eventList) 1024void KOListView::addEvents(QPtrList<Event> eventList)
1019{ 1025{
1020 1026
1021 Event *ev; 1027 Event *ev;
1022 for(ev = eventList.first(); ev; ev = eventList.next()) { 1028 for(ev = eventList.first(); ev; ev = eventList.next()) {
1023 addIncidence(ev); 1029 addIncidence(ev);
1024 } 1030 }
1025 if ( !mListView->currentItem() ){ 1031 if ( !mListView->currentItem() ){
1026 updateView(); 1032 updateView();
1027 } 1033 }
1028} 1034}
1029 1035
1030void KOListView::addTodos(QPtrList<Todo> eventList) 1036void KOListView::addTodos(QPtrList<Todo> eventList)
1031{ 1037{
1032 Todo *ev; 1038 Todo *ev;
1033 for(ev = eventList.first(); ev; ev = eventList.next()) { 1039 for(ev = eventList.first(); ev; ev = eventList.next()) {
1034 addIncidence(ev); 1040 addIncidence(ev);
1035 } 1041 }
1036 if ( !mListView->currentItem() ){ 1042 if ( !mListView->currentItem() ){
1037 updateView(); 1043 updateView();
1038 } 1044 }
1039} 1045}
1040void KOListView::addJournals(QPtrList<Journal> eventList) 1046void KOListView::addJournals(QPtrList<Journal> eventList)
1041{ 1047{
1042 Journal *ev; 1048 Journal *ev;
1043 for(ev = eventList.first(); ev; ev = eventList.next()) { 1049 for(ev = eventList.first(); ev; ev = eventList.next()) {
1044 addIncidence(ev); 1050 addIncidence(ev);
1045 } 1051 }
1046 if ( !mListView->currentItem() ){ 1052 if ( !mListView->currentItem() ){
1047 updateView(); 1053 updateView();
1048 } 1054 }
1049} 1055}
1050 1056
1051void KOListView::showCompletedTodos() 1057void KOListView::showCompletedTodos()
1052{ 1058{
1053 mForceShowCompletedTodos = true; 1059 mForceShowCompletedTodos = true;
1054} 1060}
1055void KOListView::addIncidence(Incidence *incidence) 1061void KOListView::addIncidence(Incidence *incidence)
1056{ 1062{
1057 if ( mUidDict.find( incidence->uid() ) ) return; 1063 if ( mUidDict.find( incidence->uid() ) ) return;
1058 1064
1059 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 1065 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
1060 if ( incidence->typeID() == todoID ) { 1066 if ( incidence->typeID() == todoID ) {
1061 if ( ! mForceShowCompletedTodos ) { 1067 if ( ! mForceShowCompletedTodos ) {
1062 if ( !KOPrefs::instance()->mShowCompletedTodo && ((Todo*)incidence)->isCompleted() ) 1068 if ( !KOPrefs::instance()->mShowCompletedTodo && ((Todo*)incidence)->isCompleted() )
1063 return; 1069 return;
1064 } 1070 }
1065 } 1071 }
1066 mUidDict.insert( incidence->uid(), incidence ); 1072 mUidDict.insert( incidence->uid(), incidence );
1067 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 1073 KOListViewItem *item = new KOListViewItem( incidence, mListView );
1068 ListItemVisitor v(item, mStartDate ); 1074 ListItemVisitor v(item, mStartDate );
1069 if (incidence->accept(v)) { 1075 if (incidence->accept(v)) {
1070 return; 1076 return;
1071 } 1077 }
1072 else delete item; 1078 else delete item;
1073} 1079}
1074 1080
1075void KOListView::showEvents(QPtrList<Event> eventList) 1081void KOListView::showEvents(QPtrList<Event> eventList)
1076{ 1082{
1077 clear(); 1083 clear();
1078 1084
1079 addEvents(eventList); 1085 addEvents(eventList);
1080 1086
1081 // After new creation of list view no events are selected. 1087 // After new creation of list view no events are selected.
1082 emit incidenceSelected( 0 ); 1088 emit incidenceSelected( 0 );
1083} 1089}
1084int KOListView::count() 1090int KOListView::count()
1085{ 1091{
1086 return mListView->childCount(); 1092 return mListView->childCount();
1087} 1093}
1088 1094
1089void KOListView::changeEventDisplay(Event *event, int action) 1095void KOListView::changeEventDisplay(Event *event, int action)
1090{ 1096{
1091 KOListViewItem *item; 1097 KOListViewItem *item;
1092 1098
1093 switch(action) { 1099 switch(action) {
1094 case KOGlobals::EVENTADDED: 1100 case KOGlobals::EVENTADDED:
1095 addIncidence( event ); 1101 addIncidence( event );
1096 break; 1102 break;
1097 case KOGlobals::EVENTEDITED: 1103 case KOGlobals::EVENTEDITED:
1098 item = getItemForEvent(event); 1104 item = getItemForEvent(event);
1099 if (item) { 1105 if (item) {
1100 mUidDict.remove( event->uid() ); 1106 mUidDict.remove( event->uid() );
1101 delete item; 1107 delete item;
1102 addIncidence( event ); 1108 addIncidence( event );
1103 } 1109 }
1104 break; 1110 break;
1105 case KOGlobals::EVENTDELETED: 1111 case KOGlobals::EVENTDELETED:
1106 item = getItemForEvent(event); 1112 item = getItemForEvent(event);
1107 if (item) { 1113 if (item) {
1108 mUidDict.remove( event->uid() ); 1114 mUidDict.remove( event->uid() );
1109 delete item; 1115 delete item;
1110 } 1116 }
1111 break; 1117 break;
1112 default: 1118 default:
1113 ; 1119 ;
1114 } 1120 }
1115} 1121}
1116 1122
1117KOListViewItem *KOListView::getItemForEvent(Incidence *event) 1123KOListViewItem *KOListView::getItemForEvent(Incidence *event)
1118{ 1124{
1119 KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); 1125 KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
1120 while (item) { 1126 while (item) {
1121 if (item->data() == event) return item; 1127 if (item->data() == event) return item;
1122 item = (KOListViewItem *)item->nextSibling(); 1128 item = (KOListViewItem *)item->nextSibling();
1123 } 1129 }
1124 return 0; 1130 return 0;
1125} 1131}
1126 1132
1127void KOListView::defaultItemAction(QListViewItem *i) 1133void KOListView::defaultItemAction(QListViewItem *i)
1128{ 1134{
1129 KOListViewItem *item = static_cast<KOListViewItem *>( i ); 1135 KOListViewItem *item = static_cast<KOListViewItem *>( i );
1130 if ( item ) defaultAction( item->data() ); 1136 if ( item ) defaultAction( item->data() );
1131 1137
1132} 1138}
1133 1139
1134void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) 1140void KOListView::popupMenu(QListViewItem *item,const QPoint &,int)
1135{ 1141{
1136 mActiveItem = (KOListViewItem *)item; 1142 mActiveItem = (KOListViewItem *)item;
1137 if (mActiveItem) { 1143 if (mActiveItem) {
1138 Incidence *incidence = mActiveItem->data(); 1144 Incidence *incidence = mActiveItem->data();
1139 mPopupMenu->enableDefault( !mListView->hasMultiSelection( item ) ); 1145 mPopupMenu->enableDefault( !mListView->hasMultiSelection( item ) );
1140 mPopupMenu->showIncidencePopup(incidence); 1146 mPopupMenu->showIncidencePopup(incidence);
1141 1147
1142 /* 1148 /*
1143 if ( incidence && incidence->type() == "Event" ) { 1149 if ( incidence && incidence->type() == "Event" ) {
1144 Event *event = static_cast<Event *>( incidence ); 1150 Event *event = static_cast<Event *>( incidence );
1145 mPopupMenu->showEventPopup(event); 1151 mPopupMenu->showEventPopup(event);
1146 } 1152 }
1147 */ 1153 */
1148 } 1154 }
1149} 1155}
1150 1156
1151void KOListView::readSettings(KConfig *config, QString setting) 1157void KOListView::readSettings(KConfig *config, QString setting)
1152{ 1158{
1153 // qDebug("KOListView::readSettings "); 1159 // qDebug("KOListView::readSettings ");
1154 mListView->restoreLayout(config,setting); 1160 mListView->restoreLayout(config,setting);
1155} 1161}
1156 1162
1157void KOListView::writeSettings(KConfig *config, QString setting) 1163void KOListView::writeSettings(KConfig *config, QString setting)
1158{ 1164{
1159 // qDebug("KOListView::writeSettings "); 1165 // qDebug("KOListView::writeSettings ");
1160 mListView->saveLayout(config, setting); 1166 mListView->saveLayout(config, setting);
1161} 1167}
1162 1168
1163void KOListView::processSelectionChange(QListViewItem *) 1169void KOListView::processSelectionChange(QListViewItem *)
1164{ 1170{
1165 1171
1166 KOListViewItem *item = 1172 KOListViewItem *item =
1167 static_cast<KOListViewItem *>( mListView->currentItem() ); 1173 static_cast<KOListViewItem *>( mListView->currentItem() );
1168 1174
1169 if ( !item ) { 1175 if ( !item ) {
1170 emit incidenceSelected( 0 ); 1176 emit incidenceSelected( 0 );
1171 } else { 1177 } else {
1172 emit incidenceSelected( item->data() ); 1178 emit incidenceSelected( item->data() );
1173 } 1179 }
1174} 1180}
1175 1181
1176void KOListView::clearSelection() 1182void KOListView::clearSelection()
1177{ 1183{
1178 mListView->selectAll( false ); 1184 mListView->selectAll( false );
1179} 1185}
1180void KOListView::allSelection() 1186void KOListView::allSelection()
1181{ 1187{
1182 mListView->selectAll( true ); 1188 mListView->selectAll( true );
1183} 1189}
1184 1190
1185void KOListView::clear() 1191void KOListView::clear()
1186{ 1192{
1187 mListView->clear(); 1193 mListView->clear();
1188 mUidDict.clear(); 1194 mUidDict.clear();
1189} 1195}
1190 1196
1191Incidence* KOListView::currentItem() 1197Incidence* KOListView::currentItem()
1192{ 1198{
1193 if ( mListView->currentItem() ) 1199 if ( mListView->currentItem() )
1194 return ((KOListViewItem*) mListView->currentItem())->data(); 1200 return ((KOListViewItem*) mListView->currentItem())->data();
1195 return 0; 1201 return 0;
1196} 1202}
1197void KOListView::keyPressEvent ( QKeyEvent *e) 1203void KOListView::keyPressEvent ( QKeyEvent *e)
1198{ 1204{
1199 1205
1200 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { 1206 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) {
1201 deleteAll(); 1207 deleteAll();
1202 return; 1208 return;
1203 } 1209 }
1204 1210
1205 e->ignore(); 1211 e->ignore();
1206} 1212}
1207void KOListViewListView::keyPressEvent ( QKeyEvent *e) 1213void KOListViewListView::keyPressEvent ( QKeyEvent *e)
1208{ 1214{
1209 1215
1210 switch ( e->key() ) { 1216 switch ( e->key() ) {
1211 case Qt::Key_Down: 1217 case Qt::Key_Down:
1212 if ( e->state() == ShiftButton ) { 1218 if ( e->state() == ShiftButton ) {
1213 QListViewItem* cn = currentItem(); 1219 QListViewItem* cn = currentItem();
1214 if ( !cn ) 1220 if ( !cn )
1215 cn = firstChild(); 1221 cn = firstChild();
1216 if ( !cn ) 1222 if ( !cn )
1217 return; 1223 return;
1218 while ( cn->nextSibling() ) 1224 while ( cn->nextSibling() )
1219 cn = cn->nextSibling(); 1225 cn = cn->nextSibling();
1220 setCurrentItem ( cn ); 1226 setCurrentItem ( cn );
1221 ensureItemVisible ( cn ); 1227 ensureItemVisible ( cn );
1222 1228
1223 e->accept(); 1229 e->accept();
1224 return; 1230 return;
1225 } 1231 }
1226 if ( e->state() == ControlButton ) { 1232 if ( e->state() == ControlButton ) {
1227 int count = childCount (); 1233 int count = childCount ();
1228 int jump = count / 5; 1234 int jump = count / 5;
1229 QListViewItem* cn; 1235 QListViewItem* cn;
1230 cn = currentItem(); 1236 cn = currentItem();
1231 if ( ! cn ) 1237 if ( ! cn )
1232 return; 1238 return;
1233 if ( jump == 0 ) 1239 if ( jump == 0 )
1234 jump = 1; 1240 jump = 1;
1235 while ( jump && cn->nextSibling() ) { 1241 while ( jump && cn->nextSibling() ) {
1236 cn = cn->nextSibling(); 1242 cn = cn->nextSibling();
1237 --jump; 1243 --jump;
1238 } 1244 }
1239 setCurrentItem ( cn ); 1245 setCurrentItem ( cn );
1240 ensureItemVisible ( cn ); 1246 ensureItemVisible ( cn );
1241 1247
1242 } else 1248 } else
1243 QListView::keyPressEvent ( e ) ; 1249 QListView::keyPressEvent ( e ) ;
1244 e->accept(); 1250 e->accept();
1245 break; 1251 break;
1246 1252
1247 case Qt::Key_Up: 1253 case Qt::Key_Up:
1248 if ( e->state() == ShiftButton ) { 1254 if ( e->state() == ShiftButton ) {
1249 QListViewItem* cn = firstChild(); 1255 QListViewItem* cn = firstChild();
1250 if ( cn ) { 1256 if ( cn ) {
1251 setCurrentItem ( cn ); 1257 setCurrentItem ( cn );
1252 ensureItemVisible ( cn ); 1258 ensureItemVisible ( cn );
1253 } 1259 }
1254 e->accept(); 1260 e->accept();
1255 return; 1261 return;
1256 } 1262 }
1257 if ( e->state() == ControlButton ) { 1263 if ( e->state() == ControlButton ) {
1258 int count = childCount (); 1264 int count = childCount ();
1259 int jump = count / 5; 1265 int jump = count / 5;
1260 QListViewItem* cn; 1266 QListViewItem* cn;
1261 cn = currentItem(); 1267 cn = currentItem();
1262 if ( ! cn ) 1268 if ( ! cn )
1263 return; 1269 return;
1264 if ( jump == 0 ) 1270 if ( jump == 0 )
1265 jump = 1; 1271 jump = 1;
1266 while ( jump && cn->itemAbove ()) { 1272 while ( jump && cn->itemAbove ()) {
1267 cn = cn->itemAbove (); 1273 cn = cn->itemAbove ();
1268 --jump; 1274 --jump;
1269 } 1275 }
1270 setCurrentItem ( cn ); 1276 setCurrentItem ( cn );
1271 ensureItemVisible ( cn ); 1277 ensureItemVisible ( cn );
1272 } else 1278 } else
1273 QListView::keyPressEvent ( e ) ; 1279 QListView::keyPressEvent ( e ) ;
1274 e->accept(); 1280 e->accept();
1275 break; 1281 break;
1276 case Qt::Key_I: { 1282 case Qt::Key_I: {
1277 QListViewItem* cn; 1283 QListViewItem* cn;
1278 cn = currentItem(); 1284 cn = currentItem();
1279 if ( cn ) { 1285 if ( cn ) {
1280 KOListViewItem* ci = (KOListViewItem*)( cn ); 1286 KOListViewItem* ci = (KOListViewItem*)( cn );
1281 if ( ci ){ 1287 if ( ci ){
1282 //emit showIncidence( ci->data()); 1288 //emit showIncidence( ci->data());
1283 cn = cn->nextSibling(); 1289 cn = cn->nextSibling();
1284 if ( cn ) { 1290 if ( cn ) {
1285 setCurrentItem ( cn ); 1291 setCurrentItem ( cn );
1286 ensureItemVisible ( cn ); 1292 ensureItemVisible ( cn );
1287 } 1293 }
1288 emit showIncidence( ci->data()); 1294 emit showIncidence( ci->data());
1289 } 1295 }
1290 } 1296 }
1291 e->accept(); 1297 e->accept();
1292 } 1298 }
1293 break; 1299 break;
1294 case Qt::Key_Return: 1300 case Qt::Key_Return:
1295 case Qt::Key_Enter: 1301 case Qt::Key_Enter:
1296 { 1302 {
1297 QListViewItem* cn; 1303 QListViewItem* cn;
1298 cn = currentItem(); 1304 cn = currentItem();
1299 if ( cn ) { 1305 if ( cn ) {
1300 KOListViewItem* ci = (KOListViewItem*)( cn ); 1306 KOListViewItem* ci = (KOListViewItem*)( cn );
1301 if ( ci ){ 1307 if ( ci ){
1302 if ( e->state() == ShiftButton ) 1308 if ( e->state() == ShiftButton )
1303 ci->setSelected( false ); 1309 ci->setSelected( false );
1304 else 1310 else
1305 ci->setSelected( true ); 1311 ci->setSelected( true );
1306 cn = cn->nextSibling(); 1312 cn = cn->nextSibling();
1307 if ( cn ) { 1313 if ( cn ) {
1308 setCurrentItem ( cn ); 1314 setCurrentItem ( cn );
1309 ensureItemVisible ( cn ); 1315 ensureItemVisible ( cn );
1310 } 1316 }
1311 } 1317 }
1312 } 1318 }
1313 e->accept(); 1319 e->accept();
1314 } 1320 }
1315 break; 1321 break;
1316 default: 1322 default:
1317 e->ignore(); 1323 e->ignore();
1318 } 1324 }
1319} 1325}
1320KOListViewListView::KOListViewListView(KOListView * lv ) 1326KOListViewListView::KOListViewListView(KOListView * lv )
1321 : KListView( lv, "kolistlistview", false ) 1327 : KListView( lv, "kolistlistview", false )
1322{ 1328{
1323 mYMousePos = 0; 1329 mYMousePos = 0;
1324 mPopupTimer = new QTimer(this); 1330 mPopupTimer = new QTimer(this);
1325 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 1331 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
1326#ifndef DESKTOP_VERSION 1332#ifndef DESKTOP_VERSION
1327 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 1333 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
1328#endif 1334#endif
1329 setSelectionMode( QListView::Multi ); 1335 setSelectionMode( QListView::Multi );
1330 setMultiSelection( true); 1336 setMultiSelection( true);
1331} 1337}
1332bool KOListViewListView::hasMultiSelection(QListViewItem* item) 1338bool KOListViewListView::hasMultiSelection(QListViewItem* item)
1333{ 1339{
1334 int selCount = 0; 1340 int selCount = 0;
1335 QListViewItem *qitem = firstChild (); 1341 QListViewItem *qitem = firstChild ();
1336 while ( qitem ) { 1342 while ( qitem ) {
1337 if ( qitem->isSelected() && item != qitem ) 1343 if ( qitem->isSelected() && item != qitem )
1338 return true; 1344 return true;
1339 qitem = qitem->nextSibling(); 1345 qitem = qitem->nextSibling();
1340 } 1346 }
1341 return false; 1347 return false;
1342} 1348}
1343void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1349void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1344{ 1350{
1345 if (!e) return; 1351 if (!e) return;
1346 QPoint vp = contentsToViewport(e->pos()); 1352 QPoint vp = contentsToViewport(e->pos());
1347 QListViewItem *item = itemAt(vp); 1353 QListViewItem *item = itemAt(vp);
1348 if (!item) { 1354 if (!item) {
1349 emit newEvent(); 1355 emit newEvent();
1350 return; 1356 return;
1351 } 1357 }
1352 KListView::contentsMouseDoubleClickEvent(e); 1358 KListView::contentsMouseDoubleClickEvent(e);
1353} 1359}
1354#if 0 1360#if 0
1355void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1361void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1356{ 1362{
1357 //qDebug("contentsMousePressEvent++++ "); 1363 //qDebug("contentsMousePressEvent++++ ");
1358 KListView::contentsMousePressEvent( e ); 1364 KListView::contentsMousePressEvent( e );
1359 if ( e->button() == RightButton ) { 1365 if ( e->button() == RightButton ) {
1360 QListViewItem* ci = currentItem(); 1366 QListViewItem* ci = currentItem();
1361 clearSelection () ; 1367 clearSelection () ;
1362 if ( ci ) 1368 if ( ci )
1363 ci->setSelected( true ); 1369 ci->setSelected( true );
1364 } 1370 }
1365} 1371}
1366void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1372void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1367{ 1373{
1368 KListView::contentsMouseReleaseEvent(e); 1374 KListView::contentsMouseReleaseEvent(e);
1369} 1375}
1370void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1376void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1371{ 1377{
1372 KListView::contentsMouseMoveEvent(e); 1378 KListView::contentsMouseMoveEvent(e);
1373} 1379}
1374#endif 1380#endif
1375void KOListViewListView::popupMenu() 1381void KOListViewListView::popupMenu()
1376{ 1382{
1377 mPopupTimer->stop(); 1383 mPopupTimer->stop();
1378 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton ); 1384 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton );
1379 QApplication::postEvent( this->viewport(), e ); 1385 QApplication::postEvent( this->viewport(), e );
1380 1386
1381} 1387}
1382void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1388void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1383{ 1389{
1384 //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y()); 1390 //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y());
1385 mYMousePos = mapToGlobal( (e->pos())).y(); 1391 mYMousePos = mapToGlobal( (e->pos())).y();
1386 if ( e->button() == LeftButton ) { 1392 if ( e->button() == LeftButton ) {
1387 mPopupTimer->start( 600 ); 1393 mPopupTimer->start( 600 );
1388 mEventPos = contentsToViewport(e->pos()); 1394 mEventPos = contentsToViewport(e->pos());
1389 mEventGlobalPos = e->globalPos(); 1395 mEventGlobalPos = e->globalPos();
1390 } 1396 }
1391 KListView::contentsMousePressEvent( e ); 1397 KListView::contentsMousePressEvent( e );
1392 if ( e->button() == RightButton ) { 1398 if ( e->button() == RightButton ) {
1393 QListViewItem* ci = currentItem(); 1399 QListViewItem* ci = currentItem();
1394 //clearSelection(); 1400 //clearSelection();
1395 if ( ci ) 1401 if ( ci )
1396 ci->setSelected( true ); 1402 ci->setSelected( true );
1397 } 1403 }
1398} 1404}
1399void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1405void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1400{ 1406{
1401 mPopupTimer->stop(); 1407 mPopupTimer->stop();
1402 KListView::contentsMouseReleaseEvent(e); 1408 KListView::contentsMouseReleaseEvent(e);
1403} 1409}
1404void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1410void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1405{ 1411{
1406 // qDebug("contentsMouseMoveEv....... "); 1412 // qDebug("contentsMouseMoveEv....... ");
1407 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); 1413 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() );
1408 int diff = mYMousePos - mapToGlobal( (e->pos())).y(); 1414 int diff = mYMousePos - mapToGlobal( (e->pos())).y();
1409 if ( diff < 0 ) diff = -diff; 1415 if ( diff < 0 ) diff = -diff;
1410 if ( diff > 15 ) 1416 if ( diff > 15 )
1411 mPopupTimer->stop(); 1417 mPopupTimer->stop();
1412 else { 1418 else {
1413 mEventPos = contentsToViewport(e->pos()); 1419 mEventPos = contentsToViewport(e->pos());
1414 mEventGlobalPos = e->globalPos(); 1420 mEventGlobalPos = e->globalPos();
1415 } 1421 }
1416 KListView::contentsMouseMoveEvent(e); 1422 KListView::contentsMouseMoveEvent(e);
1417} 1423}
1418 1424
1419#define protected public 1425#define protected public
1420#include <qheader.h> 1426#include <qheader.h>
1421#undef protected 1427#undef protected
1422void KOListViewListView::printList() 1428void KOListViewListView::printList()
1423{ 1429{
1424#ifdef DESKTOP_VERSION 1430#ifdef DESKTOP_VERSION
1425 KOPrintPrefs pp ( this ); 1431 KOPrintPrefs pp ( this );
1426 if (!pp.exec() ) 1432 if (!pp.exec() )
1427 return; 1433 return;
1428 int scaleval = pp.printMode() ; 1434 int scaleval = pp.printMode() ;
1429 1435
1430 QPrinter printer; 1436 QPrinter printer;
1431 if (!printer.setup() ) 1437 if (!printer.setup() )
1432 return; 1438 return;
1433 clearSelection (); 1439 clearSelection ();
1434 QPainter p; 1440 QPainter p;
1435 p.begin ( &printer ); 1441 p.begin ( &printer );
1436 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); 1442 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
1437 float dx, dy; 1443 float dx, dy;
1438 int wid = (m.width() * 9)/10; 1444 int wid = (m.width() * 9)/10;
1439 dx = (float) wid/(float)contentsWidth (); 1445 dx = (float) wid/(float)contentsWidth ();
1440 dy = (float)(m.height()) / (float)contentsHeight (); 1446 dy = (float)(m.height()) / (float)contentsHeight ();
1441 float scale; 1447 float scale;
1442 // scale to fit the width or height of the paper 1448 // scale to fit the width or height of the paper
1443 if ( dx < dy ) 1449 if ( dx < dy )
1444 scale = dx; 1450 scale = dx;
1445 else 1451 else
1446 scale = dy; 1452 scale = dy;
1447 1453
1448 p.translate( m.width()/10,m.width()/10 ); 1454 p.translate( m.width()/10,m.width()/10 );
1449 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { 1455 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) {
1450 p.scale( scale, scale ); 1456 p.scale( scale, scale );
1451 } 1457 }
1452 1458
1453 int cou = header()->count(); 1459 int cou = header()->count();
1454 int iii; 1460 int iii;
1455 QRect rect ( 0,0,0, header()->height()); 1461 QRect rect ( 0,0,0, header()->height());
1456 for ( iii = 0; iii < cou; ++iii ) { 1462 for ( iii = 0; iii < cou; ++iii ) {
1457 rect.setLeft ( header()->sectionPos( iii ) ); 1463 rect.setLeft ( header()->sectionPos( iii ) );
1458 rect.setRight ( header()->sectionPos( iii ) + header()->sectionSize (iii)); 1464 rect.setRight ( header()->sectionPos( iii ) + header()->sectionSize (iii));
1459 header()->paintSection ( & p, header()->mapToIndex (iii), rect ); 1465 header()->paintSection ( & p, header()->mapToIndex (iii), rect );
1460 } 1466 }
1461 p.translate( 0, header()->height()); 1467 p.translate( 0, header()->height());
1462 drawContentsOffset ( &p, 0,0, 0,0, contentsWidth (), contentsHeight () ); 1468 drawContentsOffset ( &p, 0,0, 0,0, contentsWidth (), contentsHeight () );
1463 p.end(); 1469 p.end();
1464#endif 1470#endif
1465} 1471}
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 0e9f64c..72359df 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -1,598 +1,617 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 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 <qlayout.h> 25#include <qlayout.h>
26#include <qcheckbox.h> 26#include <qcheckbox.h>
27#include <qgroupbox.h> 27#include <qgroupbox.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qlistview.h> 29#include <qlistview.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qpushbutton.h> 32#include <qpushbutton.h>
33#include <qhbuttongroup.h> 33#include <qhbuttongroup.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <libkdepim/kdateedit.h> 37#include <libkdepim/kdateedit.h>
38 38
39#include "koglobals.h" 39#include "koglobals.h"
40#include "koprefs.h" 40#include "koprefs.h"
41#include "klineedit.h" 41#include "klineedit.h"
42 42
43#include "calendarview.h" 43#include "calendarview.h"
44#include "koviewmanager.h" 44#include "koviewmanager.h"
45#include "searchdialog.h" 45#include "searchdialog.h"
46 46
47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) 47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
48 : QVBox( 0 ) 48 : QVBox( 0 )
49 49
50{ 50{
51 mCalendar = calendar; 51 mCalendar = calendar;
52 QFrame *topFrame = new QFrame( this ) ;//plainPage(); 52 QFrame *topFrame = new QFrame( this ) ;//plainPage();
53 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint()); 53 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint());
54 54
55 // Search expression 55 // Search expression
56 QHBoxLayout *subLayout = new QHBoxLayout(); 56 QHBoxLayout *subLayout = new QHBoxLayout();
57 layout->addLayout(subLayout); 57 layout->addLayout(subLayout);
58 /* 58 /*
59 searchLabel = new QLabel(topFrame); 59 searchLabel = new QLabel(topFrame);
60 searchLabel->setText(i18n("Search for:")); 60 searchLabel->setText(i18n("Search for:"));
61 subLayout->addWidget(searchLabel); 61 subLayout->addWidget(searchLabel);
62 */ 62 */
63 QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame ); 63 QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame );
64 //OkButton->setDefault( true ); 64 //OkButton->setDefault( true );
65 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); 65 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch()));
66 subLayout->addWidget(OkButton); 66 subLayout->addWidget(OkButton);
67 searchEdit = new KLineEdit(topFrame); 67 searchEdit = new KLineEdit(topFrame);
68 subLayout->addWidget(searchEdit); 68 subLayout->addWidget(searchEdit);
69 69
70 mAddItems = new QRadioButton( "+ ", topFrame ); 70 mAddItems = new QRadioButton( "+ ", topFrame );
71 mSubItems = new QRadioButton( "- ", topFrame ); 71 mSubItems = new QRadioButton( "- ", topFrame );
72 mRefineItems = new QRadioButton( "< ", topFrame ); 72 mRefineItems = new QRadioButton( "< ", topFrame );
73 subLayout->addWidget( mAddItems ); 73 subLayout->addWidget( mAddItems );
74 subLayout->addWidget( mSubItems ); 74 subLayout->addWidget( mSubItems );
75 subLayout->addWidget( mRefineItems ); 75 subLayout->addWidget( mRefineItems );
76 QFont fo ( mAddItems->font() ); 76 QFont fo ( mAddItems->font() );
77 fo.setBold( true ); 77 fo.setBold( true );
78 fo.setPointSize( fo.pointSize() + 2 ); 78 fo.setPointSize( fo.pointSize() + 2 );
79 mAddItems->setFont( fo ); 79 mAddItems->setFont( fo );
80 mSubItems->setFont( fo ); 80 mSubItems->setFont( fo );
81 mRefineItems->setFont( fo ); 81 mRefineItems->setFont( fo );
82 connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool ))); 82 connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool )));
83 connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool ))); 83 connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool )));
84 connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool ))); 84 connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool )));
85 85
86 QPushButton *togButton = new QPushButton( "", topFrame ); 86 QPushButton *togButton = new QPushButton( "", topFrame );
87 subLayout->addWidget(togButton); 87 subLayout->addWidget(togButton);
88 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes())); 88 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes()));
89 togButton->setPixmap(SmallIcon("1updownarrow")); 89 togButton->setPixmap(SmallIcon("1updownarrow"));
90 togButton->setMinimumWidth( togButton->sizeHint().height() ); 90 togButton->setMinimumWidth( togButton->sizeHint().height() );
91 91
92 searchEdit->setText("*"); // Find all events by default 92 searchEdit->setText("*"); // Find all events by default
93 searchEdit->setFocus(); 93 searchEdit->setFocus();
94 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); 94 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
95 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); 95 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
96 // Subjects to search 96 // Subjects to search
97 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), 97 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
98 // topFrame); 98 // topFrame);
99 99
100 incidenceGroup = new QHBox( topFrame ); 100 incidenceGroup = new QHBox( topFrame );
101 layout->addWidget(incidenceGroup); 101 layout->addWidget(incidenceGroup);
102 102
103 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); 103 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup);
104 //mSearchEvent->setChecked(true); 104 //mSearchEvent->setChecked(true);
105 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); 105 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup);
106 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); 106 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup);
107 107
108 subjectGroup = new QHBox( topFrame ); 108 subjectGroup = new QHBox( topFrame );
109 layout->addWidget(subjectGroup); 109 layout->addWidget(subjectGroup);
110 110
111 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); 111 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup);
112 mSummaryCheck->setChecked(true); 112 mSummaryCheck->setChecked(true);
113 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); 113 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup);
114 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); 114 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup);
115 115
116 attendeeGroup = new QHBox( topFrame ); 116 attendeeGroup = new QHBox( topFrame );
117 layout->addWidget(attendeeGroup ); 117 layout->addWidget(attendeeGroup );
118 new QLabel( i18n("Attendee:"),attendeeGroup ); 118 new QLabel( i18n("Attendee:"),attendeeGroup );
119 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); 119 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup );
120 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); 120 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup );
121 // Date range 121 // Date range
122 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), 122 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"),
123 // topFrame); 123 // topFrame);
124 // layout->addWidget(rangeGroup); 124 // layout->addWidget(rangeGroup);
125 125
126 QWidget *rangeWidget = new QWidget(topFrame); 126 QWidget *rangeWidget = new QWidget(topFrame);
127 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); 127 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint());
128 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); 128 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget));
129 mStartDate = new KDateEdit(rangeWidget); 129 mStartDate = new KDateEdit(rangeWidget);
130 rangeLayout->addWidget(mStartDate); 130 rangeLayout->addWidget(mStartDate);
131 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); 131 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget));
132 mEndDate = new KDateEdit(rangeWidget); 132 mEndDate = new KDateEdit(rangeWidget);
133 mEndDate->setDate(QDate::currentDate().addDays(365)); 133 mEndDate->setDate(QDate::currentDate().addDays(365));
134 rangeLayout->addWidget(mEndDate); 134 rangeLayout->addWidget(mEndDate);
135 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); 135 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget );
136 rangeLayout->addWidget( (QWidget*)wt ); 136 rangeLayout->addWidget( (QWidget*)wt );
137 layout->addWidget(rangeWidget); 137 layout->addWidget(rangeWidget);
138 // Results list view 138 // Results list view
139 listView = new KOListView(mCalendar,topFrame); 139 listView = new KOListView(mCalendar,topFrame);
140 layout->addWidget(listView); 140 layout->addWidget(listView);
141 listView->showCompletedTodos(); 141 listView->showCompletedTodos();
142 //layout->setStretchFactor( listView, 333 ); 142 //layout->setStretchFactor( listView, 333 );
143 //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) ); 143 //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) );
144 //listView->setMaximumHeight( 50 ); 144 //listView->setMaximumHeight( 50 );
145 listView->readSettings(KOGlobals::config(),"SearchListView Layout"); 145 listView->readSettings(KOGlobals::config(),"SearchListView Layout");
146 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList())); 146 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList()));
147 147
148 setCaption( i18n("KO/Pi Find: ")); 148 setCaption( i18n("KO/Pi Find: "));
149#ifdef DESKTOP_VERSION 149#ifdef DESKTOP_VERSION
150 OkButton = new QPushButton( i18n("Close"), this ); 150 OkButton = new QPushButton( i18n("Close"), this );
151 connect(OkButton,SIGNAL(clicked()),SLOT(hide())); 151 connect(OkButton,SIGNAL(clicked()),SLOT(hide()));
152#endif 152#endif
153} 153}
154 154
155SearchDialog::~SearchDialog() 155SearchDialog::~SearchDialog()
156{ 156{
157 157
158} 158}
159void SearchDialog::slot_add( bool b ) 159void SearchDialog::slot_add( bool b )
160{ 160{
161 if ( b ) { 161 if ( b ) {
162 if ( mSubItems->isOn() ) mSubItems->toggle(); 162 if ( mSubItems->isOn() ) mSubItems->toggle();
163 if ( mRefineItems->isOn() ) mRefineItems->toggle(); 163 if ( mRefineItems->isOn() ) mRefineItems->toggle();
164 setCaption( i18n("Matching items will be added to list")); 164 setCaption( i18n("Matching items will be added to list"));
165 } else 165 } else
166 setCaption( i18n("List will be cleared before search")); 166 setCaption( i18n("List will be cleared before search"));
167} 167}
168void SearchDialog::slot_sub( bool b) 168void SearchDialog::slot_sub( bool b)
169{ 169{
170 if ( b ) { 170 if ( b ) {
171 if ( mRefineItems->isOn() ) mRefineItems->toggle(); 171 if ( mRefineItems->isOn() ) mRefineItems->toggle();
172 if ( mAddItems->isOn() ) mAddItems->toggle(); 172 if ( mAddItems->isOn() ) mAddItems->toggle();
173 setCaption( i18n("Matching items will be removed from list")); 173 setCaption( i18n("Matching items will be removed from list"));
174 } else 174 } else
175 setCaption( i18n("List will be cleared before search")); 175 setCaption( i18n("List will be cleared before search"));
176} 176}
177void SearchDialog::slot_refine( bool b) 177void SearchDialog::slot_refine( bool b)
178{ 178{
179 if ( b ) { 179 if ( b ) {
180 if ( mSubItems->isOn() ) mSubItems->toggle(); 180 if ( mSubItems->isOn() ) mSubItems->toggle();
181 if ( mAddItems->isOn() ) mAddItems->toggle(); 181 if ( mAddItems->isOn() ) mAddItems->toggle();
182 setCaption( i18n("Search on displayed list only")); 182 setCaption( i18n("Search on displayed list only"));
183 } else 183 } else
184 setCaption( i18n("List will be cleared before search")); 184 setCaption( i18n("List will be cleared before search"));
185} 185}
186void SearchDialog::toggleCheckboxes() 186void SearchDialog::toggleCheckboxes()
187{ 187{
188 if ( incidenceGroup->isVisible() ) { 188 if ( incidenceGroup->isVisible() ) {
189 incidenceGroup->hide() ; 189 incidenceGroup->hide() ;
190 subjectGroup->hide() ; 190 subjectGroup->hide() ;
191 attendeeGroup->hide() ; 191 attendeeGroup->hide() ;
192 } else { 192 } else {
193 incidenceGroup->show() ; 193 incidenceGroup->show() ;
194 subjectGroup->show() ; 194 subjectGroup->show() ;
195 attendeeGroup->show() ; 195 attendeeGroup->show() ;
196 } 196 }
197} 197}
198void SearchDialog::raiseAndSelect() 198void SearchDialog::raiseAndSelect()
199{ 199{
200 200
201 static int currentState = 0; 201 static int currentState = 0;
202 202
203 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() ) 203 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() )
204 currentState = 0; 204 currentState = 0;
205 int newState = 0; 205 int newState = 0;
206 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 206 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
207 newState = VIEW_J_VIEW; 207 newState = VIEW_J_VIEW;
208 } 208 }
209 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 209 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
210 newState = VIEW_T_VIEW; 210 newState = VIEW_T_VIEW;
211 } 211 }
212 else { 212 else {
213 newState = VIEW_A_VIEW; 213 newState = VIEW_A_VIEW;
214 } 214 }
215 if ( newState != currentState ) { 215 if ( newState != currentState ) {
216 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 216 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
217 if ( ! mSearchJournal->isChecked() ) { 217 if ( ! mSearchJournal->isChecked() ) {
218 mSearchJournal->setChecked( true ); 218 mSearchJournal->setChecked( true );
219 mSearchTodo->setChecked( false ); 219 mSearchTodo->setChecked( false );
220 mSearchEvent->setChecked( false ); 220 mSearchEvent->setChecked( false );
221 mSummaryCheck->setChecked( true );
222 mDescriptionCheck->setChecked( true );
223
221 } 224 }
222 } 225 }
223 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 226 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
224 if ( ! mSearchTodo->isChecked() ) { 227 if ( ! mSearchTodo->isChecked() ) {
225 mSearchTodo->setChecked( true ); 228 mSearchTodo->setChecked( true );
226 mSearchJournal->setChecked( false ); 229 mSearchJournal->setChecked( false );
227 mSearchEvent->setChecked( false ); 230 mSearchEvent->setChecked( false );
228 } 231 }
229 } 232 }
230 else { 233 else {
231 if ( ! mSearchEvent->isChecked() ) { 234 if ( ! mSearchEvent->isChecked() ) {
232 mSearchEvent->setChecked( true ); 235 mSearchEvent->setChecked( true );
233 mSearchJournal->setChecked( false ); 236 mSearchJournal->setChecked( false );
234 mSearchTodo->setChecked( false ); 237 mSearchTodo->setChecked( false );
235 } 238 }
236 } 239 }
237 } 240 }
238 currentState = newState; 241 currentState = newState;
239 raise(); 242 raise();
240} 243}
241void SearchDialog::setFocusToList() 244void SearchDialog::setFocusToList()
242{ 245{
243 listView->resetFocus(); 246 listView->resetFocus();
244} 247}
245void SearchDialog::accept() 248void SearchDialog::accept()
246{ 249{
247 doSearch(); 250 doSearch();
248} 251}
249void SearchDialog::updateList() 252void SearchDialog::updateList()
250{ 253{
251 //listView->updateList(); 254 //listView->updateList();
252 if ( isVisible() ) { 255 if ( isVisible() ) {
253 updateView(); 256 updateView();
254 //qDebug("SearchDialog::updated "); 257 //qDebug("SearchDialog::updated ");
255 } 258 }
256 else { 259 else {
257 listView->clear(); 260 listView->clear();
258 //qDebug("SearchDialog::cleared "); 261 //qDebug("SearchDialog::cleared ");
259 262
260 } 263 }
261} 264}
262void SearchDialog::searchTextChanged( const QString &_text ) 265void SearchDialog::searchTextChanged( const QString &_text )
263{ 266{
264#if 0 267#if 0
265 enableButton( KDialogBase::User1, !_text.isEmpty() ); 268 enableButton( KDialogBase::User1, !_text.isEmpty() );
266#endif 269#endif
267} 270}
268 271
269void SearchDialog::doSearch() 272void SearchDialog::doSearch()
270{ 273{
271 QRegExp re; 274 QRegExp re;
272 re.setWildcard(true); // most people understand these better. 275 re.setWildcard(true); // most people understand these better.
273 re.setCaseSensitive(false); 276 re.setCaseSensitive(false);
274 QString st = searchEdit->text(); 277 QString st = searchEdit->text();
275 if ( st.right(1) != "*") 278 if ( st.right(1) != "*")
276 st += "*"; 279 st += "*";
277 re.setPattern(st); 280 re.setPattern(st);
278 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) { 281 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) {
279 KMessageBox::sorry(this, 282 KMessageBox::sorry(this,
280 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals")); 283 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals"));
281 return; 284 return;
282 } 285 }
283 if (!re.isValid() ) { 286 if (!re.isValid() ) {
284 KMessageBox::sorry(this, 287 KMessageBox::sorry(this,
285 i18n("Invalid search expression,\ncannot perform " 288 i18n("Invalid search expression,\ncannot perform "
286 "the search.\nPlease enter a search expression\n" 289 "the search.\nPlease enter a search expression\n"
287 "using the wildcard characters\n '*' and '?'" 290 "using the wildcard characters\n '*' and '?'"
288 "where needed.")); 291 "where needed."));
289 return; 292 return;
290 } 293 }
291 search(re); 294 search(re);
292 listView->setStartDate( mStartDate->date() ); 295 listView->setStartDate( mStartDate->date() );
293 listView->showEvents(mMatchedEvents); 296 listView->showEvents(mMatchedEvents);
294 listView->addTodos(mMatchedTodos); 297 listView->addTodos(mMatchedTodos);
295 listView->addJournals(mMatchedJournals); 298 listView->addJournals(mMatchedJournals);
296 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { 299 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) {
297 setCaption(i18n("No items found. Use '*' and '?' where needed.")); 300 setCaption(i18n("No items found. Use '*' and '?' where needed."));
298 } else { 301 } else {
299 QString mess; 302 QString mess;
300 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); 303 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() );
301 setCaption( i18n("KO/Pi Find: ") + mess); 304 setCaption( i18n("KO/Pi Find: ") + mess);
302 305
303 } 306 }
304 searchEdit->setFocus(); 307 searchEdit->setFocus();
305} 308}
306void SearchDialog::updateConfig() 309void SearchDialog::updateConfig()
307{ 310{
308 listView->updateConfig(); 311 listView->updateConfig();
309} 312}
310void SearchDialog::updateView() 313void SearchDialog::updateView()
311{ 314{
312 //qDebug("SearchDialog::updateView() %d ", isVisible()); 315 //qDebug("SearchDialog::updateView() %d ", isVisible());
313 QRegExp re; 316 QRegExp re;
314 re.setWildcard(true); // most people understand these better. 317 re.setWildcard(true); // most people understand these better.
315 re.setCaseSensitive(false); 318 re.setCaseSensitive(false);
316 QString st = searchEdit->text(); 319 QString st = searchEdit->text();
317 if ( st.right(1) != "*") 320 if ( st.right(1) != "*")
318 st += "*"; 321 st += "*";
319 re.setPattern(st); 322 re.setPattern(st);
320 mMatchedEvents.clear(); 323 mMatchedEvents.clear();
321 mMatchedTodos.clear(); 324 mMatchedTodos.clear();
322 mMatchedJournals.clear(); 325 mMatchedJournals.clear();
323 if (re.isValid()) { 326 if (re.isValid()) {
324 search(re); 327 search(re);
325 } 328 }
326 listView->setStartDate( mStartDate->date() ); 329 listView->setStartDate( mStartDate->date() );
327 listView->showEvents(mMatchedEvents); 330 listView->showEvents(mMatchedEvents);
328 listView->addTodos(mMatchedTodos); 331 listView->addTodos(mMatchedTodos);
329 listView->addJournals(mMatchedJournals); 332 listView->addJournals(mMatchedJournals);
330} 333}
331 334
332void SearchDialog::search(const QRegExp &re) 335void SearchDialog::search(const QRegExp &re)
333{ 336{
334 QPtrList<Event> events; 337 QPtrList<Event> events;
335 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 338 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
336 if ( mRefineItems->isChecked() ) events = mMatchedEvents; 339 if ( mRefineItems->isChecked() ) events = mMatchedEvents;
337 mMatchedEvents.clear(); 340 mMatchedEvents.clear();
338 } 341 }
339 if ( mSearchEvent->isChecked() ) { 342 if ( mSearchEvent->isChecked() ) {
340 if ( !mRefineItems->isChecked() ) 343 if ( !mRefineItems->isChecked() )
341 events = mCalendar->events( mStartDate->date(), 344 events = mCalendar->events( mStartDate->date(),
342 mEndDate->date(), 345 mEndDate->date(),
343 false /*mInclusiveCheck->isChecked()*/ ); 346 false /*mInclusiveCheck->isChecked()*/ );
344 347
345 348
346 Event *ev; 349 Event *ev;
347 for(ev=events.first();ev;ev=events.next()) { 350 for(ev=events.first();ev;ev=events.next()) {
348 if (mSummaryCheck->isChecked()) { 351 if (mSummaryCheck->isChecked()) {
349#if QT_VERSION >= 0x030000 352#if QT_VERSION >= 0x030000
350 if (re.search(ev->summary()) != -1) 353 if (re.search(ev->summary()) != -1)
351#else 354#else
352 if (re.match(ev->summary()) != -1) 355 if (re.match(ev->summary()) != -1)
353#endif 356#endif
354 { 357 {
355 if ( mSubItems->isChecked() ) 358 if ( mSubItems->isChecked() )
356 mMatchedEvents.remove(ev); 359 mMatchedEvents.remove(ev);
357 else { 360 else {
358 if ( !mMatchedEvents.contains( ev ) ) 361 if ( !mMatchedEvents.contains( ev ) )
359 mMatchedEvents.append(ev); 362 mMatchedEvents.append(ev);
360 } 363 }
361 continue; 364 continue;
362 } 365 }
363#if QT_VERSION >= 0x030000 366#if QT_VERSION >= 0x030000
364 if (re.search(ev->location()) != -1) 367 if (re.search(ev->location()) != -1)
365#else 368#else
366 if (re.match(ev->location()) != -1) 369 if (re.match(ev->location()) != -1)
367#endif 370#endif
368 { 371 {
369 if ( mSubItems->isChecked() ) 372 if ( mSubItems->isChecked() )
370 mMatchedEvents.remove(ev); 373 mMatchedEvents.remove(ev);
371 else{ 374 else{
372 if ( !mMatchedEvents.contains( ev ) ) 375 if ( !mMatchedEvents.contains( ev ) )
373 mMatchedEvents.append(ev); 376 mMatchedEvents.append(ev);
374 } 377 }
375 continue; 378 continue;
376 } 379 }
377 } 380 }
378 if (mDescriptionCheck->isChecked()) { 381 if (mDescriptionCheck->isChecked()) {
379#if QT_VERSION >= 0x030000 382#if QT_VERSION >= 0x030000
380 if (re.search(ev->description()) != -1) 383 if (re.search(ev->description()) != -1)
381#else 384#else
382 if (re.match(ev->description()) != -1) 385 if (re.match(ev->description()) != -1)
383#endif 386#endif
384 { 387 {
385 if ( mSubItems->isChecked() ) 388 if ( mSubItems->isChecked() )
386 mMatchedEvents.remove(ev); 389 mMatchedEvents.remove(ev);
387 else{ 390 else{
388 if ( !mMatchedEvents.contains( ev ) ) 391 if ( !mMatchedEvents.contains( ev ) )
389 mMatchedEvents.append(ev); 392 mMatchedEvents.append(ev);
390 } 393 }
391 continue; 394 continue;
392 } 395 }
393 } 396 }
394 if (mCategoryCheck->isChecked()) { 397 if (mCategoryCheck->isChecked()) {
395#if QT_VERSION >= 0x030000 398#if QT_VERSION >= 0x030000
396 if (re.search(ev->categoriesStr()) != -1) 399 if (re.search(ev->categoriesStr()) != -1)
397#else 400#else
398 if (re.match(ev->categoriesStr()) != -1) 401 if (re.match(ev->categoriesStr()) != -1)
399#endif 402#endif
400 { 403 {
401 404
402 if ( mSubItems->isChecked() ) 405 if ( mSubItems->isChecked() )
403 mMatchedEvents.remove(ev); 406 mMatchedEvents.remove(ev);
404 else{ 407 else{
405 if ( !mMatchedEvents.contains( ev ) ) 408 if ( !mMatchedEvents.contains( ev ) )
406 mMatchedEvents.append(ev); 409 mMatchedEvents.append(ev);
407 } 410 }
408 continue; 411 continue;
409 } 412 }
410 } 413 }
411 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 414 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
412 QPtrList<Attendee> tmpAList = ev->attendees(); 415 QPtrList<Attendee> tmpAList = ev->attendees();
413 Attendee *a; 416 Attendee *a;
414 for (a = tmpAList.first(); a; a = tmpAList.next()) { 417 for (a = tmpAList.first(); a; a = tmpAList.next()) {
415 if (mSearchAName->isChecked()) { 418 if (mSearchAName->isChecked()) {
416#if QT_VERSION >= 0x030000 419#if QT_VERSION >= 0x030000
417 if (re.search(a->name()) != -1) 420 if (re.search(a->name()) != -1)
418#else 421#else
419 if (re.match(a->name()) != -1) 422 if (re.match(a->name()) != -1)
420#endif 423#endif
421 { 424 {
422 if ( mSubItems->isChecked() ) 425 if ( mSubItems->isChecked() )
423 mMatchedEvents.remove(ev); 426 mMatchedEvents.remove(ev);
424 else{ 427 else{
425 if ( !mMatchedEvents.contains( ev ) ) 428 if ( !mMatchedEvents.contains( ev ) )
426 mMatchedEvents.append(ev); 429 mMatchedEvents.append(ev);
427 } 430 }
428 break; 431 break;
429 } 432 }
430 } 433 }
431 if (mSearchAEmail->isChecked()) { 434 if (mSearchAEmail->isChecked()) {
432#if QT_VERSION >= 0x030000 435#if QT_VERSION >= 0x030000
433 if (re.search(a->email()) != -1) 436 if (re.search(a->email()) != -1)
434#else 437#else
435 if (re.match(a->email()) != -1) 438 if (re.match(a->email()) != -1)
436#endif 439#endif
437 { 440 {
438 if ( mSubItems->isChecked() ) 441 if ( mSubItems->isChecked() )
439 mMatchedEvents.remove(ev); 442 mMatchedEvents.remove(ev);
440 else{ 443 else{
441 if ( !mMatchedEvents.contains( ev ) ) 444 if ( !mMatchedEvents.contains( ev ) )
442 mMatchedEvents.append(ev); 445 mMatchedEvents.append(ev);
443 } 446 }
444 break; 447 break;
445 } 448 }
446 } 449 }
447 } 450 }
448 } 451 }
449 } 452 }
450 } 453 }
451 QPtrList<Todo> todos; 454 QPtrList<Todo> todos;
452 455
453 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 456 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
454 if ( mRefineItems->isChecked() ) todos = mMatchedTodos ; 457 if ( mRefineItems->isChecked() ) todos = mMatchedTodos ;
455 mMatchedTodos.clear(); 458 mMatchedTodos.clear();
456 } 459 }
457 460
458 if ( mSearchTodo->isChecked() ) { 461 if ( mSearchTodo->isChecked() ) {
459 if ( !mRefineItems->isChecked() ) todos = mCalendar->todos( ); 462 if ( !mRefineItems->isChecked() ) todos = mCalendar->todos( );
460 Todo *tod; 463 Todo *tod;
461 for(tod=todos.first();tod;tod=todos.next()) { 464 for(tod=todos.first();tod;tod=todos.next()) {
462 if (mSummaryCheck->isChecked()) { 465 if (mSummaryCheck->isChecked()) {
463#if QT_VERSION >= 0x030000 466#if QT_VERSION >= 0x030000
464 if (re.search(tod->summary()) != -1) 467 if (re.search(tod->summary()) != -1)
465#else 468#else
466 if (re.match(tod->summary()) != -1) 469 if (re.match(tod->summary()) != -1)
467#endif 470#endif
468 { 471 {
469 if ( mSubItems->isChecked() ) 472 if ( mSubItems->isChecked() )
470 mMatchedTodos.remove(tod); 473 mMatchedTodos.remove(tod);
471 else if (!mMatchedTodos.contains( tod )) 474 else if (!mMatchedTodos.contains( tod ))
472 mMatchedTodos.append(tod); 475 mMatchedTodos.append(tod);
473 continue; 476 continue;
474 } 477 }
475 } 478 }
476 if (mDescriptionCheck->isChecked()) { 479 if (mDescriptionCheck->isChecked()) {
477#if QT_VERSION >= 0x030000 480#if QT_VERSION >= 0x030000
478 if (re.search(tod->description()) != -1) 481 if (re.search(tod->description()) != -1)
479#else 482#else
480 if (re.match(tod->description()) != -1) 483 if (re.match(tod->description()) != -1)
481#endif 484#endif
482 { 485 {
483 if ( mSubItems->isChecked() ) 486 if ( mSubItems->isChecked() )
484 mMatchedTodos.remove(tod); 487 mMatchedTodos.remove(tod);
485 else if (!mMatchedTodos.contains( tod )) 488 else if (!mMatchedTodos.contains( tod ))
486 mMatchedTodos.append(tod); 489 mMatchedTodos.append(tod);
487 continue; 490 continue;
488 } 491 }
489 } 492 }
490 if (mCategoryCheck->isChecked()) { 493 if (mCategoryCheck->isChecked()) {
491#if QT_VERSION >= 0x030000 494#if QT_VERSION >= 0x030000
492 if (re.search(tod->categoriesStr()) != -1) 495 if (re.search(tod->categoriesStr()) != -1)
493#else 496#else
494 if (re.match(tod->categoriesStr()) != -1) 497 if (re.match(tod->categoriesStr()) != -1)
495#endif 498#endif
496 { 499 {
497 if ( mSubItems->isChecked() ) 500 if ( mSubItems->isChecked() )
498 mMatchedTodos.remove(tod); 501 mMatchedTodos.remove(tod);
499 else if (!mMatchedTodos.contains( tod )) 502 else if (!mMatchedTodos.contains( tod ))
500 mMatchedTodos.append(tod); 503 mMatchedTodos.append(tod);
501 continue; 504 continue;
502 } 505 }
503 } 506 }
504 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 507 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
505 QPtrList<Attendee> tmpAList = tod->attendees(); 508 QPtrList<Attendee> tmpAList = tod->attendees();
506 Attendee *a; 509 Attendee *a;
507 for (a = tmpAList.first(); a; a = tmpAList.next()) { 510 for (a = tmpAList.first(); a; a = tmpAList.next()) {
508 if (mSearchAName->isChecked()) { 511 if (mSearchAName->isChecked()) {
509#if QT_VERSION >= 0x030000 512#if QT_VERSION >= 0x030000
510 if (re.search(a->name()) != -1) 513 if (re.search(a->name()) != -1)
511#else 514#else
512 if (re.match(a->name()) != -1) 515 if (re.match(a->name()) != -1)
513#endif 516#endif
514 { 517 {
515 if ( mSubItems->isChecked() ) 518 if ( mSubItems->isChecked() )
516 mMatchedTodos.remove(tod); 519 mMatchedTodos.remove(tod);
517 else if (!mMatchedTodos.contains( tod )) 520 else if (!mMatchedTodos.contains( tod ))
518 mMatchedTodos.append(tod); 521 mMatchedTodos.append(tod);
519 break; 522 break;
520 } 523 }
521 } 524 }
522 if (mSearchAEmail->isChecked()) { 525 if (mSearchAEmail->isChecked()) {
523#if QT_VERSION >= 0x030000 526#if QT_VERSION >= 0x030000
524 if (re.search(a->email()) != -1) 527 if (re.search(a->email()) != -1)
525#else 528#else
526 if (re.match(a->email()) != -1) 529 if (re.match(a->email()) != -1)
527#endif 530#endif
528 { 531 {
529 if ( mSubItems->isChecked() ) 532 if ( mSubItems->isChecked() )
530 mMatchedTodos.remove(tod); 533 mMatchedTodos.remove(tod);
531 else if (!mMatchedTodos.contains( tod )) 534 else if (!mMatchedTodos.contains( tod ))
532 mMatchedTodos.append(tod); 535 mMatchedTodos.append(tod);
533 break; 536 break;
534 } 537 }
535 } 538 }
536 } 539 }
537 } 540 }
538 } 541 }
539 } 542 }
540 543
541 QPtrList<Journal> journals; 544 QPtrList<Journal> journals;
542 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 545 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
543 if ( mRefineItems->isChecked() ) journals = mMatchedJournals ; 546 if ( mRefineItems->isChecked() ) journals = mMatchedJournals ;
544 mMatchedJournals.clear(); 547 mMatchedJournals.clear();
545 } 548 }
546 if (mSearchJournal->isChecked() ) { 549 if (mSearchJournal->isChecked() ) {
547 if ( ! mRefineItems->isChecked() ) journals = mCalendar->journals(); 550 if ( ! mRefineItems->isChecked() ) journals = mCalendar->journals();
548 Journal* journ; 551 Journal* journ;
549 552
550 for(journ=journals.first();journ;journ=journals.next()) { 553 for(journ=journals.first();journ;journ=journals.next()) {
551 if ( journ->dtStart().date() <= mEndDate->date() 554 if ( journ->dtStart().date() <= mEndDate->date()
552 &&journ->dtStart().date() >= mStartDate->date()) { 555 &&journ->dtStart().date() >= mStartDate->date()) {
556 if (mDescriptionCheck->isChecked()) {
553#if QT_VERSION >= 0x030000 557#if QT_VERSION >= 0x030000
554 if (re.search(journ->description()) != -1) 558 if (re.search(journ->description()) != -1)
555#else 559#else
556 if (re.match(journ->description()) != -1) 560 if (re.match(journ->description()) != -1)
557#endif 561#endif
558 { 562 {
559 if ( mSubItems->isChecked() ) 563 if ( mSubItems->isChecked() )
560 mMatchedJournals.remove(journ); 564 mMatchedJournals.remove(journ);
561 else if (!mMatchedJournals.contains( journ )) 565 else if (!mMatchedJournals.contains( journ ))
562 mMatchedJournals.append(journ); 566 mMatchedJournals.append(journ);
563 continue; 567 continue;
564 } 568 }
569 }
570 if (mSummaryCheck->isChecked()) {
571#if QT_VERSION >= 0x030000
572 if (re.search(journ->summary()) != -1)
573#else
574 if (re.match(journ->summary()) != -1)
575#endif
576 {
577 if ( mSubItems->isChecked() )
578 mMatchedJournals.remove(journ);
579 else if (!mMatchedJournals.contains( journ ))
580 mMatchedJournals.append(journ);
581 continue;
582 }
583 }
565 } 584 }
566 } 585 }
567 } 586 }
568 if ( mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() < 1 ) { 587 if ( mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() < 1 ) {
569 qDebug("count %d ", mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() ); 588 qDebug("count %d ", mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() );
570 if ( mRefineItems->isChecked() ) 589 if ( mRefineItems->isChecked() )
571 mRefineItems->setChecked( false ); 590 mRefineItems->setChecked( false );
572 else if ( mSubItems->isChecked() ) 591 else if ( mSubItems->isChecked() )
573 mSubItems->setChecked( false ); 592 mSubItems->setChecked( false );
574 } 593 }
575} 594}
576 595
577void SearchDialog::keyPressEvent ( QKeyEvent *e) 596void SearchDialog::keyPressEvent ( QKeyEvent *e)
578{ 597{
579 switch ( e->key() ) { 598 switch ( e->key() ) {
580 case Qt::Key_Escape: 599 case Qt::Key_Escape:
581 close(); 600 close();
582 break; 601 break;
583 case Qt::Key_F: 602 case Qt::Key_F:
584 if ( e->state() == Qt::ControlButton ) { 603 if ( e->state() == Qt::ControlButton ) {
585 604
586 } 605 }
587 break; 606 break;
588 case Qt::Key_Return: 607 case Qt::Key_Return:
589 case Qt::Key_Enter: 608 case Qt::Key_Enter:
590 doSearch(); 609 doSearch();
591 break; 610 break;
592 611
593 default: 612 default:
594 e->ignore(); 613 e->ignore();
595 } 614 }
596} 615}
597 616
598//mMatchedJournals; 617//mMatchedJournals;