summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt6
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--desktop/rpm/kdepim_rpm2
-rw-r--r--korganizer/kolistview.cpp82
-rw-r--r--korganizer/kolistview.h3
-rw-r--r--version2
6 files changed, 95 insertions, 4 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 6e3b886..719f120 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,92 +1,98 @@
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.1.6 ************
4
5KO/Pi:
6Added to the list view (the list view is used in search dialog as well) the possibility to print it.
7Added to the list view the possibility to hide entries, if you do not want to print all entries of the list view.
8
3********** VERSION 2.1.5 ************ 9********** VERSION 2.1.5 ************
4 10
5This is the new stable version. 11This is the new stable version.
6Bugfix: 12Bugfix:
7Fixed a problem with agenda popup on the desktop in KO/Pi. 13Fixed a problem with agenda popup on the desktop in KO/Pi.
8Fixed a crash when reloading file, e.g. after a passive pi-sync synchronization. 14Fixed a crash when reloading file, e.g. after a passive pi-sync synchronization.
9Added config option to not display completed todos in agenda view. 15Added config option to not display completed todos in agenda view.
10Addressee view is now using the formatted name, if defined. 16Addressee view is now using the formatted name, if defined.
11That makes it possible to display "lastname, firstname" in that view now. 17That makes it possible to display "lastname, firstname" in that view now.
12To set the formatted name for all contacts, please use menu: 18To set the formatted name for all contacts, please use menu:
13Edit->Change->Set formatted name. 19Edit->Change->Set formatted name.
14Fixed the bug in KA/Pi that is was not possible to add images to a contact on Windows. 20Fixed the bug in KA/Pi that is was not possible to add images to a contact on Windows.
15 21
16********** VERSION 2.1.4 ************ 22********** VERSION 2.1.4 ************
17 23
18Fixed two more bugs in the KA/Pi CSV import dialog: 24Fixed two more bugs in the KA/Pi CSV import dialog:
19Made it possible to read multi-line fields and import it to the "Note" field. 25Made it possible to read multi-line fields and import it to the "Note" field.
20Fixed a problem in mapping custom fields, whatever a custem field is... 26Fixed a problem in mapping custom fields, whatever a custem field is...
21 27
22********** VERSION 2.1.3 ************ 28********** VERSION 2.1.3 ************
23 29
24Changed the menu structure of the alarm applet: 30Changed the menu structure of the alarm applet:
25Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List". 31Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List".
26 32
27Fixed several problems in the KA/Pi CSV import dialog: 33Fixed several problems in the KA/Pi CSV import dialog:
28Added "Category", made codec configureable and made it possible to map many fields to the "Note" field. 34Added "Category", made codec configureable and made it possible to map many fields to the "Note" field.
29 35
30 36
31********** VERSION 2.1.2 ************ 37********** VERSION 2.1.2 ************
32 38
33Fixed a problem closing the alarm dialog on Zaurus with "OK" button. 39Fixed a problem closing the alarm dialog on Zaurus with "OK" button.
34 40
35Fixed a problem when importing data from Outlook with mutiple categories set. 41Fixed a problem when importing data from Outlook with mutiple categories set.
36 42
37Changed display of days in datenavigator: 43Changed display of days in datenavigator:
38Birthdays are now blue, not dark green. 44Birthdays are now blue, not dark green.
39When todo view is shown, no birtdays are shown and days with due todos are shown blue. 45When todo view is shown, no birtdays are shown and days with due todos are shown blue.
40When journal view is shown, only holidays are shown and days with journals are blue. 46When journal view is shown, only holidays are shown and days with journals are blue.
41 47
42Added Backup options to global config: 48Added Backup options to global config:
43You can create now x-daily backups for KO/Pi, KA/Pi (for file resources only, file resource is the standard type) and PwM/Pi ( all files you will open ). 49You can create now x-daily backups for KO/Pi, KA/Pi (for file resources only, file resource is the standard type) and PwM/Pi ( all files you will open ).
44It is recommended to use another HDD/Memory card for the backup directory. If (very useful on the Zaurus) the specified backup directory does not exist you are asked if you want to try again to create a backup. That makes it possible to insert your memory card in the Zaurus and then trying again. 50It is recommended to use another HDD/Memory card for the backup directory. If (very useful on the Zaurus) the specified backup directory does not exist you are asked if you want to try again to create a backup. That makes it possible to insert your memory card in the Zaurus and then trying again.
45The backup is created when the application wants to save for the first time on a backup-day. You can specify the amount of backups and the day interval of backups. 51The backup is created when the application wants to save for the first time on a backup-day. You can specify the amount of backups and the day interval of backups.
46 52
47********** VERSION 2.1.1 ************ 53********** VERSION 2.1.1 ************
48 54
49Stable release 2.1.1! 55Stable release 2.1.1!
50 56
51KO/Pi: 57KO/Pi:
52Fixed one problem in the layout of the edit dialogs on the Zaurus with 640x480 display. 58Fixed one problem in the layout of the edit dialogs on the Zaurus with 640x480 display.
53 59
54********** VERSION 2.1.0 ************ 60********** VERSION 2.1.0 ************
55 61
56Stable release 2.1.0! 62Stable release 2.1.0!
57 63
58Summary of changes/fixes compared to version 2.0.6: 64Summary of changes/fixes compared to version 2.0.6:
59 65
60Many bugs of version 2.0.6 fixed. 66Many bugs of version 2.0.6 fixed.
61Most of them were small bugs, but some of them were important. 67Most of them were small bugs, but some of them were important.
62It is recommended to use version 2.1.0 and not version 2.0.6. 68It is recommended to use version 2.1.0 and not version 2.0.6.
63 69
64Important changes: 70Important changes:
65 71
66Added recurring todos to KO/Pi. 72Added recurring todos to KO/Pi.
67 73
68Added global application font settings (for all KDE-Pim/Pi apps) to the general settings. 74Added global application font settings (for all KDE-Pim/Pi apps) to the general settings.
69 75
70Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more. 76Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
71 77
72Datenavigator can now display many months. Very useful on the desktop. 78Datenavigator can now display many months. Very useful on the desktop.
73 79
74KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements. 80KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements.
75 81
76Made alarm sound working on Linux desktop. 82Made alarm sound working on Linux desktop.
77 83
78Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details. 84Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details.
79 85
80Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details. 86Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details.
81 87
82Many other usebility enhancements. 88Many other usebility enhancements.
83Special thanks to Ben for his suggestions! 89Special thanks to Ben for his suggestions!
84 90
85You can find the complete changelog 91You can find the complete changelog
86from version 1.7.7 to 2.1.0 92from version 1.7.7 to 2.1.0
87in the source package or on 93in the source package or on
88 94
89http://www.pi-sync.net/html/changelog.html 95http://www.pi-sync.net/html/changelog.html
90 96
91 97
92 98
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 5a27a10..8f28234 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1119,263 +1119,263 @@
1119{ "Landscape","Landschaft" }, 1119{ "Landscape","Landschaft" },
1120{ "Print day","Drucke Tag" }, 1120{ "Print day","Drucke Tag" },
1121{ "CalPrintDay_Base","CalPrintDay_Base" }, 1121{ "CalPrintDay_Base","CalPrintDay_Base" },
1122{ "Date && Time Range","Datum && Zeitspanne" }, 1122{ "Date && Time Range","Datum && Zeitspanne" },
1123{ "&End date:","&Enddatum:" }, 1123{ "&End date:","&Enddatum:" },
1124{ "&Start date:","&Startdatum:" }, 1124{ "&Start date:","&Startdatum:" },
1125{ "Start &time:","Startzeit:" }, 1125{ "Start &time:","Startzeit:" },
1126{ "End ti&me:","Endzeit:" }, 1126{ "End ti&me:","Endzeit:" },
1127{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1127{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1128{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1128{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1129{ "Alt+D","Alt+D" }, 1129{ "Alt+D","Alt+D" },
1130{ "&Use colors","Nutze Farben" }, 1130{ "&Use colors","Nutze Farben" },
1131{ "Alt+U","Alt+U" }, 1131{ "Alt+U","Alt+U" },
1132{ "Print week","Drucke Woche" }, 1132{ "Print week","Drucke Woche" },
1133{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1133{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1134{ "Use &colors","Nutze Farben" }, 1134{ "Use &colors","Nutze Farben" },
1135{ "Type of View","Typ der Ansicht" }, 1135{ "Type of View","Typ der Ansicht" },
1136{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1136{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1137{ "Alt+F","Alt+F" }, 1137{ "Alt+F","Alt+F" },
1138{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1138{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1139{ "Alt+T","Alt+T" }, 1139{ "Alt+T","Alt+T" },
1140{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1140{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1141{ "Print month","Drucke Monat" }, 1141{ "Print month","Drucke Monat" },
1142{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1142{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1143{ "&Start month:","&Startmonat:" }, 1143{ "&Start month:","&Startmonat:" },
1144{ "&End month:","&Endmonat:" }, 1144{ "&End month:","&Endmonat:" },
1145{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1145{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1146{ "Print todos","Drucke Todos" }, 1146{ "Print todos","Drucke Todos" },
1147{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1147{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1148{ "Include &description of the item","Inclusive Itembeschreibung" }, 1148{ "Include &description of the item","Inclusive Itembeschreibung" },
1149{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1149{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1150{ "Include &priority of the item","Inclusive Priorität des Items" }, 1150{ "Include &priority of the item","Inclusive Priorität des Items" },
1151{ "Items to Print","Zu druckende Items" }, 1151{ "Items to Print","Zu druckende Items" },
1152{ "&From:","Von:" }, 1152{ "&From:","Von:" },
1153{ "&To:","Bis:" }, 1153{ "&To:","Bis:" },
1154{ "Print &all todo items","Drucke alle Todo Items" }, 1154{ "Print &all todo items","Drucke alle Todo Items" },
1155{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1155{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1156{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1156{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1157{ "Todo List","Todo Liste" }, 1157{ "Todo List","Todo Liste" },
1158{ "&Title:","&Titel:" }, 1158{ "&Title:","&Titel:" },
1159{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" }, 1159{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" },
1160{ "Todo list","Todo Liste" }, 1160{ "Todo list","Todo Liste" },
1161{ "&Print...","Drucke..." }, 1161{ "&Print...","Drucke..." },
1162{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1162{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1163{ "[Unconfigured]","[Unkonfiguriert]" }, 1163{ "[Unconfigured]","[Unkonfiguriert]" },
1164{ "OK","OK" }, 1164{ "OK","OK" },
1165{ "FilterEditor","FilterEditor" }, 1165{ "FilterEditor","FilterEditor" },
1166{ "Include","Inclusive" }, 1166{ "Include","Inclusive" },
1167{ "Exclude","Exclusive" }, 1167{ "Exclude","Exclusive" },
1168{ "Edit Selection...","Editiere Auswahl" }, 1168{ "Edit Selection...","Editiere Auswahl" },
1169{ "recurring events","wiederholende Termine" }, 1169{ "recurring events","wiederholende Termine" },
1170{ "recurr. events","wiederh.Termine" }, 1170{ "recurr. events","wiederh.Termine" },
1171{ "completed to-dos","erledigte Todos" }, 1171{ "completed to-dos","erledigte Todos" },
1172{ "events","Termine" }, 1172{ "events","Termine" },
1173{ "todos","Todos" }, 1173{ "todos","Todos" },
1174{ "journals","Journale" }, 1174{ "journals","Journale" },
1175{ "public","öffentl." }, 1175{ "public","öffentl." },
1176{ "private","privat" }, 1176{ "private","privat" },
1177{ "confidential","vertraul." }, 1177{ "confidential","vertraul." },
1178{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" }, 1178{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" },
1179{ "Yesterday","Gestern" }, 1179{ "Yesterday","Gestern" },
1180{ "Day after tomorrow","Übermorgen" }, 1180{ "Day after tomorrow","Übermorgen" },
1181{ "Tomorrow","Morgen" }, 1181{ "Tomorrow","Morgen" },
1182{ "Day before yesterday","Vorgestern" }, 1182{ "Day before yesterday","Vorgestern" },
1183{ "Size %1","Größe %1" }, 1183{ "Size %1","Größe %1" },
1184{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1184{ "New Agendasize: %1","Neue Agendagröße: %1" },
1185{ " (%1 y.)"," (%1 J.)" }, 1185{ " (%1 y.)"," (%1 J.)" },
1186{ "Allday:","Ganztägig:" }, 1186{ "Allday:","Ganztägig:" },
1187{ "compl.todos","erled.Todos" }, 1187{ "compl.todos","erled.Todos" },
1188{ "Day view","Tagesansicht" }, 1188{ "Day view","Tagesansicht" },
1189{ "Next days","Nächste Tage" }, 1189{ "Next days","Nächste Tage" },
1190{ "Next week","Nächste Woche" }, 1190{ "Next week","Nächste Woche" },
1191{ "Next two weeks","Nächste zwei Wochen" }, 1191{ "Next two weeks","Nächste zwei Wochen" },
1192{ "This month","Dieser Monat" }, 1192{ "This month","Dieser Monat" },
1193{ "Journal view","Journal" }, 1193{ "Journal view","Journal" },
1194{ "Display all opened","Zeige alle geöffnet" }, 1194{ "Display all opened","Zeige alle geöffnet" },
1195{ "Display all closed","Zeige alle geschlossen" }, 1195{ "Display all closed","Zeige alle geschlossen" },
1196{ "Display all flat","Zeige alle flach" }, 1196{ "Display all flat","Zeige alle flach" },
1197{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1197{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1198{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1198{ "Default todo done color:","Standard Todo erledigt Farbe" },
1199{ "Select week %1-%2","Wähle Woche %1-%2" }, 1199{ "Select week %1-%2","Wähle Woche %1-%2" },
1200{ "Select Week","Wähle Woche" }, 1200{ "Select Week","Wähle Woche" },
1201{ "Set alarm for selected...","Setze Alarm für Selekt..." }, 1201{ "Set alarm for selected...","Setze Alarm für Selekt..." },
1202{ "Set Alarm!","Setze Alarm!" }, 1202{ "Set Alarm!","Setze Alarm!" },
1203{ "Changed alarm for %1 items","Alarm für %1 Items geändert" }, 1203{ "Changed alarm for %1 items","Alarm für %1 Items geändert" },
1204{ " and "," und " }, 1204{ " and "," und " },
1205{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1205{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1206{ "Mail to selected","Mail an Ausgewählte" }, 1206{ "Mail to selected","Mail an Ausgewählte" },
1207{ "Mail to all","Mail an Alle" }, 1207{ "Mail to all","Mail an Alle" },
1208{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1208{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1209{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1209{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1210{ " on"," am" }, 1210{ " on"," am" },
1211{ " completed on "," erledigt am " }, 1211{ " completed on "," erledigt am " },
1212{ "Save as Event template","Speichere als Vorlage" }, 1212{ "Save as Event template","Speichere als Vorlage" },
1213{ "Load Event template","Lade Termin Vorlage" }, 1213{ "Load Event template","Lade Termin Vorlage" },
1214{ "Save as Journal template","Speichere als Journal Vorlage" }, 1214{ "Save as Journal template","Speichere als Journal Vorlage" },
1215{ "Insert Journal template","Füge Journal Vorlage ein" }, 1215{ "Insert Journal template","Füge Journal Vorlage ein" },
1216{ "Sub todos:<br>","Unter Todos:<br>" }, 1216{ "Sub todos:<br>","Unter Todos:<br>" },
1217{ "Parent todo:<br>","Über Todo:<br>" }, 1217{ "Parent todo:<br>","Über Todo:<br>" },
1218{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1218{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1219{ " completed"," erledigt" }, 1219{ " completed"," erledigt" },
1220{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" }, 1220{ "(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!" },
1221{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1221{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1222{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1222{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1223{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1223{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1224{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 1224{ "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?" },
1225{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1225{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1226{ "Error","Fehler" }, 1226{ "Error","Fehler" },
1227{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1227{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1228{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1228{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1229{ "Warning","Warnung" }, 1229{ "Warning","Warnung" },
1230{ "Select week number","Wähle Wochen Nummer" }, 1230{ "Select week number","Wähle Wochen Nummer" },
1231{ "Februar","Februar" }, 1231{ "Februar","Februar" },
1232{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1232{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1233{ "W","W" }, 1233{ "W","W" },
1234{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1234{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1235{ "T: %1","T: %1" }, 1235{ "T: %1","T: %1" },
1236{ "Start: ","Start: " }, 1236{ "Start: ","Start: " },
1237{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1237{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1238{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1238{ "Password for remote access:","Passwort für fernen Zugriff:" },
1239{ "Remote IP address:","Ferne IP Adresse:" }, 1239{ "Remote IP address:","Ferne IP Adresse:" },
1240{ "Remote port number:","Ferne Port Nummer:" }, 1240{ "Remote port number:","Ferne Port Nummer:" },
1241{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1241{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1242{ "Remote from: ","Fern von: " }, 1242{ "Remote from: ","Fern von: " },
1243{ "Local from: ","Lokal von: " }, 1243{ "Local from: ","Lokal von: " },
1244{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 1244{ "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" },
1245{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1245{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1246{ "Write back","Schreibe zurück" }, 1246{ "Write back","Schreibe zurück" },
1247{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1247{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1248{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1248{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1249{ "Received sync request","Sync Anfrage erhalten" }, 1249{ "Received sync request","Sync Anfrage erhalten" },
1250{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 1250{ "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." },
1251{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1251{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1252{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1252{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1253{ "Sending file...","Sende Datei..." }, 1253{ "Sending file...","Sende Datei..." },
1254{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1254{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1255{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1255{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1256{ "Received %1 bytes","%1 Bytes erhalten" }, 1256{ "Received %1 bytes","%1 Bytes erhalten" },
1257{ "Writing file to disk...","Speichere Datei..." }, 1257{ "Writing file to disk...","Speichere Datei..." },
1258{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1258{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1259{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1259{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1260{ "Synchronize!","Synchronisiere!" }, 1260{ "Synchronize!","Synchronisiere!" },
1261{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1261{ "High clock skew!","Großer Uhrzeitunterschied!" },
1262{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1262{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1263{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 1263{ "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!" },
1264{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1264{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1265{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1265{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1266{ "List week view","Listenwochenansicht" }, 1266{ "List week view","Listenwochenansicht" },
1267{ "List week","Listenwochenansicht" }, 1267{ "List week","Listenwochenansicht" },
1268{ "Next Week","Nächste Woche" }, 1268{ "Next Week","Nächste Woche" },
1269{ "Previous Week","Vorherige Woche" }, 1269{ "Previous Week","Vorherige Woche" },
1270{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." }, 1270{ "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." },
1271{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1271{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1272{ "Details","Details" }, 1272{ "Details","Details" },
1273{ "Created time","Erstellt Zeit" }, 1273{ "Created time","Erstellt Zeit" },
1274{ "Last modified time","Geändert Zeit" }, 1274{ "Last modified time","Geändert Zeit" },
1275{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1275{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1276{ "View Options","Anzeige Optionen" }, 1276{ "View Options","Anzeige Optionen" },
1277{ "<b>Created: ","<b>Erstellt am: " }, 1277{ "<b>Created: ","<b>Erstellt am: " },
1278{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1278{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1279{ "Journal: ","Journal: " }, 1279{ "Journal: ","Journal: " },
1280{ "yearly","jährlich" }, 1280{ "yearly","jährlich" },
1281{ "(%1) ","%1-" }, 1281{ "(%1) ","%1-" },
1282{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1282{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1283{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1283{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1284{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1284{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1285{ "Summary/Loc.","Titel/Ort" }, 1285{ "Summary/Loc.","Titel/Ort" },
1286{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1286{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1287{ "Week Number","Wochennummer" }, 1287{ "Week Number","Wochennummer" },
1288{ "Import","Importiere" }, 1288{ "Import","Importiere" },
1289{ "Export","Exportiere" }, 1289{ "Export","Exportiere" },
1290{ "Beam","Beame" }, 1290{ "Beam","Beame" },
1291{ "Export selected","Exportiere Selektierte" }, 1291{ "Export selected","Exportiere Selektierte" },
1292{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1292{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1293{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1293{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1294{ "Journal/Details...","Journale/Details..." }, 1294{ "Journal/Details...","Journale/Details..." },
1295{ "Agenda View","Agenda Ansicht" }, 1295{ "Agenda View","Agenda Ansicht" },
1296{ "Show current time","Zeige aktuelle Zeit" }, 1296{ "Show current time","Zeige aktuelle Zeit" },
1297{ "Edit new item","Bearbeite neuen Eintrag" }, 1297{ "Edit new item","Bearbeite neuen Eintrag" },
1298{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" }, 1298{ "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" },
1299{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1299{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1300{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1300{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1301{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1301{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1302{ "%1 days\n","%1 Tagen\n" }, 1302{ "%1 days\n","%1 Tagen\n" },
1303{ "1 day\n","1 Tag\n" }, 1303{ "1 day\n","1 Tag\n" },
1304{ "%1 hours\n","%1 Stunden\n" }, 1304{ "%1 hours\n","%1 Stunden\n" },
1305{ "1 hour\n","1 Stunde\n" }, 1305{ "1 hour\n","1 Stunde\n" },
1306{ "%1 minutes\n","%1 Minuten\n" }, 1306{ "%1 minutes\n","%1 Minuten\n" },
1307{ "1 minute\n","1 Minute\n" }, 1307{ "1 minute\n","1 Minute\n" },
1308{ "Only one toolbar","Nur eine Toolbar" }, 1308{ "Only one toolbar","Nur eine Toolbar" },
1309{ "Print","Drucke" }, 1309{ "Print","Drucke" },
1310{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1310{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1311{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1311{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1312{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1312{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1313{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1313{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1314{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" }, 1314{ "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" },
1315{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1315{ "KO/Pi Printout","KO/Pi Ausdruck" },
1316{ "Print unscaled","Drucke unskaliert" }, 1316{ "Print unscaled","Drucke unskaliert" },
1317{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1317{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1318{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1318{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1319{ "Printout Mode","Druck Modus" }, 1319{ "Printout Mode","Druck Modus" },
1320{ "Filter menu icon","Filtermenu Icon" }, 1320{ "Filter menu icon","Filtermenu Icon" },
1321{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" }, 1321{ "<p><b>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" },
1322{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" }, 1322{ "<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" },
1323{ "%1d","%1t" }, 1323{ "%1d","%1t" },
1324{ "%1h","%1std" }, 1324{ "%1h","%1std" },
1325{ "%1min","%1min" }, 1325{ "%1min","%1min" },
1326{ "( %1 before )","( %1 vorher )" }, 1326{ "( %1 before )","( %1 vorher )" },
1327{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1327{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1328{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1328{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1329{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1329{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1330{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1330{ "Show Sync Events","Zeige Sync-Ereignisse" },
1331{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1331{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1332{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1332{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1333{ " on "," am " }, 1333{ " on "," am " },
1334{ "On: ","Am: " }, 1334{ "On: ","Am: " },
1335{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1335{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1336{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1336{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1337{ "Color for running todos:","Farbe für laufende Todos:" }, 1337{ "Color for running todos:","Farbe für laufende Todos:" },
1338{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" }, 1338{ "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?" },
1339{ "Todo is started","Todo ist gestartet" }, 1339{ "Todo is started","Todo ist gestartet" },
1340{ "Stop todo","Stoppe Todo" }, 1340{ "Stop todo","Stoppe Todo" },
1341{ "Todo is stopped","Todo ist gestoppt" }, 1341{ "Todo is stopped","Todo ist gestoppt" },
1342{ "Start todo","Starte Todo" }, 1342{ "Start todo","Starte Todo" },
1343{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" }, 1343{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" },
1344{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" }, 1344{ "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?" },
1345{ "Todo has subtodos","Todo hat Untertodos" }, 1345{ "Todo has subtodos","Todo hat Untertodos" },
1346{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1346{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1347{ "Colors","Farben" }, 1347{ "Colors","Farben" },
1348{ "Click on new parent item","Klicke auf neues Übertodo" }, 1348{ "Click on new parent item","Klicke auf neues Übertodo" },
1349{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1349{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1350{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" }, 1350{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" },
1351{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1351{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1352{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" }, 1352{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" },
1353{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1353{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1354{ "times","Zeiten" }, 1354{ "times","Zeiten" },
1355{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" }, 1355{ "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?" },
1356{ "Backup enabled","Backup angeschaltet" }, 1356{ "Backup enabled","Backup angeschaltet" },
1357{ "Use standard backup dir","Standard Backupverzeichnis" }, 1357{ "Use standard backup dir","Standard Backupverzeichnis" },
1358{ "Number of Backups:","Anzahl der Backups" }, 1358{ "Number of Backups:","Anzahl der Backups" },
1359{ "Make backup every ","Mache ein Backup alle " }, 1359{ "Make backup every ","Mache ein Backup alle " },
1360{ " days"," Tage" }, 1360{ " days"," Tage" },
1361{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 1361{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
1362{ "Backup Failed!","Backup Problem!" }, 1362{ "Backup Failed!","Backup Problem!" },
1363{ "Try again now","Versuche jetzt nochmal" }, 1363{ "Try again now","Versuche jetzt nochmal" },
1364{ "Try again later","Versuche später nochmal" }, 1364{ "Try again later","Versuche später nochmal" },
1365{ "Try again tomorrow","Versuche morgen nochmal" }, 1365{ "Try again tomorrow","Versuche morgen nochmal" },
1366{ "Disable backup","Schalte Backup ab" }, 1366{ "Disable backup","Schalte Backup ab" },
1367{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 1367{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
1368{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 1368{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
1369{ "Choose action","Wähle Aktion" }, 1369{ "Choose action","Wähle Aktion" },
1370{ "Comment for todo:","Kommentar zum Todo:" }, 1370{ "Comment for todo:","Kommentar zum Todo:" },
1371{ "Stop+note","Stop+Notiz" }, 1371{ "Stop+note","Stop+Notiz" },
1372{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1372{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1373{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1373{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1374{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" }, 1374{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
1375{ "","" }, 1375{ "Print complete list","Drucke komplette Liste" },
1376{ "","" }, 1376{ "Hide all selected","Verstecke Selektierte" },
1377{ "","" }, 1377{ "","" },
1378{ "","" }, 1378{ "","" },
1379{ "","" }, 1379{ "","" },
1380{ "","" }, 1380{ "","" },
1381{ "","" }, \ No newline at end of file 1381{ "","" }, \ No newline at end of file
diff --git a/desktop/rpm/kdepim_rpm b/desktop/rpm/kdepim_rpm
index cf68670..ee00372 100644
--- a/desktop/rpm/kdepim_rpm
+++ b/desktop/rpm/kdepim_rpm
@@ -1,84 +1,84 @@
1Summary: A collection of PIM programs 1Summary: A collection of PIM programs
2Name: KDE-Pim-Pi 2Name: KDE-Pim-Pi
3Version: 2.1.5 3Version: 2.1.6
4Release: SuSE_9.2 4Release: SuSE_9.2
5Copyright:GPL 5Copyright:GPL
6Group: Productivity/Pim 6Group: Productivity/Pim
7Source:http://sourceforge.net/projects/kdepimpi/ 7Source:http://sourceforge.net/projects/kdepimpi/
8URL:http://sourceforge.net/projects/kdepimpi/ 8URL:http://sourceforge.net/projects/kdepimpi/
9Packager: zautrix 9Packager: zautrix
10 10
11%description 11%description
12This package contains the platform-independent PIM programs from 12This package contains the platform-independent PIM programs from
13www.pi-sync.info, compiled for SuSE 9.2: 13www.pi-sync.info, compiled for SuSE 9.2:
14KTimeTacker/Pi 14KTimeTacker/Pi
15KPhone/Pi 15KPhone/Pi
16KAddressbook/Pi 16KAddressbook/Pi
17KOrganizer/Pi 17KOrganizer/Pi
18PasswordManager/Pi 18PasswordManager/Pi
19KOPieMail/Pi 19KOPieMail/Pi
20 20
21These applications do not need anything from the KDE-desktop 21These applications do not need anything from the KDE-desktop
22at all to run on Linux. However, there is a dependency from 22at all to run on Linux. However, there is a dependency from
23two KDE libs, because a small command line program is included 23two KDE libs, because a small command line program is included
24to make it possible to sync with the KDE-desktop applications. 24to make it possible to sync with the KDE-desktop applications.
25 25
26These applications are independent from the KDE-desktop 26These applications are independent from the KDE-desktop
27environment. That means, nothing of your existing 27environment. That means, nothing of your existing
28KDE-desktop setup will be changed, or any data 28KDE-desktop setup will be changed, or any data
29(calendar-addressbook) used by the KDE-desktop 29(calendar-addressbook) used by the KDE-desktop
30applications will be changed or accessed. 30applications will be changed or accessed.
31These applications stores their data and config in 31These applications stores their data and config in
32$HOME/kdepim/ 32$HOME/kdepim/
33However, because the same file format is used, 33However, because the same file format is used,
34an easy exchange of data with the KDE-desktop 34an easy exchange of data with the KDE-desktop
35is possible. 35is possible.
36A small command line program is included 36A small command line program is included
37to make it possible to sync with the KDE-desktop applications. 37to make it possible to sync with the KDE-desktop applications.
38You do not need to call this program from the commandline, 38You do not need to call this program from the commandline,
39it is called from the KDE-Pim/Pi apps when you choose there: 39it is called from the KDE-Pim/Pi apps when you choose there:
40Sync with KDE_Desktop. 40Sync with KDE_Desktop.
41If something is going wrong, please start the 41If something is going wrong, please start the
42KDE-Pim/Pi program itself from the console to get detailed output. 42KDE-Pim/Pi program itself from the console to get detailed output.
43 43
44After installation, you should have a 44After installation, you should have a
45PIM-pi 45PIM-pi
46folder in your KDE start menu, where you can 46folder in your KDE start menu, where you can
47start the applications from. 47start the applications from.
48 48
49These programs makes it possible to sync your Zaurus easily 49These programs makes it possible to sync your Zaurus easily
50(with the KDE-Pim/Pi programs running on the Zaurus) 50(with the KDE-Pim/Pi programs running on the Zaurus)
51with the KDE-desktop calendar/addressbook data. 51with the KDE-desktop calendar/addressbook data.
52If you want to use that, you have to update your 52If you want to use that, you have to update your
53KDE-desktop to version 3.3.0 or higher. 53KDE-desktop to version 3.3.0 or higher.
54SuSE 9.2 contains KDE 3.3.0 such that no update is needed. 54SuSE 9.2 contains KDE 3.3.0 such that no update is needed.
55Actually - after the (non difficult) configuration is set up - 55Actually - after the (non difficult) configuration is set up -
56with two mouseklicks on the Zaurus, 56with two mouseklicks on the Zaurus,
57the Zaurus syncs with the corresponding KDE-Pim/Pi 57the Zaurus syncs with the corresponding KDE-Pim/Pi
58program on the Linux Desktop which syncs automatically 58program on the Linux Desktop which syncs automatically
59with the KDE-desktop data. 59with the KDE-desktop data.
60 60
61If you want to use the KDE-desktop calendar/addressbook applications, 61If you want to use the KDE-desktop calendar/addressbook applications,
62just install these apps in this package and use them as a syncing tool for the 62just install these apps in this package and use them as a syncing tool for the
63Zaurus <-> KDE-desktop sync. 63Zaurus <-> KDE-desktop sync.
64The sync requires a network connection from your Zaurus to 64The sync requires a network connection from your Zaurus to
65the PC. A detailed Sync HowTo is available in the 65the PC. A detailed Sync HowTo is available in the
66Help menu of the applications. 66Help menu of the applications.
67 67
68These applications makes it also possible, that you can sync 68These applications makes it also possible, that you can sync
69(or just export the data to) your mobile phone with your 69(or just export the data to) your mobile phone with your
70data of the KDE-desktop calendar/addressbook applications. 70data of the KDE-desktop calendar/addressbook applications.
71This is tested and working for Nokia mobile phones, 71This is tested and working for Nokia mobile phones,
72it may work with others as well. 72it may work with others as well.
73(More info about that: -> Sync HowTo) 73(More info about that: -> Sync HowTo)
74 74
75NOTE: 75NOTE:
76When using SuSE 9.1 you have to update your KDE to 3.3.x 76When using SuSE 9.1 you have to update your KDE to 3.3.x
77and you have to make an online update in SuSE 9.1 to make it 77and you have to make an online update in SuSE 9.1 to make it
78possible to get the infrared connection working, such that 78possible to get the infrared connection working, such that
79you can sync your (Nokia) mobile phone via infrared. 79you can sync your (Nokia) mobile phone via infrared.
80 80
81%files 81%files
82/opt/kde3/share/applnk/PIM-pi/ 82/opt/kde3/share/applnk/PIM-pi/
83/opt/kdepimpi/ 83/opt/kdepimpi/
84/usr/lib/libmicro* 84/usr/lib/libmicro*
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index bc52281..7022e02 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,980 +1,1015 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qwhatsthis.h> 35#include <qwhatsthis.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qpainter.h>
38#include <qpaintdevicemetrics.h>
37 39
38#include <klocale.h> 40#include <klocale.h>
39#include <kdebug.h> 41#include <kdebug.h>
40#include <kiconloader.h> 42#include <kiconloader.h>
41#include <kglobal.h> 43#include <kglobal.h>
42 44
43#include <libkdepim/kpimglobalprefs.h> 45#include <libkdepim/kpimglobalprefs.h>
44#include <libkcal/calendar.h> 46#include <libkcal/calendar.h>
45#include <libkcal/calendarlocal.h> 47#include <libkcal/calendarlocal.h>
46#include <libkcal/icalformat.h> 48#include <libkcal/icalformat.h>
47#include <libkcal/vcalformat.h> 49#include <libkcal/vcalformat.h>
48#include <libkcal/recurrence.h> 50#include <libkcal/recurrence.h>
49#include <libkcal/filestorage.h> 51#include <libkcal/filestorage.h>
50#include <libkdepim/categoryselectdialog.h> 52#include <libkdepim/categoryselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 53#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 54#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 55#include <qpe/qpeapplication.h>
54#else 56#else
55#include <qapplication.h> 57#include <qapplication.h>
56#endif 58#endif
57 59
58#ifndef KORG_NOPRINTER 60#ifndef KORG_NOPRINTER
59#include "calprinter.h" 61#include "calprinter.h"
60#endif 62#endif
61#include "koglobals.h" 63#include "koglobals.h"
62#include "koprefs.h" 64#include "koprefs.h"
63#include "kfiledialog.h" 65#include "kfiledialog.h"
64 66
65#include "kolistview.h" 67#include "kolistview.h"
68#include "koeventviewer.h"
66 69
67 70
68 71
69 72
70class KOListViewWhatsThis :public QWhatsThis 73class KOListViewWhatsThis :public QWhatsThis
71{ 74{
72public: 75public:
73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 76 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
74 77
75protected: 78protected:
76 virtual QString text( const QPoint& p) 79 virtual QString text( const QPoint& p)
77 { 80 {
78 return _view->getWhatsThisText(p) ; 81 return _view->getWhatsThisText(p) ;
79 } 82 }
80private: 83private:
81 QWidget* _wid; 84 QWidget* _wid;
82 KOListView * _view; 85 KOListView * _view;
83}; 86};
84 87
85 88
86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 89ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
87{ 90{
88 mItem = item; 91 mItem = item;
89 mDate = date; 92 mDate = date;
90} 93}
91 94
92ListItemVisitor::~ListItemVisitor() 95ListItemVisitor::~ListItemVisitor()
93{ 96{
94} 97}
95 98
96bool ListItemVisitor::visit(Event *e) 99bool ListItemVisitor::visit(Event *e)
97{ 100{
98 bool ok = false; 101 bool ok = false;
99 QString start, end; 102 QString start, end;
100 QDate ds, de; 103 QDate ds, de;
101 if ( e->doesRecur() ) { 104 if ( e->doesRecur() ) {
102 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 105 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
103 if ( ok ) { 106 if ( ok ) {
104 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 107 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
105 start = KGlobal::locale()->formatDate(ds,true); 108 start = KGlobal::locale()->formatDate(ds,true);
106 de = ds.addDays( days); 109 de = ds.addDays( days);
107 end = KGlobal::locale()->formatDate(de,true); 110 end = KGlobal::locale()->formatDate(de,true);
108 } 111 }
109 112
110 } 113 }
111 if ( ! ok ) { 114 if ( ! ok ) {
112 start =e->dtStartDateStr(); 115 start =e->dtStartDateStr();
113 end = e->dtEndDateStr(); 116 end = e->dtEndDateStr();
114 ds = e->dtStart().date(); 117 ds = e->dtStart().date();
115 de = e->dtEnd().date(); 118 de = e->dtEnd().date();
116 } 119 }
117 mItem->setText(0,e->summary()); 120 mItem->setText(0,e->summary());
118 mItem->setText(1,start); 121 mItem->setText(1,start);
119 if ( e->doesFloat() ) 122 if ( e->doesFloat() )
120 mItem->setText(2,"---"); 123 mItem->setText(2,"---");
121 else 124 else
122 mItem->setText(2,e->dtStartTimeStr()); 125 mItem->setText(2,e->dtStartTimeStr());
123 mItem->setText(3,end); 126 mItem->setText(3,end);
124 if ( e->doesFloat() ) 127 if ( e->doesFloat() )
125 mItem->setText(4,"---"); 128 mItem->setText(4,"---");
126 else 129 else
127 mItem->setText(4,e->dtEndTimeStr()); 130 mItem->setText(4,e->dtEndTimeStr());
128 if ( e->isAlarmEnabled() ) { 131 if ( e->isAlarmEnabled() ) {
129 mItem->setText(5,e->alarms().first()->offsetText() ); 132 mItem->setText(5,e->alarms().first()->offsetText() );
130 } else { 133 } else {
131 mItem->setText(5, i18n("No")); 134 mItem->setText(5, i18n("No"));
132 } 135 }
133 mItem->setText(6, e->recurrence()->recurrenceText()); 136 mItem->setText(6, e->recurrence()->recurrenceText());
134 if( ! e->doesRecur() ) 137 if( ! e->doesRecur() )
135 mItem->setSortKey( 6, "-" ); 138 mItem->setSortKey( 6, "-" );
136 mItem->setText(7,"---"); 139 mItem->setText(7,"---");
137 mItem->setText(8,"---"); 140 mItem->setText(8,"---");
138 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 141 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
139 mItem->setText(10,e->categoriesStr()); 142 mItem->setText(10,e->categoriesStr());
140 143
141 QString key; 144 QString key;
142 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 145 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
143 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 146 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
144 mItem->setSortKey(1,key); 147 mItem->setSortKey(1,key);
145 148
146 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 149 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
147 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 150 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
148 mItem->setSortKey(3,key); 151 mItem->setSortKey(3,key);
149 return true; 152 return true;
150} 153}
151 154
152bool ListItemVisitor::visit(Todo *t) 155bool ListItemVisitor::visit(Todo *t)
153{ 156{
154 mItem->setText(0,i18n("Todo: %1").arg(t->summary())); 157 mItem->setText(0,i18n("Todo: %1").arg(t->summary()));
155 if (t->hasStartDate()) { 158 if (t->hasStartDate()) {
156 mItem->setText(1,t->dtStartDateStr()); 159 mItem->setText(1,t->dtStartDateStr());
157 if (t->doesFloat()) { 160 if (t->doesFloat()) {
158 mItem->setText(2,"---"); 161 mItem->setText(2,"---");
159 } else { 162 } else {
160 mItem->setText(2,t->dtStartTimeStr()); 163 mItem->setText(2,t->dtStartTimeStr());
161 } 164 }
162 } else { 165 } else {
163 mItem->setText(1,"---"); 166 mItem->setText(1,"---");
164 mItem->setText(2,"---"); 167 mItem->setText(2,"---");
165 } 168 }
166 mItem->setText(3,"---"); 169 mItem->setText(3,"---");
167 mItem->setText(4,"---"); 170 mItem->setText(4,"---");
168 if ( t->isAlarmEnabled() ) { 171 if ( t->isAlarmEnabled() ) {
169 mItem->setText(5,t->alarms().first()->offsetText() ); 172 mItem->setText(5,t->alarms().first()->offsetText() );
170 } else { 173 } else {
171 mItem->setText(5, i18n("No")); 174 mItem->setText(5, i18n("No"));
172 } 175 }
173 mItem->setText(6, t->recurrence()->recurrenceText()); 176 mItem->setText(6, t->recurrence()->recurrenceText());
174 if( ! t->doesRecur() ) 177 if( ! t->doesRecur() )
175 mItem->setSortKey( 6, "-" ); 178 mItem->setSortKey( 6, "-" );
176 if (t->hasDueDate()) { 179 if (t->hasDueDate()) {
177 mItem->setText(7,t->dtDueDateStr()); 180 mItem->setText(7,t->dtDueDateStr());
178 if (t->doesFloat()) { 181 if (t->doesFloat()) {
179 mItem->setText(8,"---"); 182 mItem->setText(8,"---");
180 } else { 183 } else {
181 mItem->setText(8,t->dtDueTimeStr()); 184 mItem->setText(8,t->dtDueTimeStr());
182 } 185 }
183 } else { 186 } else {
184 mItem->setText(7,"---"); 187 mItem->setText(7,"---");
185 mItem->setText(8,"---"); 188 mItem->setText(8,"---");
186 } 189 }
187 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 190 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
188 mItem->setText(10,t->categoriesStr()); 191 mItem->setText(10,t->categoriesStr());
189 192
190 QString key; 193 QString key;
191 QDate d; 194 QDate d;
192 if (t->hasDueDate()) { 195 if (t->hasDueDate()) {
193 d = t->dtDue().date(); 196 d = t->dtDue().date();
194 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 197 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
195 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 198 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
196 mItem->setSortKey(7,key); 199 mItem->setSortKey(7,key);
197 } 200 }
198 if ( t->hasStartDate() ) { 201 if ( t->hasStartDate() ) {
199 d = t->dtStart().date(); 202 d = t->dtStart().date();
200 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 203 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
201 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 204 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
202 mItem->setSortKey(1,key); 205 mItem->setSortKey(1,key);
203 } 206 }
204 return true; 207 return true;
205} 208}
206 209
207bool ListItemVisitor::visit(Journal * j) 210bool ListItemVisitor::visit(Journal * j)
208{ 211{
209 QString des = j->description().left(30); 212 QString des = j->description().left(30);
210 des = des.simplifyWhiteSpace (); 213 des = des.simplifyWhiteSpace ();
211 des.replace (QRegExp ("\\n"),"" ); 214 des.replace (QRegExp ("\\n"),"" );
212 des.replace (QRegExp ("\\r"),"" ); 215 des.replace (QRegExp ("\\r"),"" );
213 mItem->setText(0,i18n("Journal: ")+des.left(25)); 216 mItem->setText(0,i18n("Journal: ")+des.left(25));
214 mItem->setText(1,j->dtStartDateStr()); 217 mItem->setText(1,j->dtStartDateStr());
215 mItem->setText(2,"---"); 218 mItem->setText(2,"---");
216 mItem->setText(3,"---"); 219 mItem->setText(3,"---");
217 mItem->setText(4,"---"); 220 mItem->setText(4,"---");
218 mItem->setText(5,"---"); 221 mItem->setText(5,"---");
219 mItem->setText(6,"---"); 222 mItem->setText(6,"---");
220 mItem->setText(7,j->dtStartDateStr()); 223 mItem->setText(7,j->dtStartDateStr());
221 mItem->setText(8,"---"); 224 mItem->setText(8,"---");
222 mItem->setText(9,"---"); 225 mItem->setText(9,"---");
223 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 226 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
224 227
225 QString key; 228 QString key;
226 QDate d = j->dtStart().date(); 229 QDate d = j->dtStart().date();
227 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 230 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
228 mItem->setSortKey(1,key); 231 mItem->setSortKey(1,key);
229 mItem->setSortKey(7,key); 232 mItem->setSortKey(7,key);
230 233
231 return true; 234 return true;
232} 235}
233 236
234KOListView::KOListView(Calendar *calendar, QWidget *parent, 237KOListView::KOListView(Calendar *calendar, QWidget *parent,
235 const char *name) 238 const char *name)
236 : KOEventView(calendar, parent, name) 239 : KOEventView(calendar, parent, name)
237{ 240{
238 mActiveItem = 0; 241 mActiveItem = 0;
239 mListView = new KOListViewListView(this); 242 mListView = new KOListViewListView(this);
240 mListView->addColumn(i18n("Summary")); 243 mListView->addColumn(i18n("Summary"));
241 mListView->addColumn(i18n("Start Date")); 244 mListView->addColumn(i18n("Start Date"));
242 mListView->addColumn(i18n("Start Time")); 245 mListView->addColumn(i18n("Start Time"));
243 mListView->addColumn(i18n("End Date")); 246 mListView->addColumn(i18n("End Date"));
244 mListView->addColumn(i18n("End Time")); 247 mListView->addColumn(i18n("End Time"));
245 mListView->addColumn(i18n("Alarm")); // alarm set? 248 mListView->addColumn(i18n("Alarm")); // alarm set?
246 mListView->addColumn(i18n("Recurs")); // recurs? 249 mListView->addColumn(i18n("Recurs")); // recurs?
247 mListView->addColumn(i18n("Due Date")); 250 mListView->addColumn(i18n("Due Date"));
248 mListView->addColumn(i18n("Due Time")); 251 mListView->addColumn(i18n("Due Time"));
249 mListView->addColumn(i18n("Cancelled")); 252 mListView->addColumn(i18n("Cancelled"));
250 mListView->addColumn(i18n("Categories")); 253 mListView->addColumn(i18n("Categories"));
251 254
252 mListView->setColumnAlignment(0,AlignLeft); 255 mListView->setColumnAlignment(0,AlignLeft);
253 mListView->setColumnAlignment(1,AlignLeft); 256 mListView->setColumnAlignment(1,AlignLeft);
254 mListView->setColumnAlignment(2,AlignHCenter); 257 mListView->setColumnAlignment(2,AlignHCenter);
255 mListView->setColumnAlignment(3,AlignLeft); 258 mListView->setColumnAlignment(3,AlignLeft);
256 mListView->setColumnAlignment(4,AlignHCenter); 259 mListView->setColumnAlignment(4,AlignHCenter);
257 mListView->setColumnAlignment(5,AlignLeft); 260 mListView->setColumnAlignment(5,AlignLeft);
258 mListView->setColumnAlignment(6,AlignLeft); 261 mListView->setColumnAlignment(6,AlignLeft);
259 mListView->setColumnAlignment(7,AlignLeft); 262 mListView->setColumnAlignment(7,AlignLeft);
260 mListView->setColumnAlignment(8,AlignLeft); 263 mListView->setColumnAlignment(8,AlignLeft);
261 mListView->setColumnAlignment(9,AlignLeft); 264 mListView->setColumnAlignment(9,AlignLeft);
262 mListView->setColumnAlignment(10,AlignLeft); 265 mListView->setColumnAlignment(10,AlignLeft);
263 mListView->setColumnWidthMode(10, QListView::Manual); 266 mListView->setColumnWidthMode(10, QListView::Manual);
264 mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this); 267 mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this);
265 268
266 int iii = 0; 269 int iii = 0;
267 for ( iii = 0; iii< 10 ; ++iii ) 270 for ( iii = 0; iii< 10 ; ++iii )
268 mListView->setColumnWidthMode( iii, QListView::Manual ); 271 mListView->setColumnWidthMode( iii, QListView::Manual );
269 272
270 QBoxLayout *layoutTop = new QVBoxLayout(this); 273 QBoxLayout *layoutTop = new QVBoxLayout(this);
271 layoutTop->addWidget(mListView); 274 layoutTop->addWidget(mListView);
272 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 275 mListView->setFont ( KOPrefs::instance()->mListViewFont );
273 mPopupMenu = eventPopup(); 276 mPopupMenu = eventPopup();
274 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
275 i18n("Select all"),this, 278 i18n("Select all"),this,
276 SLOT(allSelection()),true); 279 SLOT(allSelection()),true);
277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
278 i18n("Deselect all"),this, 281 i18n("Deselect all"),this,
279 SLOT(clearSelection()),true); 282 SLOT(clearSelection()),true);
280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 283 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
281 i18n("Delete all selected"),this, 284 i18n("Delete all selected"),this,
282 SLOT(deleteAll()),true); 285 SLOT(deleteAll()),true);
286#ifdef DESKTOP_VERSION
287 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
288 i18n("Hide all selected"),this,
289 SLOT(hideAll()),true);
290#endif
291 mPopupMenu->insertSeparator();
292#ifdef DESKTOP_VERSION
293 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
294 i18n("Print complete list"),this,
295 SLOT(printList()),true);
283 mPopupMenu->insertSeparator(); 296 mPopupMenu->insertSeparator();
297#endif
284 QPopupMenu * exportPO = new QPopupMenu ( this ); 298 QPopupMenu * exportPO = new QPopupMenu ( this );
285 mPopupMenu->insertItem( i18n("Export selected"), exportPO ); 299 mPopupMenu->insertItem( i18n("Export selected"), exportPO );
286 exportPO->insertItem( i18n("As iCal (ics) file..."),this, 300 exportPO->insertItem( i18n("As iCal (ics) file..."),this,
287 SLOT(saveToFile())); 301 SLOT(saveToFile()));
288 exportPO->insertItem( i18n("As vCal (vcs) file..."),this, 302 exportPO->insertItem( i18n("As vCal (vcs) file..."),this,
289 SLOT(saveToFileVCS())); 303 SLOT(saveToFileVCS()));
290 exportPO->insertItem( i18n("Journal/Details..."),this, 304 exportPO->insertItem( i18n("Journal/Details..."),this,
291 SLOT(saveDescriptionToFile())); 305 SLOT(saveDescriptionToFile()));
292 // mPopupMenu->insertSeparator(); 306 // mPopupMenu->insertSeparator();
293 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 307 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
294 i18n("Add Categ. to selected..."),this, 308 i18n("Add Categ. to selected..."),this,
295 SLOT(addCat()),true); 309 SLOT(addCat()),true);
296 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 310 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
297 i18n("Set Categ. for selected..."),this, 311 i18n("Set Categ. for selected..."),this,
298 SLOT(setCat()),true); 312 SLOT(setCat()),true);
299 //mPopupMenu->insertSeparator(); 313 //mPopupMenu->insertSeparator();
300 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 314 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
301 i18n("Set alarm for selected..."),this, 315 i18n("Set alarm for selected..."),this,
302 SLOT(setAlarm()),true); 316 SLOT(setAlarm()),true);
303 317
304 318
305#ifndef DESKTOP_VERSION 319#ifndef DESKTOP_VERSION
306 mPopupMenu->insertSeparator(); 320 mPopupMenu->insertSeparator();
307 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 321 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
308 i18n("Beam selected via IR"),this, 322 i18n("Beam selected via IR"),this,
309 SLOT(beamSelected()),true); 323 SLOT(beamSelected()),true);
310#endif 324#endif
311 /* 325 /*
312 mPopupMenu = new QPopupMenu; 326 mPopupMenu = new QPopupMenu;
313 mPopupMenu->insertItem(i18n("Edit Event"), this, 327 mPopupMenu->insertItem(i18n("Edit Event"), this,
314 SLOT (editEvent())); 328 SLOT (editEvent()));
315 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 329 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
316 SLOT (deleteEvent())); 330 SLOT (deleteEvent()));
317 mPopupMenu->insertSeparator(); 331 mPopupMenu->insertSeparator();
318 mPopupMenu->insertItem(i18n("Show Dates"), this, 332 mPopupMenu->insertItem(i18n("Show Dates"), this,
319 SLOT(showDates())); 333 SLOT(showDates()));
320 mPopupMenu->insertItem(i18n("Hide Dates"), this, 334 mPopupMenu->insertItem(i18n("Hide Dates"), this,
321 SLOT(hideDates())); 335 SLOT(hideDates()));
322 */ 336 */
323 QObject::connect(mListView,SIGNAL( newEvent()), 337 QObject::connect(mListView,SIGNAL( newEvent()),
324 this,SIGNAL(signalNewEvent())); 338 this,SIGNAL(signalNewEvent()));
325 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 339 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
326 this,SLOT(defaultItemAction(QListViewItem *))); 340 this,SLOT(defaultItemAction(QListViewItem *)));
327 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *, 341 QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *,
328 const QPoint &, int )), 342 const QPoint &, int )),
329 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 343 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
330 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 344 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
331 SLOT(processSelectionChange(QListViewItem *))); 345 SLOT(processSelectionChange(QListViewItem *)));
332 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 346 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
333 SIGNAL(showIncidenceSignal(Incidence *)) ); 347 SIGNAL(showIncidenceSignal(Incidence *)) );
334 348
335 readSettings(KOGlobals::config(),"KOListView Layout"); 349 readSettings(KOGlobals::config(),"KOListView Layout");
336} 350}
337 351
338KOListView::~KOListView() 352KOListView::~KOListView()
339{ 353{
340 delete mPopupMenu; 354 delete mPopupMenu;
341#if QT_VERSION >= 0x030000 355#if QT_VERSION >= 0x030000
342 356
343#else 357#else
344 delete mKOListViewWhatsThis; 358 delete mKOListViewWhatsThis;
345#endif 359#endif
346} 360}
347 361
348QString KOListView::getWhatsThisText(QPoint p) 362QString KOListView::getWhatsThisText(QPoint p)
349{ 363{
350 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 364 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
351 if ( item ) 365 if ( item )
352 return KIncidenceFormatter::instance()->getFormattedText( item->data(), 366 return KIncidenceFormatter::instance()->getFormattedText( item->data(),
353 KOPrefs::instance()->mWTshowDetails, 367 KOPrefs::instance()->mWTshowDetails,
354 KOPrefs::instance()->mWTshowCreated, 368 KOPrefs::instance()->mWTshowCreated,
355 KOPrefs::instance()->mWTshowChanged); 369 KOPrefs::instance()->mWTshowChanged);
356 return i18n("That is the list view" ); 370 return i18n("That is the list view" );
357 371
358} 372}
359 373
360void KOListView::updateList() 374void KOListView::updateList()
361{ 375{
362 // qDebug(" KOListView::updateList() "); 376 // qDebug(" KOListView::updateList() ");
363 377
364} 378}
365 379
366void KOListView::clearList() 380void KOListView::clearList()
367{ 381{
368 clear (); 382 clear ();
369} 383}
370void KOListView::addCat( ) 384void KOListView::addCat( )
371{ 385{
372 setCategories( false ); 386 setCategories( false );
373} 387}
374void KOListView::setCat() 388void KOListView::setCat()
375{ 389{
376 setCategories( true ); 390 setCategories( true );
377} 391}
378void KOListView::setAlarm() 392void KOListView::setAlarm()
379{ 393{
380 KOAlarmPrefs kap( this); 394 KOAlarmPrefs kap( this);
381 if ( !kap.exec() ) 395 if ( !kap.exec() )
382 return; 396 return;
383 QStringList itemList; 397 QStringList itemList;
384 QPtrList<KOListViewItem> sel ; 398 QPtrList<KOListViewItem> sel ;
385 QListViewItem *qitem = mListView->firstChild (); 399 QListViewItem *qitem = mListView->firstChild ();
386 while ( qitem ) { 400 while ( qitem ) {
387 if ( qitem->isSelected() ) { 401 if ( qitem->isSelected() ) {
388 Incidence* inc = ((KOListViewItem *) qitem)->data(); 402 Incidence* inc = ((KOListViewItem *) qitem)->data();
389 if ( inc->type() != "Journal" ) { 403 if ( inc->type() != "Journal" ) {
390 if ( inc->type() == "Todo" ) { 404 if ( inc->type() == "Todo" ) {
391 if ( ((Todo*)inc)->hasDueDate() ) 405 if ( ((Todo*)inc)->hasDueDate() )
392 sel.append(((KOListViewItem *)qitem)); 406 sel.append(((KOListViewItem *)qitem));
393 } else 407 } else
394 sel.append(((KOListViewItem *)qitem)); 408 sel.append(((KOListViewItem *)qitem));
395 } 409 }
396 } 410 }
397 qitem = qitem->nextSibling(); 411 qitem = qitem->nextSibling();
398 } 412 }
399 int count = 0; 413 int count = 0;
400 KOListViewItem * item, *temp; 414 KOListViewItem * item, *temp;
401 item = sel.first(); 415 item = sel.first();
402 Incidence* inc; 416 Incidence* inc;
403 while ( item ) { 417 while ( item ) {
404 inc = item->data(); 418 inc = item->data();
405 ++count; 419 ++count;
406 if (kap.mAlarmButton->isChecked()) { 420 if (kap.mAlarmButton->isChecked()) {
407 if (inc->alarms().count() == 0) 421 if (inc->alarms().count() == 0)
408 inc->newAlarm(); 422 inc->newAlarm();
409 QPtrList<Alarm> alarms = inc->alarms(); 423 QPtrList<Alarm> alarms = inc->alarms();
410 Alarm *alarm; 424 Alarm *alarm;
411 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 425 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
412 alarm->setEnabled(true); 426 alarm->setEnabled(true);
413 int j = kap.mAlarmTimeEdit->value()* -60; 427 int j = kap.mAlarmTimeEdit->value()* -60;
414 if (kap.mAlarmIncrCombo->currentItem() == 1) 428 if (kap.mAlarmIncrCombo->currentItem() == 1)
415 j = j * 60; 429 j = j * 60;
416 else if (kap.mAlarmIncrCombo->currentItem() == 2) 430 else if (kap.mAlarmIncrCombo->currentItem() == 2)
417 j = j * (60 * 24); 431 j = j * (60 * 24);
418 alarm->setStartOffset( j ); 432 alarm->setStartOffset( j );
419 433
420 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 434 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
421 alarm->setProcedureAlarm(kap.mAlarmProgram); 435 alarm->setProcedureAlarm(kap.mAlarmProgram);
422 } 436 }
423 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 437 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
424 alarm->setAudioAlarm(kap.mAlarmSound); 438 alarm->setAudioAlarm(kap.mAlarmSound);
425 else 439 else
426 alarm->setType(Alarm::Invalid); 440 alarm->setType(Alarm::Invalid);
427 //alarm->setAudioAlarm("default"); 441 //alarm->setAudioAlarm("default");
428 // TODO: Deal with multiple alarms 442 // TODO: Deal with multiple alarms
429 break; // For now, stop after the first alarm 443 break; // For now, stop after the first alarm
430 } 444 }
431 } else { 445 } else {
432 Alarm* alarm = inc->alarms().first(); 446 Alarm* alarm = inc->alarms().first();
433 if ( alarm ) { 447 if ( alarm ) {
434 alarm->setEnabled(false); 448 alarm->setEnabled(false);
435 alarm->setType(Alarm::Invalid); 449 alarm->setType(Alarm::Invalid);
436 } 450 }
437 } 451 }
438 ListItemVisitor v(item, mStartDate ); 452 ListItemVisitor v(item, mStartDate );
439 inc->accept(v); 453 inc->accept(v);
440 item = sel.next(); 454 item = sel.next();
441 } 455 }
442 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) ); 456 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) );
443 qDebug("KO: Set alarm for %d items", count); 457 qDebug("KO: Set alarm for %d items", count);
444 calendar()->reInitAlarmSettings(); 458 calendar()->reInitAlarmSettings();
445 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 459 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
446} 460}
447void KOListView::setCategories( bool removeOld ) 461void KOListView::setCategories( bool removeOld )
448{ 462{
449 463
450 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 464 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
451 csd->setColorEnabled(); 465 csd->setColorEnabled();
452 if (! csd->exec()) { 466 if (! csd->exec()) {
453 delete csd; 467 delete csd;
454 return; 468 return;
455 } 469 }
456 QStringList catList = csd->selectedCategories(); 470 QStringList catList = csd->selectedCategories();
457 delete csd; 471 delete csd;
458 // if ( catList.count() == 0 ) 472 // if ( catList.count() == 0 )
459 // return; 473 // return;
460 //catList.sort(); 474 //catList.sort();
461 QString categoriesStr = catList.join(","); 475 QString categoriesStr = catList.join(",");
462 int i; 476 int i;
463 QStringList itemList; 477 QStringList itemList;
464 QPtrList<KOListViewItem> sel ; 478 QPtrList<KOListViewItem> sel ;
465 QListViewItem *qitem = mListView->firstChild (); 479 QListViewItem *qitem = mListView->firstChild ();
466 while ( qitem ) { 480 while ( qitem ) {
467 if ( qitem->isSelected() ) { 481 if ( qitem->isSelected() ) {
468 sel.append(((KOListViewItem *)qitem)); 482 sel.append(((KOListViewItem *)qitem));
469 } 483 }
470 qitem = qitem->nextSibling(); 484 qitem = qitem->nextSibling();
471 } 485 }
472 KOListViewItem * item, *temp; 486 KOListViewItem * item, *temp;
473 item = sel.first(); 487 item = sel.first();
474 if( item ) { 488 if( item ) {
475 Incidence* inc = item->data() ; 489 Incidence* inc = item->data() ;
476 bool setSub = false; 490 bool setSub = false;
477 if( inc->type() == "Todo" && sel.count() == 1 && inc->relations().count() > 0 ) { 491 if( inc->type() == "Todo" && sel.count() == 1 && inc->relations().count() > 0 ) {
478 int result = KMessageBox::warningYesNoCancel(this, 492 int result = KMessageBox::warningYesNoCancel(this,
479 i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ), 493 i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ),
480 i18n("Todo has subtodos"), 494 i18n("Todo has subtodos"),
481 i18n("Yes"), 495 i18n("Yes"),
482 i18n("No")); 496 i18n("No"));
483 if (result == KMessageBox::Cancel) item = 0; 497 if (result == KMessageBox::Cancel) item = 0;
484 if (result == KMessageBox::Yes) setSub = true; 498 if (result == KMessageBox::Yes) setSub = true;
485 } 499 }
486 while ( item ) { 500 while ( item ) {
487 inc = item->data(); 501 inc = item->data();
488 if ( removeOld ) { 502 if ( removeOld ) {
489 inc->setCategories( catList, setSub ); 503 inc->setCategories( catList, setSub );
490 } else { 504 } else {
491 inc->addCategories( catList, setSub ); 505 inc->addCategories( catList, setSub );
492 } 506 }
493 ListItemVisitor v(item, mStartDate ); 507 ListItemVisitor v(item, mStartDate );
494 inc->accept(v); 508 inc->accept(v);
495 item = sel.next(); 509 item = sel.next();
496 } 510 }
497 } 511 }
498 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 512 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
499} 513}
500 514
501void KOListView::beamSelected() 515void KOListView::beamSelected()
502{ 516{
503 int icount = 0; 517 int icount = 0;
504 QPtrList<Incidence> delSel ; 518 QPtrList<Incidence> delSel ;
505 QListViewItem *item = mListView->firstChild (); 519 QListViewItem *item = mListView->firstChild ();
506 while ( item ) { 520 while ( item ) {
507 if ( item->isSelected() ) { 521 if ( item->isSelected() ) {
508 delSel.append(((KOListViewItem *)item)->data()); 522 delSel.append(((KOListViewItem *)item)->data());
509 ++icount; 523 ++icount;
510 } 524 }
511 525
512 item = item->nextSibling(); 526 item = item->nextSibling();
513 } 527 }
514 if ( icount ) { 528 if ( icount ) {
515 emit beamIncidenceList( delSel ); 529 emit beamIncidenceList( delSel );
516 return; 530 return;
517 QString fn ; 531 QString fn ;
518 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 532 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
519 QString mes; 533 QString mes;
520 bool createbup = true; 534 bool createbup = true;
521 if ( createbup ) { 535 if ( createbup ) {
522 QString description = "\n"; 536 QString description = "\n";
523 CalendarLocal* cal = new CalendarLocal(); 537 CalendarLocal* cal = new CalendarLocal();
524 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 538 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
525 Incidence *incidence = delSel.first(); 539 Incidence *incidence = delSel.first();
526 while ( incidence ) { 540 while ( incidence ) {
527 Incidence *in = incidence->clone(); 541 Incidence *in = incidence->clone();
528 description += in->summary() + "\n"; 542 description += in->summary() + "\n";
529 cal->addIncidence( in ); 543 cal->addIncidence( in );
530 incidence = delSel.next(); 544 incidence = delSel.next();
531 } 545 }
532 FileStorage storage( cal, fn, new VCalFormat ); 546 FileStorage storage( cal, fn, new VCalFormat );
533 storage.save(); 547 storage.save();
534 delete cal; 548 delete cal;
535 mes = i18n("KO/Pi: Ready for beaming"); 549 mes = i18n("KO/Pi: Ready for beaming");
536 topLevelWidget()->setCaption(mes); 550 topLevelWidget()->setCaption(mes);
537 551
538#ifndef DESKTOP_VERSION 552#ifndef DESKTOP_VERSION
539 Ir *ir = new Ir( this ); 553 Ir *ir = new Ir( this );
540 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 554 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
541 ir->send( fn, description, "text/x-vCalendar" ); 555 ir->send( fn, description, "text/x-vCalendar" );
542#endif 556#endif
543 } 557 }
544 } 558 }
545} 559}
546void KOListView::beamDone( Ir *ir ) 560void KOListView::beamDone( Ir *ir )
547{ 561{
548#ifndef DESKTOP_VERSION 562#ifndef DESKTOP_VERSION
549 delete ir; 563 delete ir;
550#endif 564#endif
551 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 565 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
552} 566}
553 567
554void KOListView::saveDescriptionToFile() 568void KOListView::saveDescriptionToFile()
555{ 569{
556 570
557 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 571 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
558 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 572 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
559 i18n("Continue"), i18n("Cancel"), 0, 573 i18n("Continue"), i18n("Cancel"), 0,
560 0, 1 ); 574 0, 1 );
561 if ( result != 0 ) { 575 if ( result != 0 ) {
562 return; 576 return;
563 } 577 }
564 int icount = 0; 578 int icount = 0;
565 QPtrList<Incidence> delSel ; 579 QPtrList<Incidence> delSel ;
566 QListViewItem *item = mListView->firstChild (); 580 QListViewItem *item = mListView->firstChild ();
567 while ( item ) { 581 while ( item ) {
568 if ( item->isSelected() ) { 582 if ( item->isSelected() ) {
569 delSel.append(((KOListViewItem *)item)->data()); 583 delSel.append(((KOListViewItem *)item)->data());
570 ++icount; 584 ++icount;
571 } 585 }
572 586
573 item = item->nextSibling(); 587 item = item->nextSibling();
574 } 588 }
575 if ( icount ) { 589 if ( icount ) {
576 QString fn = KOPrefs::instance()->mLastSaveFile; 590 QString fn = KOPrefs::instance()->mLastSaveFile;
577 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 591 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
578 592
579 if ( fn == "" ) 593 if ( fn == "" )
580 return; 594 return;
581 QFileInfo info; 595 QFileInfo info;
582 info.setFile( fn ); 596 info.setFile( fn );
583 QString mes; 597 QString mes;
584 bool createbup = true; 598 bool createbup = true;
585 if ( info. exists() ) { 599 if ( info. exists() ) {
586 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 600 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
587 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 601 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
588 i18n("Overwrite!"), i18n("Cancel"), 0, 602 i18n("Overwrite!"), i18n("Cancel"), 0,
589 0, 1 ); 603 0, 1 );
590 if ( result != 0 ) { 604 if ( result != 0 ) {
591 createbup = false; 605 createbup = false;
592 } 606 }
593 } 607 }
594 if ( createbup ) { 608 if ( createbup ) {
595 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 609 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
596 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 610 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
597 Incidence *incidence = delSel.first(); 611 Incidence *incidence = delSel.first();
598 icount = 0; 612 icount = 0;
599 while ( incidence ) { 613 while ( incidence ) {
600 if ( incidence->type() == "Journal" ) { 614 if ( incidence->type() == "Journal" ) {
601 text += "\n************************************\n"; 615 text += "\n************************************\n";
602 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 616 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
603 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 617 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
604 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 618 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
605 ++icount; 619 ++icount;
606 620
607 } else { 621 } else {
608 if ( !incidence->description().isEmpty() ) { 622 if ( !incidence->description().isEmpty() ) {
609 text += "\n************************************\n"; 623 text += "\n************************************\n";
610 if ( incidence->type() == "Todo" ) 624 if ( incidence->type() == "Todo" )
611 text += i18n("To-Do: "); 625 text += i18n("To-Do: ");
612 text += incidence->summary(); 626 text += incidence->summary();
613 if ( incidence->hasStartDate() ) 627 if ( incidence->hasStartDate() )
614 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 628 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
615 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 629 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
616 if ( !incidence->location().isEmpty() ) 630 if ( !incidence->location().isEmpty() )
617 text += "\n" +i18n("Location: ") + incidence->location(); 631 text += "\n" +i18n("Location: ") + incidence->location();
618 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 632 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
619 ++icount; 633 ++icount;
620 634
621 } 635 }
622 } 636 }
623 incidence = delSel.next(); 637 incidence = delSel.next();
624 } 638 }
625 QFile file( fn ); 639 QFile file( fn );
626 if (!file.open( IO_WriteOnly ) ) { 640 if (!file.open( IO_WriteOnly ) ) {
627 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 641 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
628 return; 642 return;
629 } 643 }
630 QTextStream ts( &file ); 644 QTextStream ts( &file );
631 ts << text; 645 ts << text;
632 file.close(); 646 file.close();
633 //qDebug("%s ", text.latin1()); 647 //qDebug("%s ", text.latin1());
634 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 648 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
635 KOPrefs::instance()->mLastSaveFile = fn; 649 KOPrefs::instance()->mLastSaveFile = fn;
636 topLevelWidget()->setCaption(mes); 650 topLevelWidget()->setCaption(mes);
637 } 651 }
638 } 652 }
639} 653}
640void KOListView::saveToFileVCS() 654void KOListView::saveToFileVCS()
641{ 655{
642 writeToFile( false ); 656 writeToFile( false );
643} 657}
644void KOListView::saveToFile() 658void KOListView::saveToFile()
645{ 659{
646 writeToFile( true ); 660 writeToFile( true );
647} 661}
648void KOListView::writeToFile( bool iCal ) 662void KOListView::writeToFile( bool iCal )
649{ 663{
650 664
651 int icount = 0; 665 int icount = 0;
652 QPtrList<Incidence> delSel ; 666 QPtrList<Incidence> delSel ;
653 QListViewItem *item = mListView->firstChild (); 667 QListViewItem *item = mListView->firstChild ();
654 bool journal = iCal; // warn only for vCal 668 bool journal = iCal; // warn only for vCal
655 while ( item ) { 669 while ( item ) {
656 if ( item->isSelected() ) { 670 if ( item->isSelected() ) {
657 if ( !journal ) 671 if ( !journal )
658 if ( ((KOListViewItem *)item)->data()->type() == "Journal") 672 if ( ((KOListViewItem *)item)->data()->type() == "Journal")
659 journal = true; 673 journal = true;
660 delSel.append(((KOListViewItem *)item)->data()); 674 delSel.append(((KOListViewItem *)item)->data());
661 ++icount; 675 ++icount;
662 } 676 }
663 677
664 item = item->nextSibling(); 678 item = item->nextSibling();
665 } 679 }
666 if ( !iCal && journal ) { 680 if ( !iCal && journal ) {
667 int result = KMessageBox::warningContinueCancel(this, 681 int result = KMessageBox::warningContinueCancel(this,
668 i18n("The journal entries can not be\nexported to a vCalendar file."), 682 i18n("The journal entries can not be\nexported to a vCalendar file."),
669 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 683 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
670 true); 684 true);
671 if (result != KMessageBox::Continue) return; 685 if (result != KMessageBox::Continue) return;
672 } 686 }
673 if ( icount ) { 687 if ( icount ) {
674 QString fn = KOPrefs::instance()->mLastSaveFile; 688 QString fn = KOPrefs::instance()->mLastSaveFile;
675 QString extension; 689 QString extension;
676 if ( iCal ) { 690 if ( iCal ) {
677 if ( fn.right( 4 ).lower() == ".vcs" ) { 691 if ( fn.right( 4 ).lower() == ".vcs" ) {
678 fn = fn.left( fn.length() -3) + "ics"; 692 fn = fn.left( fn.length() -3) + "ics";
679 } 693 }
680 } else { 694 } else {
681 if ( fn.right( 4 ).lower() == ".ics" ) { 695 if ( fn.right( 4 ).lower() == ".ics" ) {
682 fn = fn.left( fn.length() -3) + "vcs"; 696 fn = fn.left( fn.length() -3) + "vcs";
683 } 697 }
684 } 698 }
685 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 699 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
686 700
687 if ( fn == "" ) 701 if ( fn == "" )
688 return; 702 return;
689 QFileInfo info; 703 QFileInfo info;
690 info.setFile( fn ); 704 info.setFile( fn );
691 QString mes; 705 QString mes;
692 bool createbup = true; 706 bool createbup = true;
693 if ( info. exists() ) { 707 if ( info. exists() ) {
694 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 708 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
695 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 709 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
696 i18n("Overwrite!"), i18n("Cancel"), 0, 710 i18n("Overwrite!"), i18n("Cancel"), 0,
697 0, 1 ); 711 0, 1 );
698 if ( result != 0 ) { 712 if ( result != 0 ) {
699 createbup = false; 713 createbup = false;
700 } 714 }
701 } 715 }
702 if ( createbup ) { 716 if ( createbup ) {
703 CalendarLocal cal; 717 CalendarLocal cal;
704 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 718 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
705 Incidence *incidence = delSel.first(); 719 Incidence *incidence = delSel.first();
706 while ( incidence ) { 720 while ( incidence ) {
707 cal.addIncidence( incidence->clone() ); 721 cal.addIncidence( incidence->clone() );
708 incidence = delSel.next(); 722 incidence = delSel.next();
709 } 723 }
710 if ( iCal ) { 724 if ( iCal ) {
711 ICalFormat format; 725 ICalFormat format;
712 format.save( &cal, fn ); 726 format.save( &cal, fn );
713 } else { 727 } else {
714 728
715 VCalFormat format; 729 VCalFormat format;
716 format.save( &cal, fn ); 730 format.save( &cal, fn );
717 } 731 }
718 mes = i18n("KO/Pi:Saved %1").arg(fn ); 732 mes = i18n("KO/Pi:Saved %1").arg(fn );
719 KOPrefs::instance()->mLastSaveFile = fn; 733 KOPrefs::instance()->mLastSaveFile = fn;
720 topLevelWidget()->setCaption(mes); 734 topLevelWidget()->setCaption(mes);
721 } 735 }
722 } 736 }
723 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 737 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
724} 738}
739void KOListView::hideAll()
740{
741 QPtrList<QListViewItem> delSel ;
742 QListViewItem *item = mListView->firstChild ();
743 while ( item ) {
744 if ( item->isSelected() ) {
745 delSel.append(item);
746 }
747 item = item->nextSibling();
748 }
749 item = delSel.first() ;
750 while ( item ) {
751 QListViewItem * del = item;
752 item = delSel.next();
753 delete del;
754 }
755}
756void KOListView::printList()
757{
758 mListView->printList();
759}
725void KOListView::deleteAll() 760void KOListView::deleteAll()
726{ 761{
727 int icount = 0; 762 int icount = 0;
728 QPtrList<Incidence> delSel ; 763 QPtrList<Incidence> delSel ;
729 QListViewItem *item = mListView->firstChild (); 764 QListViewItem *item = mListView->firstChild ();
730 while ( item ) { 765 while ( item ) {
731 if ( item->isSelected() ) { 766 if ( item->isSelected() ) {
732 delSel.append(((KOListViewItem *)item)->data()); 767 delSel.append(((KOListViewItem *)item)->data());
733 ++icount; 768 ++icount;
734 } 769 }
735 770
736 item = item->nextSibling(); 771 item = item->nextSibling();
737 } 772 }
738 if ( icount ) { 773 if ( icount ) {
739 Incidence *incidence = delSel.first(); 774 Incidence *incidence = delSel.first();
740 Incidence *toDelete; 775 Incidence *toDelete;
741 KOPrefs *p = KOPrefs::instance(); 776 KOPrefs *p = KOPrefs::instance();
742 bool confirm = p->mConfirm; 777 bool confirm = p->mConfirm;
743 QString mess; 778 QString mess;
744 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 779 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
745 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { 780 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) {
746 p->mConfirm = false; 781 p->mConfirm = false;
747 int delCounter = 0; 782 int delCounter = 0;
748 QDialog dia ( this, "p-dialog", true ); 783 QDialog dia ( this, "p-dialog", true );
749 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 784 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
750 QVBoxLayout lay( &dia ); 785 QVBoxLayout lay( &dia );
751 lay.setMargin(7); 786 lay.setMargin(7);
752 lay.setSpacing(7); 787 lay.setSpacing(7);
753 lay.addWidget( &lab); 788 lay.addWidget( &lab);
754 QProgressBar bar( icount, &dia ); 789 QProgressBar bar( icount, &dia );
755 lay.addWidget( &bar); 790 lay.addWidget( &bar);
756 int w = 220; 791 int w = 220;
757 int h = 50; 792 int h = 50;
758 int dw = QApplication::desktop()->width(); 793 int dw = QApplication::desktop()->width();
759 int dh = QApplication::desktop()->height(); 794 int dh = QApplication::desktop()->height();
760 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 795 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
761 //dia.resize( 240,50 ); 796 //dia.resize( 240,50 );
762 dia.show(); 797 dia.show();
763 798
764 while ( incidence ) { 799 while ( incidence ) {
765 bar.setProgress( delCounter ); 800 bar.setProgress( delCounter );
766 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 801 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
767 dia.setCaption( mess ); 802 dia.setCaption( mess );
768 qApp->processEvents(); 803 qApp->processEvents();
769 toDelete = (incidence); 804 toDelete = (incidence);
770 incidence = delSel.next(); 805 incidence = delSel.next();
771 emit deleteIncidenceSignal(toDelete ); 806 emit deleteIncidenceSignal(toDelete );
772 if ( dia.result() != 0 ) 807 if ( dia.result() != 0 )
773 break; 808 break;
774 809
775 } 810 }
776 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 811 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
777 topLevelWidget ()->setCaption( mess ); 812 topLevelWidget ()->setCaption( mess );
778 p->mConfirm = confirm; 813 p->mConfirm = confirm;
779 } 814 }
780 } 815 }
781 816
782 817
783} 818}
784int KOListView::maxDatesHint() 819int KOListView::maxDatesHint()
785{ 820{
786 return 0; 821 return 0;
787} 822}
788 823
789int KOListView::currentDateCount() 824int KOListView::currentDateCount()
790{ 825{
791 return 0; 826 return 0;
792} 827}
793 828
794QPtrList<Incidence> KOListView::selectedIncidences() 829QPtrList<Incidence> KOListView::selectedIncidences()
795{ 830{
796 QPtrList<Incidence> eventList; 831 QPtrList<Incidence> eventList;
797 QListViewItem *item = mListView->firstChild (); 832 QListViewItem *item = mListView->firstChild ();
798 while ( item ) { 833 while ( item ) {
799 if ( item->isSelected() ) { 834 if ( item->isSelected() ) {
800 eventList.append(((KOListViewItem *)item)->data()); 835 eventList.append(((KOListViewItem *)item)->data());
801 } 836 }
802 837
803 item = item->nextSibling(); 838 item = item->nextSibling();
804 } 839 }
805 840
806 // // QListViewItem *item = mListView->selectedItem(); 841 // // QListViewItem *item = mListView->selectedItem();
807 //if (item) eventList.append(((KOListViewItem *)item)->data()); 842 //if (item) eventList.append(((KOListViewItem *)item)->data());
808 843
809 return eventList; 844 return eventList;
810} 845}
811 846
812DateList KOListView::selectedDates() 847DateList KOListView::selectedDates()
813{ 848{
814 DateList eventList; 849 DateList eventList;
815 return eventList; 850 return eventList;
816} 851}
817 852
818void KOListView::showDates(bool show) 853void KOListView::showDates(bool show)
819{ 854{
820 // Shouldn't we set it to a value greater 0? When showDates is called with 855 // Shouldn't we set it to a value greater 0? When showDates is called with
821 // show == true at first, then the columnwidths are set to zero. 856 // show == true at first, then the columnwidths are set to zero.
822 static int oldColWidth1 = 0; 857 static int oldColWidth1 = 0;
823 static int oldColWidth3 = 0; 858 static int oldColWidth3 = 0;
824 859
825 if (!show) { 860 if (!show) {
826 oldColWidth1 = mListView->columnWidth(1); 861 oldColWidth1 = mListView->columnWidth(1);
827 oldColWidth3 = mListView->columnWidth(3); 862 oldColWidth3 = mListView->columnWidth(3);
828 mListView->setColumnWidth(1, 0); 863 mListView->setColumnWidth(1, 0);
829 mListView->setColumnWidth(3, 0); 864 mListView->setColumnWidth(3, 0);
830 } else { 865 } else {
831 mListView->setColumnWidth(1, oldColWidth1); 866 mListView->setColumnWidth(1, oldColWidth1);
832 mListView->setColumnWidth(3, oldColWidth3); 867 mListView->setColumnWidth(3, oldColWidth3);
833 } 868 }
834 mListView->repaint(); 869 mListView->repaint();
835} 870}
836 871
837void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 872void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
838 const QDate &td) 873 const QDate &td)
839{ 874{
840#ifndef KORG_NOPRINTER 875#ifndef KORG_NOPRINTER
841 calPrinter->preview(CalPrinter::Day, fd, td); 876 calPrinter->preview(CalPrinter::Day, fd, td);
842#endif 877#endif
843} 878}
844 879
845void KOListView::showDates() 880void KOListView::showDates()
846{ 881{
847 showDates(true); 882 showDates(true);
848} 883}
849 884
850void KOListView::hideDates() 885void KOListView::hideDates()
851{ 886{
852 showDates(false); 887 showDates(false);
853} 888}
854 889
855void KOListView::resetFocus() 890void KOListView::resetFocus()
856{ 891{
857 topLevelWidget()->setActiveWindow(); 892 topLevelWidget()->setActiveWindow();
858 topLevelWidget()->raise(); 893 topLevelWidget()->raise();
859 mListView->setFocus(); 894 mListView->setFocus();
860} 895}
861void KOListView::updateView() 896void KOListView::updateView()
862{ 897{
863 mListView->setFocus(); 898 mListView->setFocus();
864 if ( mListView->firstChild () ) 899 if ( mListView->firstChild () )
865 mListView->setCurrentItem( mListView->firstChild () ); 900 mListView->setCurrentItem( mListView->firstChild () );
866} 901}
867void KOListView::updateConfig() 902void KOListView::updateConfig()
868{ 903{
869 904
870 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 905 mListView->setFont ( KOPrefs::instance()->mListViewFont );
871 updateView(); 906 updateView();
872 907
873} 908}
874void KOListView::setStartDate(const QDate &start) 909void KOListView::setStartDate(const QDate &start)
875{ 910{
876 mStartDate = start; 911 mStartDate = start;
877} 912}
878 913
879void KOListView::showDates(const QDate &start, const QDate &end) 914void KOListView::showDates(const QDate &start, const QDate &end)
880{ 915{
881 clear(); 916 clear();
882 mStartDate = start; 917 mStartDate = start;
883 QDate date = start; 918 QDate date = start;
884 QPtrList<Journal> j_list; 919 QPtrList<Journal> j_list;
885 while( date <= end ) { 920 while( date <= end ) {
886 addEvents(calendar()->events(date)); 921 addEvents(calendar()->events(date));
887 addTodos(calendar()->todos(date)); 922 addTodos(calendar()->todos(date));
888 Journal* jo = calendar()->journal(date); 923 Journal* jo = calendar()->journal(date);
889 if ( jo ) 924 if ( jo )
890 j_list.append( jo ); 925 j_list.append( jo );
891 date = date.addDays( 1 ); 926 date = date.addDays( 1 );
892 } 927 }
893 addJournals(j_list); 928 addJournals(j_list);
894 emit incidenceSelected( 0 ); 929 emit incidenceSelected( 0 );
895 updateView(); 930 updateView();
896 931
897} 932}
898 933
899void KOListView::addEvents(QPtrList<Event> eventList) 934void KOListView::addEvents(QPtrList<Event> eventList)
900{ 935{
901 936
902 Event *ev; 937 Event *ev;
903 for(ev = eventList.first(); ev; ev = eventList.next()) { 938 for(ev = eventList.first(); ev; ev = eventList.next()) {
904 addIncidence(ev); 939 addIncidence(ev);
905 } 940 }
906 if ( !mListView->currentItem() ){ 941 if ( !mListView->currentItem() ){
907 updateView(); 942 updateView();
908 } 943 }
909} 944}
910 945
911void KOListView::addTodos(QPtrList<Todo> eventList) 946void KOListView::addTodos(QPtrList<Todo> eventList)
912{ 947{
913 Todo *ev; 948 Todo *ev;
914 for(ev = eventList.first(); ev; ev = eventList.next()) { 949 for(ev = eventList.first(); ev; ev = eventList.next()) {
915 addIncidence(ev); 950 addIncidence(ev);
916 } 951 }
917 if ( !mListView->currentItem() ){ 952 if ( !mListView->currentItem() ){
918 updateView(); 953 updateView();
919 } 954 }
920} 955}
921void KOListView::addJournals(QPtrList<Journal> eventList) 956void KOListView::addJournals(QPtrList<Journal> eventList)
922{ 957{
923 Journal *ev; 958 Journal *ev;
924 for(ev = eventList.first(); ev; ev = eventList.next()) { 959 for(ev = eventList.first(); ev; ev = eventList.next()) {
925 addIncidence(ev); 960 addIncidence(ev);
926 } 961 }
927 if ( !mListView->currentItem() ){ 962 if ( !mListView->currentItem() ){
928 updateView(); 963 updateView();
929 } 964 }
930} 965}
931 966
932void KOListView::addIncidence(Incidence *incidence) 967void KOListView::addIncidence(Incidence *incidence)
933{ 968{
934 if ( mUidDict.find( incidence->uid() ) ) return; 969 if ( mUidDict.find( incidence->uid() ) ) return;
935 970
936 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 971 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
937 mUidDict.insert( incidence->uid(), incidence ); 972 mUidDict.insert( incidence->uid(), incidence );
938 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 973 KOListViewItem *item = new KOListViewItem( incidence, mListView );
939 ListItemVisitor v(item, mStartDate ); 974 ListItemVisitor v(item, mStartDate );
940 if (incidence->accept(v)) { 975 if (incidence->accept(v)) {
941 return; 976 return;
942 } 977 }
943 else delete item; 978 else delete item;
944} 979}
945 980
946void KOListView::showEvents(QPtrList<Event> eventList) 981void KOListView::showEvents(QPtrList<Event> eventList)
947{ 982{
948 clear(); 983 clear();
949 984
950 addEvents(eventList); 985 addEvents(eventList);
951 986
952 // After new creation of list view no events are selected. 987 // After new creation of list view no events are selected.
953 emit incidenceSelected( 0 ); 988 emit incidenceSelected( 0 );
954} 989}
955int KOListView::count() 990int KOListView::count()
956{ 991{
957 return mListView->childCount(); 992 return mListView->childCount();
958} 993}
959 994
960void KOListView::changeEventDisplay(Event *event, int action) 995void KOListView::changeEventDisplay(Event *event, int action)
961{ 996{
962 KOListViewItem *item; 997 KOListViewItem *item;
963 998
964 switch(action) { 999 switch(action) {
965 case KOGlobals::EVENTADDED: 1000 case KOGlobals::EVENTADDED:
966 addIncidence( event ); 1001 addIncidence( event );
967 break; 1002 break;
968 case KOGlobals::EVENTEDITED: 1003 case KOGlobals::EVENTEDITED:
969 item = getItemForEvent(event); 1004 item = getItemForEvent(event);
970 if (item) { 1005 if (item) {
971 mUidDict.remove( event->uid() ); 1006 mUidDict.remove( event->uid() );
972 delete item; 1007 delete item;
973 addIncidence( event ); 1008 addIncidence( event );
974 } 1009 }
975 break; 1010 break;
976 case KOGlobals::EVENTDELETED: 1011 case KOGlobals::EVENTDELETED:
977 item = getItemForEvent(event); 1012 item = getItemForEvent(event);
978 if (item) { 1013 if (item) {
979 mUidDict.remove( event->uid() ); 1014 mUidDict.remove( event->uid() );
980 delete item; 1015 delete item;
@@ -1034,256 +1069,303 @@ void KOListView::writeSettings(KConfig *config, QString setting)
1034void KOListView::processSelectionChange(QListViewItem *) 1069void KOListView::processSelectionChange(QListViewItem *)
1035{ 1070{
1036 1071
1037 KOListViewItem *item = 1072 KOListViewItem *item =
1038 static_cast<KOListViewItem *>( mListView->currentItem() ); 1073 static_cast<KOListViewItem *>( mListView->currentItem() );
1039 1074
1040 if ( !item ) { 1075 if ( !item ) {
1041 emit incidenceSelected( 0 ); 1076 emit incidenceSelected( 0 );
1042 } else { 1077 } else {
1043 emit incidenceSelected( item->data() ); 1078 emit incidenceSelected( item->data() );
1044 } 1079 }
1045} 1080}
1046 1081
1047void KOListView::clearSelection() 1082void KOListView::clearSelection()
1048{ 1083{
1049 mListView->selectAll( false ); 1084 mListView->selectAll( false );
1050} 1085}
1051void KOListView::allSelection() 1086void KOListView::allSelection()
1052{ 1087{
1053 mListView->selectAll( true ); 1088 mListView->selectAll( true );
1054} 1089}
1055 1090
1056void KOListView::clear() 1091void KOListView::clear()
1057{ 1092{
1058 mListView->clear(); 1093 mListView->clear();
1059 mUidDict.clear(); 1094 mUidDict.clear();
1060} 1095}
1061 1096
1062Incidence* KOListView::currentItem() 1097Incidence* KOListView::currentItem()
1063{ 1098{
1064 if ( mListView->currentItem() ) 1099 if ( mListView->currentItem() )
1065 return ((KOListViewItem*) mListView->currentItem())->data(); 1100 return ((KOListViewItem*) mListView->currentItem())->data();
1066 return 0; 1101 return 0;
1067} 1102}
1068void KOListView::keyPressEvent ( QKeyEvent *e) 1103void KOListView::keyPressEvent ( QKeyEvent *e)
1069{ 1104{
1070 1105
1071 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { 1106 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) {
1072 deleteAll(); 1107 deleteAll();
1073 return; 1108 return;
1074 } 1109 }
1075 1110
1076 e->ignore(); 1111 e->ignore();
1077} 1112}
1078void KOListViewListView::keyPressEvent ( QKeyEvent *e) 1113void KOListViewListView::keyPressEvent ( QKeyEvent *e)
1079{ 1114{
1080 1115
1081 switch ( e->key() ) { 1116 switch ( e->key() ) {
1082 case Qt::Key_Down: 1117 case Qt::Key_Down:
1083 if ( e->state() == ShiftButton ) { 1118 if ( e->state() == ShiftButton ) {
1084 QListViewItem* cn = currentItem(); 1119 QListViewItem* cn = currentItem();
1085 if ( !cn ) 1120 if ( !cn )
1086 cn = firstChild(); 1121 cn = firstChild();
1087 if ( !cn ) 1122 if ( !cn )
1088 return; 1123 return;
1089 while ( cn->nextSibling() ) 1124 while ( cn->nextSibling() )
1090 cn = cn->nextSibling(); 1125 cn = cn->nextSibling();
1091 setCurrentItem ( cn ); 1126 setCurrentItem ( cn );
1092 ensureItemVisible ( cn ); 1127 ensureItemVisible ( cn );
1093 1128
1094 e->accept(); 1129 e->accept();
1095 return; 1130 return;
1096 } 1131 }
1097 if ( e->state() == ControlButton ) { 1132 if ( e->state() == ControlButton ) {
1098 int count = childCount (); 1133 int count = childCount ();
1099 int jump = count / 5; 1134 int jump = count / 5;
1100 QListViewItem* cn; 1135 QListViewItem* cn;
1101 cn = currentItem(); 1136 cn = currentItem();
1102 if ( ! cn ) 1137 if ( ! cn )
1103 return; 1138 return;
1104 if ( jump == 0 ) 1139 if ( jump == 0 )
1105 jump = 1; 1140 jump = 1;
1106 while ( jump && cn->nextSibling() ) { 1141 while ( jump && cn->nextSibling() ) {
1107 cn = cn->nextSibling(); 1142 cn = cn->nextSibling();
1108 --jump; 1143 --jump;
1109 } 1144 }
1110 setCurrentItem ( cn ); 1145 setCurrentItem ( cn );
1111 ensureItemVisible ( cn ); 1146 ensureItemVisible ( cn );
1112 1147
1113 } else 1148 } else
1114 QListView::keyPressEvent ( e ) ; 1149 QListView::keyPressEvent ( e ) ;
1115 e->accept(); 1150 e->accept();
1116 break; 1151 break;
1117 1152
1118 case Qt::Key_Up: 1153 case Qt::Key_Up:
1119 if ( e->state() == ShiftButton ) { 1154 if ( e->state() == ShiftButton ) {
1120 QListViewItem* cn = firstChild(); 1155 QListViewItem* cn = firstChild();
1121 if ( cn ) { 1156 if ( cn ) {
1122 setCurrentItem ( cn ); 1157 setCurrentItem ( cn );
1123 ensureItemVisible ( cn ); 1158 ensureItemVisible ( cn );
1124 } 1159 }
1125 e->accept(); 1160 e->accept();
1126 return; 1161 return;
1127 } 1162 }
1128 if ( e->state() == ControlButton ) { 1163 if ( e->state() == ControlButton ) {
1129 int count = childCount (); 1164 int count = childCount ();
1130 int jump = count / 5; 1165 int jump = count / 5;
1131 QListViewItem* cn; 1166 QListViewItem* cn;
1132 cn = currentItem(); 1167 cn = currentItem();
1133 if ( ! cn ) 1168 if ( ! cn )
1134 return; 1169 return;
1135 if ( jump == 0 ) 1170 if ( jump == 0 )
1136 jump = 1; 1171 jump = 1;
1137 while ( jump && cn->itemAbove ()) { 1172 while ( jump && cn->itemAbove ()) {
1138 cn = cn->itemAbove (); 1173 cn = cn->itemAbove ();
1139 --jump; 1174 --jump;
1140 } 1175 }
1141 setCurrentItem ( cn ); 1176 setCurrentItem ( cn );
1142 ensureItemVisible ( cn ); 1177 ensureItemVisible ( cn );
1143 } else 1178 } else
1144 QListView::keyPressEvent ( e ) ; 1179 QListView::keyPressEvent ( e ) ;
1145 e->accept(); 1180 e->accept();
1146 break; 1181 break;
1147 case Qt::Key_I: { 1182 case Qt::Key_I: {
1148 QListViewItem* cn; 1183 QListViewItem* cn;
1149 cn = currentItem(); 1184 cn = currentItem();
1150 if ( cn ) { 1185 if ( cn ) {
1151 KOListViewItem* ci = (KOListViewItem*)( cn ); 1186 KOListViewItem* ci = (KOListViewItem*)( cn );
1152 if ( ci ){ 1187 if ( ci ){
1153 //emit showIncidence( ci->data()); 1188 //emit showIncidence( ci->data());
1154 cn = cn->nextSibling(); 1189 cn = cn->nextSibling();
1155 if ( cn ) { 1190 if ( cn ) {
1156 setCurrentItem ( cn ); 1191 setCurrentItem ( cn );
1157 ensureItemVisible ( cn ); 1192 ensureItemVisible ( cn );
1158 } 1193 }
1159 emit showIncidence( ci->data()); 1194 emit showIncidence( ci->data());
1160 } 1195 }
1161 } 1196 }
1162 e->accept(); 1197 e->accept();
1163 } 1198 }
1164 break; 1199 break;
1165 case Qt::Key_Return: 1200 case Qt::Key_Return:
1166 case Qt::Key_Enter: 1201 case Qt::Key_Enter:
1167 { 1202 {
1168 QListViewItem* cn; 1203 QListViewItem* cn;
1169 cn = currentItem(); 1204 cn = currentItem();
1170 if ( cn ) { 1205 if ( cn ) {
1171 KOListViewItem* ci = (KOListViewItem*)( cn ); 1206 KOListViewItem* ci = (KOListViewItem*)( cn );
1172 if ( ci ){ 1207 if ( ci ){
1173 if ( e->state() == ShiftButton ) 1208 if ( e->state() == ShiftButton )
1174 ci->setSelected( false ); 1209 ci->setSelected( false );
1175 else 1210 else
1176 ci->setSelected( true ); 1211 ci->setSelected( true );
1177 cn = cn->nextSibling(); 1212 cn = cn->nextSibling();
1178 if ( cn ) { 1213 if ( cn ) {
1179 setCurrentItem ( cn ); 1214 setCurrentItem ( cn );
1180 ensureItemVisible ( cn ); 1215 ensureItemVisible ( cn );
1181 } 1216 }
1182 } 1217 }
1183 } 1218 }
1184 e->accept(); 1219 e->accept();
1185 } 1220 }
1186 break; 1221 break;
1187 default: 1222 default:
1188 e->ignore(); 1223 e->ignore();
1189 } 1224 }
1190} 1225}
1191KOListViewListView::KOListViewListView(KOListView * lv ) 1226KOListViewListView::KOListViewListView(KOListView * lv )
1192 : KListView( lv, "kolistlistview", false ) 1227 : KListView( lv, "kolistlistview", false )
1193{ 1228{
1194 mYMousePos = 0; 1229 mYMousePos = 0;
1195 mPopupTimer = new QTimer(this); 1230 mPopupTimer = new QTimer(this);
1196 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 1231 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
1197#ifndef DESKTOP_VERSION 1232#ifndef DESKTOP_VERSION
1198 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 1233 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
1199#endif 1234#endif
1200 setSelectionMode( QListView::Multi ); 1235 setSelectionMode( QListView::Multi );
1201 setMultiSelection( true); 1236 setMultiSelection( true);
1202} 1237}
1203bool KOListViewListView::hasMultiSelection(QListViewItem* item) 1238bool KOListViewListView::hasMultiSelection(QListViewItem* item)
1204{ 1239{
1205 int selCount = 0; 1240 int selCount = 0;
1206 QListViewItem *qitem = firstChild (); 1241 QListViewItem *qitem = firstChild ();
1207 while ( qitem ) { 1242 while ( qitem ) {
1208 if ( qitem->isSelected() && item != qitem ) 1243 if ( qitem->isSelected() && item != qitem )
1209 return true; 1244 return true;
1210 qitem = qitem->nextSibling(); 1245 qitem = qitem->nextSibling();
1211 } 1246 }
1212 return false; 1247 return false;
1213} 1248}
1214void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1249void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1215{ 1250{
1216 if (!e) return; 1251 if (!e) return;
1217 QPoint vp = contentsToViewport(e->pos()); 1252 QPoint vp = contentsToViewport(e->pos());
1218 QListViewItem *item = itemAt(vp); 1253 QListViewItem *item = itemAt(vp);
1219 if (!item) { 1254 if (!item) {
1220 emit newEvent(); 1255 emit newEvent();
1221 return; 1256 return;
1222 } 1257 }
1223 KListView::contentsMouseDoubleClickEvent(e); 1258 KListView::contentsMouseDoubleClickEvent(e);
1224} 1259}
1225#if 0 1260#if 0
1226void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1261void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1227{ 1262{
1228 //qDebug("contentsMousePressEvent++++ "); 1263 //qDebug("contentsMousePressEvent++++ ");
1229 KListView::contentsMousePressEvent( e ); 1264 KListView::contentsMousePressEvent( e );
1230 if ( e->button() == RightButton ) { 1265 if ( e->button() == RightButton ) {
1231 QListViewItem* ci = currentItem(); 1266 QListViewItem* ci = currentItem();
1232 clearSelection () ; 1267 clearSelection () ;
1233 if ( ci ) 1268 if ( ci )
1234 ci->setSelected( true ); 1269 ci->setSelected( true );
1235 } 1270 }
1236} 1271}
1237void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1272void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1238{ 1273{
1239 KListView::contentsMouseReleaseEvent(e); 1274 KListView::contentsMouseReleaseEvent(e);
1240} 1275}
1241void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1276void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1242{ 1277{
1243 KListView::contentsMouseMoveEvent(e); 1278 KListView::contentsMouseMoveEvent(e);
1244} 1279}
1245#endif 1280#endif
1246void KOListViewListView::popupMenu() 1281void KOListViewListView::popupMenu()
1247{ 1282{
1248 mPopupTimer->stop(); 1283 mPopupTimer->stop();
1249 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton ); 1284 QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton );
1250 QApplication::postEvent( this->viewport(), e ); 1285 QApplication::postEvent( this->viewport(), e );
1251 1286
1252} 1287}
1253void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1288void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1254{ 1289{
1255 //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y()); 1290 //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y());
1256 mYMousePos = mapToGlobal( (e->pos())).y(); 1291 mYMousePos = mapToGlobal( (e->pos())).y();
1257 if ( e->button() == LeftButton ) { 1292 if ( e->button() == LeftButton ) {
1258 mPopupTimer->start( 600 ); 1293 mPopupTimer->start( 600 );
1259 mEventPos = contentsToViewport(e->pos()); 1294 mEventPos = contentsToViewport(e->pos());
1260 mEventGlobalPos = e->globalPos(); 1295 mEventGlobalPos = e->globalPos();
1261 } 1296 }
1262 KListView::contentsMousePressEvent( e ); 1297 KListView::contentsMousePressEvent( e );
1263 if ( e->button() == RightButton ) { 1298 if ( e->button() == RightButton ) {
1264 QListViewItem* ci = currentItem(); 1299 QListViewItem* ci = currentItem();
1265 //clearSelection(); 1300 //clearSelection();
1266 if ( ci ) 1301 if ( ci )
1267 ci->setSelected( true ); 1302 ci->setSelected( true );
1268 } 1303 }
1269} 1304}
1270void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1305void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1271{ 1306{
1272 mPopupTimer->stop(); 1307 mPopupTimer->stop();
1273 KListView::contentsMouseReleaseEvent(e); 1308 KListView::contentsMouseReleaseEvent(e);
1274} 1309}
1275void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1310void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1276{ 1311{
1277 // qDebug("contentsMouseMoveEv....... "); 1312 // qDebug("contentsMouseMoveEv....... ");
1278 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); 1313 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() );
1279 int diff = mYMousePos - mapToGlobal( (e->pos())).y(); 1314 int diff = mYMousePos - mapToGlobal( (e->pos())).y();
1280 if ( diff < 0 ) diff = -diff; 1315 if ( diff < 0 ) diff = -diff;
1281 if ( diff > 15 ) 1316 if ( diff > 15 )
1282 mPopupTimer->stop(); 1317 mPopupTimer->stop();
1283 else { 1318 else {
1284 mEventPos = contentsToViewport(e->pos()); 1319 mEventPos = contentsToViewport(e->pos());
1285 mEventGlobalPos = e->globalPos(); 1320 mEventGlobalPos = e->globalPos();
1286 } 1321 }
1287 KListView::contentsMouseMoveEvent(e); 1322 KListView::contentsMouseMoveEvent(e);
1288} 1323}
1289 1324
1325#define protected public
1326#include <qheader.h>
1327#undef protected
1328void KOListViewListView::printList()
1329{
1330#ifdef DESKTOP_VERSION
1331 KOPrintPrefs pp ( this );
1332 if (!pp.exec() )
1333 return;
1334 int scaleval = pp.printMode() ;
1335
1336 QPrinter printer;
1337 if (!printer.setup() )
1338 return;
1339 clearSelection ();
1340 QPainter p;
1341 p.begin ( &printer );
1342 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
1343 float dx, dy;
1344 int wid = (m.width() * 9)/10;
1345 dx = (float) wid/(float)contentsWidth ();
1346 dy = (float)(m.height()) / (float)contentsHeight ();
1347 float scale;
1348 // scale to fit the width or height of the paper
1349 if ( dx < dy )
1350 scale = dx;
1351 else
1352 scale = dy;
1353
1354 p.translate( m.width()/10,m.width()/10 );
1355 if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) {
1356 p.scale( scale, scale );
1357 }
1358
1359 int cou = header()->count();
1360 int iii;
1361 QRect rect ( 0,0,0, header()->height());
1362 for ( iii = 0; iii < cou; ++iii ) {
1363 rect.setLeft ( header()->sectionPos( iii ) );
1364 rect.setRight ( header()->sectionPos( iii ) + header()->sectionSize (iii));
1365 header()->paintSection ( & p, header()->mapToIndex (iii), rect );
1366 }
1367 p.translate( 0, header()->height());
1368 drawContentsOffset ( &p, 0,0, 0,0, contentsWidth (), contentsHeight () );
1369 p.end();
1370#endif
1371}
diff --git a/korganizer/kolistview.h b/korganizer/kolistview.h
index f4d6879..c25592d 100644
--- a/korganizer/kolistview.h
+++ b/korganizer/kolistview.h
@@ -1,314 +1,317 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef _KOLISTVIEW_H 24#ifndef _KOLISTVIEW_H
25#define _KOLISTVIEW_H 25#define _KOLISTVIEW_H
26 26
27#include <qlistview.h> 27#include <qlistview.h>
28#include <qmap.h> 28#include <qmap.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include <klistview.h> 31#include <klistview.h>
32 32
33#ifndef DESKTOP_VERSION 33#ifndef DESKTOP_VERSION
34#include <qtopia/ir.h> 34#include <qtopia/ir.h>
35#else 35#else
36#define Ir char 36#define Ir char
37#endif 37#endif
38#include <libkcal/incidence.h> 38#include <libkcal/incidence.h>
39 39
40#include "koeventview.h" 40#include "koeventview.h"
41#include "customlistviewitem.h" 41#include "customlistviewitem.h"
42 42
43using namespace KCal; 43using namespace KCal;
44 44
45class KOListViewWhatsThis; 45class KOListViewWhatsThis;
46 46
47#include <qpushbutton.h> 47#include <qpushbutton.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qdialog.h> 49#include <qdialog.h>
50#include <qtimer.h> 50#include <qtimer.h>
51#include <qcombobox.h> 51#include <qcombobox.h>
52#include <qspinbox.h> 52#include <qspinbox.h>
53#include <qtooltip.h> 53#include <qtooltip.h>
54#include <qcheckbox.h> 54#include <qcheckbox.h>
55#include <qhbox.h> 55#include <qhbox.h>
56#include <qlabel.h> 56#include <qlabel.h>
57#include <kiconloader.h> 57#include <kiconloader.h>
58#include "kfiledialog.h" 58#include "kfiledialog.h"
59#include "koprefs.h" 59#include "koprefs.h"
60class KOAlarmPrefs : public QDialog 60class KOAlarmPrefs : public QDialog
61{ 61{
62 Q_OBJECT 62 Q_OBJECT
63 public: 63 public:
64 KOAlarmPrefs( QWidget *par=0, const char *name=0 ) : 64 KOAlarmPrefs( QWidget *par=0, const char *name=0 ) :
65 QDialog( par, name, true ) 65 QDialog( par, name, true )
66 { 66 {
67 setCaption( i18n("Alarm Options") ); 67 setCaption( i18n("Alarm Options") );
68 QVBoxLayout* alarmLayout = new QVBoxLayout( this ); 68 QVBoxLayout* alarmLayout = new QVBoxLayout( this );
69 alarmLayout->setSpacing( 3 ); 69 alarmLayout->setSpacing( 3 );
70 alarmLayout->setMargin( 3 ); 70 alarmLayout->setMargin( 3 );
71 QWidget *parent = this; 71 QWidget *parent = this;
72 mAlarmButton = new QCheckBox(i18n("Set reminder ON with offset to:"),parent); 72 mAlarmButton = new QCheckBox(i18n("Set reminder ON with offset to:"),parent);
73 alarmLayout->addWidget(mAlarmButton); 73 alarmLayout->addWidget(mAlarmButton);
74 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; 74 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ;
75 mAlarmTimeEdit->setValue( 15 ); 75 mAlarmTimeEdit->setValue( 15 );
76 alarmLayout->addWidget(mAlarmTimeEdit); 76 alarmLayout->addWidget(mAlarmTimeEdit);
77 mAlarmIncrCombo = new QComboBox(false, parent); 77 mAlarmIncrCombo = new QComboBox(false, parent);
78 mAlarmIncrCombo->insertItem(i18n("minute(s)")); 78 mAlarmIncrCombo->insertItem(i18n("minute(s)"));
79 mAlarmIncrCombo->insertItem(i18n("hour(s)")); 79 mAlarmIncrCombo->insertItem(i18n("hour(s)"));
80 mAlarmIncrCombo->insertItem(i18n("day(s)")); 80 mAlarmIncrCombo->insertItem(i18n("day(s)"));
81 alarmLayout->addWidget(mAlarmIncrCombo); 81 alarmLayout->addWidget(mAlarmIncrCombo);
82 QHBox * hb = new QHBox ( parent ); 82 QHBox * hb = new QHBox ( parent );
83 alarmLayout->addWidget(hb); 83 alarmLayout->addWidget(hb);
84 mAlarmSoundButton = new QPushButton(hb); 84 mAlarmSoundButton = new QPushButton(hb);
85 mAlarmSoundButton->setPixmap(SmallIcon("playsound")); 85 mAlarmSoundButton->setPixmap(SmallIcon("playsound"));
86 mAlarmSoundButton->setToggleButton(true); 86 mAlarmSoundButton->setToggleButton(true);
87 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); 87 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
88 mAlarmProgramButton = new QPushButton(hb); 88 mAlarmProgramButton = new QPushButton(hb);
89 mAlarmProgramButton->setPixmap(SmallIcon("run")); 89 mAlarmProgramButton->setPixmap(SmallIcon("run"));
90 mAlarmProgramButton->setToggleButton(true); 90 mAlarmProgramButton->setToggleButton(true);
91 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); 91 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
92 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); 92 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 );
93 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); 93 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 );
94 mAlarmLabel = new QLabel( this ); 94 mAlarmLabel = new QLabel( this );
95 alarmLayout->addWidget( mAlarmLabel ); 95 alarmLayout->addWidget( mAlarmLabel );
96 mAlarmLabel->setText( "..."+KOPrefs::instance()->mDefaultAlarmFile.right( 30 ) ); 96 mAlarmLabel->setText( "..."+KOPrefs::instance()->mDefaultAlarmFile.right( 30 ) );
97 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 97 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
98 mAlarmSoundButton->setOn( true ); 98 mAlarmSoundButton->setOn( true );
99 QPushButton * ok = new QPushButton( i18n("Set Alarm!"), this ); 99 QPushButton * ok = new QPushButton( i18n("Set Alarm!"), this );
100 alarmLayout->addWidget( ok ); 100 alarmLayout->addWidget( ok );
101 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 101 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
102 alarmLayout->addWidget( cancel ); 102 alarmLayout->addWidget( cancel );
103 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 103 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
104 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 104 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
105 resize( 200, 200 ); 105 resize( 200, 200 );
106 106
107 } 107 }
108 108
109 109
110 110
111 QString mAlarmSound, mAlarmProgram ; 111 QString mAlarmSound, mAlarmProgram ;
112 QCheckBox* mAlarmButton; 112 QCheckBox* mAlarmButton;
113 QSpinBox* mAlarmTimeEdit; 113 QSpinBox* mAlarmTimeEdit;
114 QLabel* mAlarmLabel; 114 QLabel* mAlarmLabel;
115 QComboBox* mAlarmIncrCombo ; 115 QComboBox* mAlarmIncrCombo ;
116 QPushButton* mAlarmSoundButton ,*mAlarmProgramButton; 116 QPushButton* mAlarmSoundButton ,*mAlarmProgramButton;
117private slots: 117private slots:
118 118
119void pickAlarmSound() 119void pickAlarmSound()
120{ 120{
121 //QString prefix = mAlarmSound; 121 //QString prefix = mAlarmSound;
122 if (!mAlarmSoundButton->isOn()) { 122 if (!mAlarmSoundButton->isOn()) {
123 //mAlarmSound = ""; 123 //mAlarmSound = "";
124 QToolTip::remove(mAlarmSoundButton); 124 QToolTip::remove(mAlarmSoundButton);
125 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 125 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
126 mAlarmProgramButton->setOn(true); 126 mAlarmProgramButton->setOn(true);
127 mAlarmSoundButton->setOn(false); 127 mAlarmSoundButton->setOn(false);
128 } else { 128 } else {
129 QString fileName(KFileDialog::getOpenFileName(mAlarmSound, 129 QString fileName(KFileDialog::getOpenFileName(mAlarmSound,
130 i18n("*.wav|Wav Files"), 0)); 130 i18n("*.wav|Wav Files"), 0));
131 if (!fileName.isEmpty()) { 131 if (!fileName.isEmpty()) {
132 mAlarmSound = fileName; 132 mAlarmSound = fileName;
133 mAlarmLabel->setText( "..."+fileName.right( 30 ) ); 133 mAlarmLabel->setText( "..."+fileName.right( 30 ) );
134 QToolTip::remove(mAlarmSoundButton); 134 QToolTip::remove(mAlarmSoundButton);
135 QString dispStr = i18n("Playing '%1'").arg(fileName); 135 QString dispStr = i18n("Playing '%1'").arg(fileName);
136 QToolTip::add(mAlarmSoundButton, dispStr); 136 QToolTip::add(mAlarmSoundButton, dispStr);
137 mAlarmProgramButton->setOn(false); 137 mAlarmProgramButton->setOn(false);
138 mAlarmSoundButton->setOn(true); 138 mAlarmSoundButton->setOn(true);
139 } else { 139 } else {
140 mAlarmProgramButton->setOn(true); 140 mAlarmProgramButton->setOn(true);
141 mAlarmSoundButton->setOn(false); 141 mAlarmSoundButton->setOn(false);
142 142
143 } 143 }
144 } 144 }
145}; 145};
146 146
147void pickAlarmProgram() 147void pickAlarmProgram()
148{ 148{
149 if (!mAlarmProgramButton->isOn()) { 149 if (!mAlarmProgramButton->isOn()) {
150 //mAlarmProgram = ""; 150 //mAlarmProgram = "";
151 QToolTip::remove(mAlarmProgramButton); 151 QToolTip::remove(mAlarmProgramButton);
152 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 152 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
153 mAlarmProgramButton->setOn(false); 153 mAlarmProgramButton->setOn(false);
154 mAlarmSoundButton->setOn(true); 154 mAlarmSoundButton->setOn(true);
155 } else { 155 } else {
156 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0)); 156 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0));
157 if (!fileName.isEmpty()) { 157 if (!fileName.isEmpty()) {
158 mAlarmProgram = fileName; 158 mAlarmProgram = fileName;
159 mAlarmLabel->setText( "..."+fileName.right( 30 ) ); 159 mAlarmLabel->setText( "..."+fileName.right( 30 ) );
160 QToolTip::remove(mAlarmProgramButton); 160 QToolTip::remove(mAlarmProgramButton);
161 QString dispStr = i18n("Running '%1'").arg(fileName); 161 QString dispStr = i18n("Running '%1'").arg(fileName);
162 QToolTip::add(mAlarmProgramButton, dispStr); 162 QToolTip::add(mAlarmProgramButton, dispStr);
163 mAlarmSoundButton->setOn(false); 163 mAlarmSoundButton->setOn(false);
164 mAlarmProgramButton->setOn(true); 164 mAlarmProgramButton->setOn(true);
165 } else { 165 } else {
166 mAlarmProgramButton->setOn(false); 166 mAlarmProgramButton->setOn(false);
167 mAlarmSoundButton->setOn(true); 167 mAlarmSoundButton->setOn(true);
168 } 168 }
169 } 169 }
170}; 170};
171 171
172}; 172};
173 173
174 174
175 175
176 176
177 177
178 178
179 179
180typedef CustomListViewItem<Incidence *> KOListViewItem; 180typedef CustomListViewItem<Incidence *> KOListViewItem;
181 181
182/** 182/**
183 This class provides the initialisation of a KOListViewItem for calendar 183 This class provides the initialisation of a KOListViewItem for calendar
184 components using the Incidence::Visitor. 184 components using the Incidence::Visitor.
185*/ 185*/
186class ListItemVisitor : public Incidence::Visitor 186class ListItemVisitor : public Incidence::Visitor
187{ 187{
188 public: 188 public:
189 ListItemVisitor(KOListViewItem *, QDate d); 189 ListItemVisitor(KOListViewItem *, QDate d);
190 ~ListItemVisitor(); 190 ~ListItemVisitor();
191 191
192 bool visit(Event *); 192 bool visit(Event *);
193 bool visit(Todo *); 193 bool visit(Todo *);
194 bool visit(Journal *); 194 bool visit(Journal *);
195 195
196 private: 196 private:
197 KOListViewItem *mItem; 197 KOListViewItem *mItem;
198 QDate mDate; 198 QDate mDate;
199}; 199};
200 200
201/** 201/**
202 This class provides a multi-column list view of events. It can 202 This class provides a multi-column list view of events. It can
203 display events from one particular day or several days, it doesn't 203 display events from one particular day or several days, it doesn't
204 matter. To use a view that only handles one day at a time, use 204 matter. To use a view that only handles one day at a time, use
205 KODayListView. 205 KODayListView.
206 206
207 @short multi-column list view of various events. 207 @short multi-column list view of various events.
208 @author Preston Brown <pbrown@kde.org> 208 @author Preston Brown <pbrown@kde.org>
209 @see KOBaseView, KODayListView 209 @see KOBaseView, KODayListView
210*/ 210*/
211class KOListView; 211class KOListView;
212 212
213class KOListViewListView : public KListView 213class KOListViewListView : public KListView
214{ 214{
215 Q_OBJECT 215 Q_OBJECT
216 public: 216 public:
217 KOListViewListView(KOListView * lv ); 217 KOListViewListView(KOListView * lv );
218 bool hasMultiSelection(QListViewItem*); 218 bool hasMultiSelection(QListViewItem*);
219 void printList();
219 signals: 220 signals:
220 void newEvent(); 221 void newEvent();
221 void showIncidence( Incidence* ); 222 void showIncidence( Incidence* );
222 public slots: 223 public slots:
223 void popupMenu(); 224 void popupMenu();
224 private: 225 private:
225 QPoint mEventPos; 226 QPoint mEventPos;
226 QPoint mEventGlobalPos; 227 QPoint mEventGlobalPos;
227 QTimer* mPopupTimer; 228 QTimer* mPopupTimer;
228 int mYMousePos; 229 int mYMousePos;
229 void keyPressEvent ( QKeyEvent * ) ; 230 void keyPressEvent ( QKeyEvent * ) ;
230 void contentsMouseDoubleClickEvent(QMouseEvent *e); 231 void contentsMouseDoubleClickEvent(QMouseEvent *e);
231 void contentsMousePressEvent(QMouseEvent *e); 232 void contentsMousePressEvent(QMouseEvent *e);
232 void contentsMouseReleaseEvent(QMouseEvent *e); 233 void contentsMouseReleaseEvent(QMouseEvent *e);
233 void contentsMouseMoveEvent(QMouseEvent *e); 234 void contentsMouseMoveEvent(QMouseEvent *e);
234 bool mMouseDown; 235 bool mMouseDown;
235}; 236};
236 237
237class KOListView : public KOEventView 238class KOListView : public KOEventView
238{ 239{
239 Q_OBJECT 240 Q_OBJECT
240 public: 241 public:
241 KOListView(Calendar *calendar, QWidget *parent = 0, 242 KOListView(Calendar *calendar, QWidget *parent = 0,
242 const char *name = 0); 243 const char *name = 0);
243 ~KOListView(); 244 ~KOListView();
244 245
245 virtual int maxDatesHint(); 246 virtual int maxDatesHint();
246 virtual int currentDateCount(); 247 virtual int currentDateCount();
247 virtual QPtrList<Incidence> selectedIncidences(); 248 virtual QPtrList<Incidence> selectedIncidences();
248 virtual DateList selectedDates(); 249 virtual DateList selectedDates();
249 250
250 void showDates(bool show); 251 void showDates(bool show);
251 Incidence* currentItem(); 252 Incidence* currentItem();
252 void addTodos(QPtrList<Todo> eventList); 253 void addTodos(QPtrList<Todo> eventList);
253 void addJournals(QPtrList<Journal> eventList); 254 void addJournals(QPtrList<Journal> eventList);
254 virtual void printPreview(CalPrinter *calPrinter, 255 virtual void printPreview(CalPrinter *calPrinter,
255 const QDate &, const QDate &); 256 const QDate &, const QDate &);
256 257
257 void readSettings(KConfig *config, QString setting = "KOListView Layout"); 258 void readSettings(KConfig *config, QString setting = "KOListView Layout");
258 void writeSettings(KConfig *config, QString setting = "KOListView Layout"); 259 void writeSettings(KConfig *config, QString setting = "KOListView Layout");
259 void updateList(); 260 void updateList();
260 void clearList(); 261 void clearList();
261 void setStartDate(const QDate &start); 262 void setStartDate(const QDate &start);
262 int count(); 263 int count();
263 QString getWhatsThisText(QPoint p); 264 QString getWhatsThisText(QPoint p);
264 signals: 265 signals:
265 void signalNewEvent(); 266 void signalNewEvent();
266 void beamIncidenceList(QPtrList<Incidence>); 267 void beamIncidenceList(QPtrList<Incidence>);
267 268
268 public slots: 269 public slots:
270 void hideAll();
271 void printList();
269 void resetFocus(); 272 void resetFocus();
270 virtual void updateView(); 273 virtual void updateView();
271 virtual void showDates(const QDate &start, const QDate &end); 274 virtual void showDates(const QDate &start, const QDate &end);
272 virtual void showEvents(QPtrList<Event> eventList); 275 virtual void showEvents(QPtrList<Event> eventList);
273 void clearSelection(); 276 void clearSelection();
274 void allSelection(); 277 void allSelection();
275 278
276 void clear(); 279 void clear();
277 void beamDone( Ir *ir ); 280 void beamDone( Ir *ir );
278 void showDates(); 281 void showDates();
279 void hideDates(); 282 void hideDates();
280 void deleteAll(); 283 void deleteAll();
281 void saveToFile(); 284 void saveToFile();
282 void saveToFileVCS(); 285 void saveToFileVCS();
283 void saveDescriptionToFile(); 286 void saveDescriptionToFile();
284 void beamSelected(); 287 void beamSelected();
285 void updateConfig(); 288 void updateConfig();
286 void addCat(); 289 void addCat();
287 void setCat(); 290 void setCat();
288 void setAlarm(); 291 void setAlarm();
289 void setCategories( bool removeOld ); 292 void setCategories( bool removeOld );
290 void changeEventDisplay(Event *, int); 293 void changeEventDisplay(Event *, int);
291 294
292 void defaultItemAction(QListViewItem *item); 295 void defaultItemAction(QListViewItem *item);
293 void popupMenu(QListViewItem *item,const QPoint &,int); 296 void popupMenu(QListViewItem *item,const QPoint &,int);
294 297
295 protected slots: 298 protected slots:
296 void processSelectionChange(QListViewItem *); 299 void processSelectionChange(QListViewItem *);
297 300
298 protected: 301 protected:
299 void writeToFile( bool iCal ); 302 void writeToFile( bool iCal );
300 void addEvents(QPtrList<Event> eventList); 303 void addEvents(QPtrList<Event> eventList);
301 void addIncidence(Incidence *); 304 void addIncidence(Incidence *);
302 KOListViewItem *getItemForEvent(Event *event); 305 KOListViewItem *getItemForEvent(Event *event);
303 306
304 private: 307 private:
305 KOListViewWhatsThis *mKOListViewWhatsThis; 308 KOListViewWhatsThis *mKOListViewWhatsThis;
306 KOListViewListView *mListView; 309 KOListViewListView *mListView;
307 KOEventPopupMenu *mPopupMenu; 310 KOEventPopupMenu *mPopupMenu;
308 KOListViewItem *mActiveItem; 311 KOListViewItem *mActiveItem;
309 QDict<Incidence> mUidDict; 312 QDict<Incidence> mUidDict;
310 QDate mStartDate; 313 QDate mStartDate;
311 void keyPressEvent ( QKeyEvent * ) ; 314 void keyPressEvent ( QKeyEvent * ) ;
312}; 315};
313 316
314#endif 317#endif
diff --git a/version b/version
index 3a546e2..f3e46b1 100644
--- a/version
+++ b/version
@@ -1 +1 @@
version = "2.1.5"; version = "2.1.6";