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,98 +1,110 @@
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.
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
@@ -736,101 +736,103 @@
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
@@ -843,193 +843,192 @@
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" },
@@ -1478,103 +1477,109 @@
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
@@ -50,193 +50,192 @@
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 );
@@ -262,193 +261,193 @@ void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
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;
@@ -527,98 +526,100 @@ void KOEditorGeneral::readIncidence(Incidence *event)
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
@@ -23,103 +23,103 @@
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,123 +1,124 @@
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 );
@@ -156,192 +157,195 @@ void KOEventEditor::setupGeneral()
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;
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 02b54da..607e549 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -311,309 +311,317 @@ void KOEventViewer::appendEvent(Event *event, int mode )
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
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,125 +1,126 @@
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 );
@@ -166,192 +167,195 @@ void KOTodoEditor::setupGeneral()
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)
diff --git a/libkdepim/ksyncprefsdialog.cpp b/libkdepim/ksyncprefsdialog.cpp
index 1f9afcb..b097277 100644
--- a/libkdepim/ksyncprefsdialog.cpp
+++ b/libkdepim/ksyncprefsdialog.cpp
@@ -148,195 +148,195 @@ void KSyncPrefsDialog::setupSyncAlgTab()
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() ) );