summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt12
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt2
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt7
-rw-r--r--korganizer/koeditorgeneral.cpp7
-rw-r--r--korganizer/koeditorgeneral.h2
-rw-r--r--korganizer/koeventeditor.cpp4
-rw-r--r--korganizer/koeventviewer.cpp8
-rw-r--r--korganizer/koincidenceeditor.cpp5
-rw-r--r--korganizer/koincidenceeditor.h3
-rw-r--r--korganizer/kotodoeditor.cpp4
-rw-r--r--libkdepim/ksyncprefsdialog.cpp4
11 files changed, 50 insertions, 8 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 03bc03b..cd37aac 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,116 +1,128 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.2.8 ************
4
5
6I forgot what I fixed...
7
8Some minor fixes in KA/Pi and KO/Pi.
9
10KA/Pi uses popup menu now for quick category selection in contact edit dialog.
11
12In the Pi-syc mode of KO/Pi it is now possible to define specific resources which can be synced with the remote pi-sync server.
13This feature must be considered as unstable - it still needs some more testing.
14
3********** VERSION 2.2.7 ************ 15********** VERSION 2.2.7 ************
4 16
5Added for Desktop Versions (Windows + Linux) the possibility to specify an email client to call if the user clicks on an emailaddress. 17Added for Desktop Versions (Windows + Linux) the possibility to specify an email client to call if the user clicks on an emailaddress.
6(Menu: Config->Global Settings->Extern.Applications: E-mail). 18(Menu: Config->Global Settings->Extern.Applications: E-mail).
7Added as default (and example) Mozilla Thunderbird settings. 19Added as default (and example) Mozilla Thunderbird settings.
8If the path to the binary in this Mozilla Thunderbird example is not matching your environment you can take these settings as an template and configure "User defined email client". 20If the path to the binary in this Mozilla Thunderbird example is not matching your environment you can take these settings as an template and configure "User defined email client".
9 21
10********** VERSION 2.2.6 ************ 22********** VERSION 2.2.6 ************
11 23
12KO/Pi: 24KO/Pi:
13Made navigation in datepicker more userfriendly when using keyboard for scrolling. 25Made navigation in datepicker more userfriendly when using keyboard for scrolling.
14KO/Pi Alarm applet: 26KO/Pi Alarm applet:
15Made font size for the two popup menus with larger font configurable: 27Made font size for the two popup menus with larger font configurable:
16Change size with menu: 28Change size with menu:
17Play Beeps->Font Size 29Play Beeps->Font Size
18Save settings such that it will be restored after next reboot with menu: 30Save settings such that it will be restored after next reboot with menu:
19Play Beeps->Config->Save. 31Play Beeps->Config->Save.
20KA/Pi: 32KA/Pi:
21Big change! Needed for the upcoming Outlook sync: 33Big change! Needed for the upcoming Outlook sync:
22(Outlook sync available appr. end of 2005) 34(Outlook sync available appr. end of 2005)
23Telephone number types are now fixed in KA/Pi 35Telephone number types are now fixed in KA/Pi
24(but still compatible with the vCard standard, of cource) 36(but still compatible with the vCard standard, of cource)
25and they are compatible with the types used by the evil empire. 37and they are compatible with the types used by the evil empire.
26That makes syncing with OL possible and make it possible to sync better with mobile devices. 38That makes syncing with OL possible and make it possible to sync better with mobile devices.
27NOTE: 39NOTE:
28All your telephone types will be converted automatically at loading/importing! 40All your telephone types will be converted automatically at loading/importing!
29Such that it may be a good idea to make a backup of the data before starting KA/Pi. 41Such that it may be a good idea to make a backup of the data before starting KA/Pi.
30But the editing of phone numbers and types has changed completely such that it is now much faster to edit/change types and numbers. 42But the editing of phone numbers and types has changed completely such that it is now much faster to edit/change types and numbers.
31HINT: 43HINT:
32To see whether there was some number for some contact not converted senseful, choose 44To see whether there was some number for some contact not converted senseful, choose
33Menu: View->Modify view 45Menu: View->Modify view
34and add "Other Phone" ( in German "Sonst. Telefon") to the view. 46and add "Other Phone" ( in German "Sonst. Telefon") to the view.
35If a type was not converted senseful to some of the 18 new, fixed types, it will get the "Other" type. 47If a type was not converted senseful to some of the 18 new, fixed types, it will get the "Other" type.
36 48
37********** VERSION 2.2.5 ************ 49********** VERSION 2.2.5 ************
38 50
39Bugfixes in KO/Pi, KA/Pi and OM/Pi. 51Bugfixes in KO/Pi, KA/Pi and OM/Pi.
40Added possibility to disable auto saving in KO/Pi. 52Added possibility to disable auto saving in KO/Pi.
41How to disable it? Good question! Next question, please? 53How to disable it? Good question! Next question, please?
42Added info about count of events/todos/journals to calendar info. 54Added info about count of events/todos/journals to calendar info.
43 55
44 56
45********** VERSION 2.2.4 ************ 57********** VERSION 2.2.4 ************
46 58
47KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z. 59KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z.
48Added 3 sec notification about a started timer. 60Added 3 sec notification about a started timer.
49 61
50KO/Pi: 62KO/Pi:
51Added export option for all data to File->Export menu. 63Added export option for all data to File->Export menu.
52Better management if a save error occours. 64Better management if a save error occours.
53Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up. 65Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up.
54Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon. 66Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon.
55 67
56Added duration info about multiday events. 68Added duration info about multiday events.
57Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically. 69Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically.
58 70
59KA/Pi: 71KA/Pi:
60Added for vCard import the option to import contact data in Latin1 format. 72Added for vCard import the option to import contact data in Latin1 format.
61 73
62********** VERSION 2.2.3 ************ 74********** VERSION 2.2.3 ************
63 75
64KO/Pi: 76KO/Pi:
65Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events. 77Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events.
66 78
67Fixed usability problem in KA/Pi: 79Fixed usability problem in KA/Pi:
68Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option. 80Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option.
69 81
70Changed some behaviour in OM/Pi mail management to make it more usable. 82Changed some behaviour in OM/Pi mail management to make it more usable.
71 83
72 84
73********** VERSION 2.2.2 ************ 85********** VERSION 2.2.2 ************
74 86
75KO/Pi: 87KO/Pi:
76Fixed a problem with the sort order of last modified date in list view. 88Fixed a problem with the sort order of last modified date in list view.
77KA/Pi: 89KA/Pi:
78Fixed a resource config read problem on windows. 90Fixed a resource config read problem on windows.
79 91
80 92
81********** VERSION 2.2.1 ************ 93********** VERSION 2.2.1 ************
82 94
83KO/Pi: 95KO/Pi:
84Fixed a problem displaying very long allday events in agenda view in single day mode. 96Fixed a problem displaying very long allday events in agenda view in single day mode.
85Fixed a problem with the default settings for new todos. 97Fixed a problem with the default settings for new todos.
86Added an error message dialog if saving of calendar files is not possible. 98Added an error message dialog if saving of calendar files is not possible.
87Made it impossible to close KO/Pi if saving fails. 99Made it impossible to close KO/Pi if saving fails.
88Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick. 100Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick.
89Added config options for conflict detection. 101Added config options for conflict detection.
90 102
91KA/Pi: 103KA/Pi:
92Added a config option to turn on asking before a contact is deleted. 104Added a config option to turn on asking before a contact is deleted.
93Fixed a problem with the default view and view selection at startup. 105Fixed a problem with the default view and view selection at startup.
94Formatted name is now set on import, if formatted name is empty. 106Formatted name is now set on import, if formatted name is empty.
95Fixed a problem of displaying images in the contact details view: 107Fixed a problem of displaying images in the contact details view:
96Now the wid/hei ratio is not changed. 108Now the wid/hei ratio is not changed.
97I a picture is larger than 128 pixels in wid or hei it is downscaled to 109I a picture is larger than 128 pixels in wid or hei it is downscaled to
98max 128 pixels wid/hei. 110max 128 pixels wid/hei.
99 111
100********** VERSION 2.2.0 ************ 112********** VERSION 2.2.0 ************
101 113
102New stable release! 114New stable release!
103Fixed some minor usability problems. 115Fixed some minor usability problems.
104Added writing of next alarm to a file for usage on pdaXrom. 116Added writing of next alarm to a file for usage on pdaXrom.
105 117
106 118
107************************************* 119*************************************
108 120
109You can find the complete changelog 121You can find the complete changelog
110from version 1.7.7 to 2.2.0 122from version 1.7.7 to 2.2.0
111in the source package or on 123in the source package or on
112 124
113http://www.pi-sync.net/html/changelog.html 125http://www.pi-sync.net/html/changelog.html
114 126
115 127
116 128
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index 3448dcc..e03dafb 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -640,197 +640,199 @@
640{ "&Margin:","&Rand:" }, 640{ "&Margin:","&Rand:" },
641{ "Draw &borders","Zeichne Ränder" }, 641{ "Draw &borders","Zeichne Ränder" },
642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." }, 642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." },
643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." }, 643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." },
644{ "Sets the width of column separators","Sets the width of column separators" }, 644{ "Sets the width of column separators","Sets the width of column separators" },
645{ "&Layout","&Layout" }, 645{ "&Layout","&Layout" },
646{ "Show &empty fields","Zeige leere Felder" }, 646{ "Show &empty fields","Zeige leere Felder" },
647{ "Show field &labels","Zeige Feld Label" }, 647{ "Show field &labels","Zeige Feld Label" },
648{ "Be&havior","Ver&halten" }, 648{ "Be&havior","Ver&halten" },
649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" }, 649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" },
650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" }, 650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" },
651{ "Confirm Delete","Bestätige Löschen" }, 651{ "Confirm Delete","Bestätige Löschen" },
652{ "Edit Address Book Filter","Editiere Adressbuch Filter" }, 652{ "Edit Address Book Filter","Editiere Adressbuch Filter" },
653{ "Category rule","Kategorie Regel" }, 653{ "Category rule","Kategorie Regel" },
654{ "Include categories","Inklusive" }, 654{ "Include categories","Inklusive" },
655{ "Exclude categories","Exclusive" }, 655{ "Exclude categories","Exclusive" },
656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" }, 656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" },
657{ "public","Öffentlich" }, 657{ "public","Öffentlich" },
658{ "private","Privat" }, 658{ "private","Privat" },
659{ "confidential","Vertraulich" }, 659{ "confidential","Vertraulich" },
660{ "Configure Resources","Konfiguriere Resourcen" }, 660{ "Configure Resources","Konfiguriere Resourcen" },
661{ "Resource Configuration","Resource Konfiguration" }, 661{ "Resource Configuration","Resource Konfiguration" },
662{ "Resources","Resourcen" }, 662{ "Resources","Resourcen" },
663{ "Standard","Standard" }, 663{ "Standard","Standard" },
664{ "&Use as Standard","Setze als Standard" }, 664{ "&Use as Standard","Setze als Standard" },
665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" }, 665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" },
666{ "General Settings","Allgemeine Einstellungen" }, 666{ "General Settings","Allgemeine Einstellungen" },
667{ "Read-only","Nur-Lesen" }, 667{ "Read-only","Nur-Lesen" },
668{ "Include in sync","Schließe in Sync mit ein" }, 668{ "Include in sync","Schließe in Sync mit ein" },
669{ "%1 Resource Settings","%1 Resource Einstellungen" }, 669{ "%1 Resource Settings","%1 Resource Einstellungen" },
670{ "Format:","Format:" }, 670{ "Format:","Format:" },
671{ "Location:","Ort:" }, 671{ "Location:","Ort:" },
672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" }, 672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" },
673{ "Language","Sprache" }, 673{ "Language","Sprache" },
674{ "Time Format","Zeit Format" }, 674{ "Time Format","Zeit Format" },
675{ "Time Zone","Zeit Zone" }, 675{ "Time Zone","Zeit Zone" },
676{ "Data storage path","Daten Speicherpfad" }, 676{ "Data storage path","Daten Speicherpfad" },
677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
680{ "Save settings","Speichere Einstellungen" }, 680{ "Save settings","Speichere Einstellungen" },
681{ "Save standard","Speichere Standard" }, 681{ "Save standard","Speichere Standard" },
682{ "Save","Speichern" }, 682{ "Save","Speichern" },
683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
685{ "Multiple Sync options","Multi Sync Optionen" }, 685{ "Multiple Sync options","Multi Sync Optionen" },
686{ "Sync algo options","Sync Ablauf Optionen" }, 686{ "Sync algo options","Sync Ablauf Optionen" },
687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
688{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 688{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
690{ "Write back options","Optionen zum Zurückschreiben" }, 690{ "Write back options","Optionen zum Zurückschreiben" },
691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
696{ "Time period","Zeitspanne" }, 696{ "Time period","Zeitspanne" },
697{ "From ","Von " }, 697{ "From ","Von " },
698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
699{ " weeks in the future "," Wochen in der Zukunft " }, 699{ " weeks in the future "," Wochen in der Zukunft " },
700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
701{ "Local temp file:","Lokale temp Datei:" }, 701{ "Local temp file:","Lokale temp Datei:" },
702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." }, 704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." },
705{ "Sorry","Tut mir leid" }, 705{ "Sorry","Tut mir leid" },
706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" }, 706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" },
707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" }, 707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" },
708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" }, 708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" },
709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
716{ "Error","Fehler" }, 716{ "Error","Fehler" },
717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
719{ "Warning","Warnung" }, 719{ "Warning","Warnung" },
720{ "Select week number","Wähle Wochen Nummer" }, 720{ "Select week number","Wähle Wochen Nummer" },
721{ "Februar","Februar" }, 721{ "Februar","Februar" },
722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
723{ "Password for remote access:","Passwort für fernen Zugriff:" }, 723{ "Password for remote access:","Passwort für fernen Zugriff:" },
724{ "Remote IP address:","Ferne IP Adresse:" }, 724{ "Remote IP address:","Ferne IP Adresse:" },
725{ "Remote port number:","Ferne Port Nummer:" }, 725{ "Remote port number:","Ferne Port Nummer:" },
726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
727{ "Remote from: ","Fern von: " }, 727{ "Remote from: ","Fern von: " },
728{ "Local from: ","Lokal von: " }, 728{ "Local from: ","Lokal von: " },
729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
731{ "Write back","Schreibe zurück" }, 731{ "Write back","Schreibe zurück" },
732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
733{ "Received sync request","Sync Anfrage erhalten" }, 733{ "Received sync request","Sync Anfrage erhalten" },
734{ "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." }, 734{ "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." },
735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
737{ "Sending file...","Sende Datei..." }, 737{ "Sending file...","Sende Datei..." },
738{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 738{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
739{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 739{ "Receiving synced file...","Gesyncte Daten erhalten..." },
740{ "Received %1 bytes","%1 Bytes erhalten" }, 740{ "Received %1 bytes","%1 Bytes erhalten" },
741{ "Writing file to disk...","Speichere Datei..." }, 741{ "Writing file to disk...","Speichere Datei..." },
742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
744{ "Synchronize!","Synchronisiere!" }, 744{ "Synchronize!","Synchronisiere!" },
745{ "High clock skew!","Großer Uhrzeitunterschied!" }, 745{ "High clock skew!","Großer Uhrzeitunterschied!" },
746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
747{ "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!" }, 747{ "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!" },
748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
751{ "Edit new contact","Bearbeite neuen Kontakt" }, 751{ "Edit new contact","Bearbeite neuen Kontakt" },
752{ "Edit ","Bearbeite " }, 752{ "Edit ","Bearbeite " },
753{ "No contact changed!","Kein Kontakt verändert" }, 753{ "No contact changed!","Kein Kontakt verändert" },
754{ "%1 contacts changed!","%1 Kontakte geändert!" }, 754{ "%1 contacts changed!","%1 Kontakte geändert!" },
755{ "Mobile (home)","Handy (Privat)" }, 755{ "Mobile (home)","Handy (Privat)" },
756{ "Mobile (work)","Handy (Arbeit)" }, 756{ "Mobile (work)","Handy (Arbeit)" },
757{ "Def.Formatted Name","Def. Format. Name" }, 757{ "Def.Formatted Name","Def. Format. Name" },
758{ "Colors","Farben" }, 758{ "Colors","Farben" },
759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
760{ "Backup enabled","Backup angeschaltet" }, 760{ "Backup enabled","Backup angeschaltet" },
761{ "Use standard backup dir","Standard Backupverzeichnis" }, 761{ "Use standard backup dir","Standard Backupverzeichnis" },
762{ "Number of Backups:","Anzahl der Backups" }, 762{ "Number of Backups:","Anzahl der Backups" },
763{ "Make backup every ","Mache ein Backup alle " }, 763{ "Make backup every ","Mache ein Backup alle " },
764{ " days"," Tage" }, 764{ " days"," Tage" },
765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
766{ "Backup Failed!","Backup Problem!" }, 766{ "Backup Failed!","Backup Problem!" },
767{ "Try again now","Versuche jetzt nochmal" }, 767{ "Try again now","Versuche jetzt nochmal" },
768{ "Try again later","Versuche später nochmal" }, 768{ "Try again later","Versuche später nochmal" },
769{ "Try again tomorrow","Versuche morgen nochmal" }, 769{ "Try again tomorrow","Versuche morgen nochmal" },
770{ "Disable backup","Schalte Backup ab" }, 770{ "Disable backup","Schalte Backup ab" },
771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
773{ "Choose action","Wähle Aktion" }, 773{ "Choose action","Wähle Aktion" },
774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." }, 774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." },
775{ "Global Settings...","Globale Einstellungen..." }, 775{ "Global Settings...","Globale Einstellungen..." },
776{ "Spouse","Ehegatte" }, 776{ "Spouse","Ehegatte" },
777{ "Notes","Notizen" }, 777{ "Notes","Notizen" },
778{ "Messanger","Messanger" }, 778{ "Messanger","Messanger" },
779{ "Assistant","Assistent" }, 779{ "Assistant","Assistent" },
780{ "Manager","Manager" }, 780{ "Manager","Manager" },
781{ "Secrecy","Sichtbar" }, 781{ "Secrecy","Sichtbar" },
782{ "male","männlich" }, 782{ "male","männlich" },
783{ "female","weiblich" }, 783{ "female","weiblich" },
784{ "Hide!","Verbergen!" }, 784{ "Hide!","Verbergen!" },
785{ "Show!","Anzeigen!" }, 785{ "Show!","Anzeigen!" },
786{ "Details","Details" }, 786{ "Details","Details" },
787{ "Search:","Suche:" }, 787{ "Search:","Suche:" },
788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
793{ "Pi-Sync Error","Pi-Sync Fehler" }, 793{ "Pi-Sync Error","Pi-Sync Fehler" },
794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
800{ "Receiving file from remote...","Empfange entfernte Datei..." }, 800{ "Receiving file from remote...","Empfange entfernte Datei..." },
801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
806{ "Writing back file ...","Schreibe Datei zurück..." }, 806{ "Writing back file ...","Schreibe Datei zurück..." },
807{ "Sending back file ...","Sende Datei zurück..." }, 807{ "Sending back file ...","Sende Datei zurück..." },
808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" }, 808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" },
809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" }, 810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" },
811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" }, 811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" },
812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." }, 812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." },
813{ "Import this contact?","Importiere diesen Kontakt?" }, 813{ "Import this contact?","Importiere diesen Kontakt?" },
814{ "Import all!","Importiere alle!" }, 814{ "Import all!","Importiere alle!" },
815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" }, 815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" },
816{ "Import Format","Import Format" }, 816{ "Import Format","Import Format" },
817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." }, 817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." },
818{ "Home2","Privat2" }, 818{ "Home2","Privat2" },
819{ "Work2","Arbeit2" }, 819{ "Work2","Arbeit2" },
820{ "Fax (Work)","Fax (Arbeit)" }, 820{ "Fax (Work)","Fax (Arbeit)" },
821{ "Fax (Home)","Fax (Privat)" }, 821{ "Fax (Home)","Fax (Privat)" },
822{ "Assistent","Sekretär(in)" }, 822{ "Assistent","Sekretär(in)" },
823{ "Company","Firma" }, 823{ "Company","Firma" },
824{ "Mobile2","Handy2" }, 824{ "Mobile2","Handy2" },
825{ "Callback","Rückruf" }, 825{ "Callback","Rückruf" },
826{ "Fax (Other)","Fax (Sonst.)" }, 826{ "Fax (Other)","Fax (Sonst.)" },
827{ "Primary","Bevorzugt" }, 827{ "Primary","Bevorzugt" },
828{ "Mobile","Handy" }, 828{ "Mobile","Handy" },
829{ "Unfiled","Nicht zugeordnet" }, 829{ "Unfiled","Nicht zugeordnet" },
830{ "Format.n.:","Format.N.:" }, 830{ "Format.n.:","Format.N.:" },
831{ "Other Phone","Sonst. Telefon" }, 831{ "Other Phone","Sonst. Telefon" },
832{ "Pi-Sync - all calendars ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync - alle Kalender ( direktes Kx/Pi mit Kx/Pi syncen )" },
833{ "Pi-Sync - selected calendars ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync - ausgewählte Kalender ( direktes Kx/Pi mit Kx/Pi syncen )" },
832{ "","" }, 834{ "","" },
833{ "","" }, 835{ "","" },
834{ "","" }, 836{ "","" },
835{ "","" }, 837{ "","" },
836{ "","" }, \ No newline at end of file 838{ "","" }, \ No newline at end of file
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 767e243..2dec521 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -747,385 +747,384 @@
747{ "Sync+save","Syncen+speichern" }, 747{ "Sync+save","Syncen+speichern" },
748{ "Default","Standard" }, 748{ "Default","Standard" },
749{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 749{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
750{ " %d items?"," %d Einträge?" }, 750{ " %d items?"," %d Einträge?" },
751{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 751{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
752{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 752{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
753{ "Current","Aktuelle" }, 753{ "Current","Aktuelle" },
754{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 754{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
755{ "All","Alle" }, 755{ "All","Alle" },
756{ "Data Loss Warning","Datenverlust Warnung" }, 756{ "Data Loss Warning","Datenverlust Warnung" },
757{ "Proceed","Weitermachen" }, 757{ "Proceed","Weitermachen" },
758{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 758{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
759{ "Filter disabled ","Filter abgeschaltet" }, 759{ "Filter disabled ","Filter abgeschaltet" },
760{ "Filter selected: ","Gewählter Filter: " }, 760{ "Filter selected: ","Gewählter Filter: " },
761{ "Toggle Cancel","Gecancelt ändern" }, 761{ "Toggle Cancel","Gecancelt ändern" },
762{ "&Toggle Cancel","Gecancel&t ändern" }, 762{ "&Toggle Cancel","Gecancel&t ändern" },
763{ "Configure Toolbar","Konfiguriere Toolbar" }, 763{ "Configure Toolbar","Konfiguriere Toolbar" },
764{ "Stretched TB","Gedehnte TB" }, 764{ "Stretched TB","Gedehnte TB" },
765{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 765{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
766{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 766{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
767{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 767{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
768{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 768{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
769{ "Imported file successfully","Datei erfolgreich importiert" }, 769{ "Imported file successfully","Datei erfolgreich importiert" },
770{ "Error importing file","Fehler beim Importieren der Datei" }, 770{ "Error importing file","Fehler beim Importieren der Datei" },
771{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 771{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
772{ "Export iCal filename(*.ics)","Export iCal Dateiname(*.ics)" }, 772{ "Export iCal filename(*.ics)","Export iCal Dateiname(*.ics)" },
773{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 773{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
774{ "Overwrite!","Überschreiben!" }, 774{ "Overwrite!","Überschreiben!" },
775{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 775{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
776{ "Load backup filename","Lade Backup Dateiname" }, 776{ "Load backup filename","Lade Backup Dateiname" },
777{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 777{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
778{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 778{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
779{ "Save backup filename","Speichere Backup Dateiname" }, 779{ "Save backup filename","Speichere Backup Dateiname" },
780{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 780{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
781{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 781{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
782{ "Details of attendee","Teilnehmerdetails" }, 782{ "Details of attendee","Teilnehmerdetails" },
783{ "Work phone:\n","Telefon Arbeit:\n" }, 783{ "Work phone:\n","Telefon Arbeit:\n" },
784{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 784{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
785{ "Home phone:\n","Telefon privat:\n" }, 785{ "Home phone:\n","Telefon privat:\n" },
786{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 786{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
787{ "Email:\n","Email:\n" }, 787{ "Email:\n","Email:\n" },
788{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 788{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
789{ "Audio Al.: ","Audio Al.: " }, 789{ "Audio Al.: ","Audio Al.: " },
790{ "Proc.Al.: ","Proz.Al.: " }, 790{ "Proc.Al.: ","Proz.Al.: " },
791{ "No sound set","Kein Sound definiert" }, 791{ "No sound set","Kein Sound definiert" },
792{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 792{ "*.wav|Wav Files","*.wav|Wav Dateien" },
793{ "No program set","Kein Programm definiert" }, 793{ "No program set","Kein Programm definiert" },
794{ "Running '%1'","Ausführen '%1'" }, 794{ "Running '%1'","Ausführen '%1'" },
795{ "Playing '%1'","Abspielen '%1'" }, 795{ "Playing '%1'","Abspielen '%1'" },
796{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 796{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
797{ "Load!","Laden!" }, 797{ "Load!","Laden!" },
798{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 798{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
799{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 799{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
800{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 800{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
801{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 801{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
802{ "Features + hints...","Eigenschaften + Tipps..." }, 802{ "Features + hints...","Eigenschaften + Tipps..." },
803{ "User translation...","Benutzer Übersetzung..." }, 803{ "User translation...","Benutzer Übersetzung..." },
804{ "Sync HowTo...","Synchronisation HowTo..." }, 804{ "Sync HowTo...","Synchronisation HowTo..." },
805{ "Print calendar...","Drucke Kalender..." }, 805{ "Print calendar...","Drucke Kalender..." },
806{ "Anniversary","Jahrestag" }, 806{ "Anniversary","Jahrestag" },
807{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 807{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
808{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 808{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
809{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 809{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
810{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 810{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
811{ "<b>Access: </b>","<b>Zugriff: </b>" }, 811{ "<b>Access: </b>","<b>Zugriff: </b>" },
812{ "(%1 min before)","(%1 min vorher)" }, 812{ "(%1 min before)","(%1 min vorher)" },
813{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 813{ "<b>Categories: </b>","<b>Kategorien: </b>" },
814{ "Save Journal/Description...","Speichere Journal/Details..." }, 814{ "Save Journal/Description...","Speichere Journal/Details..." },
815{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 815{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
816{ "Continue","Weitermachen" }, 816{ "Continue","Weitermachen" },
817{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 817{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
818{ "Attendee:","Teilnehmer:" }, 818{ "Attendee:","Teilnehmer:" },
819{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 819{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
820{ "On day ","Am Tag " }, 820{ "On day ","Am Tag " },
821{ "%1 of ","%1 des Monats" }, 821{ "%1 of ","%1 des Monats" },
822{ "%1 of the year","%1 des Jahres" }, 822{ "%1 of the year","%1 des Jahres" },
823{ "Anonymous","Anonymo" }, 823{ "Anonymous","Anonymo" },
824{ "nobody@nowhere","niemand@nirgendwo" }, 824{ "nobody@nowhere","niemand@nirgendwo" },
825{ "calendar.html","calendar.html" }, 825{ "calendar.html","calendar.html" },
826{ " Local Time"," Lokale Zeit" }, 826{ " Local Time"," Lokale Zeit" },
827{ "Unknown Name","Unbekannter Name" }, 827{ "Unknown Name","Unbekannter Name" },
828{ "unknown@nowhere","unbekannt@nirgendwo" }, 828{ "unknown@nowhere","unbekannt@nirgendwo" },
829{ "Beam via IR!","Beam via IR!" }, 829{ "Beam via IR!","Beam via IR!" },
830{ "Next Month","Nächster Monat" }, 830{ "Next Month","Nächster Monat" },
831{ "Prio","Prio" }, 831{ "Prio","Prio" },
832{ "Reparent Todo","Mache Sub-Todo" }, 832{ "Reparent Todo","Mache Sub-Todo" },
833{ "tomorrow","morgen" }, 833{ "tomorrow","morgen" },
834{ "today","heute" }, 834{ "today","heute" },
835{ "yesterday","gestern" }, 835{ "yesterday","gestern" },
836{ "Ok","Ok" }, 836{ "Ok","Ok" },
837{ "Ok+Agenda","Ok+Agenda" }, 837{ "Ok+Agenda","Ok+Agenda" },
838{ "Email","Email" }, 838{ "Email","Email" },
839{ "RSVP","RSVP" }, 839{ "RSVP","RSVP" },
840{ "Email:","Email:" }, 840{ "Email:","Email:" },
841{ "Appointment Time ","Termin Zeit " }, 841{ "Appointment Time ","Termin Zeit " },
842{ "2","2" }, 842{ "2","2" },
843{ "3","3" }, 843{ "3","3" },
844{ "4","4" }, 844{ "4","4" },
845{ " 0 %"," 0 %" }, 845{ " 0 %"," 0 %" },
846{ " 20 %"," 20 %" }, 846{ " 20 %"," 20 %" },
847{ " 40 %"," 40 %" }, 847{ " 40 %"," 40 %" },
848{ " 60 %"," 60 %" }, 848{ " 60 %"," 60 %" },
849{ " 80 %"," 80 %" }, 849{ " 80 %"," 80 %" },
850{ "100 %","100 %" }, 850{ "100 %","100 %" },
851{ "Filter","Filter" }, 851{ "Filter","Filter" },
852{ "Configure","Konfiguriere" }, 852{ "Configure","Konfiguriere" },
853{ "What's Next","What's Next" }, 853{ "What's Next","What's Next" },
854{ "Complete calendar...","Kompletten Kalender..." }, 854{ "Complete calendar...","Kompletten Kalender..." },
855{ "Filtered calendar...","Gefilterten Kalender..." }, 855{ "Filtered calendar...","Gefilterten Kalender..." },
856{ "Export to phone","Exportiere zum Handy" }, 856{ "Export to phone","Exportiere zum Handy" },
857{ "Beam receive enabled","Beam Empfang an" }, 857{ "Beam receive enabled","Beam Empfang an" },
858{ "What's new?","Was ist neu?" }, 858{ "What's new?","Was ist neu?" },
859{ "FAQ...","FAQ..." }, 859{ "FAQ...","FAQ..." },
860{ "Licence...","Licence..." }, 860{ "Licence...","Licence..." },
861{ "What's This?","What's This?" }, 861{ "What's This?","What's This?" },
862{ "&Edit...","Bearbeite..." }, 862{ "&Edit...","Bearbeite..." },
863{ "Oktober","Oktober" }, 863{ "Oktober","Oktober" },
864{ "Title","Titel" }, 864{ "Title","Titel" },
865{ "%1 %","%1 %" }, 865{ "%1 %","%1 %" },
866{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 866{ "Enable Pi-Sync","Schalte Pi-Sync an" },
867{ "Import!","Importiere!" }, 867{ "Import!","Importiere!" },
868{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 868{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
869{ "Export to phone options","Export ans Handy Optionen" }, 869{ "Export to phone options","Export ans Handy Optionen" },
870{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 870{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
871{ "I/O device: ","I/O device: " }, 871{ "I/O device: ","I/O device: " },
872{ "Connection: ","Connection: " }, 872{ "Connection: ","Connection: " },
873{ "Model(opt.): ","Model(opt.): " }, 873{ "Model(opt.): ","Model(opt.): " },
874{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 874{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
875{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 875{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
876{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" }, 876{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" },
877{ "Export to mobile phone!","Exportiere auf das Handy!" }, 877{ "Export to mobile phone!","Exportiere auf das Handy!" },
878{ "Export complete calendar","Exportiere kompletten Kalender" }, 878{ "Export complete calendar","Exportiere kompletten Kalender" },
879{ "Writing to phone...","Sende Daten ans Handy..." }, 879{ "Writing to phone...","Sende Daten ans Handy..." },
880{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 880{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
881{ "Retry","Nochmal versuchen" }, 881{ "Retry","Nochmal versuchen" },
882{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 882{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
883{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 883{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
884{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 884{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
885{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 885{ "Export filtered calendar","Exportiere gefilterten Kalender" },
886{ "Preferences","Vorlieben" }, 886{ "Preferences","Vorlieben" },
887{ "Global","Global" }, 887{ "Global","Global" },
888{ "Phone","Phone" }, 888{ "Phone","Phone" },
889{ "SMS","SMS" }, 889{ "SMS","SMS" },
890{ "Fax","Fax" }, 890{ "Fax","Fax" },
891{ "Pager","Pager" }, 891{ "Pager","Pager" },
892{ "SIP","SIP" }, 892{ "SIP","SIP" },
893{ "Italian","Italienisch" }, 893{ "Italian","Italienisch" },
894{ "24:00","24:00" }, 894{ "24:00","24:00" },
895{ "12:00am","12:00am" }, 895{ "12:00am","12:00am" },
896{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 896{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
897{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 897{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
898{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 898{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
899{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 899{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
900{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 900{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
901{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 901{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
902{ "Used Mail Client","Benutzter Mail Client" }, 902{ "Used Mail Client","Benutzter Mail Client" },
903{ "Channel:","Channel:" }, 903{ "Channel:","Channel:" },
904{ "Message:","Message:" }, 904{ "Message:","Message:" },
905{ "Parameters:","Parameter:" }, 905{ "Parameters:","Parameter:" },
906{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 906{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
907{ "extra Message:","extra Message:" }, 907{ "extra Message:","extra Message:" },
908{ "extra Parameters:","extra Parameter:" }, 908{ "extra Parameters:","extra Parameter:" },
909{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 909{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
910{ "External Apps.","Externe Appl." }, 910{ "External Apps.","Externe Appl." },
911{ "24 hours","24 Std." }, 911{ "24 hours","24 Std." },
912{ "3 hours","3 Std." }, 912{ "3 hours","3 Std." },
913{ "1 hour","1 Std." }, 913{ "1 hour","1 Std." },
914{ "15 minutes","15 Min." }, 914{ "15 minutes","15 Min." },
915{ "5 minutes","5 Min." }, 915{ "5 minutes","5 Min." },
916{ "1 minute","1 Min." }, 916{ "1 minute","1 Min." },
917{ "23","23" }, 917{ "23","23" },
918{ "Mon 15","Mon 15" }, 918{ "Mon 15","Mon 15" },
919{ "Configure KO","Konfiguriere KO" }, 919{ "Configure KO","Konfiguriere KO" },
920{ "Event text","Termin Text" }, 920{ "Event text","Termin Text" },
921{ "ToDo","Todo" }, 921{ "ToDo","Todo" },
922{ "Today","Heute" }, 922{ "Today","Heute" },
923{ "What's Next View","What's Next Ansicht" }, 923{ "What's Next View","What's Next Ansicht" },
924{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 924{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
925{ "Alarm","Alarm" }, 925{ "Alarm","Alarm" },
926{ "Used %1 Client","Benutzter %1 Client" }, 926{ "Used %1 Client","Benutzter %1 Client" },
927{ "No email client installed","Kein Email Klient installiert" }, 927{ "No email client installed","Kein Email Klient installiert" },
928{ "Userdefined email client","Benutzerdef. Email Klient" }, 928{ "Userdefined email client","Benutzerdef. Email Klient" },
929{ "OM/Pi email client","OM/Pi Email Klient" }, 929{ "OM/Pi email client","OM/Pi Email Klient" },
930{ "Include in multiple ","Beziehe in multiple " }, 930{ "Include in multiple ","Beziehe in multiple " },
931{ "calendar ","Kalender " }, 931{ "calendar ","Kalender " },
932{ "addressbook ","Adressbuch " }, 932{ "addressbook ","Adressbuch " },
933{ "pwmanager","PWmanager" }, 933{ "pwmanager","PWmanager" },
934{ " sync"," Sync ein" }, 934{ " sync"," Sync ein" },
935{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 935{ "Write back synced data","Schreibe gesyncte Daten zurück" },
936{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 936{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
937{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 937{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
938{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 938{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
939{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
940{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 939{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
941{ "Help...","Hilfe..." }, 940{ "Help...","Hilfe..." },
942{ "Local file Cal:","Lokale Datei Kal:" }, 941{ "Local file Cal:","Lokale Datei Kal:" },
943{ "Local file ABook:","Lokale Datei ABuch:" }, 942{ "Local file ABook:","Lokale Datei ABuch:" },
944{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 943{ "Local file PWMgr:","Lokale Datei PWMgr:" },
945{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 944{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
946{ "Calendar:","Kalender:" }, 945{ "Calendar:","Kalender:" },
947{ "AddressBook:","AdressBuch:" }, 946{ "AddressBook:","AdressBuch:" },
948{ "PWManager:","PWManager:" }, 947{ "PWManager:","PWManager:" },
949{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 948{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
950{ "ssh/scp","ssh/scp" }, 949{ "ssh/scp","ssh/scp" },
951{ "ftp","ftp" }, 950{ "ftp","ftp" },
952{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 951{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
953{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 952{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
954{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 953{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
955{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 954{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
956{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 955{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
957{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 956{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
958{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 957{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
959{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 958{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
960{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 959{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
961{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 960{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
962{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 961{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
963{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 962{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
964{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 963{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
965{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 964{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
966{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen "Multi-Syncen"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 965{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen "Multi-Syncen"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
967{ "KDE-Pim Sync","KDE-Pim Sync" }, 966{ "KDE-Pim Sync","KDE-Pim Sync" },
968{ "Multiple profiles","Multi-Sync Profile" }, 967{ "Multiple profiles","Multi-Sync Profile" },
969{ "Device: ","Gerät: " }, 968{ "Device: ","Gerät: " },
970{ "Multiple sync started.","Multi-Sync gestartet." }, 969{ "Multiple sync started.","Multi-Sync gestartet." },
971{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 970{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
972{ "Turn filter on","Schalte Filter an" }, 971{ "Turn filter on","Schalte Filter an" },
973{ "Turn filter off","Schalte Filter aus" }, 972{ "Turn filter off","Schalte Filter aus" },
974{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 973{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
975{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 974{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
976{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 975{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
977{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 976{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
978{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 977{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
979{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 978{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
980{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 979{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
981{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 980{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
982{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 981{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
983{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 982{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
984{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 983{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
985{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 984{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
986{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 985{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
987{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 986{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
988{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 987{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
989{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 988{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
990{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 989{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
991{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 990{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
992{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 991{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
993{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 992{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
994{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 993{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
995{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 994{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
996{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 995{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
997{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 996{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
998{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 997{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
999{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 998{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1000{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 999{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1001{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1000{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1001{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1003{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1002{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1004{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1003{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1005{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1004{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1006{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1005{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1007{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1006{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1008{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1007{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1009{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1008{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1010{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1009{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1011{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" }, 1010{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" },
1012{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1011{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1013{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1012{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1014{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, 1013{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" },
1015{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" }, 1014{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" },
1016{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1015{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1017{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " }, 1016{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " },
1018{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1017{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1019{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1018{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1020{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1019{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1021{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1020{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1022{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1021{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1023{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1022{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1024{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1023{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1025{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1024{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1026{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1025{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1027{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1026{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1028{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, 1027{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" },
1029{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1028{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1030{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1029{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1031{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1030{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1032{ "KO/Pi FAQ","KO/Pi FAQ" }, 1031{ "KO/Pi FAQ","KO/Pi FAQ" },
1033{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1032{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1034{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1033{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1035{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1034{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1036{ "From: ","Von: " }, 1035{ "From: ","Von: " },
1037{ "Remove sync info","Entferne Sync Info" }, 1036{ "Remove sync info","Entferne Sync Info" },
1038{ "For all profiles","Für alle Profile" }, 1037{ "For all profiles","Für alle Profile" },
1039{ "Hide not Running","Verstecke nicht Laufende" }, 1038{ "Hide not Running","Verstecke nicht Laufende" },
1040{ "ME","ME" }, 1039{ "ME","ME" },
1041{ "Toolbar","Toolbar" }, 1040{ "Toolbar","Toolbar" },
1042{ "Undo Delete...","UNDO Löschen..." }, 1041{ "Undo Delete...","UNDO Löschen..." },
1043{ "Undo Delete","Löschen rückgängig machen" }, 1042{ "Undo Delete","Löschen rückgängig machen" },
1044{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1043{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1045{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1044{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1046{ "Januar","Januar" }, 1045{ "Januar","Januar" },
1047{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1046{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1048{ "No Filter","Kein Filter" }, 1047{ "No Filter","Kein Filter" },
1049{ "Multiple Sync options","Multi Sync Optionen" }, 1048{ "Multiple Sync options","Multi Sync Optionen" },
1050{ "Sync algo options","Sync Ablauf Optionen" }, 1049{ "Sync algo options","Sync Ablauf Optionen" },
1051{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1050{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1052{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1051{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1053{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1052{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1054{ "Write back options","Optionen zum Zurückschreiben" }, 1053{ "Write back options","Optionen zum Zurückschreiben" },
1055{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1054{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1056{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1055{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1057{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1056{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1058{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1057{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1059{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1058{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1060{ "Time period","Zeitspanne" }, 1059{ "Time period","Zeitspanne" },
1061{ "From ","Von " }, 1060{ "From ","Von " },
1062{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1061{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1063{ " weeks in the future "," Wochen in der Zukunft " }, 1062{ " weeks in the future "," Wochen in der Zukunft " },
1064{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1063{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1065{ "Local temp file:","Lokale temp Datei:" }, 1064{ "Local temp file:","Lokale temp Datei:" },
1066{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1065{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1067{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1066{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1068{ "Language","Sprache" }, 1067{ "Language","Sprache" },
1069{ "Time Format","Zeit Format" }, 1068{ "Time Format","Zeit Format" },
1070{ "Time Zone","Zeit Zone" }, 1069{ "Time Zone","Zeit Zone" },
1071{ "%1 groups subscribed","%1 Guppen abboniert" }, 1070{ "%1 groups subscribed","%1 Guppen abboniert" },
1072{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1071{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1072{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1073{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1075{ "Save settings","Speichere Einstellungen" }, 1074{ "Save settings","Speichere Einstellungen" },
1076{ "Save standard","Speichere Standard" }, 1075{ "Save standard","Speichere Standard" },
1077{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1076{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1078{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1077{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1079{ "Data storage path","Daten Speicherpfad" }, 1078{ "Data storage path","Daten Speicherpfad" },
1080{ "Language","Sprache" }, 1079{ "Language","Sprache" },
1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1080{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1081{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1083{ "Show events that are done","Zeige abgelaufene Termine" }, 1082{ "Show events that are done","Zeige abgelaufene Termine" },
1084{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1083{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1084{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1086{ "KO/Pi","KO/Pi" }, 1085{ "KO/Pi","KO/Pi" },
1087{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1086{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1087{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1089{ "Sound.Al.: ","Sound.Al.: " }, 1088{ "Sound.Al.: ","Sound.Al.: " },
1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1089{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1091{ "Restore","Wiederherstellen" }, 1090{ "Restore","Wiederherstellen" },
1092{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" }, 1091{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" },
1093{ "% completed","% erledigt" }, 1092{ "% completed","% erledigt" },
1094{ "%d item(s) found.","%d Item(s) gefunden." }, 1093{ "%d item(s) found.","%d Item(s) gefunden." },
1095{ "Set complete","Setze auf erledigt" }, 1094{ "Set complete","Setze auf erledigt" },
1096{ "(cancelled)","(gecancelt)" }, 1095{ "(cancelled)","(gecancelt)" },
1097{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1096{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1098{ " Local time "," Lokale Zeit " }, 1097{ " Local time "," Lokale Zeit " },
1099{ "Form2","Form2" }, 1098{ "Form2","Form2" },
1100{ "Filter enabled","Filter angeschaltet" }, 1099{ "Filter enabled","Filter angeschaltet" },
1101{ "Edit Filters","Ändere Filter" }, 1100{ "Edit Filters","Ändere Filter" },
1102{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1101{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1103{ "Agenda","Agenda" }, 1102{ "Agenda","Agenda" },
1104{ " ("," (" }, 1103{ " ("," (" },
1105{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1104{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1106{ "Print","Print" }, 1105{ "Print","Print" },
1107{ "&Setup Printer...","Drucker &Setup..." }, 1106{ "&Setup Printer...","Drucker &Setup..." },
1108{ "View Type","Zeige Typ" }, 1107{ "View Type","Zeige Typ" },
1109{ "Page &orientation:","Seiten Ausrichtung:" }, 1108{ "Page &orientation:","Seiten Ausrichtung:" },
1110{ "Use Default of Selected Style","Default des selektierten Stils" }, 1109{ "Use Default of Selected Style","Default des selektierten Stils" },
1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1110{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1112{ "Portrait","Portrait" }, 1111{ "Portrait","Portrait" },
1113{ "Landscape","Landschaft" }, 1112{ "Landscape","Landschaft" },
1114{ "Print day","Drucke Tag" }, 1113{ "Print day","Drucke Tag" },
1115{ "CalPrintDay_Base","CalPrintDay_Base" }, 1114{ "CalPrintDay_Base","CalPrintDay_Base" },
1116{ "Date && Time Range","Datum && Zeitspanne" }, 1115{ "Date && Time Range","Datum && Zeitspanne" },
1117{ "&End date:","&Enddatum:" }, 1116{ "&End date:","&Enddatum:" },
1118{ "&Start date:","&Startdatum:" }, 1117{ "&Start date:","&Startdatum:" },
1119{ "Start &time:","Startzeit:" }, 1118{ "Start &time:","Startzeit:" },
1120{ "End ti&me:","Endzeit:" }, 1119{ "End ti&me:","Endzeit:" },
1121{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1120{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1122{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1121{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1123{ "Alt+D","Alt+D" }, 1122{ "Alt+D","Alt+D" },
1124{ "&Use colors","Nutze Farben" }, 1123{ "&Use colors","Nutze Farben" },
1125{ "Alt+U","Alt+U" }, 1124{ "Alt+U","Alt+U" },
1126{ "Print week","Drucke Woche" }, 1125{ "Print week","Drucke Woche" },
1127{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1126{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1128{ "Use &colors","Nutze Farben" }, 1127{ "Use &colors","Nutze Farben" },
1129{ "Type of View","Typ der Ansicht" }, 1128{ "Type of View","Typ der Ansicht" },
1130{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1129{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1131{ "Alt+F","Alt+F" }, 1130{ "Alt+F","Alt+F" },
@@ -1382,199 +1381,205 @@
1382{ "Filtermenu","Filtermenu" }, 1381{ "Filtermenu","Filtermenu" },
1383{ "Toggle Fullscreen","Vollbild umschalten" }, 1382{ "Toggle Fullscreen","Vollbild umschalten" },
1384{ "Toggle Resource View","Resourcenansicht umschalten" }, 1383{ "Toggle Resource View","Resourcenansicht umschalten" },
1385{ "Storage HowTo...","Speicherort HowTo..." }, 1384{ "Storage HowTo...","Speicherort HowTo..." },
1386{ "Timetracking HowTo...","Timetracking HowTo..." }, 1385{ "Timetracking HowTo...","Timetracking HowTo..." },
1387{ "Juni","Juni" }, 1386{ "Juni","Juni" },
1388{ "Juli","Juli" }, 1387{ "Juli","Juli" },
1389{ "ToDo:","ToDo:" }, 1388{ "ToDo:","ToDo:" },
1390{ "Set Calendar","Setze Kalender" }, 1389{ "Set Calendar","Setze Kalender" },
1391{ "Todo: %1","Todo: %1" }, 1390{ "Todo: %1","Todo: %1" },
1392{ ": (Prio ",": (Prio " }, 1391{ ": (Prio ",": (Prio " },
1393{ "Todos","Todos" }, 1392{ "Todos","Todos" },
1394{ "Todo Viewer","Todo Anzeige" }, 1393{ "Todo Viewer","Todo Anzeige" },
1395{ "Todo ","Todo " }, 1394{ "Todo ","Todo " },
1396{ " Calendar \n Resource "," Kalender \n Resource " }, 1395{ " Calendar \n Resource "," Kalender \n Resource " },
1397{ " Color "," Farbe " }, 1396{ " Color "," Farbe " },
1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, 1397{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" },
1399{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, 1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" },
1400{ "Add new Calendar","Füge Kalender hinzu" }, 1399{ "Add new Calendar","Füge Kalender hinzu" },
1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1400{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1401{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1402{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, 1403{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." },
1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, 1404{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" },
1406{ "Global application font for all apps:","Globale Schriftart:" }, 1405{ "Global application font for all apps:","Globale Schriftart:" },
1407{ "Application Font","Applikationsschriftart" }, 1406{ "Application Font","Applikationsschriftart" },
1408{ "Kx/Pi","Kx/Pi" }, 1407{ "Kx/Pi","Kx/Pi" },
1409{ "Backup","Backup" }, 1408{ "Backup","Backup" },
1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1409{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1410{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1411{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1413{ "Choose Color","Wähle Farbe" }, 1412{ "Choose Color","Wähle Farbe" },
1414{ " OK "," OK " }, 1413{ " OK "," OK " },
1415{ " Cancel "," Abbrechen " }, 1414{ " Cancel "," Abbrechen " },
1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1415{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1416{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1418{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1417{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1418{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1419{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1421{ "%1\nis running!","%1\nist am Laufen!" }, 1420{ "%1\nis running!","%1\nist am Laufen!" },
1422{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1421{ "Additional Comment:","Zusätzlicher Kommentar:" },
1423{ "Stop and save","Stopp und Speichern" }, 1422{ "Stop and save","Stopp und Speichern" },
1424{ "Continue running","Weiter laufen lassen" }, 1423{ "Continue running","Weiter laufen lassen" },
1425{ "Stop - do not save","Stopp - nicht Speichern" }, 1424{ "Stop - do not save","Stopp - nicht Speichern" },
1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1425{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1427{ "Time mismatch!","Zeiten stimmen nicht!" }, 1426{ "Time mismatch!","Zeiten stimmen nicht!" },
1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1427{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1429{ "Yes, stop todo","Ja, stoppe Todo" }, 1428{ "Yes, stop todo","Ja, stoppe Todo" },
1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1429{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1430{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1431{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1433{ "Spouse","Ehegatte" }, 1432{ "Spouse","Ehegatte" },
1434{ "Notes","Notizen" }, 1433{ "Notes","Notizen" },
1435{ "Messanger","Messanger" }, 1434{ "Messanger","Messanger" },
1436{ "Assistant","Assistent" }, 1435{ "Assistant","Assistent" },
1437{ "Manager","Manager" }, 1436{ "Manager","Manager" },
1438{ "Secrecy","Sichtbar" }, 1437{ "Secrecy","Sichtbar" },
1439{ "male","männlich" }, 1438{ "male","männlich" },
1440{ "female","weiblich" }, 1439{ "female","weiblich" },
1441{ "Hide!","Verbergen!" }, 1440{ "Hide!","Verbergen!" },
1442{ "Show!","Anzeigen!" }, 1441{ "Show!","Anzeigen!" },
1443{ "Details","Details" }, 1442{ "Details","Details" },
1444{ "Profession","Beruf" }, 1443{ "Profession","Beruf" },
1445{ "Children","Kinder" }, 1444{ "Children","Kinder" },
1446{ "Department","Abteilung" }, 1445{ "Department","Abteilung" },
1447{ "Backup cancelled","Backup abgebrochen" }, 1446{ "Backup cancelled","Backup abgebrochen" },
1448{ "Backup globally disabled","Backup global abgeschaltet" }, 1447{ "Backup globally disabled","Backup global abgeschaltet" },
1449{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1448{ "Backup succesfully finished","Backup erfolgreich beendet" },
1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1449{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1450{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1452{ "Birthdays","Geburtstage" }, 1451{ "Birthdays","Geburtstage" },
1453{ "KO/Pi import information!","KO/Pi Import Information!" }, 1452{ "KO/Pi import information!","KO/Pi Import Information!" },
1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1453{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1454{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1455{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1457{ "Reload","Neu laden" }, 1456{ "Reload","Neu laden" },
1458{ "Timezone settings","Zeitzoneneinstellung" }, 1457{ "Timezone settings","Zeitzoneneinstellung" },
1459{ "Title: ","Titel: " }, 1458{ "Title: ","Titel: " },
1460{ "Journal from: ","Journal vom: " }, 1459{ "Journal from: ","Journal vom: " },
1461{ "Journal: %1 from ","Journal: %1 vom " }, 1460{ "Journal: %1 from ","Journal: %1 vom " },
1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, 1461{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" },
1463{ "Selected Item","Ausgewähltes Item" }, 1462{ "Selected Item","Ausgewähltes Item" },
1464{ "Select Date...","Wähle Datum..." }, 1463{ "Select Date...","Wähle Datum..." },
1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, 1464{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" },
1466{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1465{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1467{ "Edit category list...","Ändere Kategorieliste..." }, 1466{ "Edit category list...","Ändere Kategorieliste..." },
1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, 1467{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" },
1469{ "Filepath: ","Dateipfad: " }, 1468{ "Filepath: ","Dateipfad: " },
1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, 1469{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" },
1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, 1470{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" },
1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1471{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1472{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1473{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1475{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1474{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1476{ "Alarm Options","Alarm Einstellungen" }, 1475{ "Alarm Options","Alarm Einstellungen" },
1477{ "Delete selected...","Lösche Ausgewählte..." }, 1476{ "Delete selected...","Lösche Ausgewählte..." },
1478{ "None","Nichts" }, 1477{ "None","Nichts" },
1479{ "Selection","Auswahl" }, 1478{ "Selection","Auswahl" },
1480{ "Set categories","Setze Kategorien" }, 1479{ "Set categories","Setze Kategorien" },
1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, 1480{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" },
1482{ "Reset","Neu setzen" }, 1481{ "Reset","Neu setzen" },
1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, 1482{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" },
1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, 1483{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" },
1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, 1484{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" },
1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, 1485{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" },
1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 1486{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
1488{ "Edit","Edit" }, 1487{ "Edit","Edit" },
1489{ "Last Modified","Zuletzt geändert" }, 1488{ "Last Modified","Zuletzt geändert" },
1490{ "Journal viewer","Journal Anzeige" }, 1489{ "Journal viewer","Journal Anzeige" },
1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1490{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, 1491{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." },
1493{ "Hide Completed","Verstecke erledigte Todos" }, 1492{ "Hide Completed","Verstecke erledigte Todos" },
1494{ "Show not Running","Zeige nicht Laufende" }, 1493{ "Show not Running","Zeige nicht Laufende" },
1495{ "Click to add new Todo","Klick für neues Todo!" }, 1494{ "Click to add new Todo","Klick für neues Todo!" },
1496{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1495{ "Show next conflict for","Zeige nächsten Konflikt für" },
1497{ "All events","Alle Termine" }, 1496{ "All events","Alle Termine" },
1498{ "Allday events","Ganztagestermine" }, 1497{ "Allday events","Ganztagestermine" },
1499{ "Events with time","Termine mit Zeit" }, 1498{ "Events with time","Termine mit Zeit" },
1500{ "No conflict found","Kein Konflikt gefunden" }, 1499{ "No conflict found","Kein Konflikt gefunden" },
1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1500{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, 1501{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " },
1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1502{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, 1503{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" },
1505{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" }, 1504{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" },
1506{ "Show date","Zeige Datum" }, 1505{ "Show date","Zeige Datum" },
1507{ "No problem!","Null Problemo!" }, 1506{ "No problem!","Null Problemo!" },
1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 1507{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 1508{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 1509{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 1510{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 1511{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
1513{ "Pi-Sync Error","Pi-Sync Fehler" }, 1512{ "Pi-Sync Error","Pi-Sync Fehler" },
1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 1513{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 1514{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 1515{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 1516{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 1517{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 1518{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." }, 1519{ "Receiving file from remote...","Empfange entfernte Datei..." },
1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 1520{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 1521{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 1522{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 1523{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 1524{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
1526{ "Writing back file ...","Schreibe Datei zurück..." }, 1525{ "Writing back file ...","Schreibe Datei zurück..." },
1527{ "Sending back file ...","Sende Datei zurück..." }, 1526{ "Sending back file ...","Sende Datei zurück..." },
1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" }, 1527{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" },
1529{ "Created","Angelegt" }, 1528{ "Created","Angelegt" },
1530{ "Last Modified Sub","Zuletzt geändertes Sub" }, 1529{ "Last Modified Sub","Zuletzt geändertes Sub" },
1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" }, 1530{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" },
1532{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" }, 1531{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" },
1533{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 1532{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
1534{ "Duration","Dauer" }, 1533{ "Duration","Dauer" },
1535{ " day"," Tag" }, 1534{ " day"," Tag" },
1536{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" }, 1535{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" },
1537{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" }, 1536{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" },
1538{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" }, 1537{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" },
1539{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" }, 1538{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" },
1540{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" }, 1539{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" },
1541{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" }, 1540{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" },
1542{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." }, 1541{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." },
1543{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." }, 1542{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." },
1544{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." }, 1543{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." },
1545{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." }, 1544{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." },
1546{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." }, 1545{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." },
1547{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" }, 1546{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" },
1548{ "Error saving data","Fehler beim Abspeichern" }, 1547{ "Error saving data","Fehler beim Abspeichern" },
1549{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" }, 1548{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" },
1550{ "Enable conflict detection","Schalte Konflikterkennung an" }, 1549{ "Enable conflict detection","Schalte Konflikterkennung an" },
1551{ "Filter for the edited event","Filter für den bearbeiteten Termin" }, 1550{ "Filter for the edited event","Filter für den bearbeiteten Termin" },
1552{ "Filter for other events","Filter für die anderen Termine" }, 1551{ "Filter for other events","Filter für die anderen Termine" },
1553{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" }, 1552{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" },
1554{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" }, 1553{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" },
1555{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" }, 1554{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" },
1556{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" }, 1555{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" },
1557{ "Conflict detection","Konflikterkennung" }, 1556{ "Conflict detection","Konflikterkennung" },
1558{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" }, 1557{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" },
1559{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." }, 1558{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." },
1560{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" }, 1559{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" },
1561{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." }, 1560{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." },
1562{ " Yes, close "," Ja, beenden " }, 1561{ " Yes, close "," Ja, beenden " },
1563{ "Export All Data","Exportiere alle Daten" }, 1562{ "Export All Data","Exportiere alle Daten" },
1564{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" }, 1563{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" },
1565{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" }, 1564{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" },
1566{ " (Duration: %1 days)"," (Dauer: %1 Tage)" }, 1565{ " (Duration: %1 days)"," (Dauer: %1 Tage)" },
1567{ "Autosave enabled!","Auto-Speichern angeschaltet!" }, 1566{ "Autosave enabled!","Auto-Speichern angeschaltet!" },
1568{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" }, 1567{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" },
1569{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" }, 1568{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" },
1570{ "Yes, Save!","Ja, Speichern!" }, 1569{ "Yes, Save!","Ja, Speichern!" },
1571{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" }, 1570{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" },
1572{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" }, 1571{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" },
1573{ "<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>","<br>Der Kalender enthält<br><b>%1 Termine<br>%2 Todos<br>%3 Journale</b>" }, 1572{ "<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>","<br>Der Kalender enthält<br><b>%1 Termine<br>%2 Todos<br>%3 Journale</b>" },
1573{ "Enable alarm in resource settings","Schalte Alarm in Resourcenansicht wieder an" },
1574{ "The alarm for this calendar\nis currently disabled!\nEnable it in resource settings.","Der Alarm für diesen Kalender\nist abgeschaltet.\nSchalten Sie ihn in der\nResourcenansicht ggf. an." },
1575{ "Alarm disabled warning","Nichtaktiver Alarm" },
1576{ "Pi-Sync - all calendars ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync - alle Kalender ( direktes Kx/Pi mit Kx/Pi syncen )" },
1577{ "Pi-Sync - selected calendars ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync - ausgewählte Kalender ( direktes Kx/Pi mit Kx/Pi syncen )" },
1578{ "","" },
1574{ "","" }, 1579{ "","" },
1575{ "","" }, 1580{ "","" },
1576{ "","" }, 1581{ "","" },
1577{ "","" }, 1582{ "","" },
1578{ "","" }, 1583{ "","" },
1579{ "","" }, 1584{ "","" },
1580{ "","" }, 1585{ "","" },
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 92e5a0f..21f220c 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -1,624 +1,625 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qwidget.h> 24#include <qwidget.h>
25#include <qtooltip.h> 25#include <qtooltip.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qregexp.h> 34#include <qregexp.h>
35 35
36 36
37#include <kglobal.h> 37#include <kglobal.h>
38#include <kdialog.h> 38#include <kdialog.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <kiconloader.h> 41#include <kiconloader.h>
42#include <kmessagebox.h> 42#include <kmessagebox.h>
43#include <kfiledialog.h> 43#include <kfiledialog.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45 45
46#include <libkcal/todo.h> 46#include <libkcal/todo.h>
47#include <libkcal/event.h> 47#include <libkcal/event.h>
48#include <libkdepim/categoryselectdialog.h> 48#include <libkdepim/categoryselectdialog.h>
49#include <libkdepim/kdateedit.h> 49#include <libkdepim/kdateedit.h>
50 50
51#include "koprefs.h" 51#include "koprefs.h"
52#include "koglobals.h" 52#include "koglobals.h"
53 53
54#include "koeditorgeneral.h" 54#include "koeditorgeneral.h"
55#include "kolocationbox.h" 55#include "kolocationbox.h"
56#ifndef DESKTOP_VERSION 56#ifndef DESKTOP_VERSION
57#include <qpe/qpeapplication.h> 57#include <qpe/qpeapplication.h>
58#else 58#else
59#include <qapplication.h> 59#include <qapplication.h>
60#endif 60#endif
61 61
62KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) : 62KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) :
63 QObject( parent, name) 63 QObject( parent, name)
64{ 64{
65 mNextFocus = 0; 65 mNextFocus = 0;
66} 66}
67 67
68KOEditorGeneral::~KOEditorGeneral() 68KOEditorGeneral::~KOEditorGeneral()
69{ 69{
70} 70}
71 71
72void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout) 72void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout)
73{ 73{
74 QGridLayout *headerLayout = new QGridLayout(topLayout); 74 QGridLayout *headerLayout = new QGridLayout(topLayout);
75 75
76#if 0 76#if 0
77 mOwnerLabel = new QLabel(i18n("Owner:"),parent); 77 mOwnerLabel = new QLabel(i18n("Owner:"),parent);
78 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1); 78 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1);
79#endif 79#endif
80 // 1 on pda 80 // 1 on pda
81 // 11 on desktop 81 // 11 on desktop
82 headerLayout->setSpacing( (KDialog::spacingHint()-3)*2+1 ); 82 headerLayout->setSpacing( (KDialog::spacingHint()-3)*2+1 );
83 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent); 83 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent);
84 headerLayout->addWidget(summaryLabel,0,0); 84 headerLayout->addWidget(summaryLabel,0,0);
85 85
86 mSummaryEdit = new KOLocationBox(TRUE,parent, 50); 86 mSummaryEdit = new KOLocationBox(TRUE,parent, 50);
87 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 87 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
88 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) ); 88 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) );
89 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() ); 89 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() );
90 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2; 90 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2;
91 if ( QApplication::desktop()->width() > 320 ) 91 if ( QApplication::desktop()->width() > 320 )
92 mSummaryEdit->setMaximumHeight( hei +6 ); 92 mSummaryEdit->setMaximumHeight( hei +6 );
93 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding ); 93 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding );
94 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink } 94 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink }
95 // mSummaryEdit = new QLineEdit(parent); 95 // mSummaryEdit = new QLineEdit(parent);
96 if ( QApplication::desktop()->height() < 320 ) 96 if ( QApplication::desktop()->height() < 320 )
97 headerLayout->addWidget(mSummaryEdit,0,1); 97 headerLayout->addWidget(mSummaryEdit,0,1);
98 else 98 else
99 headerLayout->addMultiCellWidget(mSummaryEdit,0,0,1,2); 99 headerLayout->addMultiCellWidget(mSummaryEdit,0,0,1,2);
100 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 100 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
101 101
102 QLabel *locationLabel = new QLabel(i18n("Location:"),parent); 102 QLabel *locationLabel = new QLabel(i18n("Location:"),parent);
103 if ( QApplication::desktop()->height() < 320 ) 103 if ( QApplication::desktop()->height() < 320 )
104 headerLayout->addWidget(locationLabel,0,2); 104 headerLayout->addWidget(locationLabel,0,2);
105 else 105 else
106 headerLayout->addWidget(locationLabel,1,0); 106 headerLayout->addWidget(locationLabel,1,0);
107 107
108 mLocationEdit = new KOLocationBox(TRUE,parent,30); 108 mLocationEdit = new KOLocationBox(TRUE,parent,30);
109 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 109 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
110 if ( QApplication::desktop()->width() > 320 && QApplication::desktop()->height() > 240 ) 110 if ( QApplication::desktop()->width() > 320 && QApplication::desktop()->height() > 240 )
111 mLocationEdit->setMaximumHeight( hei + 6); 111 mLocationEdit->setMaximumHeight( hei + 6);
112 112
113 // mLocationEdit = new QLineEdit(parent); 113 // mLocationEdit = new QLineEdit(parent);
114 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 114 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
115 115
116 mCalendarBox = new QComboBox ( parent ); 116 mCalendarBox = new QComboBox ( parent );
117 mCalendarBox->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 117 mCalendarBox->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
118 if ( QApplication::desktop()->height() < 320 ) { 118 if ( QApplication::desktop()->height() < 320 ) {
119 headerLayout->addWidget(mLocationEdit,0,3); 119 headerLayout->addWidget(mLocationEdit,0,3);
120 headerLayout->addWidget(mCalendarBox,0,4); 120 headerLayout->addWidget(mCalendarBox,0,4);
121 headerLayout->setColStretch( 1, 10); 121 headerLayout->setColStretch( 1, 10);
122 headerLayout->setColStretch( 3, 10); 122 headerLayout->setColStretch( 3, 10);
123 mCalendarBox->setMaximumWidth( 64 ); 123 mCalendarBox->setMaximumWidth( 64 );
124 } 124 }
125 else { 125 else {
126 headerLayout->addWidget(mLocationEdit,1,1); 126 headerLayout->addWidget(mLocationEdit,1,1);
127 headerLayout->addWidget(mCalendarBox,1,2); 127 headerLayout->addWidget(mCalendarBox,1,2);
128 int str = 3; 128 int str = 3;
129 if ( QApplication::desktop()->width() < 640 ) { 129 if ( QApplication::desktop()->width() < 640 ) {
130 --str; 130 --str;
131 if ( QApplication::desktop()->width() < 320 ) 131 if ( QApplication::desktop()->width() < 320 )
132 --str; 132 --str;
133 } 133 }
134 headerLayout->setColStretch( 1, str); 134 headerLayout->setColStretch( 1, str);
135 headerLayout->setColStretch( 2, 1); 135 headerLayout->setColStretch( 2, 1);
136 } 136 }
137 137
138} 138}
139void KOEditorGeneral::setFocusOn( int i ) 139void KOEditorGeneral::setFocusOn( int i )
140{ 140{
141 mNextFocus = i; 141 mNextFocus = i;
142 QTimer::singleShot( 0, this, SLOT ( slotSetFocusOn() )); 142 QTimer::singleShot( 0, this, SLOT ( slotSetFocusOn() ));
143} 143}
144void KOEditorGeneral::slotSetFocusOn() 144void KOEditorGeneral::slotSetFocusOn()
145{ 145{
146 mNextFocus;
147 if ( mNextFocus == 1 ) { 146 if ( mNextFocus == 1 ) {
148 mDescriptionEdit->setFocus(); 147 mDescriptionEdit->setFocus();
149 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333); 148 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333);
150 } 149 }
151 if ( mNextFocus == 2 ) { 150 if ( mNextFocus == 2 ) {
152 mSummaryEdit->setFocus(); 151 mSummaryEdit->setFocus();
153 } 152 }
154} 153}
155void KOEditorGeneral::editCategories() 154void KOEditorGeneral::editCategories()
156{ 155{
157 // qDebug("KOEditorGeneral::editCategories() "); 156 // qDebug("KOEditorGeneral::editCategories() ");
158 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 157 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
159 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &))); 158 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &)));
160 //KOGlobals::fitDialogToScreen( csd ); 159 //KOGlobals::fitDialogToScreen( csd );
161 csd->setColorEnabled(); 160 csd->setColorEnabled();
162 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) ); 161 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) );
163 csd->exec(); 162 csd->exec();
164 delete csd; 163 delete csd;
165} 164}
166 165
167void KOEditorGeneral::showCatPopup() 166void KOEditorGeneral::showCatPopup()
168{ 167{
169 mCatPopup->clear(); 168 mCatPopup->clear();
170 QStringList checkedCategories = QStringList::split (",", mCategoriesLabel->text()); 169 QStringList checkedCategories = QStringList::split (",", mCategoriesLabel->text());
171 int index = 0; 170 int index = 0;
172 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 171 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
173 it != KOPrefs::instance()->mCustomCategories.end (); 172 it != KOPrefs::instance()->mCustomCategories.end ();
174 ++it) { 173 ++it) {
175 mCatPopup->insertItem (*it, index ); 174 mCatPopup->insertItem (*it, index );
176 //mCategory[index] = *it; 175 //mCategory[index] = *it;
177 if (checkedCategories.find (*it) != checkedCategories.end ()) mCatPopup->setItemChecked (index, true); 176 if (checkedCategories.find (*it) != checkedCategories.end ()) mCatPopup->setItemChecked (index, true);
178 ++index; 177 ++index;
179 } 178 }
180} 179}
181void KOEditorGeneral::selectedCatPopup( int index ) 180void KOEditorGeneral::selectedCatPopup( int index )
182{ 181{
183 QStringList categories = QStringList::split (",", mCategoriesLabel->text()); 182 QStringList categories = QStringList::split (",", mCategoriesLabel->text());
184 QString colcat = categories.first(); 183 QString colcat = categories.first();
185 if (categories.find (KOPrefs::instance()->mCustomCategories[index]) != categories.end ()) 184 if (categories.find (KOPrefs::instance()->mCustomCategories[index]) != categories.end ())
186 categories.remove (KOPrefs::instance()->mCustomCategories[index]); 185 categories.remove (KOPrefs::instance()->mCustomCategories[index]);
187 else 186 else
188 categories.insert (categories.end(), KOPrefs::instance()->mCustomCategories[index]); 187 categories.insert (categories.end(), KOPrefs::instance()->mCustomCategories[index]);
189 categories.sort (); 188 categories.sort ();
190 if ( !colcat.isEmpty() ) { 189 if ( !colcat.isEmpty() ) {
191 if ( categories.find ( colcat ) != categories.end () ) { 190 if ( categories.find ( colcat ) != categories.end () ) {
192 categories.remove( colcat ); 191 categories.remove( colcat );
193 categories.prepend( colcat ); 192 categories.prepend( colcat );
194 } 193 }
195 } 194 }
196 setCategories( categories.join(",") ); 195 setCategories( categories.join(",") );
197} 196}
198 197
199void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout) 198void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout)
200{ 199{
201 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout ); 200 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout );
202 mCatPopup = new QPopupMenu ( parent ); 201 mCatPopup = new QPopupMenu ( parent );
203 mCatPopup->setCheckable (true); 202 mCatPopup->setCheckable (true);
204 connect(mCatPopup,SIGNAL(aboutToShow () ), this ,SLOT(showCatPopup())); 203 connect(mCatPopup,SIGNAL(aboutToShow () ), this ,SLOT(showCatPopup()));
205 connect(mCatPopup,SIGNAL( activated ( int ) ), this ,SLOT(selectedCatPopup( int ))); 204 connect(mCatPopup,SIGNAL( activated ( int ) ), this ,SLOT(selectedCatPopup( int )));
206 mCategoriesButton = new QPushButton(parent); 205 mCategoriesButton = new QPushButton(parent);
207 mCategoriesButton->setText(i18n("Categories...")); 206 mCategoriesButton->setText(i18n("Categories..."));
208 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() )); 207 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() ));
209 //connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() )); 208 //connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() ));
210 categoriesLayout->addWidget(mCategoriesButton); 209 categoriesLayout->addWidget(mCategoriesButton);
211 mCategoriesLabel = new QPushButton(parent);//new QLabel(parent); 210 mCategoriesLabel = new QPushButton(parent);//new QLabel(parent);
212 mCategoriesLabel->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Fixed ,FALSE) ); 211 mCategoriesLabel->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Fixed ,FALSE) );
213 mCategoriesLabel->setPopup( mCatPopup ); 212 mCategoriesLabel->setPopup( mCatPopup );
214 //mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken); 213 //mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
215 categoriesLayout->addWidget(mCategoriesLabel,1); 214 categoriesLayout->addWidget(mCategoriesLabel,1);
216} 215}
217 216
218void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout) 217void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout)
219{ 218{
220 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout ); 219 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout );
221 220
222 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent); 221 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent);
223 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent); 222 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent);
224 secrecyLayout->addWidget(mCancelBox); 223 secrecyLayout->addWidget(mCancelBox);
225 secrecyLayout->addWidget(secrecyLabel); 224 secrecyLayout->addWidget(secrecyLabel);
226 225
227 mSecrecyCombo = new QComboBox(parent); 226 mSecrecyCombo = new QComboBox(parent);
228 mSecrecyCombo->insertStringList(Incidence::secrecyList()); 227 mSecrecyCombo->insertStringList(Incidence::secrecyList());
229 secrecyLayout->addWidget(mSecrecyCombo); 228 secrecyLayout->addWidget(mSecrecyCombo);
230} 229}
231 230
232void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout) 231void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout)
233{ 232{
234 mDescriptionEdit = new KTextEdit(parent); 233 mDescriptionEdit = new KTextEdit(parent);
235 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont ); 234 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont );
236 mDescriptionEdit->append(""); 235 mDescriptionEdit->append("");
237 mDescriptionEdit->setReadOnly(false); 236 mDescriptionEdit->setReadOnly(false);
238 mDescriptionEdit->setOverwriteMode(false); 237 mDescriptionEdit->setOverwriteMode(false);
239 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth ); 238 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth );
240 topLayout->addWidget(mDescriptionEdit); 239 topLayout->addWidget(mDescriptionEdit);
241#ifndef DESKTOP_VERSION 240#ifndef DESKTOP_VERSION
242 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold ); 241 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold );
243#endif 242#endif
244 243
245} 244}
246 245
247void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout) 246void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
248{ 247{
249 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout); 248 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout);
250 249
251 //mAlarmBell = new QLabel(parent); 250 //mAlarmBell = new QLabel(parent);
252 //mAlarmBell->setPixmap(SmallIcon("bell")); 251 //mAlarmBell->setPixmap(SmallIcon("bell"));
253 //alarmLayout->addWidget(mAlarmBell); 252 //alarmLayout->addWidget(mAlarmBell);
254 if ( QApplication::desktop()->width() < 320 ) 253 if ( QApplication::desktop()->width() < 320 )
255 mAlarmButton = new QCheckBox(i18n("Rem."),parent); 254 mAlarmButton = new QCheckBox(i18n("Rem."),parent);
256 else 255 else
257 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent); 256 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent);
258 257
259 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool))); 258 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool)));
260 alarmLayout->addWidget(mAlarmButton); 259 alarmLayout->addWidget(mAlarmButton);
261 260
262 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; 261 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ;
263 mAlarmTimeEdit->setButtonSymbols( QSpinBox::PlusMinus ); 262 mAlarmTimeEdit->setButtonSymbols( QSpinBox::PlusMinus );
264 alarmLayout->addWidget(mAlarmTimeEdit); 263 alarmLayout->addWidget(mAlarmTimeEdit);
265 mAlarmIncrCombo = new QComboBox(false, parent); 264 mAlarmIncrCombo = new QComboBox(false, parent);
266 if ( QApplication::desktop()->width() < 320 ) { 265 if ( QApplication::desktop()->width() < 320 ) {
267 mAlarmIncrCombo->insertItem(i18n("min")); 266 mAlarmIncrCombo->insertItem(i18n("min"));
268 mAlarmIncrCombo->insertItem(i18n("hou")); 267 mAlarmIncrCombo->insertItem(i18n("hou"));
269 mAlarmIncrCombo->insertItem(i18n("day")); 268 mAlarmIncrCombo->insertItem(i18n("day"));
270 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() ); 269 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() );
271 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() ); 270 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() );
272 } else { 271 } else {
273 mAlarmIncrCombo->insertItem(i18n("minute(s)")); 272 mAlarmIncrCombo->insertItem(i18n("minute(s)"));
274 mAlarmIncrCombo->insertItem(i18n("hour(s)")); 273 mAlarmIncrCombo->insertItem(i18n("hour(s)"));
275 mAlarmIncrCombo->insertItem(i18n("day(s)")); 274 mAlarmIncrCombo->insertItem(i18n("day(s)"));
276 } 275 }
277 276
278 // mAlarmIncrCombo->setMinimumHeight(20); 277 // mAlarmIncrCombo->setMinimumHeight(20);
279 alarmLayout->addWidget(mAlarmIncrCombo); 278 alarmLayout->addWidget(mAlarmIncrCombo);
280 mAlarmSoundButton = new QPushButton(parent); 279 mAlarmSoundButton = new QPushButton(parent);
281 mAlarmSoundButton->setPixmap(SmallIcon("playsound")); 280 mAlarmSoundButton->setPixmap(SmallIcon("playsound"));
282 mAlarmSoundButton->setToggleButton(true); 281 mAlarmSoundButton->setToggleButton(true);
283 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 282 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
284 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); 283 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
285 alarmLayout->addWidget(mAlarmSoundButton); 284 alarmLayout->addWidget(mAlarmSoundButton);
286 285
287 mAlarmProgramButton = new QPushButton(parent); 286 mAlarmProgramButton = new QPushButton(parent);
288 mAlarmProgramButton->setPixmap(SmallIcon("run")); 287 mAlarmProgramButton->setPixmap(SmallIcon("run"));
289 mAlarmProgramButton->setToggleButton(true); 288 mAlarmProgramButton->setToggleButton(true);
290 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 289 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
291 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); 290 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
292 alarmLayout->addWidget(mAlarmProgramButton); 291 alarmLayout->addWidget(mAlarmProgramButton);
293 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); 292 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 );
294 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); 293 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 );
295 // if ( KOPrefs::instance()->mCompactDialogs ) { 294 // if ( KOPrefs::instance()->mCompactDialogs ) {
296 // mAlarmSoundButton->hide(); 295 // mAlarmSoundButton->hide();
297 // mAlarmProgramButton->hide(); 296 // mAlarmProgramButton->hide();
298 // } 297 // }
299} 298}
300 299
301void KOEditorGeneral::pickAlarmSound() 300void KOEditorGeneral::pickAlarmSound()
302{ 301{
303 302
304 //qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() ); 303 //qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() );
305 304
306 bool oldState = mAlarmSoundButton->isOn(); 305 bool oldState = mAlarmSoundButton->isOn();
307 306
308 QString fileName(KFileDialog::getOpenFileName(mAlarmSound, 307 QString fileName(KFileDialog::getOpenFileName(mAlarmSound,
309 i18n("*.wav|Wav Files"), 0)); 308 i18n("*.wav|Wav Files"), 0));
310 if (!fileName.isEmpty()) { 309 if (!fileName.isEmpty()) {
311 mAlarmSound = fileName; 310 mAlarmSound = fileName;
312 QToolTip::remove(mAlarmSoundButton); 311 QToolTip::remove(mAlarmSoundButton);
313 QString dispStr = i18n("Playing '%1'").arg(fileName); 312 QString dispStr = i18n("Playing '%1'").arg(fileName);
314 QToolTip::add(mAlarmSoundButton, dispStr); 313 QToolTip::add(mAlarmSoundButton, dispStr);
315 mAlarmProgramButton->setOn(false); 314 mAlarmProgramButton->setOn(false);
316 mAlarmSoundButton->setOn(true); 315 mAlarmSoundButton->setOn(true);
317 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 316 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
318 } else { 317 } else {
319 mAlarmProgramButton->setOn(oldState); 318 mAlarmProgramButton->setOn(oldState);
320 mAlarmSoundButton->setOn(!oldState); 319 mAlarmSoundButton->setOn(!oldState);
321 320
322 321
323 } 322 }
324 323
325 if (mAlarmProgramButton->isOn()) 324 if (mAlarmProgramButton->isOn())
326 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); 325 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
327 if ( mAlarmSoundButton->isOn()) 326 if ( mAlarmSoundButton->isOn())
328 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); 327 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
329 328
330} 329}
331 330
332void KOEditorGeneral::pickAlarmProgram() 331void KOEditorGeneral::pickAlarmProgram()
333{ 332{
334 bool oldState = mAlarmProgramButton->isOn(); 333 bool oldState = mAlarmProgramButton->isOn();
335 334
336 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0)); 335 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0));
337 if (!fileName.isEmpty()) { 336 if (!fileName.isEmpty()) {
338 mAlarmProgram = fileName; 337 mAlarmProgram = fileName;
339 QToolTip::remove(mAlarmProgramButton); 338 QToolTip::remove(mAlarmProgramButton);
340 QString dispStr = i18n("Running '%1'").arg(fileName); 339 QString dispStr = i18n("Running '%1'").arg(fileName);
341 QToolTip::add(mAlarmProgramButton, dispStr); 340 QToolTip::add(mAlarmProgramButton, dispStr);
342 mAlarmSoundButton->setOn(false); 341 mAlarmSoundButton->setOn(false);
343 mAlarmProgramButton->setOn(true); 342 mAlarmProgramButton->setOn(true);
344 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 343 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
345 } else { 344 } else {
346 mAlarmProgramButton->setOn(!oldState); 345 mAlarmProgramButton->setOn(!oldState);
347 mAlarmSoundButton->setOn(oldState); 346 mAlarmSoundButton->setOn(oldState);
348 } 347 }
349 348
350 if (mAlarmProgramButton->isOn()) 349 if (mAlarmProgramButton->isOn())
351 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); 350 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
352 if ( mAlarmSoundButton->isOn()) 351 if ( mAlarmSoundButton->isOn())
353 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); 352 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
354 353
355} 354}
356 355
357 356
358QString KOEditorGeneral::getFittingPath( const QString s ) 357QString KOEditorGeneral::getFittingPath( const QString & s )
359{ 358{
360 int maxlen = 50; 359 int maxlen = 50;
361 if ( QApplication::desktop()->width() < 640 ) { 360 if ( QApplication::desktop()->width() < 640 ) {
362 if ( QApplication::desktop()->width() < 320 ) 361 if ( QApplication::desktop()->width() < 320 )
363 maxlen = 22; 362 maxlen = 22;
364 else 363 else
365 maxlen = 35; 364 maxlen = 35;
366 } 365 }
367 if ( s.length() > maxlen ) { 366 if ( s.length() > maxlen ) {
368 return "..."+s.right(maxlen -3); 367 return "..."+s.right(maxlen -3);
369 } 368 }
370 return s; 369 return s;
371} 370}
372 371
373void KOEditorGeneral::enableAlarmEdit(bool enable) 372void KOEditorGeneral::enableAlarmEdit(bool enable)
374{ 373{
375 if ( enable ) { 374 if ( enable ) {
376 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) { 375 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) {
377 mAlarmSoundButton->setOn( true ); 376 mAlarmSoundButton->setOn( true );
378 if ( mAlarmSound.isEmpty() ) 377 if ( mAlarmSound.isEmpty() )
379 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 378 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
380 else { 379 else {
381 if ( ! QFile::exists( mAlarmSound ) ) 380 if ( ! QFile::exists( mAlarmSound ) )
382 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 381 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
383 } 382 }
384 } 383 }
385 } 384 }
386 ((QWidget*)parent())->topLevelWidget()->setCaption(mAlarmMessage); 385 ((QWidget*)parent())->topLevelWidget()->setCaption(mAlarmMessage);
387 mAlarmTimeEdit->setEnabled(enable); 386 mAlarmTimeEdit->setEnabled(enable);
388 mAlarmSoundButton->setEnabled(enable); 387 mAlarmSoundButton->setEnabled(enable);
389 mAlarmProgramButton->setEnabled(enable); 388 mAlarmProgramButton->setEnabled(enable);
390 mAlarmIncrCombo->setEnabled(enable); 389 mAlarmIncrCombo->setEnabled(enable);
391} 390}
392 391
393void KOEditorGeneral::disableAlarmEdit(bool disable) 392void KOEditorGeneral::disableAlarmEdit(bool disable)
394{ 393{
395 enableAlarmEdit( !disable ); 394 enableAlarmEdit( !disable );
396} 395}
397 396
398void KOEditorGeneral::enableAlarm( bool enable ) 397void KOEditorGeneral::enableAlarm( bool enable )
399{ 398{
400 enableAlarmEdit( enable ); 399 enableAlarmEdit( enable );
401} 400}
402 401
403void KOEditorGeneral::alarmDisable(bool disable) 402void KOEditorGeneral::alarmDisable(bool disable)
404{ 403{
405 if (!disable) { 404 if (!disable) {
406 //mAlarmBell->setEnabled(true); 405 //mAlarmBell->setEnabled(true);
407 mAlarmButton->setEnabled(true); 406 mAlarmButton->setEnabled(true);
408 } else { 407 } else {
409 //mAlarmBell->setEnabled(false); 408 //mAlarmBell->setEnabled(false);
410 mAlarmButton->setEnabled(false); 409 mAlarmButton->setEnabled(false);
411 mAlarmButton->setChecked(false); 410 mAlarmButton->setChecked(false);
412 mAlarmTimeEdit->setEnabled(false); 411 mAlarmTimeEdit->setEnabled(false);
413 mAlarmSoundButton->setEnabled(false); 412 mAlarmSoundButton->setEnabled(false);
414 mAlarmProgramButton->setEnabled(false); 413 mAlarmProgramButton->setEnabled(false);
415 mAlarmIncrCombo->setEnabled(false); 414 mAlarmIncrCombo->setEnabled(false);
416 } 415 }
417} 416}
418 417
419void KOEditorGeneral::setCategories(const QString &str) 418void KOEditorGeneral::setCategories(const QString &str)
420{ 419{
421 QString tt = str; 420 QString tt = str;
422 QToolTip::add( mCategoriesLabel, i18n("<b>Click here to edit categories: </b>") +"<em>"+tt.replace( QRegExp(","),", ")+"</em>"); 421 QToolTip::add( mCategoriesLabel, i18n("<b>Click here to edit categories: </b>") +"<em>"+tt.replace( QRegExp(","),", ")+"</em>");
423 mCategoriesLabel->setText(str); 422 mCategoriesLabel->setText(str);
424} 423}
425 424
426void KOEditorGeneral::setDefaults(bool allDay) 425void KOEditorGeneral::setDefaults(bool allDay)
427{ 426{
428#if 0 427#if 0
429 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName()); 428 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName());
430#endif 429#endif
431 430
432 mAlarmMessage = i18n("Edit new item"); 431 mAlarmMessage = i18n("Edit new item");
433 enableAlarmEdit( !allDay ); 432 enableAlarmEdit( !allDay );
434 433
435 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 434 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
436 int alarmTime; 435 int alarmTime;
437 int a[] = { 1,5,10,15,30,60,180, 1440 }; 436 int a[] = { 1,5,10,15,30,60,180, 1440 };
438 int index = KOPrefs::instance()->mAlarmTime; 437 int index = KOPrefs::instance()->mAlarmTime;
439 if (index < 0 || index > 7) { 438 if (index < 0 || index > 7) {
440 alarmTime = 15; 439 alarmTime = 15;
441 } else { 440 } else {
442 alarmTime = a[index]; 441 alarmTime = a[index];
443 } 442 }
444 mAlarmButton ->setChecked( false ); 443 mAlarmButton ->setChecked( false );
445 mAlarmTimeEdit->setValue(alarmTime); 444 mAlarmTimeEdit->setValue(alarmTime);
446 mAlarmIncrCombo->setCurrentItem(0); 445 mAlarmIncrCombo->setCurrentItem(0);
447 enableAlarmEdit( false ); 446 enableAlarmEdit( false );
448 //alarmDisable (false); 447 //alarmDisable (false);
449 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic); 448 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic);
450 mCancelBox->setChecked( false ); 449 mCancelBox->setChecked( false );
451 mSummaryEdit->setEditText(""); 450 mSummaryEdit->setEditText("");
452 mLocationEdit->setEditText(""); 451 mLocationEdit->setEditText("");
453 mDescriptionEdit->setText(""); 452 mDescriptionEdit->setText("");
454 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 453 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
455 setCategories(""); 454 setCategories("");
456 fillCalCombo(); 455 fillCalCombo();
457} 456}
458void KOEditorGeneral::setSecrecy( int num ) 457void KOEditorGeneral::setSecrecy( int num )
459{ 458{
460 mSecrecyCombo->setCurrentItem(num); 459 mSecrecyCombo->setCurrentItem(num);
461} 460}
462void KOEditorGeneral::fillCalCombo( int setToID ) 461void KOEditorGeneral::fillCalCombo( int setToID )
463{ 462{
464 mCalendarBox->clear(); 463 mCalendarBox->clear();
465 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 464 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
466 int std = 0; 465 int std = 0;
467 int count = 0; 466 int count = 0;
468 while ( kkf ) { 467 while ( kkf ) {
469 if ( !kkf->mErrorOnLoad &&! kkf->isReadOnly ) { 468 if ( !kkf->mErrorOnLoad &&! kkf->isReadOnly ) {
470 if ( setToID ) { 469 if ( setToID ) {
471 if ( kkf->mCalNumber == setToID ) 470 if ( kkf->mCalNumber == setToID )
472 std = count; 471 std = count;
473 } else { 472 } else {
474 if ( kkf->isStandard ) { 473 if ( kkf->isStandard ) {
475 std = count; 474 std = count;
476 } 475 }
477 } 476 }
478 ++count; 477 ++count;
479 mCalendarBox->insertItem( kkf->mName ); 478 mCalendarBox->insertItem( kkf->mName );
480 } 479 }
481 kkf = KOPrefs::instance()->mCalendars.next(); 480 kkf = KOPrefs::instance()->mCalendars.next();
482 } 481 }
483 mCalendarBox->setCurrentItem( std ); 482 mCalendarBox->setCurrentItem( std );
484 if ( KOPrefs::instance()->mCalendars.count() == 1 ) 483 if ( KOPrefs::instance()->mCalendars.count() == 1 )
485 mCalendarBox->hide(); 484 mCalendarBox->hide();
486 else 485 else
487 mCalendarBox->show(); 486 mCalendarBox->show();
488 487
489} 488}
490int KOEditorGeneral::getCalendarID() 489int KOEditorGeneral::getCalendarID()
491{ 490{
492 return KOPrefs::instance()->getCalendarID( mCalendarBox->currentText() ); 491 return KOPrefs::instance()->getCalendarID( mCalendarBox->currentText() );
493} 492}
494 493
495void KOEditorGeneral::readIncidence(Incidence *event) 494void KOEditorGeneral::readIncidence(Incidence *event)
496{ 495{
497 fillCalCombo( event->calID() ); 496 fillCalCombo( event->calID() );
498 mAlarmMessage = event->summary(); 497 mAlarmMessage = event->summary();
499 if ( ! event->location().isEmpty() ) 498 if ( ! event->location().isEmpty() )
500 mAlarmMessage += " ("+event->location()+")"; 499 mAlarmMessage += " ("+event->location()+")";
501 mAlarmIncrCombo->setCurrentItem(0); 500 mAlarmIncrCombo->setCurrentItem(0);
502 mSummaryEdit->setEditText(event->summary()); 501 mSummaryEdit->setEditText(event->summary());
503 mLocationEdit->setEditText(event->location()); 502 mLocationEdit->setEditText(event->location());
504 mDescriptionEdit->setText(event->description()); 503 mDescriptionEdit->setText(event->description());
505 504
506#if 0 505#if 0
507 // organizer information 506 // organizer information
508 mOwnerLabel->setText(i18n("Owner: ") + event->organizer()); 507 mOwnerLabel->setText(i18n("Owner: ") + event->organizer());
509#endif 508#endif
510 509
511 enableAlarmEdit( event->isAlarmEnabled() ); 510 enableAlarmEdit( event->isAlarmEnabled() );
512 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) "); 511 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) ");
513 if(!event->isAlarmEnabled()) { 512 if(!event->isAlarmEnabled()) {
514 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 513 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
515 int alarmTime; 514 int alarmTime;
516 int a[] = { 1,5,10,15,30,60,180, 1440 }; 515 int a[] = { 1,5,10,15,30,60,180, 1440 };
517 int index = KOPrefs::instance()->mAlarmTime; 516 int index = KOPrefs::instance()->mAlarmTime;
518 if (index < 0 || index > 7) { 517 if (index < 0 || index > 7) {
519 alarmTime = 15; 518 alarmTime = 15;
520 } else { 519 } else {
521 alarmTime = a[index]; 520 alarmTime = a[index];
522 } 521 }
523 mAlarmTimeEdit->setValue(alarmTime); 522 mAlarmTimeEdit->setValue(alarmTime);
524 } 523 }
525 mAlarmButton->setChecked( event->isAlarmEnabled() ); 524 mAlarmButton->setChecked( event->isAlarmEnabled() );
526 mSecrecyCombo->setCurrentItem(event->secrecy()); 525 mSecrecyCombo->setCurrentItem(event->secrecy());
527 mCancelBox->setChecked( event->cancelled() ); 526 mCancelBox->setChecked( event->cancelled() );
528 mAlarmProgramButton->setOn(false); 527 mAlarmProgramButton->setOn(false);
529 mAlarmSoundButton->setOn(false); 528 mAlarmSoundButton->setOn(false);
530 529
531 // set up alarm stuff 530 // set up alarm stuff
532 QPtrList<Alarm> alarms = event->alarms(); 531 QPtrList<Alarm> alarms = event->alarms();
533 Alarm* alarm; 532 Alarm* alarm;
534 mAlarmIncrCombo->setCurrentItem(0); 533 mAlarmIncrCombo->setCurrentItem(0);
535 for ( alarm = alarms.first(); alarm; alarm = alarms.next() ) { 534 for ( alarm = alarms.first(); alarm; alarm = alarms.next() ) {
536 int offset; 535 int offset;
537 if ( alarm->hasTime() ) { 536 if ( alarm->hasTime() ) {
538 QDateTime t = alarm->time(); 537 QDateTime t = alarm->time();
539 offset = event->dtStart().secsTo( t ); 538 offset = event->dtStart().secsTo( t );
540 } else { 539 } else {
541 offset = alarm->startOffset().asSeconds(); 540 offset = alarm->startOffset().asSeconds();
542 } 541 }
543 if ( offset != 0 ) { 542 if ( offset != 0 ) {
544 offset = offset / -60; // make minutes 543 offset = offset / -60; // make minutes
545 if (offset % 60 == 0) { // divides evenly into hours? 544 if (offset % 60 == 0) { // divides evenly into hours?
546 offset = offset / 60; 545 offset = offset / 60;
547 mAlarmIncrCombo->setCurrentItem(1); 546 mAlarmIncrCombo->setCurrentItem(1);
548 if (offset % 24 == 0) { // divides evenly into days? 547 if (offset % 24 == 0) { // divides evenly into days?
549 offset = offset / 24; 548 offset = offset / 24;
550 mAlarmIncrCombo->setCurrentItem(2); 549 mAlarmIncrCombo->setCurrentItem(2);
551 } 550 }
552 } 551 }
553 } 552 }
554 mAlarmTimeEdit->setValue( offset ); 553 mAlarmTimeEdit->setValue( offset );
555 if (alarm->type() == Alarm::Procedure) { 554 if (alarm->type() == Alarm::Procedure) {
556 555
557 mAlarmProgram = alarm->programFile(); 556 mAlarmProgram = alarm->programFile();
558 mAlarmProgramButton->setOn(true); 557 mAlarmProgramButton->setOn(true);
559 QString dispStr = i18n("Running '%1'").arg(mAlarmProgram); 558 QString dispStr = i18n("Running '%1'").arg(mAlarmProgram);
560 QToolTip::add(mAlarmProgramButton, dispStr); 559 QToolTip::add(mAlarmProgramButton, dispStr);
561 } 560 }
562 else if (alarm->type() == Alarm::Audio) { 561 else if (alarm->type() == Alarm::Audio) {
563 mAlarmSound = alarm->audioFile(); 562 mAlarmSound = alarm->audioFile();
564 if ( ! QFile::exists( mAlarmSound ) ) 563 if ( ! QFile::exists( mAlarmSound ) )
565 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 564 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
566 mAlarmSoundButton->setOn(true); 565 mAlarmSoundButton->setOn(true);
567 QString dispStr = i18n("Playing '%1'").arg(mAlarmSound); 566 QString dispStr = i18n("Playing '%1'").arg(mAlarmSound);
568 QToolTip::add(mAlarmSoundButton, dispStr); 567 QToolTip::add(mAlarmSoundButton, dispStr);
569 } 568 }
570 mAlarmButton->setChecked(alarm->enabled()); 569 mAlarmButton->setChecked(alarm->enabled());
571 enableAlarmEdit( alarm->enabled() ); 570 enableAlarmEdit( alarm->enabled() );
572 //qDebug("nableAlarmEdit( alarm->enabled() )********* "); 571 //qDebug("nableAlarmEdit( alarm->enabled() )********* ");
573 // TODO: Deal with multiple alarms 572 // TODO: Deal with multiple alarms
574 break; // For now, stop after the first alarm 573 break; // For now, stop after the first alarm
575 } 574 }
576 575
577 setCategories(event->categoriesStr()); 576 setCategories(event->categoriesStr());
578} 577}
579 578
580void KOEditorGeneral::writeIncidence(Incidence *event) 579void KOEditorGeneral::writeIncidence(Incidence *event)
581{ 580{
582 // kdDebug() << "KOEditorGeneral::writeEvent()" << endl; 581 // kdDebug() << "KOEditorGeneral::writeEvent()" << endl;
583 mLocationEdit->save(KOLocationBox::LOCATION); 582 mLocationEdit->save(KOLocationBox::LOCATION);
584 event->setSummary(mSummaryEdit->currentText()); 583 event->setSummary(mSummaryEdit->currentText());
585 event->setLocation(mLocationEdit->currentText()); 584 event->setLocation(mLocationEdit->currentText());
586 event->setDescription(mDescriptionEdit->text()); 585 event->setDescription(mDescriptionEdit->text());
587 event->setCategories(mCategoriesLabel->text()); 586 event->setCategories(mCategoriesLabel->text());
588 event->setSecrecy(mSecrecyCombo->currentItem()); 587 event->setSecrecy(mSecrecyCombo->currentItem());
589 event->setCancelled(mCancelBox->isChecked() );; 588 event->setCancelled(mCancelBox->isChecked() );;
590 // alarm stuff 589 // alarm stuff
591 if (mAlarmButton->isChecked()) { 590 if (mAlarmButton->isChecked()) {
592 if (event->alarms().count() == 0) 591 if (event->alarms().count() == 0)
593 event->newAlarm(); 592 event->newAlarm();
594 QPtrList<Alarm> alarms = event->alarms(); 593 QPtrList<Alarm> alarms = event->alarms();
595 Alarm *alarm; 594 Alarm *alarm;
596 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 595 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
597 alarm->setEnabled(true); 596 alarm->setEnabled(true);
598 int j = mAlarmTimeEdit->value()* -60; 597 int j = mAlarmTimeEdit->value()* -60;
599 if (mAlarmIncrCombo->currentItem() == 1) 598 if (mAlarmIncrCombo->currentItem() == 1)
600 j = j * 60; 599 j = j * 60;
601 else if (mAlarmIncrCombo->currentItem() == 2) 600 else if (mAlarmIncrCombo->currentItem() == 2)
602 j = j * (60 * 24); 601 j = j * (60 * 24);
603 alarm->setStartOffset( j ); 602 alarm->setStartOffset( j );
604 603
605 if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn()) { 604 if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn()) {
606 alarm->setProcedureAlarm(mAlarmProgram); 605 alarm->setProcedureAlarm(mAlarmProgram);
607 } 606 }
608 else if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) 607 else if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn())
609 alarm->setAudioAlarm(mAlarmSound); 608 alarm->setAudioAlarm(mAlarmSound);
610 else 609 else
611 alarm->setType(Alarm::Invalid); 610 alarm->setType(Alarm::Invalid);
612 //alarm->setAudioAlarm("default"); 611 //alarm->setAudioAlarm("default");
613 // TODO: Deal with multiple alarms 612 // TODO: Deal with multiple alarms
614 break; // For now, stop after the first alarm 613 break; // For now, stop after the first alarm
615 } 614 }
616 } else { 615 } else {
617 Alarm* alarm = event->alarms().first(); 616 Alarm* alarm = event->alarms().first();
618 if ( alarm ) { 617 if ( alarm ) {
619 alarm->setEnabled(false); 618 alarm->setEnabled(false);
620 alarm->setType(Alarm::Invalid); 619 alarm->setType(Alarm::Invalid);
621 } 620 }
622 } 621 }
623 event->setCalID( getCalendarID() ); 622 int id = getCalendarID();
623 event->setCalID( id );
624 event->setAlarmEnabled( KOPrefs::instance()->getCalendar( id )->isAlarmEnabled );
624} 625}
diff --git a/korganizer/koeditorgeneral.h b/korganizer/koeditorgeneral.h
index d8b15af..b10a5d4 100644
--- a/korganizer/koeditorgeneral.h
+++ b/korganizer/koeditorgeneral.h
@@ -1,125 +1,125 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOEDITORGENERAL_H 23#ifndef KOEDITORGENERAL_H
24#define KOEDITORGENERAL_H 24#define KOEDITORGENERAL_H
25 25
26#include <qframe.h> 26#include <qframe.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30#include <qpopupmenu.h> 30#include <qpopupmenu.h>
31#include <qgroupbox.h> 31#include <qgroupbox.h>
32#include <qlineedit.h> 32#include <qlineedit.h>
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qlistview.h> 34#include <qlistview.h>
35#include <qradiobutton.h> 35#include <qradiobutton.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qspinbox.h> 37#include <qspinbox.h>
38#include <qcombobox.h> 38#include <qcombobox.h>
39 39
40#include <ktextedit.h> 40#include <ktextedit.h>
41#include <krestrictedline.h> 41#include <krestrictedline.h>
42 42
43#include <libkcal/incidence.h> 43#include <libkcal/incidence.h>
44 44
45#include "ktimeedit.h" 45#include "ktimeedit.h"
46 46
47class KDateEdit; 47class KDateEdit;
48class KOLocationBox; 48class KOLocationBox;
49using namespace KCal; 49using namespace KCal;
50 50
51class KOEditorGeneral : public QObject 51class KOEditorGeneral : public QObject
52{ 52{
53 Q_OBJECT 53 Q_OBJECT
54 public: 54 public:
55 KOEditorGeneral (QObject* parent=0,const char* name=0); 55 KOEditorGeneral (QObject* parent=0,const char* name=0);
56 virtual ~KOEditorGeneral(); 56 virtual ~KOEditorGeneral();
57 void setFocusOn( int i ); 57 void setFocusOn( int i );
58 void initHeader(QWidget *,QBoxLayout *); 58 void initHeader(QWidget *,QBoxLayout *);
59 void initDescription(QWidget *,QBoxLayout *); 59 void initDescription(QWidget *,QBoxLayout *);
60 void initSecrecy(QWidget *,QBoxLayout *); 60 void initSecrecy(QWidget *,QBoxLayout *);
61 void initCategories(QWidget *,QBoxLayout *); 61 void initCategories(QWidget *,QBoxLayout *);
62 void initAlarm(QWidget *,QBoxLayout *); 62 void initAlarm(QWidget *,QBoxLayout *);
63 63
64 /** Set widgets to default values */ 64 /** Set widgets to default values */
65 void setDefaults(bool allDay); 65 void setDefaults(bool allDay);
66 /** Read event object and setup widgets accordingly */ 66 /** Read event object and setup widgets accordingly */
67 void readIncidence(Incidence *); 67 void readIncidence(Incidence *);
68 /** Write event settings to event object */ 68 /** Write event settings to event object */
69 void writeIncidence(Incidence *); 69 void writeIncidence(Incidence *);
70 70
71 /** Check if the input is valid. */ 71 /** Check if the input is valid. */
72 bool validateInput() { return true; } 72 bool validateInput() { return true; }
73 73
74 void enableAlarm( bool enable ); 74 void enableAlarm( bool enable );
75 void setSecrecy( int num ); 75 void setSecrecy( int num );
76 int getCalendarID(); 76 int getCalendarID();
77 public slots: 77 public slots:
78 void setCategories(const QString &); 78 void setCategories(const QString &);
79 void editCategories(); 79 void editCategories();
80 80
81 protected slots: 81 protected slots:
82 void enableAlarmEdit( bool enable ); 82 void enableAlarmEdit( bool enable );
83 void disableAlarmEdit( bool disable ); 83 void disableAlarmEdit( bool disable );
84 void alarmDisable( bool disable ); 84 void alarmDisable( bool disable );
85 void pickAlarmSound(); 85 void pickAlarmSound();
86 void pickAlarmProgram(); 86 void pickAlarmProgram();
87 void slotSetFocusOn(); 87 void slotSetFocusOn();
88 void showCatPopup(); 88 void showCatPopup();
89 void selectedCatPopup( int ); 89 void selectedCatPopup( int );
90 90
91 signals: 91 signals:
92 void openCategoryDialog(); 92 void openCategoryDialog();
93 void allAccepted(); 93 void allAccepted();
94 void dateTimesChanged(QDateTime,QDateTime); 94 void dateTimesChanged(QDateTime,QDateTime);
95 95
96 protected: 96 protected:
97 void fillCalCombo( int setToID = 0 ); 97 void fillCalCombo( int setToID = 0 );
98 int mNextFocus; 98 int mNextFocus;
99 //QLineEdit *mSummaryEdit; 99 //QLineEdit *mSummaryEdit;
100 //QLineEdit *mLocationEdit; 100 //QLineEdit *mLocationEdit;
101 KOLocationBox *mSummaryEdit; 101 KOLocationBox *mSummaryEdit;
102 KOLocationBox *mLocationEdit; 102 KOLocationBox *mLocationEdit;
103 QComboBox *mCalendarBox; 103 QComboBox *mCalendarBox;
104 QLabel *mAlarmBell; 104 QLabel *mAlarmBell;
105 QCheckBox *mAlarmButton; 105 QCheckBox *mAlarmButton;
106 QSpinBox *mAlarmTimeEdit; 106 QSpinBox *mAlarmTimeEdit;
107 QPushButton *mAlarmSoundButton; 107 QPushButton *mAlarmSoundButton;
108 QPushButton *mAlarmProgramButton; 108 QPushButton *mAlarmProgramButton;
109 QComboBox *mAlarmIncrCombo; 109 QComboBox *mAlarmIncrCombo;
110 KTextEdit *mDescriptionEdit; 110 KTextEdit *mDescriptionEdit;
111 QLabel *mOwnerLabel; 111 QLabel *mOwnerLabel;
112 QComboBox *mSecrecyCombo; 112 QComboBox *mSecrecyCombo;
113 QCheckBox *mCancelBox; 113 QCheckBox *mCancelBox;
114 QPushButton *mCategoriesButton; 114 QPushButton *mCategoriesButton;
115 QPushButton *mCategoriesLabel; 115 QPushButton *mCategoriesLabel;
116 116
117 private: 117 private:
118 QPopupMenu * mCatPopup; 118 QPopupMenu * mCatPopup;
119 QString getFittingPath( const QString ) ; 119 QString getFittingPath( const QString &) ;
120 QString mAlarmSound; 120 QString mAlarmSound;
121 QString mAlarmProgram; 121 QString mAlarmProgram;
122 QString mAlarmMessage; 122 QString mAlarmMessage;
123}; 123};
124 124
125#endif 125#endif
diff --git a/korganizer/koeventeditor.cpp b/korganizer/koeventeditor.cpp
index 9ede543..3e87197 100644
--- a/korganizer/koeventeditor.cpp
+++ b/korganizer/koeventeditor.cpp
@@ -1,384 +1,388 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qframe.h> 25#include <qframe.h>
26#include <qpixmap.h> 26#include <qpixmap.h>
27#include <qhbox.h> 27#include <qhbox.h>
28#include <qtimer.h>
28#include <qdir.h> 29#include <qdir.h>
29#include <qlayout.h> 30#include <qlayout.h>
30#include <qwidgetstack.h> 31#include <qwidgetstack.h>
31#include <qapplication.h> 32#include <qapplication.h>
32 33
33#include <kiconloader.h> 34#include <kiconloader.h>
34#include <kstandarddirs.h> 35#include <kstandarddirs.h>
35#include <kdebug.h> 36#include <kdebug.h>
36#include <klocale.h> 37#include <klocale.h>
37#include <kfiledialog.h> 38#include <kfiledialog.h>
38#include <kmessagebox.h> 39#include <kmessagebox.h>
39#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
40#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
41#include <kresources/resourceselectdialog.h> 42#include <kresources/resourceselectdialog.h>
42 43
43#include <libkdepim/categoryselectdialog.h> 44#include <libkdepim/categoryselectdialog.h>
44#include <libkcal/calendarlocal.h> 45#include <libkcal/calendarlocal.h>
45#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
46 47
47#include "koprefs.h" 48#include "koprefs.h"
48 49
49#include "koeventeditor.h" 50#include "koeventeditor.h"
50extern int globalFlagBlockAgenda; 51extern int globalFlagBlockAgenda;
51 52
52KOEventEditor::KOEventEditor( Calendar *calendar, QWidget *parent ) : 53KOEventEditor::KOEventEditor( Calendar *calendar, QWidget *parent ) :
53 KOIncidenceEditor( i18n("Edit Event"), calendar, parent ) 54 KOIncidenceEditor( i18n("Edit Event"), calendar, parent )
54{ 55{
55 mEvent = 0; 56 mEvent = 0;
56 init(); 57 init();
57 if ( QApplication::desktop()->height() <= 240 ) 58 if ( QApplication::desktop()->height() <= 240 )
58 hideButtons(); 59 hideButtons();
59} 60}
60 61
61KOEventEditor::~KOEventEditor() 62KOEventEditor::~KOEventEditor()
62{ 63{
63 //emit dialogClose( mEvent ); 64 //emit dialogClose( mEvent );
64} 65}
65 66
66void KOEventEditor::init() 67void KOEventEditor::init()
67{ 68{
68 69
69 setupGeneral(); 70 setupGeneral();
70 setupAttendeesTab(); 71 setupAttendeesTab();
71 setupRecurrence(); 72 setupRecurrence();
72 73
73 // Propagate date time settings to recurrence tab 74 // Propagate date time settings to recurrence tab
74 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)), 75 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)),
75 mRecurrence,SLOT(setDefaultsDates(QDateTime,QDateTime))); 76 mRecurrence,SLOT(setDefaultsDates(QDateTime,QDateTime)));
76 connect(mGeneral,SIGNAL(dateTimeStrChanged(const QString &)), 77 connect(mGeneral,SIGNAL(dateTimeStrChanged(const QString &)),
77 mRecurrence,SLOT(setDateTimeStr(const QString &))); 78 mRecurrence,SLOT(setDateTimeStr(const QString &)));
78 79
79 // Category dialog 80 // Category dialog
80 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show())); 81 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show()));
81 //connect(mCategoryDialog,SIGNAL(categoriesSelected(const QString &)), 82 //connect(mCategoryDialog,SIGNAL(categoriesSelected(const QString &)),
82 // mGeneral,SLOT(setCategories(const QString &))); 83 // mGeneral,SLOT(setCategories(const QString &)));
83 84
84 85
85} 86}
86 87
87void KOEventEditor::reload() 88void KOEventEditor::reload()
88{ 89{
89 if ( mEvent ) readEvent( mEvent ); 90 if ( mEvent ) readEvent( mEvent );
90} 91}
91 92
92void KOEventEditor::setSecrecy( int sec ) 93void KOEventEditor::setSecrecy( int sec )
93{ 94{
94 mGeneral->setSecrecy( sec ); 95 mGeneral->setSecrecy( sec );
95} 96}
96void KOEventEditor::setCategories( QString s ) 97void KOEventEditor::setCategories( QString s )
97{ 98{
98 mGeneral->setCategories(s); 99 mGeneral->setCategories(s);
99 100
100} 101}
101void KOEventEditor::setupGeneral() 102void KOEventEditor::setupGeneral()
102{ 103{
103 mGeneral = new KOEditorGeneralEvent( this, "KOEditorGeneralEvent" ); 104 mGeneral = new KOEditorGeneralEvent( this, "KOEditorGeneralEvent" );
104 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) ); 105 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) );
105 106
106 if( KOPrefs::instance()->mCompactDialogs ) { 107 if( KOPrefs::instance()->mCompactDialogs ) {
107 QFrame *topFrame = addPage(i18n("General")); 108 QFrame *topFrame = addPage(i18n("General"));
108 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 109 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
109 topLayout->setSpacing(spacingHint()-1); 110 topLayout->setSpacing(spacingHint()-1);
110 topLayout->setMargin(marginHint()-1); 111 topLayout->setMargin(marginHint()-1);
111 topLayout->addStretch ( 1 ); 112 topLayout->addStretch ( 1 );
112 mGeneral->initHeader(topFrame,topLayout); 113 mGeneral->initHeader(topFrame,topLayout);
113 topLayout->addStretch ( 1 ); 114 topLayout->addStretch ( 1 );
114 mGeneral->initTime(topFrame,topLayout); 115 mGeneral->initTime(topFrame,topLayout);
115 topLayout->addStretch ( 1 ); 116 topLayout->addStretch ( 1 );
116// QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 117// QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
117 mGeneral->initAlarm(topFrame,topLayout); 118 mGeneral->initAlarm(topFrame,topLayout);
118 topLayout->addStretch ( 1 ); 119 topLayout->addStretch ( 1 );
119 mGeneral->enableAlarm( false ); 120 mGeneral->enableAlarm( false );
120 121
121 QBoxLayout *buttonLayout; 122 QBoxLayout *buttonLayout;
122 if ( QApplication::desktop()->width() < 500 && QApplication::desktop()->height() > 240 ) 123 if ( QApplication::desktop()->width() < 500 && QApplication::desktop()->height() > 240 )
123 buttonLayout = new QVBoxLayout( topLayout ); 124 buttonLayout = new QVBoxLayout( topLayout );
124 else 125 else
125 buttonLayout = new QHBoxLayout( topLayout ); 126 buttonLayout = new QHBoxLayout( topLayout );
126 QHBox* buttonWidget = new QHBox (topFrame); 127 QHBox* buttonWidget = new QHBox (topFrame);
127 QIconSet icon; 128 QIconSet icon;
128 if ( QApplication::desktop()->width() < 321 ) 129 if ( QApplication::desktop()->width() < 321 )
129 icon = SmallIcon("fileexport16"); 130 icon = SmallIcon("fileexport16");
130 else 131 else
131 icon = SmallIcon("fileexport"); 132 icon = SmallIcon("fileexport");
132 QPushButton * loadTemplate = new QPushButton( buttonWidget); 133 QPushButton * loadTemplate = new QPushButton( buttonWidget);
133 QPushButton * saveTemplate = new QPushButton( buttonWidget); 134 QPushButton * saveTemplate = new QPushButton( buttonWidget);
134 saveTemplate->setIconSet (icon ) ; 135 saveTemplate->setIconSet (icon ) ;
135 int size = saveTemplate->sizeHint().height(); 136 int size = saveTemplate->sizeHint().height();
136 saveTemplate->setFixedSize( size, size ); 137 saveTemplate->setFixedSize( size, size );
137 if ( QApplication::desktop()->width() < 321 ) 138 if ( QApplication::desktop()->width() < 321 )
138 icon = SmallIcon("fileimport16"); 139 icon = SmallIcon("fileimport16");
139 else 140 else
140 icon = SmallIcon("fileimport"); 141 icon = SmallIcon("fileimport");
141 loadTemplate->setIconSet (icon ) ; 142 loadTemplate->setIconSet (icon ) ;
142 loadTemplate->setFixedSize( size, size ); 143 loadTemplate->setFixedSize( size, size );
143 buttonLayout->addWidget( buttonWidget ); 144 buttonLayout->addWidget( buttonWidget );
144 mGeneral->initCategories( topFrame, buttonLayout ); 145 mGeneral->initCategories( topFrame, buttonLayout );
145 146
146 topLayout->addStretch( 1 ); 147 topLayout->addStretch( 1 );
147 148
148 QFrame *topFrame2 = addPage(i18n("Details")); 149 QFrame *topFrame2 = addPage(i18n("Details"));
149 150
150 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2); 151 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2);
151 topLayout2->setSpacing(spacingHint()-1); 152 topLayout2->setSpacing(spacingHint()-1);
152 topLayout2->setMargin(marginHint()-1); 153 topLayout2->setMargin(marginHint()-1);
153 topLayout2->setSpacing(spacingHint()); 154 topLayout2->setSpacing(spacingHint());
154 155
155 mGeneral->initClass(topFrame2,topLayout2); 156 mGeneral->initClass(topFrame2,topLayout2);
156 mGeneral->initSecrecy( topFrame2, topLayout2 ); 157 mGeneral->initSecrecy( topFrame2, topLayout2 );
157 mGeneral->initDescription(topFrame2,topLayout2); 158 mGeneral->initDescription(topFrame2,topLayout2);
158 159
159 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 160 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
160 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 161 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
161 } else { 162 } else {
162 QFrame *topFrame = addPage(i18n("General")); 163 QFrame *topFrame = addPage(i18n("General"));
163 164
164 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 165 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
165 topLayout->setSpacing(spacingHint()); 166 topLayout->setSpacing(spacingHint());
166 167
167 mGeneral->initHeader(topFrame,topLayout); 168 mGeneral->initHeader(topFrame,topLayout);
168 mGeneral->initTime(topFrame,topLayout); 169 mGeneral->initTime(topFrame,topLayout);
169 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 170 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
170 mGeneral->initAlarm(topFrame,alarmLineLayout); 171 mGeneral->initAlarm(topFrame,alarmLineLayout);
171 mGeneral->initClass(topFrame,alarmLineLayout); 172 mGeneral->initClass(topFrame,alarmLineLayout);
172 mGeneral->initDescription(topFrame,topLayout); 173 mGeneral->initDescription(topFrame,topLayout);
173 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout); 174 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout);
174 mGeneral->initCategories( topFrame, detailsLayout ); 175 mGeneral->initCategories( topFrame, detailsLayout );
175 mGeneral->initSecrecy( topFrame, detailsLayout ); 176 mGeneral->initSecrecy( topFrame, detailsLayout );
176 } 177 }
177 178
178 mGeneral->finishSetup(); 179 mGeneral->finishSetup();
179 180
180} 181}
181 182
182void KOEventEditor::setupRecurrence() 183void KOEventEditor::setupRecurrence()
183{ 184{
184 QFrame *topFrame = addPage( i18n("Recurrence") ); 185 QFrame *topFrame = addPage( i18n("Recurrence") );
185 QBoxLayout *topLayout = new QVBoxLayout( topFrame ); 186 QBoxLayout *topLayout = new QVBoxLayout( topFrame );
186 187
187 mRecurrence = new KOEditorRecurrence( topFrame ); 188 mRecurrence = new KOEditorRecurrence( topFrame );
188 topLayout->addWidget( mRecurrence ); 189 topLayout->addWidget( mRecurrence );
189} 190}
190 191
191void KOEventEditor::editEvent(Event *event, bool showDescription) 192void KOEventEditor::editEvent(Event *event, bool showDescription)
192{ 193{
193 // init(); 194 // init();
194 195
195 mEvent = event; 196 mEvent = event;
196 readEvent(mEvent); 197 readEvent(mEvent);
197 if ( showDescription ) { 198 if ( showDescription ) {
198 showPage( 1 ); 199 showPage( 1 );
199 mGeneral->setFocusOn( 1 ); 200 mGeneral->setFocusOn( 1 );
200 } else { 201 } else {
201 showPage( 0 ); 202 showPage( 0 );
202 mGeneral->setFocusOn( 2 ); 203 mGeneral->setFocusOn( 2 );
203 } 204 }
204} 205}
205 206
206void KOEventEditor::newEvent( QDateTime from, QDateTime to, bool allDay ) 207void KOEventEditor::newEvent( QDateTime from, QDateTime to, bool allDay )
207{ 208{
208 // init(); 209 // init();
209 210
210 mEvent = 0; 211 mEvent = 0;
211 setDefaults(from,to,allDay); 212 setDefaults(from,to,allDay);
212} 213}
213 214
214void KOEventEditor::loadDefaults() 215void KOEventEditor::loadDefaults()
215{ 216{
216 int fmt = KOPrefs::instance()->mStartTime; 217 int fmt = KOPrefs::instance()->mStartTime;
217 218
218 QDateTime from(QDate::currentDate(), QTime(fmt,0,0)); 219 QDateTime from(QDate::currentDate(), QTime(fmt,0,0));
219 QDateTime to(QDate::currentDate(), 220 QDateTime to(QDate::currentDate(),
220 QTime(fmt+KOPrefs::instance()->mDefaultDuration,0,0)); 221 QTime(fmt+KOPrefs::instance()->mDefaultDuration,0,0));
221 222
222 setDefaults(from,to,false); 223 setDefaults(from,to,false);
223} 224}
224 225
225bool KOEventEditor::processInput( bool emitTime ) 226bool KOEventEditor::processInput( bool emitTime )
226{ 227{
227 if (!validateInput()) return false; 228 if (!validateInput()) return false;
228 229
229 Event *event = 0; 230 Event *event = 0;
230 231
231 if (mEvent) event = mEvent; 232 if (mEvent) event = mEvent;
232 else { 233 else {
233 event = new Event; 234 event = new Event;
234 event->setOrganizer(KOPrefs::instance()->email()); 235 event->setOrganizer(KOPrefs::instance()->email());
235 } 236 }
236 237
237 writeEvent(event); 238 writeEvent(event);
238 if ( emitTime ) { 239 if ( emitTime ) {
239 globalFlagBlockAgenda = 1; 240 globalFlagBlockAgenda = 1;
240 emit showAgendaView( false ); 241 emit showAgendaView( false );
241 emit jumpToTime( event->dtStart().date() ); 242 emit jumpToTime( event->dtStart().date() );
242 globalFlagBlockAgenda = 2; 243 globalFlagBlockAgenda = 2;
243 244
244 } 245 }
245 if (mEvent) { 246 if (mEvent) {
246 event->setRevision(event->revision()+1); 247 event->setRevision(event->revision()+1);
247 emit eventChanged(event); 248 emit eventChanged(event);
248 } else { 249 } else {
249 mCalendar->addEvent(event); 250 mCalendar->addEvent(event);
250 mEvent = event; 251 mEvent = event;
251 emit eventAdded(event); 252 emit eventAdded(event);
253 if ( event->isAlarmEnabled () && !event->alarmEnabled () ) {
254 QTimer::singleShot( 0, this, SLOT ( alarmWarning() ) );
255 }
252 } 256 }
253 257
254 return true; 258 return true;
255} 259}
256 260
257void KOEventEditor::deleteEvent() 261void KOEventEditor::deleteEvent()
258{ 262{
259 kdDebug() << "Delete event" << endl; 263 kdDebug() << "Delete event" << endl;
260 264
261 if (mEvent) { 265 if (mEvent) {
262 if (KOPrefs::instance()->mConfirm) { 266 if (KOPrefs::instance()->mConfirm) {
263 switch (msgItemDelete()) { 267 switch (msgItemDelete()) {
264 case KMessageBox::Continue: // OK 268 case KMessageBox::Continue: // OK
265 emit eventToBeDeleted(mEvent); 269 emit eventToBeDeleted(mEvent);
266 emit dialogClose(mEvent); 270 emit dialogClose(mEvent);
267 mCalendar->deleteEvent(mEvent); 271 mCalendar->deleteEvent(mEvent);
268 emit eventDeleted(); 272 emit eventDeleted();
269 reject(); 273 reject();
270 break; 274 break;
271 } 275 }
272 } 276 }
273 else { 277 else {
274 emit eventToBeDeleted(mEvent); 278 emit eventToBeDeleted(mEvent);
275 emit dialogClose(mEvent); 279 emit dialogClose(mEvent);
276 mCalendar->deleteEvent(mEvent); 280 mCalendar->deleteEvent(mEvent);
277 emit eventDeleted(); 281 emit eventDeleted();
278 reject(); 282 reject();
279 } 283 }
280 } else { 284 } else {
281 reject(); 285 reject();
282 } 286 }
283} 287}
284 288
285void KOEventEditor::setDefaults(QDateTime from, QDateTime to, bool allDay) 289void KOEventEditor::setDefaults(QDateTime from, QDateTime to, bool allDay)
286{ 290{
287 mGeneral->setDefaults(from,to,allDay); 291 mGeneral->setDefaults(from,to,allDay);
288 mDetails->setDefaults(); 292 mDetails->setDefaults();
289 mRecurrence->setDefaults(from,to); 293 mRecurrence->setDefaults(from,to);
290 showPage( 0 ); 294 showPage( 0 );
291 mGeneral->setFocusOn( 2 ); 295 mGeneral->setFocusOn( 2 );
292} 296}
293 297
294void KOEventEditor::readEvent( Event *event, bool tmpl ) 298void KOEventEditor::readEvent( Event *event, bool tmpl )
295{ 299{
296 mGeneral->readEvent( event, tmpl ); 300 mGeneral->readEvent( event, tmpl );
297 mDetails->readEvent( event ); 301 mDetails->readEvent( event );
298 mRecurrence->readEvent( event ); 302 mRecurrence->readEvent( event );
299 303
300 // categories 304 // categories
301 //mCategoryDialog->setSelected( event->categories() ); 305 //mCategoryDialog->setSelected( event->categories() );
302} 306}
303 307
304void KOEventEditor::writeEvent(Event *event) 308void KOEventEditor::writeEvent(Event *event)
305{ 309{
306 mGeneral->writeEvent( event ); 310 mGeneral->writeEvent( event );
307 mDetails->writeEvent( event ); 311 mDetails->writeEvent( event );
308 312
309 if ( event->organizer() == KOPrefs::instance()->email() ) { 313 if ( event->organizer() == KOPrefs::instance()->email() ) {
310 Event *ev = new Event( *event ); 314 Event *ev = new Event( *event );
311 ev->registerObserver(0); 315 ev->registerObserver(0);
312 mDetails->cancelAttendeeEvent( ev ); 316 mDetails->cancelAttendeeEvent( ev );
313 if ( ev->attendeeCount() > 0 ) { 317 if ( ev->attendeeCount() > 0 ) {
314 emit deleteAttendee( ev ); 318 emit deleteAttendee( ev );
315 } 319 }
316 delete(ev); 320 delete(ev);
317 } 321 }
318 322
319 mRecurrence->writeEvent(event); 323 mRecurrence->writeEvent(event);
320} 324}
321 325
322bool KOEventEditor::validateInput() 326bool KOEventEditor::validateInput()
323{ 327{
324 if (!mGeneral->validateInput()) return false; 328 if (!mGeneral->validateInput()) return false;
325 if (!mDetails->validateInput()) return false; 329 if (!mDetails->validateInput()) return false;
326 if (!mRecurrence->validateInput()) return false; 330 if (!mRecurrence->validateInput()) return false;
327 return true; 331 return true;
328} 332}
329 333
330int KOEventEditor::msgItemDelete() 334int KOEventEditor::msgItemDelete()
331{ 335{
332 return KMessageBox::warningContinueCancel(this, 336 return KMessageBox::warningContinueCancel(this,
333 i18n("This item will be permanently deleted."), 337 i18n("This item will be permanently deleted."),
334 i18n("KOrganizer Confirmation"),i18n("Delete")); 338 i18n("KOrganizer Confirmation"),i18n("Delete"));
335} 339}
336 340
337void KOEventEditor::slotLoadTemplate() 341void KOEventEditor::slotLoadTemplate()
338{ 342{
339 343
340 QString fileName =locateLocal( "templates", "events" ); 344 QString fileName =locateLocal( "templates", "events" );
341 QDir t_dir; 345 QDir t_dir;
342 if ( !t_dir.exists(fileName) ) 346 if ( !t_dir.exists(fileName) )
343 t_dir.mkdir ( fileName ); 347 t_dir.mkdir ( fileName );
344 fileName += "/event"; 348 fileName += "/event";
345 fileName = KFileDialog::getOpenFileName( fileName , i18n("Load Event template"), this ); 349 fileName = KFileDialog::getOpenFileName( fileName , i18n("Load Event template"), this );
346 if ( fileName.length() == 0 ) 350 if ( fileName.length() == 0 )
347 return; 351 return;
348 CalendarLocal cal; 352 CalendarLocal cal;
349 ICalFormat format; 353 ICalFormat format;
350 if ( !format.load( &cal, fileName ) ) { 354 if ( !format.load( &cal, fileName ) ) {
351 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 355 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
352 .arg( fileName ) ); 356 .arg( fileName ) );
353 return ; 357 return ;
354 } 358 }
355 QPtrList<Event> events = cal.events(); 359 QPtrList<Event> events = cal.events();
356 Event* event = events.first(); 360 Event* event = events.first();
357 if ( !event ) { 361 if ( !event ) {
358 KMessageBox::error( this, 362 KMessageBox::error( this,
359 i18n("Template does not contain\na valid Event.")); 363 i18n("Template does not contain\na valid Event."));
360 } else { 364 } else {
361 kdDebug() << "KOEventEditor::slotLoadTemplate(): readTemplate" << endl; 365 kdDebug() << "KOEventEditor::slotLoadTemplate(): readTemplate" << endl;
362 readEvent( event, true ); 366 readEvent( event, true );
363 } 367 }
364} 368}
365 369
366 370
367void KOEventEditor::slotSaveTemplate() 371void KOEventEditor::slotSaveTemplate()
368{ 372{
369 QString fileName =locateLocal( "templates", "events" ); 373 QString fileName =locateLocal( "templates", "events" );
370 QDir t_dir; 374 QDir t_dir;
371 if ( !t_dir.exists(fileName) ) 375 if ( !t_dir.exists(fileName) )
372 t_dir.mkdir ( fileName ); 376 t_dir.mkdir ( fileName );
373 fileName += "/event"; 377 fileName += "/event";
374 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Event template"), this ); 378 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Event template"), this );
375 if ( fileName.length() > 0 ) 379 if ( fileName.length() > 0 )
376 saveTemplate( fileName ); 380 saveTemplate( fileName );
377} 381}
378 382
379void KOEventEditor::saveTemplate( const QString &templateName ) 383void KOEventEditor::saveTemplate( const QString &templateName )
380{ 384{
381 Event *event = new Event; 385 Event *event = new Event;
382 writeEvent( event ); 386 writeEvent( event );
383 saveAsTemplate( event, templateName ); 387 saveAsTemplate( event, templateName );
384} 388}
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 02b54da..607e549 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -215,501 +215,509 @@ void KOEventViewer::setSource(const QString& n)
215 /* 215 /*
216 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 216 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
217 We start it without its main interface 217 We start it without its main interface
218 */ 218 */
219 KIconLoader* iconLoader = new KIconLoader(); 219 KIconLoader* iconLoader = new KIconLoader();
220 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 220 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
221 ActionManager::setStartedKAddressBook(true); 221 ActionManager::setStartedKAddressBook(true);
222 tmpStr = "kaddressbook --editor-only --uid "; 222 tmpStr = "kaddressbook --editor-only --uid ";
223 tmpStr += KProcess::quote(n.mid(6)); 223 tmpStr += KProcess::quote(n.mid(6));
224 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 224 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
225 return; 225 return;
226 } 226 }
227 } else { 227 } else {
228 //QTextBrowser::setSource(n); 228 //QTextBrowser::setSource(n);
229 } 229 }
230#endif 230#endif
231} 231}
232void KOEventViewer::mailToAttendees( bool all ) 232void KOEventViewer::mailToAttendees( bool all )
233{ 233{
234 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 234 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
235 if (attendees.count() == 0) return; 235 if (attendees.count() == 0) return;
236 QStringList nameList; 236 QStringList nameList;
237 QStringList emailList; 237 QStringList emailList;
238 QStringList uidList; 238 QStringList uidList;
239 Attendee* a; 239 Attendee* a;
240 for(a=attendees.first();a;a=attendees.next()) { 240 for(a=attendees.first();a;a=attendees.next()) {
241 if ( !all && !a->RSVP() ) continue; 241 if ( !all && !a->RSVP() ) continue;
242 if (!a->email().isEmpty()) { 242 if (!a->email().isEmpty()) {
243#ifndef DESKTOP_VERSION 243#ifndef DESKTOP_VERSION
244 nameList.append (a->realName() ); 244 nameList.append (a->realName() );
245 emailList.append (a->email() ); 245 emailList.append (a->email() );
246 uidList.append (a->uid() ); 246 uidList.append (a->uid() );
247#else 247#else
248 emailList.append(a->realName() +" <" + a->email() +">"); 248 emailList.append(a->realName() +" <" + a->email() +">");
249#endif 249#endif
250 } 250 }
251 } 251 }
252#ifndef DESKTOP_VERSION 252#ifndef DESKTOP_VERSION
253 QString uid = "ComposeMailUIpick2"+mMailSubject; 253 QString uid = "ComposeMailUIpick2"+mMailSubject;
254 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 254 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
255 255
256#else 256#else
257 ExternalAppHandler::instance()->mailToMultipleContacts( emailList.join(","), mMailSubject ); 257 ExternalAppHandler::instance()->mailToMultipleContacts( emailList.join(","), mMailSubject );
258#endif 258#endif
259 259
260} 260}
261void KOEventViewer::addTag(const QString & tag,const QString & text) 261void KOEventViewer::addTag(const QString & tag,const QString & text)
262{ 262{
263 int number=text.contains("\n"); 263 int number=text.contains("\n");
264 QString str = "<" + tag + ">"; 264 QString str = "<" + tag + ">";
265 QString tmpText=text; 265 QString tmpText=text;
266 QString tmpStr=str; 266 QString tmpStr=str;
267 if(number !=-1) 267 if(number !=-1)
268 { 268 {
269 if (number > 0) { 269 if (number > 0) {
270 int pos=0; 270 int pos=0;
271 QString tmp; 271 QString tmp;
272 for(int i=0;i<=number;i++) { 272 for(int i=0;i<=number;i++) {
273 pos=tmpText.find("\n"); 273 pos=tmpText.find("\n");
274 tmp=tmpText.left(pos); 274 tmp=tmpText.left(pos);
275 tmpText=tmpText.right(tmpText.length()-pos-1); 275 tmpText=tmpText.right(tmpText.length()-pos-1);
276 tmpStr+=tmp+"<br>"; 276 tmpStr+=tmp+"<br>";
277 } 277 }
278 } 278 }
279 else tmpStr += tmpText; 279 else tmpStr += tmpText;
280 tmpStr+="</" + tag + ">"; 280 tmpStr+="</" + tag + ">";
281 mText.append(tmpStr); 281 mText.append(tmpStr);
282 } 282 }
283 else 283 else
284 { 284 {
285 str += text + "</" + tag + ">"; 285 str += text + "</" + tag + ">";
286 mText.append(str); 286 mText.append(str);
287 } 287 }
288} 288}
289 289
290void KOEventViewer::setColorMode( int m ) 290void KOEventViewer::setColorMode( int m )
291{ 291{
292 mColorMode = m; 292 mColorMode = m;
293} 293}
294void KOEventViewer::appendEvent(Event *event, int mode ) 294void KOEventViewer::appendEvent(Event *event, int mode )
295{ 295{
296 mMailSubject = ""; 296 mMailSubject = "";
297 mCurrentIncidence = event; 297 mCurrentIncidence = event;
298 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 298 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
299 bool wideScreen = ( QApplication::desktop()->width() >= 640 ); 299 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
300 topLevelWidget()->setCaption(i18n("Event Viewer")); 300 topLevelWidget()->setCaption(i18n("Event Viewer"));
301 if ( mode == 0 ) { 301 if ( mode == 0 ) {
302 addTag("h2",deTag(event->summary())); 302 addTag("h2",deTag(event->summary()));
303 formatReadOnly(event); 303 formatReadOnly(event);
304 } 304 }
305 else { 305 else {
306 if ( mColorMode == 1 ) { 306 if ( mColorMode == 1 ) {
307 mText +="<font color=\"#00A000\">"; 307 mText +="<font color=\"#00A000\">";
308 } 308 }
309 if ( mColorMode == 2 ) { 309 if ( mColorMode == 2 ) {
310 mText +="<font color=\"#C00000\">"; 310 mText +="<font color=\"#C00000\">";
311 } 311 }
312 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 312 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
313 if ( mode == 1 ) { 313 if ( mode == 1 ) {
314 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 314 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
315 } else { 315 } else {
316 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 316 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
317 } 317 }
318 formatReadOnly(event); 318 formatReadOnly(event);
319 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 319 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
320 if ( mColorMode ) 320 if ( mColorMode )
321 mText += "</font>"; 321 mText += "</font>";
322 } 322 }
323 mMailSubject += i18n( "Meeting " )+ event->summary(); 323 mMailSubject += i18n( "Meeting " )+ event->summary();
324 if (event->cancelled ()) { 324 if (event->cancelled ()) {
325 mText +="<font color=\"#B00000\">"; 325 mText +="<font color=\"#B00000\">";
326 addTag("i",i18n("This event has been cancelled!")); 326 addTag("i",i18n("This event has been cancelled!"));
327 mText.append("<br>"); 327 mText.append("<br>");
328 mText += "</font>"; 328 mText += "</font>";
329 mMailSubject += i18n("(cancelled)"); 329 mMailSubject += i18n("(cancelled)");
330 } 330 }
331 331
332 if (event->doesFloat()) { 332 if (event->doesFloat()) {
333 if (event->isMultiDay()) { 333 if (event->isMultiDay()) {
334 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 334 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
335 .arg(event->dtStartDateStr(shortDate)) 335 .arg(event->dtStartDateStr(shortDate))
336 .arg(event->dtEndDateStr(shortDate))); 336 .arg(event->dtEndDateStr(shortDate)));
337 mText.append(i18n("<p><b>Duration:</b> %1 days</p>") 337 mText.append(i18n("<p><b>Duration:</b> %1 days</p>")
338 .arg(event->dtStart().daysTo(event->dtEnd())+1)); 338 .arg(event->dtStart().daysTo(event->dtEnd())+1));
339 } else { 339 } else {
340 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 340 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
341 } 341 }
342 } else { 342 } else {
343 if (event->isMultiDay()) { 343 if (event->isMultiDay()) {
344 mText.append(i18n("<p><b>From:</b> %1</p> ") 344 mText.append(i18n("<p><b>From:</b> %1</p> ")
345 .arg(event->dtStartStr( shortDate))); 345 .arg(event->dtStartStr( shortDate)));
346 mText.append(i18n("<p><b>To:</b> %1</p>") 346 mText.append(i18n("<p><b>To:</b> %1</p>")
347 .arg(event->dtEndStr(shortDate))); 347 .arg(event->dtEndStr(shortDate)));
348 } else { 348 } else {
349 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 349 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
350 .arg(event->dtStartTimeStr()) 350 .arg(event->dtStartTimeStr())
351 .arg(event->dtEndTimeStr())); 351 .arg(event->dtEndTimeStr()));
352 mText.append(i18n("<p><b>On:</b> %1</p> ") 352 mText.append(i18n("<p><b>On:</b> %1</p> ")
353 .arg(event->dtStartDateStr( shortDate ))); 353 .arg(event->dtStartDateStr( shortDate )));
354 } 354 }
355 } 355 }
356 if (!event->location().isEmpty()) { 356 if (!event->location().isEmpty()) {
357 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); 357 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
358 mMailSubject += i18n(" at ") + event->location(); 358 mMailSubject += i18n(" at ") + event->location();
359 } 359 }
360 if (event->doesRecur()) { 360 if (event->doesRecur()) {
361 361
362 QString recurText = event->recurrenceText(); 362 QString recurText = event->recurrenceText();
363 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 363 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
364 bool ok; 364 bool ok;
365 QDate start = QDate::currentDate(); 365 QDate start = QDate::currentDate();
366 QDateTime next; 366 QDateTime next;
367 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 367 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
368 if ( ok ) { 368 if ( ok ) {
369 if ( wideScreen ){ 369 if ( wideScreen ){
370 addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) ); 370 addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) );
371 } else { 371 } else {
372 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 372 addTag("p",i18n("<b>Next recurrence is on:</b>") );
373 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 373 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
374 } 374 }
375 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 375 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
376 376
377 } else { 377 } else {
378 bool last; 378 bool last;
379 QDate nextd; 379 QDate nextd;
380 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 380 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
381 if ( last ) { 381 if ( last ) {
382 if ( wideScreen ){ 382 if ( wideScreen ){
383 addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate )); 383 addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate ));
384 } else{ 384 } else{
385 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 385 addTag("p",i18n("<b>Last recurrence was on:</b>") );
386 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 386 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
387 } 387 }
388 } 388 }
389 } 389 }
390 } else { 390 } else {
391 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 391 mMailSubject += i18n(" - " )+event->dtStartStr( true );
392 392
393 } 393 }
394 394
395 395
396 if (event->isAlarmEnabled()) { 396 if (event->isAlarmEnabled()) {
397 Alarm *alarm =event->alarms().first() ; 397 Alarm *alarm =event->alarms().first() ;
398 QDateTime t = alarm->time(); 398 QDateTime t = alarm->time();
399 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 399 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
400 if(wideScreen ){ 400 if(wideScreen ){
401 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); 401 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
402 }else{ 402 }else{
403 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 403 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
404 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 404 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
405 } 405 }
406 //addTag("p",s); 406 //addTag("p",s);
407 if ( !(event->alarmEnabled() ) ) {
408 addTag("p", "<em>("+i18n("Enable alarm in resource settings") + ")</em>");
409
410 }
407 } 411 }
408 412
409 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); 413 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
410 414
411 formatCategories(event); 415 formatCategories(event);
412 416
413 formatAttendees(event); 417 formatAttendees(event);
414 418
415 if ( KOPrefs::instance()->mEVshowCreated ) { 419 if ( KOPrefs::instance()->mEVshowCreated ) {
416 if(wideScreen ){ 420 if(wideScreen ){
417 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 421 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
418 }else{ 422 }else{
419 addTag("p",i18n("<b>Created: ") +" </b>"); 423 addTag("p",i18n("<b>Created: ") +" </b>");
420 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 424 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
421 } 425 }
422 426
423 427
424 } 428 }
425 if ( KOPrefs::instance()->mEVshowChanged ) { 429 if ( KOPrefs::instance()->mEVshowChanged ) {
426 if(wideScreen ){ 430 if(wideScreen ){
427 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 431 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
428 }else{ 432 }else{
429 addTag("p",i18n("<b>Last modified: ") +" </b>"); 433 addTag("p",i18n("<b>Last modified: ") +" </b>");
430 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 434 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
431 } 435 }
432 436
433 } 437 }
434 if ( KOPrefs::instance()->mEVshowDetails ) { 438 if ( KOPrefs::instance()->mEVshowDetails ) {
435 if (!event->description().isEmpty()) { 439 if (!event->description().isEmpty()) {
436 addTag("p",i18n("<b>Details: </b>")); 440 addTag("p",i18n("<b>Details: </b>"));
437 addTag("p",deTag(event->description())); 441 addTag("p",deTag(event->description()));
438 } 442 }
439 } 443 }
440 setText(mText); 444 setText(mText);
441 //QWhatsThis::add(this,mText); 445 //QWhatsThis::add(this,mText);
442 446
443} 447}
444 448
445void KOEventViewer::appendTodo(Todo *event, int mode ) 449void KOEventViewer::appendTodo(Todo *event, int mode )
446{ 450{
447 mMailSubject = ""; 451 mMailSubject = "";
448 mCurrentIncidence = event; 452 mCurrentIncidence = event;
449 topLevelWidget()->setCaption(i18n("Todo Viewer")); 453 topLevelWidget()->setCaption(i18n("Todo Viewer"));
450 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 454 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
451 bool wideScreen = ( QApplication::desktop()->width() >= 640 ); 455 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
452 if (mode == 0 ) { 456 if (mode == 0 ) {
453 addTag("h2",deTag(event->summary())); 457 addTag("h2",deTag(event->summary()));
454 formatReadOnly(event); 458 formatReadOnly(event);
455 } 459 }
456 else { 460 else {
457 if ( mColorMode == 1 ) { 461 if ( mColorMode == 1 ) {
458 mText +="<font color=\"#00A000\">"; 462 mText +="<font color=\"#00A000\">";
459 } 463 }
460 if ( mColorMode == 2 ) { 464 if ( mColorMode == 2 ) {
461 mText +="<font color=\"#B00000\">"; 465 mText +="<font color=\"#B00000\">";
462 } 466 }
463 if ( mode == 1 ) { 467 if ( mode == 1 ) {
464 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 468 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
465 } else { 469 } else {
466 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 470 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
467 } 471 }
468 formatReadOnly(event); 472 formatReadOnly(event);
469 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 473 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
470 if ( mColorMode ) 474 if ( mColorMode )
471 mText += "</font>"; 475 mText += "</font>";
472 } 476 }
473 mMailSubject += i18n( "Todo " )+ event->summary(); 477 mMailSubject += i18n( "Todo " )+ event->summary();
474 478
475 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 479 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
476 mText +="<font color=\"#B00000\">"; 480 mText +="<font color=\"#B00000\">";
477 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 481 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
478 mText += "</font>"; 482 mText += "</font>";
479 } else { 483 } else {
480 mText.append(i18n("<p><i>%1 % completed</i></p>") 484 mText.append(i18n("<p><i>%1 % completed</i></p>")
481 .arg(event->percentComplete())); 485 .arg(event->percentComplete()));
482 } 486 }
483 487
484 if (event->cancelled ()) { 488 if (event->cancelled ()) {
485 mText +="<font color=\"#B00000\">"; 489 mText +="<font color=\"#B00000\">";
486 addTag("i",i18n("This todo has been cancelled!")); 490 addTag("i",i18n("This todo has been cancelled!"));
487 mText.append("<br>"); 491 mText.append("<br>");
488 mText += "</font>"; 492 mText += "</font>";
489 mMailSubject += i18n("(cancelled)"); 493 mMailSubject += i18n("(cancelled)");
490 } 494 }
491 495
492 496
493 497
494 if (event->doesRecur()) { 498 if (event->doesRecur()) {
495 499
496 QString recurText = event->recurrence()->recurrenceText(); 500 QString recurText = event->recurrence()->recurrenceText();
497 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 501 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
498 502
499 } 503 }
500 if (event->hasStartDate()) { 504 if (event->hasStartDate()) {
501 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 505 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
502 } 506 }
503 if (event->hasDueDate()) { 507 if (event->hasDueDate()) {
504 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 508 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
505 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 509 mMailSubject += i18n(" - " )+event->dtDueStr( true );
506 } 510 }
507 if (!event->location().isEmpty()) { 511 if (!event->location().isEmpty()) {
508 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); 512 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
509 mMailSubject += i18n(" at ") + event->location(); 513 mMailSubject += i18n(" at ") + event->location();
510 } 514 }
511 mText.append(i18n("<p><b>Priority:</b> %2</p>") 515 mText.append(i18n("<p><b>Priority:</b> %2</p>")
512 .arg(QString::number(event->priority()))); 516 .arg(QString::number(event->priority())));
513 517
514 if (event->isAlarmEnabled()) { 518 if (event->isAlarmEnabled()) {
515 Alarm *alarm =event->alarms().first() ; 519 Alarm *alarm =event->alarms().first() ;
516 QDateTime t = alarm->time(); 520 QDateTime t = alarm->time();
517 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 521 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
518 if ( wideScreen ) { 522 if ( wideScreen ) {
519 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); 523 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
520 } else { 524 } else {
521 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 525 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
522 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 526 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
523 } 527 }
528 if ( !(event->alarmEnabled() ) ) {
529 addTag("p", "<em>("+i18n("Enable alarm in resource settings") + ")</em>");
530
531 }
524 } 532 }
525 533
526 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); 534 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
527 535
528 formatCategories(event); 536 formatCategories(event);
529 537
530 formatAttendees(event); 538 formatAttendees(event);
531 539
532 if ( KOPrefs::instance()->mEVshowCreated ) { 540 if ( KOPrefs::instance()->mEVshowCreated ) {
533 if(wideScreen ){ 541 if(wideScreen ){
534 542
535 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 543 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
536 544
537 } else { 545 } else {
538 addTag("p",i18n("<b>Created: ") +" </b>"); 546 addTag("p",i18n("<b>Created: ") +" </b>");
539 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 547 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
540 } 548 }
541 } 549 }
542 if ( KOPrefs::instance()->mEVshowChanged ) { 550 if ( KOPrefs::instance()->mEVshowChanged ) {
543 if(wideScreen ){ 551 if(wideScreen ){
544 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 552 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
545 553
546 } else { 554 } else {
547 addTag("p",i18n("<b>Last modified: ") +" </b>"); 555 addTag("p",i18n("<b>Last modified: ") +" </b>");
548 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 556 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
549 } 557 }
550 } 558 }
551 if ( event->relatedTo() ) { 559 if ( event->relatedTo() ) {
552 addTag("b",i18n("Parent todo:<br>")); 560 addTag("b",i18n("Parent todo:<br>"));
553 561
554 QString t_name = "[" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] ";// +event->relatedTo()->summary()); 562 QString t_name = "[" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] ";// +event->relatedTo()->summary());
555 563
556 mText += t_name; 564 mText += t_name;
557 mText += "<a href=\"todo_uid:" + event->relatedTo()->uid() + "\">"; 565 mText += "<a href=\"todo_uid:" + event->relatedTo()->uid() + "\">";
558 mText += deTag(event->relatedTo()->summary()); 566 mText += deTag(event->relatedTo()->summary());
559 mText += "</a><br>"; 567 mText += "</a><br>";
560 568
561 // mText.append(deTag("[" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] " +event->relatedTo()->summary()) +"<br>"); 569 // mText.append(deTag("[" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] " +event->relatedTo()->summary()) +"<br>");
562 } 570 }
563 QPtrList<Incidence> Relations = event->relations(); 571 QPtrList<Incidence> Relations = event->relations();
564 Incidence *to; 572 Incidence *to;
565 if ( Relations.first() ) 573 if ( Relations.first() )
566 addTag("b",i18n("Sub todos:<br>")); 574 addTag("b",i18n("Sub todos:<br>"));
567 for (to=Relations.first();to;to=Relations.next()) { 575 for (to=Relations.first();to;to=Relations.next()) {
568 QString t_name = "[" +QString::number(((Todo*)to)->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%] ";// +to->relatedTo()->summary()); 576 QString t_name = "[" +QString::number(((Todo*)to)->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%] ";// +to->relatedTo()->summary());
569 mText += t_name; 577 mText += t_name;
570 mText += "<a href=\"todo_uid:" + to->uid() + "\">"; 578 mText += "<a href=\"todo_uid:" + to->uid() + "\">";
571 mText += deTag(to->summary()); 579 mText += deTag(to->summary());
572 mText += "</a><br>"; 580 mText += "</a><br>";
573 581
574 } 582 }
575 583
576 if ( KOPrefs::instance()->mEVshowDetails ) { 584 if ( KOPrefs::instance()->mEVshowDetails ) {
577 if (!event->description().isEmpty()) { 585 if (!event->description().isEmpty()) {
578 addTag("p",i18n("<b>Details: </b>")); 586 addTag("p",i18n("<b>Details: </b>"));
579 addTag("p",deTag(event->description())); 587 addTag("p",deTag(event->description()));
580 } 588 }
581 } 589 }
582 setText(mText); 590 setText(mText);
583} 591}
584 592
585void KOEventViewer::formatCategories(Incidence *event) 593void KOEventViewer::formatCategories(Incidence *event)
586{ 594{
587 if (!event->categoriesStr().isEmpty()) { 595 if (!event->categoriesStr().isEmpty()) {
588 if (event->categories().count() == 1) { 596 if (event->categories().count() == 1) {
589 addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace()); 597 addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace());
590 } else { 598 } else {
591 addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ; 599 addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ;
592 } 600 }
593 } 601 }
594} 602}
595void KOEventViewer::formatAttendees(Incidence *event) 603void KOEventViewer::formatAttendees(Incidence *event)
596{ 604{
597 QPtrList<Attendee> attendees = event->attendees(); 605 QPtrList<Attendee> attendees = event->attendees();
598 if (attendees.count()) { 606 if (attendees.count()) {
599 607
600 608
601 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 609 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
602 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 610 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
603 addTag("h3",i18n("Organizer")); 611 addTag("h3",i18n("Organizer"));
604 mText.append("<ul><li>"); 612 mText.append("<ul><li>");
605#ifndef KORG_NOKABC 613#ifndef KORG_NOKABC
606 614
607#ifdef DESKTOP_VERSION 615#ifdef DESKTOP_VERSION
608 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 616 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
609 KABC::Addressee::List addressList; 617 KABC::Addressee::List addressList;
610 addressList = add_book->findByEmail(event->organizer()); 618 addressList = add_book->findByEmail(event->organizer());
611 KABC::Addressee o = addressList.first(); 619 KABC::Addressee o = addressList.first();
612 if (!o.isEmpty() && addressList.size()<2) { 620 if (!o.isEmpty() && addressList.size()<2) {
613 mText += "<a href=\"uid:" + o.uid() + "\">"; 621 mText += "<a href=\"uid:" + o.uid() + "\">";
614 mText += o.formattedName(); 622 mText += o.formattedName();
615 mText += "</a>\n"; 623 mText += "</a>\n";
616 } else { 624 } else {
617 mText.append(event->organizer()); 625 mText.append(event->organizer());
618 } 626 }
619#else //DESKTOP_VERSION 627#else //DESKTOP_VERSION
620 mText += "<a href=\"uid:organizer\">"; 628 mText += "<a href=\"uid:organizer\">";
621 mText += event->organizer(); 629 mText += event->organizer();
622 mText += "</a>\n"; 630 mText += "</a>\n";
623#endif //DESKTOP_VERSION 631#endif //DESKTOP_VERSION
624 632
625 633
626#else 634#else
627 mText.append(event->organizer()); 635 mText.append(event->organizer());
628#endif 636#endif
629 637
630 if (iconPath) { 638 if (iconPath) {
631 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 639 mText += " <a href=\"mailto:" + event->organizer() + "\">";
632 mText += "<IMG src=\"" + iconPath + "\">"; 640 mText += "<IMG src=\"" + iconPath + "\">";
633 mText += "</a>\n"; 641 mText += "</a>\n";
634 } 642 }
635 mText.append("</li></ul>"); 643 mText.append("</li></ul>");
636 644
637 addTag("h3",i18n("Attendees")); 645 addTag("h3",i18n("Attendees"));
638 Attendee *a; 646 Attendee *a;
639 mText.append("<ul>"); 647 mText.append("<ul>");
640 int a_count = 0; 648 int a_count = 0;
641 int a_count_nr = 0; 649 int a_count_nr = 0;
642 650
643 for(a=attendees.first();a;a=attendees.next()) { 651 for(a=attendees.first();a;a=attendees.next()) {
644#ifndef KORG_NOKABC 652#ifndef KORG_NOKABC
645#ifdef DESKTOP_VERSION 653#ifdef DESKTOP_VERSION
646 if (a->name().isEmpty()) { 654 if (a->name().isEmpty()) {
647 addressList = add_book->findByEmail(a->email()); 655 addressList = add_book->findByEmail(a->email());
648 KABC::Addressee o = addressList.first(); 656 KABC::Addressee o = addressList.first();
649 if (!o.isEmpty() && addressList.size()<2) { 657 if (!o.isEmpty() && addressList.size()<2) {
650 mText += "<a href=\"uid:" + o.uid() + "\">"; 658 mText += "<a href=\"uid:" + o.uid() + "\">";
651 mText += o.formattedName(); 659 mText += o.formattedName();
652 mText += "</a>\n"; 660 mText += "</a>\n";
653 } else { 661 } else {
654 mText += "<li>"; 662 mText += "<li>";
655 mText.append(a->email()); 663 mText.append(a->email());
656 mText += "\n"; 664 mText += "\n";
657 } 665 }
658 } else { 666 } else {
659 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 667 mText += "<li><a href=\"uid:" + a->uid() + "\">";
660 if (!a->name().isEmpty()) mText += a->name(); 668 if (!a->name().isEmpty()) mText += a->name();
661 else mText += a->email(); 669 else mText += a->email();
662 mText += "</a>\n"; 670 mText += "</a>\n";
663 } 671 }
664#else //DESKTOP_VERSION 672#else //DESKTOP_VERSION
665 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 673 mText += "<li><a href=\"uid:" + a->uid() + "\">";
666 if (!a->name().isEmpty()) mText += a->name(); 674 if (!a->name().isEmpty()) mText += a->name();
667 else mText += a->email(); 675 else mText += a->email();
668 mText += "</a>\n"; 676 mText += "</a>\n";
669#endif //DESKTOP_VERSION 677#endif //DESKTOP_VERSION
670#else 678#else
671 //qDebug("nokabc "); 679 //qDebug("nokabc ");
672 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 680 mText += "<li><a href=\"uid:" + a->uid() + "\">";
673 if (!a->name().isEmpty()) mText += a->name(); 681 if (!a->name().isEmpty()) mText += a->name();
674 else mText += a->email(); 682 else mText += a->email();
675 mText += "</a>\n"; 683 mText += "</a>\n";
676#endif 684#endif
677 685
678 686
679 if (!a->email().isEmpty()) { 687 if (!a->email().isEmpty()) {
680 if (iconPath) { 688 if (iconPath) {
681 mText += "<a href=\"mailto:" + a->realName() +" <" + a->email() + ">:" + mMailSubject + "\">"; 689 mText += "<a href=\"mailto:" + a->realName() +" <" + a->email() + ">:" + mMailSubject + "\">";
682 if ( a->RSVP() ) { 690 if ( a->RSVP() ) {
683 ++a_count_nr; 691 ++a_count_nr;
684 mText += "<IMG src=\"" + iconPath + "\">"; 692 mText += "<IMG src=\"" + iconPath + "\">";
685 } 693 }
686 else { 694 else {
687 ++a_count; 695 ++a_count;
688 mText += "<IMG src=\"" + NOiconPath + "\">"; 696 mText += "<IMG src=\"" + NOiconPath + "\">";
689 } 697 }
690 mText += "</a>\n"; 698 mText += "</a>\n";
691 } 699 }
692 } 700 }
693 if (a->status() != Attendee::NeedsAction ) 701 if (a->status() != Attendee::NeedsAction )
694 mText +="[" + a->statusStr() + "] "; 702 mText +="[" + a->statusStr() + "] ";
695 if (a->role() == Attendee::Chair ) 703 if (a->role() == Attendee::Chair )
696 mText +="(" + a->roleStr().left(1) + ".)"; 704 mText +="(" + a->roleStr().left(1) + ".)";
697 } 705 }
698 mText.append("</li></ul>"); 706 mText.append("</li></ul>");
699 if ( (a_count+a_count_nr) > 1 ) { 707 if ( (a_count+a_count_nr) > 1 ) {
700 mText += "<a href=\"mailto:ALL\">"; 708 mText += "<a href=\"mailto:ALL\">";
701 mText += i18n( "Mail to all" ); 709 mText += i18n( "Mail to all" );
702 mText += "</a> ( "; 710 mText += "</a> ( ";
703 mText += "<IMG src=\"" + iconPath + "\">"; 711 mText += "<IMG src=\"" + iconPath + "\">";
704 mText += i18n( " and " ); 712 mText += i18n( " and " );
705 mText += "<IMG src=\"" + NOiconPath + "\"> )"; 713 mText += "<IMG src=\"" + NOiconPath + "\"> )";
706 mText += "<br>\n"; 714 mText += "<br>\n";
707 715
708 716
709 } 717 }
710 if ( a_count_nr > 1 ) { 718 if ( a_count_nr > 1 ) {
711 mText += "<a href=\"mailto:RSVP\">"; 719 mText += "<a href=\"mailto:RSVP\">";
712 mText += i18n( "Mail to selected" ); 720 mText += i18n( "Mail to selected" );
713 mText += "</a> ( "; 721 mText += "</a> ( ";
714 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); 722 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
715 mText += "<br>\n"; 723 mText += "<br>\n";
diff --git a/korganizer/koincidenceeditor.cpp b/korganizer/koincidenceeditor.cpp
index 9bc0302..236f6f9 100644
--- a/korganizer/koincidenceeditor.cpp
+++ b/korganizer/koincidenceeditor.cpp
@@ -1,185 +1,190 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qframe.h> 25#include <qframe.h>
26#include <qpixmap.h> 26#include <qpixmap.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qwidgetstack.h> 28#include <qwidgetstack.h>
29#include <qdatetime.h> 29#include <qdatetime.h>
30#include <qdir.h> 30#include <qdir.h>
31 31
32#include <kdebug.h> 32#include <kdebug.h>
33#include <klocale.h> 33#include <klocale.h>
34#include <kstandarddirs.h> 34#include <kstandarddirs.h>
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36#include <kfiledialog.h> 36#include <kfiledialog.h>
37 37
38#include <libkdepim/categoryselectdialog.h> 38#include <libkdepim/categoryselectdialog.h>
39#include <libkdepim/kinputdialog.h> 39#include <libkdepim/kinputdialog.h>
40 40
41#include <libkcal/calendarlocal.h> 41#include <libkcal/calendarlocal.h>
42#include <libkcal/icalformat.h> 42#include <libkcal/icalformat.h>
43 43
44#include "koprefs.h" 44#include "koprefs.h"
45 45
46#include "koincidenceeditor.h" 46#include "koincidenceeditor.h"
47 47
48KOIncidenceEditor::KOIncidenceEditor( const QString &caption, 48KOIncidenceEditor::KOIncidenceEditor( const QString &caption,
49 Calendar *calendar, QWidget *parent ) : 49 Calendar *calendar, QWidget *parent ) :
50 KDialogBase( Tabbed, caption, Ok | Apply | Cancel |/* Default | */User1, Ok, 50 KDialogBase( Tabbed, caption, Ok | Apply | Cancel |/* Default | */User1, Ok,
51 parent, caption, true, false ), 51 parent, caption, true, false ),
52 mSaveTemplateDialog( 0 ) 52 mSaveTemplateDialog( 0 )
53{ 53{
54 mCalendar = calendar; 54 mCalendar = calendar;
55 55
56 setButtonText( Default, i18n("Template...") ); 56 setButtonText( Default, i18n("Template...") );
57 57
58 QString saveTemplateText; 58 QString saveTemplateText;
59 // if ( KOPrefs::instance()->mCompactDialogs ) { 59 // if ( KOPrefs::instance()->mCompactDialogs ) {
60// showButton( User1, false ); 60// showButton( User1, false );
61// showButton( Apply, false ); 61// showButton( Apply, false );
62// } else { 62// } else {
63 showButton( Apply, false ); 63 showButton( Apply, false );
64 saveTemplateText = i18n("Ok+Agenda"); 64 saveTemplateText = i18n("Ok+Agenda");
65 // } 65 // }
66 setButtonText( User1, saveTemplateText ); 66 setButtonText( User1, saveTemplateText );
67 67
68 //mCategoryDialog = new KPIM::CategorySelectDialog( KOPrefs::instance(), this ); 68 //mCategoryDialog = new KPIM::CategorySelectDialog( KOPrefs::instance(), this );
69 // KOGlobals::fitDialogToScreen( mCategoryDialog ); 69 // KOGlobals::fitDialogToScreen( mCategoryDialog );
70 70
71 //connect(mCategoryDialog,SIGNAL(editCategories()),SIGNAL(editCategories())); 71 //connect(mCategoryDialog,SIGNAL(editCategories()),SIGNAL(editCategories()));
72 72
73 //connect( this, SIGNAL( defaultClicked() ), SLOT( slotLoadTemplate() ) ); 73 //connect( this, SIGNAL( defaultClicked() ), SLOT( slotLoadTemplate() ) );
74 // connect( this, SIGNAL( user1Clicked() ), SLOT( slotSaveTemplate() ) ); 74 // connect( this, SIGNAL( user1Clicked() ), SLOT( slotSaveTemplate() ) );
75 connect( this, SIGNAL( user1Clicked() ), SLOT( slotShowIncidence() ) ); 75 connect( this, SIGNAL( user1Clicked() ), SLOT( slotShowIncidence() ) );
76} 76}
77 77
78KOIncidenceEditor::~KOIncidenceEditor() 78KOIncidenceEditor::~KOIncidenceEditor()
79{ 79{
80 //delete mCategoryDialog; 80 //delete mCategoryDialog;
81} 81}
82 82
83void KOIncidenceEditor::setupAttendeesTab() 83void KOIncidenceEditor::setupAttendeesTab()
84{ 84{
85 QFrame *topFrame = addPage(i18n("Attendees")); 85 QFrame *topFrame = addPage(i18n("Attendees"));
86 86
87 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 87 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
88 88
89 mDetails = new KOEditorDetails(spacingHint()-2,topFrame); 89 mDetails = new KOEditorDetails(spacingHint()-2,topFrame);
90 topLayout->addWidget(mDetails); 90 topLayout->addWidget(mDetails);
91} 91}
92 92
93void KOIncidenceEditor::alarmWarning()
94{
95 KMessageBox::information( 0, i18n("The alarm for this calendar\nis currently disabled!\nEnable it in resource settings."), i18n("Alarm disabled warning"));
96
97}
93 98
94void KOIncidenceEditor::slotApply() 99void KOIncidenceEditor::slotApply()
95{ 100{
96 processInput( false ); 101 processInput( false );
97} 102}
98void KOIncidenceEditor::accept() 103void KOIncidenceEditor::accept()
99{ 104{
100 slotOk(); 105 slotOk();
101} 106}
102void KOIncidenceEditor::slotOk() 107void KOIncidenceEditor::slotOk()
103{ 108{
104 if ( processInput( false ) ) QDialog::accept(); 109 if ( processInput( false ) ) QDialog::accept();
105} 110}
106 111
107void KOIncidenceEditor::updateCategoryConfig() 112void KOIncidenceEditor::updateCategoryConfig()
108{ 113{
109 qDebug("KOIncidenceEditor::updateCategoryConfig() is dead! "); 114 qDebug("KOIncidenceEditor::updateCategoryConfig() is dead! ");
110 //mCategoryDialog->updateCategoryConfig(); 115 //mCategoryDialog->updateCategoryConfig();
111} 116}
112 117
113void KOIncidenceEditor::slotCancel() 118void KOIncidenceEditor::slotCancel()
114{ 119{
115 reject(); 120 reject();
116} 121}
117 122
118void KOIncidenceEditor::slotLoadTemplate() 123void KOIncidenceEditor::slotLoadTemplate()
119{ 124{
120 kdDebug() << "KOIncidenceEditor::loadTemplate()" << endl; 125 kdDebug() << "KOIncidenceEditor::loadTemplate()" << endl;
121} 126}
122void KOIncidenceEditor::slotShowIncidence() 127void KOIncidenceEditor::slotShowIncidence()
123{ 128{
124 129
125 if ( processInput(true ) ) { 130 if ( processInput(true ) ) {
126 accept(); 131 accept();
127 } 132 }
128} 133}
129 134
130void KOIncidenceEditor::slotSaveTemplate() 135void KOIncidenceEditor::slotSaveTemplate()
131{ 136{
132 kdDebug() << "KOIncidenceEditor::saveTemplate()" << endl; 137 kdDebug() << "KOIncidenceEditor::saveTemplate()" << endl;
133} 138}
134 139
135void KOIncidenceEditor::createSaveTemplateDialog( SaveTemplateDialog::IncidenceType type ) 140void KOIncidenceEditor::createSaveTemplateDialog( SaveTemplateDialog::IncidenceType type )
136{ 141{
137 if ( !mSaveTemplateDialog ) { 142 if ( !mSaveTemplateDialog ) {
138 mSaveTemplateDialog = new SaveTemplateDialog( type, this ); 143 mSaveTemplateDialog = new SaveTemplateDialog( type, this );
139 connect( mSaveTemplateDialog, SIGNAL( templateSelected( const QString & ) ), 144 connect( mSaveTemplateDialog, SIGNAL( templateSelected( const QString & ) ),
140 SLOT( saveTemplate( const QString & ) ) ); 145 SLOT( saveTemplate( const QString & ) ) );
141 } 146 }
142 mSaveTemplateDialog->show(); 147 mSaveTemplateDialog->show();
143 mSaveTemplateDialog->raise(); 148 mSaveTemplateDialog->raise();
144} 149}
145 150
146void KOIncidenceEditor::saveAsTemplate( Incidence *incidence, 151void KOIncidenceEditor::saveAsTemplate( Incidence *incidence,
147 const QString &templateName ) 152 const QString &templateName )
148{ 153{
149 CalendarLocal cal; 154 CalendarLocal cal;
150 cal.addIncidence( incidence ); 155 cal.addIncidence( incidence );
151 ICalFormat format; 156 ICalFormat format;
152 format.save( &cal, templateName ); 157 format.save( &cal, templateName );
153} 158}
154 159
155QString KOIncidenceEditor::loadTemplate( Calendar *cal, const QString &type, 160QString KOIncidenceEditor::loadTemplate( Calendar *cal, const QString &type,
156 const QStringList &templates ) 161 const QStringList &templates )
157{ 162{
158 // bool ok = false; 163 // bool ok = false;
159// QString templateName = KInputDialog::getItem( i18n("Load Template"), 164// QString templateName = KInputDialog::getItem( i18n("Load Template"),
160// i18n("Select a template to load:"), templates, 0, &ok ); 165// i18n("Select a template to load:"), templates, 0, &ok );
161// if ( !ok || templateName.isEmpty() ) return QString::null; 166// if ( !ok || templateName.isEmpty() ) return QString::null;
162 167
163// QString fileName = locateLocal( "data", "korganizer/templates/" + type + "/" + 168// QString fileName = locateLocal( "data", "korganizer/templates/" + type + "/" +
164// templateName ); 169// templateName );
165// fn =KFileDialog:: getOpenFileName( fn, "Import filename(*.ics/*.vcs)", this ); 170// fn =KFileDialog:: getOpenFileName( fn, "Import filename(*.ics/*.vcs)", this );
166 171
167 // QString fileName;// =locateLocal( "templates", incidence->type() ); 172 // QString fileName;// =locateLocal( "templates", incidence->type() );
168// fileName=KFileDialog:: getOpenFileName( fileName, "Load "+incidence()->type(), this ); 173// fileName=KFileDialog:: getOpenFileName( fileName, "Load "+incidence()->type(), this );
169// if ( fileNamelength() == 0) 174// if ( fileNamelength() == 0)
170// return QString::null; 175// return QString::null;
171// if ( fileName.isEmpty() ) { 176// if ( fileName.isEmpty() ) {
172// KMessageBox::error( this, i18n("Unable to find template '%1'.") 177// KMessageBox::error( this, i18n("Unable to find template '%1'.")
173// .arg( fileName ) ); 178// .arg( fileName ) );
174// return QString::null; 179// return QString::null;
175// } else { 180// } else {
176// ICalFormat format; 181// ICalFormat format;
177// if ( !format.load( cal, fileName ) ) { 182// if ( !format.load( cal, fileName ) ) {
178// KMessageBox::error( this, i18n("Error loading template file '%1'.") 183// KMessageBox::error( this, i18n("Error loading template file '%1'.")
179// .arg( fileName ) ); 184// .arg( fileName ) );
180// return QString::null; 185// return QString::null;
181// } 186// }
182// } 187// }
183 188
184 return ""; 189 return "";
185} 190}
diff --git a/korganizer/koincidenceeditor.h b/korganizer/koincidenceeditor.h
index bfd6cc6..2e4bbf8 100644
--- a/korganizer/koincidenceeditor.h
+++ b/korganizer/koincidenceeditor.h
@@ -1,105 +1,106 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOINCIDENCEEDITOR_H 23#ifndef KOINCIDENCEEDITOR_H
24#define KOINCIDENCEEDITOR_H 24#define KOINCIDENCEEDITOR_H
25 25
26#include <kdialogbase.h> 26#include <kdialogbase.h>
27 27
28#include <libkcal/calendar.h> 28#include <libkcal/calendar.h>
29 29
30#include "koeditordetails.h" 30#include "koeditordetails.h"
31#include "savetemplatedialog.h" 31#include "savetemplatedialog.h"
32 32
33class QDateTime; 33class QDateTime;
34namespace KPIM { class CategorySelectDialog; } 34namespace KPIM { class CategorySelectDialog; }
35 35
36using namespace KCal; 36using namespace KCal;
37 37
38/** 38/**
39 This is the base class for the calendar component editors. 39 This is the base class for the calendar component editors.
40*/ 40*/
41class KOIncidenceEditor : public KDialogBase 41class KOIncidenceEditor : public KDialogBase
42{ 42{
43 Q_OBJECT 43 Q_OBJECT
44 public: 44 public:
45 /** 45 /**
46 Construct new IncidenceEditor. 46 Construct new IncidenceEditor.
47 */ 47 */
48 KOIncidenceEditor( const QString &caption, Calendar *calendar, 48 KOIncidenceEditor( const QString &caption, Calendar *calendar,
49 QWidget *parent ); 49 QWidget *parent );
50 virtual ~KOIncidenceEditor(); 50 virtual ~KOIncidenceEditor();
51 51
52 /** Initialize editor. This function creates the tab widgets. */ 52 /** Initialize editor. This function creates the tab widgets. */
53 virtual void init() = 0; 53 virtual void init() = 0;
54 void accept(); 54 void accept();
55 virtual void setCategories( QString )= 0; 55 virtual void setCategories( QString )= 0;
56 56
57 virtual void reload() = 0; 57 virtual void reload() = 0;
58 58
59 public slots: 59 public slots:
60 void updateCategoryConfig(); 60 void updateCategoryConfig();
61 61
62 signals: 62 signals:
63 void editCategories(); 63 void editCategories();
64 void showAgendaView( bool ); 64 void showAgendaView( bool );
65 void dialogClose( Incidence * ); 65 void dialogClose( Incidence * );
66 void jumpToTime( const QDate & ); 66 void jumpToTime( const QDate & );
67 67
68 protected slots: 68 protected slots:
69 void alarmWarning();
69 void slotApply(); 70 void slotApply();
70 void slotOk(); 71 void slotOk();
71 void slotCancel(); 72 void slotCancel();
72 void slotShowIncidence(); 73 void slotShowIncidence();
73 74
74 virtual void slotLoadTemplate(); 75 virtual void slotLoadTemplate();
75 virtual void slotSaveTemplate(); 76 virtual void slotSaveTemplate();
76 77
77 virtual void saveTemplate( const QString & ) = 0; 78 virtual void saveTemplate( const QString & ) = 0;
78 79
79 protected: 80 protected:
80 void setupAttendeesTab(); 81 void setupAttendeesTab();
81 82
82 void createSaveTemplateDialog( SaveTemplateDialog::IncidenceType ); 83 void createSaveTemplateDialog( SaveTemplateDialog::IncidenceType );
83 84
84 QString loadTemplate( Calendar *cal, const QString &type, 85 QString loadTemplate( Calendar *cal, const QString &type,
85 const QStringList &templates ); 86 const QStringList &templates );
86 void saveAsTemplate( Incidence *, const QString &name ); 87 void saveAsTemplate( Incidence *, const QString &name );
87 88
88 /** 89 /**
89 Process user input and create or update event. Returns false if input is invalid. 90 Process user input and create or update event. Returns false if input is invalid.
90 */ 91 */
91 virtual bool processInput( bool emitTime ) { return false; } 92 virtual bool processInput( bool emitTime ) { return false; }
92 93
93 Calendar *mCalendar; 94 Calendar *mCalendar;
94 95
95 //KPIM::CategorySelectDialog *mCategoryDialog; 96 //KPIM::CategorySelectDialog *mCategoryDialog;
96 97
97 KOEditorDetails *mDetails; 98 KOEditorDetails *mDetails;
98 99
99 private: 100 private:
100 SaveTemplateDialog *mSaveTemplateDialog; 101 SaveTemplateDialog *mSaveTemplateDialog;
101}; 102};
102 103
103#endif 104#endif
104 105
105 106
diff --git a/korganizer/kotodoeditor.cpp b/korganizer/kotodoeditor.cpp
index 682f83b..20a35d2 100644
--- a/korganizer/kotodoeditor.cpp
+++ b/korganizer/kotodoeditor.cpp
@@ -1,453 +1,457 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1997, 1998 Preston Brown 3 Copyright (c) 1997, 1998 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qtooltip.h> 25#include <qtooltip.h>
26#include <qframe.h> 26#include <qframe.h>
27#include <qpixmap.h> 27#include <qpixmap.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qhbox.h> 29#include <qhbox.h>
30#include <qtimer.h>
30#include <qdir.h> 31#include <qdir.h>
31#include <qdatetime.h> 32#include <qdatetime.h>
32#include <qapplication.h> 33#include <qapplication.h>
33#include <qtabwidget.h> 34#include <qtabwidget.h>
34 35
35#include <kiconloader.h> 36#include <kiconloader.h>
36#include <klocale.h> 37#include <klocale.h>
37#include <kfiledialog.h> 38#include <kfiledialog.h>
38#include <kstandarddirs.h> 39#include <kstandarddirs.h>
39#include <kmessagebox.h> 40#include <kmessagebox.h>
40 41
41#include <libkdepim/categoryselectdialog.h> 42#include <libkdepim/categoryselectdialog.h>
42#include <libkcal/calendarlocal.h> 43#include <libkcal/calendarlocal.h>
43#include <libkcal/calendarresources.h> 44#include <libkcal/calendarresources.h>
44#include <libkcal/resourcecalendar.h> 45#include <libkcal/resourcecalendar.h>
45#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
46#include <kresources/resourceselectdialog.h> 47#include <kresources/resourceselectdialog.h>
47#include <libkdepim/kdateedit.h> 48#include <libkdepim/kdateedit.h>
48 49
49#include "koprefs.h" 50#include "koprefs.h"
50#include "kolocationbox.h" 51#include "kolocationbox.h"
51 52
52#include "kotodoeditor.h" 53#include "kotodoeditor.h"
53extern int globalFlagBlockAgenda; 54extern int globalFlagBlockAgenda;
54 55
55KOTodoEditor::KOTodoEditor( Calendar *calendar, QWidget *parent ) : 56KOTodoEditor::KOTodoEditor( Calendar *calendar, QWidget *parent ) :
56 KOIncidenceEditor( i18n("Edit To-Do"), calendar, parent ) 57 KOIncidenceEditor( i18n("Edit To-Do"), calendar, parent )
57{ 58{
58 mTodo = 0; 59 mTodo = 0;
59 mRelatedTodo = 0; 60 mRelatedTodo = 0;
60 findButton(User1)->hide(); 61 findButton(User1)->hide();
61 init(); 62 init();
62 if ( QApplication::desktop()->height() <= 240 ) 63 if ( QApplication::desktop()->height() <= 240 )
63 hideButtons(); 64 hideButtons();
64} 65}
65 66
66KOTodoEditor::~KOTodoEditor() 67KOTodoEditor::~KOTodoEditor()
67{ 68{
68 emit dialogClose( mTodo ); 69 emit dialogClose( mTodo );
69} 70}
70 71
71void KOTodoEditor::init() 72void KOTodoEditor::init()
72{ 73{
73 setupGeneral(); 74 setupGeneral();
74 setupAttendeesTab(); 75 setupAttendeesTab();
75 setupRecurrence(); 76 setupRecurrence();
76 connect(mGeneral,SIGNAL(datesChecked()),this ,SLOT(checkRecurrence())); 77 connect(mGeneral,SIGNAL(datesChecked()),this ,SLOT(checkRecurrence()));
77 mRecurrence->setDateTimeStr( i18n("<i>The recurrence is computed from the start datetime!</i>") ); 78 mRecurrence->setDateTimeStr( i18n("<i>The recurrence is computed from the start datetime!</i>") );
78 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)), 79 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)),
79 mRecurrence,SLOT(setDefaultsDates(QDateTime,QDateTime))); 80 mRecurrence,SLOT(setDefaultsDates(QDateTime,QDateTime)));
80} 81}
81void KOTodoEditor::setupRecurrence() 82void KOTodoEditor::setupRecurrence()
82{ 83{
83 QFrame *topFrame = addPage( i18n("Recurrence") ); 84 QFrame *topFrame = addPage( i18n("Recurrence") );
84 QBoxLayout *topLayout = new QVBoxLayout( topFrame ); 85 QBoxLayout *topLayout = new QVBoxLayout( topFrame );
85 86
86 mRecurrence = new KOEditorRecurrence( topFrame ); 87 mRecurrence = new KOEditorRecurrence( topFrame );
87 topLayout->addWidget( mRecurrence ); 88 topLayout->addWidget( mRecurrence );
88} 89}
89 90
90void KOTodoEditor::setCategories( QString s ) 91void KOTodoEditor::setCategories( QString s )
91{ 92{
92 mGeneral->setCategories(s); 93 mGeneral->setCategories(s);
93} 94}
94void KOTodoEditor::setSecrecy( int sec ) 95void KOTodoEditor::setSecrecy( int sec )
95{ 96{
96 mGeneral->setSecrecy( sec ); 97 mGeneral->setSecrecy( sec );
97} 98}
98void KOTodoEditor::reload() 99void KOTodoEditor::reload()
99{ 100{
100 if ( mTodo ) readTodo( mTodo ); 101 if ( mTodo ) readTodo( mTodo );
101} 102}
102 103
103void KOTodoEditor::setupGeneral() 104void KOTodoEditor::setupGeneral()
104{ 105{
105 mGeneral = new KOEditorGeneralTodo(this); 106 mGeneral = new KOEditorGeneralTodo(this);
106 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) ); 107 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) );
107 108
108 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show())); 109 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show()));
109 //connect(mCategoryDialog, SIGNAL(categoriesSelected(const QString &)), 110 //connect(mCategoryDialog, SIGNAL(categoriesSelected(const QString &)),
110 // mGeneral,SLOT(setCategories(const QString &))); 111 // mGeneral,SLOT(setCategories(const QString &)));
111 112
112 if (KOPrefs::instance()->mCompactDialogs) { 113 if (KOPrefs::instance()->mCompactDialogs) {
113 QFrame *topFrame = addPage(i18n("General")); 114 QFrame *topFrame = addPage(i18n("General"));
114 115
115 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 116 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
116 if ( QApplication::desktop()->width() < 480 ) { 117 if ( QApplication::desktop()->width() < 480 ) {
117 topLayout->setMargin(marginHintSmall()); 118 topLayout->setMargin(marginHintSmall());
118 topLayout->setSpacing(spacingHintSmall()); 119 topLayout->setSpacing(spacingHintSmall());
119 } else { 120 } else {
120 topLayout->setMargin(marginHint()); 121 topLayout->setMargin(marginHint());
121 topLayout->setSpacing(spacingHint()); 122 topLayout->setSpacing(spacingHint());
122 } 123 }
123 topLayout->addStretch( 1 ); 124 topLayout->addStretch( 1 );
124 mGeneral->initHeader(topFrame,topLayout); 125 mGeneral->initHeader(topFrame,topLayout);
125 topLayout->addStretch( 1 ); 126 topLayout->addStretch( 1 );
126 mGeneral->initTime(topFrame,topLayout); 127 mGeneral->initTime(topFrame,topLayout);
127 topLayout->addStretch( 1 ); 128 topLayout->addStretch( 1 );
128 mGeneral->initAlarm(topFrame,topLayout); 129 mGeneral->initAlarm(topFrame,topLayout);
129 topLayout->addStretch( 1 ); 130 topLayout->addStretch( 1 );
130 mGeneral->enableAlarm( false ); 131 mGeneral->enableAlarm( false );
131 132
132 133
133 QBoxLayout *priorityLayout; 134 QBoxLayout *priorityLayout;
134 if ( QApplication::desktop()->width() < 500 ) 135 if ( QApplication::desktop()->width() < 500 )
135 priorityLayout = new QVBoxLayout( topLayout ); 136 priorityLayout = new QVBoxLayout( topLayout );
136 else 137 else
137 priorityLayout = new QHBoxLayout( topLayout ); 138 priorityLayout = new QHBoxLayout( topLayout );
138 QWidget* prioWidget = new QWidget (topFrame); 139 QWidget* prioWidget = new QWidget (topFrame);
139 priorityLayout->addWidget( prioWidget ); 140 priorityLayout->addWidget( prioWidget );
140 QHBoxLayout* priorityLayout2 = new QHBoxLayout( prioWidget); 141 QHBoxLayout* priorityLayout2 = new QHBoxLayout( prioWidget);
141 142
142 143
143 QIconSet icon; 144 QIconSet icon;
144 if ( QApplication::desktop()->width() < 321 ) 145 if ( QApplication::desktop()->width() < 321 )
145 icon = SmallIcon("fileimport16"); 146 icon = SmallIcon("fileimport16");
146 else 147 else
147 icon = SmallIcon("fileimport"); 148 icon = SmallIcon("fileimport");
148 QPushButton * loadTemplate = new QPushButton( prioWidget); 149 QPushButton * loadTemplate = new QPushButton( prioWidget);
149 loadTemplate->setIconSet (icon ) ; 150 loadTemplate->setIconSet (icon ) ;
150 int size = loadTemplate->sizeHint().height(); 151 int size = loadTemplate->sizeHint().height();
151 loadTemplate->setFixedSize( size, size ); 152 loadTemplate->setFixedSize( size, size );
152 if ( QApplication::desktop()->width() < 321 ) 153 if ( QApplication::desktop()->width() < 321 )
153 icon = SmallIcon("fileexport16"); 154 icon = SmallIcon("fileexport16");
154 else 155 else
155 icon = SmallIcon("fileexport"); 156 icon = SmallIcon("fileexport");
156 QPushButton * saveTemplate = new QPushButton( prioWidget); 157 QPushButton * saveTemplate = new QPushButton( prioWidget);
157 saveTemplate->setIconSet (icon ) ; 158 saveTemplate->setIconSet (icon ) ;
158 saveTemplate->setFixedSize( size, size ); 159 saveTemplate->setFixedSize( size, size );
159 160
160 priorityLayout2->addWidget(loadTemplate); 161 priorityLayout2->addWidget(loadTemplate);
161 priorityLayout2->addWidget(saveTemplate); 162 priorityLayout2->addWidget(saveTemplate);
162 mGeneral->initPriority(prioWidget,priorityLayout2); 163 mGeneral->initPriority(prioWidget,priorityLayout2);
163 mGeneral->initCategories( topFrame, priorityLayout ); 164 mGeneral->initCategories( topFrame, priorityLayout );
164 topLayout->addStretch(1); 165 topLayout->addStretch(1);
165 166
166 QFrame *topFrame2 = addPage(i18n("Details")); 167 QFrame *topFrame2 = addPage(i18n("Details"));
167 168
168 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2); 169 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2);
169 topLayout2->setMargin(marginHint()); 170 topLayout2->setMargin(marginHint());
170 topLayout2->setSpacing(spacingHint()); 171 topLayout2->setSpacing(spacingHint());
171 172
172 QHBoxLayout *completionLayout = new QHBoxLayout( topLayout2 ); 173 QHBoxLayout *completionLayout = new QHBoxLayout( topLayout2 );
173 mGeneral->initCompletion(topFrame2,completionLayout); 174 mGeneral->initCompletion(topFrame2,completionLayout);
174 175
175 176
176 mGeneral->initSecrecy( topFrame2, topLayout2 ); 177 mGeneral->initSecrecy( topFrame2, topLayout2 );
177 mGeneral->initDescription(topFrame2,topLayout2); 178 mGeneral->initDescription(topFrame2,topLayout2);
178 179
179 // QHBox * hb = new QHBox ( topFrame2 ); 180 // QHBox * hb = new QHBox ( topFrame2 );
180 // topLayout2->addWidget(hb); 181 // topLayout2->addWidget(hb);
181 // hb->setSpacing( 3 ); 182 // hb->setSpacing( 3 );
182 183
183 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 184 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
184 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 185 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
185 186
186 } else { 187 } else {
187 QFrame *topFrame = addPage(i18n("General")); 188 QFrame *topFrame = addPage(i18n("General"));
188 189
189 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 190 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
190 topLayout->setSpacing(spacingHint()); 191 topLayout->setSpacing(spacingHint());
191 192
192 mGeneral->initHeader(topFrame,topLayout); 193 mGeneral->initHeader(topFrame,topLayout);
193 mGeneral->initTime(topFrame,topLayout); 194 mGeneral->initTime(topFrame,topLayout);
194 mGeneral->initStatus(topFrame,topLayout); 195 mGeneral->initStatus(topFrame,topLayout);
195 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 196 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
196 mGeneral->initAlarm(topFrame,alarmLineLayout); 197 mGeneral->initAlarm(topFrame,alarmLineLayout);
197 mGeneral->initDescription(topFrame,topLayout); 198 mGeneral->initDescription(topFrame,topLayout);
198 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout); 199 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout);
199 mGeneral->initCategories( topFrame, detailsLayout ); 200 mGeneral->initCategories( topFrame, detailsLayout );
200 mGeneral->initSecrecy( topFrame, detailsLayout ); 201 mGeneral->initSecrecy( topFrame, detailsLayout );
201 } 202 }
202 mGeneral->finishSetup(); 203 mGeneral->finishSetup();
203 204
204} 205}
205 206
206void KOTodoEditor::editTodo(Todo *todo, bool editDescription) 207void KOTodoEditor::editTodo(Todo *todo, bool editDescription)
207{ 208{
208 //init(); 209 //init();
209 210
210 mTodo = todo; 211 mTodo = todo;
211 readTodo(mTodo); 212 readTodo(mTodo);
212 if ( editDescription ) { 213 if ( editDescription ) {
213 showPage( 1 ); 214 showPage( 1 );
214 mGeneral->setFocusOn( 1 ); 215 mGeneral->setFocusOn( 1 );
215 } else { 216 } else {
216 showPage( 0 ); 217 showPage( 0 );
217 mGeneral->setFocusOn( 2 ); 218 mGeneral->setFocusOn( 2 );
218 } 219 }
219 checkRecurrence(); 220 checkRecurrence();
220} 221}
221 222
222void KOTodoEditor::newTodo(QDateTime due,Todo *relatedTodo,bool allDay) 223void KOTodoEditor::newTodo(QDateTime due,Todo *relatedTodo,bool allDay)
223{ 224{
224 //init(); 225 //init();
225 226
226 mTodo = 0; 227 mTodo = 0;
227 setDefaults(due,relatedTodo,allDay); 228 setDefaults(due,relatedTodo,allDay);
228} 229}
229 230
230void KOTodoEditor::loadDefaults() 231void KOTodoEditor::loadDefaults()
231{ 232{
232 setDefaults(QDateTime::currentDateTime().addDays(7),0,false); 233 setDefaults(QDateTime::currentDateTime().addDays(7),0,false);
233} 234}
234 235
235bool KOTodoEditor::processInput( bool emitTime ) 236bool KOTodoEditor::processInput( bool emitTime )
236{ 237{
237 if (!validateInput()) return false; 238 if (!validateInput()) return false;
238 239
239 Todo *todo = 0; 240 Todo *todo = 0;
240 241
241 if (mTodo) todo = mTodo; 242 if (mTodo) todo = mTodo;
242 else { 243 else {
243 todo = new Todo; 244 todo = new Todo;
244 todo->setOrganizer(KOPrefs::instance()->email()); 245 todo->setOrganizer(KOPrefs::instance()->email());
245 } 246 }
246 247
247 writeTodo(todo); 248 writeTodo(todo);
248 if ( emitTime ) { 249 if ( emitTime ) {
249 globalFlagBlockAgenda = 1; 250 globalFlagBlockAgenda = 1;
250 emit showAgendaView( false ); 251 emit showAgendaView( false );
251 if ( todo->hasDueDate() ) 252 if ( todo->hasDueDate() )
252 emit jumpToTime( todo->dtDue().date() ); 253 emit jumpToTime( todo->dtDue().date() );
253 globalFlagBlockAgenda = 2; 254 globalFlagBlockAgenda = 2;
254 } 255 }
255 if (mTodo) { 256 if (mTodo) {
256 todo->setRevision(todo->revision()+1); 257 todo->setRevision(todo->revision()+1);
257 emit todoChanged(todo); 258 emit todoChanged(todo);
258 } else { 259 } else {
259 mCalendar->addTodo(todo); 260 mCalendar->addTodo(todo);
260 mTodo = todo; 261 mTodo = todo;
261 emit todoAdded(todo); 262 emit todoAdded(todo);
263 if ( todo->isAlarmEnabled () && !todo->alarmEnabled () ) {
264 QTimer::singleShot( 0, this, SLOT ( alarmWarning() ) );
265 }
262 } 266 }
263 267
264 return true; 268 return true;
265} 269}
266 270
267void KOTodoEditor::deleteTodo() 271void KOTodoEditor::deleteTodo()
268{ 272{
269 if (mTodo) { 273 if (mTodo) {
270 if (KOPrefs::instance()->mConfirm) { 274 if (KOPrefs::instance()->mConfirm) {
271 switch (msgItemDelete()) { 275 switch (msgItemDelete()) {
272 case KMessageBox::Continue: // OK 276 case KMessageBox::Continue: // OK
273 emit todoToBeDeleted(mTodo); 277 emit todoToBeDeleted(mTodo);
274 emit dialogClose(mTodo); 278 emit dialogClose(mTodo);
275 mCalendar->deleteTodo(mTodo); 279 mCalendar->deleteTodo(mTodo);
276 emit todoDeleted(); 280 emit todoDeleted();
277 reject(); 281 reject();
278 break; 282 break;
279 } 283 }
280 } 284 }
281 else { 285 else {
282 emit todoToBeDeleted(mTodo); 286 emit todoToBeDeleted(mTodo);
283 emit dialogClose(mTodo); 287 emit dialogClose(mTodo);
284 mCalendar->deleteTodo(mTodo); 288 mCalendar->deleteTodo(mTodo);
285 emit todoDeleted(); 289 emit todoDeleted();
286 reject(); 290 reject();
287 } 291 }
288 } else { 292 } else {
289 reject(); 293 reject();
290 } 294 }
291} 295}
292 296
293void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay) 297void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay)
294{ 298{
295 mRelatedTodo = relatedEvent; 299 mRelatedTodo = relatedEvent;
296 300
297 mGeneral->setDefaults(due,allDay); 301 mGeneral->setDefaults(due,allDay);
298 mDetails->setDefaults(); 302 mDetails->setDefaults();
299 showPage( 0 ); 303 showPage( 0 );
300 if ( mRelatedTodo ) { 304 if ( mRelatedTodo ) {
301 mGeneral->fillCalCombo(mRelatedTodo->calID() ); 305 mGeneral->fillCalCombo(mRelatedTodo->calID() );
302 mGeneral->setCategories (mRelatedTodo->categoriesStr ()); 306 mGeneral->setCategories (mRelatedTodo->categoriesStr ());
303 mGeneral->setSecrecy (mRelatedTodo->secrecy ()); 307 mGeneral->setSecrecy (mRelatedTodo->secrecy ());
304 if ( mRelatedTodo->priority() < 3 ) 308 if ( mRelatedTodo->priority() < 3 )
305 mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1); 309 mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1);
306 mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": "); 310 mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": ");
307 int len = mRelatedTodo->summary().length(); 311 int len = mRelatedTodo->summary().length();
308 mGeneral->mSummaryEdit->lineEdit()->setFocus(); 312 mGeneral->mSummaryEdit->lineEdit()->setFocus();
309 mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 ); 313 mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 );
310 mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 ); 314 mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 );
311 315
312 } else 316 } else
313 mGeneral->setFocusOn( 2 ); 317 mGeneral->setFocusOn( 2 );
314 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); 318 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false );
315 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 )); 319 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ));
316} 320}
317void KOTodoEditor::checkRecurrence() 321void KOTodoEditor::checkRecurrence()
318{ 322{
319 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { 323 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) {
320 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true ); 324 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true );
321 325
322 if ( mTodo ) 326 if ( mTodo )
323 mRecurrence->readEvent( mTodo ); 327 mRecurrence->readEvent( mTodo );
324 else { 328 else {
325 bool time = mGeneral->mTimeButton->isChecked(); 329 bool time = mGeneral->mTimeButton->isChecked();
326 QDateTime from,to; 330 QDateTime from,to;
327 if ( time ) { 331 if ( time ) {
328 to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; 332 to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ;
329 from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; 333 from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ;
330 } else { 334 } else {
331 to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; 335 to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ;
332 from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; 336 from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ;
333 } 337 }
334 if ( to < from ) 338 if ( to < from )
335 to = from; 339 to = from;
336 mRecurrence->setDefaults(from,to); 340 mRecurrence->setDefaults(from,to);
337 } 341 }
338 } else { 342 } else {
339 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); 343 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false );
340 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 )); 344 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ));
341 } 345 }
342} 346}
343void KOTodoEditor::readTodo(Todo *todo) 347void KOTodoEditor::readTodo(Todo *todo)
344{ 348{
345 mGeneral->readTodo(todo); 349 mGeneral->readTodo(todo);
346 mDetails->readEvent(todo); 350 mDetails->readEvent(todo);
347 mRelatedTodo = 0;//todo->relatedTo(); 351 mRelatedTodo = 0;//todo->relatedTo();
348 // categories 352 // categories
349 // mCategoryDialog->setSelected(todo->categories()); 353 // mCategoryDialog->setSelected(todo->categories());
350 354
351 // We should handle read-only events here. 355 // We should handle read-only events here.
352} 356}
353 357
354void KOTodoEditor::writeTodo(Todo *event) 358void KOTodoEditor::writeTodo(Todo *event)
355{ 359{
356 bool maybeComputeRecurrenceTime = false; 360 bool maybeComputeRecurrenceTime = false;
357 if( event->hasRecurrenceID() && event->percentComplete() < 100) 361 if( event->hasRecurrenceID() && event->percentComplete() < 100)
358 maybeComputeRecurrenceTime = true; 362 maybeComputeRecurrenceTime = true;
359 event->setHasRecurrenceID( false ); 363 event->setHasRecurrenceID( false );
360 mGeneral->writeTodo(event); 364 mGeneral->writeTodo(event);
361 mDetails->writeEvent(event); 365 mDetails->writeEvent(event);
362 366
363 // set related event, i.e. parent to-do in this case. 367 // set related event, i.e. parent to-do in this case.
364 if (mRelatedTodo) { 368 if (mRelatedTodo) {
365 event->setRelatedTo(mRelatedTodo); 369 event->setRelatedTo(mRelatedTodo);
366 } 370 }
367 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { 371 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) {
368 mRecurrence->writeEvent(event); 372 mRecurrence->writeEvent(event);
369 if ( event->doesRecur() ) { 373 if ( event->doesRecur() ) {
370 int addSec = -1 ; 374 int addSec = -1 ;
371 if ( maybeComputeRecurrenceTime && event->percentComplete() == 100 ) 375 if ( maybeComputeRecurrenceTime && event->percentComplete() == 100 )
372 addSec = 1; 376 addSec = 1;
373 event->setRecurrenceID( event->dtStart().addSecs( addSec ) ); 377 event->setRecurrenceID( event->dtStart().addSecs( addSec ) );
374 event->setRecurDates(); 378 event->setRecurDates();
375 } else { 379 } else {
376 event->setHasRecurrenceID( false ); 380 event->setHasRecurrenceID( false );
377 } 381 }
378 } else { 382 } else {
379 event->setHasRecurrenceID( false ); 383 event->setHasRecurrenceID( false );
380 if ( event->doesRecur() ) 384 if ( event->doesRecur() )
381 event->recurrence()->unsetRecurs(); 385 event->recurrence()->unsetRecurs();
382 } 386 }
383} 387}
384 388
385bool KOTodoEditor::validateInput() 389bool KOTodoEditor::validateInput()
386{ 390{
387 if (!mGeneral->validateInput()) return false; 391 if (!mGeneral->validateInput()) return false;
388 if (!mDetails->validateInput()) return false; 392 if (!mDetails->validateInput()) return false;
389 return true; 393 return true;
390} 394}
391 395
392int KOTodoEditor::msgItemDelete() 396int KOTodoEditor::msgItemDelete()
393{ 397{
394 return KMessageBox::warningContinueCancel(this, 398 return KMessageBox::warningContinueCancel(this,
395 i18n("This item will be permanently deleted."), 399 i18n("This item will be permanently deleted."),
396 i18n("KOrganizer Confirmation"),i18n("Delete")); 400 i18n("KOrganizer Confirmation"),i18n("Delete"));
397} 401}
398 402
399void KOTodoEditor::modified (int modification) 403void KOTodoEditor::modified (int modification)
400{ 404{
401 if (modification == KOGlobals::CATEGORY_MODIFIED || 405 if (modification == KOGlobals::CATEGORY_MODIFIED ||
402 KOGlobals::UNKNOWN_MODIFIED == modification ) 406 KOGlobals::UNKNOWN_MODIFIED == modification )
403 // mCategoryDialog->setSelected (mTodo->categories ()); 407 // mCategoryDialog->setSelected (mTodo->categories ());
404 mGeneral->modified (mTodo, modification); 408 mGeneral->modified (mTodo, modification);
405 409
406} 410}
407 411
408void KOTodoEditor::slotLoadTemplate() 412void KOTodoEditor::slotLoadTemplate()
409{ 413{
410 414
411 QString fileName =locateLocal( "templates", "todos" ); 415 QString fileName =locateLocal( "templates", "todos" );
412 QDir t_dir; 416 QDir t_dir;
413 if ( !t_dir.exists(fileName) ) 417 if ( !t_dir.exists(fileName) )
414 t_dir.mkdir ( fileName ); 418 t_dir.mkdir ( fileName );
415 fileName += "/todo"; 419 fileName += "/todo";
416 fileName = KFileDialog::getSaveFileName( fileName , "Load Todo template", this ); 420 fileName = KFileDialog::getSaveFileName( fileName , "Load Todo template", this );
417 if ( fileName.length() == 0 ) 421 if ( fileName.length() == 0 )
418 return; 422 return;
419 CalendarLocal cal; 423 CalendarLocal cal;
420 ICalFormat format; 424 ICalFormat format;
421 if ( !format.load( &cal, fileName ) ) { 425 if ( !format.load( &cal, fileName ) ) {
422 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 426 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
423 .arg( fileName ) ); 427 .arg( fileName ) );
424 return ; 428 return ;
425 } 429 }
426 QPtrList<Todo> todos = cal.todos(); 430 QPtrList<Todo> todos = cal.todos();
427 Todo * todo = todos.first(); 431 Todo * todo = todos.first();
428 if ( !todo ) { 432 if ( !todo ) {
429 KMessageBox::error( this, 433 KMessageBox::error( this,
430 i18n("Template does not\ncontain a valid Todo.")); 434 i18n("Template does not\ncontain a valid Todo."));
431 } else { 435 } else {
432 readTodo( todo ); 436 readTodo( todo );
433 } 437 }
434 438
435} 439}
436 440
437void KOTodoEditor::slotSaveTemplate() 441void KOTodoEditor::slotSaveTemplate()
438{ 442{
439 QString fileName =locateLocal( "templates", "todos" ); 443 QString fileName =locateLocal( "templates", "todos" );
440 QDir t_dir; 444 QDir t_dir;
441 if ( !t_dir.exists(fileName) ) 445 if ( !t_dir.exists(fileName) )
442 t_dir.mkdir ( fileName ); 446 t_dir.mkdir ( fileName );
443 fileName += "/todo"; 447 fileName += "/todo";
444 fileName = KFileDialog::getSaveFileName( fileName , "Save as Todo template", this ); 448 fileName = KFileDialog::getSaveFileName( fileName , "Save as Todo template", this );
445 if ( fileName.length() > 0 ) 449 if ( fileName.length() > 0 )
446 saveTemplate( fileName ); 450 saveTemplate( fileName );
447} 451}
448 452
449void KOTodoEditor::saveTemplate( const QString &templateName ) 453void KOTodoEditor::saveTemplate( const QString &templateName )
450{ 454{
451 Todo *todo = new Todo; 455 Todo *todo = new Todo;
452 writeTodo( todo ); 456 writeTodo( todo );
453 saveAsTemplate( todo, templateName ); 457 saveAsTemplate( todo, templateName );
diff --git a/libkdepim/ksyncprefsdialog.cpp b/libkdepim/ksyncprefsdialog.cpp
index 1f9afcb..b097277 100644
--- a/libkdepim/ksyncprefsdialog.cpp
+++ b/libkdepim/ksyncprefsdialog.cpp
@@ -52,387 +52,387 @@
52#include <kglobal.h> 52#include <kglobal.h>
53#include <kfontdialog.h> 53#include <kfontdialog.h>
54#include <kmessagebox.h> 54#include <kmessagebox.h>
55#include <kcolordialog.h> 55#include <kcolordialog.h>
56#include <kiconloader.h> 56#include <kiconloader.h>
57#include <kemailsettings.h> 57#include <kemailsettings.h>
58#include <kstandarddirs.h> 58#include <kstandarddirs.h>
59#include <kfiledialog.h> 59#include <kfiledialog.h>
60#include <kmessagebox.h> 60#include <kmessagebox.h>
61 61
62//#include <kurlrequester.h> 62//#include <kurlrequester.h>
63#include <klineedit.h> 63#include <klineedit.h>
64#include "ksyncprofile.h" 64#include "ksyncprofile.h"
65 65
66 66
67//#include "koprefs.h" 67//#include "koprefs.h"
68 68
69#include "ksyncprefsdialog.h" 69#include "ksyncprefsdialog.h"
70//#include "koglobals.h" 70//#include "koglobals.h"
71 71
72 72
73KSyncPrefsDialog::KSyncPrefsDialog(QWidget *parent, char *name, bool modal) : 73KSyncPrefsDialog::KSyncPrefsDialog(QWidget *parent, char *name, bool modal) :
74 KDialog(parent,name,true) 74 KDialog(parent,name,true)
75{ 75{
76 76
77 setCaption( i18n("Synchronization Preferences")); 77 setCaption( i18n("Synchronization Preferences"));
78 78
79 mSyncProfiles.setAutoDelete( true ); 79 mSyncProfiles.setAutoDelete( true );
80 setupSyncAlgTab(); 80 setupSyncAlgTab();
81} 81}
82 82
83 83
84KSyncPrefsDialog::~KSyncPrefsDialog() 84KSyncPrefsDialog::~KSyncPrefsDialog()
85{ 85{
86} 86}
87 87
88void KSyncPrefsDialog::setupSyncAlgTab() 88void KSyncPrefsDialog::setupSyncAlgTab()
89{ 89{
90 QLabel * lab; 90 QLabel * lab;
91 //QFrame *page = addPage(i18n("Sync Prefs"),0,0); 91 //QFrame *page = addPage(i18n("Sync Prefs"),0,0);
92 QVBox * mainbox = new QVBox( this ); 92 QVBox * mainbox = new QVBox( this );
93 QScrollView* sv = new QScrollView( mainbox ); 93 QScrollView* sv = new QScrollView( mainbox );
94 QHBoxLayout * lay = new QHBoxLayout( this ); 94 QHBoxLayout * lay = new QHBoxLayout( this );
95 lay->addWidget( mainbox ); 95 lay->addWidget( mainbox );
96 QHBox * b_box = new QHBox( mainbox ); 96 QHBox * b_box = new QHBox( mainbox );
97 97
98 QPushButton* button = new QPushButton( i18n("Ok"), b_box ); 98 QPushButton* button = new QPushButton( i18n("Ok"), b_box );
99 connect ( button, SIGNAL( clicked()), this, SLOT (slotOK() ) ); 99 connect ( button, SIGNAL( clicked()), this, SLOT (slotOK() ) );
100 button = new QPushButton( i18n("Cancel"), b_box ); 100 button = new QPushButton( i18n("Cancel"), b_box );
101 connect ( button, SIGNAL( clicked()), this, SLOT (reject() ) ); 101 connect ( button, SIGNAL( clicked()), this, SLOT (reject() ) );
102 //QBoxLayout * sl = new QVBoxLayout(this ); 102 //QBoxLayout * sl = new QVBoxLayout(this );
103 //sl->addWidget ( sv ); 103 //sl->addWidget ( sv );
104 sv->setResizePolicy ( QScrollView::AutoOneFit ); 104 sv->setResizePolicy ( QScrollView::AutoOneFit );
105 QFrame *topFrame = new QFrame ( sv ); 105 QFrame *topFrame = new QFrame ( sv );
106 sv->addChild( topFrame ); 106 sv->addChild( topFrame );
107 mSetupSyncAlgTab = topFrame; 107 mSetupSyncAlgTab = topFrame;
108 QGridLayout *topLayout = new QGridLayout(topFrame,6,2); 108 QGridLayout *topLayout = new QGridLayout(topFrame,6,2);
109 topLayout->setSpacing(spacingHint()); 109 topLayout->setSpacing(spacingHint());
110 topLayout->setMargin(marginHint()); 110 topLayout->setMargin(marginHint());
111 111
112 //lab = new QLabel(i18n("Sync settings not yet implemented. DO NOT USE!"), topFrame); 112 //lab = new QLabel(i18n("Sync settings not yet implemented. DO NOT USE!"), topFrame);
113 int iii = 0; 113 int iii = 0;
114 //topLayout->addMultiCellWidget(lab , iii,iii,0,1); 114 //topLayout->addMultiCellWidget(lab , iii,iii,0,1);
115 //++iii; 115 //++iii;
116 116
117 mMyMachineName = new QLineEdit(topFrame); 117 mMyMachineName = new QLineEdit(topFrame);
118 lab = new QLabel(mMyMachineName, i18n("Local device name:"), topFrame); 118 lab = new QLabel(mMyMachineName, i18n("Local device name:"), topFrame);
119 topLayout->addWidget(lab ,iii,0); 119 topLayout->addWidget(lab ,iii,0);
120 topLayout->addWidget(mMyMachineName,iii,1); 120 topLayout->addWidget(mMyMachineName,iii,1);
121 ++iii; 121 ++iii;
122 122
123 QHBox* buttonbox = new QHBox( topFrame); 123 QHBox* buttonbox = new QHBox( topFrame);
124 topLayout->addMultiCellWidget(buttonbox, iii,iii,0,1); 124 topLayout->addMultiCellWidget(buttonbox, iii,iii,0,1);
125 ++iii; 125 ++iii;
126 button = new QPushButton( i18n("New profile"), buttonbox ); 126 button = new QPushButton( i18n("New profile"), buttonbox );
127 connect ( button, SIGNAL( clicked()), this, SLOT (newProfile() ) ); 127 connect ( button, SIGNAL( clicked()), this, SLOT (newProfile() ) );
128 128
129 button = new QPushButton( i18n("Clone profile"), buttonbox ); 129 button = new QPushButton( i18n("Clone profile"), buttonbox );
130 connect ( button, SIGNAL( clicked()), this, SLOT ( cloneProfile() ) ); 130 connect ( button, SIGNAL( clicked()), this, SLOT ( cloneProfile() ) );
131 131
132 button = new QPushButton( i18n("Delete profile"), buttonbox ); 132 button = new QPushButton( i18n("Delete profile"), buttonbox );
133 connect ( button, SIGNAL( clicked()), this, SLOT (deleteProfile() ) ); 133 connect ( button, SIGNAL( clicked()), this, SLOT (deleteProfile() ) );
134 134
135 mProfileBox = new QComboBox(topFrame); 135 mProfileBox = new QComboBox(topFrame);
136 mProfileBox->setEditable ( true ); 136 mProfileBox->setEditable ( true );
137 mProfileBox->setInsertionPolicy(QComboBox::NoInsertion); 137 mProfileBox->setInsertionPolicy(QComboBox::NoInsertion);
138 connect ( mProfileBox, SIGNAL(activated ( int ) ), this, SLOT (profileChanged( int ) ) ); 138 connect ( mProfileBox, SIGNAL(activated ( int ) ), this, SLOT (profileChanged( int ) ) );
139 connect ( mProfileBox, SIGNAL( textChanged ( const QString & ) ), this, SLOT (textChanged( const QString & ) ) ); 139 connect ( mProfileBox, SIGNAL( textChanged ( const QString & ) ), this, SLOT (textChanged( const QString & ) ) );
140 140
141 lab = new QLabel(mProfileBox, i18n("Profile:"), topFrame); 141 lab = new QLabel(mProfileBox, i18n("Profile:"), topFrame);
142 topLayout->addWidget(lab ,iii,0); 142 topLayout->addWidget(lab ,iii,0);
143 topLayout->addWidget(mProfileBox, iii,1); 143 topLayout->addWidget(mProfileBox, iii,1);
144 ++iii; 144 ++iii;
145 145
146 146
147 147
148 QHGroupBox *iims = new QHGroupBox( i18n("Multiple Sync options"), topFrame); 148 QHGroupBox *iims = new QHGroupBox( i18n("Multiple Sync options"), topFrame);
149 new QLabel( i18n("Include in multiple "), iims ); 149 new QLabel( i18n("Include in multiple "), iims );
150 mIncludeInRing = new QCheckBox( i18n("calendar "), iims ); 150 mIncludeInRing = new QCheckBox( i18n("calendar "), iims );
151 mIncludeInRingAB = new QCheckBox( i18n("addressbook "), iims ); 151 mIncludeInRingAB = new QCheckBox( i18n("addressbook "), iims );
152 mIncludeInRingPWM = new QCheckBox( i18n("pwmanager"), iims ); 152 mIncludeInRingPWM = new QCheckBox( i18n("pwmanager"), iims );
153 new QLabel( i18n(" sync"), iims ); 153 new QLabel( i18n(" sync"), iims );
154 topLayout->addMultiCellWidget(iims, iii,iii,0,1); 154 topLayout->addMultiCellWidget(iims, iii,iii,0,1);
155 ++iii; 155 ++iii;
156 QVGroupBox* gb0 = new QVGroupBox( i18n("Sync algo options"), topFrame); 156 QVGroupBox* gb0 = new QVGroupBox( i18n("Sync algo options"), topFrame);
157 topLayout->addMultiCellWidget(gb0, iii,iii,0,1); 157 topLayout->addMultiCellWidget(gb0, iii,iii,0,1);
158 ++iii; 158 ++iii;
159 QButtonGroup* gr; 159 QButtonGroup* gr;
160 { 160 {
161 QVGroupBox* topFrame = gb0; 161 QVGroupBox* topFrame = gb0;
162 162
163 163
164 164
165 mAskForPreferences = new QCheckBox( i18n("Ask for preferences before sync"), topFrame ); 165 mAskForPreferences = new QCheckBox( i18n("Ask for preferences before sync"), topFrame );
166 //topLayout->addMultiCellWidget(mAskForPreferences, iii,iii,0,1); 166 //topLayout->addMultiCellWidget(mAskForPreferences, iii,iii,0,1);
167 //++iii; 167 //++iii;
168 gr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Sync preferences"), topFrame); 168 gr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Sync preferences"), topFrame);
169 //topLayout->addMultiCellWidget(gr, iii,iii,0,1); 169 //topLayout->addMultiCellWidget(gr, iii,iii,0,1);
170 //++iii; 170 //++iii;
171 loc = new QRadioButton ( i18n("Take local entry on conflict"), gr ); 171 loc = new QRadioButton ( i18n("Take local entry on conflict"), gr );
172 rem = new QRadioButton ( i18n("Take remote entry on conflict"), gr ); 172 rem = new QRadioButton ( i18n("Take remote entry on conflict"), gr );
173 newest = new QRadioButton ( i18n("Take newest entry on conflict"), gr ); 173 newest = new QRadioButton ( i18n("Take newest entry on conflict"), gr );
174 ask = new QRadioButton ( i18n("Ask for every entry on conflict"), gr ); 174 ask = new QRadioButton ( i18n("Ask for every entry on conflict"), gr );
175 f_loc= new QRadioButton ( i18n("Force: Take local entry always"), gr ); 175 f_loc= new QRadioButton ( i18n("Force: Take local entry always"), gr );
176 f_rem = new QRadioButton ( i18n("Force: Take remote entry always"), gr ); 176 f_rem = new QRadioButton ( i18n("Force: Take remote entry always"), gr );
177 // both = new QRadioButton ( i18n("Take both on conflict"), gr ); 177 // both = new QRadioButton ( i18n("Take both on conflict"), gr );
178 178
179 mShowSummaryAfterSync = new QCheckBox( i18n("Show summary after sync"), topFrame ); 179 mShowSummaryAfterSync = new QCheckBox( i18n("Show summary after sync"), topFrame );
180 //topLayout->addMultiCellWidget(mShowSummaryAfterSync, iii,iii,0,1); 180 //topLayout->addMultiCellWidget(mShowSummaryAfterSync, iii,iii,0,1);
181 //++iii; 181 //++iii;
182 182
183#if 0 183#if 0
184 QHGroupBox* gb51 = new QHGroupBox( i18n("Local resources to sync with:"), topFrame); 184 QHGroupBox* gb51 = new QHGroupBox( i18n("Local resources to sync with:"), topFrame);
185 { 185 {
186 QVBox * fibo2 = new QVBox ( gb51 ); 186 QVBox * fibo2 = new QVBox ( gb51 );
187 new QLabel ( i18n("Calendar resources:"), fibo2 ); 187 new QLabel ( i18n("Calendar resources:"), fibo2 );
188 //mFilterInCal = new QComboBox( fibo2 ); 188 //mFilterInCal = new QComboBox( fibo2 );
189 fibo2 = new QVBox ( gb51 ); 189 fibo2 = new QVBox ( gb51 );
190 new QLabel ( i18n("Addressbook resources:"), fibo2 ); 190 new QLabel ( i18n("Addressbook resources:"), fibo2 );
191 //mFilterInAB = new QComboBox( fibo2 ); 191 //mFilterInAB = new QComboBox( fibo2 );
192 } 192 }
193#endif 193#endif
194 QHGroupBox* gb5 = new QHGroupBox( i18n("Apply filter when adding data to local:"), topFrame); 194 QHGroupBox* gb5 = new QHGroupBox( i18n("Apply filter when adding data to local:"), topFrame);
195 QVBox * fibo2 = new QVBox ( gb5 ); 195 QVBox * fibo2 = new QVBox ( gb5 );
196 new QLabel ( i18n("Incoming calendar filter:"), fibo2 ); 196 new QLabel ( i18n("Incoming calendar filter:"), fibo2 );
197 mFilterInCal = new QComboBox( fibo2 ); 197 mFilterInCal = new QComboBox( fibo2 );
198 fibo2 = new QVBox ( gb5 ); 198 fibo2 = new QVBox ( gb5 );
199 new QLabel ( i18n("Incoming addressbook filter:"), fibo2 ); 199 new QLabel ( i18n("Incoming addressbook filter:"), fibo2 );
200 mFilterInAB = new QComboBox( fibo2 ); 200 mFilterInAB = new QComboBox( fibo2 );
201 201
202 mWriteBackFile = new QCheckBox( i18n("Write back synced data"), topFrame ); 202 mWriteBackFile = new QCheckBox( i18n("Write back synced data"), topFrame );
203 // topLayout->addMultiCellWidget(mWriteBackFile, iii,iii,0,1); 203 // topLayout->addMultiCellWidget(mWriteBackFile, iii,iii,0,1);
204 // ++iii; 204 // ++iii;
205 205
206 QVGroupBox* gb2 = new QVGroupBox( i18n("Write back options"), topFrame); 206 QVGroupBox* gb2 = new QVGroupBox( i18n("Write back options"), topFrame);
207 //topLayout->addMultiCellWidget(gb2, iii,iii,0,1); 207 //topLayout->addMultiCellWidget(gb2, iii,iii,0,1);
208 //++iii; 208 //++iii;
209 { 209 {
210 QVGroupBox*topFrame = gb2; 210 QVGroupBox*topFrame = gb2;
211 mWriteBackExisting= new QCheckBox( i18n("Write back (on remote) existing entries only"), topFrame ); 211 mWriteBackExisting= new QCheckBox( i18n("Write back (on remote) existing entries only"), topFrame );
212 QHGroupBox* gb4 = new QHGroupBox( i18n("Apply filter when adding data to remote:"), topFrame); 212 QHGroupBox* gb4 = new QHGroupBox( i18n("Apply filter when adding data to remote:"), topFrame);
213 QVBox * fibo = new QVBox ( gb4 ); 213 QVBox * fibo = new QVBox ( gb4 );
214 new QLabel ( i18n("Outgoing calendar filter:"), fibo ); 214 new QLabel ( i18n("Outgoing calendar filter:"), fibo );
215 mFilterOutCal = new QComboBox( fibo ); 215 mFilterOutCal = new QComboBox( fibo );
216 fibo = new QVBox ( gb4 ); 216 fibo = new QVBox ( gb4 );
217 new QLabel ( i18n("Outgoing addressbook filter:"), fibo ); 217 new QLabel ( i18n("Outgoing addressbook filter:"), fibo );
218 mFilterOutAB = new QComboBox( fibo ); 218 mFilterOutAB = new QComboBox( fibo );
219 //topLayout->addMultiCellWidget(mWriteBackExisting, iii,iii,0,1); 219 //topLayout->addMultiCellWidget(mWriteBackExisting, iii,iii,0,1);
220 //++iii; 220 //++iii;
221 mWriteBackFuture= new QCheckBox( i18n("Write back (calendar) entries for time period only"), topFrame ); 221 mWriteBackFuture= new QCheckBox( i18n("Write back (calendar) entries for time period only"), topFrame );
222 //topLayout->addMultiCellWidget(mWriteBackFuture, iii,iii,0,1); 222 //topLayout->addMultiCellWidget(mWriteBackFuture, iii,iii,0,1);
223 //++iii; 223 //++iii;
224 QHGroupBox* gb3 = new QHGroupBox( i18n("Time period"), topFrame); 224 QHGroupBox* gb3 = new QHGroupBox( i18n("Time period"), topFrame);
225 connect ( mWriteBackFuture, SIGNAL( toggled ( bool ) ), gb3, SLOT ( setEnabled ( bool ) ) ); 225 connect ( mWriteBackFuture, SIGNAL( toggled ( bool ) ), gb3, SLOT ( setEnabled ( bool ) ) );
226 new QLabel( i18n("From ") , gb3 ); 226 new QLabel( i18n("From ") , gb3 );
227 mWriteBackPastWeeks= new QSpinBox(1,104, 1, gb3); 227 mWriteBackPastWeeks= new QSpinBox(1,104, 1, gb3);
228 new QLabel( i18n(" weeks in the past to ") , gb3 ); 228 new QLabel( i18n(" weeks in the past to ") , gb3 );
229 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, gb3); 229 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, gb3);
230 new QLabel( i18n(" weeks in the future ") , gb3 ); 230 new QLabel( i18n(" weeks in the future ") , gb3 );
231 //topLayout->addMultiCellWidget(mWriteBackFutureWeeks, iii,iii,1,1); 231 //topLayout->addMultiCellWidget(mWriteBackFutureWeeks, iii,iii,1,1);
232 //++iii; 232 //++iii;
233 gb3->setEnabled( false ); 233 gb3->setEnabled( false );
234 connect ( mWriteBackExisting, SIGNAL( toggled ( bool ) ), gb4, SLOT ( setDisabled ( bool ) ) ); 234 connect ( mWriteBackExisting, SIGNAL( toggled ( bool ) ), gb4, SLOT ( setDisabled ( bool ) ) );
235 } 235 }
236 connect ( mWriteBackFile, SIGNAL( toggled ( bool ) ), gb2, SLOT ( setEnabled ( bool ) ) ); 236 connect ( mWriteBackFile, SIGNAL( toggled ( bool ) ), gb2, SLOT ( setEnabled ( bool ) ) );
237 237
238 } 238 }
239 proGr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Profile kind"), topFrame); 239 proGr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Profile kind"), topFrame);
240 gr = proGr; 240 gr = proGr;
241 topLayout->addMultiCellWidget(gr, iii,iii,0,1); 241 topLayout->addMultiCellWidget(gr, iii,iii,0,1);
242 ++iii; 242 ++iii;
243 mIsLocal = new QRadioButton ( i18n("Local file"), gr ); 243 mIsLocal = new QRadioButton ( i18n("Local file"), gr );
244 mIsPi = new QRadioButton ( i18n("Pi-Sync - all resources ( direct Kx/Pi to Kx/Pi sync )"), gr ); 244 mIsPi = new QRadioButton ( i18n("Pi-Sync - all calendars ( direct Kx/Pi to Kx/Pi sync )"), gr );
245 connect (mIsPi, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 245 connect (mIsPi, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
246 mIsPiSpecific = new QRadioButton ( i18n("Pi-Sync - selected resources ( direct Kx/Pi to Kx/Pi sync )"), gr ); 246 mIsPiSpecific = new QRadioButton ( i18n("Pi-Sync - selected calendars ( direct Kx/Pi to Kx/Pi sync )"), gr );
247 connect (mIsPiSpecific, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 247 connect (mIsPiSpecific, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
248 mIsNotLocal = new QRadioButton ( i18n("Remote file (w down/upload command)"), gr ); 248 mIsNotLocal = new QRadioButton ( i18n("Remote file (w down/upload command)"), gr );
249 connect (mIsLocal, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 249 connect (mIsLocal, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
250 mIsPhone = new QRadioButton ( i18n("Mobile device (cell phone)"), gr ); 250 mIsPhone = new QRadioButton ( i18n("Mobile device (cell phone)"), gr );
251 connect (mIsPhone, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 251 connect (mIsPhone, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
252 252
253 QVGroupBox* gb1 = new QVGroupBox( i18n("Profile kind specific settings"), topFrame); 253 QVGroupBox* gb1 = new QVGroupBox( i18n("Profile kind specific settings"), topFrame);
254 topLayout->addMultiCellWidget(gb1, iii,iii,0,1); 254 topLayout->addMultiCellWidget(gb1, iii,iii,0,1);
255 ++iii; 255 ++iii;
256 256
257 // ****************************************** 257 // ******************************************
258 // Profile kind specific settings 258 // Profile kind specific settings
259 { 259 {
260 // *** phone ******************************* 260 // *** phone *******************************
261 QVGroupBox* topFrame = gb1; 261 QVGroupBox* topFrame = gb1;
262 phoneWidget = new QVBox( topFrame); 262 phoneWidget = new QVBox( topFrame);
263 //topLayout->addMultiCellWidget(phoneWidget, iii,iii,0,1); 263 //topLayout->addMultiCellWidget(phoneWidget, iii,iii,0,1);
264 //++iii; 264 //++iii;
265 mWriteContactToSIM = 0;//new QCheckBox( i18n("Sync contacts with phone SIM card (If not, sync with phone memory)"), phoneWidget ); 265 mWriteContactToSIM = 0;//new QCheckBox( i18n("Sync contacts with phone SIM card (If not, sync with phone memory)"), phoneWidget );
266 QHBox* temphb = new QHBox( phoneWidget ); 266 QHBox* temphb = new QHBox( phoneWidget );
267 new QLabel( i18n("I/O device: "), temphb ); 267 new QLabel( i18n("I/O device: "), temphb );
268 mPhoneDevice = new QLineEdit( temphb); 268 mPhoneDevice = new QLineEdit( temphb);
269 button = new QPushButton( i18n("Help..."), temphb ); 269 button = new QPushButton( i18n("Help..."), temphb );
270 connect ( button, SIGNAL( clicked()), this, SLOT ( helpDevice() ) ); 270 connect ( button, SIGNAL( clicked()), this, SLOT ( helpDevice() ) );
271 271
272 272
273 temphb = new QHBox( phoneWidget ); 273 temphb = new QHBox( phoneWidget );
274 new QLabel( i18n("Connection: "), temphb ); 274 new QLabel( i18n("Connection: "), temphb );
275 mPhoneConnection = new QLineEdit( temphb); 275 mPhoneConnection = new QLineEdit( temphb);
276 button = new QPushButton( i18n("Help..."), temphb ); 276 button = new QPushButton( i18n("Help..."), temphb );
277 connect ( button, SIGNAL( clicked()), this, SLOT ( helpConnection() ) ); 277 connect ( button, SIGNAL( clicked()), this, SLOT ( helpConnection() ) );
278 278
279 279
280 temphb = new QHBox( phoneWidget ); 280 temphb = new QHBox( phoneWidget );
281 new QLabel( i18n("Model(opt.): "), temphb ); 281 new QLabel( i18n("Model(opt.): "), temphb );
282 mPhoneModel = new QLineEdit( temphb); 282 mPhoneModel = new QLineEdit( temphb);
283 button = new QPushButton( i18n("Help..."), temphb ); 283 button = new QPushButton( i18n("Help..."), temphb );
284 connect ( button, SIGNAL( clicked()), this, SLOT ( helpModel() ) ); 284 connect ( button, SIGNAL( clicked()), this, SLOT ( helpModel() ) );
285 285
286 // *** local******************************* 286 // *** local*******************************
287 localFileWidget = new QVBox( topFrame); 287 localFileWidget = new QVBox( topFrame);
288 //topLayout->addMultiCellWidget(localFileWidget, iii,iii,0,1); 288 //topLayout->addMultiCellWidget(localFileWidget, iii,iii,0,1);
289 //++iii; 289 //++iii;
290 temphb = new QHBox( localFileWidget ); 290 temphb = new QHBox( localFileWidget );
291 291
292 lab = new QLabel( i18n("Local file Cal:"), temphb ); 292 lab = new QLabel( i18n("Local file Cal:"), temphb );
293 lab = new QLabel( i18n("Local file ABook:"), temphb ); 293 lab = new QLabel( i18n("Local file ABook:"), temphb );
294 lab = new QLabel( i18n("Local file PWMgr:"), temphb ); 294 lab = new QLabel( i18n("Local file PWMgr:"), temphb );
295 temphb = new QHBox( localFileWidget ); 295 temphb = new QHBox( localFileWidget );
296 button = new QPushButton( i18n("Choose..."), temphb ); 296 button = new QPushButton( i18n("Choose..."), temphb );
297 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFile() ) ); 297 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFile() ) );
298 button = new QPushButton( i18n("Choose..."), temphb ); 298 button = new QPushButton( i18n("Choose..."), temphb );
299 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFileAB() ) ); 299 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFileAB() ) );
300 button = new QPushButton( i18n("Choose..."), temphb ); 300 button = new QPushButton( i18n("Choose..."), temphb );
301 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFilePWM() ) ); 301 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFilePWM() ) );
302 temphb = new QHBox( localFileWidget ); 302 temphb = new QHBox( localFileWidget );
303 303
304 mRemoteFile = new QLineEdit( temphb); 304 mRemoteFile = new QLineEdit( temphb);
305 mRemoteFileAB = new QLineEdit( temphb); 305 mRemoteFileAB = new QLineEdit( temphb);
306 mRemoteFilePWM = new QLineEdit( temphb); 306 mRemoteFilePWM = new QLineEdit( temphb);
307 mIsKapiFileL = new QCheckBox( i18n("Addressbook file (*.vcf) is used by KA/Pi"), localFileWidget ); 307 mIsKapiFileL = new QCheckBox( i18n("Addressbook file (*.vcf) is used by KA/Pi"), localFileWidget );
308 308
309 309
310 // *** remote******************************* 310 // *** remote*******************************
311 remoteFileWidget = new QVBox( topFrame); 311 remoteFileWidget = new QVBox( topFrame);
312 //topLayout->addMultiCellWidget(remoteFileWidget, iii,iii,0,1); 312 //topLayout->addMultiCellWidget(remoteFileWidget, iii,iii,0,1);
313 //++iii; 313 //++iii;
314 temphb = new QHBox( remoteFileWidget ); 314 temphb = new QHBox( remoteFileWidget );
315 new QLabel( i18n("Calendar:"), temphb); 315 new QLabel( i18n("Calendar:"), temphb);
316 new QLabel( i18n("AddressBook:"), temphb); 316 new QLabel( i18n("AddressBook:"), temphb);
317 new QLabel( i18n("PWManager:"), temphb); 317 new QLabel( i18n("PWManager:"), temphb);
318 318
319 lab = new QLabel( i18n("Pre sync (download) command:"), remoteFileWidget); 319 lab = new QLabel( i18n("Pre sync (download) command:"), remoteFileWidget);
320 temphb = new QHBox( remoteFileWidget ); 320 temphb = new QHBox( remoteFileWidget );
321 mRemotePrecommand = new QLineEdit(temphb); 321 mRemotePrecommand = new QLineEdit(temphb);
322 mRemotePrecommandAB = new QLineEdit(temphb); 322 mRemotePrecommandAB = new QLineEdit(temphb);
323 mRemotePrecommandPWM = new QLineEdit(temphb); 323 mRemotePrecommandPWM = new QLineEdit(temphb);
324 324
325 lab = new QLabel( i18n("Local temp file:"), remoteFileWidget); 325 lab = new QLabel( i18n("Local temp file:"), remoteFileWidget);
326 temphb = new QHBox( remoteFileWidget ); 326 temphb = new QHBox( remoteFileWidget );
327 mLocalTempFile = new QLineEdit(temphb); 327 mLocalTempFile = new QLineEdit(temphb);
328 mLocalTempFileAB = new QLineEdit(temphb); 328 mLocalTempFileAB = new QLineEdit(temphb);
329 mLocalTempFilePWM = new QLineEdit(temphb); 329 mLocalTempFilePWM = new QLineEdit(temphb);
330 330
331 lab = new QLabel( i18n("Post sync (upload) command:"), remoteFileWidget); 331 lab = new QLabel( i18n("Post sync (upload) command:"), remoteFileWidget);
332 temphb = new QHBox( remoteFileWidget ); 332 temphb = new QHBox( remoteFileWidget );
333 mRemotePostcommand = new QLineEdit(temphb ); 333 mRemotePostcommand = new QLineEdit(temphb );
334 mRemotePostcommandAB = new QLineEdit(temphb ); 334 mRemotePostcommandAB = new QLineEdit(temphb );
335 mRemotePostcommandPWM = new QLineEdit(temphb ); 335 mRemotePostcommandPWM = new QLineEdit(temphb );
336 mIsKapiFileR = new QCheckBox( i18n("Addressbook file is used by KA/Pi"), remoteFileWidget ); 336 mIsKapiFileR = new QCheckBox( i18n("Addressbook file is used by KA/Pi"), remoteFileWidget );
337 lab = new QLabel( i18n("Fill in default values for:"), remoteFileWidget); 337 lab = new QLabel( i18n("Fill in default values for:"), remoteFileWidget);
338 temphb = new QHBox( remoteFileWidget ); 338 temphb = new QHBox( remoteFileWidget );
339 button = new QPushButton( i18n("ssh/scp"), temphb ); 339 button = new QPushButton( i18n("ssh/scp"), temphb );
340 connect ( button, SIGNAL( clicked()), this, SLOT (fillSSH() ) ); 340 connect ( button, SIGNAL( clicked()), this, SLOT (fillSSH() ) );
341 button = new QPushButton( i18n("ftp"), temphb ); 341 button = new QPushButton( i18n("ftp"), temphb );
342 connect ( button, SIGNAL( clicked()), this, SLOT (fillFTP() ) ); 342 connect ( button, SIGNAL( clicked()), this, SLOT (fillFTP() ) );
343 lab = new QLabel( i18n("Hint: Use $PWD$ for placeholder of password!"), remoteFileWidget); 343 lab = new QLabel( i18n("Hint: Use $PWD$ for placeholder of password!"), remoteFileWidget);
344 344
345 // *** pi-sync******************************* 345 // *** pi-sync*******************************
346 piWidget = new QVBox( topFrame); 346 piWidget = new QVBox( topFrame);
347 //topLayout->addMultiCellWidget(piWidget, iii,iii,0,1); 347 //topLayout->addMultiCellWidget(piWidget, iii,iii,0,1);
348 //++iii; 348 //++iii;
349 temphb = new QHBox( piWidget ); 349 temphb = new QHBox( piWidget );
350 new QLabel( i18n("Calendar:"), temphb); 350 new QLabel( i18n("Calendar:"), temphb);
351 new QLabel( i18n("AddressBook:"), temphb); 351 new QLabel( i18n("AddressBook:"), temphb);
352 new QLabel( i18n("PWManager:"), temphb); 352 new QLabel( i18n("PWManager:"), temphb);
353 353
354 lab = new QLabel( i18n("Password for remote access: (could be the same for each)"), piWidget); 354 lab = new QLabel( i18n("Password for remote access: (could be the same for each)"), piWidget);
355 temphb = new QHBox( piWidget ); 355 temphb = new QHBox( piWidget );
356 mRemotePw = new QLineEdit(temphb); 356 mRemotePw = new QLineEdit(temphb);
357 mRemotePwAB = new QLineEdit(temphb); 357 mRemotePwAB = new QLineEdit(temphb);
358 mRemotePwPWM = new QLineEdit(temphb); 358 mRemotePwPWM = new QLineEdit(temphb);
359 359
360 lab = new QLabel( i18n("Remote IP address: (could be the same for each)"), piWidget); 360 lab = new QLabel( i18n("Remote IP address: (could be the same for each)"), piWidget);
361 temphb = new QHBox( piWidget ); 361 temphb = new QHBox( piWidget );
362 mRemoteIP = new QLineEdit(temphb); 362 mRemoteIP = new QLineEdit(temphb);
363 mRemoteIPAB = new QLineEdit(temphb); 363 mRemoteIPAB = new QLineEdit(temphb);
364 mRemoteIPPWM = new QLineEdit(temphb); 364 mRemoteIPPWM = new QLineEdit(temphb);
365 365
366 lab = new QLabel( i18n("Remote port number: (should be different for each)"), piWidget); 366 lab = new QLabel( i18n("Remote port number: (should be different for each)"), piWidget);
367 temphb = new QHBox( piWidget ); 367 temphb = new QHBox( piWidget );
368 mRemotePort = new QLineEdit(temphb); 368 mRemotePort = new QLineEdit(temphb);
369 mRemotePortAB = new QLineEdit(temphb); 369 mRemotePortAB = new QLineEdit(temphb);
370 mRemotePortPWM = new QLineEdit(temphb); 370 mRemotePortPWM = new QLineEdit(temphb);
371 371
372 lab = new QLabel( i18n("Local/remote Resource sync partners (Leave empty to not sync)"), piWidget); 372 lab = new QLabel( i18n("Local/remote Resource sync partners (Leave empty to not sync)"), piWidget);
373 mTableBox = new QHBox( piWidget ); 373 mTableBox = new QHBox( piWidget );
374 mResTableKopi = new QTable( 1, 1, mTableBox ); 374 mResTableKopi = new QTable( 1, 1, mTableBox );
375 mResTableKapi = new QTable( 1, 1, mTableBox ); 375 mResTableKapi = new QTable( 1, 1, mTableBox );
376 mResTablePwmpi = new QTable( 1, 1, mTableBox ); 376 mResTablePwmpi = new QTable( 1, 1, mTableBox );
377 mResTableKopi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 377 mResTableKopi->horizontalHeader()->setLabel( 0, i18n("Remote") );
378 mResTableKapi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 378 mResTableKapi->horizontalHeader()->setLabel( 0, i18n("Remote") );
379 mResTablePwmpi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 379 mResTablePwmpi->horizontalHeader()->setLabel( 0, i18n("Remote") );
380 mResTableKopi->setLeftMargin( 80 ); 380 mResTableKopi->setLeftMargin( 80 );
381 } 381 }
382 // ****************************************** 382 // ******************************************
383 // Profile kind specific settings END 383 // Profile kind specific settings END
384 384
385} 385}
386 386
387void KSyncPrefsDialog::readResources() 387void KSyncPrefsDialog::readResources()
388{ 388{
389 mResourcesKopi.clear(); 389 mResourcesKopi.clear();
390 mResourcesKapi.clear(); 390 mResourcesKapi.clear();
391 KConfig fc(locateLocal("config","kopicalendarrc")); 391 KConfig fc(locateLocal("config","kopicalendarrc"));
392 fc.setGroup("CC"); 392 fc.setGroup("CC");
393 int numCals = fc.readNumEntry("NumberCalendars",0 ); 393 int numCals = fc.readNumEntry("NumberCalendars",0 );
394 int curCal = 1; 394 int curCal = 1;
395 while ( curCal <= numCals ) { 395 while ( curCal <= numCals ) {
396 QString prefix = "Cal_" +QString::number( curCal ); 396 QString prefix = "Cal_" +QString::number( curCal );
397 QString name = fc.readEntry( prefix+"_Name", "Calendar"); 397 QString name = fc.readEntry( prefix+"_Name", "Calendar");
398 mResourcesKopi.append( name ); 398 mResourcesKopi.append( name );
399 ++curCal; 399 ++curCal;
400 } 400 }
401 mResTableKopi->setNumRows( mResourcesKopi.count() ); 401 mResTableKopi->setNumRows( mResourcesKopi.count() );
402 int i; 402 int i;
403 for ( i = 0;i < mResourcesKopi.count(); ++i ) { 403 for ( i = 0;i < mResourcesKopi.count(); ++i ) {
404 mResTableKopi->verticalHeader ()->setLabel( i, mResourcesKopi[i] ); 404 mResTableKopi->verticalHeader ()->setLabel( i, mResourcesKopi[i] );
405 } 405 }
406} 406}
407void KSyncPrefsDialog::readFilter() 407void KSyncPrefsDialog::readFilter()
408{ 408{
409 mFilterKapi.clear(); 409 mFilterKapi.clear();
410 mFilterKopi.clear(); 410 mFilterKopi.clear();
411 KConfig cfgko(locateLocal("config","korganizerrc")); 411 KConfig cfgko(locateLocal("config","korganizerrc"));
412 KConfig cfgka(locateLocal("config","kaddressbookrc")); 412 KConfig cfgka(locateLocal("config","kaddressbookrc"));
413 cfgko.setGroup("General"); 413 cfgko.setGroup("General");
414 mFilterKopi = cfgko.readListEntry("CalendarFilters"); 414 mFilterKopi = cfgko.readListEntry("CalendarFilters");
415 cfgka.setGroup("Filter"); 415 cfgka.setGroup("Filter");
416 int count = cfgka.readNumEntry( "Count", 0 ); 416 int count = cfgka.readNumEntry( "Count", 0 );
417 for ( int i = 0; i < count; i++ ) { 417 for ( int i = 0; i < count; i++ ) {
418 cfgka.setGroup("Filter_"+QString::number( i ) ); 418 cfgka.setGroup("Filter_"+QString::number( i ) );
419 mFilterKapi.append( cfgka.readEntry("Name", "internal error") ); 419 mFilterKapi.append( cfgka.readEntry("Name", "internal error") );
420 } 420 }
421 mFilterOutCal->clear(); 421 mFilterOutCal->clear();
422 mFilterInCal->clear(); 422 mFilterInCal->clear();
423 mFilterOutAB->clear(); 423 mFilterOutAB->clear();
424 mFilterInAB->clear(); 424 mFilterInAB->clear();
425 QStringList temp = mFilterKopi; 425 QStringList temp = mFilterKopi;
426 temp.prepend(i18n("No Filter") ); 426 temp.prepend(i18n("No Filter") );
427 mFilterOutCal->insertStringList( temp ); 427 mFilterOutCal->insertStringList( temp );
428 mFilterInCal->insertStringList( temp ); 428 mFilterInCal->insertStringList( temp );
429 temp = mFilterKapi; 429 temp = mFilterKapi;
430 temp.prepend(i18n("No Filter") ); 430 temp.prepend(i18n("No Filter") );
431 mFilterOutAB->insertStringList( temp ); 431 mFilterOutAB->insertStringList( temp );
432 mFilterInAB->insertStringList( temp ); 432 mFilterInAB->insertStringList( temp );
433} 433}
434 434
435void KSyncPrefsDialog::slotOK() 435void KSyncPrefsDialog::slotOK()
436{ 436{
437 if ( mMyMachineName->text() == "undefined" ) { 437 if ( mMyMachineName->text() == "undefined" ) {
438 KMessageBox::error(this,i18n("Local device name undefined!\nPlease define device name!"),i18n("KO/Pi config error")); 438 KMessageBox::error(this,i18n("Local device name undefined!\nPlease define device name!"),i18n("KO/Pi config error"));