summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt2
-rw-r--r--kaddressbook/kaimportoldialog.cpp7
-rw-r--r--korganizer/koimportoldialog.cpp8
3 files changed, 10 insertions, 7 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 792cb91..5e2180f 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -638,385 +638,385 @@
638{"Talk","Vortrag" }, 638{"Talk","Vortrag" },
639{"Travel","Reise" }, 639{"Travel","Reise" },
640{"TV","TV" }, 640{"TV","TV" },
641{"Germany","Deutschland" }, 641{"Germany","Deutschland" },
642{"Sweden","Schweden" }, 642{"Sweden","Schweden" },
643{"Forest","Wald" }, 643{"Forest","Wald" },
644{ "Desert","Wüste" }, 644{ "Desert","Wüste" },
645{ "Kitchen","Küche" }, 645{ "Kitchen","Küche" },
646{ "Lake","See" }, 646{ "Lake","See" },
647{"University","Universität"}, 647{"University","Universität"},
648{"Vacation","Urlaub" }, 648{"Vacation","Urlaub" },
649{"VIP","VIP" }, 649{"VIP","VIP" },
650{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 650{ "Import Sharp Calendar","Importiere Sharp Kalender" },
651{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 651{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
652{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 652{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
653{ "Cancelled","Gecancelt" }, 653{ "Cancelled","Gecancelt" },
654{ "Multiple sync","Mehrfach Sync" }, 654{ "Multiple sync","Mehrfach Sync" },
655{ "Local file","Lokale Datei" }, 655{ "Local file","Lokale Datei" },
656{ "Last file","Letzte Datei" }, 656{ "Last file","Letzte Datei" },
657{ "Keys + Colors...","Tasten + Farben..." }, 657{ "Keys + Colors...","Tasten + Farben..." },
658{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 658{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
659{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 659{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
660{ "Choose...","Wähle..." }, 660{ "Choose...","Wähle..." },
661{ "Use colors for application:","Setze Farben für Programm:" }, 661{ "Use colors for application:","Setze Farben für Programm:" },
662{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 662{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
663{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 663{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
664{ "Show parent To-Do's","Zeige Ober-Todos" }, 664{ "Show parent To-Do's","Zeige Ober-Todos" },
665{ "Show location","Zeige Orte" }, 665{ "Show location","Zeige Orte" },
666{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 666{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
667{ "Show in every cell ","Zeige in jeder Zelle " }, 667{ "Show in every cell ","Zeige in jeder Zelle " },
668{ "short month","kurzen Monat" }, 668{ "short month","kurzen Monat" },
669{ "icons","Icons" }, 669{ "icons","Icons" },
670{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 670{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
671{ "Category colors are applied to text","Kategorie Farben färben Text" }, 671{ "Category colors are applied to text","Kategorie Farben färben Text" },
672{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 672{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
673{ "Day color odd months","Tagesfarbe ungerade Monate" }, 673{ "Day color odd months","Tagesfarbe ungerade Monate" },
674{ "Day color even months","Tagesfarbe gerade Monate" }, 674{ "Day color even months","Tagesfarbe gerade Monate" },
675{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 675{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
676{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 676{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
677{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 677{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
678{ "Colors are applied to text","Farben werden auf Text angewendet" }, 678{ "Colors are applied to text","Farben werden auf Text angewendet" },
679{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 679{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
680{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 680{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
681{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 681{ "Play beeps count:","Anzahl der Alarmpiepse: " },
682{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 682{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
683{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 683{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
684{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 684{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
685{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 685{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
686{ "New profile","Neues Profil" }, 686{ "New profile","Neues Profil" },
687{ "Clone profile","Klone Profil" }, 687{ "Clone profile","Klone Profil" },
688{ "Delete profile","Lösche Profil" }, 688{ "Delete profile","Lösche Profil" },
689{ "Profile:","Profil:" }, 689{ "Profile:","Profil:" },
690{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 690{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
691{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 691{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
692{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 692{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
693{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 693{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
694{ "Write back file","Schreibe Datei zurück" }, 694{ "Write back file","Schreibe Datei zurück" },
695{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 695{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
696{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 696{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
697{ "Local device name:","Name dieses Gerätes:" }, 697{ "Local device name:","Name dieses Gerätes:" },
698{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 698{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
699{ "Sync preferences","Synchronisations Einstellungen" }, 699{ "Sync preferences","Synchronisations Einstellungen" },
700{ "Profile kind","Profil Art" }, 700{ "Profile kind","Profil Art" },
701{ "Local file","Lokale Datei" }, 701{ "Local file","Lokale Datei" },
702{ "Local file:","Lokale Datei:" }, 702{ "Local file:","Lokale Datei:" },
703{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 703{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
704{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 704{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
705{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 705{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
706{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 706{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
707{ "Device","Gerät:" }, 707{ "Device","Gerät:" },
708{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 708{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
709{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 709{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
710{ "Synchronization successful","Synchronisation erfolgreich" }, 710{ "Synchronization successful","Synchronisation erfolgreich" },
711{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 711{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
712{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 712{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
713{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 713{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
714{ "Enter password","Passwort eingeben" }, 714{ "Enter password","Passwort eingeben" },
715{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 715{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
716{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 716{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
717{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 717{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
718{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 718{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
719{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 719{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
720{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 720{ "Edit Calendar Filters","Editiere Kalendar Filter" },
721{ "Enter filter name:","Neuer Filter Name:" }, 721{ "Enter filter name:","Neuer Filter Name:" },
722{ "Add Filter","Filter hinzufügen" }, 722{ "Add Filter","Filter hinzufügen" },
723{ "Question","Frage" }, 723{ "Question","Frage" },
724{ "Filter position: ","Filter Position: " }, 724{ "Filter position: ","Filter Position: " },
725{ "Month View","Monatsansicht" }, 725{ "Month View","Monatsansicht" },
726{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 726{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
727{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 727{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
728{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 728{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
729{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 729{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
730{ "Access: ","Zugriff: " }, 730{ "Access: ","Zugriff: " },
731{ "Needs Action","Aktion notwendig" }, 731{ "Needs Action","Aktion notwendig" },
732{ "Accepted","Akzeptiert" }, 732{ "Accepted","Akzeptiert" },
733{ "Declined","Abgelehnt" }, 733{ "Declined","Abgelehnt" },
734{ "Tentative","Vorläufig" }, 734{ "Tentative","Vorläufig" },
735{ "Delegated","Beauftragt" }, 735{ "Delegated","Beauftragt" },
736{ "Completed","Vollständig" }, 736{ "Completed","Vollständig" },
737{ "In Process","In Bearbeitung" }, 737{ "In Process","In Bearbeitung" },
738{ "Participant","Teilnehmer" }, 738{ "Participant","Teilnehmer" },
739{ "Optional Participant","Möglicher Teilnehmer" }, 739{ "Optional Participant","Möglicher Teilnehmer" },
740{ "Observer","Beobachter" }, 740{ "Observer","Beobachter" },
741{ "Chair","Vorsitzender" }, 741{ "Chair","Vorsitzender" },
742{ "Not supported \non desktop!\n","" }, 742{ "Not supported \non desktop!\n","" },
743{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die vertikale Auswahl zum Drucken zu bestimmen,\nbitte einen vertikalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen.\n(Es wird danach direkt der Termin Dialog angezeigt\n - dort bitte auf Abbrechen klicken) " }, 743{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die vertikale Auswahl zum Drucken zu bestimmen,\nbitte einen vertikalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen.\n(Es wird danach direkt der Termin Dialog angezeigt\n - dort bitte auf Abbrechen klicken) " },
744{ "Date range: ","Datums Zeitspanne: " }, 744{ "Date range: ","Datums Zeitspanne: " },
745{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 745{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
746{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 746{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
747{ "Add / remove events","Add./entferne Termine" }, 747{ "Add / remove events","Add./entferne Termine" },
748{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 748{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
749{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 749{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
750{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 750{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
751{ "Overwrite","Überschreiben" }, 751{ "Overwrite","Überschreiben" },
752{ "Sync+save","Syncen+speichern" }, 752{ "Sync+save","Syncen+speichern" },
753{ "Default","Standard" }, 753{ "Default","Standard" },
754{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 754{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
755{ " %d items?"," %d Einträge?" }, 755{ " %d items?"," %d Einträge?" },
756{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 756{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
757{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 757{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
758{ "Current","Aktuelle" }, 758{ "Current","Aktuelle" },
759{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 759{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
760{ "All","Alle" }, 760{ "All","Alle" },
761{ "Data Loss Warning","Datenverlust Warnung" }, 761{ "Data Loss Warning","Datenverlust Warnung" },
762{ "Proceed","Weitermachen" }, 762{ "Proceed","Weitermachen" },
763{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 763{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
764{ "Filter disabled ","Filter abgeschaltet" }, 764{ "Filter disabled ","Filter abgeschaltet" },
765{ "Filter selected: ","Gewählter Filter: " }, 765{ "Filter selected: ","Gewählter Filter: " },
766{ "Toggle Cancel","Gecancelt ändern" }, 766{ "Toggle Cancel","Gecancelt ändern" },
767{ "&Toggle Cancel","Gecancel&t ändern" }, 767{ "&Toggle Cancel","Gecancel&t ändern" },
768{ "Configure Toolbar","Konfiguriere Toolbar" }, 768{ "Configure Toolbar","Konfiguriere Toolbar" },
769{ "Stretched TB","Gedehnte TB" }, 769{ "Stretched TB","Gedehnte TB" },
770{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 770{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
771{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 771{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
772{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 772{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
773{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 773{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
774{ "Imported file successfully","Datei erfolgreich importiert" }, 774{ "Imported file successfully","Datei erfolgreich importiert" },
775{ "Error importing file","Fehler beim Importieren der Datei" }, 775{ "Error importing file","Fehler beim Importieren der Datei" },
776{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 776{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
777{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 777{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
778{ "Overwrite!","Überschreiben!" }, 778{ "Overwrite!","Überschreiben!" },
779{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 779{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
780{ "Load backup filename","Lade Backup Dateiname" }, 780{ "Load backup filename","Lade Backup Dateiname" },
781{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 781{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
782{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 782{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
783{ "Save backup filename","Speichere Backup Dateiname" }, 783{ "Save backup filename","Speichere Backup Dateiname" },
784{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 784{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
785{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 785{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
786{ "Details of attendee","Teilnehmerdetails" }, 786{ "Details of attendee","Teilnehmerdetails" },
787{ "Work phone:\n","Telefon Arbeit:\n" }, 787{ "Work phone:\n","Telefon Arbeit:\n" },
788{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 788{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
789{ "Home phone:\n","Telefon privat:\n" }, 789{ "Home phone:\n","Telefon privat:\n" },
790{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 790{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
791{ "Email:\n","Email:\n" }, 791{ "Email:\n","Email:\n" },
792{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 792{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
793{ "Audio Al.: ","Audio Al.: " }, 793{ "Audio Al.: ","Audio Al.: " },
794{ "Proc.Al.: ","Proz.Al.: " }, 794{ "Proc.Al.: ","Proz.Al.: " },
795{ "No sound set","Kein Sound definiert" }, 795{ "No sound set","Kein Sound definiert" },
796{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 796{ "*.wav|Wav Files","*.wav|Wav Dateien" },
797{ "No program set","Kein Programm definiert" }, 797{ "No program set","Kein Programm definiert" },
798{ "Running '%1'","Ausführen '%1'" }, 798{ "Running '%1'","Ausführen '%1'" },
799{ "Playing '%1'","Abspielen '%1'" }, 799{ "Playing '%1'","Abspielen '%1'" },
800{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 800{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
801{ "Load!","Laden!" }, 801{ "Load!","Laden!" },
802{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 802{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
803{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 803{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
804{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 804{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
805{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 805{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
806{ "Features + hints...","Eigenschaften + Tipps..." }, 806{ "Features + hints...","Eigenschaften + Tipps..." },
807{ "User translation...","Benutzer Übersetzung..." }, 807{ "User translation...","Benutzer Übersetzung..." },
808{ "Sync HowTo...","Synchronisation HowTo..." }, 808{ "Sync HowTo...","Synchronisation HowTo..." },
809{ "Print calendar...","Drucke Kalender..." }, 809{ "Print calendar...","Drucke Kalender..." },
810{ "Anniversary","Jahrestag" }, 810{ "Anniversary","Jahrestag" },
811{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 811{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
812{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 812{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
813{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 813{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
814{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 814{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
815{ "<b>Access: </b>","<b>Zugriff: </b>" }, 815{ "<b>Access: </b>","<b>Zugriff: </b>" },
816{ "(%1 min before)","(%1 min vorher)" }, 816{ "(%1 min before)","(%1 min vorher)" },
817{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 817{ "<b>Categories: </b>","<b>Kategorien: </b>" },
818{ "Save Journal/Description...","Speichere Journal/Details..." }, 818{ "Save Journal/Description...","Speichere Journal/Details..." },
819{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 819{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
820{ "Continue","Weitermachen" }, 820{ "Continue","Weitermachen" },
821{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 821{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
822{ "Attendee:","Teilnehmer:" }, 822{ "Attendee:","Teilnehmer:" },
823{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 823{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
824{ "On day ","Am Tag " }, 824{ "On day ","Am Tag " },
825{ "%1 of ","%1 des Monats" }, 825{ "%1 of ","%1 des Monats" },
826{ "%1 of the year","%1 des Jahres" }, 826{ "%1 of the year","%1 des Jahres" },
827{ "Anonymous","Anonymo" }, 827{ "Anonymous","Anonymo" },
828{ "nobody@nowhere","niemand@nirgendwo" }, 828{ "nobody@nowhere","niemand@nirgendwo" },
829{ "calendar.html","calendar.html" }, 829{ "calendar.html","calendar.html" },
830{ " Local Time"," Locale Zeit" }, 830{ " Local Time"," Lokale Zeit" },
831{ "Unknown Name","Unbekannter Name" }, 831{ "Unknown Name","Unbekannter Name" },
832{ "unknown@nowhere","unbekannt@nirgendwo" }, 832{ "unknown@nowhere","unbekannt@nirgendwo" },
833{ "Beam via IR!","Beam via IR!" }, 833{ "Beam via IR!","Beam via IR!" },
834{ "Next Month","Nächster Monat" }, 834{ "Next Month","Nächster Monat" },
835{ "Prio","Prio" }, 835{ "Prio","Prio" },
836{ "Reparent Todo","Mache Sub-Todo" }, 836{ "Reparent Todo","Mache Sub-Todo" },
837{ "tomorrow","morgen" }, 837{ "tomorrow","morgen" },
838{ "today","heute" }, 838{ "today","heute" },
839{ "yesterday","gestern" }, 839{ "yesterday","gestern" },
840{ "Ok","Ok" }, 840{ "Ok","Ok" },
841{ "Ok+Agenda","Ok+Agenda" }, 841{ "Ok+Agenda","Ok+Agenda" },
842{ "Email","Email" }, 842{ "Email","Email" },
843{ "RSVP","RSVP" }, 843{ "RSVP","RSVP" },
844{ "Email:","Email:" }, 844{ "Email:","Email:" },
845{ "Appointment Time ","Termin Zeit " }, 845{ "Appointment Time ","Termin Zeit " },
846{ "2","2" }, 846{ "2","2" },
847{ "3","3" }, 847{ "3","3" },
848{ "4","4" }, 848{ "4","4" },
849{ " 0 %"," 0 %" }, 849{ " 0 %"," 0 %" },
850{ " 20 %"," 20 %" }, 850{ " 20 %"," 20 %" },
851{ " 40 %"," 40 %" }, 851{ " 40 %"," 40 %" },
852{ " 60 %"," 60 %" }, 852{ " 60 %"," 60 %" },
853{ " 80 %"," 80 %" }, 853{ " 80 %"," 80 %" },
854{ "100 %","100 %" }, 854{ "100 %","100 %" },
855{ "Filter","Filter" }, 855{ "Filter","Filter" },
856{ "Configure","Konfiguriere" }, 856{ "Configure","Konfiguriere" },
857{ "What's Next","What's Next" }, 857{ "What's Next","What's Next" },
858{ "Complete calendar...","Kompletten Kalender..." }, 858{ "Complete calendar...","Kompletten Kalender..." },
859{ "Filtered calendar...","Gefilterten Kalender..." }, 859{ "Filtered calendar...","Gefilterten Kalender..." },
860{ "Export to phone","Exportiere zum Handy" }, 860{ "Export to phone","Exportiere zum Handy" },
861{ "Beam receive enabled","Beam Empfang an" }, 861{ "Beam receive enabled","Beam Empfang an" },
862{ "What's new?","Was ist neu?" }, 862{ "What's new?","Was ist neu?" },
863{ "FAQ...","FAQ..." }, 863{ "FAQ...","FAQ..." },
864{ "Licence...","Licence..." }, 864{ "Licence...","Licence..." },
865{ "What's This?","What's This?" }, 865{ "What's This?","What's This?" },
866{ "&Edit...","&Editiere..." }, 866{ "&Edit...","&Editiere..." },
867{ "Oktober","Oktober" }, 867{ "Oktober","Oktober" },
868{ "Title","Titel" }, 868{ "Title","Titel" },
869{ "%1 %","%1 %" }, 869{ "%1 %","%1 %" },
870{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 870{ "Enable Pi-Sync","Schalte Pi-Sync an" },
871{ "Import!","Importiere!" }, 871{ "Import!","Importiere!" },
872{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 872{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
873{ "Export to phone options","Export ans Handy Optionen" }, 873{ "Export to phone options","Export ans Handy Optionen" },
874{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 874{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
875{ "I/O device: ","I/O device: " }, 875{ "I/O device: ","I/O device: " },
876{ "Connection: ","Connection: " }, 876{ "Connection: ","Connection: " },
877{ "Model(opt.): ","Model(opt.): " }, 877{ "Model(opt.): ","Model(opt.): " },
878{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 878{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
879{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 879{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
880{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" }, 880{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" },
881{ "Export to mobile phone!","Exportiere auf das Handy!" }, 881{ "Export to mobile phone!","Exportiere auf das Handy!" },
882{ "Export complete calendar","Exportiere kompletten Kalender" }, 882{ "Export complete calendar","Exportiere kompletten Kalender" },
883{ "Writing to phone...","Sende Daten ans Handy..." }, 883{ "Writing to phone...","Sende Daten ans Handy..." },
884{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 884{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
885{ "Retry","Nochmal versuchen" }, 885{ "Retry","Nochmal versuchen" },
886{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 886{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
887{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 887{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
888{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 888{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
889{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 889{ "Export filtered calendar","Exportiere gefilterten Kalender" },
890{ "Preferences","Vorlieben" }, 890{ "Preferences","Vorlieben" },
891{ "Global","Global" }, 891{ "Global","Global" },
892{ "Phone","Phone" }, 892{ "Phone","Phone" },
893{ "SMS","SMS" }, 893{ "SMS","SMS" },
894{ "Fax","Fax" }, 894{ "Fax","Fax" },
895{ "Pager","Pager" }, 895{ "Pager","Pager" },
896{ "SIP","SIP" }, 896{ "SIP","SIP" },
897{ "Italian","Italienisch" }, 897{ "Italian","Italienisch" },
898{ "24:00","24:00" }, 898{ "24:00","24:00" },
899{ "12:00am","12:00am" }, 899{ "12:00am","12:00am" },
900{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 900{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
901{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 901{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
902{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 902{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
903{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 903{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
904{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 904{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
905{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 905{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
906{ "Used Mail Client","Benutzter Mail Client" }, 906{ "Used Mail Client","Benutzter Mail Client" },
907{ "Channel:","Channel:" }, 907{ "Channel:","Channel:" },
908{ "Message:","Message:" }, 908{ "Message:","Message:" },
909{ "Parameters:","Parameter:" }, 909{ "Parameters:","Parameter:" },
910{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 910{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
911{ "extra Message:","extra Message:" }, 911{ "extra Message:","extra Message:" },
912{ "extra Parameters:","extra Parameter:" }, 912{ "extra Parameters:","extra Parameter:" },
913{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 913{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
914{ "External Apps.","Externe Appl." }, 914{ "External Apps.","Externe Appl." },
915{ "24 hours","24 Std." }, 915{ "24 hours","24 Std." },
916{ "3 hours","3 Std." }, 916{ "3 hours","3 Std." },
917{ "1 hour","1 Std." }, 917{ "1 hour","1 Std." },
918{ "15 minutes","15 Min." }, 918{ "15 minutes","15 Min." },
919{ "5 minutes","5 Min." }, 919{ "5 minutes","5 Min." },
920{ "1 minute","1 Min." }, 920{ "1 minute","1 Min." },
921{ "23","23" }, 921{ "23","23" },
922{ "Mon 15","Mon 15" }, 922{ "Mon 15","Mon 15" },
923{ "Configure KO","Konfiguriere KO" }, 923{ "Configure KO","Konfiguriere KO" },
924{ "Event text","Termin Text" }, 924{ "Event text","Termin Text" },
925{ "ToDo","Todo" }, 925{ "ToDo","Todo" },
926{ "Today","Heute" }, 926{ "Today","Heute" },
927{ "What's Next View","What's Next Ansicht" }, 927{ "What's Next View","What's Next Ansicht" },
928{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 928{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
929{ "Alarm","Alarm" }, 929{ "Alarm","Alarm" },
930{ "Used %1 Client","Benutzter %1 Client" }, 930{ "Used %1 Client","Benutzter %1 Client" },
931{ "No email client installed","Kein Email Klient installiert" }, 931{ "No email client installed","Kein Email Klient installiert" },
932{ "Userdefined email client","Benutzerdef. Email Klient" }, 932{ "Userdefined email client","Benutzerdef. Email Klient" },
933{ "OM/Pi email client","OM/Pi Email Klient" }, 933{ "OM/Pi email client","OM/Pi Email Klient" },
934{ "Include in multiple ","Beziehe in multiple " }, 934{ "Include in multiple ","Beziehe in multiple " },
935{ "calendar ","Kalender " }, 935{ "calendar ","Kalender " },
936{ "addressbook ","Adressbuch " }, 936{ "addressbook ","Adressbuch " },
937{ "pwmanager","PWmanager" }, 937{ "pwmanager","PWmanager" },
938{ " sync"," Sync ein" }, 938{ " sync"," Sync ein" },
939{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 939{ "Write back synced data","Schreibe gesyncte Daten zurück" },
940{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 940{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
941{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 941{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
942{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 942{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
943{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 943{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
944{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 944{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
945{ "Help...","Hilfe..." }, 945{ "Help...","Hilfe..." },
946{ "Local file Cal:","Lokale Datei Kal:" }, 946{ "Local file Cal:","Lokale Datei Kal:" },
947{ "Local file ABook:","Lokale Datei ABuch:" }, 947{ "Local file ABook:","Lokale Datei ABuch:" },
948{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 948{ "Local file PWMgr:","Lokale Datei PWMgr:" },
949{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 949{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
950{ "Calendar:","Kalender:" }, 950{ "Calendar:","Kalender:" },
951{ "AddressBook:","AdressBuch:" }, 951{ "AddressBook:","AdressBuch:" },
952{ "PWManager:","PWManager:" }, 952{ "PWManager:","PWManager:" },
953{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 953{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
954{ "ssh/scp","ssh/scp" }, 954{ "ssh/scp","ssh/scp" },
955{ "ftp","ftp" }, 955{ "ftp","ftp" },
956{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 956{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
957{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 957{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
958{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 958{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
959{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 959{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
960{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 960{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
961{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 961{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
962{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 962{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
963{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 963{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
964{ "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" }, 964{ "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" },
965{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 965{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
966{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 966{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
967{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 967{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
968{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 968{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
969{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 969{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
970{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 970{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
971{ "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!" }, 971{ "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!" },
972{ "KDE-Pim Sync","KDE-Pim Sync" }, 972{ "KDE-Pim Sync","KDE-Pim Sync" },
973{ "Multiple profiles","Multi-Sync Profile" }, 973{ "Multiple profiles","Multi-Sync Profile" },
974{ "Device: ","Gerät: " }, 974{ "Device: ","Gerät: " },
975{ "Multiple sync started.","Multi-Sync gestartet." }, 975{ "Multiple sync started.","Multi-Sync gestartet." },
976{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 976{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
977{ "Turn filter on","Schalte Filter an" }, 977{ "Turn filter on","Schalte Filter an" },
978{ "Turn filter off","Schalte Filter aus" }, 978{ "Turn filter off","Schalte Filter aus" },
979{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 979{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
980{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 980{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
981{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 981{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
982{ "<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" }, 982{ "<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" },
983{ "<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" }, 983{ "<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" },
984{ "<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" }, 984{ "<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" },
985{ "<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" }, 985{ "<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" },
986{ "<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" }, 986{ "<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" },
987{ "<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" }, 987{ "<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" },
988{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 988{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
989{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 989{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
990{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 990{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
991{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 991{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
992{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 992{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
993{ "<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" }, 993{ "<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" },
994{ "<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" }, 994{ "<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" },
995{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 995{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
996{ "<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" }, 996{ "<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" },
997{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 997{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
998{ "<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" }, 998{ "<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" },
999{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 999{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1000{ "<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" }, 1000{ "<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" },
1001{ "<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" }, 1001{ "<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" },
1002{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1002{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1003{ "<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" }, 1003{ "<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" },
1004{ "<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" }, 1004{ "<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" },
1005{ "<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" }, 1005{ "<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" },
1006{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1006{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1007{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1007{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1008{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1008{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1009{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1009{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1010{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1010{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1011{ "<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" }, 1011{ "<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" },
1012{ "<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" }, 1012{ "<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" },
1013{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1013{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1014{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1014{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1015{ "<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" }, 1015{ "<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" },
1016{ "<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" }, 1016{ "<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" },
1017{ "<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" }, 1017{ "<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" },
1018{ "<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" }, 1018{ "<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" },
1019{ "<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" }, 1019{ "<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" },
1020{ "<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" }, 1020{ "<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" },
1021{ "<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" }, 1021{ "<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" },
1022{ "<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 " }, 1022{ "<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 " },
diff --git a/kaddressbook/kaimportoldialog.cpp b/kaddressbook/kaimportoldialog.cpp
index 7bb8bd8..2f794d6 100644
--- a/kaddressbook/kaimportoldialog.cpp
+++ b/kaddressbook/kaimportoldialog.cpp
@@ -1,419 +1,420 @@
1/* 1/*
2 This file is part of KAddressbook/Pi. 2 This file is part of KAddressbook/Pi.
3 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 3 Copyright (c) 2004 Lutz Rogowski <rogowski@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 <qprogressbar.h> 28#include <qprogressbar.h>
29#include <qprogressdialog.h>
29#include <qwidgetstack.h> 30#include <qwidgetstack.h>
30#include <qdatetime.h> 31#include <qdatetime.h>
31#include <qdir.h> 32#include <qdir.h>
32#include <qregexp.h> 33#include <qregexp.h>
33#include <qapplication.h> 34#include <qapplication.h>
34#include <qhbox.h> 35#include <qhbox.h>
35#include <qheader.h> 36#include <qheader.h>
36#include <qdatetime.h> 37#include <qdatetime.h>
37#include <qlistview.h> 38#include <qlistview.h>
38 39
39#include <kdebug.h> 40#include <kdebug.h>
40#include <klocale.h> 41#include <klocale.h>
41#include <kstandarddirs.h> 42#include <kstandarddirs.h>
42#include <kmessagebox.h> 43#include <kmessagebox.h>
43#include <kfiledialog.h> 44#include <kfiledialog.h>
44 45
45#include <libkdepim/categoryselectdialog.h> 46#include <libkdepim/categoryselectdialog.h>
46#include <libkdepim/kinputdialog.h> 47#include <libkdepim/kinputdialog.h>
47 48
48#include <libkcal/calendarlocal.h> 49#include <libkcal/calendarlocal.h>
49#include <libkcal/icalformat.h> 50#include <libkcal/icalformat.h>
50 51
51#include <kabc/addresseelist.h> 52#include <kabc/addresseelist.h>
52#include <kabc/phonenumber.h> 53#include <kabc/phonenumber.h>
53 54
54#include "kaimportoldialog.h" 55#include "kaimportoldialog.h"
55 56
56#include "../outport/msoutl9.h" 57#include "../outport/msoutl9.h"
57#include <ole2.h> 58#include <ole2.h>
58#include <comutil.h> 59#include <comutil.h>
59_Application gOlAppAB; 60_Application gOlAppAB;
60 61
61QDateTime mDdate2Qdtr( DATE dt) 62QDateTime mDdate2Qdtr( DATE dt)
62{ 63{
63 COleDateTime odt; 64 COleDateTime odt;
64 SYSTEMTIME st; 65 SYSTEMTIME st;
65 odt = dt; 66 odt = dt;
66 if ( odt.GetStatus() != 0 ) 67 if ( odt.GetStatus() != 0 )
67 return QDateTime(); 68 return QDateTime();
68 odt.GetAsSystemTime(st); 69 odt.GetAsSystemTime(st);
69 if ( st.wYear > 4000 ) // this program as a year 4000 bug! 70 if ( st.wYear > 4000 ) // this program as a year 4000 bug!
70 return QDateTime(); 71 return QDateTime();
71 // it seems so, that 1.1.4501 indicates: DATE invalid 72 // it seems so, that 1.1.4501 indicates: DATE invalid
72 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) ); 73 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) );
73 return qdt; 74 return qdt;
74} 75}
75 76
76class OLEListViewItem : public QCheckListItem 77class OLEListViewItem : public QCheckListItem
77{ 78{
78 public: 79 public:
79 OLEListViewItem( QListView *parent, QString text ) : 80 OLEListViewItem( QListView *parent, QString text ) :
80 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { ; }; 81 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { ; };
81 OLEListViewItem( QListViewItem *after, QString text ) : 82 OLEListViewItem( QListViewItem *after, QString text ) :
82 QCheckListItem( after, text, QCheckListItem::CheckBox ) { ; }; 83 QCheckListItem( after, text, QCheckListItem::CheckBox ) { ; };
83 ~OLEListViewItem() {}; 84 ~OLEListViewItem() {};
84 void setData( DWORD data ) {mData= data; }; 85 void setData( DWORD data ) {mData= data; };
85 DWORD data() { return mData ;}; 86 DWORD data() { return mData ;};
86 private: 87 private:
87 DWORD mData; 88 DWORD mData;
88}; 89};
89 90
90KAImportOLdialog::KAImportOLdialog( const QString &caption, 91KAImportOLdialog::KAImportOLdialog( const QString &caption,
91 KABC::AddressBook * aBook, QWidget *parent ) : 92 KABC::AddressBook * aBook, QWidget *parent ) :
92 KDialogBase( Plain, caption, User1 | Close, Ok, 93 KDialogBase( Plain, caption, User1 | Close, Ok,
93 parent, caption, true, false, i18n("Import!") ) 94 parent, caption, true, false, i18n("Import!") )
94{ 95{
95 QHBox * mw = new QHBox( this ); 96 QHBox * mw = new QHBox( this );
96 setMainWidget( mw ); 97 setMainWidget( mw );
97 mListView = new QListView( mw ); 98 mListView = new QListView( mw );
98 mListView->addColumn(i18n("Select Folder to import")); 99 mListView->addColumn(i18n("Select Folder to import"));
99 mListView->addColumn(i18n("Content Type")); 100 mListView->addColumn(i18n("Content Type"));
100 mABook = aBook; 101 mABook = aBook;
101 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply())); 102 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply()));
102 setupFolderView(); 103 setupFolderView();
103 resize( sizeHint().width()+50, sizeHint().height()+50 ); 104 resize( sizeHint().width()+50, sizeHint().height()+50 );
104} 105}
105 106
106KAImportOLdialog::~KAImportOLdialog() 107KAImportOLdialog::~KAImportOLdialog()
107{ 108{
108 109
109} 110}
110 111
111KABC::Addressee::List KAImportOLdialog::getAddressList() 112KABC::Addressee::List KAImportOLdialog::getAddressList()
112{ 113{
113 return mAList; 114 return mAList;
114} 115}
115void KAImportOLdialog::setupFolderView() 116void KAImportOLdialog::setupFolderView()
116{ 117{
117 SCODE sc = ::OleInitialize(NULL); 118 SCODE sc = ::OleInitialize(NULL);
118 if ( FAILED ( sc ) ) { 119 if ( FAILED ( sc ) ) {
119 KMessageBox::information(this,"OLE initialisation failed"); 120 KMessageBox::information(this,"OLE initialisation failed");
120 return; 121 return;
121 } 122 }
122 123
123 if(!gOlAppAB.CreateDispatch(_T("Outlook.Application"),NULL)){ 124 if(!gOlAppAB.CreateDispatch(_T("Outlook.Application"),NULL)){
124 KMessageBox::information(this,"Sorry, cannot access Outlook"); 125 KMessageBox::information(this,"Sorry, cannot access Outlook");
125 return ; 126 return ;
126 } 127 }
127 MAPIFolder mfInbox; 128 MAPIFolder mfInbox;
128 MAPIFolder mfRoot; 129 MAPIFolder mfRoot;
129 CString szName; 130 CString szName;
130 _NameSpace olNS; 131 _NameSpace olNS;
131 olNS = gOlAppAB.GetNamespace(_T("MAPI")); 132 olNS = gOlAppAB.GetNamespace(_T("MAPI"));
132 mfInbox = olNS.GetDefaultFolder(6); 133 mfInbox = olNS.GetDefaultFolder(6);
133 mfRoot = mfInbox.GetParent(); 134 mfRoot = mfInbox.GetParent();
134 szName = mfRoot.GetName(); 135 szName = mfRoot.GetName();
135 long iType = mfRoot.GetDefaultItemType(); 136 long iType = mfRoot.GetDefaultItemType();
136 QString mes; 137 QString mes;
137 mes = QString::fromUcs2( szName.GetBuffer() ); 138 mes = QString::fromUcs2( szName.GetBuffer() );
138 OLEListViewItem * root = new OLEListViewItem( mListView, mes ); 139 OLEListViewItem * root = new OLEListViewItem( mListView, mes );
139 mfRoot.m_lpDispatch->AddRef(); 140 mfRoot.m_lpDispatch->AddRef();
140 addFolder( root, mfRoot.m_lpDispatch ); 141 addFolder( root, mfRoot.m_lpDispatch );
141 root->setOpen( true ); 142 root->setOpen( true );
142 mListView->setSortColumn( 0 ); 143 mListView->setSortColumn( 0 );
143 mListView->sort( ); 144 mListView->sort( );
144} 145}
145 146
146 147
147void KAImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent) 148void KAImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent)
148{ 149{
149 MAPIFolder mfParent(dispParent), mfChild; 150 MAPIFolder mfParent(dispParent), mfChild;
150 _Folders folders; 151 _Folders folders;
151 _variant_t fndx((long)0); 152 _variant_t fndx((long)0);
152 CString szName; 153 CString szName;
153 long iType; 154 long iType;
154 OLEListViewItem* hChild; 155 OLEListViewItem* hChild;
155 156
156 folders = mfParent.GetFolders(); 157 folders = mfParent.GetFolders();
157 for(int i=1; i <= folders.GetCount(); ++i) 158 for(int i=1; i <= folders.GetCount(); ++i)
158 { 159 {
159 fndx = (long)i; 160 fndx = (long)i;
160 mfChild = folders.Item(fndx.Detach()); 161 mfChild = folders.Item(fndx.Detach());
161 mfChild.m_lpDispatch->AddRef(); 162 mfChild.m_lpDispatch->AddRef();
162 szName = mfChild.GetName(); 163 szName = mfChild.GetName();
163 iType = mfChild.GetDefaultItemType(); 164 iType = mfChild.GetDefaultItemType();
164 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) ); 165 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) );
165 if ( iType != 2) 166 if ( iType != 2)
166 hChild->setEnabled( false ); 167 hChild->setEnabled( false );
167 QString ts; 168 QString ts;
168 switch( iType ) { 169 switch( iType ) {
169 case 0: 170 case 0:
170 ts = i18n("Mail"); 171 ts = i18n("Mail");
171 break; 172 break;
172 case 1: 173 case 1:
173 ts = i18n("Calendar"); 174 ts = i18n("Calendar");
174 break; 175 break;
175 case 2: 176 case 2:
176 ts = i18n("Contacts"); 177 ts = i18n("Contacts");
177 break; 178 break;
178 case 3: 179 case 3:
179 ts = i18n("Todos"); 180 ts = i18n("Todos");
180 break; 181 break;
181 case 4: 182 case 4:
182 ts = i18n("Journals"); 183 ts = i18n("Journals");
183 break; 184 break;
184 case 5: 185 case 5:
185 ts = i18n("Notes"); 186 ts = i18n("Notes");
186 break; 187 break;
187 default: 188 default:
188 ts = i18n("Unknown"); 189 ts = i18n("Unknown");
189 } 190 }
190 hChild->setText( 1,ts); 191 hChild->setText( 1,ts);
191 hChild->setData( (DWORD) mfChild.m_lpDispatch ); 192 hChild->setData( (DWORD) mfChild.m_lpDispatch );
192 mfChild.m_lpDispatch->AddRef(); 193 mfChild.m_lpDispatch->AddRef();
193 addFolder(hChild, mfChild.m_lpDispatch); 194 addFolder(hChild, mfChild.m_lpDispatch);
194 } 195 }
195} 196}
196 197
197void KAImportOLdialog::slotApply() 198void KAImportOLdialog::slotApply()
198{ 199{
199 importedItems = 0; 200 importedItems = 0;
200 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild(); 201 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild();
201 while ( child ) { 202 while ( child ) {
202 if ( child->isOn() ) 203 if ( child->isOn() )
203 readContactData( child->data() ); 204 readContactData( child->data() );
204 child = (OLEListViewItem*) child->itemBelow(); 205 child = (OLEListViewItem*) child->itemBelow();
205 } 206 }
206 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems); 207 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems);
207 KMessageBox::information(this,mes); 208 KMessageBox::information(this,mes);
208} 209}
209void KAImportOLdialog::readContactData( DWORD folder ) 210void KAImportOLdialog::readContactData( DWORD folder )
210{ 211{
211 212
212 LPDISPATCH dispItem = (LPDISPATCH)folder; 213 LPDISPATCH dispItem = (LPDISPATCH)folder;
213 dispItem->AddRef(); 214 dispItem->AddRef();
214 MAPIFolder mf(dispItem); 215 MAPIFolder mf(dispItem);
215 mf.m_lpDispatch->AddRef(); 216 mf.m_lpDispatch->AddRef();
216 _Items folderItems; 217 _Items folderItems;
217 _variant_t indx((long)0); 218 _variant_t indx((long)0);
218 LPDISPATCH itm; 219 LPDISPATCH itm;
219 int i; 220 int i;
220 folderItems = mf.GetItems(); 221 folderItems = mf.GetItems();
221 QProgressBar bar( folderItems.GetCount(),0 ); 222 QProgressDialog bar( i18n("Importing contact data"),i18n("Abort"), folderItems.GetCount(),this);
222 bar.setCaption (i18n("Importing - close to abort!") ); 223 bar.setCaption (i18n("Importing!") );
223 int h = bar.sizeHint().height() ; 224 int h = bar.sizeHint().height() ;
224 int w = 300; 225 int w = 300;
225 int dw = QApplication::desktop()->width(); 226 int dw = QApplication::desktop()->width();
226 int dh = QApplication::desktop()->height(); 227 int dh = QApplication::desktop()->height();
227 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 228 //bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
228 bar.show(); 229 bar.show();
229 for(i=1; i <= folderItems.GetCount(); ++i) 230 for(i=1; i <= folderItems.GetCount(); ++i)
230 { 231 {
231 qApp->processEvents(); 232 qApp->processEvents();
232 if ( ! bar.isVisible() ) 233 if ( ! bar.isVisible() )
233 return ; 234 return ;
234 bar.setProgress( i ); 235 bar.setProgress( i );
235 indx = (long)i; 236 indx = (long)i;
236 itm = folderItems.Item(indx.Detach()); 237 itm = folderItems.Item(indx.Detach());
237 _ContactItem * pItem = (_ContactItem *)&itm; 238 _ContactItem * pItem = (_ContactItem *)&itm;
238 ol2kapiContact( pItem ); 239 ol2kapiContact( pItem );
239 itm->Release(); 240 itm->Release();
240 } 241 }
241} 242}
242void KAImportOLdialog::slotOk() 243void KAImportOLdialog::slotOk()
243{ 244{
244 QDialog::accept(); 245 QDialog::accept();
245} 246}
246 247
247void KAImportOLdialog::ol2kapiContact( _ContactItem * aItem ) 248void KAImportOLdialog::ol2kapiContact( _ContactItem * aItem )
248{ 249{
249 KABC::Addressee addressee; 250 KABC::Addressee addressee;
250 251
251 addressee.setUid( QString::fromUcs2(aItem->GetEntryID().GetBuffer())); 252 addressee.setUid( QString::fromUcs2(aItem->GetEntryID().GetBuffer()));
252 //GetLastModificationTime() 253 //GetLastModificationTime()
253 //addressee.setName( const QString &name ); 254 //addressee.setName( const QString &name );
254 //addressee.setFormattedName( const QString &formattedName ); 255 //addressee.setFormattedName( const QString &formattedName );
255 addressee.setFamilyName( QString::fromUcs2(aItem->GetLastName().GetBuffer()) ); 256 addressee.setFamilyName( QString::fromUcs2(aItem->GetLastName().GetBuffer()) );
256 addressee.setGivenName( QString::fromUcs2(aItem->GetFirstName().GetBuffer()) ); 257 addressee.setGivenName( QString::fromUcs2(aItem->GetFirstName().GetBuffer()) );
257 addressee.setAdditionalName( QString::fromUcs2(aItem->GetMiddleName().GetBuffer()) ); 258 addressee.setAdditionalName( QString::fromUcs2(aItem->GetMiddleName().GetBuffer()) );
258 addressee.setPrefix(QString::fromUcs2(aItem->GetTitle().GetBuffer()) ); 259 addressee.setPrefix(QString::fromUcs2(aItem->GetTitle().GetBuffer()) );
259 addressee.setSuffix( QString::fromUcs2(aItem->GetSuffix().GetBuffer()) ); 260 addressee.setSuffix( QString::fromUcs2(aItem->GetSuffix().GetBuffer()) );
260 addressee.setNickName( QString::fromUcs2(aItem->GetNickName().GetBuffer()) ); 261 addressee.setNickName( QString::fromUcs2(aItem->GetNickName().GetBuffer()) );
261 QDateTime dtb = mDdate2Qdtr(aItem->GetBirthday()); 262 QDateTime dtb = mDdate2Qdtr(aItem->GetBirthday());
262 if ( dtb.isValid() ) 263 if ( dtb.isValid() )
263 addressee.setBirthday( mDdate2Qdtr(aItem->GetBirthday())); 264 addressee.setBirthday( mDdate2Qdtr(aItem->GetBirthday()));
264 265
265 //QString::fromUcs2(aItem->.GetBuffer()) 266 //QString::fromUcs2(aItem->.GetBuffer())
266 //addressee.setMailer( const QString &mailer ); 267 //addressee.setMailer( const QString &mailer );
267 //addressee.setTimeZone( const TimeZone &timeZone ); 268 //addressee.setTimeZone( const TimeZone &timeZone );
268 //addressee.setGeo( const Geo &geo ); 269 //addressee.setGeo( const Geo &geo );
269 //addressee.setTitle( QString::fromUcs2(aItem->GetJobTitle().GetBuffer()) );// titel is the prefix 270 //addressee.setTitle( QString::fromUcs2(aItem->GetJobTitle().GetBuffer()) );// titel is the prefix
270 addressee.setRole( QString::fromUcs2(aItem->GetJobTitle().GetBuffer()) ); 271 addressee.setRole( QString::fromUcs2(aItem->GetJobTitle().GetBuffer()) );
271 addressee.setOrganization( QString::fromUcs2(aItem->GetCompanyName().GetBuffer()).replace( QRegExp("\\r"), "") ); 272 addressee.setOrganization( QString::fromUcs2(aItem->GetCompanyName().GetBuffer()).replace( QRegExp("\\r"), "") );
272 QString notesStr = QString::fromUcs2(aItem->GetBody().GetBuffer()); 273 QString notesStr = QString::fromUcs2(aItem->GetBody().GetBuffer());
273 notesStr.replace( QRegExp("\\r"), ""); 274 notesStr.replace( QRegExp("\\r"), "");
274 275
275 addressee.setProductId( QString::fromUcs2(aItem->GetCustomerID().GetBuffer()) ); 276 addressee.setProductId( QString::fromUcs2(aItem->GetCustomerID().GetBuffer()) );
276 //addressee.setRevision( const QDateTime &revision ); 277 //addressee.setRevision( const QDateTime &revision );
277 // addressee.setSortString( const QString &sortString ); 278 // addressee.setSortString( const QString &sortString );
278 addressee.setUrl( QString::fromUcs2(aItem->GetWebPage().GetBuffer()) ); 279 addressee.setUrl( QString::fromUcs2(aItem->GetWebPage().GetBuffer()) );
279 280
280 QString tempS; 281 QString tempS;
281 tempS = QString::fromUcs2(aItem->GetNetMeetingAlias().GetBuffer())+" AT SERVER: " +QString::fromUcs2(aItem->GetNetMeetingServer().GetBuffer()); 282 tempS = QString::fromUcs2(aItem->GetNetMeetingAlias().GetBuffer())+" AT SERVER: " +QString::fromUcs2(aItem->GetNetMeetingServer().GetBuffer());
282 if ( tempS.length() > 12 ) 283 if ( tempS.length() > 12 )
283 addressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", tempS ); 284 addressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", tempS );
284 tempS = QString::fromUcs2(aItem->GetSpouse().GetBuffer()); 285 tempS = QString::fromUcs2(aItem->GetSpouse().GetBuffer());
285 if ( !tempS.isEmpty() ) 286 if ( !tempS.isEmpty() )
286 addressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", tempS ); 287 addressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", tempS );
287 tempS = QString::fromUcs2(aItem->GetManagerName().GetBuffer()); 288 tempS = QString::fromUcs2(aItem->GetManagerName().GetBuffer());
288 if ( !tempS.isEmpty() ) 289 if ( !tempS.isEmpty() )
289 addressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", tempS ); 290 addressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", tempS );
290 tempS = QString::fromUcs2(aItem->GetAssistantName().GetBuffer()); 291 tempS = QString::fromUcs2(aItem->GetAssistantName().GetBuffer());
291 if ( !tempS.isEmpty() ) 292 if ( !tempS.isEmpty() )
292 addressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", tempS ); 293 addressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", tempS );
293 tempS = QString::fromUcs2(aItem->GetDepartment().GetBuffer()); 294 tempS = QString::fromUcs2(aItem->GetDepartment().GetBuffer());
294 if ( !tempS.isEmpty() ) 295 if ( !tempS.isEmpty() )
295 addressee.insertCustom( "KADDRESSBOOK", "X-Department", tempS ); 296 addressee.insertCustom( "KADDRESSBOOK", "X-Department", tempS );
296 tempS = QString::fromUcs2(aItem->GetOfficeLocation().GetBuffer()).replace( QRegExp("\\r"), ""); 297 tempS = QString::fromUcs2(aItem->GetOfficeLocation().GetBuffer()).replace( QRegExp("\\r"), "");
297 if ( !tempS.isEmpty() ) 298 if ( !tempS.isEmpty() )
298 addressee.insertCustom( "KADDRESSBOOK", "X-Office",tempS ); 299 addressee.insertCustom( "KADDRESSBOOK", "X-Office",tempS );
299 tempS = QString::fromUcs2(aItem->GetProfession().GetBuffer()); 300 tempS = QString::fromUcs2(aItem->GetProfession().GetBuffer());
300 if ( !tempS.isEmpty() ) 301 if ( !tempS.isEmpty() )
301 addressee.insertCustom( "KADDRESSBOOK", "X-Profession", tempS ); 302 addressee.insertCustom( "KADDRESSBOOK", "X-Profession", tempS );
302 dtb = mDdate2Qdtr(aItem->GetAnniversary()); 303 dtb = mDdate2Qdtr(aItem->GetAnniversary());
303 if (dtb.isValid() ) { 304 if (dtb.isValid() ) {
304 QString dt = KGlobal::locale()->formatDate( dtb.date() , true, KLocale::ISODate); 305 QString dt = KGlobal::locale()->formatDate( dtb.date() , true, KLocale::ISODate);
305 addressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 306 addressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
306 } 307 }
307 int sec = aItem->GetSensitivity() ; 308 int sec = aItem->GetSensitivity() ;
308 if ( sec > 1 )// mapping pers -> private 309 if ( sec > 1 )// mapping pers -> private
309 --sec; 310 --sec;
310 addressee.setSecrecy( sec ); 311 addressee.setSecrecy( sec );
311 //addressee.setLogo( const Picture &logo ); 312 //addressee.setLogo( const Picture &logo );
312 //addressee.setPhoto( const Picture &photo ); 313 //addressee.setPhoto( const Picture &photo );
313 //addressee.setSound( const Sound &sound ); 314 //addressee.setSound( const Sound &sound );
314 //addressee.setAgent( const Agent &agent ); 315 //addressee.setAgent( const Agent &agent );
315 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("\\r"), ""); 316 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("\\r"), "");
316 cat = cat.replace( QRegExp("; "), ";"); 317 cat = cat.replace( QRegExp("; "), ";");
317 addressee.setCategories( QStringList::split( ";", cat )); 318 addressee.setCategories( QStringList::split( ";", cat ));
318 319
319 QString phoneS; 320 QString phoneS;
320 321
321 phoneS = QString::fromUcs2( aItem->GetAssistantTelephoneNumber().GetBuffer()); 322 phoneS = QString::fromUcs2( aItem->GetAssistantTelephoneNumber().GetBuffer());
322 if ( ! phoneS.isEmpty()) 323 if ( ! phoneS.isEmpty())
323 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Voice ) ); 324 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Voice ) );
324 phoneS = QString::fromUcs2( aItem->GetBusinessTelephoneNumber().GetBuffer()); 325 phoneS = QString::fromUcs2( aItem->GetBusinessTelephoneNumber().GetBuffer());
325 if ( ! phoneS.isEmpty()) 326 if ( ! phoneS.isEmpty())
326 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work ) ); 327 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work ) );
327 phoneS = QString::fromUcs2( aItem->GetBusiness2TelephoneNumber().GetBuffer()); 328 phoneS = QString::fromUcs2( aItem->GetBusiness2TelephoneNumber().GetBuffer());
328 if ( ! phoneS.isEmpty()) 329 if ( ! phoneS.isEmpty())
329 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work ) ); 330 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work ) );
330 phoneS = QString::fromUcs2( aItem->GetBusinessFaxNumber().GetBuffer()); 331 phoneS = QString::fromUcs2( aItem->GetBusinessFaxNumber().GetBuffer());
331 if ( ! phoneS.isEmpty()) 332 if ( ! phoneS.isEmpty())
332 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Fax ) ); 333 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Fax ) );
333 phoneS = QString::fromUcs2( aItem->GetCarTelephoneNumber().GetBuffer()); 334 phoneS = QString::fromUcs2( aItem->GetCarTelephoneNumber().GetBuffer());
334 if ( ! phoneS.isEmpty()) 335 if ( ! phoneS.isEmpty())
335 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Car ) ); 336 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Car ) );
336 phoneS = QString::fromUcs2( aItem->GetHomeTelephoneNumber().GetBuffer()); 337 phoneS = QString::fromUcs2( aItem->GetHomeTelephoneNumber().GetBuffer());
337 if ( ! phoneS.isEmpty()) 338 if ( ! phoneS.isEmpty())
338 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home ) ); 339 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home ) );
339 phoneS = QString::fromUcs2( aItem->GetHome2TelephoneNumber().GetBuffer()); 340 phoneS = QString::fromUcs2( aItem->GetHome2TelephoneNumber().GetBuffer());
340 if ( ! phoneS.isEmpty()) 341 if ( ! phoneS.isEmpty())
341 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home ) ); 342 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home ) );
342 phoneS = QString::fromUcs2( aItem->GetHomeFaxNumber().GetBuffer()); 343 phoneS = QString::fromUcs2( aItem->GetHomeFaxNumber().GetBuffer());
343 if ( ! phoneS.isEmpty()) 344 if ( ! phoneS.isEmpty())
344 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home + KABC::PhoneNumber::Fax ) ); 345 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Home + KABC::PhoneNumber::Fax ) );
345 phoneS = QString::fromUcs2( aItem->GetISDNNumber().GetBuffer()); 346 phoneS = QString::fromUcs2( aItem->GetISDNNumber().GetBuffer());
346 if ( ! phoneS.isEmpty()) 347 if ( ! phoneS.isEmpty())
347 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Isdn ) ); 348 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Isdn ) );
348 phoneS = QString::fromUcs2( aItem->GetMobileTelephoneNumber().GetBuffer()); 349 phoneS = QString::fromUcs2( aItem->GetMobileTelephoneNumber().GetBuffer());
349 if ( ! phoneS.isEmpty()) 350 if ( ! phoneS.isEmpty())
350 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Cell ) ); 351 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Cell ) );
351 phoneS = QString::fromUcs2( aItem->GetOtherFaxNumber().GetBuffer()); 352 phoneS = QString::fromUcs2( aItem->GetOtherFaxNumber().GetBuffer());
352 if ( ! phoneS.isEmpty()) 353 if ( ! phoneS.isEmpty())
353 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Fax ) ); 354 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Fax ) );
354 phoneS = QString::fromUcs2( aItem->GetOtherTelephoneNumber().GetBuffer()); 355 phoneS = QString::fromUcs2( aItem->GetOtherTelephoneNumber().GetBuffer());
355 if ( ! phoneS.isEmpty()) 356 if ( ! phoneS.isEmpty())
356 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Voice ) ); 357 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Voice ) );
357 phoneS = QString::fromUcs2( aItem->GetPagerNumber().GetBuffer()); 358 phoneS = QString::fromUcs2( aItem->GetPagerNumber().GetBuffer());
358 if ( ! phoneS.isEmpty()) 359 if ( ! phoneS.isEmpty())
359 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Pager ) ); 360 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Pager ) );
360 phoneS = QString::fromUcs2( aItem->GetPrimaryTelephoneNumber().GetBuffer()); 361 phoneS = QString::fromUcs2( aItem->GetPrimaryTelephoneNumber().GetBuffer());
361 if ( ! phoneS.isEmpty()) 362 if ( ! phoneS.isEmpty())
362 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Pref ) ); 363 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Pref ) );
363 phoneS = QString::fromUcs2( aItem->GetTTYTDDTelephoneNumber().GetBuffer()); 364 phoneS = QString::fromUcs2( aItem->GetTTYTDDTelephoneNumber().GetBuffer());
364 if ( ! phoneS.isEmpty()) 365 if ( ! phoneS.isEmpty())
365 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Modem ) ); 366 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Modem ) );
366 phoneS = QString::fromUcs2( aItem->GetTelexNumber().GetBuffer()); 367 phoneS = QString::fromUcs2( aItem->GetTelexNumber().GetBuffer());
367 if ( ! phoneS.isEmpty()) 368 if ( ! phoneS.isEmpty())
368 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Fax + KABC::PhoneNumber::Bbs ) ); 369 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Fax + KABC::PhoneNumber::Bbs ) );
369 phoneS = QString::fromUcs2( aItem->GetCompanyMainTelephoneNumber().GetBuffer()); 370 phoneS = QString::fromUcs2( aItem->GetCompanyMainTelephoneNumber().GetBuffer());
370 if ( ! phoneS.isEmpty()) 371 if ( ! phoneS.isEmpty())
371 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Pref ) ); 372 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Work + KABC::PhoneNumber::Pref ) );
372 phoneS = QString::fromUcs2( aItem->GetRadioTelephoneNumber().GetBuffer()); 373 phoneS = QString::fromUcs2( aItem->GetRadioTelephoneNumber().GetBuffer());
373 if ( ! phoneS.isEmpty()) 374 if ( ! phoneS.isEmpty())
374 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Video ) ); 375 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Video ) );
375 phoneS = QString::fromUcs2( aItem->GetCallbackTelephoneNumber().GetBuffer()); 376 phoneS = QString::fromUcs2( aItem->GetCallbackTelephoneNumber().GetBuffer());
376 if ( ! phoneS.isEmpty()) 377 if ( ! phoneS.isEmpty())
377 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Voice + KABC::PhoneNumber::Pref ) ); 378 addressee.insertPhoneNumber( KABC::PhoneNumber(phoneS ,KABC::PhoneNumber::Voice + KABC::PhoneNumber::Pref ) );
378 379
379 bool preferred = true; 380 bool preferred = true;
380 phoneS = QString::fromUcs2( aItem->GetEmail1Address().GetBuffer()); 381 phoneS = QString::fromUcs2( aItem->GetEmail1Address().GetBuffer());
381 if ( ! phoneS.isEmpty()) { 382 if ( ! phoneS.isEmpty()) {
382 addressee.insertEmail(phoneS , preferred ); 383 addressee.insertEmail(phoneS , preferred );
383 preferred = false; 384 preferred = false;
384 } 385 }
385 phoneS = QString::fromUcs2( aItem->GetEmail2Address().GetBuffer()); 386 phoneS = QString::fromUcs2( aItem->GetEmail2Address().GetBuffer());
386 if ( ! phoneS.isEmpty()) { 387 if ( ! phoneS.isEmpty()) {
387 addressee.insertEmail(phoneS , preferred ); 388 addressee.insertEmail(phoneS , preferred );
388 preferred = false; 389 preferred = false;
389 } 390 }
390 phoneS = QString::fromUcs2( aItem->GetEmail3Address().GetBuffer()); 391 phoneS = QString::fromUcs2( aItem->GetEmail3Address().GetBuffer());
391 if ( ! phoneS.isEmpty()) { 392 if ( ! phoneS.isEmpty()) {
392 addressee.insertEmail(phoneS , preferred ); 393 addressee.insertEmail(phoneS , preferred );
393 preferred = false; 394 preferred = false;
394 } 395 }
395 // is this the number of the preferred email? 396 // is this the number of the preferred email?
396 //long GetSelectedMailingAddress();??? 397 //long GetSelectedMailingAddress();???
397 398
398 KABC::Address addressHome; 399 KABC::Address addressHome;
399 KABC::Address* addressAdd = &addressHome; 400 KABC::Address* addressAdd = &addressHome;
400 bool insert = false; 401 bool insert = false;
401 phoneS = QString::fromUcs2( aItem->GetHomeAddressCountry().GetBuffer()); 402 phoneS = QString::fromUcs2( aItem->GetHomeAddressCountry().GetBuffer());
402 phoneS.replace( QRegExp("\\r"), ""); 403 phoneS.replace( QRegExp("\\r"), "");
403 if ( ! phoneS.isEmpty()) { 404 if ( ! phoneS.isEmpty()) {
404 addressAdd->setCountry(phoneS ); 405 addressAdd->setCountry(phoneS );
405 insert = true; 406 insert = true;
406 } 407 }
407 phoneS = QString::fromUcs2( aItem->GetHomeAddressState().GetBuffer()); 408 phoneS = QString::fromUcs2( aItem->GetHomeAddressState().GetBuffer());
408 phoneS.replace( QRegExp("\\r"), ""); 409 phoneS.replace( QRegExp("\\r"), "");
409 if ( ! phoneS.isEmpty()) { 410 if ( ! phoneS.isEmpty()) {
410 addressAdd->setRegion(phoneS ); 411 addressAdd->setRegion(phoneS );
411 insert = true; 412 insert = true;
412 } 413 }
413 phoneS = QString::fromUcs2( aItem->GetHomeAddressCity().GetBuffer()); 414 phoneS = QString::fromUcs2( aItem->GetHomeAddressCity().GetBuffer());
414 phoneS.replace( QRegExp("\\r"), ""); 415 phoneS.replace( QRegExp("\\r"), "");
415 if ( ! phoneS.isEmpty()) { 416 if ( ! phoneS.isEmpty()) {
416 addressAdd->setLocality(phoneS ); 417 addressAdd->setLocality(phoneS );
417 insert = true; 418 insert = true;
418 } 419 }
419 phoneS = QString::fromUcs2( aItem->GetHomeAddressPostalCode().GetBuffer()); 420 phoneS = QString::fromUcs2( aItem->GetHomeAddressPostalCode().GetBuffer());
diff --git a/korganizer/koimportoldialog.cpp b/korganizer/koimportoldialog.cpp
index 7aa6076..2af436c 100644
--- a/korganizer/koimportoldialog.cpp
+++ b/korganizer/koimportoldialog.cpp
@@ -1,419 +1,421 @@
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 <qprogressbar.h> 28#include <qprogressbar.h>
29#include <qprogressdialog.h>
29#include <qwidgetstack.h> 30#include <qwidgetstack.h>
30#include <qdatetime.h> 31#include <qdatetime.h>
31#include <qdir.h> 32#include <qdir.h>
32#include <qapplication.h> 33#include <qapplication.h>
33#include <qhbox.h> 34#include <qhbox.h>
34#include <qregexp.h> 35#include <qregexp.h>
35#include <qheader.h> 36#include <qheader.h>
36#include <qdatetime.h> 37#include <qdatetime.h>
37#include <qlistview.h> 38#include <qlistview.h>
38 39
39#include <kdebug.h> 40#include <kdebug.h>
40#include <klocale.h> 41#include <klocale.h>
41#include <kstandarddirs.h> 42#include <kstandarddirs.h>
42#include <kmessagebox.h> 43#include <kmessagebox.h>
43#include <kfiledialog.h> 44#include <kfiledialog.h>
44 45
45#include <libkdepim/categoryselectdialog.h> 46#include <libkdepim/categoryselectdialog.h>
46#include <libkdepim/kinputdialog.h> 47#include <libkdepim/kinputdialog.h>
47 48
48#include <libkcal/calendarlocal.h> 49#include <libkcal/calendarlocal.h>
49#include <libkcal/icalformat.h> 50#include <libkcal/icalformat.h>
50#include <kabc/stdaddressbook.h> 51#include <kabc/stdaddressbook.h>
51 52
52#include "koprefs.h" 53#include "koprefs.h"
53#include "koglobals.h" 54#include "koglobals.h"
54 55
55#include "koimportoldialog.h" 56#include "koimportoldialog.h"
56 57
57#include "../outport/msoutl9.h" 58#include "../outport/msoutl9.h"
58#include <ole2.h> 59#include <ole2.h>
59#include <comutil.h> 60#include <comutil.h>
60_Application gOlApp; 61_Application gOlApp;
61 62
62QDateTime mDdate2Qdtr( DATE dt) 63QDateTime mDdate2Qdtr( DATE dt)
63{ 64{
64 COleDateTime odt; 65 COleDateTime odt;
65 SYSTEMTIME st; 66 SYSTEMTIME st;
66 odt = dt; 67 odt = dt;
67 odt.GetAsSystemTime(st); 68 odt.GetAsSystemTime(st);
68 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) ); 69 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) );
69 return qdt; 70 return qdt;
70} 71}
71 72
72class OLEListViewItem : public QCheckListItem 73class OLEListViewItem : public QCheckListItem
73{ 74{
74 public: 75 public:
75 OLEListViewItem( QListView *parent, QString text ) : 76 OLEListViewItem( QListView *parent, QString text ) :
76 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { mData = 0; }; 77 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { mData = 0; };
77 OLEListViewItem( QListViewItem *after, QString text ) : 78 OLEListViewItem( QListViewItem *after, QString text ) :
78 QCheckListItem( after, text, QCheckListItem::CheckBox ) { mData = 0; }; 79 QCheckListItem( after, text, QCheckListItem::CheckBox ) { mData = 0; };
79 ~OLEListViewItem() {}; 80 ~OLEListViewItem() {};
80 void setData( DWORD data ) {mData= data; }; 81 void setData( DWORD data ) {mData= data; };
81 DWORD data() { return mData ;}; 82 DWORD data() { return mData ;};
82 private: 83 private:
83 DWORD mData; 84 DWORD mData;
84}; 85};
85 86
86KOImportOLdialog::KOImportOLdialog( const QString &caption, 87KOImportOLdialog::KOImportOLdialog( const QString &caption,
87 Calendar *calendar, QWidget *parent ) : 88 Calendar *calendar, QWidget *parent ) :
88 KDialogBase( Plain, caption, User1 | Close, Ok, 89 KDialogBase( Plain, caption, User1 | Close, Ok,
89 parent, caption, true, false, i18n("Import!") ) 90 parent, caption, true, false, i18n("Import!") )
90{ 91{
91 QHBox * mw = new QHBox( this ); 92 QHBox * mw = new QHBox( this );
92 setMainWidget( mw ); 93 setMainWidget( mw );
93 mListView = new QListView( mw ); 94 mListView = new QListView( mw );
94 mListView->addColumn(i18n("Select Folder to import")); 95 mListView->addColumn(i18n("Select Folder to import"));
95 mListView->addColumn(i18n("Content Type")); 96 mListView->addColumn(i18n("Content Type"));
96 mCalendar = calendar; 97 mCalendar = calendar;
97 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply())); 98 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply()));
98 setupFolderView(); 99 setupFolderView();
99 resize( sizeHint().width()+50, sizeHint().height()+50 ); 100 resize( sizeHint().width()+50, sizeHint().height()+50 );
100} 101}
101 102
102KOImportOLdialog::~KOImportOLdialog() 103KOImportOLdialog::~KOImportOLdialog()
103{ 104{
104 105
105} 106}
106 107
107 108
108void KOImportOLdialog::setupFolderView() 109void KOImportOLdialog::setupFolderView()
109{ 110{
110 SCODE sc = ::OleInitialize(NULL); 111 SCODE sc = ::OleInitialize(NULL);
111 if ( FAILED ( sc ) ) { 112 if ( FAILED ( sc ) ) {
112 KMessageBox::information(this,"OLE initialisation failed"); 113 KMessageBox::information(this,"OLE initialisation failed");
113 return; 114 return;
114 } 115 }
115 116
116 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){ 117 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){
117 KMessageBox::information(this,"Sorry, cannot access Outlook"); 118 KMessageBox::information(this,"Sorry, cannot access Outlook");
118 return ; 119 return ;
119 } 120 }
120 MAPIFolder mfInbox; 121 MAPIFolder mfInbox;
121 MAPIFolder mfRoot; 122 MAPIFolder mfRoot;
122 CString szName; 123 CString szName;
123 _NameSpace olNS; 124 _NameSpace olNS;
124 olNS = gOlApp.GetNamespace(_T("MAPI")); 125 olNS = gOlApp.GetNamespace(_T("MAPI"));
125 mfInbox = olNS.GetDefaultFolder(6); 126 mfInbox = olNS.GetDefaultFolder(6);
126 mfRoot = mfInbox.GetParent(); 127 mfRoot = mfInbox.GetParent();
127 szName = mfRoot.GetName(); 128 szName = mfRoot.GetName();
128 long iType = mfRoot.GetDefaultItemType(); 129 long iType = mfRoot.GetDefaultItemType();
129 QString mes; 130 QString mes;
130 mes = QString::fromUcs2( szName.GetBuffer() ); 131 mes = QString::fromUcs2( szName.GetBuffer() );
131 OLEListViewItem * root = new OLEListViewItem( mListView, mes ); 132 OLEListViewItem * root = new OLEListViewItem( mListView, mes );
132 mfRoot.m_lpDispatch->AddRef(); 133 mfRoot.m_lpDispatch->AddRef();
133 addFolder( root, mfRoot.m_lpDispatch ); 134 addFolder( root, mfRoot.m_lpDispatch );
134 root->setOpen( true ); 135 root->setOpen( true );
135 mListView->setSortColumn( 0 ); 136 mListView->setSortColumn( 0 );
136 mListView->sort( ); 137 mListView->sort( );
137} 138}
138 139
139 140
140void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent) 141void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent)
141{ 142{
142 MAPIFolder mfParent(dispParent), mfChild; 143 MAPIFolder mfParent(dispParent), mfChild;
143 _Folders folders; 144 _Folders folders;
144 _variant_t fndx((long)0); 145 _variant_t fndx((long)0);
145 CString szName; 146 CString szName;
146 long iType; 147 long iType;
147 OLEListViewItem* hChild; 148 OLEListViewItem* hChild;
148 149
149 folders = mfParent.GetFolders(); 150 folders = mfParent.GetFolders();
150 for(int i=1; i <= folders.GetCount(); ++i) 151 for(int i=1; i <= folders.GetCount(); ++i)
151 { 152 {
152 fndx = (long)i; 153 fndx = (long)i;
153 mfChild = folders.Item(fndx.Detach()); 154 mfChild = folders.Item(fndx.Detach());
154 mfChild.m_lpDispatch->AddRef(); 155 mfChild.m_lpDispatch->AddRef();
155 szName = mfChild.GetName(); 156 szName = mfChild.GetName();
156 iType = mfChild.GetDefaultItemType(); 157 iType = mfChild.GetDefaultItemType();
157 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) ); 158 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) );
158 if ( iType != 1) 159 if ( iType != 1)
159 hChild->setEnabled( false ); 160 hChild->setEnabled( false );
160 QString ts; 161 QString ts;
161 switch( iType ) { 162 switch( iType ) {
162 case 0: 163 case 0:
163 ts = i18n("Mail"); 164 ts = i18n("Mail");
164 break; 165 break;
165 case 1: 166 case 1:
166 ts = i18n("Calendar"); 167 ts = i18n("Calendar");
167 break; 168 break;
168 case 2: 169 case 2:
169 ts = i18n("Contacts"); 170 ts = i18n("Contacts");
170 break; 171 break;
171 case 3: 172 case 3:
172 ts = i18n("Todos"); 173 ts = i18n("Todos");
173 break; 174 break;
174 case 4: 175 case 4:
175 ts = i18n("Journals"); 176 ts = i18n("Journals");
176 break; 177 break;
177 case 5: 178 case 5:
178 ts = i18n("Notes"); 179 ts = i18n("Notes");
179 break; 180 break;
180 default: 181 default:
181 ts = i18n("Unknown"); 182 ts = i18n("Unknown");
182 } 183 }
183 hChild->setText( 1,ts); 184 hChild->setText( 1,ts);
184 hChild->setData( (DWORD) mfChild.m_lpDispatch ); 185 hChild->setData( (DWORD) mfChild.m_lpDispatch );
185 mfChild.m_lpDispatch->AddRef(); 186 mfChild.m_lpDispatch->AddRef();
186 addFolder(hChild, mfChild.m_lpDispatch); 187 addFolder(hChild, mfChild.m_lpDispatch);
187 } 188 }
188} 189}
189 190
190void KOImportOLdialog::slotApply() 191void KOImportOLdialog::slotApply()
191{ 192{
192 importedItems = 0; 193 importedItems = 0;
193 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild(); 194 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild();
194 while ( child ) { 195 while ( child ) {
195 if ( child->isOn()&& child->data() ) 196 if ( child->isOn()&& child->data() )
196 readCalendarData( child->data() ); 197 readCalendarData( child->data() );
197 child = (OLEListViewItem*) child->itemBelow(); 198 child = (OLEListViewItem*) child->itemBelow();
198 } 199 }
199 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems); 200 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems);
200 KMessageBox::information(this,mes); 201 KMessageBox::information(this,mes);
201} 202}
202void KOImportOLdialog::readCalendarData( DWORD folder ) 203void KOImportOLdialog::readCalendarData( DWORD folder )
203{ 204{
204 205
205 LPDISPATCH dispItem = (LPDISPATCH)folder; 206 LPDISPATCH dispItem = (LPDISPATCH)folder;
206 dispItem->AddRef(); 207 dispItem->AddRef();
207 MAPIFolder mf(dispItem); 208 MAPIFolder mf(dispItem);
208 mf.m_lpDispatch->AddRef(); 209 mf.m_lpDispatch->AddRef();
209 _Items folderItems; 210 _Items folderItems;
210 _variant_t indx((long)0); 211 _variant_t indx((long)0);
211 LPDISPATCH itm; 212 LPDISPATCH itm;
212 int i; 213 int i;
213 folderItems = mf.GetItems(); 214 folderItems = mf.GetItems();
214 QProgressBar bar( folderItems.GetCount(),0 ); 215 QProgressDialog bar( i18n("Importing calendar data"),i18n("Abort"), folderItems.GetCount(),this );
215 bar.setCaption (i18n("Importing - close to abort!") ); 216 bar.setCaption (i18n("Importing!") );
216 int h = bar.sizeHint().height() ; 217 int h = bar.sizeHint().height() ;
217 int w = 300; 218 int w = 300;
218 int dw = QApplication::desktop()->width(); 219 int dw = QApplication::desktop()->width();
219 int dh = QApplication::desktop()->height(); 220 int dh = QApplication::desktop()->height();
220 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 221 //bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
221 bar.show(); 222 bar.show();
222 for(i=1; i <= folderItems.GetCount(); ++i) 223 for(i=1; i <= folderItems.GetCount(); ++i)
223 { 224 {
224 qApp->processEvents(); 225 qApp->processEvents();
225 if ( ! bar.isVisible() ) 226 if ( ! bar.isVisible() )
226 return ; 227 return ;
227 bar.setProgress( i ); 228 bar.setProgress( i );
229 bar.raise();
228 indx = (long)i; 230 indx = (long)i;
229 itm = folderItems.Item(indx.Detach()); 231 itm = folderItems.Item(indx.Detach());
230 _AppointmentItem * pItem = (_AppointmentItem *)&itm; 232 _AppointmentItem * pItem = (_AppointmentItem *)&itm;
231 ol2kopiCalendar( pItem ); 233 ol2kopiCalendar( pItem );
232 itm->Release(); 234 itm->Release();
233 } 235 }
234} 236}
235void KOImportOLdialog::slotOk() 237void KOImportOLdialog::slotOk()
236{ 238{
237 QDialog::accept(); 239 QDialog::accept();
238} 240}
239 241
240void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence ) 242void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence )
241{ 243{
242 KCal::Event* event = new KCal::Event(); 244 KCal::Event* event = new KCal::Event();
243 if ( aItem->GetAllDayEvent() ){ 245 if ( aItem->GetAllDayEvent() ){
244 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) )); 246 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) ));
245 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1)); 247 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1));
246 event->setFloats( true ); 248 event->setFloats( true );
247 } else { 249 } else {
248 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) ); 250 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) );
249 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) ); 251 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) );
250 event->setFloats( false ); 252 event->setFloats( false );
251 } 253 }
252 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()) ); 254 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()) );
253 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) ); 255 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) );
254 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "") ); 256 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "") );
255 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("; "), ";"); 257 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("; "), ";");
256 event->setCategories( QStringList::split( ";", cat ) ); 258 event->setCategories( QStringList::split( ";", cat ) );
257 if ( aItem->GetReminderSet() ) { 259 if ( aItem->GetReminderSet() ) {
258 event->clearAlarms(); 260 event->clearAlarms();
259 Alarm* alarm = event->newAlarm(); 261 Alarm* alarm = event->newAlarm();
260 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 ); 262 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 );
261 alarm->setEnabled( true ); 263 alarm->setEnabled( true );
262 if ( aItem->GetReminderPlaySound() ) { 264 if ( aItem->GetReminderPlaySound() ) {
263 alarm->setType( Alarm::Audio ); 265 alarm->setType( Alarm::Audio );
264 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer())); 266 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer()));
265 } 267 }
266 else 268 else
267 alarm->setType( Alarm::Display ); 269 alarm->setType( Alarm::Display );
268 alarm->setRepeatCount( aItem->GetReplyTime() ); 270 alarm->setRepeatCount( aItem->GetReplyTime() );
269 } 271 }
270 // OL :pub 0 - pers 1 - priv 2 - conf 3 272 // OL :pub 0 - pers 1 - priv 2 - conf 3
271 // KO : pub 0 - priv 1 - conf 2 273 // KO : pub 0 - priv 1 - conf 2
272 int sec = aItem->GetSensitivity() ; 274 int sec = aItem->GetSensitivity() ;
273 if ( sec > 1 )// mapping pers -> private 275 if ( sec > 1 )// mapping pers -> private
274 --sec; 276 --sec;
275 event->setSecrecy( sec ); 277 event->setSecrecy( sec );
276 if ( aItem->GetBusyStatus() == 0 ) 278 if ( aItem->GetBusyStatus() == 0 )
277 event->setTransparency( Event::Transparent);// OL free 279 event->setTransparency( Event::Transparent);// OL free
278 else 280 else
279 event->setTransparency( Event::Opaque);//OL all other 281 event->setTransparency( Event::Opaque);//OL all other
280 282
281 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur 283 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur
282 284
283 RecurrencePattern recpat = aItem->GetRecurrencePattern(); 285 RecurrencePattern recpat = aItem->GetRecurrencePattern();
284 286
285 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date(); 287 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date();
286 int freq = recpat.GetInterval(); 288 int freq = recpat.GetInterval();
287 289
288 bool hasEndDate = !recpat.GetNoEndDate(); 290 bool hasEndDate = !recpat.GetNoEndDate();
289 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date(); 291 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date();
290 QBitArray weekDays( 7 ); 292 QBitArray weekDays( 7 );
291 weekDays.fill(false ); 293 weekDays.fill(false );
292 uint weekDaysNum = recpat.GetDayOfWeekMask(); 294 uint weekDaysNum = recpat.GetDayOfWeekMask();
293 int i; 295 int i;
294 int bb = 2; 296 int bb = 2;
295 for( i = 1; i <= 6; ++i ) { 297 for( i = 1; i <= 6; ++i ) {
296 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 298 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
297 bb = 4 << (i-1); 299 bb = 4 << (i-1);
298 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 300 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
299 } 301 }
300 if ( 1 & weekDaysNum) 302 if ( 1 & weekDaysNum)
301 weekDays.setBit( 6 ); 303 weekDays.setBit( 6 );
302 // int pos = 1;// pending 304 // int pos = 1;// pending
303 305
304 Recurrence *r = event->recurrence(); 306 Recurrence *r = event->recurrence();
305 int rtype = recpat.GetRecurrenceType(); 307 int rtype = recpat.GetRecurrenceType();
306 //recurrence types are: 308 //recurrence types are:
307 /* 309 /*
308 olRecursDaily(0) 310 olRecursDaily(0)
309 olRecursWeekly(1) 311 olRecursWeekly(1)
310 olRecursMonthly(2) 312 olRecursMonthly(2)
311 olRecursMonthNth(3) 313 olRecursMonthNth(3)
312 olRecursYearly(5) 314 olRecursYearly(5)
313 olRecursYearNth(6) 315 olRecursYearNth(6)
314 */ 316 */
315 317
316 int duration = recpat.GetOccurrences(); 318 int duration = recpat.GetOccurrences();
317 if ( !hasEndDate ) 319 if ( !hasEndDate )
318 duration = -1; 320 duration = -1;
319 321
320 //LPDISPATCH RecurrencePattern::GetExceptions() 322 //LPDISPATCH RecurrencePattern::GetExceptions()
321 //long RecurrencePattern::GetMonthOfYear() 323 //long RecurrencePattern::GetMonthOfYear()
322 if ( rtype == 0 ) { 324 if ( rtype == 0 ) {
323 if ( hasEndDate ) r->setDaily( freq, endDate ); 325 if ( hasEndDate ) r->setDaily( freq, endDate );
324 else r->setDaily( freq, duration ); 326 else r->setDaily( freq, duration );
325 } else if ( rtype == 1 ) { 327 } else if ( rtype == 1 ) {
326 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 328 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
327 else r->setWeekly( freq, weekDays, duration ); 329 else r->setWeekly( freq, weekDays, duration );
328 } else if ( rtype == 2 ) { 330 } else if ( rtype == 2 ) {
329 if ( hasEndDate ) 331 if ( hasEndDate )
330 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 332 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
331 else 333 else
332 r->setMonthly( Recurrence::rMonthlyDay, freq, duration ); 334 r->setMonthly( Recurrence::rMonthlyDay, freq, duration );
333 //r->addMonthlyDay( startDate.day() ); 335 //r->addMonthlyDay( startDate.day() );
334 r->addMonthlyDay( recpat.GetDayOfMonth() ); 336 r->addMonthlyDay( recpat.GetDayOfMonth() );
335 } else if ( rtype == 3 ) { 337 } else if ( rtype == 3 ) {
336 if ( hasEndDate ) 338 if ( hasEndDate )
337 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 339 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
338 else 340 else
339 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 341 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
340 QBitArray days( 7 ); 342 QBitArray days( 7 );
341 days.fill( false ); 343 days.fill( false );
342 days.setBit( startDate.dayOfWeek() - 1 ); 344 days.setBit( startDate.dayOfWeek() - 1 );
343 int pos = (startDate.day()/7)+1; 345 int pos = (startDate.day()/7)+1;
344 r->addMonthlyPos( pos, days ); 346 r->addMonthlyPos( pos, days );
345 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1); 347 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1);
346 //KMessageBox::information(this,mes); 348 //KMessageBox::information(this,mes);
347 } else if ( rtype == 5 ) { 349 } else if ( rtype == 5 ) {
348 freq = 1; 350 freq = 1;
349 if ( hasEndDate ) 351 if ( hasEndDate )
350 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 352 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
351 else 353 else
352 r->setYearly( Recurrence::rYearlyMonth, freq, duration ); 354 r->setYearly( Recurrence::rYearlyMonth, freq, duration );
353 r->addYearlyNum( startDate.month() ); 355 r->addYearlyNum( startDate.month() );
354 } else if ( true /*rtype == 6*/ ) { 356 } else if ( true /*rtype == 6*/ ) {
355 // KOganizer cannot handle this in the GUI 357 // KOganizer cannot handle this in the GUI
356 // we are mapping this to monthly - every 12. month 358 // we are mapping this to monthly - every 12. month
357 freq = 12; 359 freq = 12;
358 if ( hasEndDate ) 360 if ( hasEndDate )
359 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 361 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
360 else 362 else
361 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 363 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
362 QBitArray days( 7 ); 364 QBitArray days( 7 );
363 days.fill( false ); 365 days.fill( false );
364 days.setBit( startDate.dayOfWeek() - 1 ); 366 days.setBit( startDate.dayOfWeek() - 1 );
365 int pos = (startDate.day()/7)+1; 367 int pos = (startDate.day()/7)+1;
366 r->addMonthlyPos( pos, days ); 368 r->addMonthlyPos( pos, days );
367 } 369 }
368 // recurrence exceptions 370 // recurrence exceptions
369 LPDISPATCH dispItem = recpat.GetExceptions(); 371 LPDISPATCH dispItem = recpat.GetExceptions();
370 dispItem->AddRef(); 372 dispItem->AddRef();
371 Exceptions ex(dispItem); 373 Exceptions ex(dispItem);
372 _variant_t indx((long)0); 374 _variant_t indx((long)0);
373 LPDISPATCH itm; 375 LPDISPATCH itm;
374 for(i=1; i <= ex.GetCount(); ++i) { 376 for(i=1; i <= ex.GetCount(); ++i) {
375 indx = (long)i; 377 indx = (long)i;
376 itm = ex.Item( indx.Detach() ); 378 itm = ex.Item( indx.Detach() );
377 ::Exception * pItem = (::Exception *)&itm; 379 ::Exception * pItem = (::Exception *)&itm;
378 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() ); 380 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() );
379 if ( !pItem->GetDeleted() ) { 381 if ( !pItem->GetDeleted() ) {
380 LPDISPATCH appIt = pItem->GetAppointmentItem(); 382 LPDISPATCH appIt = pItem->GetAppointmentItem();
381 _AppointmentItem * paItem = (_AppointmentItem *)&appIt; 383 _AppointmentItem * paItem = (_AppointmentItem *)&appIt;
382 ol2kopiCalendar( paItem, false ); 384 ol2kopiCalendar( paItem, false );
383 } 385 }
384 itm->Release(); 386 itm->Release();
385 } 387 }
386 } 388 }
387 // recurrence ENTE 389 // recurrence ENTE
388 event->setOrganizer( QString::fromUcs2( aItem->GetOrganizer().GetBuffer())); 390 event->setOrganizer( QString::fromUcs2( aItem->GetOrganizer().GetBuffer()));
389 391
390 //GetOptionalAttendees() 392 //GetOptionalAttendees()
391 //GetRequiredAttendees() 393 //GetRequiredAttendees()
392 LPDISPATCH dispItem = aItem->GetRecipients(); 394 LPDISPATCH dispItem = aItem->GetRecipients();
393 dispItem->AddRef(); 395 dispItem->AddRef();
394 _Folders mf(dispItem); 396 _Folders mf(dispItem);
395 mf.m_lpDispatch->AddRef(); 397 mf.m_lpDispatch->AddRef();
396 _variant_t indx((long)0); 398 _variant_t indx((long)0);
397 LPDISPATCH itm; 399 LPDISPATCH itm;
398 int i; 400 int i;
399 QString optAtt = QString::fromUcs2( aItem->GetOptionalAttendees().GetBuffer()); 401 QString optAtt = QString::fromUcs2( aItem->GetOptionalAttendees().GetBuffer());
400 QString reqAtt = QString::fromUcs2( aItem->GetRequiredAttendees().GetBuffer()); 402 QString reqAtt = QString::fromUcs2( aItem->GetRequiredAttendees().GetBuffer());
401 //GetRequiredAttendees() 403 //GetRequiredAttendees()
402 for(i=1; i <= mf.GetCount(); ++i) { 404 for(i=1; i <= mf.GetCount(); ++i) {
403 indx = (long)i; 405 indx = (long)i;
404 itm = mf.Item( indx.Detach() ); 406 itm = mf.Item( indx.Detach() );
405 Recipient * pItem = (Recipient *)&itm; 407 Recipient * pItem = (Recipient *)&itm;
406 408
407 //a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 409 //a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
408 QString name = QString::fromUcs2( pItem->GetName().GetBuffer()); 410 QString name = QString::fromUcs2( pItem->GetName().GetBuffer());
409 KCal::Attendee::PartStat stat; 411 KCal::Attendee::PartStat stat;
410 bool rsvp = false; 412 bool rsvp = false;
411 switch ( pItem->GetMeetingResponseStatus() ) { 413 switch ( pItem->GetMeetingResponseStatus() ) {
412 case 0: //not answered 414 case 0: //not answered
413 rsvp = true; 415 rsvp = true;
414 case 5: //not answered 416 case 5: //not answered
415 stat = Attendee::NeedsAction; 417 stat = Attendee::NeedsAction;
416 break; 418 break;
417 case 1: //organizer 419 case 1: //organizer
418 stat = Attendee::Delegated ; 420 stat = Attendee::Delegated ;
419 break; 421 break;