summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt17
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt13
-rw-r--r--korganizer/calendarview.cpp52
-rw-r--r--korganizer/calendarview.h2
-rw-r--r--korganizer/koeditorgeneral.cpp20
-rw-r--r--korganizer/koeditorgeneral.h1
-rw-r--r--korganizer/kotodoview.cpp5
-rw-r--r--korganizer/mainwindow.cpp11
-rw-r--r--libkcal/calendarlocal.cpp2
-rw-r--r--microkde/kdatetbl.cpp5
10 files changed, 95 insertions, 33 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index fbe16d8..adbfd67 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,98 +1,115 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.20 ************
4
5KO/Pi:
6Made it possible to delete a Todo, which has sub-todos.
7Fixed two small problems in the todo view.
8Added missing German translation for filter edit and print dialog.
9Made search dialog closeable by cancel key.
10
11Made it possible to select in the date picker the (ligt grey )
12dates of the prev./next month with the mouse.
13
14Added for the "dislplay one day" agenda mode info in the caption:
15Now it is displayed, if the selected day is from "day before yesterday"
16to "day after tomorrow".
17
18
19
3********** VERSION 1.9.19 ************ 20********** VERSION 1.9.19 ************
4 21
5Added a lot of missing translations to KA/Pi, 22Added a lot of missing translations to KA/Pi,
6Added some missing translations to KO/Pi and OM/Pi. 23Added some missing translations to KO/Pi and OM/Pi.
7 24
8Fixed some minor problems in KA/Pi + KO/Pi. 25Fixed some minor problems in KA/Pi + KO/Pi.
9 26
10Fixed a crash when closing PwM/Pi. 27Fixed a crash when closing PwM/Pi.
11Added German translation for PwM/Pi. 28Added German translation for PwM/Pi.
12 29
13Made view change and Month View update faster in KO/Pi. 30Made view change and Month View update faster in KO/Pi.
14 31
15 32
16********** VERSION 1.9.18 ************ 33********** VERSION 1.9.18 ************
17 34
18FYI: The VERSION 1.9.17 was a testing release only. 35FYI: The VERSION 1.9.17 was a testing release only.
19Please read the changelog of VERSION 1.9.17 as well. 36Please read the changelog of VERSION 1.9.17 as well.
20 37
21Cleaned up the syncing config dialog. 38Cleaned up the syncing config dialog.
22Added sync config options for date range for events. 39Added sync config options for date range for events.
23Added sync config options for filters on incoming data. 40Added sync config options for filters on incoming data.
24Added sync config options for filters on outgoing data. 41Added sync config options for filters on outgoing data.
25Please read the updated SyncHowTo about the new filter settings. 42Please read the updated SyncHowTo about the new filter settings.
26These filter settings make it now possible to sync with shared 43These filter settings make it now possible to sync with shared
27calendars without writing back private or confidential data 44calendars without writing back private or confidential data
28(via the outgoing filters). 45(via the outgoing filters).
29To sync only with particular parts of a shared calendar, 46To sync only with particular parts of a shared calendar,
30the incoming filter settings can be used. 47the incoming filter settings can be used.
31An example can be found in the SyncHowTo. 48An example can be found in the SyncHowTo.
32Same for shared addressbooks. 49Same for shared addressbooks.
33 50
34Added a setting for the global kdepim data storage. 51Added a setting for the global kdepim data storage.
35Usually the data is stored in (yourhomedir/kdepim). 52Usually the data is stored in (yourhomedir/kdepim).
36Now you can set in the Global config dialog TAB, subTAB "Data storage path" 53Now you can set in the Global config dialog TAB, subTAB "Data storage path"
37a directory where all the kdepim data is stored. 54a directory where all the kdepim data is stored.
38That makes it easy to save all kdepim data on a SD card on the Z, for example. 55That makes it easy to save all kdepim data on a SD card on the Z, for example.
39 56
40KO/Pi: 57KO/Pi:
41The timeedit input has a pulldown list for times. 58The timeedit input has a pulldown list for times.
42If opened, this pulldown list should now has the right time highlighted. 59If opened, this pulldown list should now has the right time highlighted.
43Added the possibility to exclude events/todos/journals in a filter. 60Added the possibility to exclude events/todos/journals in a filter.
44You should exclude journals, if you do not want them to sync with a public calendar. 61You should exclude journals, if you do not want them to sync with a public calendar.
45 62
46KA/Pi: 63KA/Pi:
47Added the possibility to in/exclude public/private/confidential contacts to a filter. 64Added the possibility to in/exclude public/private/confidential contacts to a filter.
48If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 65If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ...
49Added printing of card view and details view on desktop. 66Added printing of card view and details view on desktop.
50Printing of list view is not working... 67Printing of list view is not working...
51Added button for removing pictures in contact editor. 68Added button for removing pictures in contact editor.
52Parsing data fix of KA/Pi version 1.9.17. 69Parsing data fix of KA/Pi version 1.9.17.
53Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 70Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
54Fixed some syncing merging problems. 71Fixed some syncing merging problems.
55 72
56 73
57********** VERSION 1.9.17 ************ 74********** VERSION 1.9.17 ************
58 75
59KO/Pi: 76KO/Pi:
60Fixed that tooltips were not updated after moving an item in agenda view. 77Fixed that tooltips were not updated after moving an item in agenda view.
61Fixed a bug in sorting start date for recurring events in list view. 78Fixed a bug in sorting start date for recurring events in list view.
62Changed the left button in todo viewer from "Agenda" to "Set completed". 79Changed the left button in todo viewer from "Agenda" to "Set completed".
63This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 80This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View.
64Added more info in the todo viewer: Startdate, parent/sub todos. 81Added more info in the todo viewer: Startdate, parent/sub todos.
65 82
66 83
67KA/Pi: 84KA/Pi:
68All fields search does now actually search all the (possible) fields, 85All fields search does now actually search all the (possible) fields,
69not only those listed in the contact list. 86not only those listed in the contact list.
70Made is possible to inline a picture in a vcard on the Z. 87Made is possible to inline a picture in a vcard on the Z.
71This was only possible on the desktop, now is it possible on the Z as well. 88This was only possible on the desktop, now is it possible on the Z as well.
72Fixed of missing save settings after filter configuration. 89Fixed of missing save settings after filter configuration.
73Made saving of addressbook much faster. 90Made saving of addressbook much faster.
74Fixed extension widget layout problem. 91Fixed extension widget layout problem.
75Fixed saving of default formatted name settings. 92Fixed saving of default formatted name settings.
76Fixed formatted name handling in edit dialog. 93Fixed formatted name handling in edit dialog.
77Added an option for changing formatted names of many contacts 94Added an option for changing formatted names of many contacts
78(menu: File - Change - Set formatted name). 95(menu: File - Change - Set formatted name).
79 96
80QWhatsThis was not working on the Z ( only black rectangle was shown). 97QWhatsThis was not working on the Z ( only black rectangle was shown).
81This is Fixed. 98This is Fixed.
82 99
83KDE-Sync: 100KDE-Sync:
84Now readonly KDE resources are synced as well. 101Now readonly KDE resources are synced as well.
85(They are not changed in KDE itself, of course). 102(They are not changed in KDE itself, of course).
86 103
87 104
88 105
89********** VERSION 1.9.16 ************ 106********** VERSION 1.9.16 ************
90 107
91KO/Pi: 108KO/Pi:
92Fixed search dialog size on Z 6000 (480x640 display). 109Fixed search dialog size on Z 6000 (480x640 display).
93Added setting to hide/show time in agenda items. 110Added setting to hide/show time in agenda items.
94Added setting to hide not running todos in todo view. 111Added setting to hide not running todos in todo view.
95Added columns for start date/time in todo view. 112Added columns for start date/time in todo view.
96Replaced the solid half-hour lines in agenda view by dot lines. 113Replaced the solid half-hour lines in agenda view by dot lines.
97Added possibility of printing the What's Next View on the desktop 114Added possibility of printing the What's Next View on the desktop
98(i.e. Windows and Linux). 115(i.e. Windows and Linux).
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 0eb46e8..d260be3 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,185 +1,184 @@
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{ "Allday","Ganztägig" }, 61{ "Allday","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{ "Bigger","Größer" }, 78{ "Bigger","Größer" },
79{ "Biggest","Riesig" }, 79{ "Biggest","Riesig" },
80{ "Big","Groß" }, 80{ "Big","Groß" },
81{ "<b>On:</b> %1","<b>Am:</b> %1" }, 81{ "<b>On:</b> %1","<b>Am:</b> %1" },
82{ "<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" }, 82{ "<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" },
83{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" }, 83{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" },
84{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" }, 84{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" },
85{ "Busy","Belegt" }, 85{ "Busy","Belegt" },
86{ "&Cancel","Abbre&chen" }, 86{ "&Cancel","Abbre&chen" },
87{ "Cancel","Abbrechen" }, 87{ "Cancel","Abbrechen" },
88{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" }, 88{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" },
89{ "Cannot delete To-Do which has children.","Kann Todo nicht löschen, da noch Einträge vorhanden sind" },
90{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." }, 89{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." },
91{ "Categories...","Kategorien..." }, 90{ "Categories...","Kategorien..." },
92{ "Categories","Kategorien" }, 91{ "Categories","Kategorien" },
93{ "Category","Kategorie" }, 92{ "Category","Kategorie" },
94{ "Center View","Zentriere Ansicht" }, 93{ "Center View","Zentriere Ansicht" },
95{ "Change","Ändere" }, 94{ "Change","Ändere" },
96{ "Cinema","Kino" }, 95{ "Cinema","Kino" },
97{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" }, 96{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" },
98{ "Clone Item","Klone Eintrag" }, 97{ "Clone Item","Klone Eintrag" },
99{ "&Close","S&chließen" }, 98{ "&Close","S&chließen" },
100{ "Close","Schließen" }, 99{ "Close","Schließen" },
101{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 100{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
102{ "Colors","Farben" }, 101{ "Colors","Farben" },
103{ "completed","erledigt" }, 102{ "completed","erledigt" },
104{ "completed on %1","erledigt am %1" }, 103{ "completed on %1","erledigt am %1" },
105{ "Complete","Erledigt" }, 104{ "Complete","Erledigt" },
106{ "Confidential","Vertraulich" }, 105{ "Confidential","Vertraulich" },
107{ "Configure...","Einstellungen..." }, 106{ "Configure...","Einstellungen..." },
108{ "Confirm &deletes","Löschvogang bestätigen" }, 107{ "Confirm &deletes","Löschvogang bestätigen" },
109{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 108{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
110{ "Counter-event Viewer","Terminzähler Ansicht" }, 109{ "Counter-event Viewer","Terminzähler Ansicht" },
111{ "Daily ending hour:","Feierabend:" }, 110{ "Daily ending hour:","Feierabend:" },
112{ "Daily starting hour:","Anfangszeit:" }, 111{ "Daily starting hour:","Anfangszeit:" },
113{ "Daily","Täglich" }, 112{ "Daily","Täglich" },
114{ "Date Format","Datums Format" }, 113{ "Date Format","Datums Format" },
115{ "Date Format:","Datums Format:" }, 114{ "Date Format:","Datums Format:" },
116{ "DateNavigator:(nr)","Datums Navigator" }, 115{ "DateNavigator:(nr)","Datums Navigator" },
117{ "Dates: ","Datum: " }, 116{ "Dates: ","Datum: " },
118{ "Date && Time","Datum && Zeit" }, 117{ "Date && Time","Datum && Zeit" },
119{ "Day begins at:","Der Tag beginnt um:" }, 118{ "Day begins at:","Der Tag beginnt um:" },
120{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 119{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
121{ "Days in What's Next:","Tage in What's Next:" }, 120{ "Days in What's Next:","Tage in What's Next:" },
122{ "day(s)","Tag(e)" }, 121{ "day(s)","Tag(e)" },
123{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 122{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
124{ "day","Tag" }, 123{ "day","Tag" },
125{ "Dec","Dez" }, 124{ "Dec","Dez" },
126{ "December","Dezember" }, 125{ "December","Dezember" },
127{ "Default alarm time:","Standard Alarmzeit:" }, 126{ "Default alarm time:","Standard Alarmzeit:" },
128{ "Default appointment time:","Standard Termin Startzeit:" }, 127{ "Default appointment time:","Standard Termin Startzeit:" },
129{ "Default event color:","Standard Terminfarbe:" }, 128{ "Default event color:","Standard Terminfarbe:" },
130{ "Default","Standard" }, 129{ "Default","Standard" },
131{ "Def. duration of new app.:","Standard Termin Länge:" }, 130{ "Def. duration of new app.:","Standard Termin Länge:" },
132{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" }, 131{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
133{ "Delete All","Lösche alles" }, 132{ "Delete All","Lösche alles" },
134{ "Delete all selected","Lösche alle Selektierten" }, 133{ "Delete all selected","Lösche alle Selektierten" },
135{ "Delete Current","Aktuellen löschen" }, 134{ "Delete Current","Aktuellen löschen" },
136{ "Delete Event...","Lösche Termin..." }, 135{ "Delete Event...","Lösche Termin..." },
137{ "Delete Event","Lösche Termin" }, 136{ "Delete Event","Lösche Termin" },
138{ "&Delete","Löschen" }, 137{ "&Delete","Löschen" },
139{ "Delete...","Löschen..." }, 138{ "Delete...","Löschen..." },
140{ "Delete","Löschen" }, 139{ "Delete","Löschen" },
141{ "Delete Todo...","Lösche Todo..." }, 140{ "Delete Todo...","Lösche Todo..." },
142{ "Delete To-Do","Lösche Todo" }, 141{ "Delete To-Do","Lösche Todo" },
143{ "Deleting item %d ...","Lösche Eintrag %d..." }, 142{ "Deleting item %d ...","Lösche Eintrag %d..." },
144{ "Descriptions","Beschreibungen" }, 143{ "Descriptions","Beschreibungen" },
145{ "Deselect All","Deselektiere Alle" }, 144{ "Deselect All","Deselektiere Alle" },
146{ "Details","Details" }, 145{ "Details","Details" },
147{ "Dinner","Abendessen" }, 146{ "Dinner","Abendessen" },
148{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 147{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
149{ "Due Date","Fällig am" }, 148{ "Due Date","Fällig am" },
150{ "Due: ","Fällig: "}, 149{ "Due: ","Fällig: "},
151{ "Due Time","Fällig um" }, 150{ "Due Time","Fällig um" },
152{ "Due:","Fällig:"}, 151{ "Due:","Fällig:"},
153{ "Duration: ","Dauer: " }, 152{ "Duration: ","Dauer: " },
154{ "Edit...","Bearbeite..." }, 153{ "Edit...","Bearbeite..." },
155{ "Edit","Bearbeite" }, 154{ "Edit","Bearbeite" },
156{ "Edit Event...","Bearbeite Termin..." }, 155{ "Edit Event...","Bearbeite Termin..." },
157{ "Edit Event","Bearbeite Termin" }, 156{ "Edit Event","Bearbeite Termin" },
158{ "Edit exceptions","Bearbeite Ausnahmen" }, 157{ "Edit exceptions","Bearbeite Ausnahmen" },
159{ "EditorBox:","Editor Fenster:" }, 158{ "EditorBox:","Editor Fenster:" },
160{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 159{ "Edit Recurrence Range","Bearbeite Wiederholung" },
161{ "Edit Todo...","Berabeite Todo..." }, 160{ "Edit Todo...","Berabeite Todo..." },
162{ "Edit To-Do","Todo bearbeiten" }, 161{ "Edit To-Do","Todo bearbeiten" },
163{ "E&mail address:","E&mail Adresse:" }, 162{ "E&mail address:","E&mail Adresse:" },
164{ "(EmptyEmail)","(KeineEmail)" }, 163{ "(EmptyEmail)","(KeineEmail)" },
165{ "(EmptyName)","(KeinName)" }, 164{ "(EmptyName)","(KeinName)" },
166{ "Enable Recurrence","Wiederholender Termin" }, 165{ "Enable Recurrence","Wiederholender Termin" },
167{ "End after","Endet nach"}, 166{ "End after","Endet nach"},
168{ "End by:","Endet am"}, 167{ "End by:","Endet am"},
169{ "End Date","End Datum" }, 168{ "End Date","End Datum" },
170{ "End:","Ende:" }, 169{ "End:","Ende:" },
171{ "End Time","End Zeit" }, 170{ "End Time","End Zeit" },
172{ "English","Englisch" }, 171{ "English","Englisch" },
173{ "Event","Termin" }, 172{ "Event","Termin" },
174{ "Event list","Termin Liste" }, 173{ "Event list","Termin Liste" },
175{ "Events","Termine" }, 174{ "Events","Termine" },
176{ "Event Viewer:","Termin Übersicht:" }, 175{ "Event Viewer:","Termin Übersicht:" },
177{ "every","jede" }, 176{ "every","jede" },
178{ "Exceptions...","Ausnahmen..." }, 177{ "Exceptions...","Ausnahmen..." },
179{ "Exceptions","Ausnahmen" }, 178{ "Exceptions","Ausnahmen" },
180{ "Exclude holidays","Ohne freie Tage" }, 179{ "Exclude holidays","Ohne freie Tage" },
181{ "Exclude Saturdays","Ohne Samstage" }, 180{ "Exclude Saturdays","Ohne Samstage" },
182{ "Feb","Feb" }, 181{ "Feb","Feb" },
183{ "February","Februar" }, 182{ "February","Februar" },
184{ "&Find","Suche!" }, 183{ "&Find","Suche!" },
185{ "Fonts","Schriftart" }, 184{ "Fonts","Schriftart" },
@@ -706,195 +705,195 @@
706{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 705{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
707{ "Local device name:","Name dieses Gerätes:" }, 706{ "Local device name:","Name dieses Gerätes:" },
708{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 707{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
709{ "Sync preferences","Synchronisations Einstellungen" }, 708{ "Sync preferences","Synchronisations Einstellungen" },
710{ "Profile kind","Profil Art" }, 709{ "Profile kind","Profil Art" },
711{ "Local file","Lokale Datei" }, 710{ "Local file","Lokale Datei" },
712{ "Local file:","Lokale Datei:" }, 711{ "Local file:","Lokale Datei:" },
713{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 712{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
714{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 713{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
715{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 714{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
716{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 715{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
717{ "Device","Gerät:" }, 716{ "Device","Gerät:" },
718{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 717{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
719{ "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" }, 718{ "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" },
720{ "Synchronization successful","Synchronisation erfolgreich" }, 719{ "Synchronization successful","Synchronisation erfolgreich" },
721{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 720{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
722{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 721{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
723{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 722{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
724{ "Enter password","Passwort eingeben" }, 723{ "Enter password","Passwort eingeben" },
725{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 724{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
726{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 725{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
727{ "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" }, 726{ "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" },
728{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 727{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
729{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 728{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
730{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 729{ "Edit Calendar Filters","Editiere Kalendar Filter" },
731{ "Enter filter name:","Neuer Filter Name:" }, 730{ "Enter filter name:","Neuer Filter Name:" },
732{ "Add Filter","Filter hinzufügen" }, 731{ "Add Filter","Filter hinzufügen" },
733{ "Question","Frage" }, 732{ "Question","Frage" },
734{ "Filter position: ","Filter Position: " }, 733{ "Filter position: ","Filter Position: " },
735{ "Month View","Monatsansicht" }, 734{ "Month View","Monatsansicht" },
736{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 735{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
737{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 736{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
738{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 737{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
739{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 738{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
740{ "Access: ","Zugriff: " }, 739{ "Access: ","Zugriff: " },
741{ "Needs Action","Aktion notwendig" }, 740{ "Needs Action","Aktion notwendig" },
742{ "Accepted","Akzeptiert" }, 741{ "Accepted","Akzeptiert" },
743{ "Declined","Abgelehnt" }, 742{ "Declined","Abgelehnt" },
744{ "Tentative","Vorläufig" }, 743{ "Tentative","Vorläufig" },
745{ "Delegated","Beauftragt" }, 744{ "Delegated","Beauftragt" },
746{ "Completed","Vollständig" }, 745{ "Completed","Vollständig" },
747{ "In Process","In Bearbeitung" }, 746{ "In Process","In Bearbeitung" },
748{ "Participant","Teilnehmer" }, 747{ "Participant","Teilnehmer" },
749{ "Optional Participant","Möglicher Teilnehmer" }, 748{ "Optional Participant","Möglicher Teilnehmer" },
750{ "Observer","Beobachter" }, 749{ "Observer","Beobachter" },
751{ "Chair","Vorsitzender" }, 750{ "Chair","Vorsitzender" },
752{ "Not supported \non desktop!\n","" }, 751{ "Not supported \non desktop!\n","" },
753{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " }, 752{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " },
754{ "Date range: ","Datums Zeitspanne: " }, 753{ "Date range: ","Datums Zeitspanne: " },
755{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 754{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
756{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 755{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
757{ "Add / remove events","Add./entferne Termine" }, 756{ "Add / remove events","Add./entferne Termine" },
758{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 757{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
759{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 758{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
760{ "\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" }, 759{ "\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" },
761{ "Overwrite","Überschreiben" }, 760{ "Overwrite","Überschreiben" },
762{ "Sync+save","Syncen+speichern" }, 761{ "Sync+save","Syncen+speichern" },
763{ "Default","Standard" }, 762{ "Default","Standard" },
764{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 763{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
765{ " %d items?"," %d Einträge?" }, 764{ " %d items?"," %d Einträge?" },
766{ "\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?" }, 765{ "\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?" },
767{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 766{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
768{ "Current","Aktuelle" }, 767{ "Current","Aktuelle" },
769{ "\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" }, 768{ "\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" },
770{ "All","Alle" }, 769{ "All","Alle" },
771{ "Data Loss Warning","Datenverlust Warnung" }, 770{ "Data Loss Warning","Datenverlust Warnung" },
772{ "Proceed","Weitermachen" }, 771{ "Proceed","Weitermachen" },
773{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 772{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
774{ "Filter disabled ","Filter abgeschaltet" }, 773{ "Filter disabled ","Filter abgeschaltet" },
775{ "Filter selected: ","Gewählter Filter: " }, 774{ "Filter selected: ","Gewählter Filter: " },
776{ "Toggle Cancel","Gecancelt ändern" }, 775{ "Toggle Cancel","Gecancelt ändern" },
777{ "&Toggle Cancel","Gecancel&t ändern" }, 776{ "&Toggle Cancel","Gecancel&t ändern" },
778{ "Configure Toolbar","Konfiguriere Toolbar" }, 777{ "Configure Toolbar","Konfiguriere Toolbar" },
779{ "Stretched TB","Gedehnte TB" }, 778{ "Stretched TB","Gedehnte TB" },
780{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 779{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
781{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 780{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
782{ "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" }, 781{ "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" },
783{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 782{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
784{ "Imported file successfully","Datei erfolgreich importiert" }, 783{ "Imported file successfully","Datei erfolgreich importiert" },
785{ "Error importing file","Fehler beim Importieren der Datei" }, 784{ "Error importing file","Fehler beim Importieren der Datei" },
786{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 785{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
787{ "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" }, 786{ "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" },
788{ "Overwrite!","Überschreiben!" }, 787{ "Overwrite!","Überschreiben!" },
789{ "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" }, 788{ "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" },
790{ "Load backup filename","Lade Backup Dateiname" }, 789{ "Load backup filename","Lade Backup Dateiname" },
791{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 790{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
792{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 791{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
793{ "Save backup filename","Speichere Backup Dateiname" }, 792{ "Save backup filename","Speichere Backup Dateiname" },
794{ "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" }, 793{ "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" },
795{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 794{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
796{ "Details of attendee","Teilnehmerdetails" }, 795{ "Details of attendee","Teilnehmerdetails" },
797{ "Work phone:\n","Telefon Arbeit:\n" }, 796{ "Work phone:\n","Telefon Arbeit:\n" },
798{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 797{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
799{ "Home phone:\n","Telefon privat:\n" }, 798{ "Home phone:\n","Telefon privat:\n" },
800{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 799{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
801{ "Email:\n","Email:\n" }, 800{ "Email:\n","Email:\n" },
802{ "Alarm disabled","Alarm deaktiviert" }, 801{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
803{ "Audio.Al.: ","Audio Al.: " }, 802{ "Audio Al.: ","Audio Al.: " },
804{ "Proc.Al.: ","Proc.Al.: " }, 803{ "Proc.Al.: ","Proz.Al.: " },
805{ "No sound set","Kein Sound definiert" }, 804{ "No sound set","Kein Sound definiert" },
806{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 805{ "*.wav|Wav Files","*.wav|Wav Dateien" },
807{ "No program set","Kein Programm definiert" }, 806{ "No program set","Kein Programm definiert" },
808{ "Running '%1'","Ausführen '%1'" }, 807{ "Running '%1'","Ausführen '%1'" },
809{ "Playing '%1'","Abspielen '%1'" }, 808{ "Playing '%1'","Abspielen '%1'" },
810{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 809{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
811{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 810{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
812{ "Load!","Laden!" }, 811{ "Load!","Laden!" },
813{ "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" }, 812{ "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" },
814{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 813{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
815{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 814{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
816{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 815{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
817{ "Features + hints...","Eigenschaften + Tipps..." }, 816{ "Features + hints...","Eigenschaften + Tipps..." },
818{ "User translation...","Benutzer Übersetzung..." }, 817{ "User translation...","Benutzer Übersetzung..." },
819{ "Sync HowTo...","Synchronisation HowTo..." }, 818{ "Sync HowTo...","Synchronisation HowTo..." },
820{ "Print calendar...","Drucke Kalender..." }, 819{ "Print calendar...","Drucke Kalender..." },
821{ "Anniversary","Jahrestag" }, 820{ "Anniversary","Jahrestag" },
822{ "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" }, 821{ "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" },
823{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 822{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
824{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 823{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
825{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 824{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
826{ "<b>Access: </b>","<b>Zugriff: </b>" }, 825{ "<b>Access: </b>","<b>Zugriff: </b>" },
827{ "(%1 min before)","(%1 min vorher)" }, 826{ "(%1 min before)","(%1 min vorher)" },
828{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 827{ "<b>Categories: </b>","<b>Kategorien: </b>" },
829{ "Save Journal/Description...","Speichere Journal/Details..." }, 828{ "Save Journal/Description...","Speichere Journal/Details..." },
830{ "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." }, 829{ "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." },
831{ "Continue","Weitermachen" }, 830{ "Continue","Weitermachen" },
832{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 831{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
833{ "Attendee:","Teilnehmer:" }, 832{ "Attendee:","Teilnehmer:" },
834{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 833{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
835{ "On day ","Am Tag " }, 834{ "On day ","Am Tag " },
836{ "%1 of ","%1 des Monats" }, 835{ "%1 of ","%1 des Monats" },
837{ "%1 of the year","%1 des Jahres" }, 836{ "%1 of the year","%1 des Jahres" },
838{ "Anonymous","Anonymo" }, 837{ "Anonymous","Anonymo" },
839{ "nobody@nowhere","niemand@nirgendwo" }, 838{ "nobody@nowhere","niemand@nirgendwo" },
840{ "calendar.html","calendar.html" }, 839{ "calendar.html","calendar.html" },
841{ " Local Time"," Locale Zeit" }, 840{ " Local Time"," Locale Zeit" },
842{ "Unknown Name","Unbekannter Name" }, 841{ "Unknown Name","Unbekannter Name" },
843{ "unknown@nowhere","unbekannt@nirgendwo" }, 842{ "unknown@nowhere","unbekannt@nirgendwo" },
844{ "Beam via IR!","Beam via IR!" }, 843{ "Beam via IR!","Beam via IR!" },
845{ "Next Month","Nächster Monat" }, 844{ "Next Month","Nächster Monat" },
846{ "Prio","Prio" }, 845{ "Prio","Prio" },
847{ "Reparent Todo","Mache Sub-Todo" }, 846{ "Reparent Todo","Mache Sub-Todo" },
848{ "tomorrow","morgen" }, 847{ "tomorrow","morgen" },
849{ "today","heute" }, 848{ "today","heute" },
850{ "yesterday","gestern" }, 849{ "yesterday","gestern" },
851{ "Ok","Ok" }, 850{ "Ok","Ok" },
852{ "Ok+Agenda","Ok+Agenda" }, 851{ "Ok+Agenda","Ok+Agenda" },
853{ "Email","Email" }, 852{ "Email","Email" },
854{ "RSVP","RSVP" }, 853{ "RSVP","RSVP" },
855{ "Email:","Email:" }, 854{ "Email:","Email:" },
856{ "Appointment Time ","Termin Zeit " }, 855{ "Appointment Time ","Termin Zeit " },
857{ "2","2" }, 856{ "2","2" },
858{ "3","3" }, 857{ "3","3" },
859{ "4","4" }, 858{ "4","4" },
860{ " 0 %"," 0 %" }, 859{ " 0 %"," 0 %" },
861{ " 20 %"," 20 %" }, 860{ " 20 %"," 20 %" },
862{ " 40 %"," 40 %" }, 861{ " 40 %"," 40 %" },
863{ " 60 %"," 60 %" }, 862{ " 60 %"," 60 %" },
864{ " 80 %"," 80 %" }, 863{ " 80 %"," 80 %" },
865{ "100 %","100 %" }, 864{ "100 %","100 %" },
866{ "Filter","Filter" }, 865{ "Filter","Filter" },
867{ "Configure","Konfiguriere" }, 866{ "Configure","Konfiguriere" },
868{ "What's Next","What's Next" }, 867{ "What's Next","What's Next" },
869{ "Complete calendar...","Kompletten Kalender..." }, 868{ "Complete calendar...","Kompletten Kalender..." },
870{ "Filtered calendar...","Gefilterten Kalender..." }, 869{ "Filtered calendar...","Gefilterten Kalender..." },
871{ "Export to phone","Exportiere zum Handy" }, 870{ "Export to phone","Exportiere zum Handy" },
872{ "Beam receive enabled","Beam Empfang an" }, 871{ "Beam receive enabled","Beam Empfang an" },
873{ "What's new?","Was ist neu?" }, 872{ "What's new?","Was ist neu?" },
874{ "FAQ...","FAQ..." }, 873{ "FAQ...","FAQ..." },
875{ "Licence...","Licence..." }, 874{ "Licence...","Licence..." },
876{ "What's This?","What's This?" }, 875{ "What's This?","What's This?" },
877{ "&Edit...","&Editiere..." }, 876{ "&Edit...","&Editiere..." },
878{ "Oktober","Oktober" }, 877{ "Oktober","Oktober" },
879{ "Title","Titel" }, 878{ "Title","Titel" },
880{ "%1 %","%1 %" }, 879{ "%1 %","%1 %" },
881{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 880{ "Enable Pi-Sync","Schalte Pi-Sync an" },
882{ "Import!","Importiere!" }, 881{ "Import!","Importiere!" },
883{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 882{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
884{ "Export to phone options","Export ans Handy Optionen" }, 883{ "Export to phone options","Export ans Handy Optionen" },
885{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 884{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
886{ "I/O device: ","I/O device: " }, 885{ "I/O device: ","I/O device: " },
887{ "Connection: ","Connection: " }, 886{ "Connection: ","Connection: " },
888{ "Model(opt.): ","Model(opt.): " }, 887{ "Model(opt.): ","Model(opt.): " },
889{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 888{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
890{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 889{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
891{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 890{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
892{ "Export to mobile phone!","Exportiere auf das Handy!" }, 891{ "Export to mobile phone!","Exportiere auf das Handy!" },
893{ "Export complete calendar","Exportiere kompletten Kalender" }, 892{ "Export complete calendar","Exportiere kompletten Kalender" },
894{ "Writing to phone...","Sende Daten ans Handy..." }, 893{ "Writing to phone...","Sende Daten ans Handy..." },
895{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 894{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
896{ "Retry","Nochmal versuchen" }, 895{ "Retry","Nochmal versuchen" },
897{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 896{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
898{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 897{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
899{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 898{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
900{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 899{ "Export filtered calendar","Exportiere gefilterten Kalender" },
@@ -1098,101 +1097,105 @@
1098{ "Save settings","Speichere Einstellungen" }, 1097{ "Save settings","Speichere Einstellungen" },
1099{ "Save standard","Speichere Standard" }, 1098{ "Save standard","Speichere Standard" },
1100{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1099{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1101{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" }, 1100{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" },
1102{ "Data storage path","Daten Speicherpfad" }, 1101{ "Data storage path","Daten Speicherpfad" },
1103{ "Language","Sprache" }, 1102{ "Language","Sprache" },
1104{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1103{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1105{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1104{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1106{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1105{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1107{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" }, 1106{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" },
1108{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1107{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1109{ "KO/Pi","KO/Pi" }, 1108{ "KO/Pi","KO/Pi" },
1110{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1109{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1111{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1110{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1112{ "Sound.Al.: ","Sound.Al.: " }, 1111{ "Sound.Al.: ","Sound.Al.: " },
1113{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1112{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1114{ "Restore","Wiederherstellen" }, 1113{ "Restore","Wiederherstellen" },
1115{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1114{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1116{ "% completed","% komplett" }, 1115{ "% completed","% komplett" },
1117{ "%d item(s) found.","%d Item(s) gefunden." }, 1116{ "%d item(s) found.","%d Item(s) gefunden." },
1118{ "Set complete","Setze auf erledigt" }, 1117{ "Set complete","Setze auf erledigt" },
1119{ "(cancelled)","(gecancelt)" }, 1118{ "(cancelled)","(gecancelt)" },
1120{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1119{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1121{ " Local time "," Locale Zeit " }, 1120{ " Local time "," Locale Zeit " },
1122{ "Form2","Form2" }, 1121{ "Form2","Form2" },
1123{ "Filter enabled","Filter angeschaltet" }, 1122{ "Filter enabled","Filter angeschaltet" },
1124{ "Edit Filters","Ändere Filter" }, 1123{ "Edit Filters","Ändere Filter" },
1125{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1124{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1126{ "Agenda","Agenda" }, 1125{ "Agenda","Agenda" },
1127{ " ("," (" }, 1126{ " ("," (" },
1128{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1127{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1129{ "Print","Print" }, 1128{ "Print","Print" },
1130{ "&Setup Printer...","Drucker &Setup..." }, 1129{ "&Setup Printer...","Drucker &Setup..." },
1131{ "View Type","Zeige Typ" }, 1130{ "View Type","Zeige Typ" },
1132{ "Page &orientation:","Seiten Ausrichtung:" }, 1131{ "Page &orientation:","Seiten Ausrichtung:" },
1133{ "Use Default of Selected Style","Default des selektierten Stils" }, 1132{ "Use Default of Selected Style","Default des selektierten Stils" },
1134{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1133{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1135{ "Portrait","Portrait" }, 1134{ "Portrait","Portrait" },
1136{ "Landscape","Landschaft" }, 1135{ "Landscape","Landschaft" },
1137{ "Print day","Drucke Tag" }, 1136{ "Print day","Drucke Tag" },
1138{ "CalPrintDay_Base","CalPrintDay_Base" }, 1137{ "CalPrintDay_Base","CalPrintDay_Base" },
1139{ "Date && Time Range","Datum && Zeitspanne" }, 1138{ "Date && Time Range","Datum && Zeitspanne" },
1140{ "&End date:","&Enddatum:" }, 1139{ "&End date:","&Enddatum:" },
1141{ "&Start date:","&Startdatum:" }, 1140{ "&Start date:","&Startdatum:" },
1142{ "Start &time:","Startzeit:" }, 1141{ "Start &time:","Startzeit:" },
1143{ "End ti&me:","Endzeit:" }, 1142{ "End ti&me:","Endzeit:" },
1144{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" }, 1143{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" },
1145{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1144{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1146{ "Alt+D","Alt+D" }, 1145{ "Alt+D","Alt+D" },
1147{ "&Use colors","Nutze Farben" }, 1146{ "&Use colors","Nutze Farben" },
1148{ "Alt+U","Alt+U" }, 1147{ "Alt+U","Alt+U" },
1149{ "Print week","Drucke Woche" }, 1148{ "Print week","Drucke Woche" },
1150{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1149{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1151{ "Use &colors","Nutze Farben" }, 1150{ "Use &colors","Nutze Farben" },
1152{ "Type of View","Typ der Ansicht" }, 1151{ "Type of View","Typ der Ansicht" },
1153{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1152{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1154{ "Alt+F","Alt+F" }, 1153{ "Alt+F","Alt+F" },
1155{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1154{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1156{ "Alt+T","Alt+T" }, 1155{ "Alt+T","Alt+T" },
1157{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1156{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1158{ "Print month","Drucke Monat" }, 1157{ "Print month","Drucke Monat" },
1159{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1158{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1160{ "&Start month:","&Startmonat:" }, 1159{ "&Start month:","&Startmonat:" },
1161{ "&End month:","&Endmonat:" }, 1160{ "&End month:","&Endmonat:" },
1162{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1161{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1163{ "Print todos","Drucke Todos" }, 1162{ "Print todos","Drucke Todos" },
1164{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1163{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1165{ "Include &description of the item","Inclusive Itembeschreibung" }, 1164{ "Include &description of the item","Inclusive Itembeschreibung" },
1166{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1165{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1167{ "Include &priority of the item","Inclusive Priorität des Items" }, 1166{ "Include &priority of the item","Inclusive Priorität des Items" },
1168{ "Items to Print","Zu druckende Items" }, 1167{ "Items to Print","Zu druckende Items" },
1169{ "&From:","Von:" }, 1168{ "&From:","Von:" },
1170{ "&To:","Bis:" }, 1169{ "&To:","Bis:" },
1171{ "Print &all todo items","Drucke alle Todo Items" }, 1170{ "Print &all todo items","Drucke alle Todo Items" },
1172{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1171{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1173{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1172{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1174{ "Todo List","Todo Liste" }, 1173{ "Todo List","Todo Liste" },
1175{ "&Title:","&Titel:" }, 1174{ "&Title:","&Titel:" },
1176{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1175{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1177{ "Todo list","Todo Liste" }, 1176{ "Todo list","Todo Liste" },
1178{ "&Print...","Drucke..." }, 1177{ "&Print...","Drucke..." },
1179{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1178{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1180{ "[Unconfigured]","[Unkonfiguriert]" }, 1179{ "[Unconfigured]","[Unkonfiguriert]" },
1181{ "OK","OK" }, 1180{ "OK","OK" },
1182{ "FilterEditor","FilterEditor" }, 1181{ "FilterEditor","FilterEditor" },
1183{ "Include","Inclusive" }, 1182{ "Include","Inclusive" },
1184{ "Exclude","Exclusive" }, 1183{ "Exclude","Exclusive" },
1185{ "Edit Selection...","Editiere Selektion..." }, 1184{ "Edit Selection...","Editiere Selektion..." },
1186{ "recurring events","wiederholende Ereignisse" }, 1185{ "recurring events","wiederholende Ereignisse" },
1187{ "completed to-dos","erledigte Todos" }, 1186{ "completed to-dos","erledigte Todos" },
1188{ "events","Ereignisse" }, 1187{ "events","Ereignisse" },
1189{ "todos","Todos" }, 1188{ "todos","Todos" },
1190{ "journals","Journale" }, 1189{ "journals","Journale" },
1191{ "public","öffentlich" }, 1190{ "public","öffentlich" },
1192{ "private","privat" }, 1191{ "private","privat" },
1193{ "confidential","vertraulich" }, 1192{ "confidential","vertraulich" },
1194{ "","" }, 1193{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1194{ "Yesterday","Gestern" },
1195{ "Day after tomorrow","Übermorgen" },
1196{ "Tomorrow","Morgen" },
1197{ "Day before yesterday","Vorgestern" },
1195{ "","" }, 1198{ "","" },
1196{ "","" }, 1199{ "","" },
1197{ "","" }, 1200{ "","" },
1198{ "","" }, 1201{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 8f05276..038da54 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -2092,195 +2092,195 @@ void CalendarView::eventChanged(Event *event)
2092 //updateUnmanagedViews(); 2092 //updateUnmanagedViews();
2093} 2093}
2094 2094
2095void CalendarView::eventAdded(Event *event) 2095void CalendarView::eventAdded(Event *event)
2096{ 2096{
2097 changeEventDisplay(event,KOGlobals::EVENTADDED); 2097 changeEventDisplay(event,KOGlobals::EVENTADDED);
2098} 2098}
2099 2099
2100void CalendarView::eventToBeDeleted(Event *) 2100void CalendarView::eventToBeDeleted(Event *)
2101{ 2101{
2102 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2102 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2103} 2103}
2104 2104
2105void CalendarView::eventDeleted() 2105void CalendarView::eventDeleted()
2106{ 2106{
2107 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2107 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2108} 2108}
2109void CalendarView::changeTodoDisplay(Todo *which, int action) 2109void CalendarView::changeTodoDisplay(Todo *which, int action)
2110{ 2110{
2111 changeIncidenceDisplay((Incidence *)which, action); 2111 changeIncidenceDisplay((Incidence *)which, action);
2112 mDateNavigator->updateView(); //LR 2112 mDateNavigator->updateView(); //LR
2113 //mDialogManager->updateSearchDialog(); 2113 //mDialogManager->updateSearchDialog();
2114 2114
2115 if (which) { 2115 if (which) {
2116 mViewManager->updateWNview(); 2116 mViewManager->updateWNview();
2117 //mTodoList->updateView(); 2117 //mTodoList->updateView();
2118 } 2118 }
2119 2119
2120} 2120}
2121 2121
2122void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2122void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2123{ 2123{
2124 updateUnmanagedViews(); 2124 updateUnmanagedViews();
2125 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2125 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2126 if ( action == KOGlobals::EVENTDELETED ) { //delete 2126 if ( action == KOGlobals::EVENTDELETED ) { //delete
2127 mCalendar->checkAlarmForIncidence( 0, true ); 2127 mCalendar->checkAlarmForIncidence( 0, true );
2128 if ( mEventViewerDialog ) 2128 if ( mEventViewerDialog )
2129 mEventViewerDialog->hide(); 2129 mEventViewerDialog->hide();
2130 } 2130 }
2131 else 2131 else
2132 mCalendar->checkAlarmForIncidence( which , false ); 2132 mCalendar->checkAlarmForIncidence( which , false );
2133} 2133}
2134 2134
2135// most of the changeEventDisplays() right now just call the view's 2135// most of the changeEventDisplays() right now just call the view's
2136// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2136// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2137void CalendarView::changeEventDisplay(Event *which, int action) 2137void CalendarView::changeEventDisplay(Event *which, int action)
2138{ 2138{
2139 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2139 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2140 changeIncidenceDisplay((Incidence *)which, action); 2140 changeIncidenceDisplay((Incidence *)which, action);
2141 mDateNavigator->updateView(); 2141 mDateNavigator->updateView();
2142 //mDialogManager->updateSearchDialog(); 2142 //mDialogManager->updateSearchDialog();
2143 2143
2144 if (which) { 2144 if (which) {
2145 // If there is an event view visible update the display 2145 // If there is an event view visible update the display
2146 mViewManager->currentView()->changeEventDisplay(which,action); 2146 mViewManager->currentView()->changeEventDisplay(which,action);
2147 // TODO: check, if update needed 2147 // TODO: check, if update needed
2148 // if (which->getTodoStatus()) { 2148 // if (which->getTodoStatus()) {
2149 mTodoList->updateView(); 2149 mTodoList->updateView();
2150 // } 2150 // }
2151 } else { 2151 } else {
2152 mViewManager->currentView()->updateView(); 2152 mViewManager->currentView()->updateView();
2153 } 2153 }
2154} 2154}
2155 2155
2156 2156
2157void CalendarView::updateTodoViews() 2157void CalendarView::updateTodoViews()
2158{ 2158{
2159 2159
2160 mTodoList->updateView(); 2160 mTodoList->updateView();
2161 mViewManager->currentView()->updateView(); 2161 mViewManager->currentView()->updateView();
2162 2162
2163} 2163}
2164 2164
2165 2165
2166void CalendarView::updateView(const QDate &start, const QDate &end) 2166void CalendarView::updateView(const QDate &start, const QDate &end)
2167{ 2167{
2168 mTodoList->updateView(); 2168 mTodoList->updateView();
2169 mViewManager->updateView(start, end); 2169 mViewManager->updateView(start, end);
2170 //mDateNavigator->updateView(); 2170 //mDateNavigator->updateView();
2171} 2171}
2172 2172
2173void CalendarView::updateView() 2173void CalendarView::updateView()
2174{ 2174{
2175 DateList tmpList = mNavigator->selectedDates(); 2175 DateList tmpList = mNavigator->selectedDates();
2176 2176
2177 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2177 if ( KOPrefs::instance()->mHideNonStartedTodos )
2178 mTodoList->updateView(); 2178 mTodoList->updateView();
2179 // We assume that the navigator only selects consecutive days. 2179 // We assume that the navigator only selects consecutive days.
2180 updateView( tmpList.first(), tmpList.last() ); 2180 updateView( tmpList.first(), tmpList.last() );
2181} 2181}
2182 2182
2183void CalendarView::updateUnmanagedViews() 2183void CalendarView::updateUnmanagedViews()
2184{ 2184{
2185 mDateNavigator->updateDayMatrix(); 2185 mDateNavigator->updateDayMatrix();
2186} 2186}
2187 2187
2188int CalendarView::msgItemDelete() 2188int CalendarView::msgItemDelete(const QString name)
2189{ 2189{
2190 return KMessageBox::warningContinueCancel(this, 2190 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2191 i18n("This item will be\npermanently deleted."), 2191 i18n("This item will be\npermanently deleted."),
2192 i18n("KO/Pi Confirmation"),i18n("Delete")); 2192 i18n("KO/Pi Confirmation"),i18n("Delete"));
2193} 2193}
2194 2194
2195 2195
2196void CalendarView::edit_cut() 2196void CalendarView::edit_cut()
2197{ 2197{
2198 Event *anEvent=0; 2198 Event *anEvent=0;
2199 2199
2200 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2200 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2201 2201
2202 if (mViewManager->currentView()->isEventView()) { 2202 if (mViewManager->currentView()->isEventView()) {
2203 if ( incidence && incidence->type() == "Event" ) { 2203 if ( incidence && incidence->type() == "Event" ) {
2204 anEvent = static_cast<Event *>(incidence); 2204 anEvent = static_cast<Event *>(incidence);
2205 } 2205 }
2206 } 2206 }
2207 2207
2208 if (!anEvent) { 2208 if (!anEvent) {
2209 KNotifyClient::beep(); 2209 KNotifyClient::beep();
2210 return; 2210 return;
2211 } 2211 }
2212 DndFactory factory( mCalendar ); 2212 DndFactory factory( mCalendar );
2213 factory.cutEvent(anEvent); 2213 factory.cutEvent(anEvent);
2214 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2214 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2215} 2215}
2216 2216
2217void CalendarView::edit_copy() 2217void CalendarView::edit_copy()
2218{ 2218{
2219 Event *anEvent=0; 2219 Event *anEvent=0;
2220 2220
2221 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2221 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2222 2222
2223 if (mViewManager->currentView()->isEventView()) { 2223 if (mViewManager->currentView()->isEventView()) {
2224 if ( incidence && incidence->type() == "Event" ) { 2224 if ( incidence && incidence->type() == "Event" ) {
2225 anEvent = static_cast<Event *>(incidence); 2225 anEvent = static_cast<Event *>(incidence);
2226 } 2226 }
2227 } 2227 }
2228 2228
2229 if (!anEvent) { 2229 if (!anEvent) {
2230 KNotifyClient::beep(); 2230 KNotifyClient::beep();
2231 return; 2231 return;
2232 } 2232 }
2233 DndFactory factory( mCalendar ); 2233 DndFactory factory( mCalendar );
2234 factory.copyEvent(anEvent); 2234 factory.copyEvent(anEvent);
2235} 2235}
2236 2236
2237void CalendarView::edit_paste() 2237void CalendarView::edit_paste()
2238{ 2238{
2239 QDate date = mNavigator->selectedDates().first(); 2239 QDate date = mNavigator->selectedDates().first();
2240 2240
2241 DndFactory factory( mCalendar ); 2241 DndFactory factory( mCalendar );
2242 Event *pastedEvent = factory.pasteEvent( date ); 2242 Event *pastedEvent = factory.pasteEvent( date );
2243 2243
2244 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2244 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2245} 2245}
2246 2246
2247void CalendarView::edit_options() 2247void CalendarView::edit_options()
2248{ 2248{
2249 mDialogManager->showOptionsDialog(); 2249 mDialogManager->showOptionsDialog();
2250 //writeSettings(); 2250 //writeSettings();
2251} 2251}
2252 2252
2253 2253
2254void CalendarView::slotSelectPickerDate( QDate d) 2254void CalendarView::slotSelectPickerDate( QDate d)
2255{ 2255{
2256 mDateFrame->hide(); 2256 mDateFrame->hide();
2257 if ( mDatePickerMode == 1 ) { 2257 if ( mDatePickerMode == 1 ) {
2258 mNavigator->slotDaySelect( d ); 2258 mNavigator->slotDaySelect( d );
2259 } else if ( mDatePickerMode == 2 ) { 2259 } else if ( mDatePickerMode == 2 ) {
2260 if ( mMoveIncidence->type() == "Todo" ) { 2260 if ( mMoveIncidence->type() == "Todo" ) {
2261 Todo * to = (Todo *) mMoveIncidence; 2261 Todo * to = (Todo *) mMoveIncidence;
2262 QTime tim; 2262 QTime tim;
2263 if ( to->hasDueDate() ) 2263 if ( to->hasDueDate() )
2264 tim = to->dtDue().time(); 2264 tim = to->dtDue().time();
2265 else { 2265 else {
2266 tim = QTime ( 0,0,0 ); 2266 tim = QTime ( 0,0,0 );
2267 to->setFloats( true ); 2267 to->setFloats( true );
2268 to->setHasDueDate( true ); 2268 to->setHasDueDate( true );
2269 } 2269 }
2270 QDateTime dt ( d,tim ); 2270 QDateTime dt ( d,tim );
2271 to->setDtDue( dt ); 2271 to->setDtDue( dt );
2272 todoChanged( to ); 2272 todoChanged( to );
2273 } else { 2273 } else {
2274 if ( mMoveIncidence->doesRecur() ) { 2274 if ( mMoveIncidence->doesRecur() ) {
2275#if 0 2275#if 0
2276 // PENDING implement this 2276 // PENDING implement this
2277 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2277 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2278 mCalendar()->addIncidence( newInc ); 2278 mCalendar()->addIncidence( newInc );
2279 if ( mMoveIncidence->type() == "Todo" ) 2279 if ( mMoveIncidence->type() == "Todo" )
2280 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2280 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2281 else 2281 else
2282 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2282 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2283 mMoveIncidence = newInc; 2283 mMoveIncidence = newInc;
2284 2284
2285#endif 2285#endif
2286 } 2286 }
@@ -2795,226 +2795,229 @@ void CalendarView::showJournal( Journal *jour )
2795// } 2795// }
2796 2796
2797void CalendarView::appointment_show() 2797void CalendarView::appointment_show()
2798{ 2798{
2799 Event *anEvent = 0; 2799 Event *anEvent = 0;
2800 2800
2801 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2801 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2802 2802
2803 if (mViewManager->currentView()->isEventView()) { 2803 if (mViewManager->currentView()->isEventView()) {
2804 if ( incidence && incidence->type() == "Event" ) { 2804 if ( incidence && incidence->type() == "Event" ) {
2805 anEvent = static_cast<Event *>(incidence); 2805 anEvent = static_cast<Event *>(incidence);
2806 } 2806 }
2807 } 2807 }
2808 2808
2809 if (!anEvent) { 2809 if (!anEvent) {
2810 KNotifyClient::beep(); 2810 KNotifyClient::beep();
2811 return; 2811 return;
2812 } 2812 }
2813 2813
2814 showEvent(anEvent); 2814 showEvent(anEvent);
2815} 2815}
2816 2816
2817void CalendarView::appointment_edit() 2817void CalendarView::appointment_edit()
2818{ 2818{
2819 Event *anEvent = 0; 2819 Event *anEvent = 0;
2820 2820
2821 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2821 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2822 2822
2823 if (mViewManager->currentView()->isEventView()) { 2823 if (mViewManager->currentView()->isEventView()) {
2824 if ( incidence && incidence->type() == "Event" ) { 2824 if ( incidence && incidence->type() == "Event" ) {
2825 anEvent = static_cast<Event *>(incidence); 2825 anEvent = static_cast<Event *>(incidence);
2826 } 2826 }
2827 } 2827 }
2828 2828
2829 if (!anEvent) { 2829 if (!anEvent) {
2830 KNotifyClient::beep(); 2830 KNotifyClient::beep();
2831 return; 2831 return;
2832 } 2832 }
2833 2833
2834 editEvent(anEvent); 2834 editEvent(anEvent);
2835} 2835}
2836 2836
2837void CalendarView::appointment_delete() 2837void CalendarView::appointment_delete()
2838{ 2838{
2839 Event *anEvent = 0; 2839 Event *anEvent = 0;
2840 2840
2841 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2841 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2842 2842
2843 if (mViewManager->currentView()->isEventView()) { 2843 if (mViewManager->currentView()->isEventView()) {
2844 if ( incidence && incidence->type() == "Event" ) { 2844 if ( incidence && incidence->type() == "Event" ) {
2845 anEvent = static_cast<Event *>(incidence); 2845 anEvent = static_cast<Event *>(incidence);
2846 } 2846 }
2847 } 2847 }
2848 2848
2849 if (!anEvent) { 2849 if (!anEvent) {
2850 KNotifyClient::beep(); 2850 KNotifyClient::beep();
2851 return; 2851 return;
2852 } 2852 }
2853 2853
2854 deleteEvent(anEvent); 2854 deleteEvent(anEvent);
2855} 2855}
2856 2856
2857void CalendarView::todo_resub( Todo * parent, Todo * sub ) 2857void CalendarView::todo_resub( Todo * parent, Todo * sub )
2858{ 2858{
2859 if (!sub) return; 2859 if (!sub) return;
2860 if (!parent) return; 2860 if (!parent) return;
2861 if ( sub->relatedTo() ) 2861 if ( sub->relatedTo() )
2862 sub->relatedTo()->removeRelation(sub); 2862 sub->relatedTo()->removeRelation(sub);
2863 sub->setRelatedTo(parent); 2863 sub->setRelatedTo(parent);
2864 sub->setRelatedToUid(parent->uid()); 2864 sub->setRelatedToUid(parent->uid());
2865 parent->addRelation(sub); 2865 parent->addRelation(sub);
2866 sub->updated(); 2866 sub->updated();
2867 parent->updated(); 2867 parent->updated();
2868 setModified(true); 2868 setModified(true);
2869 updateView(); 2869 updateView();
2870} 2870}
2871void CalendarView::todo_unsub(Todo *anTodo ) 2871void CalendarView::todo_unsub(Todo *anTodo )
2872{ 2872{
2873 // Todo *anTodo = selectedTodo(); 2873 // Todo *anTodo = selectedTodo();
2874 if (!anTodo) return; 2874 if (!anTodo) return;
2875 if (!anTodo->relatedTo()) return; 2875 if (!anTodo->relatedTo()) return;
2876 anTodo->relatedTo()->removeRelation(anTodo); 2876 anTodo->relatedTo()->removeRelation(anTodo);
2877 anTodo->setRelatedTo(0); 2877 anTodo->setRelatedTo(0);
2878 anTodo->updated(); 2878 anTodo->updated();
2879 anTodo->setRelatedToUid(""); 2879 anTodo->setRelatedToUid("");
2880 setModified(true); 2880 setModified(true);
2881 updateView(); 2881 updateView();
2882} 2882}
2883 2883
2884void CalendarView::deleteTodo(Todo *todo) 2884void CalendarView::deleteTodo(Todo *todo)
2885{ 2885{
2886 if (!todo) { 2886 if (!todo) {
2887 KNotifyClient::beep(); 2887 KNotifyClient::beep();
2888 return; 2888 return;
2889 } 2889 }
2890 if (KOPrefs::instance()->mConfirm) { 2890 if (KOPrefs::instance()->mConfirm) {
2891 switch (msgItemDelete()) { 2891 QString text = todo->summary().left(20);
2892 if (!todo->relations().isEmpty()) {
2893 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
2894
2895 }
2896 switch (msgItemDelete(text)) {
2892 case KMessageBox::Continue: // OK 2897 case KMessageBox::Continue: // OK
2898 bool deleteT = false;
2893 if (!todo->relations().isEmpty()) { 2899 if (!todo->relations().isEmpty()) {
2894 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2900 deleteT = removeCompletedSubTodos( todo );
2895 i18n("Delete To-Do")); 2901 }
2896 } else { 2902 // deleteT == true: todo already deleted in removeCompletedSubTodos
2903 if ( !deleteT ) {
2897 checkExternalId( todo ); 2904 checkExternalId( todo );
2898 calendar()->deleteTodo(todo); 2905 calendar()->deleteTodo(todo);
2899 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2906 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2900 updateView(); 2907 updateView();
2901 } 2908 }
2902 break; 2909 break;
2903 } // switch 2910 } // switch
2904 } else { 2911 } else {
2905 if (!todo->relations().isEmpty()) { 2912 checkExternalId( todo );
2906 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2913 mCalendar->deleteTodo(todo);
2907 i18n("Delete To-Do")); 2914 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2908 } else { 2915 updateView();
2909 checkExternalId( todo );
2910 mCalendar->deleteTodo(todo);
2911 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2912 updateView();
2913 }
2914 } 2916 }
2917
2915 emit updateSearchDialog(); 2918 emit updateSearchDialog();
2916} 2919}
2917void CalendarView::deleteJournal(Journal *jour) 2920void CalendarView::deleteJournal(Journal *jour)
2918{ 2921{
2919 if (!jour) { 2922 if (!jour) {
2920 KNotifyClient::beep(); 2923 KNotifyClient::beep();
2921 return; 2924 return;
2922 } 2925 }
2923 if (KOPrefs::instance()->mConfirm) { 2926 if (KOPrefs::instance()->mConfirm) {
2924 switch (msgItemDelete()) { 2927 switch (msgItemDelete( jour->description().left(20))) {
2925 case KMessageBox::Continue: // OK 2928 case KMessageBox::Continue: // OK
2926 calendar()->deleteJournal(jour); 2929 calendar()->deleteJournal(jour);
2927 updateView(); 2930 updateView();
2928 break; 2931 break;
2929 } // switch 2932 } // switch
2930 } else { 2933 } else {
2931 calendar()->deleteJournal(jour);; 2934 calendar()->deleteJournal(jour);;
2932 updateView(); 2935 updateView();
2933 } 2936 }
2934 emit updateSearchDialog(); 2937 emit updateSearchDialog();
2935} 2938}
2936 2939
2937void CalendarView::deleteEvent(Event *anEvent) 2940void CalendarView::deleteEvent(Event *anEvent)
2938{ 2941{
2939 if (!anEvent) { 2942 if (!anEvent) {
2940 KNotifyClient::beep(); 2943 KNotifyClient::beep();
2941 return; 2944 return;
2942 } 2945 }
2943 2946
2944 if (anEvent->recurrence()->doesRecur()) { 2947 if (anEvent->recurrence()->doesRecur()) {
2945 QDate itemDate = mViewManager->currentSelectionDate(); 2948 QDate itemDate = mViewManager->currentSelectionDate();
2946 int km; 2949 int km;
2947 if (!itemDate.isValid()) { 2950 if (!itemDate.isValid()) {
2948 //kdDebug() << "Date Not Valid" << endl; 2951 //kdDebug() << "Date Not Valid" << endl;
2949 if (KOPrefs::instance()->mConfirm) { 2952 if (KOPrefs::instance()->mConfirm) {
2950 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 2953 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
2951 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2954 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2952 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2955 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2953 if ( km == KMessageBox::Continue ) 2956 if ( km == KMessageBox::Continue )
2954 km = KMessageBox::No; // No = all below 2957 km = KMessageBox::No; // No = all below
2955 } else 2958 } else
2956 km = KMessageBox::No; 2959 km = KMessageBox::No;
2957 } else { 2960 } else {
2958 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + 2961 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) +
2959 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2962 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2960 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2963 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2961 i18n("KO/Pi Confirmation"),i18n("Current"), 2964 i18n("KO/Pi Confirmation"),i18n("Current"),
2962 i18n("All")); 2965 i18n("All"));
2963 } 2966 }
2964 switch(km) { 2967 switch(km) {
2965 2968
2966 case KMessageBox::No: // Continue // all 2969 case KMessageBox::No: // Continue // all
2967 //qDebug("KMessageBox::No "); 2970 //qDebug("KMessageBox::No ");
2968 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2971 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2969 schedule(Scheduler::Cancel,anEvent); 2972 schedule(Scheduler::Cancel,anEvent);
2970 2973
2971 checkExternalId( anEvent); 2974 checkExternalId( anEvent);
2972 mCalendar->deleteEvent(anEvent); 2975 mCalendar->deleteEvent(anEvent);
2973 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2976 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2974 break; 2977 break;
2975 2978
2976 // Disabled because it does not work 2979 // Disabled because it does not work
2977 //#if 0 2980 //#if 0
2978 case KMessageBox::Yes: // just this one 2981 case KMessageBox::Yes: // just this one
2979 //QDate qd = mNavigator->selectedDates().first(); 2982 //QDate qd = mNavigator->selectedDates().first();
2980 //if (!qd.isValid()) { 2983 //if (!qd.isValid()) {
2981 // kdDebug() << "no date selected, or invalid date" << endl; 2984 // kdDebug() << "no date selected, or invalid date" << endl;
2982 // KNotifyClient::beep(); 2985 // KNotifyClient::beep();
2983 // return; 2986 // return;
2984 //} 2987 //}
2985 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2988 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2986 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2989 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2987 anEvent->addExDate(itemDate); 2990 anEvent->addExDate(itemDate);
2988 int duration = anEvent->recurrence()->duration(); 2991 int duration = anEvent->recurrence()->duration();
2989 if ( duration > 0 ) { 2992 if ( duration > 0 ) {
2990 anEvent->recurrence()->setDuration( duration - 1 ); 2993 anEvent->recurrence()->setDuration( duration - 1 );
2991 } 2994 }
2992 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2995 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2993 } 2996 }
2994 break; 2997 break;
2995 //#endif 2998 //#endif
2996 } // switch 2999 } // switch
2997 } else { 3000 } else {
2998 if (KOPrefs::instance()->mConfirm) { 3001 if (KOPrefs::instance()->mConfirm) {
2999 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 3002 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
3000 i18n("\nAre you sure you want\nto delete this event?"), 3003 i18n("\nAre you sure you want\nto delete this event?"),
3001 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 3004 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3002 case KMessageBox::Continue: // OK 3005 case KMessageBox::Continue: // OK
3003 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3006 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3004 schedule(Scheduler::Cancel,anEvent); 3007 schedule(Scheduler::Cancel,anEvent);
3005 checkExternalId( anEvent); 3008 checkExternalId( anEvent);
3006 mCalendar->deleteEvent(anEvent); 3009 mCalendar->deleteEvent(anEvent);
3007 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3010 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3008 break; 3011 break;
3009 } // switch 3012 } // switch
3010 } else { 3013 } else {
3011 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3014 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3012 schedule(Scheduler::Cancel,anEvent); 3015 schedule(Scheduler::Cancel,anEvent);
3013 checkExternalId( anEvent); 3016 checkExternalId( anEvent);
3014 mCalendar->deleteEvent(anEvent); 3017 mCalendar->deleteEvent(anEvent);
3015 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3018 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3016 } 3019 }
3017 } // if-else 3020 } // if-else
3018 emit updateSearchDialog(); 3021 emit updateSearchDialog();
3019} 3022}
3020 3023
@@ -3390,192 +3393,209 @@ void CalendarView::adaptNavigationUnits()
3390void CalendarView::processMainViewSelection( Incidence *incidence ) 3393void CalendarView::processMainViewSelection( Incidence *incidence )
3391{ 3394{
3392 if ( incidence ) mTodoList->clearSelection(); 3395 if ( incidence ) mTodoList->clearSelection();
3393 processIncidenceSelection( incidence ); 3396 processIncidenceSelection( incidence );
3394} 3397}
3395 3398
3396void CalendarView::processTodoListSelection( Incidence *incidence ) 3399void CalendarView::processTodoListSelection( Incidence *incidence )
3397{ 3400{
3398 if ( incidence && mViewManager->currentView() ) { 3401 if ( incidence && mViewManager->currentView() ) {
3399 mViewManager->currentView()->clearSelection(); 3402 mViewManager->currentView()->clearSelection();
3400 } 3403 }
3401 processIncidenceSelection( incidence ); 3404 processIncidenceSelection( incidence );
3402} 3405}
3403 3406
3404void CalendarView::processIncidenceSelection( Incidence *incidence ) 3407void CalendarView::processIncidenceSelection( Incidence *incidence )
3405{ 3408{
3406 if ( incidence == mSelectedIncidence ) return; 3409 if ( incidence == mSelectedIncidence ) return;
3407 3410
3408 mSelectedIncidence = incidence; 3411 mSelectedIncidence = incidence;
3409 3412
3410 emit incidenceSelected( mSelectedIncidence ); 3413 emit incidenceSelected( mSelectedIncidence );
3411 3414
3412 if ( incidence && incidence->type() == "Event" ) { 3415 if ( incidence && incidence->type() == "Event" ) {
3413 Event *event = static_cast<Event *>( incidence ); 3416 Event *event = static_cast<Event *>( incidence );
3414 if ( event->organizer() == KOPrefs::instance()->email() ) { 3417 if ( event->organizer() == KOPrefs::instance()->email() ) {
3415 emit organizerEventsSelected( true ); 3418 emit organizerEventsSelected( true );
3416 } else { 3419 } else {
3417 emit organizerEventsSelected(false); 3420 emit organizerEventsSelected(false);
3418 } 3421 }
3419 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3422 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3420 KOPrefs::instance()->email() ) ) { 3423 KOPrefs::instance()->email() ) ) {
3421 emit groupEventsSelected( true ); 3424 emit groupEventsSelected( true );
3422 } else { 3425 } else {
3423 emit groupEventsSelected(false); 3426 emit groupEventsSelected(false);
3424 } 3427 }
3425 return; 3428 return;
3426 } else { 3429 } else {
3427 if ( incidence && incidence->type() == "Todo" ) { 3430 if ( incidence && incidence->type() == "Todo" ) {
3428 emit todoSelected( true ); 3431 emit todoSelected( true );
3429 Todo *event = static_cast<Todo *>( incidence ); 3432 Todo *event = static_cast<Todo *>( incidence );
3430 if ( event->organizer() == KOPrefs::instance()->email() ) { 3433 if ( event->organizer() == KOPrefs::instance()->email() ) {
3431 emit organizerEventsSelected( true ); 3434 emit organizerEventsSelected( true );
3432 } else { 3435 } else {
3433 emit organizerEventsSelected(false); 3436 emit organizerEventsSelected(false);
3434 } 3437 }
3435 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3438 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3436 KOPrefs::instance()->email() ) ) { 3439 KOPrefs::instance()->email() ) ) {
3437 emit groupEventsSelected( true ); 3440 emit groupEventsSelected( true );
3438 } else { 3441 } else {
3439 emit groupEventsSelected(false); 3442 emit groupEventsSelected(false);
3440 } 3443 }
3441 return; 3444 return;
3442 } else { 3445 } else {
3443 emit todoSelected( false ); 3446 emit todoSelected( false );
3444 emit organizerEventsSelected(false); 3447 emit organizerEventsSelected(false);
3445 emit groupEventsSelected(false); 3448 emit groupEventsSelected(false);
3446 } 3449 }
3447 return; 3450 return;
3448 } 3451 }
3449 3452
3450 /* if ( incidence && incidence->type() == "Todo" ) { 3453 /* if ( incidence && incidence->type() == "Todo" ) {
3451 emit todoSelected( true ); 3454 emit todoSelected( true );
3452 } else { 3455 } else {
3453 emit todoSelected( false ); 3456 emit todoSelected( false );
3454 }*/ 3457 }*/
3455} 3458}
3456 3459
3457 3460
3458void CalendarView::checkClipboard() 3461void CalendarView::checkClipboard()
3459{ 3462{
3460#ifndef KORG_NODND 3463#ifndef KORG_NODND
3461 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3464 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3462 emit pasteEnabled(true); 3465 emit pasteEnabled(true);
3463 } else { 3466 } else {
3464 emit pasteEnabled(false); 3467 emit pasteEnabled(false);
3465 } 3468 }
3466#endif 3469#endif
3467} 3470}
3468 3471
3469void CalendarView::showDates(const DateList &selectedDates) 3472void CalendarView::showDates(const DateList &selectedDates)
3470{ 3473{
3471 // kdDebug() << "CalendarView::selectDates()" << endl; 3474 // kdDebug() << "CalendarView::selectDates()" << endl;
3472 3475
3473 3476
3474 if ( !mBlockShowDates ) { 3477 if ( !mBlockShowDates ) {
3475 if ( mViewManager->currentView() ) { 3478 if ( mViewManager->currentView() ) {
3476 updateView( selectedDates.first(), selectedDates.last() ); 3479 updateView( selectedDates.first(), selectedDates.last() );
3477 } else { 3480 } else {
3478 mViewManager->showAgendaView(); 3481 mViewManager->showAgendaView();
3479 } 3482 }
3480 } 3483 }
3481 3484
3482 QString selDates; 3485 QString selDates;
3483 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3486 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3484 if (selectedDates.first() < selectedDates.last() ) 3487 if (selectedDates.first() < selectedDates.last() )
3485 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3488 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3489 else {
3490 QString addString;
3491 if ( selectedDates.first() == QDateTime::currentDateTime().date() )
3492 addString = i18n("Today");
3493 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
3494 addString = i18n("Tomorrow");
3495 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
3496 addString = i18n("Yesterday");
3497 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
3498 addString = i18n("Day before yesterday");
3499 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
3500 addString = i18n("Day after tomorrow");
3501 if ( !addString.isEmpty() ) {
3502 topLevelWidget()->setCaption( addString+", " + selDates );
3503 return;
3504 }
3505 }
3486 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3506 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3487 3507
3488} 3508}
3489 3509
3490QPtrList<CalFilter> CalendarView::filters() 3510QPtrList<CalFilter> CalendarView::filters()
3491{ 3511{
3492 return mFilters; 3512 return mFilters;
3493 3513
3494} 3514}
3495void CalendarView::editFilters() 3515void CalendarView::editFilters()
3496{ 3516{
3497 // kdDebug() << "CalendarView::editFilters()" << endl; 3517 // kdDebug() << "CalendarView::editFilters()" << endl;
3498 3518
3499 CalFilter *filter = mFilters.first(); 3519 CalFilter *filter = mFilters.first();
3500 while(filter) { 3520 while(filter) {
3501 kdDebug() << " Filter: " << filter->name() << endl; 3521 kdDebug() << " Filter: " << filter->name() << endl;
3502 filter = mFilters.next(); 3522 filter = mFilters.next();
3503 } 3523 }
3504 3524
3505 mDialogManager->showFilterEditDialog(&mFilters); 3525 mDialogManager->showFilterEditDialog(&mFilters);
3506} 3526}
3507void CalendarView::toggleFilter() 3527void CalendarView::toggleFilter()
3508{ 3528{
3509 showFilter(! mFilterView->isVisible()); 3529 showFilter(! mFilterView->isVisible());
3510} 3530}
3511 3531
3512KOFilterView *CalendarView::filterView() 3532KOFilterView *CalendarView::filterView()
3513{ 3533{
3514 return mFilterView; 3534 return mFilterView;
3515} 3535}
3516void CalendarView::selectFilter( int fil ) 3536void CalendarView::selectFilter( int fil )
3517{ 3537{
3518 mFilterView->setSelectedFilter( fil ); 3538 mFilterView->setSelectedFilter( fil );
3519} 3539}
3520void CalendarView::showFilter(bool visible) 3540void CalendarView::showFilter(bool visible)
3521{ 3541{
3522 if (visible) mFilterView->show(); 3542 if (visible) mFilterView->show();
3523 else mFilterView->hide(); 3543 else mFilterView->hide();
3524} 3544}
3525void CalendarView::toggleFilerEnabled( ) 3545void CalendarView::toggleFilerEnabled( )
3526{ 3546{
3527 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3547 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3528 if ( !mFilterView->filtersEnabled() ) 3548 if ( !mFilterView->filtersEnabled() )
3529 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3549 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3530 3550
3531} 3551}
3532void CalendarView::updateFilter() 3552void CalendarView::updateFilter()
3533{ 3553{
3534 CalFilter *filter = mFilterView->selectedFilter(); 3554 CalFilter *filter = mFilterView->selectedFilter();
3535 if (filter) { 3555 if (filter) {
3536 if (mFilterView->filtersEnabled()) { 3556 if (mFilterView->filtersEnabled()) {
3537 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3557 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3538 filter->setEnabled(true); 3558 filter->setEnabled(true);
3539 } 3559 }
3540 else filter->setEnabled(false); 3560 else filter->setEnabled(false);
3541 mCalendar->setFilter(filter); 3561 mCalendar->setFilter(filter);
3542 updateView(); 3562 updateView();
3543 } 3563 }
3544} 3564}
3545 3565
3546void CalendarView::filterEdited() 3566void CalendarView::filterEdited()
3547{ 3567{
3548 mFilterView->updateFilters(); 3568 mFilterView->updateFilters();
3549 updateFilter(); 3569 updateFilter();
3550 writeSettings(); 3570 writeSettings();
3551} 3571}
3552 3572
3553 3573
3554void CalendarView::takeOverEvent() 3574void CalendarView::takeOverEvent()
3555{ 3575{
3556 Incidence *incidence = currentSelection(); 3576 Incidence *incidence = currentSelection();
3557 3577
3558 if (!incidence) return; 3578 if (!incidence) return;
3559 3579
3560 incidence->setOrganizer(KOPrefs::instance()->email()); 3580 incidence->setOrganizer(KOPrefs::instance()->email());
3561 incidence->recreate(); 3581 incidence->recreate();
3562 incidence->setReadOnly(false); 3582 incidence->setReadOnly(false);
3563 3583
3564 updateView(); 3584 updateView();
3565} 3585}
3566 3586
3567void CalendarView::takeOverCalendar() 3587void CalendarView::takeOverCalendar()
3568{ 3588{
3569 // TODO: Create Calendar::allIncidences() function and use it here 3589 // TODO: Create Calendar::allIncidences() function and use it here
3570 3590
3571 QPtrList<Event> events = mCalendar->events(); 3591 QPtrList<Event> events = mCalendar->events();
3572 for(uint i=0; i<events.count(); ++i) { 3592 for(uint i=0; i<events.count(); ++i) {
3573 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3593 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3574 events.at(i)->recreate(); 3594 events.at(i)->recreate();
3575 events.at(i)->setReadOnly(false); 3595 events.at(i)->setReadOnly(false);
3576 } 3596 }
3577 3597
3578 QPtrList<Todo> todos = mCalendar->todos(); 3598 QPtrList<Todo> todos = mCalendar->todos();
3579 for(uint i=0; i<todos.count(); ++i) { 3599 for(uint i=0; i<todos.count(); ++i) {
3580 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3600 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3581 todos.at(i)->recreate(); 3601 todos.at(i)->recreate();
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index e27da9a..c8d6bdd 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -392,193 +392,193 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
392 void toggleFilerEnabled(); 392 void toggleFilerEnabled();
393 QPtrList<CalFilter> filters(); 393 QPtrList<CalFilter> filters();
394 void toggleFilter(); 394 void toggleFilter();
395 void showFilter(bool visible); 395 void showFilter(bool visible);
396 void updateFilter(); 396 void updateFilter();
397 void filterEdited(); 397 void filterEdited();
398 void selectFilter( int ); 398 void selectFilter( int );
399 KOFilterView *filterView(); 399 KOFilterView *filterView();
400 400
401 void showIntro(); 401 void showIntro();
402 402
403 /** Move the curdatepient view date to today */ 403 /** Move the curdatepient view date to today */
404 void goToday(); 404 void goToday();
405 405
406 /** Move to the next date(s) in the current view */ 406 /** Move to the next date(s) in the current view */
407 void goNext(); 407 void goNext();
408 408
409 /** Move to the previous date(s) in the current view */ 409 /** Move to the previous date(s) in the current view */
410 void goPrevious(); 410 void goPrevious();
411 /** Move to the next date(s) in the current view */ 411 /** Move to the next date(s) in the current view */
412 void goNextMonth(); 412 void goNextMonth();
413 413
414 /** Move to the previous date(s) in the current view */ 414 /** Move to the previous date(s) in the current view */
415 void goPreviousMonth(); 415 void goPreviousMonth();
416 416
417 void toggleExpand(); 417 void toggleExpand();
418 void toggleDateNavigatorWidget(); 418 void toggleDateNavigatorWidget();
419 void toggleAllDaySize(); 419 void toggleAllDaySize();
420 void dialogClosing(Incidence *); 420 void dialogClosing(Incidence *);
421 421
422 /** Look for new messages in the inbox */ 422 /** Look for new messages in the inbox */
423 void lookForIncomingMessages(); 423 void lookForIncomingMessages();
424 /** Look for new messages in the outbox */ 424 /** Look for new messages in the outbox */
425 void lookForOutgoingMessages(); 425 void lookForOutgoingMessages();
426 426
427 void processMainViewSelection( Incidence * ); 427 void processMainViewSelection( Incidence * );
428 void processTodoListSelection( Incidence * ); 428 void processTodoListSelection( Incidence * );
429 429
430 void processIncidenceSelection( Incidence * ); 430 void processIncidenceSelection( Incidence * );
431 431
432 void purgeCompleted(); 432 void purgeCompleted();
433 bool removeCompletedSubTodos( Todo* ); 433 bool removeCompletedSubTodos( Todo* );
434 void slotCalendarChanged(); 434 void slotCalendarChanged();
435 bool importBday(); 435 bool importBday();
436 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 436 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
437 bool importQtopia( const QString &categoriesFile, 437 bool importQtopia( const QString &categoriesFile,
438 const QString &datebookFile, 438 const QString &datebookFile,
439 const QString &tasklistFile ); 439 const QString &tasklistFile );
440 void syncExternal( int mode ); 440 void syncExternal( int mode );
441 void slotSelectPickerDate( QDate ) ; 441 void slotSelectPickerDate( QDate ) ;
442 void showDatePicker( ) ; 442 void showDatePicker( ) ;
443 void moveIncidence(Incidence *) ; 443 void moveIncidence(Incidence *) ;
444 void beamIncidence(Incidence *) ; 444 void beamIncidence(Incidence *) ;
445 void beamCalendar() ; 445 void beamCalendar() ;
446 void beamFilteredCalendar() ; 446 void beamFilteredCalendar() ;
447 void beamIncidenceList(QPtrList<Incidence>) ; 447 void beamIncidenceList(QPtrList<Incidence>) ;
448 void manageCategories(); 448 void manageCategories();
449 int addCategories(); 449 int addCategories();
450 void removeCategories(); 450 void removeCategories();
451 void setSyncDevice( QString ); 451 void setSyncDevice( QString );
452 void setSyncName( QString ); 452 void setSyncName( QString );
453 void showDay( QDate ); 453 void showDay( QDate );
454 void undo_delete(); 454 void undo_delete();
455 protected slots: 455 protected slots:
456 void timerAlarm(); 456 void timerAlarm();
457 void suspendAlarm(); 457 void suspendAlarm();
458 void beamDone( Ir *ir ); 458 void beamDone( Ir *ir );
459 /** Select a view or adapt the current view to display the specified dates. */ 459 /** Select a view or adapt the current view to display the specified dates. */
460 void showDates( const KCal::DateList & ); 460 void showDates( const KCal::DateList & );
461 void selectWeekNum ( int ); 461 void selectWeekNum ( int );
462 462
463 public: 463 public:
464 // show a standard warning 464 // show a standard warning
465 // returns KMsgBox::yesNoCancel() 465 // returns KMsgBox::yesNoCancel()
466 int msgCalModified(); 466 int msgCalModified();
467 virtual bool sync(KSyncManager* manager, QString filename, int mode); 467 virtual bool sync(KSyncManager* manager, QString filename, int mode);
468 468
469 virtual bool syncExternal(KSyncManager* manager, QString resource); 469 virtual bool syncExternal(KSyncManager* manager, QString resource);
470 virtual void removeSyncInfo( QString syncProfile); 470 virtual void removeSyncInfo( QString syncProfile);
471 void setSyncManager(KSyncManager* manager); 471 void setSyncManager(KSyncManager* manager);
472 void setLoadedFileVersion(QDateTime); 472 void setLoadedFileVersion(QDateTime);
473 bool checkFileVersion(QString fn); 473 bool checkFileVersion(QString fn);
474 bool checkFileChanged(QString fn); 474 bool checkFileChanged(QString fn);
475 Event* getLastSyncEvent(); 475 Event* getLastSyncEvent();
476 /** Adapt navigation units correpsonding to step size of navigation of the 476 /** Adapt navigation units correpsonding to step size of navigation of the
477 * current view. 477 * current view.
478 */ 478 */
479 void adaptNavigationUnits(); 479 void adaptNavigationUnits();
480 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 480 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
481 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 481 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
482 //Attendee* getYourAttendee(Event *event); 482 //Attendee* getYourAttendee(Event *event);
483 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 483 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
484 protected: 484 protected:
485 void schedule(Scheduler::Method, Incidence *incidence = 0); 485 void schedule(Scheduler::Method, Incidence *incidence = 0);
486 486
487 // returns KMsgBox::OKCandel() 487 // returns KMsgBox::OKCandel()
488 int msgItemDelete(); 488 int msgItemDelete(const QString name);
489 void showEventEditor(); 489 void showEventEditor();
490 void showTodoEditor(); 490 void showTodoEditor();
491 void writeLocale(); 491 void writeLocale();
492 Todo *selectedTodo(); 492 Todo *selectedTodo();
493 493
494 private: 494 private:
495 bool mBlockShowDates; 495 bool mBlockShowDates;
496 KSyncManager* mSyncManager; 496 KSyncManager* mSyncManager;
497 AlarmDialog * mAlarmDialog; 497 AlarmDialog * mAlarmDialog;
498 QString mAlarmNotification; 498 QString mAlarmNotification;
499 QString mSuspendAlarmNotification; 499 QString mSuspendAlarmNotification;
500 QTimer* mSuspendTimer; 500 QTimer* mSuspendTimer;
501 QTimer* mAlarmTimer; 501 QTimer* mAlarmTimer;
502 QTimer* mRecheckAlarmTimer; 502 QTimer* mRecheckAlarmTimer;
503 void computeAlarm( QString ); 503 void computeAlarm( QString );
504 void startAlarm( QString, QString ); 504 void startAlarm( QString, QString );
505 void setSyncEventsReadOnly(); 505 void setSyncEventsReadOnly();
506 506
507 QDateTime loadedFileVersion; 507 QDateTime loadedFileVersion;
508 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 508 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
509 void checkExternalId( Incidence * inc ); 509 void checkExternalId( Incidence * inc );
510 int mGlobalSyncMode; 510 int mGlobalSyncMode;
511 QString mCurrentSyncDevice; 511 QString mCurrentSyncDevice;
512 QString mCurrentSyncName; 512 QString mCurrentSyncName;
513 KOBeamPrefs* beamDialog; 513 KOBeamPrefs* beamDialog;
514 void init(); 514 void init();
515 int mDatePickerMode; 515 int mDatePickerMode;
516 bool mFlagEditDescription; 516 bool mFlagEditDescription;
517 QDateTime mLastCalendarSync; 517 QDateTime mLastCalendarSync;
518 void createPrinter(); 518 void createPrinter();
519 519
520 void calendarModified( bool, Calendar * ); 520 void calendarModified( bool, Calendar * );
521 521
522 CalPrinter *mCalPrinter; 522 CalPrinter *mCalPrinter;
523 523
524 QSplitter *mPanner; 524 QSplitter *mPanner;
525 QSplitter *mLeftSplitter; 525 QSplitter *mLeftSplitter;
526 QWidget *mLeftFrame; 526 QWidget *mLeftFrame;
527 QWidgetStack *mRightFrame; 527 QWidgetStack *mRightFrame;
528 528
529 KDatePicker* mDatePicker; 529 KDatePicker* mDatePicker;
530 QVBox* mDateFrame; 530 QVBox* mDateFrame;
531 NavigatorBar *mNavigatorBar; 531 NavigatorBar *mNavigatorBar;
532 532
533 KDateNavigator *mDateNavigator; // widget showing small month view. 533 KDateNavigator *mDateNavigator; // widget showing small month view.
534 534
535 KOFilterView *mFilterView; 535 KOFilterView *mFilterView;
536 536
537 ResourceView *mResourceView; 537 ResourceView *mResourceView;
538 538
539 // calendar object for this viewing instance 539 // calendar object for this viewing instance
540 Calendar *mCalendar; 540 Calendar *mCalendar;
541 541
542 CalendarResourceManager *mResourceManager; 542 CalendarResourceManager *mResourceManager;
543 543
544 FileStorage *mStorage; 544 FileStorage *mStorage;
545 545
546 DateNavigator *mNavigator; 546 DateNavigator *mNavigator;
547 547
548 KOViewManager *mViewManager; 548 KOViewManager *mViewManager;
549 KODialogManager *mDialogManager; 549 KODialogManager *mDialogManager;
550 550
551 // Calendar filters 551 // Calendar filters
552 QPtrList<CalFilter> mFilters; 552 QPtrList<CalFilter> mFilters;
553 553
554 // various housekeeping variables. 554 // various housekeeping variables.
555 bool mModified; // flag indicating if calendar is modified 555 bool mModified; // flag indicating if calendar is modified
556 bool mReadOnly; // flag indicating if calendar is read-only 556 bool mReadOnly; // flag indicating if calendar is read-only
557 QDate mSaveSingleDate; 557 QDate mSaveSingleDate;
558 558
559 Incidence *mSelectedIncidence; 559 Incidence *mSelectedIncidence;
560 Incidence *mMoveIncidence; 560 Incidence *mMoveIncidence;
561 QDate mMoveIncidenceOldDate; 561 QDate mMoveIncidenceOldDate;
562 KOTodoView *mTodoList; 562 KOTodoView *mTodoList;
563 KOEventEditor * mEventEditor; 563 KOEventEditor * mEventEditor;
564 KOTodoEditor * mTodoEditor; 564 KOTodoEditor * mTodoEditor;
565 KOEventViewerDialog * mEventViewerDialog; 565 KOEventViewerDialog * mEventViewerDialog;
566 void keyPressEvent ( QKeyEvent *e) ; 566 void keyPressEvent ( QKeyEvent *e) ;
567 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 567 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
568}; 568};
569 569
570 570
571class CalendarViewVisitor : public Incidence::Visitor 571class CalendarViewVisitor : public Incidence::Visitor
572{ 572{
573 public: 573 public:
574 CalendarViewVisitor() : mView( 0 ) {} 574 CalendarViewVisitor() : mView( 0 ) {}
575 575
576 bool act( Incidence *incidence, CalendarView *view ) 576 bool act( Incidence *incidence, CalendarView *view )
577 { 577 {
578 mView = view; 578 mView = view;
579 return incidence->accept( *this ); 579 return incidence->accept( *this );
580 } 580 }
581 581
582 protected: 582 protected:
583 CalendarView *mView; 583 CalendarView *mView;
584}; 584};
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 94e1f4c..b4fe965 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -190,212 +190,226 @@ void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
190 mAlarmIncrCombo->insertItem(i18n("min")); 190 mAlarmIncrCombo->insertItem(i18n("min"));
191 mAlarmIncrCombo->insertItem(i18n("hou")); 191 mAlarmIncrCombo->insertItem(i18n("hou"));
192 mAlarmIncrCombo->insertItem(i18n("day")); 192 mAlarmIncrCombo->insertItem(i18n("day"));
193 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() ); 193 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() );
194 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() ); 194 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() );
195 } else { 195 } else {
196 mAlarmIncrCombo->insertItem(i18n("minute(s)")); 196 mAlarmIncrCombo->insertItem(i18n("minute(s)"));
197 mAlarmIncrCombo->insertItem(i18n("hour(s)")); 197 mAlarmIncrCombo->insertItem(i18n("hour(s)"));
198 mAlarmIncrCombo->insertItem(i18n("day(s)")); 198 mAlarmIncrCombo->insertItem(i18n("day(s)"));
199 } 199 }
200 200
201 // mAlarmIncrCombo->setMinimumHeight(20); 201 // mAlarmIncrCombo->setMinimumHeight(20);
202 alarmLayout->addWidget(mAlarmIncrCombo); 202 alarmLayout->addWidget(mAlarmIncrCombo);
203 mAlarmSoundButton = new QPushButton(parent); 203 mAlarmSoundButton = new QPushButton(parent);
204 mAlarmSoundButton->setPixmap(SmallIcon("playsound")); 204 mAlarmSoundButton->setPixmap(SmallIcon("playsound"));
205 mAlarmSoundButton->setToggleButton(true); 205 mAlarmSoundButton->setToggleButton(true);
206 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 206 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
207 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); 207 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
208 alarmLayout->addWidget(mAlarmSoundButton); 208 alarmLayout->addWidget(mAlarmSoundButton);
209 209
210 mAlarmProgramButton = new QPushButton(parent); 210 mAlarmProgramButton = new QPushButton(parent);
211 mAlarmProgramButton->setPixmap(SmallIcon("run")); 211 mAlarmProgramButton->setPixmap(SmallIcon("run"));
212 mAlarmProgramButton->setToggleButton(true); 212 mAlarmProgramButton->setToggleButton(true);
213 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 213 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
214 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); 214 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
215 alarmLayout->addWidget(mAlarmProgramButton); 215 alarmLayout->addWidget(mAlarmProgramButton);
216 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); 216 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 );
217 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); 217 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 );
218 // if ( KOPrefs::instance()->mCompactDialogs ) { 218 // if ( KOPrefs::instance()->mCompactDialogs ) {
219 // mAlarmSoundButton->hide(); 219 // mAlarmSoundButton->hide();
220 // mAlarmProgramButton->hide(); 220 // mAlarmProgramButton->hide();
221 // } 221 // }
222} 222}
223 223
224void KOEditorGeneral::pickAlarmSound() 224void KOEditorGeneral::pickAlarmSound()
225{ 225{
226 226
227 //QString prefix = mAlarmSound; 227 //QString prefix = mAlarmSound;
228 if (!mAlarmSoundButton->isOn()) { 228 if (!mAlarmSoundButton->isOn()) {
229 //mAlarmSound = ""; 229 //mAlarmSound = "";
230 QToolTip::remove(mAlarmSoundButton); 230 QToolTip::remove(mAlarmSoundButton);
231 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 231 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
232 mAlarmProgramButton->setOn(true); 232 mAlarmProgramButton->setOn(true);
233 mAlarmSoundButton->setOn(false); 233 mAlarmSoundButton->setOn(false);
234 } else { 234 } else {
235 QString fileName(KFileDialog::getOpenFileName(mAlarmSound, 235 QString fileName(KFileDialog::getOpenFileName(mAlarmSound,
236 i18n("*.wav|Wav Files"), 0)); 236 i18n("*.wav|Wav Files"), 0));
237 if (!fileName.isEmpty()) { 237 if (!fileName.isEmpty()) {
238 mAlarmSound = fileName; 238 mAlarmSound = fileName;
239 QToolTip::remove(mAlarmSoundButton); 239 QToolTip::remove(mAlarmSoundButton);
240 QString dispStr = i18n("Playing '%1'").arg(fileName); 240 QString dispStr = i18n("Playing '%1'").arg(fileName);
241 QToolTip::add(mAlarmSoundButton, dispStr); 241 QToolTip::add(mAlarmSoundButton, dispStr);
242 mAlarmProgramButton->setOn(false); 242 mAlarmProgramButton->setOn(false);
243 mAlarmSoundButton->setOn(true); 243 mAlarmSoundButton->setOn(true);
244 } else { 244 } else {
245 mAlarmProgramButton->setOn(true); 245 mAlarmProgramButton->setOn(true);
246 mAlarmSoundButton->setOn(false); 246 mAlarmSoundButton->setOn(false);
247 247
248 } 248 }
249 } 249 }
250 250
251 if (mAlarmProgramButton->isOn()) 251 if (mAlarmProgramButton->isOn())
252 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 252 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram );
253 if ( mAlarmSoundButton->isOn()) 253 if ( mAlarmSoundButton->isOn())
254 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio.Al.: ") + mAlarmSound ); 254 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio.Al.: ") + mAlarmSound );
255} 255}
256 256
257void KOEditorGeneral::pickAlarmProgram() 257void KOEditorGeneral::pickAlarmProgram()
258{ 258{
259 if (!mAlarmProgramButton->isOn()) { 259 if (!mAlarmProgramButton->isOn()) {
260 //mAlarmProgram = ""; 260 //mAlarmProgram = "";
261 QToolTip::remove(mAlarmProgramButton); 261 QToolTip::remove(mAlarmProgramButton);
262 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 262 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
263 mAlarmProgramButton->setOn(false); 263 mAlarmProgramButton->setOn(false);
264 mAlarmSoundButton->setOn(true); 264 mAlarmSoundButton->setOn(true);
265 } else { 265 } else {
266 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0)); 266 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0));
267 if (!fileName.isEmpty()) { 267 if (!fileName.isEmpty()) {
268 mAlarmProgram = fileName; 268 mAlarmProgram = fileName;
269 QToolTip::remove(mAlarmProgramButton); 269 QToolTip::remove(mAlarmProgramButton);
270 QString dispStr = i18n("Running '%1'").arg(fileName); 270 QString dispStr = i18n("Running '%1'").arg(fileName);
271 QToolTip::add(mAlarmProgramButton, dispStr); 271 QToolTip::add(mAlarmProgramButton, dispStr);
272 mAlarmSoundButton->setOn(false); 272 mAlarmSoundButton->setOn(false);
273 mAlarmProgramButton->setOn(true); 273 mAlarmProgramButton->setOn(true);
274 } else { 274 } else {
275 mAlarmProgramButton->setOn(false); 275 mAlarmProgramButton->setOn(false);
276 mAlarmSoundButton->setOn(true); 276 mAlarmSoundButton->setOn(true);
277 } 277 }
278 } 278 }
279 if (mAlarmProgramButton->isOn()) 279 if (mAlarmProgramButton->isOn())
280 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 280 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram );
281 if ( mAlarmSoundButton->isOn()) 281 if ( mAlarmSoundButton->isOn())
282 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); 282 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound );
283} 283}
284 284
285 285
286QString KOEditorGeneral::getFittingPath( const QString s )
287{
288 int maxlen = 50;
289 if ( QApplication::desktop()->width() < 640 ) {
290 if ( QApplication::desktop()->width() < 320 )
291 maxlen = 22;
292 else
293 maxlen = 35;
294 }
295 if ( s.length() > maxlen ) {
296 return "..."+s.right(maxlen -3);
297 }
298 return s;
299}
286 300
287void KOEditorGeneral::enableAlarmEdit(bool enable) 301void KOEditorGeneral::enableAlarmEdit(bool enable)
288{ 302{
289 if ( enable ) { 303 if ( enable ) {
290 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) { 304 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) {
291 mAlarmSoundButton->setOn( true ); 305 mAlarmSoundButton->setOn( true );
292 if ( mAlarmSound.isEmpty() ) 306 if ( mAlarmSound.isEmpty() )
293 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 307 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
294 else { 308 else {
295 if ( ! QFile::exists( mAlarmSound ) ) 309 if ( ! QFile::exists( mAlarmSound ) )
296 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 310 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
297 } 311 }
298 } 312 }
299 if (mAlarmProgramButton->isOn()) 313 if (mAlarmProgramButton->isOn())
300 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 314 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
301 if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) 315 if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn())
302 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); 316 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
303 } 317 }
304 else { 318 else {
305 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Alarm disabled")); 319 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Alarm disabled for this item"));
306 320
307 } 321 }
308 mAlarmTimeEdit->setEnabled(enable); 322 mAlarmTimeEdit->setEnabled(enable);
309 mAlarmSoundButton->setEnabled(enable); 323 mAlarmSoundButton->setEnabled(enable);
310 mAlarmProgramButton->setEnabled(enable); 324 mAlarmProgramButton->setEnabled(enable);
311 mAlarmIncrCombo->setEnabled(enable); 325 mAlarmIncrCombo->setEnabled(enable);
312} 326}
313 327
314void KOEditorGeneral::disableAlarmEdit(bool disable) 328void KOEditorGeneral::disableAlarmEdit(bool disable)
315{ 329{
316 enableAlarmEdit( !disable ); 330 enableAlarmEdit( !disable );
317} 331}
318 332
319void KOEditorGeneral::enableAlarm( bool enable ) 333void KOEditorGeneral::enableAlarm( bool enable )
320{ 334{
321 enableAlarmEdit( enable ); 335 enableAlarmEdit( enable );
322} 336}
323 337
324void KOEditorGeneral::alarmDisable(bool disable) 338void KOEditorGeneral::alarmDisable(bool disable)
325{ 339{
326 if (!disable) { 340 if (!disable) {
327 //mAlarmBell->setEnabled(true); 341 //mAlarmBell->setEnabled(true);
328 mAlarmButton->setEnabled(true); 342 mAlarmButton->setEnabled(true);
329 } else { 343 } else {
330 //mAlarmBell->setEnabled(false); 344 //mAlarmBell->setEnabled(false);
331 mAlarmButton->setEnabled(false); 345 mAlarmButton->setEnabled(false);
332 mAlarmButton->setChecked(false); 346 mAlarmButton->setChecked(false);
333 mAlarmTimeEdit->setEnabled(false); 347 mAlarmTimeEdit->setEnabled(false);
334 mAlarmSoundButton->setEnabled(false); 348 mAlarmSoundButton->setEnabled(false);
335 mAlarmProgramButton->setEnabled(false); 349 mAlarmProgramButton->setEnabled(false);
336 mAlarmIncrCombo->setEnabled(false); 350 mAlarmIncrCombo->setEnabled(false);
337 } 351 }
338} 352}
339 353
340void KOEditorGeneral::setCategories(const QString &str) 354void KOEditorGeneral::setCategories(const QString &str)
341{ 355{
342 mCategoriesLabel->setText(str); 356 mCategoriesLabel->setText(str);
343} 357}
344 358
345void KOEditorGeneral::setDefaults(bool allDay) 359void KOEditorGeneral::setDefaults(bool allDay)
346{ 360{
347#if 0 361#if 0
348 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName()); 362 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName());
349#endif 363#endif
350 364
351 enableAlarmEdit( !allDay ); 365 enableAlarmEdit( !allDay );
352 366
353 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 367 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
354 int alarmTime; 368 int alarmTime;
355 int a[] = { 1,5,10,15,30,60,180, 1440 }; 369 int a[] = { 1,5,10,15,30,60,180, 1440 };
356 int index = KOPrefs::instance()->mAlarmTime; 370 int index = KOPrefs::instance()->mAlarmTime;
357 if (index < 0 || index > 7) { 371 if (index < 0 || index > 7) {
358 alarmTime = 15; 372 alarmTime = 15;
359 } else { 373 } else {
360 alarmTime = a[index]; 374 alarmTime = a[index];
361 } 375 }
362 mAlarmButton ->setChecked( false ); 376 mAlarmButton ->setChecked( false );
363 mAlarmTimeEdit->setValue(alarmTime); 377 mAlarmTimeEdit->setValue(alarmTime);
364 mAlarmIncrCombo->setCurrentItem(0); 378 mAlarmIncrCombo->setCurrentItem(0);
365 enableAlarmEdit( false ); 379 enableAlarmEdit( false );
366 //alarmDisable (false); 380 //alarmDisable (false);
367 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic); 381 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic);
368 mCancelBox->setChecked( false ); 382 mCancelBox->setChecked( false );
369 mSummaryEdit->setEditText(""); 383 mSummaryEdit->setEditText("");
370 mLocationEdit->setEditText(""); 384 mLocationEdit->setEditText("");
371 mDescriptionEdit->setText(""); 385 mDescriptionEdit->setText("");
372 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 386 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
373 setCategories(""); 387 setCategories("");
374} 388}
375void KOEditorGeneral::setSecrecy( int num ) 389void KOEditorGeneral::setSecrecy( int num )
376{ 390{
377 mSecrecyCombo->setCurrentItem(num); 391 mSecrecyCombo->setCurrentItem(num);
378} 392}
379void KOEditorGeneral::readIncidence(Incidence *event) 393void KOEditorGeneral::readIncidence(Incidence *event)
380{ 394{
381 395
382 mAlarmIncrCombo->setCurrentItem(0); 396 mAlarmIncrCombo->setCurrentItem(0);
383 mSummaryEdit->setEditText(event->summary()); 397 mSummaryEdit->setEditText(event->summary());
384 mLocationEdit->setEditText(event->location()); 398 mLocationEdit->setEditText(event->location());
385 mDescriptionEdit->setText(event->description()); 399 mDescriptionEdit->setText(event->description());
386 400
387#if 0 401#if 0
388 // organizer information 402 // organizer information
389 mOwnerLabel->setText(i18n("Owner: ") + event->organizer()); 403 mOwnerLabel->setText(i18n("Owner: ") + event->organizer());
390#endif 404#endif
391 405
392 enableAlarmEdit( event->isAlarmEnabled() ); 406 enableAlarmEdit( event->isAlarmEnabled() );
393 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) "); 407 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) ");
394 if(!event->isAlarmEnabled()) { 408 if(!event->isAlarmEnabled()) {
395 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 409 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
396 int alarmTime; 410 int alarmTime;
397 int a[] = { 1,5,10,15,30,60,180, 1440 }; 411 int a[] = { 1,5,10,15,30,60,180, 1440 };
398 int index = KOPrefs::instance()->mAlarmTime; 412 int index = KOPrefs::instance()->mAlarmTime;
399 if (index < 0 || index > 7) { 413 if (index < 0 || index > 7) {
400 alarmTime = 15; 414 alarmTime = 15;
401 } else { 415 } else {
diff --git a/korganizer/koeditorgeneral.h b/korganizer/koeditorgeneral.h
index c58335e..de8edaf 100644
--- a/korganizer/koeditorgeneral.h
+++ b/korganizer/koeditorgeneral.h
@@ -12,101 +12,102 @@
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 KOEDITORGENERAL_H 23#ifndef KOEDITORGENERAL_H
24#define KOEDITORGENERAL_H 24#define KOEDITORGENERAL_H
25 25
26#include <qframe.h> 26#include <qframe.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30#include <qgroupbox.h> 30#include <qgroupbox.h>
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qcombobox.h> 32#include <qcombobox.h>
33#include <qlistview.h> 33#include <qlistview.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qlayout.h> 35#include <qlayout.h>
36#include <qspinbox.h> 36#include <qspinbox.h>
37 37
38#include <ktextedit.h> 38#include <ktextedit.h>
39#include <krestrictedline.h> 39#include <krestrictedline.h>
40 40
41#include <libkcal/incidence.h> 41#include <libkcal/incidence.h>
42 42
43#include "ktimeedit.h" 43#include "ktimeedit.h"
44 44
45class KDateEdit; 45class KDateEdit;
46class KOLocationBox; 46class KOLocationBox;
47using namespace KCal; 47using namespace KCal;
48 48
49class KOEditorGeneral : public QObject 49class KOEditorGeneral : public QObject
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 public: 52 public:
53 KOEditorGeneral (QObject* parent=0,const char* name=0); 53 KOEditorGeneral (QObject* parent=0,const char* name=0);
54 virtual ~KOEditorGeneral(); 54 virtual ~KOEditorGeneral();
55 void setFocusOn( int i ); 55 void setFocusOn( int i );
56 void initHeader(QWidget *,QBoxLayout *); 56 void initHeader(QWidget *,QBoxLayout *);
57 void initDescription(QWidget *,QBoxLayout *); 57 void initDescription(QWidget *,QBoxLayout *);
58 void initSecrecy(QWidget *,QBoxLayout *); 58 void initSecrecy(QWidget *,QBoxLayout *);
59 void initCategories(QWidget *,QBoxLayout *); 59 void initCategories(QWidget *,QBoxLayout *);
60 void initAlarm(QWidget *,QBoxLayout *); 60 void initAlarm(QWidget *,QBoxLayout *);
61 61
62 /** Set widgets to default values */ 62 /** Set widgets to default values */
63 void setDefaults(bool allDay); 63 void setDefaults(bool allDay);
64 /** Read event object and setup widgets accordingly */ 64 /** Read event object and setup widgets accordingly */
65 void readIncidence(Incidence *); 65 void readIncidence(Incidence *);
66 /** Write event settings to event object */ 66 /** Write event settings to event object */
67 void writeIncidence(Incidence *); 67 void writeIncidence(Incidence *);
68 68
69 /** Check if the input is valid. */ 69 /** Check if the input is valid. */
70 bool validateInput() { return true; } 70 bool validateInput() { return true; }
71 71
72 void enableAlarm( bool enable ); 72 void enableAlarm( bool enable );
73 void setSecrecy( int num ); 73 void setSecrecy( int num );
74 public slots: 74 public slots:
75 void setCategories(const QString &); 75 void setCategories(const QString &);
76 void editCategories(); 76 void editCategories();
77 77
78 protected slots: 78 protected slots:
79 void enableAlarmEdit( bool enable ); 79 void enableAlarmEdit( bool enable );
80 void disableAlarmEdit( bool disable ); 80 void disableAlarmEdit( bool disable );
81 void alarmDisable( bool disable ); 81 void alarmDisable( bool disable );
82 void pickAlarmSound(); 82 void pickAlarmSound();
83 void pickAlarmProgram(); 83 void pickAlarmProgram();
84 84
85 signals: 85 signals:
86 void openCategoryDialog(); 86 void openCategoryDialog();
87 void allAccepted(); 87 void allAccepted();
88 88
89 protected: 89 protected:
90 //QLineEdit *mSummaryEdit; 90 //QLineEdit *mSummaryEdit;
91 //QLineEdit *mLocationEdit; 91 //QLineEdit *mLocationEdit;
92 KOLocationBox *mSummaryEdit; 92 KOLocationBox *mSummaryEdit;
93 KOLocationBox *mLocationEdit; 93 KOLocationBox *mLocationEdit;
94 QLabel *mAlarmBell; 94 QLabel *mAlarmBell;
95 QCheckBox *mAlarmButton; 95 QCheckBox *mAlarmButton;
96 QSpinBox *mAlarmTimeEdit; 96 QSpinBox *mAlarmTimeEdit;
97 QPushButton *mAlarmSoundButton; 97 QPushButton *mAlarmSoundButton;
98 QPushButton *mAlarmProgramButton; 98 QPushButton *mAlarmProgramButton;
99 QComboBox *mAlarmIncrCombo; 99 QComboBox *mAlarmIncrCombo;
100 KTextEdit *mDescriptionEdit; 100 KTextEdit *mDescriptionEdit;
101 QLabel *mOwnerLabel; 101 QLabel *mOwnerLabel;
102 QComboBox *mSecrecyCombo; 102 QComboBox *mSecrecyCombo;
103 QCheckBox *mCancelBox; 103 QCheckBox *mCancelBox;
104 QPushButton *mCategoriesButton; 104 QPushButton *mCategoriesButton;
105 QLabel *mCategoriesLabel; 105 QLabel *mCategoriesLabel;
106 106
107 private: 107 private:
108 QString getFittingPath( const QString ) ;
108 QString mAlarmSound; 109 QString mAlarmSound;
109 QString mAlarmProgram; 110 QString mAlarmProgram;
110}; 111};
111 112
112#endif 113#endif
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 97b4a03..30adb06 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -725,198 +725,193 @@ void KOTodoView::editItem(QListViewItem *item )
725 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 725 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
726} 726}
727 727
728void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 728void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
729{ 729{
730 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 730 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
731} 731}
732 732
733void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 733void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
734{ 734{
735 pendingSubtodo = 0; 735 pendingSubtodo = 0;
736 mActiveItem = (KOTodoViewItem *)item; 736 mActiveItem = (KOTodoViewItem *)item;
737 if (item) { 737 if (item) {
738 switch (column){ 738 switch (column){
739 case 1: 739 case 1:
740 mPriorityPopupMenu->popup(QCursor::pos ()); break; 740 mPriorityPopupMenu->popup(QCursor::pos ()); break;
741 case 2: 741 case 2:
742 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 742 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
743 case 3: 743 case 3:
744 moveTodo(); 744 moveTodo();
745 break; 745 break;
746 case 8: 746 case 8:
747 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 747 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
748 default: 748 default:
749 mItemPopupMenu->popup(QCursor::pos()); 749 mItemPopupMenu->popup(QCursor::pos());
750 } 750 }
751 } else mPopupMenu->popup(QCursor::pos()); 751 } else mPopupMenu->popup(QCursor::pos());
752} 752}
753void KOTodoView::newTodo() 753void KOTodoView::newTodo()
754{ 754{
755 emit newTodoSignal(); 755 emit newTodoSignal();
756} 756}
757 757
758void KOTodoView::newSubTodo() 758void KOTodoView::newSubTodo()
759{ 759{
760 if (mActiveItem) { 760 if (mActiveItem) {
761 emit newSubTodoSignal(mActiveItem->todo()); 761 emit newSubTodoSignal(mActiveItem->todo());
762 } 762 }
763} 763}
764void KOTodoView::unparentTodo() 764void KOTodoView::unparentTodo()
765{ 765{
766 if (mActiveItem) { 766 if (mActiveItem) {
767 emit unparentTodoSignal(mActiveItem->todo()); 767 emit unparentTodoSignal(mActiveItem->todo());
768 } 768 }
769} 769}
770 770
771void KOTodoView::reparentTodo() 771void KOTodoView::reparentTodo()
772{ 772{
773 if (mActiveItem) { 773 if (mActiveItem) {
774 qDebug("KOTodoView::reparentTodo() "); 774 qDebug("KOTodoView::reparentTodo() ");
775 topLevelWidget()->setCaption(i18n("Click on new parent item")); 775 topLevelWidget()->setCaption(i18n("Click on new parent item"));
776 pendingSubtodo = mActiveItem; 776 pendingSubtodo = mActiveItem;
777 } 777 }
778} 778}
779void KOTodoView::editTodo() 779void KOTodoView::editTodo()
780{ 780{
781 if (mActiveItem) { 781 if (mActiveItem) {
782 emit editTodoSignal(mActiveItem->todo()); 782 emit editTodoSignal(mActiveItem->todo());
783 } 783 }
784} 784}
785void KOTodoView::cloneTodo() 785void KOTodoView::cloneTodo()
786{ 786{
787 if (mActiveItem) { 787 if (mActiveItem) {
788 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 788 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
789 } 789 }
790} 790}
791void KOTodoView::cancelTodo() 791void KOTodoView::cancelTodo()
792{ 792{
793 if (mActiveItem) { 793 if (mActiveItem) {
794 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 794 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
795 } 795 }
796} 796}
797void KOTodoView::moveTodo() 797void KOTodoView::moveTodo()
798{ 798{
799 if (mActiveItem) { 799 if (mActiveItem) {
800 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 800 emit moveTodoSignal((Incidence*)mActiveItem->todo());
801 } 801 }
802} 802}
803void KOTodoView::beamTodo() 803void KOTodoView::beamTodo()
804{ 804{
805 if (mActiveItem) { 805 if (mActiveItem) {
806 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 806 emit beamTodoSignal((Incidence*)mActiveItem->todo());
807 } 807 }
808} 808}
809 809
810 810
811void KOTodoView::showTodo() 811void KOTodoView::showTodo()
812{ 812{
813 if (mActiveItem) { 813 if (mActiveItem) {
814 emit showTodoSignal(mActiveItem->todo()); 814 emit showTodoSignal(mActiveItem->todo());
815 } 815 }
816} 816}
817 817
818void KOTodoView::deleteTodo() 818void KOTodoView::deleteTodo()
819{ 819{
820 if (mActiveItem) { 820 if (mActiveItem) {
821 if (mActiveItem->childCount()) {
822 KMessageBox::sorry(this,i18n("Cannot delete To-Do which has children."),
823 i18n("Delete To-Do"));
824 } else {
825 emit deleteTodoSignal(mActiveItem->todo()); 821 emit deleteTodoSignal(mActiveItem->todo());
826 }
827 } 822 }
828} 823}
829 824
830void KOTodoView::setNewPriority(int index) 825void KOTodoView::setNewPriority(int index)
831{ 826{
832 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 827 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
833 mActiveItem->todo()->setPriority(mPriority[index]); 828 mActiveItem->todo()->setPriority(mPriority[index]);
834 mActiveItem->construct(); 829 mActiveItem->construct();
835 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 830 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
836 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 831 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
837 } 832 }
838} 833}
839 834
840void KOTodoView::setNewPercentage(int index) 835void KOTodoView::setNewPercentage(int index)
841{ 836{
842 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 837 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
843 if (mPercentage[index] == 100) { 838 if (mPercentage[index] == 100) {
844 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 839 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
845 } else { 840 } else {
846 mActiveItem->todo()->setCompleted(false); 841 mActiveItem->todo()->setCompleted(false);
847 } 842 }
848 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 843 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
849 mActiveItem->construct(); 844 mActiveItem->construct();
850 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 845 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
851 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 846 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
852 } 847 }
853} 848}
854 849
855 850
856QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 851QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
857{ 852{
858 QPopupMenu* tempMenu = new QPopupMenu (this); 853 QPopupMenu* tempMenu = new QPopupMenu (this);
859 QStringList checkedCategories = todoItem->todo()->categories (); 854 QStringList checkedCategories = todoItem->todo()->categories ();
860 855
861 tempMenu->setCheckable (true); 856 tempMenu->setCheckable (true);
862 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 857 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
863 it != KOPrefs::instance()->mCustomCategories.end (); 858 it != KOPrefs::instance()->mCustomCategories.end ();
864 ++it) { 859 ++it) {
865 int index = tempMenu->insertItem (*it); 860 int index = tempMenu->insertItem (*it);
866 mCategory[index] = *it; 861 mCategory[index] = *it;
867 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 862 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
868 } 863 }
869 864
870 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 865 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
871 return tempMenu; 866 return tempMenu;
872 867
873 868
874} 869}
875void KOTodoView::changedCategories(int index) 870void KOTodoView::changedCategories(int index)
876{ 871{
877 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 872 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
878 QStringList categories = mActiveItem->todo()->categories (); 873 QStringList categories = mActiveItem->todo()->categories ();
879 if (categories.find (mCategory[index]) != categories.end ()) 874 if (categories.find (mCategory[index]) != categories.end ())
880 categories.remove (mCategory[index]); 875 categories.remove (mCategory[index]);
881 else 876 else
882 categories.insert (categories.end(), mCategory[index]); 877 categories.insert (categories.end(), mCategory[index]);
883 categories.sort (); 878 categories.sort ();
884 mActiveItem->todo()->setCategories (categories); 879 mActiveItem->todo()->setCategories (categories);
885 mActiveItem->construct(); 880 mActiveItem->construct();
886 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 881 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
887 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 882 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
888 } 883 }
889} 884}
890void KOTodoView::itemDoubleClicked(QListViewItem *item) 885void KOTodoView::itemDoubleClicked(QListViewItem *item)
891{ 886{
892 if ( pendingSubtodo != 0 ) { 887 if ( pendingSubtodo != 0 ) {
893 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 888 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
894 } 889 }
895 pendingSubtodo = 0; 890 pendingSubtodo = 0;
896 if (!item) { 891 if (!item) {
897 newTodo(); 892 newTodo();
898 return; 893 return;
899 } 894 }
900 if ( KOPrefs::instance()->mEditOnDoubleClick ) 895 if ( KOPrefs::instance()->mEditOnDoubleClick )
901 editItem( item ); 896 editItem( item );
902 else 897 else
903 showItem( item , QPoint(), 0 ); 898 showItem( item , QPoint(), 0 );
904} 899}
905void KOTodoView::itemClicked(QListViewItem *item) 900void KOTodoView::itemClicked(QListViewItem *item)
906{ 901{
907 902
908 if (!item) { 903 if (!item) {
909 if ( pendingSubtodo != 0 ) { 904 if ( pendingSubtodo != 0 ) {
910 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 905 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
911 } 906 }
912 pendingSubtodo = 0; 907 pendingSubtodo = 0;
913 return; 908 return;
914 } 909 }
915 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 910 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
916 if ( pendingSubtodo != 0 ) { 911 if ( pendingSubtodo != 0 ) {
917 bool allowReparent = true; 912 bool allowReparent = true;
918 QListViewItem *par = item; 913 QListViewItem *par = item;
919 while ( par ) { 914 while ( par ) {
920 if ( par == pendingSubtodo ) { 915 if ( par == pendingSubtodo ) {
921 allowReparent = false; 916 allowReparent = false;
922 break; 917 break;
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 151b55b..7b07a2e 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -1611,193 +1611,202 @@ void MainWindow::keyPressEvent ( QKeyEvent * e )
1611 mView->editIncidence(); 1611 mView->editIncidence();
1612 break; 1612 break;
1613 case Qt::Key_Plus: 1613 case Qt::Key_Plus:
1614 size = p->mHourSize +2; 1614 size = p->mHourSize +2;
1615 if ( size <= 18 ) 1615 if ( size <= 18 )
1616 configureAgenda( size ); 1616 configureAgenda( size );
1617 break; 1617 break;
1618 case Qt::Key_Minus: 1618 case Qt::Key_Minus:
1619 size = p->mHourSize - 2; 1619 size = p->mHourSize - 2;
1620 if ( size >= 4 ) 1620 if ( size >= 4 )
1621 configureAgenda( size ); 1621 configureAgenda( size );
1622 break; 1622 break;
1623 1623
1624 1624
1625 default: 1625 default:
1626 e->ignore(); 1626 e->ignore();
1627 } 1627 }
1628 if ( pro > 0 ) { 1628 if ( pro > 0 ) {
1629 mView->selectFilter( pro-1 ); 1629 mView->selectFilter( pro-1 );
1630 } 1630 }
1631 if ( showSelectedDates ) { 1631 if ( showSelectedDates ) {
1632 ;// setCaptionToDates(); 1632 ;// setCaptionToDates();
1633 } 1633 }
1634 1634
1635} 1635}
1636 1636
1637void MainWindow::fillFilterMenu() 1637void MainWindow::fillFilterMenu()
1638{ 1638{
1639 selectFilterMenu->clear(); 1639 selectFilterMenu->clear();
1640 bool disable = false; 1640 bool disable = false;
1641 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); 1641 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 );
1642 selectFilterMenu->insertSeparator(); 1642 selectFilterMenu->insertSeparator();
1643 if ( mView->filterView()->filtersEnabled() ) { 1643 if ( mView->filterView()->filtersEnabled() ) {
1644 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 ); 1644 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 );
1645 } 1645 }
1646 else { 1646 else {
1647 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 ); 1647 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 );
1648 disable = true; 1648 disable = true;
1649 } 1649 }
1650 selectFilterMenu->insertSeparator(); 1650 selectFilterMenu->insertSeparator();
1651 QPtrList<CalFilter> fili = mView->filters(); 1651 QPtrList<CalFilter> fili = mView->filters();
1652 CalFilter *curfilter = mView->filterView()->selectedFilter(); 1652 CalFilter *curfilter = mView->filterView()->selectedFilter();
1653 CalFilter *filter = fili.first(); 1653 CalFilter *filter = fili.first();
1654 int iii = 2; 1654 int iii = 2;
1655 while(filter) { 1655 while(filter) {
1656 selectFilterMenu->insertItem( filter->name(), iii ); 1656 selectFilterMenu->insertItem( filter->name(), iii );
1657 if ( filter == curfilter) 1657 if ( filter == curfilter)
1658 selectFilterMenu->setItemChecked( iii, true ); 1658 selectFilterMenu->setItemChecked( iii, true );
1659 if ( disable ) 1659 if ( disable )
1660 selectFilterMenu->setItemEnabled( iii, false ); 1660 selectFilterMenu->setItemEnabled( iii, false );
1661 filter = fili.next(); 1661 filter = fili.next();
1662 ++iii; 1662 ++iii;
1663 } 1663 }
1664} 1664}
1665void MainWindow::selectFilter( int fil ) 1665void MainWindow::selectFilter( int fil )
1666{ 1666{
1667 if ( fil == 0 ) { 1667 if ( fil == 0 ) {
1668 mView->editFilters( ); 1668 mView->editFilters( );
1669 } else if ( fil == 1 ){ 1669 } else if ( fil == 1 ){
1670 mView->toggleFilerEnabled( ); 1670 mView->toggleFilerEnabled( );
1671 } else { 1671 } else {
1672 mView->selectFilter( fil-2 ); 1672 mView->selectFilter( fil-2 );
1673 } 1673 }
1674} 1674}
1675void MainWindow::configureToolBar( int item ) 1675void MainWindow::configureToolBar( int item )
1676{ 1676{
1677 1677
1678 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); 1678 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) );
1679 KOPrefs *p = KOPrefs::instance(); 1679 KOPrefs *p = KOPrefs::instance();
1680 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); 1680 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 );
1681 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); 1681 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 );
1682 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); 1682 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 );
1683 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); 1683 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 );
1684 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); 1684 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 );
1685 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); 1685 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 );
1686 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); 1686 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 );
1687 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); 1687 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 );
1688 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); 1688 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 );
1689 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); 1689 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 );
1690 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); 1690 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 );
1691 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); 1691 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 );
1692 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); 1692 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 );
1693 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); 1693 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 );
1694 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); 1694 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 );
1695 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); 1695 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 );
1696 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); 1696 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 );
1697 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); 1697 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 );
1698 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); 1698 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 );
1699 // initActions(); 1699 // initActions();
1700} 1700}
1701 1701
1702void MainWindow::setCaptionToDates() 1702void MainWindow::setCaptionToDates()
1703{ 1703{
1704 QString selDates; 1704 QString selDates;
1705 selDates = KGlobal::locale()->formatDate(mView->startDate(), true); 1705 selDates = KGlobal::locale()->formatDate(mView->startDate(), true);
1706 if (mView->startDate() < mView->endDate() ) 1706 if (mView->startDate() < mView->endDate() )
1707 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); 1707 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true);
1708 else {
1709 QString addString;
1710 if ( mView->startDate() == QDateTime::currentDateTime().date() )
1711 addString = i18n("Today");
1712 else if ( mView->startDate() == QDateTime::currentDateTime().date().addDays(1) )
1713 addString = i18n("Tomorrow");
1714 if ( !addString.isEmpty() )
1715 selDates = addString+", "+selDates ;
1716 }
1708 setCaption( i18n("Dates: ") + selDates ); 1717 setCaption( i18n("Dates: ") + selDates );
1709 1718
1710} 1719}
1711// parameter item == 0: reinit 1720// parameter item == 0: reinit
1712void MainWindow::configureAgenda( int item ) 1721void MainWindow::configureAgenda( int item )
1713{ 1722{
1714 1723
1715 KOPrefs *p = KOPrefs::instance(); 1724 KOPrefs *p = KOPrefs::instance();
1716 1725
1717 int i; 1726 int i;
1718 // do not allow 4 for widgets higher than 480 1727 // do not allow 4 for widgets higher than 480
1719 // if ( QApplication::desktop()->height() > 480 ) { 1728 // if ( QApplication::desktop()->height() > 480 ) {
1720// if ( item == 4 ) 1729// if ( item == 4 )
1721// item = 6; 1730// item = 6;
1722// } 1731// }
1723 for ( i = 4; i <= 18; i= i+2 ) 1732 for ( i = 4; i <= 18; i= i+2 )
1724 configureAgendaMenu->setItemChecked( i, false ); 1733 configureAgendaMenu->setItemChecked( i, false );
1725 configureAgendaMenu->setItemChecked( item, true ); 1734 configureAgendaMenu->setItemChecked( item, true );
1726 if ( p->mHourSize == item ) 1735 if ( p->mHourSize == item )
1727 return; 1736 return;
1728 p->mHourSize=item; 1737 p->mHourSize=item;
1729 mView->viewManager()->agendaView()->updateConfig(); 1738 mView->viewManager()->agendaView()->updateConfig();
1730} 1739}
1731 1740
1732void MainWindow::saveCalendar() 1741void MainWindow::saveCalendar()
1733{ 1742{
1734 QString fn = KOPrefs::instance()->mLastSaveFile; 1743 QString fn = KOPrefs::instance()->mLastSaveFile;
1735 fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); 1744 fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this );
1736 1745
1737 if ( fn == "" ) 1746 if ( fn == "" )
1738 return; 1747 return;
1739 QFileInfo info; 1748 QFileInfo info;
1740 info.setFile( fn ); 1749 info.setFile( fn );
1741 QString mes; 1750 QString mes;
1742 bool createbup = true; 1751 bool createbup = true;
1743 if ( info. exists() ) { 1752 if ( info. exists() ) {
1744 mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; 1753 mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ;
1745 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 1754 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
1746 i18n("Overwrite!"), i18n("Cancel"), 0, 1755 i18n("Overwrite!"), i18n("Cancel"), 0,
1747 0, 1 ); 1756 0, 1 );
1748 if ( result != 0 ) { 1757 if ( result != 0 ) {
1749 createbup = false; 1758 createbup = false;
1750 } 1759 }
1751 } 1760 }
1752 if ( createbup ) { 1761 if ( createbup ) {
1753 mView->saveCalendar( fn ); 1762 mView->saveCalendar( fn );
1754 mes = i18n("KO/Pi:Saved %1").arg(fn); 1763 mes = i18n("KO/Pi:Saved %1").arg(fn);
1755 KOPrefs::instance()->mLastSaveFile = fn; 1764 KOPrefs::instance()->mLastSaveFile = fn;
1756 setCaption(mes); 1765 setCaption(mes);
1757 } 1766 }
1758} 1767}
1759void MainWindow::loadCalendar() 1768void MainWindow::loadCalendar()
1760{ 1769{
1761 1770
1762 QString fn = KOPrefs::instance()->mLastLoadFile; 1771 QString fn = KOPrefs::instance()->mLastLoadFile;
1763 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); 1772 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this );
1764 1773
1765 if ( fn == "" ) 1774 if ( fn == "" )
1766 return; 1775 return;
1767 QFileInfo info; 1776 QFileInfo info;
1768 info.setFile( fn ); 1777 info.setFile( fn );
1769 QString mess; 1778 QString mess;
1770 bool loadbup = true; 1779 bool loadbup = true;
1771 if ( info. exists() ) { 1780 if ( info. exists() ) {
1772 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 1781 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
1773 int result = QMessageBox::warning( this, "KO/Pi: Warning!", 1782 int result = QMessageBox::warning( this, "KO/Pi: Warning!",
1774 mess, 1783 mess,
1775 i18n("Load!"), i18n("Cancel"), 0, 1784 i18n("Load!"), i18n("Cancel"), 0,
1776 0, 1 ); 1785 0, 1 );
1777 if ( result != 0 ) { 1786 if ( result != 0 ) {
1778 loadbup = false; 1787 loadbup = false;
1779 } 1788 }
1780 } else { 1789 } else {
1781 QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1790 QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1782 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, 1791 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0,
1783 0, 1 ); 1792 0, 1 );
1784 1793
1785 return; 1794 return;
1786 } 1795 }
1787 if ( loadbup ) { 1796 if ( loadbup ) {
1788 mView->openCalendar( fn ); 1797 mView->openCalendar( fn );
1789 KOPrefs::instance()->mLastLoadFile = fn; 1798 KOPrefs::instance()->mLastLoadFile = fn;
1790 mess = i18n("KO/Pi:Loaded %1").arg(fn) ; 1799 mess = i18n("KO/Pi:Loaded %1").arg(fn) ;
1791 setCaption(mess); 1800 setCaption(mess);
1792 } 1801 }
1793 1802
1794} 1803}
1795void MainWindow::quickImportIcal() 1804void MainWindow::quickImportIcal()
1796{ 1805{
1797 importFile( KOPrefs::instance()->mLastImportFile, false ); 1806 importFile( KOPrefs::instance()->mLastImportFile, false );
1798} 1807}
1799void MainWindow::importFile( QString fn, bool quick ) 1808void MainWindow::importFile( QString fn, bool quick )
1800{ 1809{
1801 QFileInfo info; 1810 QFileInfo info;
1802 info.setFile( fn ); 1811 info.setFile( fn );
1803 QString mess; 1812 QString mess;
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 12294c0..0eba6a9 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -109,194 +109,194 @@ bool CalendarLocal::addAnniversaryNoDup( Event *event )
109 cat = i18n( "Birthday" ); 109 cat = i18n( "Birthday" );
110 } else { 110 } else {
111 qDebug("addAnniversaryNoDup called without fitting category! "); 111 qDebug("addAnniversaryNoDup called without fitting category! ");
112 return false; 112 return false;
113 } 113 }
114 Event * eve; 114 Event * eve;
115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
116 if ( !(eve->categories().contains( cat ) )) 116 if ( !(eve->categories().contains( cat ) ))
117 continue; 117 continue;
118 // now we have an event with fitting category 118 // now we have an event with fitting category
119 if ( eve->dtStart().date() != event->dtStart().date() ) 119 if ( eve->dtStart().date() != event->dtStart().date() )
120 continue; 120 continue;
121 // now we have an event with fitting category+date 121 // now we have an event with fitting category+date
122 if ( eve->summary() != event->summary() ) 122 if ( eve->summary() != event->summary() )
123 continue; 123 continue;
124 // now we have an event with fitting category+date+summary 124 // now we have an event with fitting category+date+summary
125 return false; 125 return false;
126 } 126 }
127 return addEvent( event ); 127 return addEvent( event );
128 128
129} 129}
130bool CalendarLocal::addEventNoDup( Event *event ) 130bool CalendarLocal::addEventNoDup( Event *event )
131{ 131{
132 Event * eve; 132 Event * eve;
133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
134 if ( *eve == *event ) { 134 if ( *eve == *event ) {
135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
136 return false; 136 return false;
137 } 137 }
138 } 138 }
139 return addEvent( event ); 139 return addEvent( event );
140} 140}
141 141
142bool CalendarLocal::addEvent( Event *event ) 142bool CalendarLocal::addEvent( Event *event )
143{ 143{
144 insertEvent( event ); 144 insertEvent( event );
145 145
146 event->registerObserver( this ); 146 event->registerObserver( this );
147 147
148 setModified( true ); 148 setModified( true );
149 149
150 return true; 150 return true;
151} 151}
152 152
153void CalendarLocal::deleteEvent( Event *event ) 153void CalendarLocal::deleteEvent( Event *event )
154{ 154{
155 if ( mUndoIncidence ) delete mUndoIncidence; 155 if ( mUndoIncidence ) delete mUndoIncidence;
156 mUndoIncidence = event->clone(); 156 mUndoIncidence = event->clone();
157 if ( mEventList.removeRef( event ) ) { 157 if ( mEventList.removeRef( event ) ) {
158 setModified( true ); 158 setModified( true );
159 } 159 }
160} 160}
161 161
162 162
163Event *CalendarLocal::event( const QString &uid ) 163Event *CalendarLocal::event( const QString &uid )
164{ 164{
165 165
166 Event *event; 166 Event *event;
167 167
168 for ( event = mEventList.first(); event; event = mEventList.next() ) { 168 for ( event = mEventList.first(); event; event = mEventList.next() ) {
169 if ( event->uid() == uid ) { 169 if ( event->uid() == uid ) {
170 return event; 170 return event;
171 } 171 }
172 } 172 }
173 173
174 return 0; 174 return 0;
175} 175}
176bool CalendarLocal::addTodoNoDup( Todo *todo ) 176bool CalendarLocal::addTodoNoDup( Todo *todo )
177{ 177{
178 Todo * eve; 178 Todo * eve;
179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
180 if ( *eve == *todo ) { 180 if ( *eve == *todo ) {
181 //qDebug("duplicate todo found! not inserted! "); 181 //qDebug("duplicate todo found! not inserted! ");
182 return false; 182 return false;
183 } 183 }
184 } 184 }
185 return addTodo( todo ); 185 return addTodo( todo );
186} 186}
187bool CalendarLocal::addTodo( Todo *todo ) 187bool CalendarLocal::addTodo( Todo *todo )
188{ 188{
189 mTodoList.append( todo ); 189 mTodoList.append( todo );
190 190
191 todo->registerObserver( this ); 191 todo->registerObserver( this );
192 192
193 // Set up subtask relations 193 // Set up subtask relations
194 setupRelations( todo ); 194 setupRelations( todo );
195 195
196 setModified( true ); 196 setModified( true );
197 197
198 return true; 198 return true;
199} 199}
200 200
201void CalendarLocal::deleteTodo( Todo *todo ) 201void CalendarLocal::deleteTodo( Todo *todo )
202{ 202{
203 // Handle orphaned children 203 // Handle orphaned children
204 if ( mUndoIncidence ) delete mUndoIncidence; 204 if ( mUndoIncidence ) delete mUndoIncidence;
205 mUndoIncidence = todo->clone();
206 removeRelations( todo ); 205 removeRelations( todo );
206 mUndoIncidence = todo->clone();
207 207
208 if ( mTodoList.removeRef( todo ) ) { 208 if ( mTodoList.removeRef( todo ) ) {
209 setModified( true ); 209 setModified( true );
210 } 210 }
211} 211}
212 212
213QPtrList<Todo> CalendarLocal::rawTodos() 213QPtrList<Todo> CalendarLocal::rawTodos()
214{ 214{
215 return mTodoList; 215 return mTodoList;
216} 216}
217Todo *CalendarLocal::todo( QString syncProf, QString id ) 217Todo *CalendarLocal::todo( QString syncProf, QString id )
218{ 218{
219 Todo *todo; 219 Todo *todo;
220 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 220 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
221 if ( todo->getID( syncProf ) == id ) return todo; 221 if ( todo->getID( syncProf ) == id ) return todo;
222 } 222 }
223 223
224 return 0; 224 return 0;
225} 225}
226void CalendarLocal::removeSyncInfo( QString syncProfile) 226void CalendarLocal::removeSyncInfo( QString syncProfile)
227{ 227{
228 QPtrList<Incidence> all = rawIncidences() ; 228 QPtrList<Incidence> all = rawIncidences() ;
229 Incidence *inc; 229 Incidence *inc;
230 for ( inc = all.first(); inc; inc = all.next() ) { 230 for ( inc = all.first(); inc; inc = all.next() ) {
231 inc->removeID( syncProfile ); 231 inc->removeID( syncProfile );
232 } 232 }
233 if ( syncProfile.isEmpty() ) { 233 if ( syncProfile.isEmpty() ) {
234 QPtrList<Event> el; 234 QPtrList<Event> el;
235 Event *todo; 235 Event *todo;
236 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 236 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
237 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 237 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
238 el.append( todo ); 238 el.append( todo );
239 } 239 }
240 for ( todo = el.first(); todo; todo = el.next() ) { 240 for ( todo = el.first(); todo; todo = el.next() ) {
241 deleteIncidence ( todo ); 241 deleteIncidence ( todo );
242 } 242 }
243 } else { 243 } else {
244 Event *lse = event( "last-syncEvent-"+ syncProfile); 244 Event *lse = event( "last-syncEvent-"+ syncProfile);
245 deleteIncidence ( lse ); 245 deleteIncidence ( lse );
246 } 246 }
247} 247}
248QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 248QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
249{ 249{
250 QPtrList<Event> el; 250 QPtrList<Event> el;
251 Event *todo; 251 Event *todo;
252 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 252 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
253 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 253 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
254 if ( todo->summary().left(3) == "E: " ) 254 if ( todo->summary().left(3) == "E: " )
255 el.append( todo ); 255 el.append( todo );
256 } 256 }
257 257
258 return el; 258 return el;
259 259
260} 260}
261Event *CalendarLocal::event( QString syncProf, QString id ) 261Event *CalendarLocal::event( QString syncProf, QString id )
262{ 262{
263 Event *todo; 263 Event *todo;
264 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 264 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
265 if ( todo->getID( syncProf ) == id ) return todo; 265 if ( todo->getID( syncProf ) == id ) return todo;
266 } 266 }
267 267
268 return 0; 268 return 0;
269} 269}
270Todo *CalendarLocal::todo( const QString &uid ) 270Todo *CalendarLocal::todo( const QString &uid )
271{ 271{
272 Todo *todo; 272 Todo *todo;
273 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 273 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
274 if ( todo->uid() == uid ) return todo; 274 if ( todo->uid() == uid ) return todo;
275 } 275 }
276 276
277 return 0; 277 return 0;
278} 278}
279QString CalendarLocal::nextSummary() const 279QString CalendarLocal::nextSummary() const
280{ 280{
281 return mNextSummary; 281 return mNextSummary;
282} 282}
283QDateTime CalendarLocal::nextAlarmEventDateTime() const 283QDateTime CalendarLocal::nextAlarmEventDateTime() const
284{ 284{
285 return mNextAlarmEventDateTime; 285 return mNextAlarmEventDateTime;
286} 286}
287void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 287void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
288{ 288{
289 //mNextAlarmIncidence 289 //mNextAlarmIncidence
290 //mNextAlarmDateTime 290 //mNextAlarmDateTime
291 //return mNextSummary; 291 //return mNextSummary;
292 //return mNextAlarmEventDateTime; 292 //return mNextAlarmEventDateTime;
293 bool newNextAlarm = false; 293 bool newNextAlarm = false;
294 bool computeNextAlarm = false; 294 bool computeNextAlarm = false;
295 bool ok; 295 bool ok;
296 int offset; 296 int offset;
297 QDateTime nextA; 297 QDateTime nextA;
298 // QString nextSum; 298 // QString nextSum;
299 //QDateTime nextEvent; 299 //QDateTime nextEvent;
300 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 300 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
301 computeNextAlarm = true; 301 computeNextAlarm = true;
302 } else { 302 } else {
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 146291b..508ce31 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -251,204 +251,207 @@ KDateTable::keyPressEvent( QKeyEvent *e )
251 irgnore = false; 251 irgnore = false;
252 } 252 }
253 if ( e->key() == Qt::Key_Right ) { 253 if ( e->key() == Qt::Key_Right ) {
254 pos++; 254 pos++;
255 irgnore = false; 255 irgnore = false;
256 } 256 }
257 } 257 }
258 if ( irgnore ) 258 if ( irgnore )
259 e->ignore(); 259 e->ignore();
260 260
261 if(pos+dayoff<=firstday) 261 if(pos+dayoff<=firstday)
262 { // this day is in the previous month 262 { // this day is in the previous month
263 KNotifyClient::beep(); 263 KNotifyClient::beep();
264 return; 264 return;
265 } 265 }
266 if(firstday+numdays<pos+dayoff) 266 if(firstday+numdays<pos+dayoff)
267 { // this date is in the next month 267 { // this date is in the next month
268 KNotifyClient::beep(i18n( "Month not long enough" )); 268 KNotifyClient::beep(i18n( "Month not long enough" ));
269 return; 269 return;
270 } 270 }
271 271
272 if ( pos == temp ) 272 if ( pos == temp )
273 return; 273 return;
274 274
275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff));
276 updateCell(temp/7+1, temp%7); // Update the previously selected cell 276 updateCell(temp/7+1, temp%7); // Update the previously selected cell
277 updateCell(pos/7+1, pos%7); // Update the selected cell 277 updateCell(pos/7+1, pos%7); // Update the selected cell
278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
279 279
280 280
281} 281}
282 282
283void 283void
284KDateTable::viewportResizeEvent(QResizeEvent * e) 284KDateTable::viewportResizeEvent(QResizeEvent * e)
285{ 285{
286 QGridView::viewportResizeEvent(e); 286 QGridView::viewportResizeEvent(e);
287 287
288 setCellWidth(viewport()->width()/7); 288 setCellWidth(viewport()->width()/7);
289 setCellHeight(viewport()->height()/7); 289 setCellHeight(viewport()->height()/7);
290} 290}
291 291
292void 292void
293KDateTable::setFontSize(int size) 293KDateTable::setFontSize(int size)
294{ 294{
295 int count; 295 int count;
296 QRect rect; 296 QRect rect;
297 // ----- store rectangles: 297 // ----- store rectangles:
298 fontsize=size; 298 fontsize=size;
299 QFont font = KGlobalSettings::generalFont(); 299 QFont font = KGlobalSettings::generalFont();
300 font.setPointSize(fontsize); 300 font.setPointSize(fontsize);
301 font.setBold( true ); 301 font.setBold( true );
302 QFontMetrics metrics(font); 302 QFontMetrics metrics(font);
303 303
304 // ----- find largest day name: 304 // ----- find largest day name:
305 maxCell.setWidth(0); 305 maxCell.setWidth(0);
306 maxCell.setHeight(0); 306 maxCell.setHeight(0);
307 for(count=0; count<7; ++count) 307 for(count=0; count<7; ++count)
308 { 308 {
309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
310 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 310 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
311 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 311 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
312 } 312 }
313 // ----- compare with a real wide number and add some space: 313 // ----- compare with a real wide number and add some space:
314 rect=metrics.boundingRect(QString::fromLatin1("88")); 314 rect=metrics.boundingRect(QString::fromLatin1("88"));
315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) 317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 )
318 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 318 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
319} 319}
320 320
321void 321void
322KDateTable::contentsMousePressEvent(QMouseEvent *e) 322KDateTable::contentsMousePressEvent(QMouseEvent *e)
323{ 323{
324 if(e->type()!=QEvent::MouseButtonPress) 324 if(e->type()!=QEvent::MouseButtonPress)
325 { // the KDatePicker only reacts on mouse press events: 325 { // the KDatePicker only reacts on mouse press events:
326 return; 326 return;
327 } 327 }
328 if(!isEnabled()) 328 if(!isEnabled())
329 { 329 {
330 KNotifyClient::beep(); 330 KNotifyClient::beep();
331 return; 331 return;
332 } 332 }
333 333
334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
335 // ----- 335 // -----
336 int row, col, pos, temp; 336 int row, col, pos, temp;
337 QPoint mouseCoord; 337 QPoint mouseCoord;
338 // ----- 338 // -----
339 mouseCoord = e->pos(); 339 mouseCoord = e->pos();
340 row=rowAt(mouseCoord.y()); 340 row=rowAt(mouseCoord.y());
341 col=columnAt(mouseCoord.x()); 341 col=columnAt(mouseCoord.x());
342 if(row<0 || col<0) 342 if(row<0 || col<0)
343 { // the user clicked on the frame of the table 343 { // the user clicked on the frame of the table
344 return; 344 return;
345 } 345 }
346 pos=7*(row-1)+col+1; 346 pos=7*(row-1)+col+1;
347#if 0
347 if(pos+dayoff<=firstday) 348 if(pos+dayoff<=firstday)
348 { // this day is in the previous month 349 { // this day is in the previous month
349 KNotifyClient::beep(); 350 KNotifyClient::beep();
350 return; 351 return;
351 } 352 }
352 if(firstday+numdays<pos+dayoff) 353 if(firstday+numdays<pos+dayoff)
353 { // this date is in the next month 354 { // this date is in the next month
354 KNotifyClient::beep(); 355 KNotifyClient::beep();
355 return; 356 return;
356 } 357 }
358#endif
357 temp=firstday+date.day()-dayoff-1; 359 temp=firstday+date.day()-dayoff-1;
358 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 360 QDate da = QDate(date.year(), date.month(),1);
361 setDate(da.addDays( pos-firstday+dayoff-1));
359 updateCell(temp/7+1, temp%7); // Update the previously selected cell 362 updateCell(temp/7+1, temp%7); // Update the previously selected cell
360 updateCell(row, col); // Update the selected cell 363 updateCell(row, col); // Update the selected cell
361 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 364 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
362 emit(tableClicked()); 365 emit(tableClicked());
363} 366}
364 367
365bool 368bool
366KDateTable::setDate(const QDate& date_) 369KDateTable::setDate(const QDate& date_)
367{ 370{
368 bool changed=false; 371 bool changed=false;
369 QDate temp; 372 QDate temp;
370 mMarkCurrent = false; 373 mMarkCurrent = false;
371 // ----- 374 // -----
372 if(!date_.isValid()) 375 if(!date_.isValid())
373 { 376 {
374 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 377 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
375 return false; 378 return false;
376 } 379 }
377 if(date!=date_) 380 if(date!=date_)
378 { 381 {
379 date=date_; 382 date=date_;
380 changed=true; 383 changed=true;
381 } 384 }
382 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 385 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
383 temp.setYMD(date.year(), date.month(), 1); 386 temp.setYMD(date.year(), date.month(), 1);
384 firstday=temp.dayOfWeek(); 387 firstday=temp.dayOfWeek();
385 if(firstday==1) firstday=8; 388 if(firstday==1) firstday=8;
386 numdays=date.daysInMonth(); 389 numdays=date.daysInMonth();
387 if(date.month()==1) 390 if(date.month()==1)
388 { // set to december of previous year 391 { // set to december of previous year
389 temp.setYMD(date.year()-1, 12, 1); 392 temp.setYMD(date.year()-1, 12, 1);
390 } else { // set to previous month 393 } else { // set to previous month
391 temp.setYMD(date.year(), date.month()-1, 1); 394 temp.setYMD(date.year(), date.month()-1, 1);
392 } 395 }
393 numDaysPrevMonth=temp.daysInMonth(); 396 numDaysPrevMonth=temp.daysInMonth();
394 if(changed) 397 if(changed)
395 { 398 {
396 repaintContents(false); 399 repaintContents(false);
397 } 400 }
398 emit(dateChanged(date)); 401 emit(dateChanged(date));
399 return true; 402 return true;
400} 403}
401 404
402const QDate& 405const QDate&
403KDateTable::getDate() const 406KDateTable::getDate() const
404{ 407{
405 return date; 408 return date;
406} 409}
407 410
408void KDateTable::focusInEvent( QFocusEvent *e ) 411void KDateTable::focusInEvent( QFocusEvent *e )
409{ 412{
410 repaintContents(false); 413 repaintContents(false);
411 QGridView::focusInEvent( e ); 414 QGridView::focusInEvent( e );
412} 415}
413 416
414void KDateTable::focusOutEvent( QFocusEvent *e ) 417void KDateTable::focusOutEvent( QFocusEvent *e )
415{ 418{
416 repaintContents(false); 419 repaintContents(false);
417 QGridView::focusOutEvent( e ); 420 QGridView::focusOutEvent( e );
418} 421}
419 422
420QSize 423QSize
421KDateTable::sizeHint() const 424KDateTable::sizeHint() const
422{ 425{
423 if(maxCell.height()>0 && maxCell.width()>0) 426 if(maxCell.height()>0 && maxCell.width()>0)
424 { 427 {
425 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 428 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
426 (maxCell.height()+4)*numRows()+2*frameWidth()); 429 (maxCell.height()+4)*numRows()+2*frameWidth());
427 } else { 430 } else {
428 return QSize(-1, -1); 431 return QSize(-1, -1);
429 } 432 }
430} 433}
431 434
432KDateInternalMonthPicker::KDateInternalMonthPicker 435KDateInternalMonthPicker::KDateInternalMonthPicker
433(int fontsize, QWidget* parent, const char* name) 436(int fontsize, QWidget* parent, const char* name)
434 : QGridView(parent, name), 437 : QGridView(parent, name),
435 result(0) // invalid 438 result(0) // invalid
436{ 439{
437 QRect rect; 440 QRect rect;
438 QFont font; 441 QFont font;
439 // ----- 442 // -----
440 activeCol = -1; 443 activeCol = -1;
441 activeRow = -1; 444 activeRow = -1;
442 font=KGlobalSettings::generalFont(); 445 font=KGlobalSettings::generalFont();
443 font.setPointSize(fontsize); 446 font.setPointSize(fontsize);
444 setFont(font); 447 setFont(font);
445 setHScrollBarMode(AlwaysOff); 448 setHScrollBarMode(AlwaysOff);
446 setVScrollBarMode(AlwaysOff); 449 setVScrollBarMode(AlwaysOff);
447 setFrameStyle(QFrame::NoFrame); 450 setFrameStyle(QFrame::NoFrame);
448 setNumRows(4); 451 setNumRows(4);
449 setNumCols(3); 452 setNumCols(3);
450 // enable to find drawing failures: 453 // enable to find drawing failures:
451 // setTableFlags(Tbl_clipCellPainting); 454 // setTableFlags(Tbl_clipCellPainting);
452#if 0 455#if 0
453 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 456 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
454#endif 457#endif