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
@@ -1247,135 +1247,135 @@
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,411 +1,425 @@
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() ) {
@@ -597,256 +611,277 @@ void KOListView::saveDescriptionToFile()
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);
@@ -1162,128 +1197,175 @@ void KOListViewListView::keyPressEvent ( QKeyEvent *e)
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
@@ -91,224 +91,227 @@ class KOAlarmPrefs : public QDialog
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";