summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt1
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt2
-rw-r--r--korganizer/calendarview.cpp16
-rw-r--r--korganizer/calendarview.h1
-rw-r--r--korganizer/kofilterview.cpp6
-rw-r--r--korganizer/kofilterview.h1
-rw-r--r--libkcal/calendar.h2
-rw-r--r--libkcal/calendarlocal.cpp26
-rw-r--r--libkcal/calendarlocal.h1
9 files changed, 52 insertions, 4 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 6c1f664..edf7eb1 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,81 +1,82 @@
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 2.2.5 ************ 3********** VERSION 2.2.5 ************
4 4
5Bugfixes in KO/Pi, KA/Pi and OM/Pi. 5Bugfixes in KO/Pi, KA/Pi and OM/Pi.
6Added possibility to disable auto saving in KO/Pi. 6Added possibility to disable auto saving in KO/Pi.
7How to disable it? Good question! Next question, please? 7How to disable it? Good question! Next question, please?
8Added info about count of events/todos/journals to calendar info.
8 9
9 10
10********** VERSION 2.2.4 ************ 11********** VERSION 2.2.4 ************
11 12
12KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z. 13KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z.
13Added 3 sec notification about a started timer. 14Added 3 sec notification about a started timer.
14 15
15KO/Pi: 16KO/Pi:
16Added export option for all data to File->Export menu. 17Added export option for all data to File->Export menu.
17Better management if a save error occours. 18Better management if a save error occours.
18Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up. 19Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up.
19Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon. 20Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon.
20 21
21Added duration info about multiday events. 22Added duration info about multiday events.
22Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically. 23Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically.
23 24
24KA/Pi: 25KA/Pi:
25Added for vCard import the option to import contact data in Latin1 format. 26Added for vCard import the option to import contact data in Latin1 format.
26 27
27********** VERSION 2.2.3 ************ 28********** VERSION 2.2.3 ************
28 29
29KO/Pi: 30KO/Pi:
30Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events. 31Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events.
31 32
32Fixed usability problem in KA/Pi: 33Fixed usability problem in KA/Pi:
33Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option. 34Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option.
34 35
35Changed some behaviour in OM/Pi mail management to make it more usable. 36Changed some behaviour in OM/Pi mail management to make it more usable.
36 37
37 38
38********** VERSION 2.2.2 ************ 39********** VERSION 2.2.2 ************
39 40
40KO/Pi: 41KO/Pi:
41Fixed a problem with the sort order of last modified date in list view. 42Fixed a problem with the sort order of last modified date in list view.
42KA/Pi: 43KA/Pi:
43Fixed a resource config read problem on windows. 44Fixed a resource config read problem on windows.
44 45
45 46
46********** VERSION 2.2.1 ************ 47********** VERSION 2.2.1 ************
47 48
48KO/Pi: 49KO/Pi:
49Fixed a problem displaying very long allday events in agenda view in single day mode. 50Fixed a problem displaying very long allday events in agenda view in single day mode.
50Fixed a problem with the default settings for new todos. 51Fixed a problem with the default settings for new todos.
51Added an error message dialog if saving of calendar files is not possible. 52Added an error message dialog if saving of calendar files is not possible.
52Made it impossible to close KO/Pi if saving fails. 53Made it impossible to close KO/Pi if saving fails.
53Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick. 54Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick.
54Added config options for conflict detection. 55Added config options for conflict detection.
55 56
56KA/Pi: 57KA/Pi:
57Added a config option to turn on asking before a contact is deleted. 58Added a config option to turn on asking before a contact is deleted.
58Fixed a problem with the default view and view selection at startup. 59Fixed a problem with the default view and view selection at startup.
59Formatted name is now set on import, if formatted name is empty. 60Formatted name is now set on import, if formatted name is empty.
60Fixed a problem of displaying images in the contact details view: 61Fixed a problem of displaying images in the contact details view:
61Now the wid/hei ratio is not changed. 62Now the wid/hei ratio is not changed.
62I a picture is larger than 128 pixels in wid or hei it is downscaled to 63I a picture is larger than 128 pixels in wid or hei it is downscaled to
63max 128 pixels wid/hei. 64max 128 pixels wid/hei.
64 65
65********** VERSION 2.2.0 ************ 66********** VERSION 2.2.0 ************
66 67
67New stable release! 68New stable release!
68Fixed some minor usability problems. 69Fixed some minor usability problems.
69Added writing of next alarm to a file for usage on pdaXrom. 70Added writing of next alarm to a file for usage on pdaXrom.
70 71
71 72
72************************************* 73*************************************
73 74
74You can find the complete changelog 75You can find the complete changelog
75from version 1.7.7 to 2.2.0 76from version 1.7.7 to 2.2.0
76in the source package or on 77in the source package or on
77 78
78http://www.pi-sync.net/html/changelog.html 79http://www.pi-sync.net/html/changelog.html
79 80
80 81
81 82
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index e8b54fd..288ce4b 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1061,521 +1061,521 @@
1061{ "From ","Von " }, 1061{ "From ","Von " },
1062{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1062{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1063{ " weeks in the future "," Wochen in der Zukunft " }, 1063{ " weeks in the future "," Wochen in der Zukunft " },
1064{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1064{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1065{ "Local temp file:","Lokale temp Datei:" }, 1065{ "Local temp file:","Lokale temp Datei:" },
1066{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1066{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1067{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1067{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1068{ "Language","Sprache" }, 1068{ "Language","Sprache" },
1069{ "Time Format","Zeit Format" }, 1069{ "Time Format","Zeit Format" },
1070{ "Time Zone","Zeit Zone" }, 1070{ "Time Zone","Zeit Zone" },
1071{ "%1 groups subscribed","%1 Guppen abboniert" }, 1071{ "%1 groups subscribed","%1 Guppen abboniert" },
1072{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1072{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1075{ "Save settings","Speichere Einstellungen" }, 1075{ "Save settings","Speichere Einstellungen" },
1076{ "Save standard","Speichere Standard" }, 1076{ "Save standard","Speichere Standard" },
1077{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1077{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1078{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1078{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1079{ "Data storage path","Daten Speicherpfad" }, 1079{ "Data storage path","Daten Speicherpfad" },
1080{ "Language","Sprache" }, 1080{ "Language","Sprache" },
1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1083{ "Show events that are done","Zeige abgelaufene Termine" }, 1083{ "Show events that are done","Zeige abgelaufene Termine" },
1084{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1084{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1086{ "KO/Pi","KO/Pi" }, 1086{ "KO/Pi","KO/Pi" },
1087{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1087{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1089{ "Sound.Al.: ","Sound.Al.: " }, 1089{ "Sound.Al.: ","Sound.Al.: " },
1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1091{ "Restore","Wiederherstellen" }, 1091{ "Restore","Wiederherstellen" },
1092{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" }, 1092{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" },
1093{ "% completed","% erledigt" }, 1093{ "% completed","% erledigt" },
1094{ "%d item(s) found.","%d Item(s) gefunden." }, 1094{ "%d item(s) found.","%d Item(s) gefunden." },
1095{ "Set complete","Setze auf erledigt" }, 1095{ "Set complete","Setze auf erledigt" },
1096{ "(cancelled)","(gecancelt)" }, 1096{ "(cancelled)","(gecancelt)" },
1097{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1097{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1098{ " Local time "," Lokale Zeit " }, 1098{ " Local time "," Lokale Zeit " },
1099{ "Form2","Form2" }, 1099{ "Form2","Form2" },
1100{ "Filter enabled","Filter angeschaltet" }, 1100{ "Filter enabled","Filter angeschaltet" },
1101{ "Edit Filters","Ändere Filter" }, 1101{ "Edit Filters","Ändere Filter" },
1102{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1102{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1103{ "Agenda","Agenda" }, 1103{ "Agenda","Agenda" },
1104{ " ("," (" }, 1104{ " ("," (" },
1105{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1105{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1106{ "Print","Print" }, 1106{ "Print","Print" },
1107{ "&Setup Printer...","Drucker &Setup..." }, 1107{ "&Setup Printer...","Drucker &Setup..." },
1108{ "View Type","Zeige Typ" }, 1108{ "View Type","Zeige Typ" },
1109{ "Page &orientation:","Seiten Ausrichtung:" }, 1109{ "Page &orientation:","Seiten Ausrichtung:" },
1110{ "Use Default of Selected Style","Default des selektierten Stils" }, 1110{ "Use Default of Selected Style","Default des selektierten Stils" },
1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1112{ "Portrait","Portrait" }, 1112{ "Portrait","Portrait" },
1113{ "Landscape","Landschaft" }, 1113{ "Landscape","Landschaft" },
1114{ "Print day","Drucke Tag" }, 1114{ "Print day","Drucke Tag" },
1115{ "CalPrintDay_Base","CalPrintDay_Base" }, 1115{ "CalPrintDay_Base","CalPrintDay_Base" },
1116{ "Date && Time Range","Datum && Zeitspanne" }, 1116{ "Date && Time Range","Datum && Zeitspanne" },
1117{ "&End date:","&Enddatum:" }, 1117{ "&End date:","&Enddatum:" },
1118{ "&Start date:","&Startdatum:" }, 1118{ "&Start date:","&Startdatum:" },
1119{ "Start &time:","Startzeit:" }, 1119{ "Start &time:","Startzeit:" },
1120{ "End ti&me:","Endzeit:" }, 1120{ "End ti&me:","Endzeit:" },
1121{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1121{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1122{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1122{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1123{ "Alt+D","Alt+D" }, 1123{ "Alt+D","Alt+D" },
1124{ "&Use colors","Nutze Farben" }, 1124{ "&Use colors","Nutze Farben" },
1125{ "Alt+U","Alt+U" }, 1125{ "Alt+U","Alt+U" },
1126{ "Print week","Drucke Woche" }, 1126{ "Print week","Drucke Woche" },
1127{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1127{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1128{ "Use &colors","Nutze Farben" }, 1128{ "Use &colors","Nutze Farben" },
1129{ "Type of View","Typ der Ansicht" }, 1129{ "Type of View","Typ der Ansicht" },
1130{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1130{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1131{ "Alt+F","Alt+F" }, 1131{ "Alt+F","Alt+F" },
1132{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1132{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1133{ "Alt+T","Alt+T" }, 1133{ "Alt+T","Alt+T" },
1134{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1134{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1135{ "Print month","Drucke Monat" }, 1135{ "Print month","Drucke Monat" },
1136{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1136{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1137{ "&Start month:","&Startmonat:" }, 1137{ "&Start month:","&Startmonat:" },
1138{ "&End month:","&Endmonat:" }, 1138{ "&End month:","&Endmonat:" },
1139{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1139{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1140{ "Print todos","Drucke Todos" }, 1140{ "Print todos","Drucke Todos" },
1141{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1141{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1142{ "Include &description of the item","Inclusive Itembeschreibung" }, 1142{ "Include &description of the item","Inclusive Itembeschreibung" },
1143{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1143{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1144{ "Include &priority of the item","Inclusive Priorität des Items" }, 1144{ "Include &priority of the item","Inclusive Priorität des Items" },
1145{ "Items to Print","Zu druckende Items" }, 1145{ "Items to Print","Zu druckende Items" },
1146{ "&From:","Von:" }, 1146{ "&From:","Von:" },
1147{ "&To:","Bis:" }, 1147{ "&To:","Bis:" },
1148{ "Print &all todo items","Drucke alle Todo Items" }, 1148{ "Print &all todo items","Drucke alle Todo Items" },
1149{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1149{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1150{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1150{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1151{ "Todo List","Todo Liste" }, 1151{ "Todo List","Todo Liste" },
1152{ "&Title:","&Titel:" }, 1152{ "&Title:","&Titel:" },
1153{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" }, 1153{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" },
1154{ "Todo list","Todo Liste" }, 1154{ "Todo list","Todo Liste" },
1155{ "&Print...","Drucke..." }, 1155{ "&Print...","Drucke..." },
1156{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1156{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1157{ "[Unconfigured]","[Unkonfiguriert]" }, 1157{ "[Unconfigured]","[Unkonfiguriert]" },
1158{ "OK","OK" }, 1158{ "OK","OK" },
1159{ "FilterEditor","FilterEditor" }, 1159{ "FilterEditor","FilterEditor" },
1160{ "Include","Inclusive" }, 1160{ "Include","Inclusive" },
1161{ "Exclude","Exclusive" }, 1161{ "Exclude","Exclusive" },
1162{ "Edit Selection...","Editiere Auswahl" }, 1162{ "Edit Selection...","Editiere Auswahl" },
1163{ "recurring events","wiederholende Termine" }, 1163{ "recurring events","wiederholende Termine" },
1164{ "recurr. events","wiederh.Termine" }, 1164{ "recurr. events","wiederh.Termine" },
1165{ "completed to-dos","erledigte Todos" }, 1165{ "completed to-dos","erledigte Todos" },
1166{ "events","Termine" }, 1166{ "events","Termine" },
1167{ "todos","Todos" }, 1167{ "todos","Todos" },
1168{ "journals","Journale" }, 1168{ "journals","Journale" },
1169{ "public","öffentl." }, 1169{ "public","öffentl." },
1170{ "private","privat" }, 1170{ "private","privat" },
1171{ "confidential","vertraul." }, 1171{ "confidential","vertraul." },
1172{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" }, 1172{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" },
1173{ "Yesterday","Gestern" }, 1173{ "Yesterday","Gestern" },
1174{ "Day after tomorrow","Übermorgen" }, 1174{ "Day after tomorrow","Übermorgen" },
1175{ "Tomorrow","Morgen" }, 1175{ "Tomorrow","Morgen" },
1176{ "Day before yesterday","Vorgestern" }, 1176{ "Day before yesterday","Vorgestern" },
1177{ "Size %1","Größe %1" }, 1177{ "Size %1","Größe %1" },
1178{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1178{ "New Agendasize: %1","Neue Agendagröße: %1" },
1179{ " (%1 y.)"," (%1 J.)" }, 1179{ " (%1 y.)"," (%1 J.)" },
1180{ "Allday:","Ganztägig:" }, 1180{ "Allday:","Ganztägig:" },
1181{ "compl.todos","erled.Todos" }, 1181{ "compl.todos","erled.Todos" },
1182{ "Day view","Tagesansicht" }, 1182{ "Day view","Tagesansicht" },
1183{ "Next days","Nächste Tage" }, 1183{ "Next days","Nächste Tage" },
1184{ "Next week","Nächste Woche" }, 1184{ "Next week","Nächste Woche" },
1185{ "Next two weeks","Nächste zwei Wochen" }, 1185{ "Next two weeks","Nächste zwei Wochen" },
1186{ "This month","Dieser Monat" }, 1186{ "This month","Dieser Monat" },
1187{ "Journal view","Journal" }, 1187{ "Journal view","Journal" },
1188{ "Display all opened","Zeige alle geöffnet" }, 1188{ "Display all opened","Zeige alle geöffnet" },
1189{ "Display all closed","Zeige alle geschlossen" }, 1189{ "Display all closed","Zeige alle geschlossen" },
1190{ "Display all flat","Zeige alle flach" }, 1190{ "Display all flat","Zeige alle flach" },
1191{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1191{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1192{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1192{ "Default todo done color:","Standard Todo erledigt Farbe" },
1193{ "Select week %1-%2","Wähle Woche %1-%2" }, 1193{ "Select week %1-%2","Wähle Woche %1-%2" },
1194{ "Select Week","Wähle Woche" }, 1194{ "Select Week","Wähle Woche" },
1195{ "Set alarm...","Setze Alarm..." }, 1195{ "Set alarm...","Setze Alarm..." },
1196{ "Set Alarm!","Setze Alarm!" }, 1196{ "Set Alarm!","Setze Alarm!" },
1197{ "Changed alarm for %1 items","Alarm für %1 Items geändert" }, 1197{ "Changed alarm for %1 items","Alarm für %1 Items geändert" },
1198{ " and "," und " }, 1198{ " and "," und " },
1199{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1199{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1200{ "Mail to selected","Mail an Ausgewählte" }, 1200{ "Mail to selected","Mail an Ausgewählte" },
1201{ "Mail to all","Mail an Alle" }, 1201{ "Mail to all","Mail an Alle" },
1202{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1202{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1203{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1203{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1204{ " on"," am" }, 1204{ " on"," am" },
1205{ " completed on "," erledigt am " }, 1205{ " completed on "," erledigt am " },
1206{ "Save as Event template","Speichere als Vorlage" }, 1206{ "Save as Event template","Speichere als Vorlage" },
1207{ "Load Event template","Lade Termin Vorlage" }, 1207{ "Load Event template","Lade Termin Vorlage" },
1208{ "Save as Journal template","Speichere als Journal Vorlage" }, 1208{ "Save as Journal template","Speichere als Journal Vorlage" },
1209{ "Insert Journal template","Füge Journal Vorlage ein" }, 1209{ "Insert Journal template","Füge Journal Vorlage ein" },
1210{ "Sub todos:<br>","Unter-Todos:<br>" }, 1210{ "Sub todos:<br>","Unter-Todos:<br>" },
1211{ "Parent todo:<br>","Über-Todo:<br>" }, 1211{ "Parent todo:<br>","Über-Todo:<br>" },
1212{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1212{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1213{ " completed"," erledigt" }, 1213{ " completed"," erledigt" },
1214{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" }, 1214{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" },
1215{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1215{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1216{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1216{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1217{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1217{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1218{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 1218{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
1219{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1219{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1220{ "Error","Fehler" }, 1220{ "Error","Fehler" },
1221{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1221{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1222{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1222{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1223{ "Warning","Warnung" }, 1223{ "Warning","Warnung" },
1224{ "Select week number","Wähle Wochen Nummer" }, 1224{ "Select week number","Wähle Wochen Nummer" },
1225{ "Februar","Februar" }, 1225{ "Februar","Februar" },
1226{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1226{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1227{ "W","W" }, 1227{ "W","W" },
1228{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1228{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1229{ "T: %1","T: %1" }, 1229{ "T: %1","T: %1" },
1230{ "Start: ","Start: " }, 1230{ "Start: ","Start: " },
1231{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1231{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1232{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1232{ "Password for remote access:","Passwort für fernen Zugriff:" },
1233{ "Remote IP address:","Ferne IP Adresse:" }, 1233{ "Remote IP address:","Ferne IP Adresse:" },
1234{ "Remote port number:","Ferne Port Nummer:" }, 1234{ "Remote port number:","Ferne Port Nummer:" },
1235{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1235{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1236{ "Remote from: ","Fern von: " }, 1236{ "Remote from: ","Fern von: " },
1237{ "Local from: ","Lokal von: " }, 1237{ "Local from: ","Lokal von: " },
1238{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 1238{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
1239{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1239{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1240{ "Write back","Schreibe zurück" }, 1240{ "Write back","Schreibe zurück" },
1241{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1241{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1242{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1242{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1243{ "Received sync request","Sync Anfrage erhalten" }, 1243{ "Received sync request","Sync Anfrage erhalten" },
1244{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 1244{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
1245{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1245{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1246{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1246{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1247{ "Sending file...","Sende Datei..." }, 1247{ "Sending file...","Sende Datei..." },
1248{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1248{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1249{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1249{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1250{ "Received %1 bytes","%1 Bytes erhalten" }, 1250{ "Received %1 bytes","%1 Bytes erhalten" },
1251{ "Writing file to disk...","Speichere Datei..." }, 1251{ "Writing file to disk...","Speichere Datei..." },
1252{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1252{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1253{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1253{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1254{ "Synchronize!","Synchronisiere!" }, 1254{ "Synchronize!","Synchronisiere!" },
1255{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1255{ "High clock skew!","Großer Uhrzeitunterschied!" },
1256{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1256{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1257{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 1257{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
1258{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1258{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1259{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1259{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1260{ "List week view","Listenwochenansicht" }, 1260{ "List week view","Listenwochenansicht" },
1261{ "List week","Listenwochenansicht" }, 1261{ "List week","Listenwochenansicht" },
1262{ "Next Week","Nächste Woche" }, 1262{ "Next Week","Nächste Woche" },
1263{ "Previous Week","Vorherige Woche" }, 1263{ "Previous Week","Vorherige Woche" },
1264{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." }, 1264{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." },
1265{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1265{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1266{ "Details","Details" }, 1266{ "Details","Details" },
1267{ "Created time","Erstellt Zeit" }, 1267{ "Created time","Erstellt Zeit" },
1268{ "Last modified time","Geändert Zeit" }, 1268{ "Last modified time","Geändert Zeit" },
1269{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1269{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1270{ "View Options","Anzeige Optionen" }, 1270{ "View Options","Anzeige Optionen" },
1271{ "<b>Created: ","<b>Erstellt am: " }, 1271{ "<b>Created: ","<b>Erstellt am: " },
1272{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1272{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1273{ "Journal: ","Journal: " }, 1273{ "Journal: ","Journal: " },
1274{ "yearly","jährlich" }, 1274{ "yearly","jährlich" },
1275{ "(%1) ","%1-" }, 1275{ "(%1) ","%1-" },
1276{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1276{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1277{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1277{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1278{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1278{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1279{ "Summary/Loc.","Titel/Ort" }, 1279{ "Summary/Loc.","Titel/Ort" },
1280{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1280{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1281{ "Week Number","Wochennummer" }, 1281{ "Week Number","Wochennummer" },
1282{ "Import","Importiere" }, 1282{ "Import","Importiere" },
1283{ "Export","Exportiere" }, 1283{ "Export","Exportiere" },
1284{ "Beam","Beame" }, 1284{ "Beam","Beame" },
1285{ "Export","Exportiere" }, 1285{ "Export","Exportiere" },
1286{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1286{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1287{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1287{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1288{ "Journal/Details...","Journale/Details..." }, 1288{ "Journal/Details...","Journale/Details..." },
1289{ "Agenda View","Agenda Ansicht" }, 1289{ "Agenda View","Agenda Ansicht" },
1290{ "Show current time","Zeige aktuelle Zeit" }, 1290{ "Show current time","Zeige aktuelle Zeit" },
1291{ "Edit new item","Bearbeite neuen Eintrag" }, 1291{ "Edit new item","Bearbeite neuen Eintrag" },
1292{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" }, 1292{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" },
1293{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1293{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1294{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1294{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1295{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1295{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1296{ "%1 days\n","%1 Tagen\n" }, 1296{ "%1 days\n","%1 Tagen\n" },
1297{ "1 day\n","1 Tag\n" }, 1297{ "1 day\n","1 Tag\n" },
1298{ "%1 hours\n","%1 Stunden\n" }, 1298{ "%1 hours\n","%1 Stunden\n" },
1299{ "1 hour\n","1 Stunde\n" }, 1299{ "1 hour\n","1 Stunde\n" },
1300{ "%1 minutes\n","%1 Minuten\n" }, 1300{ "%1 minutes\n","%1 Minuten\n" },
1301{ "1 minute\n","1 Minute\n" }, 1301{ "1 minute\n","1 Minute\n" },
1302{ "Only one toolbar","Nur eine Toolbar" }, 1302{ "Only one toolbar","Nur eine Toolbar" },
1303{ "Print","Drucke" }, 1303{ "Print","Drucke" },
1304{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1304{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1305{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1305{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1306{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1306{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1307{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1307{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1308{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" }, 1308{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" },
1309{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1309{ "KO/Pi Printout","KO/Pi Ausdruck" },
1310{ "Print unscaled","Drucke unskaliert" }, 1310{ "Print unscaled","Drucke unskaliert" },
1311{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1311{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1312{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1312{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1313{ "Printout Mode","Druck Modus" }, 1313{ "Printout Mode","Druck Modus" },
1314{ "Filter menu icon","Filtermenu Icon" }, 1314{ "Filter menu icon","Filtermenu Icon" },
1315{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" }, 1315{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" },
1316{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" }, 1316{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" },
1317{ "%1d","%1t" }, 1317{ "%1d","%1t" },
1318{ "%1h","%1std" }, 1318{ "%1h","%1std" },
1319{ "%1min","%1min" }, 1319{ "%1min","%1min" },
1320{ "( %1 before )","( %1 vorher )" }, 1320{ "( %1 before )","( %1 vorher )" },
1321{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1321{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1322{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1322{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1323{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1323{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1324{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1324{ "Show Sync Events","Zeige Sync-Ereignisse" },
1325{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1325{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1326{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1326{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1327{ " on "," am " }, 1327{ " on "," am " },
1328{ "On: ","Am: " }, 1328{ "On: ","Am: " },
1329{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1329{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1330{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1330{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1331{ "Color for running todos:","Farbe für laufende Todos:" }, 1331{ "Color for running todos:","Farbe für laufende Todos:" },
1332{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" }, 1332{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" },
1333{ "Todo is started","Todo ist gestartet" }, 1333{ "Todo is started","Todo ist gestartet" },
1334{ "Stop todo","Stoppe Todo" }, 1334{ "Stop todo","Stoppe Todo" },
1335{ "Todo is stopped","Todo ist gestoppt" }, 1335{ "Todo is stopped","Todo ist gestoppt" },
1336{ "Start todo","Starte Todo" }, 1336{ "Start todo","Starte Todo" },
1337{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" }, 1337{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" },
1338{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" }, 1338{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" },
1339{ "Todo has subtodos","Todo hat Untertodos" }, 1339{ "Todo has subtodos","Todo hat Untertodos" },
1340{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1340{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1341{ "Colors","Farben" }, 1341{ "Colors","Farben" },
1342{ "Click on new parent item","Klicke auf neues Übertodo" }, 1342{ "Click on new parent item","Klicke auf neues Übertodo" },
1343{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1343{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1344{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" }, 1344{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" },
1345{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1345{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1346{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" }, 1346{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" },
1347{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1347{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1348{ "times","Zeiten" }, 1348{ "times","Zeiten" },
1349{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" }, 1349{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" },
1350{ "Backup enabled","Backup angeschaltet" }, 1350{ "Backup enabled","Backup angeschaltet" },
1351{ "Use standard backup dir","Standard Backupverzeichnis" }, 1351{ "Use standard backup dir","Standard Backupverzeichnis" },
1352{ "Number of Backups:","Anzahl der Backups" }, 1352{ "Number of Backups:","Anzahl der Backups" },
1353{ "Make backup every ","Mache ein Backup alle " }, 1353{ "Make backup every ","Mache ein Backup alle " },
1354{ " days"," Tage" }, 1354{ " days"," Tage" },
1355{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." }, 1355{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." },
1356{ "Backup Failed!","Backup Problem!" }, 1356{ "Backup Failed!","Backup Problem!" },
1357{ "Try again now","Versuche jetzt nochmal" }, 1357{ "Try again now","Versuche jetzt nochmal" },
1358{ "Try again later","Versuche später nochmal" }, 1358{ "Try again later","Versuche später nochmal" },
1359{ "Try again tomorrow","Versuche morgen nochmal" }, 1359{ "Try again tomorrow","Versuche morgen nochmal" },
1360{ "Disable backup","Schalte Backup ab" }, 1360{ "Disable backup","Schalte Backup ab" },
1361{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 1361{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
1362{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 1362{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
1363{ "Choose action","Wähle Aktion" }, 1363{ "Choose action","Wähle Aktion" },
1364{ "Comment for todo:","Kommentar zum Todo:" }, 1364{ "Comment for todo:","Kommentar zum Todo:" },
1365{ "Stop+note","Stop+Notiz" }, 1365{ "Stop+note","Stop+Notiz" },
1366{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1366{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1367{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1367{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1368{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" }, 1368{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
1369{ "Print complete list...","Drucke komplette Liste..." }, 1369{ "Print complete list...","Drucke komplette Liste..." },
1370{ "Hide all selected","Verstecke Ausgewählte" }, 1370{ "Hide all selected","Verstecke Ausgewählte" },
1371{ "Add items","hinzufügen" }, 1371{ "Add items","hinzufügen" },
1372{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" }, 1372{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" },
1373{ "Print List View...","Drucke Listenansicht..." }, 1373{ "Print List View...","Drucke Listenansicht..." },
1374{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." }, 1374{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." },
1375{ "Configure KO/Pi...","Konfiguriere KO/Pi..." }, 1375{ "Configure KO/Pi...","Konfiguriere KO/Pi..." },
1376{ "Global Settings...","Globale Einstellungen..." }, 1376{ "Global Settings...","Globale Einstellungen..." },
1377{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, 1377{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" },
1378{ "(disabled)","(abgeschaltet)" }, 1378{ "(disabled)","(abgeschaltet)" },
1379{ "New Calendar","Neuer Kalender" }, 1379{ "New Calendar","Neuer Kalender" },
1380{ "Calendar","Kalender" }, 1380{ "Calendar","Kalender" },
1381{ "Filter selector","Filterauswahl" }, 1381{ "Filter selector","Filterauswahl" },
1382{ "Filtermenu","Filtermenu" }, 1382{ "Filtermenu","Filtermenu" },
1383{ "Toggle Fullscreen","Vollbild umschalten" }, 1383{ "Toggle Fullscreen","Vollbild umschalten" },
1384{ "Toggle Resource View","Resourcenansicht umschalten" }, 1384{ "Toggle Resource View","Resourcenansicht umschalten" },
1385{ "Storage HowTo...","Speicherort HowTo..." }, 1385{ "Storage HowTo...","Speicherort HowTo..." },
1386{ "Timetracking HowTo...","Timetracking HowTo..." }, 1386{ "Timetracking HowTo...","Timetracking HowTo..." },
1387{ "Juni","Juni" }, 1387{ "Juni","Juni" },
1388{ "Juli","Juli" }, 1388{ "Juli","Juli" },
1389{ "ToDo:","ToDo:" }, 1389{ "ToDo:","ToDo:" },
1390{ "Set Calendar","Setze Kalender" }, 1390{ "Set Calendar","Setze Kalender" },
1391{ "Todo: %1","Todo: %1" }, 1391{ "Todo: %1","Todo: %1" },
1392{ ": (Prio ",": (Prio " }, 1392{ ": (Prio ",": (Prio " },
1393{ "Todos","Todos" }, 1393{ "Todos","Todos" },
1394{ "Todo Viewer","Todo Anzeige" }, 1394{ "Todo Viewer","Todo Anzeige" },
1395{ "Todo ","Todo " }, 1395{ "Todo ","Todo " },
1396{ " Calendar \n Resource "," Kalender \n Resource " }, 1396{ " Calendar \n Resource "," Kalender \n Resource " },
1397{ " Color "," Farbe " }, 1397{ " Color "," Farbe " },
1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, 1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" },
1399{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, 1399{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" },
1400{ "Add new Calendar","Füge Kalender hinzu" }, 1400{ "Add new Calendar","Füge Kalender hinzu" },
1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, 1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." },
1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, 1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" },
1406{ "Global application font for all apps:","Globale Schriftart:" }, 1406{ "Global application font for all apps:","Globale Schriftart:" },
1407{ "Application Font","Applikationsschriftart" }, 1407{ "Application Font","Applikationsschriftart" },
1408{ "Kx/Pi","Kx/Pi" }, 1408{ "Kx/Pi","Kx/Pi" },
1409{ "Backup","Backup" }, 1409{ "Backup","Backup" },
1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1413{ "Choose Color","Wähle Farbe" }, 1413{ "Choose Color","Wähle Farbe" },
1414{ " OK "," OK " }, 1414{ " OK "," OK " },
1415{ " Cancel "," Abbrechen " }, 1415{ " Cancel "," Abbrechen " },
1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1418{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1418{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1421{ "%1\nis running!","%1\nist am Laufen!" }, 1421{ "%1\nis running!","%1\nist am Laufen!" },
1422{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1422{ "Additional Comment:","Zusätzlicher Kommentar:" },
1423{ "Stop and save","Stopp und Speichern" }, 1423{ "Stop and save","Stopp und Speichern" },
1424{ "Continue running","Weiter laufen lassen" }, 1424{ "Continue running","Weiter laufen lassen" },
1425{ "Stop - do not save","Stopp - nicht Speichern" }, 1425{ "Stop - do not save","Stopp - nicht Speichern" },
1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1427{ "Time mismatch!","Zeiten stimmen nicht!" }, 1427{ "Time mismatch!","Zeiten stimmen nicht!" },
1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1429{ "Yes, stop todo","Ja, stoppe Todo" }, 1429{ "Yes, stop todo","Ja, stoppe Todo" },
1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1433{ "Spouse","Ehegatte" }, 1433{ "Spouse","Ehegatte" },
1434{ "Notes","Notizen" }, 1434{ "Notes","Notizen" },
1435{ "Messanger","Messanger" }, 1435{ "Messanger","Messanger" },
1436{ "Assistant","Assistent" }, 1436{ "Assistant","Assistent" },
1437{ "Manager","Manager" }, 1437{ "Manager","Manager" },
1438{ "Secrecy","Sichtbar" }, 1438{ "Secrecy","Sichtbar" },
1439{ "male","männlich" }, 1439{ "male","männlich" },
1440{ "female","weiblich" }, 1440{ "female","weiblich" },
1441{ "Hide!","Verbergen!" }, 1441{ "Hide!","Verbergen!" },
1442{ "Show!","Anzeigen!" }, 1442{ "Show!","Anzeigen!" },
1443{ "Details","Details" }, 1443{ "Details","Details" },
1444{ "Profession","Beruf" }, 1444{ "Profession","Beruf" },
1445{ "Children","Kinder" }, 1445{ "Children","Kinder" },
1446{ "Department","Abteilung" }, 1446{ "Department","Abteilung" },
1447{ "Backup cancelled","Backup abgebrochen" }, 1447{ "Backup cancelled","Backup abgebrochen" },
1448{ "Backup globally disabled","Backup global abgeschaltet" }, 1448{ "Backup globally disabled","Backup global abgeschaltet" },
1449{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1449{ "Backup succesfully finished","Backup erfolgreich beendet" },
1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1452{ "Birthdays","Geburtstage" }, 1452{ "Birthdays","Geburtstage" },
1453{ "KO/Pi import information!","KO/Pi Import Information!" }, 1453{ "KO/Pi import information!","KO/Pi Import Information!" },
1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1457{ "Reload","Neu laden" }, 1457{ "Reload","Neu laden" },
1458{ "Timezone settings","Zeitzoneneinstellung" }, 1458{ "Timezone settings","Zeitzoneneinstellung" },
1459{ "Title: ","Titel: " }, 1459{ "Title: ","Titel: " },
1460{ "Journal from: ","Journal vom: " }, 1460{ "Journal from: ","Journal vom: " },
1461{ "Journal: %1 from ","Journal: %1 vom " }, 1461{ "Journal: %1 from ","Journal: %1 vom " },
1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, 1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" },
1463{ "Selected Item","Ausgewähltes Item" }, 1463{ "Selected Item","Ausgewähltes Item" },
1464{ "Select Date...","Wähle Datum..." }, 1464{ "Select Date...","Wähle Datum..." },
1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, 1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" },
1466{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1466{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1467{ "Edit category list...","Ändere Kategorieliste..." }, 1467{ "Edit category list...","Ändere Kategorieliste..." },
1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, 1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" },
1469{ "Filepath: ","Dateipfad: " }, 1469{ "Filepath: ","Dateipfad: " },
1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, 1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" },
1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, 1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" },
1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1475{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1475{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1476{ "Alarm Options","Alarm Einstellungen" }, 1476{ "Alarm Options","Alarm Einstellungen" },
1477{ "Delete selected...","Lösche Ausgewählte..." }, 1477{ "Delete selected...","Lösche Ausgewählte..." },
1478{ "None","Nichts" }, 1478{ "None","Nichts" },
1479{ "Selection","Auswahl" }, 1479{ "Selection","Auswahl" },
1480{ "Set categories","Setze Kategorien" }, 1480{ "Set categories","Setze Kategorien" },
1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, 1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" },
1482{ "Reset","Neu setzen" }, 1482{ "Reset","Neu setzen" },
1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, 1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" },
1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, 1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" },
1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, 1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" },
1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, 1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" },
1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
1488{ "Edit","Edit" }, 1488{ "Edit","Edit" },
1489{ "Last Modified","Zuletzt geändert" }, 1489{ "Last Modified","Zuletzt geändert" },
1490{ "Journal viewer","Journal Anzeige" }, 1490{ "Journal viewer","Journal Anzeige" },
1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, 1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." },
1493{ "Hide Completed","Verstecke erledigte Todos" }, 1493{ "Hide Completed","Verstecke erledigte Todos" },
1494{ "Show not Running","Zeige nicht Laufende" }, 1494{ "Show not Running","Zeige nicht Laufende" },
1495{ "Click to add new Todo","Klick für neues Todo!" }, 1495{ "Click to add new Todo","Klick für neues Todo!" },
1496{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1496{ "Show next conflict for","Zeige nächsten Konflikt für" },
1497{ "All events","Alle Termine" }, 1497{ "All events","Alle Termine" },
1498{ "Allday events","Ganztagestermine" }, 1498{ "Allday events","Ganztagestermine" },
1499{ "Events with time","Termine mit Zeit" }, 1499{ "Events with time","Termine mit Zeit" },
1500{ "No conflict found","Kein Konflikt gefunden" }, 1500{ "No conflict found","Kein Konflikt gefunden" },
1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, 1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " },
1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, 1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" },
1505{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" }, 1505{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" },
1506{ "Show date","Zeige Datum" }, 1506{ "Show date","Zeige Datum" },
1507{ "No problem!","Null Problemo!" }, 1507{ "No problem!","Null Problemo!" },
1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
1513{ "Pi-Sync Error","Pi-Sync Fehler" }, 1513{ "Pi-Sync Error","Pi-Sync Fehler" },
1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." }, 1520{ "Receiving file from remote...","Empfange entfernte Datei..." },
1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
1526{ "Writing back file ...","Schreibe Datei zurück..." }, 1526{ "Writing back file ...","Schreibe Datei zurück..." },
1527{ "Sending back file ...","Sende Datei zurück..." }, 1527{ "Sending back file ...","Sende Datei zurück..." },
1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" }, 1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" },
1529{ "Created","Angelegt" }, 1529{ "Created","Angelegt" },
1530{ "Last Modified Sub","Zuletzt geändertes Sub" }, 1530{ "Last Modified Sub","Zuletzt geändertes Sub" },
1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" }, 1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" },
1532{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" }, 1532{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" },
1533{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 1533{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
1534{ "Duration","Dauer" }, 1534{ "Duration","Dauer" },
1535{ " day"," Tag" }, 1535{ " day"," Tag" },
1536{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" }, 1536{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" },
1537{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" }, 1537{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" },
1538{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" }, 1538{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" },
1539{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" }, 1539{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" },
1540{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" }, 1540{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" },
1541{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" }, 1541{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" },
1542{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." }, 1542{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." },
1543{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." }, 1543{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." },
1544{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." }, 1544{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." },
1545{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." }, 1545{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." },
1546{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." }, 1546{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." },
1547{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" }, 1547{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" },
1548{ "Error saving data","Fehler beim Abspeichern" }, 1548{ "Error saving data","Fehler beim Abspeichern" },
1549{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" }, 1549{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" },
1550{ "Enable conflict detection","Schalte Konflikterkennung an" }, 1550{ "Enable conflict detection","Schalte Konflikterkennung an" },
1551{ "Filter for the edited event","Filter für den bearbeiteten Termin" }, 1551{ "Filter for the edited event","Filter für den bearbeiteten Termin" },
1552{ "Filter for other events","Filter für die anderen Termine" }, 1552{ "Filter for other events","Filter für die anderen Termine" },
1553{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" }, 1553{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" },
1554{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" }, 1554{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" },
1555{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" }, 1555{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" },
1556{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" }, 1556{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" },
1557{ "Conflict detection","Konflikterkennung" }, 1557{ "Conflict detection","Konflikterkennung" },
1558{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" }, 1558{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" },
1559{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." }, 1559{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." },
1560{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" }, 1560{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" },
1561{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." }, 1561{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." },
1562{ " Yes, close "," Ja, beenden " }, 1562{ " Yes, close "," Ja, beenden " },
1563{ "Export All Data","Exportiere alle Daten" }, 1563{ "Export All Data","Exportiere alle Daten" },
1564{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" }, 1564{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" },
1565{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" }, 1565{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" },
1566{ " (Duration: %1 days)"," (Dauer: %1 Tage)" }, 1566{ " (Duration: %1 days)"," (Dauer: %1 Tage)" },
1567{ "Autosave enabled!","Auto-Speichern angeschaltet!" }, 1567{ "Autosave enabled!","Auto-Speichern angeschaltet!" },
1568{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" }, 1568{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" },
1569{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" }, 1569{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" },
1570{ "Yes, Save!","Ja, Speichern!" }, 1570{ "Yes, Save!","Ja, Speichern!" },
1571{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" }, 1571{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" },
1572{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" }, 1572{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" },
1573{ "","" }, 1573{ "<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>","<br>Der Kalender enthält<br><b>%1 Termine<br>%2 Todos<br>%3 Journale</b>" },
1574{ "","" }, 1574{ "","" },
1575{ "","" }, 1575{ "","" },
1576{ "","" }, 1576{ "","" },
1577{ "","" }, 1577{ "","" },
1578{ "","" }, 1578{ "","" },
1579{ "","" }, 1579{ "","" },
1580{ "","" }, 1580{ "","" },
1581{ "","" }, 1581{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index e31a6e1..28b17a5 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,992 +1,994 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) );
480 481
482
481 mTodoList->setNavigator( mNavigator ); 483 mTodoList->setNavigator( mNavigator );
482#if 0 484#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 485 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 486 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 487 leftFrameLayout->addWidget(mTodoList, 2 );
486 488
487 } else { 489 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 490 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 491 leftFrameLayout->addWidget(mFilterView );
490 } 492 }
491#endif 493#endif
492 mFilterView->hide(); 494 mFilterView->hide();
493 mCalEditView->hide(); 495 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 496 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 497 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 498 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 499 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 500 rightLayout->addWidget( mRightFrame, 10 );
499 501
500 //mLeftFrame = (QWidget *)leftFrame; 502 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 503 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 505 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 506 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 507 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 508 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 510 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 511 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 512 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 513 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 514 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 515 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 516#endif
515 517
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 518 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 519 SLOT( showDates( const KCal::DateList & ) ) );
518 520
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 521 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 522 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 523
522 524
523 525
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 526 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 527 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 528
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 529 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 530 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 531
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 532 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 533 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 534 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 535 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 536 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 537 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 538 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 539 mNavigator, SLOT( selectNextMonth() ) );
538 540
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 541 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 542 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 543 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 544 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 545 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 546 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 547
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 548 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 549 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 550#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 551 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 552 SLOT( incidenceAdded( Incidence *) ) );
551#endif 553#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 554 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 555
554 connect( this, SIGNAL( configChanged() ), 556 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 557 mDateNavigator, SLOT( updateConfig() ) );
556 558
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 559 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 560 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 561 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 562 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 564 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 565 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 566 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 567 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 568 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 569 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 570 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 571 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 572 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 573 SIGNAL( todoModified( Todo *, int ) ) );
572 574
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 576 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 577 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 578 this, SLOT (cancelIncidence( Incidence * ) ) );
577 579
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 581 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 582 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 583 this, SLOT ( beamIncidence( Incidence * ) ) );
582 584
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 585 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 586 this, SLOT ( todo_unsub( Todo * ) ) );
585 587
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 588 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 589 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 590 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 591 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 592 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 593 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 594
593 595
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 596 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 597 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 598 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 599 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 600
599 601
600 602
601 603
602 604
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 605 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 606 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 607 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 608 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 609 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 610
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 611 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 612
611 mDateFrame = new QVBox(0,0,WType_Popup); 613 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 614 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 615 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 616 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 617 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 618 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 619 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 620
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 621 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 622
621 mEventEditor = mDialogManager->getEventEditor(); 623 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 624 mTodoEditor = mDialogManager->getTodoEditor();
623 625
624 mFlagEditDescription = false; 626 mFlagEditDescription = false;
625 627
626 mSuspendTimer = new QTimer( this ); 628 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 629 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 630 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 631 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 632 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 633 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 634 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 635 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 636 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 637 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 638
637 639
638#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 641//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 642 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 643 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 644#endif
643 mDateNavigator->setCalendar( mCalendar ); 645 mDateNavigator->setCalendar( mCalendar );
644} 646}
645 647
646 648
647CalendarView::~CalendarView() 649CalendarView::~CalendarView()
648{ 650{
649 // kdDebug() << "~CalendarView()" << endl; 651 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 652 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 653 delete mDialogManager;
652 delete mViewManager; 654 delete mViewManager;
653 delete mStorage; 655 delete mStorage;
654 delete mDateFrame ; 656 delete mDateFrame ;
655 delete mEventViewerDialog; 657 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 658 //kdDebug() << "~CalendarView() done" << endl;
657} 659}
658 660
659 661
660void CalendarView::nextConflict( bool all, bool allday ) 662void CalendarView::nextConflict( bool all, bool allday )
661{ 663{
662 static bool block = false; 664 static bool block = false;
663 if ( block ) return; 665 if ( block ) return;
664 block = true; 666 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 667 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 668 Event * test = testlist.first();
667 while ( test ) { 669 while ( test ) {
668 test->setTagged( false ); 670 test->setTagged( false );
669 test = testlist.next(); 671 test = testlist.next();
670 } 672 }
671 QTime st ( 0,0,0); 673 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 674 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 675 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 676 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 677 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 678 QDateTime conflict;
677 QDateTime retVal; 679 QDateTime retVal;
678 bool found = false; 680 bool found = false;
679 Event * cE = 0; 681 Event * cE = 0;
680 Event * cE2 = 0; 682 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 683 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 684 test = testlist.first();
683 bool skip = false; 685 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 686 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 687 //QTime tm;
686 //tm.start(); 688 //tm.start();
687 while ( test ) { 689 while ( test ) {
688 qApp->processEvents(); 690 qApp->processEvents();
689 skip = false; 691 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 692 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 693 if ( !skip ) {
692 if ( found ) 694 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 695 skip = !test->matchTime( &startDT, &conflict );
694 else 696 else
695 skip = !test->matchTime( &startDT, 0 ); 697 skip = !test->matchTime( &startDT, 0 );
696 } 698 }
697 if ( !skip ) { 699 if ( !skip ) {
698 Event * test2 = testlist2.first(); 700 Event * test2 = testlist2.first();
699 while ( test2 ) { 701 while ( test2 ) {
700 skip = test2->isTagged(); 702 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 703 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 704 if ( !skip ) {
703 if ( found ) 705 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 706 skip = !test2->matchTime( &startDT, &conflict );
705 else 707 else
706 skip = !test2->matchTime( &startDT, 0 ); 708 skip = !test2->matchTime( &startDT, 0 );
707 } 709 }
708 if ( !skip ) { 710 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 711 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 712 //qDebug("overlap ");
711 if ( ! found ) { 713 if ( ! found ) {
712 if ( retVal >= startDT ) { 714 if ( retVal >= startDT ) {
713 conflict = retVal; 715 conflict = retVal;
714 cE = test; 716 cE = test;
715 cE2 = test2; 717 cE2 = test2;
716 found = true; 718 found = true;
717 } 719 }
718 } else { 720 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 721 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 722 conflict = retVal;
721 cE = test; 723 cE = test;
722 cE2 = test2; 724 cE2 = test2;
723 } 725 }
724 } 726 }
725 } 727 }
726 } 728 }
727 test2 = testlist2.next(); 729 test2 = testlist2.next();
728 } 730 }
729 } 731 }
730 test->setTagged( true ); 732 test->setTagged( true );
731 test = testlist.next(); 733 test = testlist.next();
732 } 734 }
733 //qDebug("Search time : %d", tm.elapsed()); 735 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 736 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 737 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 738 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 739 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 740 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 741 mViewManager->agendaView()->setStartHour( hour );
740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 742 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false; 743 block = false;
742 return; 744 return;
743 } 745 }
744 746
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 747 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 748 //qDebug("No conflict found ");
747 block = false; 749 block = false;
748 return; 750 return;
749} 751}
750 752
751void CalendarView::conflictAll() 753void CalendarView::conflictAll()
752{ 754{
753 nextConflict ( true, true ); 755 nextConflict ( true, true );
754} 756}
755void CalendarView::conflictAllday() 757void CalendarView::conflictAllday()
756{ 758{
757 nextConflict ( false, true ); 759 nextConflict ( false, true );
758} 760}
759void CalendarView::conflictNotAll() 761void CalendarView::conflictNotAll()
760{ 762{
761 nextConflict ( false, false ); 763 nextConflict ( false, false );
762} 764}
763 765
764void CalendarView::setCalReadOnly( int id, bool readO ) 766void CalendarView::setCalReadOnly( int id, bool readO )
765{ 767{
766 if ( readO ) { 768 if ( readO ) {
767 emit save(); 769 emit save();
768 } 770 }
769 mCalendar->setReadOnly( id, readO ); 771 mCalendar->setReadOnly( id, readO );
770} 772}
771void CalendarView::setScrollBarStep(int val ) 773void CalendarView::setScrollBarStep(int val )
772{ 774{
773#ifdef DESKTOP_VERSION 775#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 776 mDateScrollBar->setLineStep ( val );
775#endif 777#endif
776} 778}
777void CalendarView::scrollBarValue(int val ) 779void CalendarView::scrollBarValue(int val )
778{ 780{
779#ifdef DESKTOP_VERSION 781#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 782 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 783 static bool block = false;
782 if ( block ) return; 784 if ( block ) return;
783 block = true; 785 block = true;
784 int count = mNavigator->selectedDates().count(); 786 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 787 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 788 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 789 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 791 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 792 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 793 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 794 if ( stepdays < 0 ) stepdays = 0;
793 } 795 }
794 if ( stepdays == day ) { 796 if ( stepdays == day ) {
795 block = false; 797 block = false;
796 return; 798 return;
797 } 799 }
798 int year = mNavigator->selectedDates().first().year(); 800 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 801 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 802 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 803 block = false;
802#endif 804#endif
803 805
804} 806}
805void CalendarView::updateView(const QDate &start, const QDate &end) 807void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 808{
807#ifdef DESKTOP_VERSION 809#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 810 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 811 int dof = start.dayOfYear();
810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 812 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
811 if ( dof != mDateScrollBar->value() ) { 813 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 814 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 815 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 816 mDateScrollBar->blockSignals( false );
815 } 817 }
816 } 818 }
817#endif 819#endif
818 mTodoList->updateView(); 820 mTodoList->updateView();
819 mViewManager->updateView(start, end); 821 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 822 //mDateNavigator->updateView();
821} 823}
822 824
823 825
824 826
825void CalendarView::checkFiles() 827void CalendarView::checkFiles()
826{ 828{
827 QString message; 829 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 830 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 831 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 832 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 833 if ( cal->mErrorOnLoad ) {
832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 834 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
833 } 835 }
834 cal = calendars.next(); 836 cal = calendars.next();
835 } 837 }
836 if ( !message.isEmpty() ) { 838 if ( !message.isEmpty() ) {
837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 839 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
838 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 840 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
839 } 841 }
840 static bool firstTime = true; 842 static bool firstTime = true;
841 if ( firstTime ) { 843 if ( firstTime ) {
842 firstTime = false; 844 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 845 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 846 }
845} 847}
846void CalendarView::checkAlarms() 848void CalendarView::checkAlarms()
847{ 849{
848 KConfig *config = KOGlobals::config(); 850 KConfig *config = KOGlobals::config();
849 config->setGroup( "AppRun" ); 851 config->setGroup( "AppRun" );
850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 852 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
851 int daysto = dt.daysTo( QDate::currentDate() ); 853 int daysto = dt.daysTo( QDate::currentDate() );
852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 854 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
853 dt = dt.addDays( days ); 855 dt = dt.addDays( days );
854 int secto = dt.secsTo( QDateTime::currentDateTime() ); 856 int secto = dt.secsTo( QDateTime::currentDateTime() );
855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 857 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
856 //qDebug("KO: Reading program stop %d ", secs); 858 //qDebug("KO: Reading program stop %d ", secs);
857 //secs -= ( 3600 * 24*3 ); // debug only 859 //secs -= ( 3600 * 24*3 ); // debug only
858 QDateTime latest = dt.addSecs ( secs ); 860 QDateTime latest = dt.addSecs ( secs );
859 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 861 qDebug("KO: Last termination on %s ", latest.toString().latin1());
860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 862 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
861 QPtrList<Incidence> el = mCalendar->rawIncidences(); 863 QPtrList<Incidence> el = mCalendar->rawIncidences();
862 QPtrList<Incidence> al; 864 QPtrList<Incidence> al;
863 Incidence* inL = el.first(); 865 Incidence* inL = el.first();
864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 866 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 867 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
866 while ( inL ) { 868 while ( inL ) {
867 bool ok = false; 869 bool ok = false;
868 int offset = 0; 870 int offset = 0;
869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 871 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
870 if ( ok ) { 872 if ( ok ) {
871 //qDebug("OK %s",next.toString().latin1()); 873 //qDebug("OK %s",next.toString().latin1());
872 if ( next < cur ) { 874 if ( next < cur ) {
873 al.append( inL ); 875 al.append( inL );
874 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 876 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
875 } 877 }
876 } 878 }
877 inL = el.next(); 879 inL = el.next();
878 } 880 }
879 if ( al.count() ) { 881 if ( al.count() ) {
880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 882 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
881 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 883 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
882 QVBoxLayout* lay = new QVBoxLayout( dia ); 884 QVBoxLayout* lay = new QVBoxLayout( dia );
883 lay->setSpacing( 0 ); 885 lay->setSpacing( 0 );
884 lay->setMargin( 0 ); 886 lay->setMargin( 0 );
885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 887 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 888 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
887 lay->addWidget( matb ); 889 lay->addWidget( matb );
888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 890 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
889 int wid = 210; 891 int wid = 210;
890 int x = QApplication::desktop()->width() - wid - 7; 892 int x = QApplication::desktop()->width() - wid - 7;
891 int y = QApplication::desktop()->height() - wid - 70; 893 int y = QApplication::desktop()->height() - wid - 70;
892 dia->setGeometry ( x,y,wid,wid); 894 dia->setGeometry ( x,y,wid,wid);
893 } else { 895 } else {
894 int si = 220; 896 int si = 220;
895 if ( QApplication::desktop()->width() > 470 ) 897 if ( QApplication::desktop()->width() > 470 )
896 si = 400; 898 si = 400;
897 dia->resize(si,si/2); 899 dia->resize(si,si/2);
898 } 900 }
899 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 901 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
900 dia->show(); 902 dia->show();
901 903
902 } 904 }
903#if 0 905#if 0
904 // for creating timetracker test data 906 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 907 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt; 908 Todo * nt;
907 mCalendar->close(); 909 mCalendar->close();
908 { 910 {
909 Todo * root1 = new Todo; 911 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 ); 912 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project1"); 913 root1->setSummary( "Project1");
912 root1->setPriority( 1 ); 914 root1->setPriority( 1 );
913 root1->setCategories( QString( "Cat_Pro1") ); 915 root1->setCategories( QString( "Cat_Pro1") );
914 root1->setDescription( "This is a test description of a root Project" ); 916 root1->setDescription( "This is a test description of a root Project" );
915 root1->setPercentComplete( 20 ); 917 root1->setPercentComplete( 20 );
916 updateView(); 918 updateView();
917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 919 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 920 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
919 921
920 nt = new Todo; 922 nt = new Todo;
921 mCalendar->addTodo( nt ); 923 mCalendar->addTodo( nt );
922 nt->setSummary( "Planning Project1"); 924 nt->setSummary( "Planning Project1");
923 nt->setPriority( 1 ); 925 nt->setPriority( 1 );
924 nt->setDescription( "This is a test description of Planning Project1" ); 926 nt->setDescription( "This is a test description of Planning Project1" );
925 nt->setPercentComplete( 20 ); 927 nt->setPercentComplete( 20 );
926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 928 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
927 929
928 930
929 Todo * sub1 = nt; 931 Todo * sub1 = nt;
930 sub1->setRelatedTo( root1 ); 932 sub1->setRelatedTo( root1 );
931 933
932 nt = new Todo; 934 nt = new Todo;
933 mCalendar->addTodo( nt ); 935 mCalendar->addTodo( nt );
934 nt->setSummary( "Planning Project1: Lutz"); 936 nt->setSummary( "Planning Project1: Lutz");
935 nt->setPriority( 1 ); 937 nt->setPriority( 1 );
936 nt->setDescription( "This todo counts the actual work of a person on a project" ); 938 nt->setDescription( "This todo counts the actual work of a person on a project" );
937 nt->setPercentComplete( 20 ); 939 nt->setPercentComplete( 20 );
938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 940 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
939 Todo * workLutz11 = nt; 941 Todo * workLutz11 = nt;
940 workLutz11->setRelatedTo( sub1 ); 942 workLutz11->setRelatedTo( sub1 );
941 943
942 nt = new Todo; 944 nt = new Todo;
943 mCalendar->addTodo( nt ); 945 mCalendar->addTodo( nt );
944 nt->setSummary( "Planning Project1: Norbert"); 946 nt->setSummary( "Planning Project1: Norbert");
945 nt->setPriority( 1 ); 947 nt->setPriority( 1 );
946 nt->setDescription( "This todo counts the actual work of a person on a project" ); 948 nt->setDescription( "This todo counts the actual work of a person on a project" );
947 nt->setPercentComplete( 20 ); 949 nt->setPercentComplete( 20 );
948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 950 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
949 Todo * workNorbert11 = nt; 951 Todo * workNorbert11 = nt;
950 workNorbert11->setRelatedTo( sub1 ); 952 workNorbert11->setRelatedTo( sub1 );
951 953
952 nt = new Todo; 954 nt = new Todo;
953 mCalendar->addTodo( nt ); 955 mCalendar->addTodo( nt );
954 nt->setSummary( "Work on 1"); 956 nt->setSummary( "Work on 1");
955 nt->setPriority( 1 ); 957 nt->setPriority( 1 );
956 nt->setDescription( "This is a test description of Work Project_1" ); 958 nt->setDescription( "This is a test description of Work Project_1" );
957 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 959 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
958 nt->setPercentComplete( 20 ); 960 nt->setPercentComplete( 20 );
959 961
960 Todo * sub2 = nt; 962 Todo * sub2 = nt;
961 sub2->setRelatedTo( root1 ); 963 sub2->setRelatedTo( root1 );
962 964
963 965
964 nt = new Todo; 966 nt = new Todo;
965 mCalendar->addTodo( nt ); 967 mCalendar->addTodo( nt );
966 nt->setSummary( "Work on 1: Lutz"); 968 nt->setSummary( "Work on 1: Lutz");
967 nt->setPriority( 1 ); 969 nt->setPriority( 1 );
968 nt->setDescription( "This todo counts the actual work of a person on a project" ); 970 nt->setDescription( "This todo counts the actual work of a person on a project" );
969 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 971 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
970 nt->setPercentComplete( 20 ); 972 nt->setPercentComplete( 20 );
971 Todo * workLutz12 = nt; 973 Todo * workLutz12 = nt;
972 workLutz12->setRelatedTo( sub2 ); 974 workLutz12->setRelatedTo( sub2 );
973 975
974 nt = new Todo; 976 nt = new Todo;
975 mCalendar->addTodo( nt ); 977 mCalendar->addTodo( nt );
976 nt->setSummary( "Work on 1: Norbert"); 978 nt->setSummary( "Work on 1: Norbert");
977 nt->setPriority( 1 ); 979 nt->setPriority( 1 );
978 nt->setDescription( "This todo counts the actual work of a person on a project" ); 980 nt->setDescription( "This todo counts the actual work of a person on a project" );
979 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 981 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
980 nt->setPercentComplete( 20 ); 982 nt->setPercentComplete( 20 );
981 Todo * workNorbert12 = nt; 983 Todo * workNorbert12 = nt;
982 workNorbert12->setRelatedTo( sub2 ); 984 workNorbert12->setRelatedTo( sub2 );
983 985
984 int secLenRunning = 7200; 986 int secLenRunning = 7200;
985 int secLenPausing = 3600 * 3; 987 int secLenPausing = 3600 * 3;
986 int dayInterval = 1; 988 int dayInterval = 1;
987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 989 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 990 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
989 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 991 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 992 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 993 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 994 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
@@ -4649,512 +4651,526 @@ QPtrList<CalFilter> CalendarView::filters()
4649void CalendarView::editFilters() 4651void CalendarView::editFilters()
4650{ 4652{
4651 // kdDebug() << "CalendarView::editFilters()" << endl; 4653 // kdDebug() << "CalendarView::editFilters()" << endl;
4652 4654
4653 CalFilter *filter = mFilters.first(); 4655 CalFilter *filter = mFilters.first();
4654 while(filter) { 4656 while(filter) {
4655 filter = mFilters.next(); 4657 filter = mFilters.next();
4656 } 4658 }
4657 4659
4658 mDialogManager->showFilterEditDialog(&mFilters); 4660 mDialogManager->showFilterEditDialog(&mFilters);
4659 updateFilter(); 4661 updateFilter();
4660} 4662}
4661void CalendarView::toggleFilter() 4663void CalendarView::toggleFilter()
4662{ 4664{
4663 if ( mLeftFrame->isHidden() ) { 4665 if ( mLeftFrame->isHidden() ) {
4664 toggleExpand(); 4666 toggleExpand();
4665 showFilter( true ); 4667 showFilter( true );
4666 } else 4668 } else
4667 showFilter(! mCalEditView->isVisible()); 4669 showFilter(! mCalEditView->isVisible());
4668} 4670}
4669 4671
4670KOFilterView *CalendarView::filterView() 4672KOFilterView *CalendarView::filterView()
4671{ 4673{
4672 return mFilterView; 4674 return mFilterView;
4673} 4675}
4674void CalendarView::selectFilter( int fil ) 4676void CalendarView::selectFilter( int fil )
4675{ 4677{
4676 mFilterView->setSelectedFilter( fil ); 4678 mFilterView->setSelectedFilter( fil );
4677 updateUnmanagedViews(); 4679 updateUnmanagedViews();
4678} 4680}
4679void CalendarView::showFilter(bool visible) 4681void CalendarView::showFilter(bool visible)
4680{ 4682{
4681#if 1 4683#if 1
4682 if (visible) { 4684 if (visible) {
4683 mCalEditView->readConfig(); 4685 mCalEditView->readConfig();
4684 mCalEditView->show(); 4686 mCalEditView->show();
4685 QValueList<int> sizes; 4687 QValueList<int> sizes;
4686 sizes = mLeftFrame->sizes(); 4688 sizes = mLeftFrame->sizes();
4687 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4689 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4688 sizes.clear(); 4690 sizes.clear();
4689 sizes << 100; 4691 sizes << 100;
4690 sizes << 0; 4692 sizes << 0;
4691 sizes << 0; 4693 sizes << 0;
4692 sizes << 100; 4694 sizes << 100;
4693 mLeftFrame->setSizes(sizes); 4695 mLeftFrame->setSizes(sizes);
4694 } 4696 }
4695#if 0 4697#if 0
4696 sizes = mLeftFrame->sizes(); 4698 sizes = mLeftFrame->sizes();
4697 int ccc = 0; 4699 int ccc = 0;
4698 while ( ccc < sizes.count()) { 4700 while ( ccc < sizes.count()) {
4699 qDebug("size %d %d ", ccc, sizes[ccc]); 4701 qDebug("size %d %d ", ccc, sizes[ccc]);
4700 ++ccc; 4702 ++ccc;
4701 } 4703 }
4702#endif 4704#endif
4703 4705
4704 } 4706 }
4705 else { 4707 else {
4706 mCalEditView->hide(); 4708 mCalEditView->hide();
4707 } 4709 }
4708#else 4710#else
4709 if (visible) mFilterView->show(); 4711 if (visible) mFilterView->show();
4710 else mFilterView->hide(); 4712 else mFilterView->hide();
4711#endif 4713#endif
4712} 4714}
4713void CalendarView::toggleFilerEnabled( ) 4715void CalendarView::toggleFilerEnabled( )
4714{ 4716{
4715 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4717 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4716 if ( !mFilterView->filtersEnabled() ) 4718 if ( !mFilterView->filtersEnabled() )
4717 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4719 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4718 updateUnmanagedViews(); 4720 updateUnmanagedViews();
4719 4721
4720} 4722}
4721void CalendarView::updateFilter() 4723void CalendarView::updateFilter()
4722{ 4724{
4723 CalFilter *filter = mFilterView->selectedFilter(); 4725 CalFilter *filter = mFilterView->selectedFilter();
4724 if (filter) { 4726 if (filter) {
4725 QString mess; 4727 QString mess;
4726 if (mFilterView->filtersEnabled()) { 4728 if (mFilterView->filtersEnabled()) {
4727 mess = i18n("Filter selected: ")+filter->name(); 4729 mess = i18n("Filter selected: ")+filter->name();
4728 filter->setEnabled(true); 4730 filter->setEnabled(true);
4729 } 4731 }
4730 else filter->setEnabled(false); 4732 else filter->setEnabled(false);
4731 mCalendar->setFilter(filter); 4733 mCalendar->setFilter(filter);
4732 updateView(); 4734 updateView();
4733 if ( !mess.isEmpty() ) 4735 if ( !mess.isEmpty() )
4734 topLevelWidget()->setCaption( mess ); 4736 topLevelWidget()->setCaption( mess );
4735 4737
4736 } 4738 }
4737 emit filtersUpdated(); 4739 emit filtersUpdated();
4738} 4740}
4739 4741
4740void CalendarView::filterEdited() 4742void CalendarView::filterEdited()
4741{ 4743{
4742 mFilterView->updateFilters(); 4744 mFilterView->updateFilters();
4743 updateFilter(); 4745 updateFilter();
4744 writeSettings(); 4746 writeSettings();
4745} 4747}
4746 4748
4747 4749
4748void CalendarView::takeOverEvent() 4750void CalendarView::takeOverEvent()
4749{ 4751{
4750 Incidence *incidence = currentSelection(); 4752 Incidence *incidence = currentSelection();
4751 4753
4752 if (!incidence) return; 4754 if (!incidence) return;
4753 4755
4754 incidence->setOrganizer(KOPrefs::instance()->email()); 4756 incidence->setOrganizer(KOPrefs::instance()->email());
4755 incidence->recreate(); 4757 incidence->recreate();
4756 incidence->setReadOnly(false); 4758 incidence->setReadOnly(false);
4757 4759
4758 updateView(); 4760 updateView();
4759} 4761}
4760 4762
4761void CalendarView::takeOverCalendar() 4763void CalendarView::takeOverCalendar()
4762{ 4764{
4763 // TODO: Create Calendar::allIncidences() function and use it here 4765 // TODO: Create Calendar::allIncidences() function and use it here
4764 4766
4765 clearAllViews(); 4767 clearAllViews();
4766 QPtrList<Event> events = mCalendar->events(); 4768 QPtrList<Event> events = mCalendar->events();
4767 for(uint i=0; i<events.count(); ++i) { 4769 for(uint i=0; i<events.count(); ++i) {
4768 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4770 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4769 events.at(i)->recreate(); 4771 events.at(i)->recreate();
4770 events.at(i)->setReadOnly(false); 4772 events.at(i)->setReadOnly(false);
4771 } 4773 }
4772 4774
4773 QPtrList<Todo> todos = mCalendar->todos(); 4775 QPtrList<Todo> todos = mCalendar->todos();
4774 for(uint i=0; i<todos.count(); ++i) { 4776 for(uint i=0; i<todos.count(); ++i) {
4775 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4777 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4776 todos.at(i)->recreate(); 4778 todos.at(i)->recreate();
4777 todos.at(i)->setReadOnly(false); 4779 todos.at(i)->setReadOnly(false);
4778 } 4780 }
4779 4781
4780 QPtrList<Journal> journals = mCalendar->journals(); 4782 QPtrList<Journal> journals = mCalendar->journals();
4781 for(uint i=0; i<journals.count(); ++i) { 4783 for(uint i=0; i<journals.count(); ++i) {
4782 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4784 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4783 journals.at(i)->recreate(); 4785 journals.at(i)->recreate();
4784 journals.at(i)->setReadOnly(false); 4786 journals.at(i)->setReadOnly(false);
4785 } 4787 }
4786 4788
4787 updateView(); 4789 updateView();
4788} 4790}
4789 4791
4790void CalendarView::showIntro() 4792void CalendarView::showIntro()
4791{ 4793{
4792 kdDebug() << "To be implemented." << endl; 4794 kdDebug() << "To be implemented." << endl;
4793} 4795}
4794 4796
4795QWidgetStack *CalendarView::viewStack() 4797QWidgetStack *CalendarView::viewStack()
4796{ 4798{
4797 return mRightFrame; 4799 return mRightFrame;
4798} 4800}
4799 4801
4800QWidget *CalendarView::leftFrame() 4802QWidget *CalendarView::leftFrame()
4801{ 4803{
4802 return ( QWidget *)mLeftFrame; 4804 return ( QWidget *)mLeftFrame;
4803} 4805}
4804 4806
4805DateNavigator *CalendarView::dateNavigator() 4807DateNavigator *CalendarView::dateNavigator()
4806{ 4808{
4807 return mNavigator; 4809 return mNavigator;
4808} 4810}
4809 4811
4810KDateNavigator* CalendarView::dateNavigatorWidget() 4812KDateNavigator* CalendarView::dateNavigatorWidget()
4811{ 4813{
4812 return mDateNavigator->navigatorView(); 4814 return mDateNavigator->navigatorView();
4813} 4815}
4814void CalendarView::toggleDateNavigatorWidget() 4816void CalendarView::toggleDateNavigatorWidget()
4815{ 4817{
4816 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4818 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4817 4819
4818 if (!KOPrefs::instance()->mShowDateNavigator ) 4820 if (!KOPrefs::instance()->mShowDateNavigator )
4819 mDateNavigator->hide(); 4821 mDateNavigator->hide();
4820 else 4822 else
4821 mDateNavigator->show(); 4823 mDateNavigator->show();
4822} 4824}
4823void CalendarView::addView(KOrg::BaseView *view) 4825void CalendarView::addView(KOrg::BaseView *view)
4824{ 4826{
4825 mViewManager->addView(view); 4827 mViewManager->addView(view);
4826} 4828}
4827 4829
4828void CalendarView::showView(KOrg::BaseView *view) 4830void CalendarView::showView(KOrg::BaseView *view)
4829{ 4831{
4830 mViewManager->showView(view, mLeftFrame->isVisible()); 4832 mViewManager->showView(view, mLeftFrame->isVisible());
4831} 4833}
4832 4834
4833Incidence *CalendarView::currentSelection() 4835Incidence *CalendarView::currentSelection()
4834{ 4836{
4835 return mViewManager->currentSelection(); 4837 return mViewManager->currentSelection();
4836} 4838}
4837void CalendarView::toggleAllDaySize() 4839void CalendarView::toggleAllDaySize()
4838{ 4840{
4839 /* 4841 /*
4840 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4842 if ( KOPrefs::instance()->mAllDaySize > 47 )
4841 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4842 else 4844 else
4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4845 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4844 */ 4846 */
4845 viewManager()->agendaView()->toggleAllDay(); 4847 viewManager()->agendaView()->toggleAllDay();
4846} 4848}
4847void CalendarView::toggleExpand() 4849void CalendarView::toggleExpand()
4848{ 4850{
4849 // if ( mLeftFrame->isHidden() ) { 4851 // if ( mLeftFrame->isHidden() ) {
4850 // mLeftFrame->show(); 4852 // mLeftFrame->show();
4851 // emit calendarViewExpanded( false ); 4853 // emit calendarViewExpanded( false );
4852 // } else { 4854 // } else {
4853 // mLeftFrame->hide(); 4855 // mLeftFrame->hide();
4854 // emit calendarViewExpanded( true ); 4856 // emit calendarViewExpanded( true );
4855 // } 4857 // }
4856 //qDebug(" CalendarView::toggleExpand()"); 4858 //qDebug(" CalendarView::toggleExpand()");
4857 globalFlagBlockAgenda = 1; 4859 globalFlagBlockAgenda = 1;
4858 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4860 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4859 globalFlagBlockAgenda = 5; 4861 globalFlagBlockAgenda = 5;
4860 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4862 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4861 //mViewManager->showView( 0, true ); 4863 //mViewManager->showView( 0, true );
4862} 4864}
4863 4865
4864void CalendarView::calendarModified( bool modified, Calendar * ) 4866void CalendarView::calendarModified( bool modified, Calendar * )
4865{ 4867{
4866 setModified( modified ); 4868 setModified( modified );
4867} 4869}
4868 4870
4869Todo *CalendarView::selectedTodo() 4871Todo *CalendarView::selectedTodo()
4870{ 4872{
4871 Incidence *incidence = currentSelection(); 4873 Incidence *incidence = currentSelection();
4872 if ( incidence && incidence->typeID() == todoID ) { 4874 if ( incidence && incidence->typeID() == todoID ) {
4873 return static_cast<Todo *>( incidence ); 4875 return static_cast<Todo *>( incidence );
4874 } 4876 }
4875 4877
4876 incidence = mTodoList->selectedIncidences().first(); 4878 incidence = mTodoList->selectedIncidences().first();
4877 if ( incidence && incidence->typeID() == todoID ) { 4879 if ( incidence && incidence->typeID() == todoID ) {
4878 return static_cast<Todo *>( incidence ); 4880 return static_cast<Todo *>( incidence );
4879 } 4881 }
4880 4882
4881 return 0; 4883 return 0;
4882} 4884}
4883 4885
4884void CalendarView::showIncidence() 4886void CalendarView::showIncidence()
4885{ 4887{
4886 mViewerCallerIsSearchDialog = false; 4888 mViewerCallerIsSearchDialog = false;
4887 Incidence *incidence = currentSelection(); 4889 Incidence *incidence = currentSelection();
4888 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4890 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4889 if ( incidence ) { 4891 if ( incidence ) {
4890 ShowIncidenceVisitor v; 4892 ShowIncidenceVisitor v;
4891 v.act( incidence, this ); 4893 v.act( incidence, this );
4892 } 4894 }
4893} 4895}
4894void CalendarView::editIncidenceDescription() 4896void CalendarView::editIncidenceDescription()
4895{ 4897{
4896 mFlagEditDescription = true; 4898 mFlagEditDescription = true;
4897 editIncidence(); 4899 editIncidence();
4898 mFlagEditDescription = false; 4900 mFlagEditDescription = false;
4899} 4901}
4900void CalendarView::editIncidence() 4902void CalendarView::editIncidence()
4901{ 4903{
4902 // qDebug("editIncidence() "); 4904 // qDebug("editIncidence() ");
4903 Incidence *incidence = currentSelection(); 4905 Incidence *incidence = currentSelection();
4904 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4906 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4905 if ( incidence ) { 4907 if ( incidence ) {
4906 EditIncidenceVisitor v; 4908 EditIncidenceVisitor v;
4907 v.act( incidence, this ); 4909 v.act( incidence, this );
4908 } 4910 }
4909} 4911}
4910 4912
4911void CalendarView::deleteIncidence() 4913void CalendarView::deleteIncidence()
4912{ 4914{
4913 Incidence *incidence = currentSelection(); 4915 Incidence *incidence = currentSelection();
4914 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4916 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4915 if ( incidence ) { 4917 if ( incidence ) {
4916 deleteIncidence(incidence); 4918 deleteIncidence(incidence);
4917 } 4919 }
4918} 4920}
4919void CalendarView::showIncidence(QString uid) 4921void CalendarView::showIncidence(QString uid)
4920{ 4922{
4921 Incidence *inc = mCalendar->incidence( uid ); 4923 Incidence *inc = mCalendar->incidence( uid );
4922 if ( inc ) 4924 if ( inc )
4923 showIncidence( inc ); 4925 showIncidence( inc );
4924} 4926}
4925void CalendarView::showIncidence(Incidence *incidence) 4927void CalendarView::showIncidence(Incidence *incidence)
4926{ 4928{
4927 mViewerCallerIsSearchDialog = false; 4929 mViewerCallerIsSearchDialog = false;
4928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4930 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4929 if ( sender() && mDialogManager->getSearchDialog() ) { 4931 if ( sender() && mDialogManager->getSearchDialog() ) {
4930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4932 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4931 mViewerCallerIsSearchDialog = true; 4933 mViewerCallerIsSearchDialog = true;
4932 } 4934 }
4933 } 4935 }
4934 if ( incidence ) { 4936 if ( incidence ) {
4935 ShowIncidenceVisitor v; 4937 ShowIncidenceVisitor v;
4936 v.act( incidence, this ); 4938 v.act( incidence, this );
4937 } 4939 }
4938} 4940}
4939 4941
4940void CalendarView::editIncidence(Incidence *incidence) 4942void CalendarView::editIncidence(Incidence *incidence)
4941{ 4943{
4942 if ( incidence ) { 4944 if ( incidence ) {
4943 4945
4944 EditIncidenceVisitor v; 4946 EditIncidenceVisitor v;
4945 v.act( incidence, this ); 4947 v.act( incidence, this );
4946 4948
4947 } 4949 }
4948} 4950}
4949 4951
4950void CalendarView::deleteIncidence(Incidence *incidence) 4952void CalendarView::deleteIncidence(Incidence *incidence)
4951{ 4953{
4952 //qDebug(" CalendarView::deleteIncidence "); 4954 //qDebug(" CalendarView::deleteIncidence ");
4953 if ( incidence == 0 ) { 4955 if ( incidence == 0 ) {
4954 updateView(); 4956 updateView();
4955 emit updateSearchDialog(); 4957 emit updateSearchDialog();
4956 return; 4958 return;
4957 } 4959 }
4958 if ( incidence ) { 4960 if ( incidence ) {
4959 DeleteIncidenceVisitor v; 4961 DeleteIncidenceVisitor v;
4960 v.act( incidence, this ); 4962 v.act( incidence, this );
4961 } 4963 }
4962} 4964}
4963 4965
4964 4966
4965void CalendarView::lookForOutgoingMessages() 4967void CalendarView::lookForOutgoingMessages()
4966{ 4968{
4967 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4969 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4968 ogd->loadMessages(); 4970 ogd->loadMessages();
4969} 4971}
4970 4972
4971void CalendarView::lookForIncomingMessages() 4973void CalendarView::lookForIncomingMessages()
4972{ 4974{
4973 IncomingDialog *icd = mDialogManager->incomingDialog(); 4975 IncomingDialog *icd = mDialogManager->incomingDialog();
4974 icd->retrieve(); 4976 icd->retrieve();
4975} 4977}
4976 4978
4977bool CalendarView::removeCompletedSubTodos( Todo* t ) 4979bool CalendarView::removeCompletedSubTodos( Todo* t )
4978{ 4980{
4979 bool deleteTodo = true; 4981 bool deleteTodo = true;
4980 QPtrList<Incidence> subTodos; 4982 QPtrList<Incidence> subTodos;
4981 Incidence *aTodo; 4983 Incidence *aTodo;
4982 subTodos = t->relations(); 4984 subTodos = t->relations();
4983 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4985 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4984 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4986 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4985 deleteTodo = false; 4987 deleteTodo = false;
4986 } 4988 }
4987 if ( deleteTodo ) { 4989 if ( deleteTodo ) {
4988 if ( t->isCompleted() && !t->doesRecur()) { 4990 if ( t->isCompleted() && !t->doesRecur()) {
4989 checkExternalId( t ); 4991 checkExternalId( t );
4990 mCalendar->deleteTodo( t ); 4992 mCalendar->deleteTodo( t );
4991 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4993 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4992 } 4994 }
4993 else 4995 else
4994 deleteTodo = false; 4996 deleteTodo = false;
4995 } 4997 }
4996 return deleteTodo; 4998 return deleteTodo;
4997 4999
4998} 5000}
4999void CalendarView::purgeCompleted() 5001void CalendarView::purgeCompleted()
5000{ 5002{
5001 int result = KMessageBox::warningContinueCancel(this, 5003 int result = KMessageBox::warningContinueCancel(this,
5002 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5004 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5003 5005
5004 if (result == KMessageBox::Continue) { 5006 if (result == KMessageBox::Continue) {
5005 5007
5006 QPtrList<Todo> todoCal; 5008 QPtrList<Todo> todoCal;
5007 QPtrList<Todo> rootTodos; 5009 QPtrList<Todo> rootTodos;
5008 //QPtrList<Incidence> rel; 5010 //QPtrList<Incidence> rel;
5009 Todo *aTodo; 5011 Todo *aTodo;
5010 todoCal = calendar()->todos(); 5012 todoCal = calendar()->todos();
5011 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5013 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5012 if ( !aTodo->relatedTo() ) 5014 if ( !aTodo->relatedTo() )
5013 rootTodos.append( aTodo ); 5015 rootTodos.append( aTodo );
5014 } 5016 }
5015 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5017 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5016 removeCompletedSubTodos( aTodo ); 5018 removeCompletedSubTodos( aTodo );
5017 } 5019 }
5018 5020
5019 updateView(); 5021 updateView();
5020 } 5022 }
5021} 5023}
5022 5024
5023void CalendarView::slotCalendarChanged() 5025void CalendarView::slotCalendarChanged()
5024{ 5026{
5025 ; 5027 ;
5026} 5028}
5027 5029
5028void CalendarView::keyPressEvent ( QKeyEvent *e) 5030void CalendarView::keyPressEvent ( QKeyEvent *e)
5029{ 5031{
5030 //qDebug("CalendarView::keyPressEvent "); 5032 //qDebug("CalendarView::keyPressEvent ");
5031 e->ignore(); 5033 e->ignore();
5032} 5034}
5033 5035
5034 5036
5035bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 5037bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
5036{ 5038{
5037 5039
5038 if ( manager != mSyncManager) 5040 if ( manager != mSyncManager)
5039 qDebug("KO: Internal error-1. SyncManager mismatch "); 5041 qDebug("KO: Internal error-1. SyncManager mismatch ");
5040 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5042 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5041 qDebug("KO: SyncKDE request detected!"); 5043 qDebug("KO: SyncKDE request detected!");
5042 } 5044 }
5043 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5045 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5044 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5046 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5045 return syncCalendar( filename, mode ); 5047 return syncCalendar( filename, mode );
5046} 5048}
5047bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5049bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5048{ 5050{
5049 //mSyncManager = manager; 5051 //mSyncManager = manager;
5050 if ( manager != mSyncManager) 5052 if ( manager != mSyncManager)
5051 qDebug("KO: Internal error-2. SyncManager mismatch "); 5053 qDebug("KO: Internal error-2. SyncManager mismatch ");
5052 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5054 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5053 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5055 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5054 if ( resource == "sharp" ) 5056 if ( resource == "sharp" )
5055 syncExternal( 0 ); 5057 syncExternal( 0 );
5056 if ( resource == "phone" ) 5058 if ( resource == "phone" )
5057 syncExternal( 1 ); 5059 syncExternal( 1 );
5058 // pending setmodified 5060 // pending setmodified
5059 return true; 5061 return true;
5060} 5062}
5061void CalendarView::setSyncManager(KSyncManager* manager) 5063void CalendarView::setSyncManager(KSyncManager* manager)
5062{ 5064{
5063 mSyncManager = manager; 5065 mSyncManager = manager;
5064} 5066}
5065 5067
5066void CalendarView::removeSyncInfo( QString syncProfile) 5068void CalendarView::removeSyncInfo( QString syncProfile)
5067{ 5069{
5068 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5070 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5069 mCalendar->removeSyncInfo( syncProfile ); 5071 mCalendar->removeSyncInfo( syncProfile );
5070 5072
5071} 5073}
5072 5074
5073void CalendarView::undo_delete() 5075void CalendarView::undo_delete()
5074{ 5076{
5075 //qDebug("undo_delete() "); 5077 //qDebug("undo_delete() ");
5076 Incidence* undo = mCalendar->undoIncidence(); 5078 Incidence* undo = mCalendar->undoIncidence();
5077 if ( !undo ) { 5079 if ( !undo ) {
5078 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5080 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5079 i18n("KO/Pi")); 5081 i18n("KO/Pi"));
5080 return; 5082 return;
5081 } 5083 }
5082 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5084 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5083 i18n("\nAre you sure you want\nto restore this?"), 5085 i18n("\nAre you sure you want\nto restore this?"),
5084 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5086 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5085 mCalendar->undoDeleteIncidence(); 5087 mCalendar->undoDeleteIncidence();
5086 updateView(); 5088 updateView();
5087 } 5089 }
5088} 5090}
5089 5091
5090void CalendarView::slotViewerClosed() 5092void CalendarView::slotViewerClosed()
5091{ 5093{
5092 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5094 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5093} 5095}
5094 5096
5095void CalendarView::resetFocus() 5097void CalendarView::resetFocus()
5096{ 5098{
5097 if ( mViewerCallerIsSearchDialog ) { 5099 if ( mViewerCallerIsSearchDialog ) {
5098 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5100 if ( mDialogManager->getSearchDialog()->isVisible() ){
5099 mDialogManager->getSearchDialog()->raise(); 5101 mDialogManager->getSearchDialog()->raise();
5100 mDialogManager->getSearchDialog()->setActiveWindow(); 5102 mDialogManager->getSearchDialog()->setActiveWindow();
5101 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5103 mDialogManager->getSearchDialog()->listview()->resetFocus();
5102 } else 5104 } else
5103 mViewerCallerIsSearchDialog = false; 5105 mViewerCallerIsSearchDialog = false;
5104 } 5106 }
5105 if ( !mViewerCallerIsSearchDialog ) { 5107 if ( !mViewerCallerIsSearchDialog ) {
5106 //mViewManager->currentView()->setFocus(); 5108 //mViewManager->currentView()->setFocus();
5107 //qDebug("sssssssssssssssset focus "); 5109 //qDebug("sssssssssssssssset focus ");
5108 topLevelWidget()->raise(); 5110 topLevelWidget()->raise();
5109 setActiveWindow(); 5111 setActiveWindow();
5110 //setFocus(); 5112 //setFocus();
5111 } 5113 }
5112 mViewerCallerIsSearchDialog = false; 5114 mViewerCallerIsSearchDialog = false;
5113} 5115}
5114 5116
5115void CalendarView::showNextAlarms() 5117void CalendarView::showNextAlarms()
5116{ 5118{
5117 QString message; 5119 QString message;
5118 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5120 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5119 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5121 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5120 QString sum = mCalendar->nextSummary(); 5122 QString sum = mCalendar->nextSummary();
5121 QDateTime nextA = mNextAlarmDateTime; 5123 QDateTime nextA = mNextAlarmDateTime;
5122 QDateTime cur = QDateTime::currentDateTime(); 5124 QDateTime cur = QDateTime::currentDateTime();
5123 int secs = cur.secsTo( nextA ); 5125 int secs = cur.secsTo( nextA );
5124 int min = secs /60; 5126 int min = secs /60;
5125 int hours = min /60; 5127 int hours = min /60;
5126 min = min % 60; 5128 min = min % 60;
5127 int days = hours /24; 5129 int days = hours /24;
5128 hours = hours % 24; 5130 hours = hours % 24;
5129 5131
5130 //message = i18n("The next alarm is in:\n"); 5132 //message = i18n("The next alarm is in:\n");
5131 if ( days > 1 ) 5133 if ( days > 1 )
5132 message += i18n("%1 days\n").arg( days ); 5134 message += i18n("%1 days\n").arg( days );
5133 else if ( days == 1 ) 5135 else if ( days == 1 )
5134 message += i18n("1 day\n"); 5136 message += i18n("1 day\n");
5135 if ( hours > 1 ) 5137 if ( hours > 1 )
5136 message += i18n("%1 hours\n").arg( hours ); 5138 message += i18n("%1 hours\n").arg( hours );
5137 else if ( hours == 1 ) 5139 else if ( hours == 1 )
5138 message += i18n("1 hour\n"); 5140 message += i18n("1 hour\n");
5139 if ( min > 1 ) 5141 if ( min > 1 )
5140 message += i18n("%1 minutes\n").arg( min ); 5142 message += i18n("%1 minutes\n").arg( min );
5141 else if ( min == 1 ) 5143 else if ( min == 1 )
5142 message += i18n("1 minute\n"); 5144 message += i18n("1 minute\n");
5143 if ( message.isEmpty() ) 5145 if ( message.isEmpty() )
5144 message = i18n("The next alarm is in\nless than one minute!"); 5146 message = i18n("The next alarm is in\nless than one minute!");
5145 else 5147 else
5146 message = i18n("The next alarm is in:\n") + message; 5148 message = i18n("The next alarm is in:\n") + message;
5147 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5149 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5148 } else { 5150 } else {
5149 message = i18n("There is no next alarm."); 5151 message = i18n("There is no next alarm.");
5150 5152
5151 } 5153 }
5152#ifdef DESKTOP_VERSION 5154#ifdef DESKTOP_VERSION
5153 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5155 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5154 message += i18n("\nThe internal alarm notification is disabled!\n"); 5156 message += i18n("\nThe internal alarm notification is disabled!\n");
5155 message += i18n("Enable it in the settings menu, TAB alarm."); 5157 message += i18n("Enable it in the settings menu, TAB alarm.");
5156 } 5158 }
5157 5159
5158#endif 5160#endif
5159 KMessageBox::information( this, message); 5161 KMessageBox::information( this, message);
5160} 5162}
5163
5164void CalendarView::displayCalendarInfo( int id )
5165{
5166 int e, t,j;
5167 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
5168 QString name = kkf->mName;
5169 mCalendar->getIncidenceCount( id, e, t, j );
5170 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
5171 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file);
5172 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j );
5173 KMessageBox::information( this, mess );
5174
5175
5176}
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 8670832..0924f07 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,669 +1,670 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 142
143 signals: 143 signals:
144 void save (); 144 void save ();
145 void saveStopTimer (); 145 void saveStopTimer ();
146 void tempDisableBR(bool); 146 void tempDisableBR(bool);
147 /** This todo has been modified */ 147 /** This todo has been modified */
148 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
149 149
150 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 152 * for notification to update their settings. */
153 void configChanged(); 153 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 155 child windows can also close. */
156 void closingDown(); 156 void closingDown();
157 /** emitted right before we die */ 157 /** emitted right before we die */
158 void closed(QWidget *); 158 void closed(QWidget *);
159 159
160 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 161 void modifiedChanged(bool);
162 void signalmodified(); 162 void signalmodified();
163 163
164 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
166 166
167 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
170 170
171 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
175 /** 175 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
178 */ 178 */
179 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 181 void todoSelected( bool );
182 182
183 /** 183 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 185 is possible or not.
186 */ 186 */
187 void pasteEnabled(bool); 187 void pasteEnabled(bool);
188 188
189 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 190 void numIncomingChanged(int);
191 191
192 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
194 194
195 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 196 void statusMessage(const QString &);
197 197
198 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 199 void updateSearchDialog();
200 void filtersUpdated(); 200 void filtersUpdated();
201 201
202 202
203 public slots: 203 public slots:
204 void displayCalendarInfo( int id );
204 void nextConflict( bool all, bool allday ); 205 void nextConflict( bool all, bool allday );
205 void conflictAll(); 206 void conflictAll();
206 void conflictAllday(); 207 void conflictAllday();
207 void conflictNotAll(); 208 void conflictNotAll();
208 void setCalReadOnly( int id, bool readO ); 209 void setCalReadOnly( int id, bool readO );
209 void checkAlarms(); 210 void checkAlarms();
210 void checkFiles(); 211 void checkFiles();
211 void slotprintSelInc(); 212 void slotprintSelInc();
212 void showNextAlarms(); 213 void showNextAlarms();
213 void showOpenError(); 214 void showOpenError();
214 void watchSavedFile(); 215 void watchSavedFile();
215 void recheckTimerAlarm(); 216 void recheckTimerAlarm();
216 void checkNextTimerAlarm(); 217 void checkNextTimerAlarm();
217 void addAlarm(const QDateTime &qdt, const QString &noti ); 218 void addAlarm(const QDateTime &qdt, const QString &noti );
218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 219 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
219 void removeAlarm(const QDateTime &qdt, const QString &noti ); 220 void removeAlarm(const QDateTime &qdt, const QString &noti );
220 221
221 /** options dialog made a changed to the configuration. we catch this 222 /** options dialog made a changed to the configuration. we catch this
222 * and notify all widgets which need to update their configuration. */ 223 * and notify all widgets which need to update their configuration. */
223 void updateConfig(); 224 void updateConfig();
224 225
225 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 226 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
226 const QStringList& anniversaryList, const QStringList& realNameList, 227 const QStringList& anniversaryList, const QStringList& realNameList,
227 const QStringList& emailList, const QStringList& assembledNameList, 228 const QStringList& emailList, const QStringList& assembledNameList,
228 const QStringList& uidList); 229 const QStringList& uidList);
229 230
230 /** 231 /**
231 Load calendar from file \a filename. If \a merge is true, load 232 Load calendar from file \a filename. If \a merge is true, load
232 calendar into existing one, if it is false, clear calendar, before 233 calendar into existing one, if it is false, clear calendar, before
233 loading. Return true, if calendar could be successfully loaded. 234 loading. Return true, if calendar could be successfully loaded.
234 */ 235 */
235 bool openCalendar(QString filename, bool merge=false); 236 bool openCalendar(QString filename, bool merge=false);
236 bool loadCalendars(); 237 bool loadCalendars();
237 bool saveCalendars(); 238 bool saveCalendars();
238 bool restoreCalendarSettings(); 239 bool restoreCalendarSettings();
239 bool addCalendar( KopiCalendarFile * ); 240 bool addCalendar( KopiCalendarFile * );
240 void addCalendarId( int id ); 241 void addCalendarId( int id );
241 bool syncCalendar(QString filename,int mode = 0 ); 242 bool syncCalendar(QString filename,int mode = 0 );
242 243
243 /** 244 /**
244 Save calendar data to file. Return true if calendar could be 245 Save calendar data to file. Return true if calendar could be
245 successfully saved. 246 successfully saved.
246 */ 247 */
247 bool saveCalendar(QString filename); 248 bool saveCalendar(QString filename);
248 249
249 /** 250 /**
250 Close calendar. Clear calendar data and reset views to display an empty 251 Close calendar. Clear calendar data and reset views to display an empty
251 calendar. 252 calendar.
252 */ 253 */
253 void closeCalendar(); 254 void closeCalendar();
254 255
255 /** Archive old events of calendar */ 256 /** Archive old events of calendar */
256 void archiveCalendar(); 257 void archiveCalendar();
257 258
258 void showIncidence(); 259 void showIncidence();
259 void editIncidence(); 260 void editIncidence();
260 void editIncidenceDescription(); 261 void editIncidenceDescription();
261 void deleteIncidence(); 262 void deleteIncidence();
262 void cloneIncidence(); 263 void cloneIncidence();
263 void moveIncidence(); 264 void moveIncidence();
264 void beamIncidence(); 265 void beamIncidence();
265 void toggleCancelIncidence(); 266 void toggleCancelIncidence();
266 267
267 /** create an editeventwin with supplied date/time, and if bool is true, 268 /** create an editeventwin with supplied date/time, and if bool is true,
268 * make the event take all day. */ 269 * make the event take all day. */
269 void newEvent(QDateTime, QDateTime, bool allDay ); 270 void newEvent(QDateTime, QDateTime, bool allDay );
270 void newEvent(QDateTime, QDateTime); 271 void newEvent(QDateTime, QDateTime);
271 void newEvent(QDateTime fh); 272 void newEvent(QDateTime fh);
272 void newEvent(QDate dt); 273 void newEvent(QDate dt);
273 /** create new event without having a date hint. Takes current date as 274 /** create new event without having a date hint. Takes current date as
274 default hint. */ 275 default hint. */
275 void newEvent(); 276 void newEvent();
276 void newFloatingEvent(); 277 void newFloatingEvent();
277 278
278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 279 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
279 void showIncidence(Incidence *); 280 void showIncidence(Incidence *);
280 void showIncidence(QString uid); 281 void showIncidence(QString uid);
281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 282 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
282 void editIncidence(Incidence *); 283 void editIncidence(Incidence *);
283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 284 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
284 void deleteIncidence(Incidence *); 285 void deleteIncidence(Incidence *);
285 void cloneIncidence(Incidence *); 286 void cloneIncidence(Incidence *);
286 void cancelIncidence(Incidence *); 287 void cancelIncidence(Incidence *);
287 /** Create an editor for the supplied event. */ 288 /** Create an editor for the supplied event. */
288 void editEvent(Event *); 289 void editEvent(Event *);
289 /** Delete the supplied event. */ 290 /** Delete the supplied event. */
290 void deleteEvent(Event *); 291 void deleteEvent(Event *);
291 /** Delete the event with the given unique ID. Returns false, if event wasn't 292 /** Delete the event with the given unique ID. Returns false, if event wasn't
292 found. */ 293 found. */
293 bool deleteEvent(const QString &uid); 294 bool deleteEvent(const QString &uid);
294 /** Create a read-only viewer dialog for the supplied event. */ 295 /** Create a read-only viewer dialog for the supplied event. */
295 void showEvent(Event *); 296 void showEvent(Event *);
296 297
297 void editJournal(Journal *); 298 void editJournal(Journal *);
298 void showJournal(Journal *); 299 void showJournal(Journal *);
299 void deleteJournal(Journal *); 300 void deleteJournal(Journal *);
300 /** Create an editor dialog for a todo */ 301 /** Create an editor dialog for a todo */
301 void editTodo(Todo *); 302 void editTodo(Todo *);
302 /** Create a read-only viewer dialog for the supplied todo */ 303 /** Create a read-only viewer dialog for the supplied todo */
303 void showTodo(Todo *); 304 void showTodo(Todo *);
304 /** create new todo */ 305 /** create new todo */
305 void newTodo(); 306 void newTodo();
306 void newTodoDateTime(QDateTime, bool allday); 307 void newTodoDateTime(QDateTime, bool allday);
307 /** create new todo with a parent todo */ 308 /** create new todo with a parent todo */
308 void newSubTodo(); 309 void newSubTodo();
309 /** create new todo with a parent todo */ 310 /** create new todo with a parent todo */
310 void newSubTodo(Todo *); 311 void newSubTodo(Todo *);
311 /** Delete todo */ 312 /** Delete todo */
312 void deleteTodo(Todo *); 313 void deleteTodo(Todo *);
313 314
314 315
315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 316 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
316 * emitted as result. */ 317 * emitted as result. */
317 void checkClipboard(); 318 void checkClipboard();
318 319
319 /** using the KConfig associated with the kapp variable, read in the 320 /** using the KConfig associated with the kapp variable, read in the
320 * settings from the config file. 321 * settings from the config file.
321 */ 322 */
322 void readSettings(); 323 void readSettings();
323 324
324 /** write current state to config file. */ 325 /** write current state to config file. */
325 void writeSettings(); 326 void writeSettings();
326 327
327 /** read settings for calendar filters */ 328 /** read settings for calendar filters */
328 void readFilterSettings(KConfig *config); 329 void readFilterSettings(KConfig *config);
329 330
330 /** write settings for calendar filters */ 331 /** write settings for calendar filters */
331 void writeFilterSettings(KConfig *config); 332 void writeFilterSettings(KConfig *config);
332 333
333 /** passes on the message that an event has changed to the currently 334 /** passes on the message that an event has changed to the currently
334 * activated view so that it can make appropriate display changes. */ 335 * activated view so that it can make appropriate display changes. */
335 void changeEventDisplay(Event *, int); 336 void changeEventDisplay(Event *, int);
336 void changeIncidenceDisplay(Incidence *, int); 337 void changeIncidenceDisplay(Incidence *, int);
337 void changeTodoDisplay(Todo *, int); 338 void changeTodoDisplay(Todo *, int);
338 339
339 void eventAdded(Event *); 340 void eventAdded(Event *);
340 void eventChanged(Event *); 341 void eventChanged(Event *);
341 void eventToBeDeleted(Event *); 342 void eventToBeDeleted(Event *);
342 void eventDeleted(); 343 void eventDeleted();
343 344
344 void todoAdded(Todo *); 345 void todoAdded(Todo *);
345 void todoChanged(Todo *); 346 void todoChanged(Todo *);
346 void todoToBeDeleted(Todo *); 347 void todoToBeDeleted(Todo *);
347 void todoDeleted(); 348 void todoDeleted();
348 349
349 void updateView(const QDate &start, const QDate &end); 350 void updateView(const QDate &start, const QDate &end);
350 void updateView(); 351 void updateView();
351 void clearAllViews(); 352 void clearAllViews();
352 353
353 /** Full update of visible todo views */ 354 /** Full update of visible todo views */
354 void updateTodoViews(); 355 void updateTodoViews();
355 356
356 void updateUnmanagedViews(); 357 void updateUnmanagedViews();
357 358
358 /** cut the current appointment to the clipboard */ 359 /** cut the current appointment to the clipboard */
359 void edit_cut(); 360 void edit_cut();
360 361
361 /** copy the current appointment(s) to the clipboard */ 362 /** copy the current appointment(s) to the clipboard */
362 void edit_copy(); 363 void edit_copy();
363 364
364 /** paste the current vobject(s) in the clipboard buffer into calendar */ 365 /** paste the current vobject(s) in the clipboard buffer into calendar */
365 void edit_paste(); 366 void edit_paste();
366 367
367 /** edit viewing and configuration options. */ 368 /** edit viewing and configuration options. */
368 void edit_options(); 369 void edit_options();
369 void edit_global_options(); 370 void edit_global_options();
370 /** 371 /**
371 Functions for printing, previewing a print, and setting up printing 372 Functions for printing, previewing a print, and setting up printing
372 parameters. 373 parameters.
373 */ 374 */
374 void print(); 375 void print();
375 void printSetup(); 376 void printSetup();
376 void printPreview(); 377 void printPreview();
377 378
378 /** Export as iCalendar file */ 379 /** Export as iCalendar file */
379 bool exportICalendar(); 380 bool exportICalendar();
380 bool exportICalendar( QString fn ); 381 bool exportICalendar( QString fn );
381 382
382 /** Export as vCalendar file */ 383 /** Export as vCalendar file */
383 bool exportVCalendar( QString fn); 384 bool exportVCalendar( QString fn);
384 385
385 /** pop up a dialog to show an existing appointment. */ 386 /** pop up a dialog to show an existing appointment. */
386 void appointment_show(); 387 void appointment_show();
387 /** 388 /**
388 * pop up an Appointment Dialog to edit an existing appointment.Get 389 * pop up an Appointment Dialog to edit an existing appointment.Get
389 * information on the appointment from the list of unique IDs that is 390 * information on the appointment from the list of unique IDs that is
390 * currently in the View, called currIds. 391 * currently in the View, called currIds.
391 */ 392 */
392 void appointment_edit(); 393 void appointment_edit();
393 /** 394 /**
394 * pop up dialog confirming deletion of currently selected event in the 395 * pop up dialog confirming deletion of currently selected event in the
395 * View. 396 * View.
396 */ 397 */
397 void appointment_delete(); 398 void appointment_delete();
398 399
399 /** mails the currently selected event to a particular user as a vCalendar 400 /** mails the currently selected event to a particular user as a vCalendar
400 attachment. */ 401 attachment. */
401 void action_mail(); 402 void action_mail();
402 403
403 /* frees a subtodo from it's relation */ 404 /* frees a subtodo from it's relation */
404 void todo_unsub( Todo * ); 405 void todo_unsub( Todo * );
405 void todo_resub( Todo * parent, Todo * sub ); 406 void todo_resub( Todo * parent, Todo * sub );
406 407
407 /** Take ownership of selected event. */ 408 /** Take ownership of selected event. */
408 void takeOverEvent(); 409 void takeOverEvent();
409 410
410 /** Take ownership of all events in calendar. */ 411 /** Take ownership of all events in calendar. */
411 void takeOverCalendar(); 412 void takeOverCalendar();
412 413
413 /** query whether or not the calendar is "dirty". */ 414 /** query whether or not the calendar is "dirty". */
414 bool isModified(); 415 bool isModified();
415 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 416 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
416 void setModified(bool modified=true); 417 void setModified(bool modified=true);
417 418
418 /** query if the calendar is read-only. */ 419 /** query if the calendar is read-only. */
419 bool isReadOnly(); 420 bool isReadOnly();
420 /** set state of calendar to read-only */ 421 /** set state of calendar to read-only */
421 void setReadOnly(bool readOnly=true); 422 void setReadOnly(bool readOnly=true);
422 423
423 void eventUpdated(Incidence *); 424 void eventUpdated(Incidence *);
424 425
425 /* iTIP scheduling actions */ 426 /* iTIP scheduling actions */
426 void schedule_publish(Incidence *incidence = 0); 427 void schedule_publish(Incidence *incidence = 0);
427 void schedule_request(Incidence *incidence = 0); 428 void schedule_request(Incidence *incidence = 0);
428 void schedule_refresh(Incidence *incidence = 0); 429 void schedule_refresh(Incidence *incidence = 0);
429 void schedule_cancel(Incidence *incidence = 0); 430 void schedule_cancel(Incidence *incidence = 0);
430 void schedule_add(Incidence *incidence = 0); 431 void schedule_add(Incidence *incidence = 0);
431 void schedule_reply(Incidence *incidence = 0); 432 void schedule_reply(Incidence *incidence = 0);
432 void schedule_counter(Incidence *incidence = 0); 433 void schedule_counter(Incidence *incidence = 0);
433 void schedule_declinecounter(Incidence *incidence = 0); 434 void schedule_declinecounter(Incidence *incidence = 0);
434 void schedule_publish_freebusy(int daysToPublish = 30); 435 void schedule_publish_freebusy(int daysToPublish = 30);
435 436
436 void openAddressbook(); 437 void openAddressbook();
437 438
438 void editFilters(); 439 void editFilters();
439 void toggleFilerEnabled(); 440 void toggleFilerEnabled();
440 QPtrList<CalFilter> filters(); 441 QPtrList<CalFilter> filters();
441 void toggleFilter(); 442 void toggleFilter();
442 void showFilter(bool visible); 443 void showFilter(bool visible);
443 void updateFilter(); 444 void updateFilter();
444 void filterEdited(); 445 void filterEdited();
445 void selectFilter( int ); 446 void selectFilter( int );
446 KOFilterView *filterView(); 447 KOFilterView *filterView();
447 448
448 void showIntro(); 449 void showIntro();
449 450
450 /** Move the curdatepient view date to today */ 451 /** Move the curdatepient view date to today */
451 void goToday(); 452 void goToday();
452 453
453 /** Move to the next date(s) in the current view */ 454 /** Move to the next date(s) in the current view */
454 void goNext(); 455 void goNext();
455 456
456 /** Move to the previous date(s) in the current view */ 457 /** Move to the previous date(s) in the current view */
457 void goPrevious(); 458 void goPrevious();
458 /** Move to the next date(s) in the current view */ 459 /** Move to the next date(s) in the current view */
459 void goNextMonth(); 460 void goNextMonth();
460 461
461 /** Move to the previous date(s) in the current view */ 462 /** Move to the previous date(s) in the current view */
462 void goPreviousMonth(); 463 void goPreviousMonth();
463 464
464 void toggleExpand(); 465 void toggleExpand();
465 void toggleDateNavigatorWidget(); 466 void toggleDateNavigatorWidget();
466 void toggleAllDaySize(); 467 void toggleAllDaySize();
467 468
468 /** Look for new messages in the inbox */ 469 /** Look for new messages in the inbox */
469 void lookForIncomingMessages(); 470 void lookForIncomingMessages();
470 /** Look for new messages in the outbox */ 471 /** Look for new messages in the outbox */
471 void lookForOutgoingMessages(); 472 void lookForOutgoingMessages();
472 473
473 void processMainViewSelection( Incidence * ); 474 void processMainViewSelection( Incidence * );
474 void processTodoListSelection( Incidence * ); 475 void processTodoListSelection( Incidence * );
475 476
476 void processIncidenceSelection( Incidence * ); 477 void processIncidenceSelection( Incidence * );
477 478
478 void purgeCompleted(); 479 void purgeCompleted();
479 bool removeCompletedSubTodos( Todo* ); 480 bool removeCompletedSubTodos( Todo* );
480 void slotCalendarChanged(); 481 void slotCalendarChanged();
481 bool importBday(); 482 bool importBday();
482 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 483 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
483 bool importQtopia( const QString &categoriesFile, 484 bool importQtopia( const QString &categoriesFile,
484 const QString &datebookFile, 485 const QString &datebookFile,
485 const QString &tasklistFile ); 486 const QString &tasklistFile );
486 void syncExternal( int mode ); 487 void syncExternal( int mode );
487 void slotSelectPickerDate( QDate ) ; 488 void slotSelectPickerDate( QDate ) ;
488 void showDatePicker() ; 489 void showDatePicker() ;
489 void showDatePickerPopup() ; 490 void showDatePickerPopup() ;
490 void moveIncidence(Incidence *) ; 491 void moveIncidence(Incidence *) ;
491 void beamIncidence(Incidence *) ; 492 void beamIncidence(Incidence *) ;
492 void beamCalendar() ; 493 void beamCalendar() ;
493 void beamFilteredCalendar() ; 494 void beamFilteredCalendar() ;
494 void beamIncidenceList(QPtrList<Incidence>) ; 495 void beamIncidenceList(QPtrList<Incidence>) ;
495 void manageCategories(); 496 void manageCategories();
496 void editCategories(); 497 void editCategories();
497 int addCategories(); 498 int addCategories();
498 void removeCategories(); 499 void removeCategories();
499 void setSyncDevice( QString ); 500 void setSyncDevice( QString );
500 void setSyncName( QString ); 501 void setSyncName( QString );
501 void showDay( QDate ); 502 void showDay( QDate );
502 void undo_delete(); 503 void undo_delete();
503 protected slots: 504 protected slots:
504 void resetFocus(); 505 void resetFocus();
505 void scrollBarValue(int); 506 void scrollBarValue(int);
506 void slotViewerClosed(); 507 void slotViewerClosed();
507 void timerAlarm(); 508 void timerAlarm();
508 void suspendAlarm(); 509 void suspendAlarm();
509 void beamDone( Ir *ir ); 510 void beamDone( Ir *ir );
510 /** Select a view or adapt the current view to display the specified dates. */ 511 /** Select a view or adapt the current view to display the specified dates. */
511 void showDates( const KCal::DateList & ); 512 void showDates( const KCal::DateList & );
512 void selectWeekNum ( int ); 513 void selectWeekNum ( int );
513 void checkConflictForEvent(); 514 void checkConflictForEvent();
514 515
515 public: 516 public:
516 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ); 517 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
517 // show a standard warning 518 // show a standard warning
518 // returns KMsgBox::yesNoCancel() 519 // returns KMsgBox::yesNoCancel()
519 int msgCalModified(); 520 int msgCalModified();
520 virtual bool sync(KSyncManager* manager, QString filename, int mode); 521 virtual bool sync(KSyncManager* manager, QString filename, int mode);
521 522
522 virtual bool syncExternal(KSyncManager* manager, QString resource); 523 virtual bool syncExternal(KSyncManager* manager, QString resource);
523 virtual void removeSyncInfo( QString syncProfile); 524 virtual void removeSyncInfo( QString syncProfile);
524 void setSyncManager(KSyncManager* manager); 525 void setSyncManager(KSyncManager* manager);
525 void setLoadedFileVersion(QDateTime); 526 void setLoadedFileVersion(QDateTime);
526 bool checkFileVersion(QString fn); 527 bool checkFileVersion(QString fn);
527 bool checkAllFileVersions(); 528 bool checkAllFileVersions();
528 bool checkFileChanged(QString fn); 529 bool checkFileChanged(QString fn);
529 Event* getLastSyncEvent(); 530 Event* getLastSyncEvent();
530 /** Adapt navigation units correpsonding to step size of navigation of the 531 /** Adapt navigation units correpsonding to step size of navigation of the
531 * current view. 532 * current view.
532 */ 533 */
533 void adaptNavigationUnits(); 534 void adaptNavigationUnits();
534 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 535 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
535 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 536 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
536 //Attendee* getYourAttendee(Event *event); 537 //Attendee* getYourAttendee(Event *event);
537 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 538 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
538 void setScrollBarStep(int val ); 539 void setScrollBarStep(int val );
539 540
540 protected: 541 protected:
541 Event *mConflictingEvent; 542 Event *mConflictingEvent;
542 void schedule(Scheduler::Method, Incidence *incidence = 0); 543 void schedule(Scheduler::Method, Incidence *incidence = 0);
543 544
544 // returns KMsgBox::OKCandel() 545 // returns KMsgBox::OKCandel()
545 int msgItemDelete(const QString name); 546 int msgItemDelete(const QString name);
546 void showEventEditor(); 547 void showEventEditor();
547 void showTodoEditor(); 548 void showTodoEditor();
548 Todo *selectedTodo(); 549 Todo *selectedTodo();
549 private: 550 private:
550#ifdef DESKTOP_VERSION 551#ifdef DESKTOP_VERSION
551 QScrollBar * mDateScrollBar; 552 QScrollBar * mDateScrollBar;
552#endif 553#endif
553 QDateTime mNextAlarmDateTime; 554 QDateTime mNextAlarmDateTime;
554 bool mViewerCallerIsSearchDialog; 555 bool mViewerCallerIsSearchDialog;
555 bool mBlockShowDates; 556 bool mBlockShowDates;
556 KSyncManager* mSyncManager; 557 KSyncManager* mSyncManager;
557 AlarmDialog * mAlarmDialog; 558 AlarmDialog * mAlarmDialog;
558 QString mAlarmNotification; 559 QString mAlarmNotification;
559 QString mSuspendAlarmNotification; 560 QString mSuspendAlarmNotification;
560 QTimer* mSuspendTimer; 561 QTimer* mSuspendTimer;
561 QTimer* mAlarmTimer; 562 QTimer* mAlarmTimer;
562 QTimer* mRecheckAlarmTimer; 563 QTimer* mRecheckAlarmTimer;
563 void computeAlarm( QString ); 564 void computeAlarm( QString );
564 void startAlarm( QString, QString ); 565 void startAlarm( QString, QString );
565 void setSyncEventsReadOnly(); 566 void setSyncEventsReadOnly();
566 567
567 QDateTime loadedFileVersion; 568 QDateTime loadedFileVersion;
568 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 569 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
569 void checkExternalId( Incidence * inc ); 570 void checkExternalId( Incidence * inc );
570 int mGlobalSyncMode; 571 int mGlobalSyncMode;
571 QString mCurrentSyncDevice; 572 QString mCurrentSyncDevice;
572 QString mCurrentSyncName; 573 QString mCurrentSyncName;
573 void init(); 574 void init();
574 int mDatePickerMode; 575 int mDatePickerMode;
575 bool mFlagEditDescription; 576 bool mFlagEditDescription;
576 QDateTime mLastCalendarSync; 577 QDateTime mLastCalendarSync;
577 void createPrinter(); 578 void createPrinter();
578 579
579 void calendarModified( bool, Calendar * ); 580 void calendarModified( bool, Calendar * );
580 581
581 CalPrinter *mCalPrinter; 582 CalPrinter *mCalPrinter;
582 583
583 QSplitter *mPanner; 584 QSplitter *mPanner;
584 QSplitter *mLeftSplitter; 585 QSplitter *mLeftSplitter;
585 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 586 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
586 QWidgetStack *mRightFrame; 587 QWidgetStack *mRightFrame;
587 588
588 KDatePicker* mDatePicker; 589 KDatePicker* mDatePicker;
589 QVBox* mDateFrame; 590 QVBox* mDateFrame;
590 591
591 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 592 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
592 593
593 KOFilterView *mFilterView; 594 KOFilterView *mFilterView;
594 KOCalEditView *mCalEditView; 595 KOCalEditView *mCalEditView;
595 596
596 ResourceView *mResourceView; 597 ResourceView *mResourceView;
597 598
598 // calendar object for this viewing instance 599 // calendar object for this viewing instance
599 Calendar *mCalendar; 600 Calendar *mCalendar;
600 601
601 CalendarResourceManager *mResourceManager; 602 CalendarResourceManager *mResourceManager;
602 603
603 FileStorage *mStorage; 604 FileStorage *mStorage;
604 605
605 DateNavigator *mNavigator; 606 DateNavigator *mNavigator;
606 607
607 KOViewManager *mViewManager; 608 KOViewManager *mViewManager;
608 KODialogManager *mDialogManager; 609 KODialogManager *mDialogManager;
609 610
610 // Calendar filters 611 // Calendar filters
611 QPtrList<CalFilter> mFilters; 612 QPtrList<CalFilter> mFilters;
612 613
613 // various housekeeping variables. 614 // various housekeeping variables.
614 bool mModified; // flag indicating if calendar is modified 615 bool mModified; // flag indicating if calendar is modified
615 bool mReadOnly; // flag indicating if calendar is read-only 616 bool mReadOnly; // flag indicating if calendar is read-only
616 QDate mSaveSingleDate; 617 QDate mSaveSingleDate;
617 618
618 Incidence *mSelectedIncidence; 619 Incidence *mSelectedIncidence;
619 Incidence *mMoveIncidence; 620 Incidence *mMoveIncidence;
620 QDate mMoveIncidenceOldDate; 621 QDate mMoveIncidenceOldDate;
621 KOTodoView *mTodoList; 622 KOTodoView *mTodoList;
622 KOEventEditor * mEventEditor; 623 KOEventEditor * mEventEditor;
623 KOTodoEditor * mTodoEditor; 624 KOTodoEditor * mTodoEditor;
624 KOEventViewerDialog * mEventViewerDialog; 625 KOEventViewerDialog * mEventViewerDialog;
625 void keyPressEvent ( QKeyEvent *e) ; 626 void keyPressEvent ( QKeyEvent *e) ;
626 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 627 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
627}; 628};
628 629
629 630
630class CalendarViewVisitor : public Incidence::Visitor 631class CalendarViewVisitor : public Incidence::Visitor
631{ 632{
632 public: 633 public:
633 CalendarViewVisitor() : mView( 0 ) {} 634 CalendarViewVisitor() : mView( 0 ) {}
634 635
635 bool act( Incidence *incidence, CalendarView *view ) 636 bool act( Incidence *incidence, CalendarView *view )
636 { 637 {
637 mView = view; 638 mView = view;
638 return incidence->accept( *this ); 639 return incidence->accept( *this );
639 } 640 }
640 641
641 protected: 642 protected:
642 CalendarView *mView; 643 CalendarView *mView;
643}; 644};
644 645
645class ShowIncidenceVisitor : public CalendarViewVisitor 646class ShowIncidenceVisitor : public CalendarViewVisitor
646{ 647{
647 protected: 648 protected:
648 bool visit( Event *event ) { mView->showEvent( event ); return true; } 649 bool visit( Event *event ) { mView->showEvent( event ); return true; }
649 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 650 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
650 bool visit( Journal * j ) { mView->showJournal( j );return true; } 651 bool visit( Journal * j ) { mView->showJournal( j );return true; }
651}; 652};
652 653
653class EditIncidenceVisitor : public CalendarViewVisitor 654class EditIncidenceVisitor : public CalendarViewVisitor
654{ 655{
655 protected: 656 protected:
656 bool visit( Event *event ) { mView->editEvent( event ); return true; } 657 bool visit( Event *event ) { mView->editEvent( event ); return true; }
657 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 658 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
658 bool visit( Journal *j ) { mView->editJournal( j); return true; } 659 bool visit( Journal *j ) { mView->editJournal( j); return true; }
659}; 660};
660 661
661class DeleteIncidenceVisitor : public CalendarViewVisitor 662class DeleteIncidenceVisitor : public CalendarViewVisitor
662{ 663{
663 protected: 664 protected:
664 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 665 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
665 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 666 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
666 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 667 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
667}; 668};
668 669
669#endif 670#endif
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp
index ef25fd0..ee9c9f6 100644
--- a/korganizer/kofilterview.cpp
+++ b/korganizer/kofilterview.cpp
@@ -1,497 +1,499 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qcheckbox.h> 24#include <qcheckbox.h>
25#include <qcombobox.h> 25#include <qcombobox.h>
26#include <qpushbutton.h> 26#include <qpushbutton.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qdialog.h> 29#include <qdialog.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qwhatsthis.h> 32#include <qwhatsthis.h>
33#include <qdir.h> 33#include <qdir.h>
34 34
35 35
36#include <libkcal/calfilter.h> 36#include <libkcal/calfilter.h>
37 37
38#include "kofilterview.h" 38#include "kofilterview.h"
39#include "koprefs.h" 39#include "koprefs.h"
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42#include <kglobalsettings.h> 42#include <kglobalsettings.h>
43#include <kcolorbutton.h> 43#include <kcolorbutton.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46 46
47 47
48 48
49 49
50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent, 50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent,
51 const char* name,WFlags fl ) 51 const char* name,WFlags fl )
52 : KOFilterView_base(parent,name,fl) 52 : KOFilterView_base(parent,name,fl)
53{ 53{
54 mFilters = filterList; 54 mFilters = filterList;
55 55
56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged())); 56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged()));
57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged())); 57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged()));
58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters())); 58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters()));
59} 59}
60 60
61KOFilterView::~KOFilterView() 61KOFilterView::~KOFilterView()
62{ 62{
63 // no need to delete child widgets, Qt does it all for us 63 // no need to delete child widgets, Qt does it all for us
64} 64}
65 65
66bool KOFilterView::filtersEnabled() 66bool KOFilterView::filtersEnabled()
67{ 67{
68 return mEnabledCheck->isChecked(); 68 return mEnabledCheck->isChecked();
69} 69}
70 70
71void KOFilterView::setFiltersEnabled(bool set) 71void KOFilterView::setFiltersEnabled(bool set)
72{ 72{
73 mEnabledCheck->setChecked(set); 73 mEnabledCheck->setChecked(set);
74 emit filterChanged(); 74 emit filterChanged();
75} 75}
76 76
77 77
78void KOFilterView::updateFilters() 78void KOFilterView::updateFilters()
79{ 79{
80 mSelectionCombo->clear(); 80 mSelectionCombo->clear();
81 81
82 CalFilter *filter = mFilters->first(); 82 CalFilter *filter = mFilters->first();
83 while(filter) { 83 while(filter) {
84 mSelectionCombo->insertItem(filter->name()); 84 mSelectionCombo->insertItem(filter->name());
85 filter = mFilters->next(); 85 filter = mFilters->next();
86 } 86 }
87} 87}
88 88
89CalFilter *KOFilterView::selectedFilter() 89CalFilter *KOFilterView::selectedFilter()
90{ 90{
91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem()); 91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
92 return f; 92 return f;
93} 93}
94 94
95void KOFilterView::setSelectedFilter(QString filterName) 95void KOFilterView::setSelectedFilter(QString filterName)
96{ 96{
97 int filter_num = mSelectionCombo->count(); 97 int filter_num = mSelectionCombo->count();
98 int i; 98 int i;
99 for (i=0;i<filter_num;i++) { 99 for (i=0;i<filter_num;i++) {
100 if (mSelectionCombo->text(i)==filterName) 100 if (mSelectionCombo->text(i)==filterName)
101 mSelectionCombo->setCurrentItem(i); 101 mSelectionCombo->setCurrentItem(i);
102 } 102 }
103 emit filterChanged(); 103 emit filterChanged();
104} 104}
105void KOFilterView::setSelectedFilter( int fil ) 105void KOFilterView::setSelectedFilter( int fil )
106{ 106{
107 if ( fil >= mSelectionCombo->count() ) 107 if ( fil >= mSelectionCombo->count() )
108 return; 108 return;
109 mSelectionCombo->setCurrentItem( fil ); 109 mSelectionCombo->setCurrentItem( fil );
110 emit filterChanged(); 110 emit filterChanged();
111} 111}
112 112
113 113
114 114
115KOCalEditView::KOCalEditView(QWidget* parent, 115KOCalEditView::KOCalEditView(QWidget* parent,
116 const char* name ) 116 const char* name )
117 : QScrollView(parent,name) 117 : QScrollView(parent,name)
118{ 118{
119 mw = 0; 119 mw = 0;
120 setResizePolicy( AutoOneFit ); 120 setResizePolicy( AutoOneFit );
121 setFrameStyle ( QFrame::Panel | QFrame::Plain ); 121 setFrameStyle ( QFrame::Panel | QFrame::Plain );
122 setLineWidth ( 1 ); 122 setLineWidth ( 1 );
123 setMidLineWidth ( 1 ); 123 setMidLineWidth ( 1 );
124 setFocusPolicy(NoFocus); 124 setFocusPolicy(NoFocus);
125} 125}
126 126
127KOCalEditView::~KOCalEditView() 127KOCalEditView::~KOCalEditView()
128{ 128{
129 // no need to delete child widgets, Qt does it all for us 129 // no need to delete child widgets, Qt does it all for us
130} 130}
131void KOCalEditView::selectCal(int id ,bool b) 131void KOCalEditView::selectCal(int id ,bool b)
132{ 132{
133 KOPrefs::instance()->getCalendar( id )->isEnabled = b; 133 KOPrefs::instance()->getCalendar( id )->isEnabled = b;
134 emit calendarEnabled ( id, b ); 134 emit calendarEnabled ( id, b );
135 emit needsUpdate(); 135 emit needsUpdate();
136 136
137} 137}
138void KOCalEditView::selectStdCal( int id ) 138void KOCalEditView::selectStdCal( int id )
139{ 139{
140 KOCalRadioButton* it = mStdandardB.first(); 140 KOCalRadioButton* it = mStdandardB.first();
141 while ( it ) { 141 while ( it ) {
142 it->blockSignals( true ); 142 it->blockSignals( true );
143 it->setChecked( it->num() == id ); 143 it->setChecked( it->num() == id );
144 it->blockSignals( false ); 144 it->blockSignals( false );
145 it = mStdandardB.next(); 145 it = mStdandardB.next();
146 } 146 }
147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
148 while ( kkf ) { 148 while ( kkf ) {
149 kkf->isStandard = (kkf->mCalNumber == id ); 149 kkf->isStandard = (kkf->mCalNumber == id );
150 kkf = KOPrefs::instance()->mCalendars.next(); 150 kkf = KOPrefs::instance()->mCalendars.next();
151 } 151 }
152 emit setCalendarDefault ( id ); 152 emit setCalendarDefault ( id );
153} 153}
154 154
155void KOCalEditView::selectCalAlarm(int id ,bool b ) 155void KOCalEditView::selectCalAlarm(int id ,bool b )
156{ 156{
157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b; 157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b;
158 emit alarmEnabled ( id , b ); 158 emit alarmEnabled ( id , b );
159 emit needsUpdate(); 159 emit needsUpdate();
160} 160}
161void KOCalEditView::selectReadOnly(int id ,bool b ) 161void KOCalEditView::selectReadOnly(int id ,bool b )
162{ 162{
163 163
164 emit calendarReadonly ( id , b ); 164 emit calendarReadonly ( id , b );
165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b; 165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b;
166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) { 166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) {
167 findNewStandard(); 167 findNewStandard();
168 } 168 }
169 if ( !b ){ 169 if ( !b ){
170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
171 while ( kkf ) { 171 while ( kkf ) {
172 if (kkf->isReadOnly && kkf->isStandard ) { 172 if (kkf->isReadOnly && kkf->isStandard ) {
173 selectStdCal( id ); 173 selectStdCal( id );
174 break; 174 break;
175 } 175 }
176 kkf = KOPrefs::instance()->mCalendars.next(); 176 kkf = KOPrefs::instance()->mCalendars.next();
177 } 177 }
178 } 178 }
179 179
180 mStdandardB.at(id-1)->setEnabled( !b ); 180 mStdandardB.at(id-1)->setEnabled( !b );
181 emit needsUpdate(); 181 emit needsUpdate();
182 182
183} 183}
184void KOCalEditView::findNewStandard() 184void KOCalEditView::findNewStandard()
185{ 185{
186 bool found = false; 186 bool found = false;
187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
188 while ( kkf ) { 188 while ( kkf ) {
189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) { 189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) {
190 found = true; 190 found = true;
191 selectStdCal( kkf->mCalNumber ); 191 selectStdCal( kkf->mCalNumber );
192 break; 192 break;
193 } 193 }
194 kkf = KOPrefs::instance()->mCalendars.next(); 194 kkf = KOPrefs::instance()->mCalendars.next();
195 } 195 }
196 if ( !found ) { 196 if ( !found ) {
197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"), 197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"),
198 i18n("Houston, we have a problem!") ); 198 i18n("Houston, we have a problem!") );
199 199
200 } 200 }
201} 201}
202 202
203void KOCalEditView::setColor( const QColor& c, int id ) 203void KOCalEditView::setColor( const QColor& c, int id )
204{ 204{
205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c; 205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c;
206 emit needsUpdate(); 206 emit needsUpdate();
207} 207}
208void KOCalEditView::deleteCal( int id ) 208void KOCalEditView::deleteCal( int id )
209{ 209{
210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); 210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
211 QString name = kkf->mName; 211 QString name = kkf->mName;
212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); 212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return; 213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return;
214 bool findnewstd = kkf->isStandard; 214 bool findnewstd = kkf->isStandard;
215 emit removeCalendar ( id ); 215 emit removeCalendar ( id );
216 KOPrefs::instance()->mCalendars.remove ( kkf ); 216 KOPrefs::instance()->mCalendars.remove ( kkf );
217 if ( findnewstd ) findNewStandard(); 217 if ( findnewstd ) findNewStandard();
218 emit needsUpdate(); 218 emit needsUpdate();
219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
220} 220}
221void KOCalEditView::infoCal( int id ) 221void KOCalEditView::infoCal( int id )
222{ 222{
223 QString name = KOPrefs::instance()->getCalendar( id )->mName; 223 QString name = KOPrefs::instance()->getCalendar( id )->mName;
224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 ); 224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 );
225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) { 225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) {
226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) { 226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) {
227 emit calendarAdded( id ); 227 emit calendarAdded( id );
228 emit needsUpdate(); 228 emit needsUpdate();
229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
231 } 231 }
232 } 232 }
233 else 233 else {
234 KMessageBox::information( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file) ); 234 emit requestCalendarInfo( id );
235
236 }
235} 237}
236void KOCalEditView::readConfig() 238void KOCalEditView::readConfig()
237{ 239{
238 240
239 mStdandardB.clear(); 241 mStdandardB.clear();
240 mEnabledB.clear(); 242 mEnabledB.clear();
241 mAlarmB.clear(); 243 mAlarmB.clear();
242 mROB.clear(); 244 mROB.clear();
243 245
244 if ( mw ) delete mw; 246 if ( mw ) delete mw;
245 mw = new QWidget ( viewport() ); 247 mw = new QWidget ( viewport() );
246 addChild(mw); 248 addChild(mw);
247 int ii = 0; 249 int ii = 0;
248 mainLayout = new QGridLayout ( mw , 2, 8 ); 250 mainLayout = new QGridLayout ( mw , 2, 8 );
249 mainLayout->setMargin( 2 ); 251 mainLayout->setMargin( 2 );
250 mainLayout->setSpacing( 2 ); 252 mainLayout->setSpacing( 2 );
251 QPushButton * addButT = new QPushButton ( mw ); 253 QPushButton * addButT = new QPushButton ( mw );
252 addButT->setFocusPolicy(NoFocus); 254 addButT->setFocusPolicy(NoFocus);
253 mainLayout->addWidget( addButT,0,0 ); 255 mainLayout->addWidget( addButT,0,0 );
254 addButT->setText( "D"); 256 addButT->setText( "D");
255 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo())); 257 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo()));
256 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 258 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
257 //addBut->setPixmap ( SmallIcon("greenhook16")); 259 //addBut->setPixmap ( SmallIcon("greenhook16"));
258 QPushButton *addBut = new QPushButton ( mw ); 260 QPushButton *addBut = new QPushButton ( mw );
259 addBut->setFocusPolicy(NoFocus); 261 addBut->setFocusPolicy(NoFocus);
260 mainLayout->addWidget( addBut,0,++ii ); 262 mainLayout->addWidget( addBut,0,++ii );
261 addBut->setPixmap ( SmallIcon("eye")); 263 addBut->setPixmap ( SmallIcon("eye"));
262 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") ); 264 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") );
263 connect(addBut,SIGNAL(clicked()),SLOT(enableAll())); 265 connect(addBut,SIGNAL(clicked()),SLOT(enableAll()));
264 int max = addBut->sizeHint().height(); 266 int max = addBut->sizeHint().height();
265 addBut->setMaximumWidth( max ); 267 addBut->setMaximumWidth( max );
266 addButT->setFixedSize( QSize( max, max ) ); 268 addButT->setFixedSize( QSize( max, max ) );
267 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw ); 269 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw );
268 mainLayout->addWidget( lab,0,++ii ); 270 mainLayout->addWidget( lab,0,++ii );
269 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") ); 271 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") );
270 //lab = new QLabel ( i18n(" "), mw ); 272 //lab = new QLabel ( i18n(" "), mw );
271 //mainLayout->addWidget( lab,0,++ii ); 273 //mainLayout->addWidget( lab,0,++ii );
272 //lab->setFixedWidth( 1 ); 274 //lab->setFixedWidth( 1 );
273 addBut = new QPushButton ( mw ); 275 addBut = new QPushButton ( mw );
274 addBut->setFocusPolicy(NoFocus); 276 addBut->setFocusPolicy(NoFocus);
275 mainLayout->addWidget( addBut,0,++ii ); 277 mainLayout->addWidget( addBut,0,++ii );
276 addBut->setPixmap ( SmallIcon("bell")); 278 addBut->setPixmap ( SmallIcon("bell"));
277 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") ); 279 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") );
278 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm())); 280 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm()));
279 addBut->setMaximumWidth( addBut->sizeHint().height() ); 281 addBut->setMaximumWidth( addBut->sizeHint().height() );
280 282
281 addBut = new QPushButton ( mw ); 283 addBut = new QPushButton ( mw );
282 addBut->setFocusPolicy(NoFocus); 284 addBut->setFocusPolicy(NoFocus);
283 mainLayout->addWidget( addBut,0,++ii ); 285 mainLayout->addWidget( addBut,0,++ii );
284 addBut->setPixmap ( SmallIcon("pencil")); 286 addBut->setPixmap ( SmallIcon("pencil"));
285 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") ); 287 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") );
286 connect(addBut,SIGNAL(clicked()),SLOT(disableRO())); 288 connect(addBut,SIGNAL(clicked()),SLOT(disableRO()));
287 addBut->setMaximumWidth( addBut->sizeHint().height() ); 289 addBut->setMaximumWidth( addBut->sizeHint().height() );
288 lab = new QLabel ( "", mw ); 290 lab = new QLabel ( "", mw );
289 mainLayout->addWidget( lab,0,++ii ); 291 mainLayout->addWidget( lab,0,++ii );
290 292
291 addBut = new QPushButton ( mw ); 293 addBut = new QPushButton ( mw );
292 addBut->setFocusPolicy(NoFocus); 294 addBut->setFocusPolicy(NoFocus);
293 mainLayout->addWidget( addBut,0,++ii ); 295 mainLayout->addWidget( addBut,0,++ii );
294 addBut->setPixmap ( SmallIcon("plus")); 296 addBut->setPixmap ( SmallIcon("plus"));
295 connect(addBut,SIGNAL(clicked()),SLOT(addCal())); 297 connect(addBut,SIGNAL(clicked()),SLOT(addCal()));
296 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") ); 298 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") );
297 lab = new QLabel ( " ", mw ); 299 lab = new QLabel ( " ", mw );
298 mainLayout->addWidget( lab,0,++ii ); 300 mainLayout->addWidget( lab,0,++ii );
299 301
300 302
301 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 303 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
302 int row = 1; 304 int row = 1;
303 bool errorLoadStandard = false; 305 bool errorLoadStandard = false;
304 while ( kkf ) { 306 while ( kkf ) {
305 int iii = 0; 307 int iii = 0;
306 KOCalRadioButton* rb = new KOCalRadioButton( mw ); 308 KOCalRadioButton* rb = new KOCalRadioButton( mw );
307 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb ); 309 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb );
308 rb->setChecked( kkf->isStandard ); 310 rb->setChecked( kkf->isStandard );
309 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) ) 311 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) )
310 errorLoadStandard = true; 312 errorLoadStandard = true;
311 rb->setNum( kkf->mCalNumber ); 313 rb->setNum( kkf->mCalNumber );
312 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) ); 314 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) );
313 if ( kkf->mErrorOnLoad || kkf->isReadOnly ) 315 if ( kkf->mErrorOnLoad || kkf->isReadOnly )
314 rb->setEnabled( false ); 316 rb->setEnabled( false );
315 KOCalCheckButton* cb = new KOCalCheckButton( mw ); 317 KOCalCheckButton* cb = new KOCalCheckButton( mw );
316 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb ); 318 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb );
317 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad ); 319 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad );
318 cb->setNum( kkf->mCalNumber ); 320 cb->setNum( kkf->mCalNumber );
319 if ( kkf->mErrorOnLoad ) 321 if ( kkf->mErrorOnLoad )
320 cb->setEnabled( false ); 322 cb->setEnabled( false );
321 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) ); 323 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) );
322 KOCalButton* name = new KOCalButton( mw ); 324 KOCalButton* name = new KOCalButton( mw );
323 name->setNum( kkf->mCalNumber ); 325 name->setNum( kkf->mCalNumber );
324 name->setText( kkf->mName ); 326 name->setText( kkf->mName );
325 mainLayout->addWidget( name,row,++iii ); 327 mainLayout->addWidget( name,row,++iii );
326 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) ); 328 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) );
327 //lab = new QLabel (" ", mw ); 329 //lab = new QLabel (" ", mw );
328 //mainLayout->addWidget( lab,row,++iii ); 330 //mainLayout->addWidget( lab,row,++iii );
329 cb = new KOCalCheckButton( mw ); 331 cb = new KOCalCheckButton( mw );
330 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb ); 332 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb );
331 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad); 333 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad);
332 cb->setNum( kkf->mCalNumber ); 334 cb->setNum( kkf->mCalNumber );
333 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) ); 335 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) );
334 if ( kkf->mErrorOnLoad ) 336 if ( kkf->mErrorOnLoad )
335 cb->setEnabled( false ); 337 cb->setEnabled( false );
336 cb = new KOCalCheckButton( mw ); 338 cb = new KOCalCheckButton( mw );
337 mainLayout->addWidget( cb,row,++iii );mROB.append( cb ); 339 mainLayout->addWidget( cb,row,++iii );mROB.append( cb );
338 cb->setChecked( kkf->isReadOnly ); 340 cb->setChecked( kkf->isReadOnly );
339 cb->setNum( kkf->mCalNumber ); 341 cb->setNum( kkf->mCalNumber );
340 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) ); 342 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) );
341 if ( kkf->mErrorOnLoad ) 343 if ( kkf->mErrorOnLoad )
342 cb->setEnabled( false ); 344 cb->setEnabled( false );
343 if ( row > 1) { 345 if ( row > 1) {
344 KColorButton *colb = new KColorButton( mw ); 346 KColorButton *colb = new KColorButton( mw );
345 mainLayout->addWidget( colb,row,++iii ); 347 mainLayout->addWidget( colb,row,++iii );
346 colb->setID( kkf->mCalNumber ); 348 colb->setID( kkf->mCalNumber );
347 colb->setColor( kkf->mDefaultColor ); 349 colb->setColor( kkf->mDefaultColor );
348 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) ); 350 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) );
349 KOCalButton* calb = new KOCalButton( mw ); 351 KOCalButton* calb = new KOCalButton( mw );
350 mainLayout->addWidget( calb,row,++iii ); 352 mainLayout->addWidget( calb,row,++iii );
351 calb->setNum( kkf->mCalNumber ); 353 calb->setNum( kkf->mCalNumber );
352 calb->setPixmap ( SmallIcon("minus")); 354 calb->setPixmap ( SmallIcon("minus"));
353 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) ); 355 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) );
354 int hei = calb->sizeHint().height(); 356 int hei = calb->sizeHint().height();
355 //calb->setMaximumSize( hei*9/10, hei*9/10 ); 357 //calb->setMaximumSize( hei*9/10, hei*9/10 );
356 } 358 }
357 ++row; 359 ++row;
358 kkf = KOPrefs::instance()->mCalendars.next(); 360 kkf = KOPrefs::instance()->mCalendars.next();
359 } 361 }
360 if ( errorLoadStandard ) 362 if ( errorLoadStandard )
361 findNewStandard(); 363 findNewStandard();
362 lab = new QLabel ( "", mw ); 364 lab = new QLabel ( "", mw );
363 mainLayout->addWidget( lab,row,0 ); 365 mainLayout->addWidget( lab,row,0 );
364 mw->show(); 366 mw->show();
365 367
366} 368}
367 369
368void KOCalEditView::defaultInfo() 370void KOCalEditView::defaultInfo()
369{ 371{
370 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 372 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
371} 373}
372void KOCalEditView::addCal() 374void KOCalEditView::addCal()
373{ 375{
374 bool tryagain = true; 376 bool tryagain = true;
375 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics"; 377 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics";
376 while ( tryagain ) { 378 while ( tryagain ) {
377 KONewCalPrefs prefs ( this ); 379 KONewCalPrefs prefs ( this );
378 prefs.nameE->setText( name ); 380 prefs.nameE->setText( name );
379 prefs.url->setURL( file ); 381 prefs.url->setURL( file );
380 if ( ! prefs.exec() ) 382 if ( ! prefs.exec() )
381 return; 383 return;
382 name = prefs.calName(); 384 name = prefs.calName();
383 file = prefs.calFileName(); 385 file = prefs.calFileName();
384 tryagain = false; 386 tryagain = false;
385 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 387 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
386 while ( kkf ) { 388 while ( kkf ) {
387 if ( kkf->mName == name ) { 389 if ( kkf->mName == name ) {
388 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) ); 390 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) );
389 name = ""; 391 name = "";
390 tryagain = true; 392 tryagain = true;
391 break; 393 break;
392 } 394 }
393 if ( kkf->mFileName == file ) { 395 if ( kkf->mFileName == file ) {
394 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) ); 396 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) );
395 tryagain = true; 397 tryagain = true;
396 file = KGlobalSettings::calendarDir()+"newCal.ics"; 398 file = KGlobalSettings::calendarDir()+"newCal.ics";
397 break; 399 break;
398 } 400 }
399 kkf = KOPrefs::instance()->mCalendars.next(); 401 kkf = KOPrefs::instance()->mCalendars.next();
400 } 402 }
401 QFileInfo fi ( file ); 403 QFileInfo fi ( file );
402 if ( fi.isDir() ) { 404 if ( fi.isDir() ) {
403 tryagain = true; 405 tryagain = true;
404 } 406 }
405 } 407 }
406 addCalendar ( name, file ); 408 addCalendar ( name, file );
407 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 409 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
408} 410}
409int KOCalEditView::addCalendar( QString name, QString file, bool ask ) 411int KOCalEditView::addCalendar( QString name, QString file, bool ask )
410{ 412{
411 file = QDir::convertSeparators( file ); 413 file = QDir::convertSeparators( file );
412 QFileInfo fi ( file ); 414 QFileInfo fi ( file );
413 QString absFile = file; 415 QString absFile = file;
414 bool isRelative = false; 416 bool isRelative = false;
415 if ( fi.isRelative() ) { 417 if ( fi.isRelative() ) {
416 isRelative = true; 418 isRelative = true;
417 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file ); 419 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file );
418 fi.setFile( absFile ); 420 fi.setFile( absFile );
419 } else { 421 } else {
420 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() ); 422 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() );
421 if ( file.left( cd.length() ) == cd ) { 423 if ( file.left( cd.length() ) == cd ) {
422 isRelative = true; 424 isRelative = true;
423 file = fi.fileName (); 425 file = fi.fileName ();
424 fi.setFile( absFile ); 426 fi.setFile( absFile );
425 } 427 }
426 } 428 }
427 if (!fi.exists() ) { 429 if (!fi.exists() ) {
428 if ( ask ) 430 if ( ask )
429 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No ) 431 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No )
430 return 0; 432 return 0;
431 QFile fileIn( absFile ); 433 QFile fileIn( absFile );
432 if (!fileIn.open( IO_WriteOnly ) ) { 434 if (!fileIn.open( IO_WriteOnly ) ) {
433 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) ); 435 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) );
434 return 0; 436 return 0;
435 } 437 }
436 QTextStream tsIn( &fileIn ); 438 QTextStream tsIn( &fileIn );
437 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 439 tsIn.setCodec( QTextCodec::codecForName("utf8") );
438 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n"; 440 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n";
439 fileIn.close(); 441 fileIn.close();
440 } 442 }
441 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar(); 443 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar();
442 kkf->mName = name; 444 kkf->mName = name;
443 kkf->mFileName = absFile; 445 kkf->mFileName = absFile;
444 kkf->mSavedFileName = file; 446 kkf->mSavedFileName = file;
445 kkf->isRelative = isRelative; 447 kkf->isRelative = isRelative;
446 emit calendarAdded( kkf->mCalNumber ); 448 emit calendarAdded( kkf->mCalNumber );
447 if ( ask ) 449 if ( ask )
448 emit needsUpdate(); 450 emit needsUpdate();
449 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 451 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
450 return kkf->mCalNumber; 452 return kkf->mCalNumber;
451} 453}
452int KOCalEditView::getBirtdayID() 454int KOCalEditView::getBirtdayID()
453{ 455{
454 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 456 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
455 while ( kkf ) { 457 while ( kkf ) {
456 if ( kkf->mName == i18n("Birthdays") ) 458 if ( kkf->mName == i18n("Birthdays") )
457 return kkf->mCalNumber; 459 return kkf->mCalNumber;
458 kkf = KOPrefs::instance()->mCalendars.next(); 460 kkf = KOPrefs::instance()->mCalendars.next();
459 } 461 }
460 QString file = locateLocal( "data", "korganizer/birthdays.ics" ); 462 QString file = locateLocal( "data", "korganizer/birthdays.ics" );
461 return addCalendar( i18n("Birthdays"), file, false ); 463 return addCalendar( i18n("Birthdays"), file, false );
462} 464}
463 465
464void KOCalEditView::enableAll() 466void KOCalEditView::enableAll()
465{ 467{
466 toggleList( mEnabledB ); 468 toggleList( mEnabledB );
467} 469}
468void KOCalEditView::enableAlarm() 470void KOCalEditView::enableAlarm()
469{ 471{
470 toggleList( mAlarmB ); 472 toggleList( mAlarmB );
471} 473}
472void KOCalEditView::disableRO() 474void KOCalEditView::disableRO()
473{ 475{
474 toggleList( mROB, false ); 476 toggleList( mROB, false );
475} 477}
476void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable ) 478void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable )
477{ 479{
478 bool dis = !enable; 480 bool dis = !enable;
479 KOCalCheckButton* it = list.first(); 481 KOCalCheckButton* it = list.first();
480 while ( it ) { 482 while ( it ) {
481 if ( !it->isChecked() == enable && it->isEnabled() ) { 483 if ( !it->isChecked() == enable && it->isEnabled() ) {
482 dis = !dis; 484 dis = !dis;
483 break; 485 break;
484 } 486 }
485 it = list.next(); 487 it = list.next();
486 } 488 }
487 it = list.first(); 489 it = list.first();
488 while ( it ) { 490 while ( it ) {
489 if ( it->isEnabled() ) 491 if ( it->isEnabled() )
490 it->setChecked(dis); 492 it->setChecked(dis);
491 it = list.next(); 493 it = list.next();
492 } 494 }
493} 495}
494void KOCalEditView::deleteAll() 496void KOCalEditView::deleteAll()
495{ 497{
496 qDebug("delteAll"); 498 qDebug("delteAll");
497} 499}
diff --git a/korganizer/kofilterview.h b/korganizer/kofilterview.h
index d534dbf..0dd423a 100644
--- a/korganizer/kofilterview.h
+++ b/korganizer/kofilterview.h
@@ -1,256 +1,257 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOFILTERVIEW_H 23#ifndef KOFILTERVIEW_H
24#define KOFILTERVIEW_H 24#define KOFILTERVIEW_H
25 25
26#include <qstring.h> 26#include <qstring.h>
27#include <qcheckbox.h> 27#include <qcheckbox.h>
28#include <qapplication.h> 28#include <qapplication.h>
29#include <qradiobutton.h> 29#include <qradiobutton.h>
30#include <qlayout.h> 30#include <qlayout.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qscrollview.h> 33#include <qscrollview.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include "kofilterview_base.h" 36#include "kofilterview_base.h"
37 37
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39 39
40#include <kurlrequester.h> 40#include <kurlrequester.h>
41#include <klineedit.h> 41#include <klineedit.h>
42#include <kglobal.h> 42#include <kglobal.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44 44
45class QGridLayout; 45class QGridLayout;
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49class KONewCalPrefs : public QDialog 49class KONewCalPrefs : public QDialog
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 public: 52 public:
53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) : 53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) :
54 QDialog( parent, name, true ) 54 QDialog( parent, name, true )
55 { 55 {
56 setCaption( i18n("Add new Calendar") ); 56 setCaption( i18n("Add new Calendar") );
57 QVBoxLayout* lay = new QVBoxLayout( this ); 57 QVBoxLayout* lay = new QVBoxLayout( this );
58 lay->setSpacing( 3 ); 58 lay->setSpacing( 3 );
59 lay->setMargin( 3 ); 59 lay->setMargin( 3 );
60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this ); 60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this );
61 lay->addWidget( lab ); 61 lay->addWidget( lab );
62 nameE = new KLineEdit( this ); 62 nameE = new KLineEdit( this );
63 lay->addWidget( nameE ); 63 lay->addWidget( nameE );
64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this ); 64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this );
65 lay->addWidget( lab ); 65 lay->addWidget( lab );
66 url = new KURLRequester ( this ); 66 url = new KURLRequester ( this );
67 lay->addWidget( url ); 67 lay->addWidget( url );
68 QPushButton * ok = new QPushButton( i18n("OK"), this ); 68 QPushButton * ok = new QPushButton( i18n("OK"), this );
69 lay->addWidget( ok ); 69 lay->addWidget( ok );
70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
71 lay->addWidget( cancel ); 71 lay->addWidget( cancel );
72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) ); 72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) );
73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) ); 73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) );
74 int minwid = 440; 74 int minwid = 440;
75 if ( QApplication::desktop()->width() < 480 ) minwid = 220; 75 if ( QApplication::desktop()->width() < 480 ) minwid = 220;
76 setMinimumWidth( minwid ); 76 setMinimumWidth( minwid );
77 resize(sizeHint() ); 77 resize(sizeHint() );
78 } 78 }
79 79
80 QString calName() { return nameE->text(); } 80 QString calName() { return nameE->text(); }
81 QString calFileName() { return url->url(); } 81 QString calFileName() { return url->url(); }
82 82
83public slots: 83public slots:
84void checkValid() { 84void checkValid() {
85 if ( nameE->text().isEmpty() ) { 85 if ( nameE->text().isEmpty() ) {
86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") ); 86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") );
87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () )); 87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () ));
88 return; 88 return;
89 } 89 }
90 if ( url->url().isEmpty() ) { 90 if ( url->url().isEmpty() ) {
91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") ); 91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") );
92 url->setURL( nameE->text() + ".ics" ); 92 url->setURL( nameE->text() + ".ics" );
93 return; 93 return;
94 } 94 }
95 accept(); 95 accept();
96} 96}
97 97
98public: 98public:
99 KLineEdit* nameE; 99 KLineEdit* nameE;
100 KURLRequester *url; 100 KURLRequester *url;
101}; 101};
102 102
103class KOCalButton : public QPushButton 103class KOCalButton : public QPushButton
104{ 104{
105 Q_OBJECT 105 Q_OBJECT
106 public: 106 public:
107 KOCalButton( QWidget *parent=0, const char *name=0 ) : 107 KOCalButton( QWidget *parent=0, const char *name=0 ) :
108 QPushButton( parent, name) 108 QPushButton( parent, name)
109 { 109 {
110 connect( this, SIGNAL( clicked() ), 110 connect( this, SIGNAL( clicked() ),
111 SLOT( bottonClicked() )); 111 SLOT( bottonClicked() ));
112 mNumber = -1; 112 mNumber = -1;
113 setFocusPolicy(NoFocus); 113 setFocusPolicy(NoFocus);
114 } 114 }
115 void setNum ( int num ) {mNumber = num; } 115 void setNum ( int num ) {mNumber = num; }
116 signals: 116 signals:
117 void selectNum ( int ); 117 void selectNum ( int );
118private: 118private:
119 int mNumber; 119 int mNumber;
120 void keyPressEvent ( QKeyEvent * e ) 120 void keyPressEvent ( QKeyEvent * e )
121 { 121 {
122 e->ignore(); 122 e->ignore();
123 } 123 }
124 124
125private slots : 125private slots :
126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); } 126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); }
127}; 127};
128class KOCalCheckButton : public QCheckBox 128class KOCalCheckButton : public QCheckBox
129{ 129{
130 Q_OBJECT 130 Q_OBJECT
131 public: 131 public:
132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) : 132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) :
133 QCheckBox( parent, name) 133 QCheckBox( parent, name)
134 { 134 {
135 connect( this, SIGNAL( toggled ( bool ) ), 135 connect( this, SIGNAL( toggled ( bool ) ),
136 SLOT( bottonClicked( bool ) )); 136 SLOT( bottonClicked( bool ) ));
137 mNumber = -1; 137 mNumber = -1;
138 setFocusPolicy(NoFocus); 138 setFocusPolicy(NoFocus);
139 //setMaximumWidth( 10 ); 139 //setMaximumWidth( 10 );
140 140
141 } 141 }
142 void setNum ( int num ) {mNumber = num; } 142 void setNum ( int num ) {mNumber = num; }
143 signals: 143 signals:
144 void selectNum ( int, bool ); 144 void selectNum ( int, bool );
145private: 145private:
146 int mNumber; 146 int mNumber;
147 void keyPressEvent ( QKeyEvent * e ) 147 void keyPressEvent ( QKeyEvent * e )
148 { 148 {
149 e->ignore(); 149 e->ignore();
150 } 150 }
151 151
152private slots : 152private slots :
153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); } 153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); }
154}; 154};
155 155
156class KOCalRadioButton : public QRadioButton 156class KOCalRadioButton : public QRadioButton
157{ 157{
158 Q_OBJECT 158 Q_OBJECT
159 public: 159 public:
160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) : 160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) :
161 QRadioButton( parent, name) 161 QRadioButton( parent, name)
162 { 162 {
163 connect( this, SIGNAL( toggled ( bool ) ), 163 connect( this, SIGNAL( toggled ( bool ) ),
164 SLOT( bottonClicked( bool ) )); 164 SLOT( bottonClicked( bool ) ));
165 mNumber = -1; 165 mNumber = -1;
166 setFocusPolicy(NoFocus); 166 setFocusPolicy(NoFocus);
167 //setMaximumWidth( 10 ); 167 //setMaximumWidth( 10 );
168 168
169 } 169 }
170 int num() { return mNumber;} 170 int num() { return mNumber;}
171 void setNum ( int num ) {mNumber = num; } 171 void setNum ( int num ) {mNumber = num; }
172 signals: 172 signals:
173 void selectNum ( int ); 173 void selectNum ( int );
174private: 174private:
175 int mNumber; 175 int mNumber;
176 void keyPressEvent ( QKeyEvent * e ) 176 void keyPressEvent ( QKeyEvent * e )
177 { 177 {
178 e->ignore(); 178 e->ignore();
179 } 179 }
180 180
181private slots : 181private slots :
182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); } 182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); }
183}; 183};
184 184
185 185
186 186
187class KOFilterView : public KOFilterView_base 187class KOFilterView : public KOFilterView_base
188{ 188{
189 Q_OBJECT 189 Q_OBJECT
190 public: 190 public:
191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0); 191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0);
192 ~KOFilterView(); 192 ~KOFilterView();
193 193
194 void updateFilters(); 194 void updateFilters();
195 195
196 bool filtersEnabled(); 196 bool filtersEnabled();
197 void setFiltersEnabled(bool); 197 void setFiltersEnabled(bool);
198 CalFilter *selectedFilter(); 198 CalFilter *selectedFilter();
199 void setSelectedFilter(QString); 199 void setSelectedFilter(QString);
200 void setSelectedFilter( int ); 200 void setSelectedFilter( int );
201 201
202 signals: 202 signals:
203 void filterChanged(); 203 void filterChanged();
204 void editFilters(); 204 void editFilters();
205 205
206 private: 206 private:
207 QPtrList<CalFilter> *mFilters; 207 QPtrList<CalFilter> *mFilters;
208}; 208};
209 209
210class KOCalEditView : public QScrollView 210class KOCalEditView : public QScrollView
211{ 211{
212 Q_OBJECT 212 Q_OBJECT
213 public: 213 public:
214 KOCalEditView( QWidget* parent=0,const char* name=0); 214 KOCalEditView( QWidget* parent=0,const char* name=0);
215 ~KOCalEditView(); 215 ~KOCalEditView();
216 int addCalendar( QString calName, QString fileName, bool ask = true ); 216 int addCalendar( QString calName, QString fileName, bool ask = true );
217 int getBirtdayID(); 217 int getBirtdayID();
218 public slots: 218 public slots:
219 void addCal(); 219 void addCal();
220 void enableAll(); 220 void enableAll();
221 void enableAlarm(); 221 void enableAlarm();
222 void disableRO(); 222 void disableRO();
223 void deleteAll(); 223 void deleteAll();
224 void selectStdCal(int); 224 void selectStdCal(int);
225 void selectCal(int,bool ); 225 void selectCal(int,bool );
226 void selectCalAlarm(int,bool ); 226 void selectCalAlarm(int,bool );
227 void selectReadOnly(int,bool ); 227 void selectReadOnly(int,bool );
228 void setColor(const QColor &,int) ; 228 void setColor(const QColor &,int) ;
229 void deleteCal(int) ; 229 void deleteCal(int) ;
230 void infoCal(int) ; 230 void infoCal(int) ;
231 void readConfig(); 231 void readConfig();
232 void defaultInfo(); 232 void defaultInfo();
233 void findNewStandard(); 233 void findNewStandard();
234 signals: 234 signals:
235 void alarmEnabled ( int cal, bool enable ); 235 void alarmEnabled ( int cal, bool enable );
236 void calendarEnabled ( int cal, bool enable ); 236 void calendarEnabled ( int cal, bool enable );
237 void calendarReadonly ( int cal, bool readonly ); 237 void calendarReadonly ( int cal, bool readonly );
238 void setCalendarDefault ( int cal ); 238 void setCalendarDefault ( int cal );
239 void removeCalendar ( int cal ); 239 void removeCalendar ( int cal );
240 void calendarAdded( int ); 240 void calendarAdded( int );
241 void needsUpdate(); 241 void needsUpdate();
242 void checkCalendar(); 242 void checkCalendar();
243 void requestCalendarInfo( int id );
243 244
244 private: 245 private:
245 QWidget *mw; 246 QWidget *mw;
246 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true ); 247 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true );
247 QPtrList<KOCalRadioButton> mStdandardB; 248 QPtrList<KOCalRadioButton> mStdandardB;
248 QPtrList<KOCalCheckButton> mEnabledB; 249 QPtrList<KOCalCheckButton> mEnabledB;
249 QPtrList<KOCalCheckButton> mAlarmB; 250 QPtrList<KOCalCheckButton> mAlarmB;
250 QPtrList<KOCalCheckButton> mROB; 251 QPtrList<KOCalCheckButton> mROB;
251 QGridLayout* mainLayout; 252 QGridLayout* mainLayout;
252}; 253};
253 254
254 255
255 256
256#endif // KOFILTERVIEW_H 257#endif // KOFILTERVIEW_H
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 3f6895d..4b8b3ff 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,380 +1,382 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0; 79 virtual bool mergeCalendarFile( QString name ) = 0;
80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0; 80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0;
81 virtual void setSyncEventsReadOnly() = 0; 81 virtual void setSyncEventsReadOnly() = 0;
82 virtual void stopAllTodos() = 0; 82 virtual void stopAllTodos() = 0;
83 virtual void clearUndo( Incidence * newUndo ); 83 virtual void clearUndo( Incidence * newUndo );
84 84
85 /** 85 /**
86 Sync changes in memory to persistant storage. 86 Sync changes in memory to persistant storage.
87 */ 87 */
88 virtual void save() = 0; 88 virtual void save() = 0;
89 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 89 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
90 virtual void removeSyncInfo( QString syncProfile) = 0; 90 virtual void removeSyncInfo( QString syncProfile) = 0;
91 virtual bool isSaving() { return false; } 91 virtual bool isSaving() { return false; }
92 92
93 /** 93 /**
94 Return the owner of the calendar's full name. 94 Return the owner of the calendar's full name.
95 */ 95 */
96 const QString &getOwner() const; 96 const QString &getOwner() const;
97 /** 97 /**
98 Set the owner of the calendar. Should be owner's full name. 98 Set the owner of the calendar. Should be owner's full name.
99 */ 99 */
100 void setOwner( const QString &os ); 100 void setOwner( const QString &os );
101 /** 101 /**
102 Return the email address of the calendar owner. 102 Return the email address of the calendar owner.
103 */ 103 */
104 const QString &getEmail(); 104 const QString &getEmail();
105 /** 105 /**
106 Set the email address of the calendar owner. 106 Set the email address of the calendar owner.
107 */ 107 */
108 void setEmail( const QString & ); 108 void setEmail( const QString & );
109 109
110 /** 110 /**
111 Set time zone from a timezone string (e.g. -2:00) 111 Set time zone from a timezone string (e.g. -2:00)
112 */ 112 */
113 void setTimeZone( const QString &tz ); 113 void setTimeZone( const QString &tz );
114 /** 114 /**
115 Set time zone from a minutes value (e.g. -60) 115 Set time zone from a minutes value (e.g. -60)
116 */ 116 */
117 void setTimeZone( int tz ); 117 void setTimeZone( int tz );
118 /** 118 /**
119 Return time zone as offest in minutes. 119 Return time zone as offest in minutes.
120 */ 120 */
121 int getTimeZone() const; 121 int getTimeZone() const;
122 /** 122 /**
123 Compute an ISO 8601 format string from the time zone. 123 Compute an ISO 8601 format string from the time zone.
124 */ 124 */
125 QString getTimeZoneStr() const; 125 QString getTimeZoneStr() const;
126 /** 126 /**
127 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 127 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
128 values). 128 values).
129 */ 129 */
130 void setTimeZoneId( const QString & ); 130 void setTimeZoneId( const QString & );
131 /** 131 /**
132 Return time zone id. 132 Return time zone id.
133 */ 133 */
134 QString timeZoneId() const; 134 QString timeZoneId() const;
135 /** 135 /**
136 Use local time, not UTC or a time zone. 136 Use local time, not UTC or a time zone.
137 */ 137 */
138 void setLocalTime(); 138 void setLocalTime();
139 /** 139 /**
140 Return whether local time is being used. 140 Return whether local time is being used.
141 */ 141 */
142 bool isLocalTime() const; 142 bool isLocalTime() const;
143 143
144 /** 144 /**
145 Add an incidence to calendar. 145 Add an incidence to calendar.
146 146
147 @return true on success, false on error. 147 @return true on success, false on error.
148 */ 148 */
149 virtual bool addIncidence( Incidence * ); 149 virtual bool addIncidence( Incidence * );
150 150
151 // Adds an incidence and all relatedto incidences to the cal 151 // Adds an incidence and all relatedto incidences to the cal
152 void addIncidenceBranch( Incidence * ); 152 void addIncidenceBranch( Incidence * );
153 /** 153 /**
154 Return filtered list of all incidences of this calendar. 154 Return filtered list of all incidences of this calendar.
155 */ 155 */
156 virtual QPtrList<Incidence> incidences(); 156 virtual QPtrList<Incidence> incidences();
157 157
158 /** 158 /**
159 Return unfiltered list of all incidences of this calendar. 159 Return unfiltered list of all incidences of this calendar.
160 */ 160 */
161 virtual QPtrList<Incidence> rawIncidences(); 161 virtual QPtrList<Incidence> rawIncidences();
162 162
163 /** 163 /**
164 Adds a Event to this calendar object. 164 Adds a Event to this calendar object.
165 @param anEvent a pointer to the event to add 165 @param anEvent a pointer to the event to add
166 166
167 @return true on success, false on error. 167 @return true on success, false on error.
168 */ 168 */
169 virtual bool addEventNoDup( Event *event ) = 0; 169 virtual bool addEventNoDup( Event *event ) = 0;
170 virtual bool addAnniversaryNoDup( Event *event ) = 0; 170 virtual bool addAnniversaryNoDup( Event *event ) = 0;
171 virtual bool addEvent( Event *anEvent ) = 0; 171 virtual bool addEvent( Event *anEvent ) = 0;
172 /** 172 /**
173 Delete event from calendar. 173 Delete event from calendar.
174 */ 174 */
175 virtual void deleteEvent( Event * ) = 0; 175 virtual void deleteEvent( Event * ) = 0;
176 /** 176 /**
177 Retrieves an event on the basis of the unique string ID. 177 Retrieves an event on the basis of the unique string ID.
178 */ 178 */
179 virtual Event *event( const QString &UniqueStr ) = 0; 179 virtual Event *event( const QString &UniqueStr ) = 0;
180 virtual Event *event( QString, QString ) = 0; 180 virtual Event *event( QString, QString ) = 0;
181 /** 181 /**
182 Builds and then returns a list of all events that match for the 182 Builds and then returns a list of all events that match for the
183 date specified. useful for dayView, etc. etc. 183 date specified. useful for dayView, etc. etc.
184 The calendar filter is applied. 184 The calendar filter is applied.
185 */ 185 */
186 QPtrList<Event> events( const QDate &date, bool sorted = false); 186 QPtrList<Event> events( const QDate &date, bool sorted = false);
187 /** 187 /**
188 Get events, which occur on the given date. 188 Get events, which occur on the given date.
189 The calendar filter is applied. 189 The calendar filter is applied.
190 */ 190 */
191 QPtrList<Event> events( const QDateTime &qdt ); 191 QPtrList<Event> events( const QDateTime &qdt );
192 /** 192 /**
193 Get events in a range of dates. If inclusive is set to true, only events 193 Get events in a range of dates. If inclusive is set to true, only events
194 are returned, which are completely included in the range. 194 are returned, which are completely included in the range.
195 The calendar filter is applied. 195 The calendar filter is applied.
196 */ 196 */
197 QPtrList<Event> events( const QDate &start, const QDate &end, 197 QPtrList<Event> events( const QDate &start, const QDate &end,
198 bool inclusive = false); 198 bool inclusive = false);
199 /** 199 /**
200 Return filtered list of all events in calendar. 200 Return filtered list of all events in calendar.
201 */ 201 */
202 virtual QPtrList<Event> events(); 202 virtual QPtrList<Event> events();
203 /** 203 /**
204 Return unfiltered list of all events in calendar. 204 Return unfiltered list of all events in calendar.
205 */ 205 */
206 virtual QPtrList<Event> rawEvents() = 0; 206 virtual QPtrList<Event> rawEvents() = 0;
207 207
208 /** 208 /**
209 Add a todo to the todolist. 209 Add a todo to the todolist.
210 210
211 @return true on success, false on error. 211 @return true on success, false on error.
212 */ 212 */
213 virtual bool addTodo( Todo *todo ) = 0; 213 virtual bool addTodo( Todo *todo ) = 0;
214 virtual bool addTodoNoDup( Todo *todo ) = 0; 214 virtual bool addTodoNoDup( Todo *todo ) = 0;
215 /** 215 /**
216 Remove a todo from the todolist. 216 Remove a todo from the todolist.
217 */ 217 */
218 virtual void deleteTodo( Todo * ) = 0; 218 virtual void deleteTodo( Todo * ) = 0;
219 virtual void deleteJournal( Journal * ) = 0; 219 virtual void deleteJournal( Journal * ) = 0;
220 /** 220 /**
221 Return filterd list of todos. 221 Return filterd list of todos.
222 */ 222 */
223 virtual QPtrList<Todo> todos(); 223 virtual QPtrList<Todo> todos();
224 /** 224 /**
225 Searches todolist for an event with this unique string identifier, 225 Searches todolist for an event with this unique string identifier,
226 returns a pointer or null. 226 returns a pointer or null.
227 */ 227 */
228 virtual Todo *todo( const QString &uid ) = 0; 228 virtual Todo *todo( const QString &uid ) = 0;
229 virtual Todo *todo( QString, QString ) = 0; 229 virtual Todo *todo( QString, QString ) = 0;
230 /** 230 /**
231 Returns list of todos due on the specified date. 231 Returns list of todos due on the specified date.
232 */ 232 */
233 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 233 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
234 /** 234 /**
235 Return unfiltered list of todos. 235 Return unfiltered list of todos.
236 */ 236 */
237 virtual QPtrList<Todo> rawTodos() = 0; 237 virtual QPtrList<Todo> rawTodos() = 0;
238 238
239 /** 239 /**
240 Add a Journal entry to calendar. 240 Add a Journal entry to calendar.
241 241
242 @return true on success, false on error. 242 @return true on success, false on error.
243 */ 243 */
244 virtual bool addJournal( Journal * ) = 0; 244 virtual bool addJournal( Journal * ) = 0;
245 /** 245 /**
246 Return Journal for given date. 246 Return Journal for given date.
247 */ 247 */
248 virtual Journal *journal( const QDate & ) = 0; 248 virtual Journal *journal( const QDate & ) = 0;
249 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0; 249 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0;
250 /** 250 /**
251 Return Journal with given UID. 251 Return Journal with given UID.
252 */ 252 */
253 virtual Journal *journal( const QString &UID ) = 0; 253 virtual Journal *journal( const QString &UID ) = 0;
254 /** 254 /**
255 Return list of all Journal entries. 255 Return list of all Journal entries.
256 */ 256 */
257 virtual QPtrList<Journal> journals() = 0; 257 virtual QPtrList<Journal> journals() = 0;
258 258
259 /** 259 /**
260 Searches all incidence types for an incidence with this unique 260 Searches all incidence types for an incidence with this unique
261 string identifier, returns a pointer or null. 261 string identifier, returns a pointer or null.
262 */ 262 */
263 Incidence* incidence( const QString&UID ); 263 Incidence* incidence( const QString&UID );
264 264
265 /** 265 /**
266 Setup relations for an incidence. 266 Setup relations for an incidence.
267 */ 267 */
268 virtual void setupRelations( Incidence * ); 268 virtual void setupRelations( Incidence * );
269 /** 269 /**
270 Remove all relations to an incidence 270 Remove all relations to an incidence
271 */ 271 */
272 virtual void removeRelations( Incidence * ); 272 virtual void removeRelations( Incidence * );
273 273
274 /** 274 /**
275 Set calendar filter, which filters events for the events() functions. 275 Set calendar filter, which filters events for the events() functions.
276 The Filter object is owned by the caller. 276 The Filter object is owned by the caller.
277 */ 277 */
278 void setFilter( CalFilter * ); 278 void setFilter( CalFilter * );
279 /** 279 /**
280 Return calendar filter. 280 Return calendar filter.
281 */ 281 */
282 CalFilter *filter(); 282 CalFilter *filter();
283 virtual QDateTime nextAlarm( int daysTo ) = 0; 283 virtual QDateTime nextAlarm( int daysTo ) = 0;
284 virtual QString nextSummary( ) const = 0; 284 virtual QString nextSummary( ) const = 0;
285 virtual void reInitAlarmSettings() = 0; 285 virtual void reInitAlarmSettings() = 0;
286 virtual QDateTime nextAlarmEventDateTime() const = 0; 286 virtual QDateTime nextAlarmEventDateTime() const = 0;
287 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 287 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
288 /** 288 /**
289 Return all alarms, which ocur in the given time interval. 289 Return all alarms, which ocur in the given time interval.
290 */ 290 */
291 virtual Alarm::List alarms( const QDateTime &from, 291 virtual Alarm::List alarms( const QDateTime &from,
292 const QDateTime &to ) = 0; 292 const QDateTime &to ) = 0;
293 293
294 class Observer { 294 class Observer {
295 public: 295 public:
296 virtual void calendarModified( bool, Calendar * ) = 0; 296 virtual void calendarModified( bool, Calendar * ) = 0;
297 }; 297 };
298 298
299 void registerObserver( Observer * ); 299 void registerObserver( Observer * );
300 300
301 void setModified( bool ); 301 void setModified( bool );
302 302
303 /** 303 /**
304 Set product id returned by loadedProductId(). This function is only 304 Set product id returned by loadedProductId(). This function is only
305 useful for the calendar loading code. 305 useful for the calendar loading code.
306 */ 306 */
307 void setLoadedProductId( const QString & ); 307 void setLoadedProductId( const QString & );
308 /** 308 /**
309 Return product id taken from file that has been loaded. Returns 309 Return product id taken from file that has been loaded. Returns
310 QString::null, if no calendar has been loaded. 310 QString::null, if no calendar has been loaded.
311 */ 311 */
312 QString loadedProductId(); 312 QString loadedProductId();
313 int defaultCalendar(); 313 int defaultCalendar();
314 void setDontDeleteIncidencesOnClose (); 314 void setDontDeleteIncidencesOnClose ();
315 public slots: 315 public slots:
316 void setDefaultCalendar( int ); 316 void setDefaultCalendar( int );
317 virtual void setCalendarEnabled( int id, bool enable ) = 0; 317 virtual void setCalendarEnabled( int id, bool enable ) = 0;
318 virtual void setAlarmEnabled( int id, bool enable ) = 0; 318 virtual void setAlarmEnabled( int id, bool enable ) = 0;
319 virtual void setReadOnly( int id, bool enable ) = 0; 319 virtual void setReadOnly( int id, bool enable ) = 0;
320 virtual void setDefaultCalendarEnabledOnly() = 0; 320 virtual void setDefaultCalendarEnabledOnly() = 0;
321 virtual void setCalendarRemove( int id ) = 0; 321 virtual void setCalendarRemove( int id ) = 0;
322 virtual void getIncidenceCount( int calId, int& events, int & todos, int & journals) = 0;
323
322 signals: 324 signals:
323 void calendarChanged(); 325 void calendarChanged();
324 void calendarSaved(); 326 void calendarSaved();
325 void calendarLoaded(); 327 void calendarLoaded();
326 void addAlarm(const QDateTime &qdt, const QString &noti ); 328 void addAlarm(const QDateTime &qdt, const QString &noti );
327 void removeAlarm(const QDateTime &qdt, const QString &noti ); 329 void removeAlarm(const QDateTime &qdt, const QString &noti );
328 330
329 protected: 331 protected:
330 /** 332 /**
331 Get unfiltered events, which occur on the given date. 333 Get unfiltered events, which occur on the given date.
332 */ 334 */
333 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 335 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
334 /** 336 /**
335 Get unfiltered events, which occur on the given date. 337 Get unfiltered events, which occur on the given date.
336 */ 338 */
337 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 339 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
338 bool sorted = false ) = 0; 340 bool sorted = false ) = 0;
339 /** 341 /**
340 Get events in a range of dates. If inclusive is set to true, only events 342 Get events in a range of dates. If inclusive is set to true, only events
341 are returned, which are completely included in the range. 343 are returned, which are completely included in the range.
342 */ 344 */
343 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 345 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
344 bool inclusive = false ) = 0; 346 bool inclusive = false ) = 0;
345 347
346 Incidence *mNextAlarmIncidence; 348 Incidence *mNextAlarmIncidence;
347 Incidence *mUndoIncidence; 349 Incidence *mUndoIncidence;
348 int mDefaultCalendar; 350 int mDefaultCalendar;
349 bool mDeleteIncidencesOnClose; 351 bool mDeleteIncidencesOnClose;
350 352
351private: 353private:
352 void init(); 354 void init();
353 355
354 QString mOwner; // who the calendar belongs to 356 QString mOwner; // who the calendar belongs to
355 QString mOwnerEmail; // email address of the owner 357 QString mOwnerEmail; // email address of the owner
356 int mTimeZone; // timezone OFFSET from GMT (MINUTES) 358 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
357 bool mLocalTime; // use local time, not UTC or a time zone 359 bool mLocalTime; // use local time, not UTC or a time zone
358 360
359 361
360 CalFilter *mFilter; 362 CalFilter *mFilter;
361 CalFilter *mDefaultFilter; 363 CalFilter *mDefaultFilter;
362 364
363 365
364 QString mTimeZoneId; 366 QString mTimeZoneId;
365 367
366 Observer *mObserver; 368 Observer *mObserver;
367 bool mNewObserver; 369 bool mNewObserver;
368 370
369 bool mModified; 371 bool mModified;
370 372
371 QString mLoadedProductId; 373 QString mLoadedProductId;
372 374
373 // This list is used to put together related todos 375 // This list is used to put together related todos
374 QDict<Incidence> mOrphans; 376 QDict<Incidence> mOrphans;
375 QDict<Incidence> mOrphanUids; 377 QDict<Incidence> mOrphanUids;
376}; 378};
377 379
378} 380}
379 381
380#endif 382#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 1a1c6be..0ddfeca 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,981 +1,1005 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 registerObserver( 0 ); 68 registerObserver( 0 );
69 if ( mDeleteIncidencesOnClose ) 69 if ( mDeleteIncidencesOnClose )
70 close(); 70 close();
71} 71}
72bool CalendarLocal::mergeCalendarFile( QString name ) 72bool CalendarLocal::mergeCalendarFile( QString name )
73{ 73{
74 CalendarLocal calendar( timeZoneId() ); 74 CalendarLocal calendar( timeZoneId() );
75 calendar.setDefaultCalendar( 1 ); 75 calendar.setDefaultCalendar( 1 );
76 if ( calendar.load( name ) ) { 76 if ( calendar.load( name ) ) {
77 mergeCalendar( &calendar ); 77 mergeCalendar( &calendar );
78 return true; 78 return true;
79 } 79 }
80 return false; 80 return false;
81} 81}
82 82
83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates) 83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates)
84{ 84{
85 Todo *todo;; 85 Todo *todo;;
86 Incidence *retVal = 0; 86 Incidence *retVal = 0;
87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
88 if ( todo->uid() == uid ) { 88 if ( todo->uid() == uid ) {
89 if ( doNotCheckDuplicates ) return todo; 89 if ( doNotCheckDuplicates ) return todo;
90 if ( retVal ) { 90 if ( retVal ) {
91 if ( retVal->calID() > todo->calID() ) { 91 if ( retVal->calID() > todo->calID() ) {
92 retVal = todo; 92 retVal = todo;
93 } 93 }
94 } else { 94 } else {
95 retVal = todo; 95 retVal = todo;
96 } 96 }
97 } 97 }
98 } 98 }
99 if ( retVal ) return retVal; 99 if ( retVal ) return retVal;
100 Event *event; 100 Event *event;
101 for ( event = mEventList.first(); event; event = mEventList.next() ) { 101 for ( event = mEventList.first(); event; event = mEventList.next() ) {
102 if ( event->uid() == uid ) { 102 if ( event->uid() == uid ) {
103 if ( doNotCheckDuplicates ) return event; 103 if ( doNotCheckDuplicates ) return event;
104 if ( retVal ) { 104 if ( retVal ) {
105 if ( retVal->calID() > event->calID() ) { 105 if ( retVal->calID() > event->calID() ) {
106 retVal = event; 106 retVal = event;
107 } 107 }
108 } else { 108 } else {
109 retVal = event; 109 retVal = event;
110 } 110 }
111 } 111 }
112 } 112 }
113 if ( retVal ) return retVal; 113 if ( retVal ) return retVal;
114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
115 if ( it->uid() == uid ) { 115 if ( it->uid() == uid ) {
116 if ( doNotCheckDuplicates ) return it; 116 if ( doNotCheckDuplicates ) return it;
117 if ( retVal ) { 117 if ( retVal ) {
118 if ( retVal->calID() > it->calID() ) { 118 if ( retVal->calID() > it->calID() ) {
119 retVal = it; 119 retVal = it;
120 } 120 }
121 } else { 121 } else {
122 retVal = it; 122 retVal = it;
123 } 123 }
124 } 124 }
125 return retVal; 125 return retVal;
126} 126}
127 127
128bool CalendarLocal::mergeCalendar( Calendar* remote ) 128bool CalendarLocal::mergeCalendar( Calendar* remote )
129{ 129{
130 // 1 look for raw inc in local 130 // 1 look for raw inc in local
131 // if inc not in remote, delete in local 131 // if inc not in remote, delete in local
132 // 2 look for raw inc in remote 132 // 2 look for raw inc in remote
133 // if inc in local, replace it 133 // if inc in local, replace it
134 // if not in local, add it to default calendar 134 // if not in local, add it to default calendar
135 QPtrList<Incidence> localInc = rawIncidences(); 135 QPtrList<Incidence> localInc = rawIncidences();
136 Incidence* inL = localInc.first(); 136 Incidence* inL = localInc.first();
137 while ( inL ) { 137 while ( inL ) {
138 if ( ! inL->isReadOnly () ) 138 if ( ! inL->isReadOnly () )
139 if ( !remote->incidenceForUid( inL->uid(), true )) 139 if ( !remote->incidenceForUid( inL->uid(), true ))
140 deleteIncidence( inL ); 140 deleteIncidence( inL );
141 inL = localInc.next(); 141 inL = localInc.next();
142 } 142 }
143 QPtrList<Incidence> er = remote->rawIncidences(); 143 QPtrList<Incidence> er = remote->rawIncidences();
144 Incidence* inR = er.first(); 144 Incidence* inR = er.first();
145 while ( inR ) { 145 while ( inR ) {
146 inL = incidenceForUid( inR->uid(),false ); 146 inL = incidenceForUid( inR->uid(),false );
147 if ( inL ) { 147 if ( inL ) {
148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) { 148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) {
149 int calID = inL->calID(); 149 int calID = inL->calID();
150 deleteIncidence( inL ); 150 deleteIncidence( inL );
151 inL = inR->clone(); 151 inL = inR->clone();
152 inL->setCalID( calID ); 152 inL->setCalID( calID );
153 addIncidence( inL ); 153 addIncidence( inL );
154 } 154 }
155 } else { 155 } else {
156 inL = inR->clone(); 156 inL = inR->clone();
157 inL->setCalID( 0 );// add to default cal 157 inL->setCalID( 0 );// add to default cal
158 addIncidence( inL ); 158 addIncidence( inL );
159 } 159 }
160 inR = er.next(); 160 inR = er.next();
161 } 161 }
162 return true; 162 return true;
163} 163}
164 164
165 165
166bool CalendarLocal::addCalendarFile( QString name, int id ) 166bool CalendarLocal::addCalendarFile( QString name, int id )
167{ 167{
168 CalendarLocal calendar( timeZoneId() ); 168 CalendarLocal calendar( timeZoneId() );
169 calendar.setDefaultCalendar( id ); 169 calendar.setDefaultCalendar( id );
170 if ( calendar.load( name ) ) { 170 if ( calendar.load( name ) ) {
171 addCalendar( &calendar ); 171 addCalendar( &calendar );
172 return true; 172 return true;
173 } 173 }
174 return false; 174 return false;
175} 175}
176void CalendarLocal::setSyncEventsReadOnly() 176void CalendarLocal::setSyncEventsReadOnly()
177{ 177{
178 Event * ev; 178 Event * ev;
179 ev = mEventList.first(); 179 ev = mEventList.first();
180 while ( ev ) { 180 while ( ev ) {
181 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 181 if ( ev->uid().left(15) == QString("last-syncEvent-") )
182 ev->setReadOnly( true ); 182 ev->setReadOnly( true );
183 ev = mEventList.next(); 183 ev = mEventList.next();
184 } 184 }
185} 185}
186void CalendarLocal::addCalendar( Calendar* cal ) 186void CalendarLocal::addCalendar( Calendar* cal )
187{ 187{
188 cal->setDontDeleteIncidencesOnClose(); 188 cal->setDontDeleteIncidencesOnClose();
189 { 189 {
190 QPtrList<Event> EventList = cal->rawEvents(); 190 QPtrList<Event> EventList = cal->rawEvents();
191 Event * ev = EventList.first(); 191 Event * ev = EventList.first();
192 while ( ev ) { 192 while ( ev ) {
193 ev->unRegisterObserver( cal ); 193 ev->unRegisterObserver( cal );
194 ev->registerObserver( this ); 194 ev->registerObserver( this );
195 mEventList.append( ev ); 195 mEventList.append( ev );
196 ev = EventList.next(); 196 ev = EventList.next();
197 } 197 }
198 } 198 }
199 { 199 {
200 200
201 QPtrList<Todo> TodoList = cal->rawTodos(); 201 QPtrList<Todo> TodoList = cal->rawTodos();
202 Todo * ev = TodoList.first(); 202 Todo * ev = TodoList.first();
203 while ( ev ) { 203 while ( ev ) {
204 QString rel = ev->relatedToUid(); 204 QString rel = ev->relatedToUid();
205 if ( !rel.isEmpty() ){ 205 if ( !rel.isEmpty() ){
206 ev->setRelatedTo ( 0 ); 206 ev->setRelatedTo ( 0 );
207 ev->setRelatedToUid( rel ); 207 ev->setRelatedToUid( rel );
208 } 208 }
209 ev = TodoList.next(); 209 ev = TodoList.next();
210 } 210 }
211 //TodoList = cal->rawTodos(); 211 //TodoList = cal->rawTodos();
212 ev = TodoList.first(); 212 ev = TodoList.first();
213 while ( ev ) { 213 while ( ev ) {
214 ev->unRegisterObserver( cal ); 214 ev->unRegisterObserver( cal );
215 ev->registerObserver( this ); 215 ev->registerObserver( this );
216 mTodoList.append( ev ); 216 mTodoList.append( ev );
217 setupRelations( ev ); 217 setupRelations( ev );
218 ev = TodoList.next(); 218 ev = TodoList.next();
219 } 219 }
220 } 220 }
221 { 221 {
222 QPtrList<Journal> JournalList = cal->journals(); 222 QPtrList<Journal> JournalList = cal->journals();
223 Journal * ev = JournalList.first(); 223 Journal * ev = JournalList.first();
224 while ( ev ) { 224 while ( ev ) {
225 ev->unRegisterObserver( cal ); 225 ev->unRegisterObserver( cal );
226 ev->registerObserver( this ); 226 ev->registerObserver( this );
227 mJournalList.append( ev ); 227 mJournalList.append( ev );
228 ev = JournalList.next(); 228 ev = JournalList.next();
229 } 229 }
230 } 230 }
231 setModified( true ); 231 setModified( true );
232} 232}
233bool CalendarLocal::load( const QString &fileName ) 233bool CalendarLocal::load( const QString &fileName )
234{ 234{
235 FileStorage storage( this, fileName ); 235 FileStorage storage( this, fileName );
236 return storage.load(); 236 return storage.load();
237} 237}
238 238
239bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 239bool CalendarLocal::save( const QString &fileName, CalFormat *format )
240{ 240{
241 FileStorage storage( this, fileName, format ); 241 FileStorage storage( this, fileName, format );
242 return storage.save(); 242 return storage.save();
243} 243}
244 244
245void CalendarLocal::stopAllTodos() 245void CalendarLocal::stopAllTodos()
246{ 246{
247 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 247 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
248 it->setRunning( false ); 248 it->setRunning( false );
249 249
250} 250}
251void CalendarLocal::close() 251void CalendarLocal::close()
252{ 252{
253 253
254 Todo * i; 254 Todo * i;
255 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 255 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
256 256
257 mEventList.setAutoDelete( true ); 257 mEventList.setAutoDelete( true );
258 mTodoList.setAutoDelete( true ); 258 mTodoList.setAutoDelete( true );
259 mJournalList.setAutoDelete( true ); 259 mJournalList.setAutoDelete( true );
260 260
261 mEventList.clear(); 261 mEventList.clear();
262 mTodoList.clear(); 262 mTodoList.clear();
263 mJournalList.clear(); 263 mJournalList.clear();
264 264
265 mEventList.setAutoDelete( false ); 265 mEventList.setAutoDelete( false );
266 mTodoList.setAutoDelete( false ); 266 mTodoList.setAutoDelete( false );
267 mJournalList.setAutoDelete( false ); 267 mJournalList.setAutoDelete( false );
268 268
269 setModified( false ); 269 setModified( false );
270} 270}
271 271
272bool CalendarLocal::addAnniversaryNoDup( Event *event ) 272bool CalendarLocal::addAnniversaryNoDup( Event *event )
273{ 273{
274 QString cat; 274 QString cat;
275 bool isBirthday = true; 275 bool isBirthday = true;
276 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 276 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
277 isBirthday = false; 277 isBirthday = false;
278 cat = i18n( "Anniversary" ); 278 cat = i18n( "Anniversary" );
279 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 279 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
280 isBirthday = true; 280 isBirthday = true;
281 cat = i18n( "Birthday" ); 281 cat = i18n( "Birthday" );
282 } else { 282 } else {
283 qDebug("addAnniversaryNoDup called without fitting category! "); 283 qDebug("addAnniversaryNoDup called without fitting category! ");
284 return false; 284 return false;
285 } 285 }
286 Event * eve; 286 Event * eve;
287 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 287 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
288 if ( !(eve->categories().contains( cat ) )) 288 if ( !(eve->categories().contains( cat ) ))
289 continue; 289 continue;
290 // now we have an event with fitting category 290 // now we have an event with fitting category
291 if ( eve->dtStart().date() != event->dtStart().date() ) 291 if ( eve->dtStart().date() != event->dtStart().date() )
292 continue; 292 continue;
293 // now we have an event with fitting category+date 293 // now we have an event with fitting category+date
294 if ( eve->summary() != event->summary() ) 294 if ( eve->summary() != event->summary() )
295 continue; 295 continue;
296 // now we have an event with fitting category+date+summary 296 // now we have an event with fitting category+date+summary
297 return false; 297 return false;
298 } 298 }
299 return addEvent( event ); 299 return addEvent( event );
300 300
301} 301}
302bool CalendarLocal::addEventNoDup( Event *event ) 302bool CalendarLocal::addEventNoDup( Event *event )
303{ 303{
304 Event * eve; 304 Event * eve;
305 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 305 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
306 if ( *eve == *event ) { 306 if ( *eve == *event ) {
307 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 307 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
308 return false; 308 return false;
309 } 309 }
310 } 310 }
311 return addEvent( event ); 311 return addEvent( event );
312} 312}
313 313
314bool CalendarLocal::addEvent( Event *event ) 314bool CalendarLocal::addEvent( Event *event )
315{ 315{
316 insertEvent( event ); 316 insertEvent( event );
317 317
318 event->registerObserver( this ); 318 event->registerObserver( this );
319 319
320 setModified( true ); 320 setModified( true );
321 if ( event->calID() == 0 ) 321 if ( event->calID() == 0 )
322 event->setCalID( mDefaultCalendar ); 322 event->setCalID( mDefaultCalendar );
323 event->setCalEnabled( true ); 323 event->setCalEnabled( true );
324 324
325 return true; 325 return true;
326} 326}
327 327
328void CalendarLocal::deleteEvent( Event *event ) 328void CalendarLocal::deleteEvent( Event *event )
329{ 329{
330 clearUndo(event); 330 clearUndo(event);
331 if ( mEventList.removeRef( event ) ) { 331 if ( mEventList.removeRef( event ) ) {
332 setModified( true ); 332 setModified( true );
333 } 333 }
334} 334}
335 335
336 336
337Event *CalendarLocal::event( const QString &uid ) 337Event *CalendarLocal::event( const QString &uid )
338{ 338{
339 Event *event; 339 Event *event;
340 Event *retVal = 0; 340 Event *retVal = 0;
341 for ( event = mEventList.first(); event; event = mEventList.next() ) { 341 for ( event = mEventList.first(); event; event = mEventList.next() ) {
342 if ( event->calEnabled() && event->uid() == uid ) { 342 if ( event->calEnabled() && event->uid() == uid ) {
343 if ( retVal ) { 343 if ( retVal ) {
344 if ( retVal->calID() > event->calID() ) { 344 if ( retVal->calID() > event->calID() ) {
345 retVal = event; 345 retVal = event;
346 } 346 }
347 } else { 347 } else {
348 retVal = event; 348 retVal = event;
349 } 349 }
350 } 350 }
351 } 351 }
352 return retVal; 352 return retVal;
353} 353}
354bool CalendarLocal::addTodoNoDup( Todo *todo ) 354bool CalendarLocal::addTodoNoDup( Todo *todo )
355{ 355{
356 Todo * eve; 356 Todo * eve;
357 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 357 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
358 if ( *eve == *todo ) { 358 if ( *eve == *todo ) {
359 //qDebug("duplicate todo found! not inserted! "); 359 //qDebug("duplicate todo found! not inserted! ");
360 return false; 360 return false;
361 } 361 }
362 } 362 }
363 return addTodo( todo ); 363 return addTodo( todo );
364} 364}
365bool CalendarLocal::addTodo( Todo *todo ) 365bool CalendarLocal::addTodo( Todo *todo )
366{ 366{
367 mTodoList.append( todo ); 367 mTodoList.append( todo );
368 368
369 todo->registerObserver( this ); 369 todo->registerObserver( this );
370 370
371 // Set up subtask relations 371 // Set up subtask relations
372 setupRelations( todo ); 372 setupRelations( todo );
373 373
374 setModified( true ); 374 setModified( true );
375 if ( todo->calID() == 0 ) 375 if ( todo->calID() == 0 )
376 todo->setCalID( mDefaultCalendar ); 376 todo->setCalID( mDefaultCalendar );
377 todo->setCalEnabled( true ); 377 todo->setCalEnabled( true );
378 return true; 378 return true;
379} 379}
380 380
381void CalendarLocal::deleteTodo( Todo *todo ) 381void CalendarLocal::deleteTodo( Todo *todo )
382{ 382{
383 // Handle orphaned children 383 // Handle orphaned children
384 removeRelations( todo ); 384 removeRelations( todo );
385 clearUndo(todo); 385 clearUndo(todo);
386 386
387 if ( mTodoList.removeRef( todo ) ) { 387 if ( mTodoList.removeRef( todo ) ) {
388 setModified( true ); 388 setModified( true );
389 } 389 }
390} 390}
391 391
392QPtrList<Todo> CalendarLocal::rawTodos() 392QPtrList<Todo> CalendarLocal::rawTodos()
393{ 393{
394 QPtrList<Todo> el; 394 QPtrList<Todo> el;
395 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 395 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
396 if ( it->calEnabled() ) el.append( it ); 396 if ( it->calEnabled() ) el.append( it );
397 return el; 397 return el;
398} 398}
399Todo *CalendarLocal::todo( QString syncProf, QString id ) 399Todo *CalendarLocal::todo( QString syncProf, QString id )
400{ 400{
401 Todo *todo; 401 Todo *todo;
402 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 402 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
403 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 403 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
404 } 404 }
405 405
406 return 0; 406 return 0;
407} 407}
408void CalendarLocal::removeSyncInfo( QString syncProfile) 408void CalendarLocal::removeSyncInfo( QString syncProfile)
409{ 409{
410 QPtrList<Incidence> all = rawIncidences() ; 410 QPtrList<Incidence> all = rawIncidences() ;
411 Incidence *inc; 411 Incidence *inc;
412 for ( inc = all.first(); inc; inc = all.next() ) { 412 for ( inc = all.first(); inc; inc = all.next() ) {
413 inc->removeID( syncProfile ); 413 inc->removeID( syncProfile );
414 } 414 }
415 if ( syncProfile.isEmpty() ) { 415 if ( syncProfile.isEmpty() ) {
416 QPtrList<Event> el; 416 QPtrList<Event> el;
417 Event *todo; 417 Event *todo;
418 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 418 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
419 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 419 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
420 el.append( todo ); 420 el.append( todo );
421 } 421 }
422 for ( todo = el.first(); todo; todo = el.next() ) { 422 for ( todo = el.first(); todo; todo = el.next() ) {
423 deleteIncidence ( todo ); 423 deleteIncidence ( todo );
424 } 424 }
425 } else { 425 } else {
426 Event *lse = event( "last-syncEvent-"+ syncProfile); 426 Event *lse = event( "last-syncEvent-"+ syncProfile);
427 if ( lse ) 427 if ( lse )
428 deleteIncidence ( lse ); 428 deleteIncidence ( lse );
429 } 429 }
430} 430}
431QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 431QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
432{ 432{
433 QPtrList<Event> el; 433 QPtrList<Event> el;
434 Event *todo; 434 Event *todo;
435 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 435 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
436 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 436 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
437 if ( todo->summary().left(3) == "E: " ) 437 if ( todo->summary().left(3) == "E: " )
438 el.append( todo ); 438 el.append( todo );
439 } 439 }
440 440
441 return el; 441 return el;
442 442
443} 443}
444Event *CalendarLocal::event( QString syncProf, QString id ) 444Event *CalendarLocal::event( QString syncProf, QString id )
445{ 445{
446 Event *todo; 446 Event *todo;
447 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 447 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
448 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 448 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
449 } 449 }
450 450
451 return 0; 451 return 0;
452} 452}
453Todo *CalendarLocal::todo( const QString &uid ) 453Todo *CalendarLocal::todo( const QString &uid )
454{ 454{
455 Todo *todo;; 455 Todo *todo;
456 Todo *retVal = 0; 456 Todo *retVal = 0;
457 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 457 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
458 if ( todo->calEnabled() && todo->uid() == uid ) { 458 if ( todo->calEnabled() && todo->uid() == uid ) {
459 if ( retVal ) { 459 if ( retVal ) {
460 if ( retVal->calID() > todo->calID() ) { 460 if ( retVal->calID() > todo->calID() ) {
461 retVal = todo; 461 retVal = todo;
462 } 462 }
463 } else { 463 } else {
464 retVal = todo; 464 retVal = todo;
465 } 465 }
466 } 466 }
467 } 467 }
468 return retVal; 468 return retVal;
469} 469}
470void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals)
471{
472 events = 0;
473 todos = 0;
474 journals = 0;
475 {
476 Todo *todo;
477 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
478 if ( todo->calID() == calId )
479 ++todos;
480 }
481 }
482 {
483 Event *todo;
484 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
485 if ( todo->calID() == calId )
486 ++events;
487
488 }
489 }
490 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
491 if ( it->calID() == calId ) ++journals;
492
493}
470QString CalendarLocal::nextSummary() const 494QString CalendarLocal::nextSummary() const
471{ 495{
472 return mNextSummary; 496 return mNextSummary;
473} 497}
474QDateTime CalendarLocal::nextAlarmEventDateTime() const 498QDateTime CalendarLocal::nextAlarmEventDateTime() const
475{ 499{
476 return mNextAlarmEventDateTime; 500 return mNextAlarmEventDateTime;
477} 501}
478void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 502void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
479{ 503{
480 //mNextAlarmIncidence 504 //mNextAlarmIncidence
481 //mNextAlarmDateTime 505 //mNextAlarmDateTime
482 //return mNextSummary; 506 //return mNextSummary;
483 //return mNextAlarmEventDateTime; 507 //return mNextAlarmEventDateTime;
484 bool newNextAlarm = false; 508 bool newNextAlarm = false;
485 bool computeNextAlarm = false; 509 bool computeNextAlarm = false;
486 bool ok; 510 bool ok;
487 int offset; 511 int offset;
488 QDateTime nextA; 512 QDateTime nextA;
489 // QString nextSum; 513 // QString nextSum;
490 //QDateTime nextEvent; 514 //QDateTime nextEvent;
491 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 515 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
492 computeNextAlarm = true; 516 computeNextAlarm = true;
493 } else { 517 } else {
494 if ( ! deleted ) { 518 if ( ! deleted ) {
495 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 519 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
496 if ( ok ) { 520 if ( ok ) {
497 if ( nextA < mNextAlarmDateTime ) { 521 if ( nextA < mNextAlarmDateTime ) {
498 deRegisterAlarm(); 522 deRegisterAlarm();
499 mNextAlarmDateTime = nextA; 523 mNextAlarmDateTime = nextA;
500 mNextSummary = incidence->summary(); 524 mNextSummary = incidence->summary();
501 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 525 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
502 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 526 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
503 newNextAlarm = true; 527 newNextAlarm = true;
504 mNextAlarmIncidence = incidence; 528 mNextAlarmIncidence = incidence;
505 } else { 529 } else {
506 if ( incidence == mNextAlarmIncidence ) { 530 if ( incidence == mNextAlarmIncidence ) {
507 computeNextAlarm = true; 531 computeNextAlarm = true;
508 } 532 }
509 } 533 }
510 } else { 534 } else {
511 if ( mNextAlarmIncidence == incidence ) { 535 if ( mNextAlarmIncidence == incidence ) {
512 computeNextAlarm = true; 536 computeNextAlarm = true;
513 } 537 }
514 } 538 }
515 } else { // deleted 539 } else { // deleted
516 if ( incidence == mNextAlarmIncidence ) { 540 if ( incidence == mNextAlarmIncidence ) {
517 computeNextAlarm = true; 541 computeNextAlarm = true;
518 } 542 }
519 } 543 }
520 } 544 }
521 if ( computeNextAlarm ) { 545 if ( computeNextAlarm ) {
522 deRegisterAlarm(); 546 deRegisterAlarm();
523 nextA = nextAlarm( 1000 ); 547 nextA = nextAlarm( 1000 );
524 if (! mNextAlarmIncidence ) { 548 if (! mNextAlarmIncidence ) {
525 return; 549 return;
526 } 550 }
527 newNextAlarm = true; 551 newNextAlarm = true;
528 } 552 }
529 if ( newNextAlarm ) 553 if ( newNextAlarm )
530 registerAlarm(); 554 registerAlarm();
531} 555}
532QString CalendarLocal:: getAlarmNotification() 556QString CalendarLocal:: getAlarmNotification()
533{ 557{
534 QString ret; 558 QString ret;
535 // this should not happen 559 // this should not happen
536 if (! mNextAlarmIncidence ) 560 if (! mNextAlarmIncidence )
537 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 561 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
538 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 562 Alarm* alarm = mNextAlarmIncidence->alarms().first();
539 if ( alarm->type() == Alarm::Procedure ) { 563 if ( alarm->type() == Alarm::Procedure ) {
540 ret = "proc_alarm" + alarm->programFile()+"+++"; 564 ret = "proc_alarm" + alarm->programFile()+"+++";
541 } else { 565 } else {
542 ret = "audio_alarm" +alarm->audioFile() +"+++"; 566 ret = "audio_alarm" +alarm->audioFile() +"+++";
543 } 567 }
544 ret += "cal_alarm"+ mNextSummary.left( 25 ); 568 ret += "cal_alarm"+ mNextSummary.left( 25 );
545 if ( mNextSummary.length() > 25 ) 569 if ( mNextSummary.length() > 25 )
546 ret += "\n" + mNextSummary.mid(25, 25 ); 570 ret += "\n" + mNextSummary.mid(25, 25 );
547 ret+= "\n"+mNextAlarmEventDateTimeString; 571 ret+= "\n"+mNextAlarmEventDateTimeString;
548 return ret; 572 return ret;
549} 573}
550void CalendarLocal::registerAlarm() 574void CalendarLocal::registerAlarm()
551{ 575{
552 mLastAlarmNotificationString = getAlarmNotification(); 576 mLastAlarmNotificationString = getAlarmNotification();
553 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 577 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
554 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 578 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
555// #ifndef DESKTOP_VERSION 579// #ifndef DESKTOP_VERSION
556// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 580// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
557// #endif 581// #endif
558} 582}
559void CalendarLocal::deRegisterAlarm() 583void CalendarLocal::deRegisterAlarm()
560{ 584{
561 if ( mLastAlarmNotificationString.isNull() ) 585 if ( mLastAlarmNotificationString.isNull() )
562 return; 586 return;
563 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 587 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
564 588
565 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 589 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
566 mNextAlarmEventDateTime = QDateTime(); 590 mNextAlarmEventDateTime = QDateTime();
567// #ifndef DESKTOP_VERSION 591// #ifndef DESKTOP_VERSION
568// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 592// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
569// #endif 593// #endif
570} 594}
571 595
572QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 596QPtrList<Todo> CalendarLocal::todos( const QDate &date )
573{ 597{
574 QPtrList<Todo> todos; 598 QPtrList<Todo> todos;
575 599
576 Todo *todo; 600 Todo *todo;
577 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 601 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
578 if ( !todo->calEnabled() ) continue; 602 if ( !todo->calEnabled() ) continue;
579 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 603 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
580 todos.append( todo ); 604 todos.append( todo );
581 } 605 }
582 } 606 }
583 607
584 filter()->apply( &todos ); 608 filter()->apply( &todos );
585 return todos; 609 return todos;
586} 610}
587void CalendarLocal::reInitAlarmSettings() 611void CalendarLocal::reInitAlarmSettings()
588{ 612{
589 if ( !mNextAlarmIncidence ) { 613 if ( !mNextAlarmIncidence ) {
590 nextAlarm( 1000 ); 614 nextAlarm( 1000 );
591 } 615 }
592 deRegisterAlarm(); 616 deRegisterAlarm();
593 mNextAlarmIncidence = 0; 617 mNextAlarmIncidence = 0;
594 checkAlarmForIncidence( 0, false ); 618 checkAlarmForIncidence( 0, false );
595 619
596} 620}
597 621
598 622
599 623
600QDateTime CalendarLocal::nextAlarm( int daysTo ) 624QDateTime CalendarLocal::nextAlarm( int daysTo )
601{ 625{
602 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 626 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
603 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 627 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
604 QDateTime next; 628 QDateTime next;
605 Event *e; 629 Event *e;
606 bool ok; 630 bool ok;
607 bool found = false; 631 bool found = false;
608 int offset; 632 int offset;
609 mNextAlarmIncidence = 0; 633 mNextAlarmIncidence = 0;
610 for( e = mEventList.first(); e; e = mEventList.next() ) { 634 for( e = mEventList.first(); e; e = mEventList.next() ) {
611 if ( !e->calEnabled() ) continue; 635 if ( !e->calEnabled() ) continue;
612 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 636 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
613 if ( ok ) { 637 if ( ok ) {
614 if ( next < nextA ) { 638 if ( next < nextA ) {
615 nextA = next; 639 nextA = next;
616 found = true; 640 found = true;
617 mNextSummary = e->summary(); 641 mNextSummary = e->summary();
618 mNextAlarmEventDateTime = next.addSecs(offset ) ; 642 mNextAlarmEventDateTime = next.addSecs(offset ) ;
619 mNextAlarmIncidence = (Incidence *) e; 643 mNextAlarmIncidence = (Incidence *) e;
620 } 644 }
621 } 645 }
622 } 646 }
623 Todo *t; 647 Todo *t;
624 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 648 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
625 if ( !t->calEnabled() ) continue; 649 if ( !t->calEnabled() ) continue;
626 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 650 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
627 if ( ok ) { 651 if ( ok ) {
628 if ( next < nextA ) { 652 if ( next < nextA ) {
629 nextA = next; 653 nextA = next;
630 found = true; 654 found = true;
631 mNextSummary = t->summary(); 655 mNextSummary = t->summary();
632 mNextAlarmEventDateTime = next.addSecs(offset ); 656 mNextAlarmEventDateTime = next.addSecs(offset );
633 mNextAlarmIncidence = (Incidence *) t; 657 mNextAlarmIncidence = (Incidence *) t;
634 } 658 }
635 } 659 }
636 } 660 }
637 if ( mNextAlarmIncidence ) { 661 if ( mNextAlarmIncidence ) {
638 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 662 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
639 mNextAlarmDateTime = nextA; 663 mNextAlarmDateTime = nextA;
640 } 664 }
641 return nextA; 665 return nextA;
642} 666}
643Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 667Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
644{ 668{
645 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 669 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
646} 670}
647 671
648Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 672Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
649{ 673{
650 674
651 Alarm::List alarms; 675 Alarm::List alarms;
652 676
653 Event *e; 677 Event *e;
654 678
655 for( e = mEventList.first(); e; e = mEventList.next() ) { 679 for( e = mEventList.first(); e; e = mEventList.next() ) {
656 if ( !e->calEnabled() ) continue; 680 if ( !e->calEnabled() ) continue;
657 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 681 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
658 else appendAlarms( alarms, e, from, to ); 682 else appendAlarms( alarms, e, from, to );
659 } 683 }
660 684
661 Todo *t; 685 Todo *t;
662 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 686 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
663 if ( !t->calEnabled() ) continue; 687 if ( !t->calEnabled() ) continue;
664 appendAlarms( alarms, t, from, to ); 688 appendAlarms( alarms, t, from, to );
665 } 689 }
666 690
667 return alarms; 691 return alarms;
668} 692}
669 693
670void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 694void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
671 const QDateTime &from, const QDateTime &to ) 695 const QDateTime &from, const QDateTime &to )
672{ 696{
673 QPtrList<Alarm> alarmList = incidence->alarms(); 697 QPtrList<Alarm> alarmList = incidence->alarms();
674 Alarm *alarm; 698 Alarm *alarm;
675 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 699 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
676// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 700// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
677// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 701// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
678 if ( alarm->enabled() ) { 702 if ( alarm->enabled() ) {
679 if ( alarm->time() >= from && alarm->time() <= to ) { 703 if ( alarm->time() >= from && alarm->time() <= to ) {
680 alarms.append( alarm ); 704 alarms.append( alarm );
681 } 705 }
682 } 706 }
683 } 707 }
684} 708}
685 709
686void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 710void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
687 Incidence *incidence, 711 Incidence *incidence,
688 const QDateTime &from, 712 const QDateTime &from,
689 const QDateTime &to ) 713 const QDateTime &to )
690{ 714{
691 715
692 QPtrList<Alarm> alarmList = incidence->alarms(); 716 QPtrList<Alarm> alarmList = incidence->alarms();
693 Alarm *alarm; 717 Alarm *alarm;
694 QDateTime qdt; 718 QDateTime qdt;
695 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 719 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
696 if (incidence->recursOn(from.date())) { 720 if (incidence->recursOn(from.date())) {
697 qdt.setTime(alarm->time().time()); 721 qdt.setTime(alarm->time().time());
698 qdt.setDate(from.date()); 722 qdt.setDate(from.date());
699 } 723 }
700 else qdt = alarm->time(); 724 else qdt = alarm->time();
701 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 725 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
702 if ( alarm->enabled() ) { 726 if ( alarm->enabled() ) {
703 if ( qdt >= from && qdt <= to ) { 727 if ( qdt >= from && qdt <= to ) {
704 alarms.append( alarm ); 728 alarms.append( alarm );
705 } 729 }
706 } 730 }
707 } 731 }
708} 732}
709 733
710 734
711/****************************** PROTECTED METHODS ****************************/ 735/****************************** PROTECTED METHODS ****************************/
712 736
713// after changes are made to an event, this should be called. 737// after changes are made to an event, this should be called.
714void CalendarLocal::update( IncidenceBase *incidence ) 738void CalendarLocal::update( IncidenceBase *incidence )
715{ 739{
716 incidence->setSyncStatus( Event::SYNCMOD ); 740 incidence->setSyncStatus( Event::SYNCMOD );
717 incidence->setLastModified( QDateTime::currentDateTime() ); 741 incidence->setLastModified( QDateTime::currentDateTime() );
718 // we should probably update the revision number here, 742 // we should probably update the revision number here,
719 // or internally in the Event itself when certain things change. 743 // or internally in the Event itself when certain things change.
720 // need to verify with ical documentation. 744 // need to verify with ical documentation.
721 745
722 setModified( true ); 746 setModified( true );
723} 747}
724 748
725void CalendarLocal::insertEvent( Event *event ) 749void CalendarLocal::insertEvent( Event *event )
726{ 750{
727 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 751 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
728} 752}
729 753
730 754
731QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 755QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
732{ 756{
733 QPtrList<Event> eventList; 757 QPtrList<Event> eventList;
734 758
735 Event *event; 759 Event *event;
736 for( event = mEventList.first(); event; event = mEventList.next() ) { 760 for( event = mEventList.first(); event; event = mEventList.next() ) {
737 if ( !event->calEnabled() ) continue; 761 if ( !event->calEnabled() ) continue;
738 if ( event->doesRecur() ) { 762 if ( event->doesRecur() ) {
739 if ( event->isMultiDay() ) { 763 if ( event->isMultiDay() ) {
740 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 764 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
741 int i; 765 int i;
742 for ( i = 0; i <= extraDays; i++ ) { 766 for ( i = 0; i <= extraDays; i++ ) {
743 if ( event->recursOn( qd.addDays( -i ) ) ) { 767 if ( event->recursOn( qd.addDays( -i ) ) ) {
744 eventList.append( event ); 768 eventList.append( event );
745 break; 769 break;
746 } 770 }
747 } 771 }
748 } else { 772 } else {
749 if ( event->recursOn( qd ) ) 773 if ( event->recursOn( qd ) )
750 eventList.append( event ); 774 eventList.append( event );
751 } 775 }
752 } else { 776 } else {
753 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 777 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
754 eventList.append( event ); 778 eventList.append( event );
755 } 779 }
756 } 780 }
757 } 781 }
758 782
759 if ( !sorted ) { 783 if ( !sorted ) {
760 return eventList; 784 return eventList;
761 } 785 }
762 786
763 // kdDebug(5800) << "Sorting events for date\n" << endl; 787 // kdDebug(5800) << "Sorting events for date\n" << endl;
764 // now, we have to sort it based on dtStart.time() 788 // now, we have to sort it based on dtStart.time()
765 QPtrList<Event> eventListSorted; 789 QPtrList<Event> eventListSorted;
766 Event *sortEvent; 790 Event *sortEvent;
767 for ( event = eventList.first(); event; event = eventList.next() ) { 791 for ( event = eventList.first(); event; event = eventList.next() ) {
768 sortEvent = eventListSorted.first(); 792 sortEvent = eventListSorted.first();
769 int i = 0; 793 int i = 0;
770 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 794 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
771 { 795 {
772 i++; 796 i++;
773 sortEvent = eventListSorted.next(); 797 sortEvent = eventListSorted.next();
774 } 798 }
775 eventListSorted.insert( i, event ); 799 eventListSorted.insert( i, event );
776 } 800 }
777 return eventListSorted; 801 return eventListSorted;
778} 802}
779 803
780 804
781QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 805QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
782 bool inclusive ) 806 bool inclusive )
783{ 807{
784 Event *event = 0; 808 Event *event = 0;
785 809
786 QPtrList<Event> eventList; 810 QPtrList<Event> eventList;
787 811
788 // Get non-recurring events 812 // Get non-recurring events
789 for( event = mEventList.first(); event; event = mEventList.next() ) { 813 for( event = mEventList.first(); event; event = mEventList.next() ) {
790 if ( !event->calEnabled() ) continue; 814 if ( !event->calEnabled() ) continue;
791 if ( event->doesRecur() ) { 815 if ( event->doesRecur() ) {
792 QDate rStart = event->dtStart().date(); 816 QDate rStart = event->dtStart().date();
793 bool found = false; 817 bool found = false;
794 if ( inclusive ) { 818 if ( inclusive ) {
795 if ( rStart >= start && rStart <= end ) { 819 if ( rStart >= start && rStart <= end ) {
796 // Start date of event is in range. Now check for end date. 820 // Start date of event is in range. Now check for end date.
797 // if duration is negative, event recurs forever, so do not include it. 821 // if duration is negative, event recurs forever, so do not include it.
798 if ( event->recurrence()->duration() == 0 ) { // End date set 822 if ( event->recurrence()->duration() == 0 ) { // End date set
799 QDate rEnd = event->recurrence()->endDate(); 823 QDate rEnd = event->recurrence()->endDate();
800 if ( rEnd >= start && rEnd <= end ) { // End date within range 824 if ( rEnd >= start && rEnd <= end ) { // End date within range
801 found = true; 825 found = true;
802 } 826 }
803 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 827 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
804 // TODO: Calculate end date from duration. Should be done in Event 828 // TODO: Calculate end date from duration. Should be done in Event
805 // For now exclude all events with a duration. 829 // For now exclude all events with a duration.
806 } 830 }
807 } 831 }
808 } else { 832 } else {
809 bool founOne; 833 bool founOne;
810 QDate next = event->getNextOccurence( start, &founOne ).date(); 834 QDate next = event->getNextOccurence( start, &founOne ).date();
811 if ( founOne ) { 835 if ( founOne ) {
812 if ( next <= end ) { 836 if ( next <= end ) {
813 found = true; 837 found = true;
814 } 838 }
815 } 839 }
816 840
817 /* 841 /*
818 // crap !!! 842 // crap !!!
819 if ( rStart <= end ) { // Start date not after range 843 if ( rStart <= end ) { // Start date not after range
820 if ( rStart >= start ) { // Start date within range 844 if ( rStart >= start ) { // Start date within range
821 found = true; 845 found = true;
822 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 846 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
823 found = true; 847 found = true;
824 } else if ( event->recurrence()->duration() == 0 ) { // End date set 848 } else if ( event->recurrence()->duration() == 0 ) { // End date set
825 QDate rEnd = event->recurrence()->endDate(); 849 QDate rEnd = event->recurrence()->endDate();
826 if ( rEnd >= start && rEnd <= end ) { // End date within range 850 if ( rEnd >= start && rEnd <= end ) { // End date within range
827 found = true; 851 found = true;
828 } 852 }
829 } else { // Duration set 853 } else { // Duration set
830 // TODO: Calculate end date from duration. Should be done in Event 854 // TODO: Calculate end date from duration. Should be done in Event
831 // For now include all events with a duration. 855 // For now include all events with a duration.
832 found = true; 856 found = true;
833 } 857 }
834 } 858 }
835 */ 859 */
836 860
837 } 861 }
838 862
839 if ( found ) eventList.append( event ); 863 if ( found ) eventList.append( event );
840 } else { 864 } else {
841 QDate s = event->dtStart().date(); 865 QDate s = event->dtStart().date();
842 QDate e = event->dtEnd().date(); 866 QDate e = event->dtEnd().date();
843 867
844 if ( inclusive ) { 868 if ( inclusive ) {
845 if ( s >= start && e <= end ) { 869 if ( s >= start && e <= end ) {
846 eventList.append( event ); 870 eventList.append( event );
847 } 871 }
848 } else { 872 } else {
849 if ( ( e >= start && s <= end ) ) { 873 if ( ( e >= start && s <= end ) ) {
850 eventList.append( event ); 874 eventList.append( event );
851 } 875 }
852 } 876 }
853 } 877 }
854 } 878 }
855 879
856 return eventList; 880 return eventList;
857} 881}
858 882
859QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 883QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
860{ 884{
861 return rawEventsForDate( qdt.date() ); 885 return rawEventsForDate( qdt.date() );
862} 886}
863 887
864QPtrList<Event> CalendarLocal::rawEvents() 888QPtrList<Event> CalendarLocal::rawEvents()
865{ 889{
866 QPtrList<Event> el; 890 QPtrList<Event> el;
867 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 891 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
868 if ( it->calEnabled() ) el.append( it ); 892 if ( it->calEnabled() ) el.append( it );
869 return el; 893 return el;
870} 894}
871 895
872bool CalendarLocal::addJournal(Journal *journal) 896bool CalendarLocal::addJournal(Journal *journal)
873{ 897{
874 mJournalList.append(journal); 898 mJournalList.append(journal);
875 899
876 journal->registerObserver( this ); 900 journal->registerObserver( this );
877 901
878 setModified( true ); 902 setModified( true );
879 if ( journal->calID() == 0 ) 903 if ( journal->calID() == 0 )
880 journal->setCalID( mDefaultCalendar ); 904 journal->setCalID( mDefaultCalendar );
881 journal->setCalEnabled( true ); 905 journal->setCalEnabled( true );
882 return true; 906 return true;
883} 907}
884 908
885void CalendarLocal::deleteJournal( Journal *journal ) 909void CalendarLocal::deleteJournal( Journal *journal )
886{ 910{
887 clearUndo(journal); 911 clearUndo(journal);
888 if ( mJournalList.removeRef(journal) ) { 912 if ( mJournalList.removeRef(journal) ) {
889 setModified( true ); 913 setModified( true );
890 } 914 }
891} 915}
892 916
893QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 917QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
894{ 918{
895 QPtrList<Journal> el; 919 QPtrList<Journal> el;
896 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 920 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
897 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 921 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
898 return el; 922 return el;
899} 923}
900Journal *CalendarLocal::journal( const QDate &date ) 924Journal *CalendarLocal::journal( const QDate &date )
901{ 925{
902// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 926// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
903 927
904 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 928 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
905 if ( it->calEnabled() && it->dtStart().date() == date ) 929 if ( it->calEnabled() && it->dtStart().date() == date )
906 return it; 930 return it;
907 931
908 return 0; 932 return 0;
909} 933}
910 934
911Journal *CalendarLocal::journal( const QString &uid ) 935Journal *CalendarLocal::journal( const QString &uid )
912{ 936{
913 Journal * retVal = 0; 937 Journal * retVal = 0;
914 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 938 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
915 if ( it->calEnabled() && it->uid() == uid ) { 939 if ( it->calEnabled() && it->uid() == uid ) {
916 if ( retVal ) { 940 if ( retVal ) {
917 if ( retVal->calID() > it->calID() ) { 941 if ( retVal->calID() > it->calID() ) {
918 retVal = it; 942 retVal = it;
919 } 943 }
920 } else { 944 } else {
921 retVal = it; 945 retVal = it;
922 } 946 }
923 } 947 }
924 return retVal; 948 return retVal;
925} 949}
926 950
927QPtrList<Journal> CalendarLocal::journals() 951QPtrList<Journal> CalendarLocal::journals()
928{ 952{
929 QPtrList<Journal> el; 953 QPtrList<Journal> el;
930 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 954 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
931 if ( it->calEnabled() ) el.append( it ); 955 if ( it->calEnabled() ) el.append( it );
932 return el; 956 return el;
933} 957}
934void CalendarLocal::setCalendarRemove( int id ) 958void CalendarLocal::setCalendarRemove( int id )
935{ 959{
936 960
937 { 961 {
938 QPtrList<Event> EventList = mEventList; 962 QPtrList<Event> EventList = mEventList;
939 Event * ev = EventList.first(); 963 Event * ev = EventList.first();
940 while ( ev ) { 964 while ( ev ) {
941 if ( ev->calID() == id ) 965 if ( ev->calID() == id )
942 deleteEvent( ev ); 966 deleteEvent( ev );
943 ev = EventList.next(); 967 ev = EventList.next();
944 } 968 }
945 } 969 }
946 { 970 {
947 971
948 QPtrList<Todo> TodoList = mTodoList; 972 QPtrList<Todo> TodoList = mTodoList;
949 Todo * ev = TodoList.first(); 973 Todo * ev = TodoList.first();
950 while ( ev ) { 974 while ( ev ) {
951 if ( ev->calID() == id ) 975 if ( ev->calID() == id )
952 deleteTodo( ev ); 976 deleteTodo( ev );
953 ev = TodoList.next(); 977 ev = TodoList.next();
954 } 978 }
955 } 979 }
956 { 980 {
957 QPtrList<Journal> JournalList = mJournalList; 981 QPtrList<Journal> JournalList = mJournalList;
958 Journal * ev = JournalList.first(); 982 Journal * ev = JournalList.first();
959 while ( ev ) { 983 while ( ev ) {
960 if ( ev->calID() == id ) 984 if ( ev->calID() == id )
961 deleteJournal( ev ); 985 deleteJournal( ev );
962 ev = JournalList.next(); 986 ev = JournalList.next();
963 } 987 }
964 } 988 }
965 989
966 clearUndo(0); 990 clearUndo(0);
967 991
968} 992}
969 993
970void CalendarLocal::setCalendarEnabled( int id, bool enable ) 994void CalendarLocal::setCalendarEnabled( int id, bool enable )
971{ 995{
972 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 996 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
973 if ( it->calID() == id ) it->setCalEnabled( enable ); 997 if ( it->calID() == id ) it->setCalEnabled( enable );
974 998
975 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 999 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
976 if ( it->calID() == id ) it->setCalEnabled( enable ); 1000 if ( it->calID() == id ) it->setCalEnabled( enable );
977 1001
978 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1002 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
979 if ( it->calID() == id ) it->setCalEnabled( enable ); 1003 if ( it->calID() == id ) it->setCalEnabled( enable );
980 1004
981} 1005}
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index a7a85c8..ca0bd98 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,230 +1,231 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name ); 48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal ); 49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ); 50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates );
51 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
52 void stopAllTodos(); 52 void stopAllTodos();
53 /** 53 /**
54 Loads a calendar on disk in vCalendar or iCalendar format into the current 54 Loads a calendar on disk in vCalendar or iCalendar format into the current
55 calendar. Any information already present is lost. 55 calendar. Any information already present is lost.
56 @return true, if successfull, false on error. 56 @return true, if successfull, false on error.
57 @param fileName the name of the calendar on disk. 57 @param fileName the name of the calendar on disk.
58 */ 58 */
59 bool load( const QString &fileName ); 59 bool load( const QString &fileName );
60 /** 60 /**
61 Writes out the calendar to disk in the specified \a format. 61 Writes out the calendar to disk in the specified \a format.
62 CalendarLocal takes ownership of the CalFormat object. 62 CalendarLocal takes ownership of the CalFormat object.
63 @return true, if successfull, false on error. 63 @return true, if successfull, false on error.
64 @param fileName the name of the file 64 @param fileName the name of the file
65 */ 65 */
66 bool save( const QString &fileName, CalFormat *format = 0 ); 66 bool save( const QString &fileName, CalFormat *format = 0 );
67 67
68 /** 68 /**
69 Clears out the current calendar, freeing all used memory etc. etc. 69 Clears out the current calendar, freeing all used memory etc. etc.
70 */ 70 */
71 void close(); 71 void close();
72 72
73 void save() {} 73 void save() {}
74 74
75 /** 75 /**
76 Add Event to calendar. 76 Add Event to calendar.
77 */ 77 */
78 void removeSyncInfo( QString syncProfile); 78 void removeSyncInfo( QString syncProfile);
79 bool addAnniversaryNoDup( Event *event ); 79 bool addAnniversaryNoDup( Event *event );
80 bool addEventNoDup( Event *event ); 80 bool addEventNoDup( Event *event );
81 bool addEvent( Event *event ); 81 bool addEvent( Event *event );
82 /** 82 /**
83 Deletes an event from this calendar. 83 Deletes an event from this calendar.
84 */ 84 */
85 void deleteEvent( Event *event ); 85 void deleteEvent( Event *event );
86 86
87 /** 87 /**
88 Retrieves an event on the basis of the unique string ID. 88 Retrieves an event on the basis of the unique string ID.
89 */ 89 */
90 Event *event( const QString &uid ); 90 Event *event( const QString &uid );
91 /** 91 /**
92 Return unfiltered list of all events in calendar. 92 Return unfiltered list of all events in calendar.
93 */ 93 */
94 QPtrList<Event> rawEvents(); 94 QPtrList<Event> rawEvents();
95 QPtrList<Event> getExternLastSyncEvents(); 95 QPtrList<Event> getExternLastSyncEvents();
96 /** 96 /**
97 Add a todo to the todolist. 97 Add a todo to the todolist.
98 */ 98 */
99 bool addTodo( Todo *todo ); 99 bool addTodo( Todo *todo );
100 bool addTodoNoDup( Todo *todo ); 100 bool addTodoNoDup( Todo *todo );
101 /** 101 /**
102 Remove a todo from the todolist. 102 Remove a todo from the todolist.
103 */ 103 */
104 void deleteTodo( Todo * ); 104 void deleteTodo( Todo * );
105 /** 105 /**
106 Searches todolist for an event with this unique string identifier, 106 Searches todolist for an event with this unique string identifier,
107 returns a pointer or null. 107 returns a pointer or null.
108 */ 108 */
109 Todo *todo( const QString &uid ); 109 Todo *todo( const QString &uid );
110 /** 110 /**
111 Return list of all todos. 111 Return list of all todos.
112 */ 112 */
113 QPtrList<Todo> rawTodos(); 113 QPtrList<Todo> rawTodos();
114 /** 114 /**
115 Returns list of todos due on the specified date. 115 Returns list of todos due on the specified date.
116 */ 116 */
117 QPtrList<Todo> todos( const QDate &date ); 117 QPtrList<Todo> todos( const QDate &date );
118 /** 118 /**
119 Return list of all todos. 119 Return list of all todos.
120 120
121 Workaround because compiler does not recognize function of base class. 121 Workaround because compiler does not recognize function of base class.
122 */ 122 */
123 QPtrList<Todo> todos() { return Calendar::todos(); } 123 QPtrList<Todo> todos() { return Calendar::todos(); }
124 124
125 /** 125 /**
126 Add a Journal entry to calendar. 126 Add a Journal entry to calendar.
127 */ 127 */
128 bool addJournal( Journal * ); 128 bool addJournal( Journal * );
129 /** 129 /**
130 Remove a Journal from the calendar. 130 Remove a Journal from the calendar.
131 */ 131 */
132 void deleteJournal( Journal * ); 132 void deleteJournal( Journal * );
133 /** 133 /**
134 Return Journal for given date. 134 Return Journal for given date.
135 */ 135 */
136 Journal *journal( const QDate & ); 136 Journal *journal( const QDate & );
137 QPtrList<Journal> journals4Date( const QDate & ); 137 QPtrList<Journal> journals4Date( const QDate & );
138 /** 138 /**
139 Return Journal with given UID. 139 Return Journal with given UID.
140 */ 140 */
141 Journal *journal( const QString &uid ); 141 Journal *journal( const QString &uid );
142 /** 142 /**
143 Return list of all Journals stored in calendar. 143 Return list of all Journals stored in calendar.
144 */ 144 */
145 QPtrList<Journal> journals(); 145 QPtrList<Journal> journals();
146 146
147 /** 147 /**
148 Return all alarms, which ocur in the given time interval. 148 Return all alarms, which ocur in the given time interval.
149 */ 149 */
150 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 150 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
151 151
152 /** 152 /**
153 Return all alarms, which ocur before given date. 153 Return all alarms, which ocur before given date.
154 */ 154 */
155 Alarm::List alarmsTo( const QDateTime &to ); 155 Alarm::List alarmsTo( const QDateTime &to );
156 156
157 QDateTime nextAlarm( int daysTo ) ; 157 QDateTime nextAlarm( int daysTo ) ;
158 QDateTime nextAlarmEventDateTime() const; 158 QDateTime nextAlarmEventDateTime() const;
159 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 159 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
160 void registerAlarm(); 160 void registerAlarm();
161 void deRegisterAlarm(); 161 void deRegisterAlarm();
162 QString getAlarmNotification(); 162 QString getAlarmNotification();
163 QString nextSummary() const ; 163 QString nextSummary() const ;
164 /** 164 /**
165 This method should be called whenever a Event is modified directly 165 This method should be called whenever a Event is modified directly
166 via it's pointer. It makes sure that the calendar is internally 166 via it's pointer. It makes sure that the calendar is internally
167 consistent. 167 consistent.
168 */ 168 */
169 void update( IncidenceBase *incidence ); 169 void update( IncidenceBase *incidence );
170 170
171 /** 171 /**
172 Builds and then returns a list of all events that match for the 172 Builds and then returns a list of all events that match for the
173 date specified. useful for dayView, etc. etc. 173 date specified. useful for dayView, etc. etc.
174 */ 174 */
175 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 175 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
176 /** 176 /**
177 Get unfiltered events for date \a qdt. 177 Get unfiltered events for date \a qdt.
178 */ 178 */
179 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 179 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
180 /** 180 /**
181 Get unfiltered events in a range of dates. If inclusive is set to true, 181 Get unfiltered events in a range of dates. If inclusive is set to true,
182 only events are returned, which are completely included in the range. 182 only events are returned, which are completely included in the range.
183 */ 183 */
184 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 184 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
185 bool inclusive = false ); 185 bool inclusive = false );
186 Todo *todo( QString, QString ); 186 Todo *todo( QString, QString );
187 Event *event( QString, QString ); 187 Event *event( QString, QString );
188 void getIncidenceCount( int calId, int& events, int & todos, int & journals);
188 189
189public slots: 190public slots:
190 void setCalendarEnabled( int id, bool enable ); 191 void setCalendarEnabled( int id, bool enable );
191 void setAlarmEnabled( int id, bool enable ); 192 void setAlarmEnabled( int id, bool enable );
192 void setReadOnly( int id, bool enable ); 193 void setReadOnly( int id, bool enable );
193 void setDefaultCalendarEnabledOnly(); 194 void setDefaultCalendarEnabledOnly();
194 void setCalendarRemove( int id ); 195 void setCalendarRemove( int id );
195 196
196 protected: 197 protected:
197 198
198 // Event* mNextAlarmEvent; 199 // Event* mNextAlarmEvent;
199 QString mNextSummary; 200 QString mNextSummary;
200 QString mNextAlarmEventDateTimeString; 201 QString mNextAlarmEventDateTimeString;
201 QString mLastAlarmNotificationString; 202 QString mLastAlarmNotificationString;
202 QDateTime mNextAlarmEventDateTime; 203 QDateTime mNextAlarmEventDateTime;
203 QDateTime mNextAlarmDateTime; 204 QDateTime mNextAlarmDateTime;
204 void reInitAlarmSettings(); 205 void reInitAlarmSettings();
205 206
206 /** Notification function of IncidenceBase::Observer. */ 207 /** Notification function of IncidenceBase::Observer. */
207 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 208 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
208 209
209 /** inserts an event into its "proper place" in the calendar. */ 210 /** inserts an event into its "proper place" in the calendar. */
210 void insertEvent( Event *event ); 211 void insertEvent( Event *event );
211 212
212 /** Append alarms of incidence in interval to list of alarms. */ 213 /** Append alarms of incidence in interval to list of alarms. */
213 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 214 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
214 const QDateTime &from, const QDateTime &to ); 215 const QDateTime &from, const QDateTime &to );
215 216
216 /** Append alarms of recurring events in interval to list of alarms. */ 217 /** Append alarms of recurring events in interval to list of alarms. */
217 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 218 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
218 const QDateTime &from, const QDateTime &to ); 219 const QDateTime &from, const QDateTime &to );
219 220
220 private: 221 private:
221 void init(); 222 void init();
222 223
223 QPtrList<Event> mEventList; 224 QPtrList<Event> mEventList;
224 QPtrList<Todo> mTodoList; 225 QPtrList<Todo> mTodoList;
225 QPtrList<Journal> mJournalList; 226 QPtrList<Journal> mJournalList;
226}; 227};
227 228
228} 229}
229 230
230#endif 231#endif