summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt6
-rw-r--r--kabc/addressee.cpp4
-rw-r--r--kabc/addressee.h2
-rw-r--r--kabc/field.cpp8
-rw-r--r--kaddressbook/phoneeditwidget.cpp33
5 files changed, 36 insertions, 17 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index f12f880..06f25e9 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -1,837 +1,837 @@
1{ "file","Datei" }, 1{ "file","Datei" },
2{ "Choose one file","Wähle eine Datei" }, 2{ "Choose one file","Wähle eine Datei" },
3{ "dir","Verzeichnis" }, 3{ "dir","Verzeichnis" },
4{ "Choose a directory with may files","Wähle Verzeichnis" }, 4{ "Choose a directory with may files","Wähle Verzeichnis" },
5{ "ldap","ldap" }, 5{ "ldap","ldap" },
6{ "No description available","Keine Beschreibung verfügbar" }, 6{ "No description available","Keine Beschreibung verfügbar" },
7{ "Library files for "%1" not found in paths","Bibliothek für "%1" nicht gefunden" }, 7{ "Library files for "%1" not found in paths","Bibliothek für "%1" nicht gefunden" },
8{ "qtopia","qtopia" }, 8{ "qtopia","qtopia" },
9{ "Qtopia PIM Addressbook.","Qtopia PIM Adressbuch." }, 9{ "Qtopia PIM Addressbook.","Qtopia PIM Adressbuch." },
10{ "vCard","vCard" }, 10{ "vCard","vCard" },
11{ "vCard Format","vCard Format" }, 11{ "vCard Format","vCard Format" },
12{ "microkabcformat_binary","microkabcformat_binary" }, 12{ "microkabcformat_binary","microkabcformat_binary" },
13{ "Binary","Binary" }, 13{ "Binary","Binary" },
14{ "No description available.","Keine Beschreibung verfügbar." }, 14{ "No description available.","Keine Beschreibung verfügbar." },
15{ "Department","Abteilung" }, 15{ "Department","Abteilung" },
16{ "Profession","Beruf" }, 16{ "Profession","Beruf" },
17{ "Assistant's Name","Name d.Assistenten" }, 17{ "Assistant's Name","Name d.Assistenten" },
18{ "Manager's Name","Name d.Manager's" }, 18{ "Manager's Name","Name d.Manager's" },
19{ "Spouse's Name","Name d.Ehegatten" }, 19{ "Spouse's Name","Name d.Ehegatten" },
20{ "Office","Büro" }, 20{ "Office","Büro" },
21{ "IM Address","IM Adresse" }, 21{ "IM Address","IM Adresse" },
22{ "Anniversary","Jahrestag" }, 22{ "Anniversary","Jahrestag" },
23{ "Gender","Geschlecht" }, 23{ "Gender","Geschlecht" },
24{ "Children","Kinder" }, 24{ "Children","Kinder" },
25{ "FreeBusyUrl","FreeBusyUrl" }, 25{ "FreeBusyUrl","FreeBusyUrl" },
26{ "ExternalID","ExternalID" }, 26{ "ExternalID","ExternalID" },
27{ "Resource loaded: '%1'","Resource geladen: '%1'" }, 27{ "Resource loaded: '%1'","Resource geladen: '%1'" },
28{ "Select View","Ansicht wählen" }, 28{ "Select View","Ansicht wählen" },
29{ "Modify View...","Ansicht ändern..." }, 29{ "Modify View...","Ansicht ändern..." },
30{ "Add View...","Ansicht hinzufügen..." }, 30{ "Add View...","Ansicht hinzufügen..." },
31{ "Delete View","Ansicht löschen" }, 31{ "Delete View","Ansicht löschen" },
32{ "Refresh View","Ansicht aktualisieren" }, 32{ "Refresh View","Ansicht aktualisieren" },
33{ "Edit &Filters...","Bearbeite &Filter..." }, 33{ "Edit &Filters...","Bearbeite &Filter..." },
34{ "Select Filter","Filter wählen" }, 34{ "Select Filter","Filter wählen" },
35{ "Style:","Stil:" }, 35{ "Style:","Stil:" },
36{ "HTML table style.","HTML tabellen stil." }, 36{ "HTML table style.","HTML tabellen stil." },
37{ "Default Table View","Standard Tabellen Ansicht" }, 37{ "Default Table View","Standard Tabellen Ansicht" },
38{ "Show Extension Bar","Zeige Extension Bar" }, 38{ "Show Extension Bar","Zeige Extension Bar" },
39{ "None","Kein" }, 39{ "None","Kein" },
40{ "Name...","Name..." }, 40{ "Name...","Name..." },
41{ "Role:","Funktion:" }, 41{ "Role:","Funktion:" },
42{ "Organization:","Firma:" }, 42{ "Organization:","Firma:" },
43{ "Formatted name:","Formatt. Name:" }, 43{ "Formatted name:","Formatt. Name:" },
44{ "Edit Phone Numbers...","Bearbeite Telefonnummern..." }, 44{ "Edit Phone Numbers...","Bearbeite Telefonnummern..." },
45{ "Categories","Kategorien" }, 45{ "Categories","Kategorien" },
46{ "Public","Öffentlich" }, 46{ "Public","Öffentlich" },
47{ "Private","Privat" }, 47{ "Private","Privat" },
48{ "Confidential","Vertraulich" }, 48{ "Confidential","Vertraulich" },
49{ "&General","Allgemein" }, 49{ "&General","Allgemein" },
50{ "&Edit Addresses...","B&earbeite Adressen..." }, 50{ "&Edit Addresses...","B&earbeite Adressen..." },
51{ "Edit Email Addresses...","Bearbeite E-Mail Adressen..." }, 51{ "Edit Email Addresses...","Bearbeite E-Mail Adressen..." },
52{ "Email:","Email:" }, 52{ "Email:","Email:" },
53{ "URL:","URL:" }, 53{ "URL:","URL:" },
54{ "&IM address:","&IM address:" }, 54{ "&IM address:","&IM address:" },
55{ "&Address","&Adresse" }, 55{ "&Address","&Adresse" },
56{ "Department:","Abteilung:" }, 56{ "Department:","Abteilung:" },
57{ "Office:","Büro:" }, 57{ "Office:","Büro:" },
58{ "Profession:","Beruf:" }, 58{ "Profession:","Beruf:" },
59{ "Manager's name:","N.d.Manager's:" }, 59{ "Manager's name:","N.d.Manager's:" },
60{ "Assistant's name:","N.d.Assistenten:" }, 60{ "Assistant's name:","N.d.Assistenten:" },
61{ "Nick name:","Spitzname:" }, 61{ "Nick name:","Spitzname:" },
62{ "Spouse's name:","N.d.Ehegatten:" }, 62{ "Spouse's name:","N.d.Ehegatten:" },
63{ "Children's names:","N.d.Kinder:" }, 63{ "Children's names:","N.d.Kinder:" },
64{ "Birthday:","Geburtstag:" }, 64{ "Birthday:","Geburtstag:" },
65{ " Local Time","Ortszeit" }, 65{ " Local Time","Ortszeit" },
66{ "Mon","Mo" }, 66{ "Mon","Mo" },
67{ "Tue","Di" }, 67{ "Tue","Di" },
68{ "Wed","Mi" }, 68{ "Wed","Mi" },
69{ "Thu","Do" }, 69{ "Thu","Do" },
70{ "Fri","Fr" }, 70{ "Fri","Fr" },
71{ "Sat","Sa" }, 71{ "Sat","Sa" },
72{ "Sun","So" }, 72{ "Sun","So" },
73{ "January","Januar" }, 73{ "January","Januar" },
74{ "February","Februar" }, 74{ "February","Februar" },
75{ "March","März" }, 75{ "March","März" },
76{ "April","April" }, 76{ "April","April" },
77{ "May","Mai" }, 77{ "May","Mai" },
78{ "June","Juni" }, 78{ "June","Juni" },
79{ "July","July" }, 79{ "July","July" },
80{ "August","August" }, 80{ "August","August" },
81{ "September","September" }, 81{ "September","September" },
82{ "October","October" }, 82{ "October","October" },
83{ "November","November" }, 83{ "November","November" },
84{ "December","Dezember" }, 84{ "December","Dezember" },
85{ "tomorrow","Morgen" }, 85{ "tomorrow","Morgen" },
86{ "today","Heute" }, 86{ "today","Heute" },
87{ "yesterday","Gestern" }, 87{ "yesterday","Gestern" },
88{ "Monday","Montag" }, 88{ "Monday","Montag" },
89{ "Tuesday","Dienstag" }, 89{ "Tuesday","Dienstag" },
90{ "Wednesday","Mittwoch" }, 90{ "Wednesday","Mittwoch" },
91{ "Thursday","Donnerstag" }, 91{ "Thursday","Donnerstag" },
92{ "Friday","Freitag" }, 92{ "Friday","Freitag" },
93{ "Saturday","Samstag" }, 93{ "Saturday","Samstag" },
94{ "Sunday","Sonntag" }, 94{ "Sunday","Sonntag" },
95{ "Anniversary:","Jahrestag:" }, 95{ "Anniversary:","Jahrestag:" },
96{ "Gender:","Geschlecht:" }, 96{ "Gender:","Geschlecht:" },
97{ "ALIEN (undefined)","ALIEN (undefiniert)" }, 97{ "ALIEN (undefined)","ALIEN (undefiniert)" },
98{ "female","weiblich" }, 98{ "female","weiblich" },
99{ "male","männlich" }, 99{ "male","männlich" },
100{ "&Details","&Details" }, 100{ "&Details","&Details" },
101{ "Note:","Notiz:" }, 101{ "Note:","Notiz:" },
102{ "&Notes","&Notizen" }, 102{ "&Notes","&Notizen" },
103{ "Use geo data","Benutze geo Daten" }, 103{ "Use geo data","Benutze geo Daten" },
104{ "Latitude:","Breitengrad:" }, 104{ "Latitude:","Breitengrad:" },
105{ "Longitude:","Längengrad:" }, 105{ "Longitude:","Längengrad:" },
106{ "Edit Geo Data...","Edit geo Daten..." }, 106{ "Edit Geo Data...","Edit geo Daten..." },
107{ "Keys:","Schlüssel:" }, 107{ "Keys:","Schlüssel:" },
108{ "Add","Hinzu" }, 108{ "Add","Hinzu" },
109{ "Remove","Entf." }, 109{ "Remove","Entf." },
110{ "Export","Exportiere" }, 110{ "Export","Exportiere" },
111{ "&Misc","Verschiedenes" }, 111{ "&Misc","Verschiedenes" },
112{ "Photo","Foto" }, 112{ "Photo","Foto" },
113{ "Store as URL","Speichere als URL" }, 113{ "Store as URL","Speichere als URL" },
114{ "Logo","Logo" }, 114{ "Logo","Logo" },
115{ "&Images","B&ilder" }, 115{ "&Images","B&ilder" },
116{ "Home","Privat" }, 116{ "Home","Privat" },
117{ "Work","Arbeit" }, 117{ "Work","Arbeit" },
118{ "Mobile","Handy" }, 118{ "Mobile","Handy" },
119{ "Fax","Fax" }, 119{ "Fax","Fax" },
120{ "Contact Editor","Bearbeite Kontakt" }, 120{ "Contact Editor","Bearbeite Kontakt" },
121{ "&Mail...","&Mail..." }, 121{ "&Mail...","&Mail..." },
122{ "&Print...","Drucken..." }, 122{ "&Print...","Drucken..." },
123{ "&Save","&Speichern" }, 123{ "&Save","&Speichern" },
124{ "&New Contact...","&Neuer Kontakt..." }, 124{ "&New Contact...","&Neuer Kontakt..." },
125{ "Mail &vCard...","Mail &vCard..." }, 125{ "Mail &vCard...","Mail &vCard..." },
126{ "Selected to phone","Auswahl zum Telefon" }, 126{ "Selected to phone","Auswahl zum Telefon" },
127{ "Beam selected v&Card(s)","Beame ausgewählte v&Card(s)" }, 127{ "Beam selected v&Card(s)","Beame ausgewählte v&Card(s)" },
128{ "&Beam personal vCard","Beame persönliche vCard" }, 128{ "&Beam personal vCard","Beame persönliche vCard" },
129{ "&Edit Contact...","Bearbeite Kontakt..." }, 129{ "&Edit Contact...","Bearbeite Kontakt..." },
130{ "&Exit","B&eenden" }, 130{ "&Exit","B&eenden" },
131{ "&Copy","Kopieren" }, 131{ "&Copy","Kopieren" },
132{ "Cu&t","Ausschneiden" }, 132{ "Cu&t","Ausschneiden" },
133{ "&Paste","Einfügen" }, 133{ "&Paste","Einfügen" },
134{ "Select &All","Alles auswählen" }, 134{ "Select &All","Alles auswählen" },
135{ "&Undo","Rückgängig machen" }, 135{ "&Undo","Rückgängig machen" },
136{ "Re&do","Wiederherstellen" }, 136{ "Re&do","Wiederherstellen" },
137{ "&Delete Contact","Lösche Kontakt" }, 137{ "&Delete Contact","Lösche Kontakt" },
138{ "Configure &Resources...","Konfiguriere &Resourcen..." }, 138{ "Configure &Resources...","Konfiguriere &Resourcen..." },
139{ "&Configure %1...","Konfiguriere %1..." }, 139{ "&Configure %1...","Konfiguriere %1..." },
140{ "Configure S&hortcuts...","Konfiguriere S&hortcuts..." }, 140{ "Configure S&hortcuts...","Konfiguriere S&hortcuts..." },
141{ "Show Jump Bar","Zeige Jump Bar" }, 141{ "Show Jump Bar","Zeige Jump Bar" },
142{ "Show Details","Zeige Details" }, 142{ "Show Details","Zeige Details" },
143{ "Beam receive enabled","Beam (IR) Empfang AN" }, 143{ "Beam receive enabled","Beam (IR) Empfang AN" },
144{ "Set Who Am I","Setze "wer bin ich"" }, 144{ "Set Who Am I","Setze "wer bin ich"" },
145{ "Set Categories for Contacts...","Setze Kategorien für Kontakte..." }, 145{ "Set Categories for Contacts...","Setze Kategorien für Kontakte..." },
146{ "Edit Category List...","Editiere Kategorieliste..." }, 146{ "Edit Category List...","Editiere Kategorieliste..." },
147{ "Remove "voice"...","Entferne "voice"..." }, 147{ "Remove "voice"...","Entferne "voice"..." },
148{ "Import from Outlook...","Importiere aus Outlook..." }, 148{ "Import from Outlook...","Importiere aus Outlook..." },
149{ "Licence","Lizenz" }, 149{ "Licence","Lizenz" },
150{ "Faq","Fragen + Antworten" }, 150{ "Faq","Fragen + Antworten" },
151{ "What's New?","Was ist neu?" }, 151{ "What's New?","Was ist neu?" },
152{ "Sync HowTo","Sync Anleitung" }, 152{ "Sync HowTo","Sync Anleitung" },
153{ "&About KAddressBook","Über KAdressBuch" }, 153{ "&About KAddressBook","Über KAdressBuch" },
154{ "Select Incremental Search Field","Selektiere Such Feld" }, 154{ "Select Incremental Search Field","Selektiere Such Feld" },
155{ "Synchronize","Synchronisieren" }, 155{ "Synchronize","Synchronisieren" },
156{ "Configure...","Konfigurieren..." }, 156{ "Configure...","Konfigurieren..." },
157{ "Enable Pi-Sync","Aktiviere Pi-Sync" }, 157{ "Enable Pi-Sync","Aktiviere Pi-Sync" },
158{ "Multiple sync","Multi Sync" }, 158{ "Multiple sync","Multi Sync" },
159{ "Import CSV List...","Importiere CSV-Datei..." }, 159{ "Import CSV List...","Importiere CSV-Datei..." },
160{ "Export CSV List...","Exportiere CSV-Datei..." }, 160{ "Export CSV List...","Exportiere CSV-Datei..." },
161{ "Import KDE 2 Addressbook...","Importiere KDE 2 Adressbuch..." }, 161{ "Import KDE 2 Addressbook...","Importiere KDE 2 Adressbuch..." },
162{ "Import vCard...","Importiere vCard..." }, 162{ "Import vCard...","Importiere vCard..." },
163{ "Export vCard 3.0...","Exportiere vCard 3.0..." }, 163{ "Export vCard 3.0...","Exportiere vCard 3.0..." },
164{ "Import Qtopia...","Importiere Qtopia..." }, 164{ "Import Qtopia...","Importiere Qtopia..." },
165{ "Export Qtopia...","Exportiere Qtopia..." }, 165{ "Export Qtopia...","Exportiere Qtopia..." },
166{ "Edit Contact","Bearbeite Kontakt" }, 166{ "Edit Contact","Bearbeite Kontakt" },
167{ "Ok","Ok" }, 167{ "Ok","Ok" },
168{ "Apply","Anwenden" }, 168{ "Apply","Anwenden" },
169{ "Cancel","Abbrechen" }, 169{ "Cancel","Abbrechen" },
170{ "KAddressbook/Pi","KAdressbuch/Pi" }, 170{ "KAddressbook/Pi","KAdressbuch/Pi" },
171{ "No Filter","Kein Filter" }, 171{ "No Filter","Kein Filter" },
172{ "Given Name","Vorname" }, 172{ "Given Name","Vorname" },
173{ "Family Name","Nachname" }, 173{ "Family Name","Nachname" },
174{ "Email Address","E-Mail Adresse" }, 174{ "Email Address","E-Mail Adresse" },
175{ "All Fields","Alle Felder" }, 175{ "All Fields","Alle Felder" },
176{ "Question","Frage" }, 176{ "Question","Frage" },
177{ "After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?","After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?" }, 177{ "After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?","After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as "other".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?" },
178{ "No","Nein" }, 178{ "No","Nein" },
179{ "Yes","Ja" }, 179{ "Yes","Ja" },
180{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile" }, 180{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile" },
181{ "Local device name:","Name dieses Gerätes:" }, 181{ "Local device name:","Name dieses Gerätes:" },
182{ "New profile","Neues Profil" }, 182{ "New profile","Neues Profil" },
183{ "Clone profile","Klone Profil" }, 183{ "Clone profile","Klone Profil" },
184{ "Delete profile","Lösche Profil" }, 184{ "Delete profile","Lösche Profil" },
185{ "Profile:","Profil:" }, 185{ "Profile:","Profil:" },
186{ "Ask for every entry on conflict","Frage bei Konflikten nach"}, 186{ "Ask for every entry on conflict","Frage bei Konflikten nach"},
187{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 187{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
188{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 188{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
189{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" } 189{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }
190{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 190{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
191{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 191{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
192{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 192{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
193{ "Write back file","Schreibe Datei zurück" }, 193{ "Write back file","Schreibe Datei zurück" },
194{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 194{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
195{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 195{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
196{ "Local device name:","Name dieses Gerätes:" }, 196{ "Local device name:","Name dieses Gerätes:" },
197{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 197{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
198{ "Sync preferences","Synchronisations Einstellungen" }, 198{ "Sync preferences","Synchronisations Einstellungen" },
199{ "Profile kind","Profil Art" }, 199{ "Profile kind","Profil Art" },
200{ "Local file","Lokale Datei" }, 200{ "Local file","Lokale Datei" },
201{ "Local file:","Lokale Datei:" }, 201{ "Local file:","Lokale Datei:" },
202{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 202{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
203{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 203{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
204{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 204{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
205{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 205{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
206{ "Device","Gerät:" }, 206{ "Device","Gerät:" },
207{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 207{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
208{ "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" }, 208{ "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" },
209{ "Synchronization successful","Synchronisation erfolgreich" }, 209{ "Synchronization successful","Synchronisation erfolgreich" },
210{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 210{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
211{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 211{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
212{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 212{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
213{ "Enter password","Passwort eingeben" }, 213{ "Enter password","Passwort eingeben" },
214{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 214{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
215{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 215{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
216{ "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" }, 216{ "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" },
217{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 217{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
218{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 218{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
219{ "Used %1 Client","Benutzter %1 Client" }, 219{ "Used %1 Client","Benutzter %1 Client" },
220{ "No email client installed","Kein Email Klient installiert" }, 220{ "No email client installed","Kein Email Klient installiert" },
221{ "Userdefined email client","Benutzerdef. Email Klient" }, 221{ "Userdefined email client","Benutzerdef. Email Klient" },
222{ "OM/Pi email client","OM/Pi Email Klient" }, 222{ "OM/Pi email client","OM/Pi Email Klient" },
223{ "Include in multiple ","Beziehe in mehrfach " }, 223{ "Include in multiple ","Beziehe in mehrfach " },
224{ "calendar ","Kalender " }, 224{ "calendar ","Kalender " },
225{ "addressbook ","Adressbuch " }, 225{ "addressbook ","Adressbuch " },
226{ "pwmanager","PWmanager" }, 226{ "pwmanager","PWmanager" },
227{ " sync"," Sync ein" }, 227{ " sync"," Sync ein" },
228{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 228{ "Write back synced data","Schreibe gesyncte Daten zurück" },
229{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 229{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
230{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 230{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
231{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 231{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
232{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 232{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
233{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 233{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
234{ "Help...","Hilfe..." }, 234{ "Help...","Hilfe..." },
235{ "Local file Cal:","Lokale Datei Kal:" }, 235{ "Local file Cal:","Lokale Datei Kal:" },
236{ "Local file ABook:","Lokale Datei ABuch:" }, 236{ "Local file ABook:","Lokale Datei ABuch:" },
237{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 237{ "Local file PWMgr:","Lokale Datei PWMgr:" },
238{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 238{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
239{ "Calendar:","Kalender:" }, 239{ "Calendar:","Kalender:" },
240{ "AddressBook:","AdressBuch:" }, 240{ "AddressBook:","AdressBuch:" },
241{ "PWManager:","PWManager:" }, 241{ "PWManager:","PWManager:" },
242{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 242{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
243{ "ssh/scp","ssh/scp" }, 243{ "ssh/scp","ssh/scp" },
244{ "ftp","ftp" }, 244{ "ftp","ftp" },
245{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 245{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
246{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 246{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
247{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 247{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
248{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 248{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
249{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 249{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
250{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 250{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
251{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 251{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
252{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 252{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
253{ "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" }, 253{ "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" },
254{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 254{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
255{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 255{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
256{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 256{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
257{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 257{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
258{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 258{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
259{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 259{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
260{ "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!" }, 260{ "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!" },
261{ "KDE-Pim Sync","KDE-Pim Sync" }, 261{ "KDE-Pim Sync","KDE-Pim Sync" },
262{ "Multiple profiles","Multi-Sync Profile" }, 262{ "Multiple profiles","Multi-Sync Profile" },
263{ "Device: ","Gerät: " }, 263{ "Device: ","Gerät: " },
264{ "Multiple sync started.","Multi-Sync gestartet." }, 264{ "Multiple sync started.","Multi-Sync gestartet." },
265{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile selektiert für Multi-Sync" }, 265{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile selektiert für Multi-Sync" },
266{ "KDE-Pim sync config","KDE-Pim Sync Konfig" }, 266{ "KDE-Pim sync config","KDE-Pim Sync Konfig" },
267{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein, z.B.:\n" }, 267{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein, z.B.:\n" },
268{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Modell\nautomatisch\erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 268{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Modell\nautomatisch\erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
269{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 269{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
270{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 270{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
271{ "Edit Address Book Filters","Editiere Addressbuch Filter" }, 271{ "Edit Address Book Filters","Editiere Addressbuch Filter" },
272{ "&Add...","Hinzufügen..." }, 272{ "&Add...","Hinzufügen..." },
273{ "&Edit...","B&earbeiten..." }, 273{ "&Edit...","B&earbeiten..." },
274{ "&Remove","Entfe&rne" }, 274{ "&Remove","Entfe&rne" },
275{ "Modify View: ","Ansicht ändern: " }, 275{ "Modify View: ","Ansicht ändern: " },
276{ "Fields","Felder" }, 276{ "Fields","Felder" },
277{ "Select Fields to Display","Wähle anzuzeigende Felder" }, 277{ "Select Fields to Display","Wähle anzuzeigende Felder" },
278{ "All","Alles" }, 278{ "All","Alles" },
279{ "Frequent","Frequent" }, 279{ "Frequent","Frequent" },
280{ "Address","Adresse" }, 280{ "Address","Adresse" },
281{ "Email","E-Mail" }, 281{ "Email","E-Mail" },
282{ "Personal","Persönl." }, 282{ "Personal","Persönl." },
283{ "Organization","Organisation" }, 283{ "Organization","Organisation" },
284{ "Custom","Benutzerdefiniert" }, 284{ "Custom","Benutzerdefiniert" },
285{ "&Selected\nfields:","&Selektierte\nFelder:" }, 285{ "&Selected\nfields:","&Selektierte\nFelder:" },
286{ "Formatted Name","Format. Name" }, 286{ "Formatted Name","Format. Name" },
287{ "Additional Names","Mittelname" }, 287{ "Additional Names","Mittelname" },
288{ "Honorific Prefixes","Namensprefix" }, 288{ "Honorific Prefixes","Namensprefix" },
289{ "Honorific Suffixes","Namenssuffix" }, 289{ "Honorific Suffixes","Namenssuffix" },
290{ "Nick Name","Spitzname" }, 290{ "Nick Name","Spitzname" },
291{ "Birthday","Geburtstag" }, 291{ "Birthday","Geburtstag" },
292{ "Home Address Street","Privat Adresse Strasse" }, 292{ "Home Address Street","Privat Adresse Strasse" },
293{ "Home Address Locality","Privat Adresse Stadt" }, 293{ "Home Address Locality","Privat Adresse Stadt" },
294{ "Home Address Region","Privat Adresse Bundesland" }, 294{ "Home Address Region","Privat Adresse Bundesland" },
295{ "Home Address Postal Code","Privat Adresse PLZ" }, 295{ "Home Address Postal Code","Privat Adresse PLZ" },
296{ "Home Address Country","Privat Adresse Land" }, 296{ "Home Address Country","Privat Adresse Land" },
297{ "Home Address Label","Privat Adresse Label" }, 297{ "Home Address Label","Privat Adresse Label" },
298{ "Business Address Street","Büro Adresse Strasse" }, 298{ "Business Address Street","Büro Adresse Strasse" },
299{ "Business Address Locality","Büro Adresse Stadt" }, 299{ "Business Address Locality","Büro Adresse Stadt" },
300{ "Business Address Region","Büro Adresse Bundesland" }, 300{ "Business Address Region","Büro Adresse Bundesland" },
301{ "Business Address Postal Code","Büro Adresse PLZ" }, 301{ "Business Address Postal Code","Büro Adresse PLZ" },
302{ "Business Address Country","Büro Adresse Land" }, 302{ "Business Address Country","Büro Adresse Land" },
303{ "Business Address Label","Büro Adresse Label" }, 303{ "Business Address Label","Büro Adresse Label" },
304{ "Home Phone","Privat Telefon" }, 304{ "Home Phone","Privat Telefon" },
305{ "Business Phone","Arbeit Telefon" }, 305{ "Business Phone","Arbeit Telefon" },
306{ "Mobile Phone","Handy" }, 306{ "Mobile Phone","Handy" },
307{ "Home Fax","Privat Fax" }, 307{ "Home Fax","Privat Fax" },
308{ "Business Fax","Arbeit Fax" }, 308{ "Business Fax","Arbeit Fax" },
309{ "Car Phone","Autotelefon" }, 309{ "Car Phone","Autotelefon" },
310{ "ISDN","ISDN" }, 310{ "ISDN","ISDN" },
311{ "Pager","Pager" }, 311{ "Pager","Pager" },
312{ "Mail Client","Mail Klient" }, 312{ "Mail Client","Mail Klient" },
313{ "Title","Titel" }, 313{ "Title","Titel" },
314{ "Role","Rolle" }, 314{ "Role","Rolle" },
315{ "Note","Notiz" }, 315{ "Note","Notiz" },
316{ "URL","URL" }, 316{ "URL","URL" },
317{ "Resource","Resource" }, 317{ "Resource","Resource" },
318{ "SIP","SIP" }, 318{ "SIP","SIP" },
319{ "Default Filter","Default Filter" }, 319{ "Default Filter","Default Filter" },
320{ "The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime.","#The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime." }, 320{ "The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime.","#The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime." },
321{ "No default filter","Kein default Filter" }, 321{ "No default filter","Kein default Filter" },
322{ "Use last active filter","Nutze letzen aktiven Filter" }, 322{ "Use last active filter","Nutze letzen aktiven Filter" },
323{ "Use filter:","Nutze Filter:" }, 323{ "Use filter:","Nutze Filter:" },
324{ "Look & Feel","Look & Feel" }, 324{ "Look & Feel","Look & Feel" },
325{ "Row Separator","Reihen Separator" }, 325{ "Row Separator","Reihen Separator" },
326{ "Alternating backgrounds","Abwechselnder Hintergrund" }, 326{ "Alternating backgrounds","Abwechselnder Hintergrund" },
327{ "Single line","Einzelne Zeile" }, 327{ "Single line","Einzelne Zeile" },
328{ "Enable background image:","Hintergrundbild:" }, 328{ "Enable background image:","Hintergrundbild:" },
329{ "Enable contact tooltips","Contact Tooltips" }, 329{ "Enable contact tooltips","Contact Tooltips" },
330{ "&Enable custom Colors","Benutzerdef. Farben" }, 330{ "&Enable custom Colors","Benutzerdef. Farben" },
331{ "&Colors","Farben" }, 331{ "&Colors","Farben" },
332{ "If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used.","#If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used." }, 332{ "If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used.","#If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used." },
333{ "Double click or press RETURN on a item to select a color for the related strings in the view.","#Double click or press RETURN on a item to select a color for the related strings in the view." }, 333{ "Double click or press RETURN on a item to select a color for the related strings in the view.","#Double click or press RETURN on a item to select a color for the related strings in the view." },
334{ "&Enable custom fonts","B&enutzerdefinierte Schriften" }, 334{ "&Enable custom fonts","B&enutzerdefinierte Schriften" },
335{ "&Text font:","Textschriftart:" }, 335{ "&Text font:","Textschriftart:" },
336{ "&Header font:","Titelschriftart:" }, 336{ "&Header font:","Titelschriftart:" },
337{ "If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data.","#If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data." }, 337{ "If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data.","#If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data." },
338{ "&Fonts","Schri&ften" }, 338{ "&Fonts","Schri&ften" },
339{ "Background Color","Hintergrundfarbe" }, 339{ "Background Color","Hintergrundfarbe" },
340{ "Text Color","Textfarbe" }, 340{ "Text Color","Textfarbe" },
341{ "Header Background Color","Titel Hintergrundfarbe" }, 341{ "Header Background Color","Titel Hintergrundfarbe" },
342{ "Header Text Color","Titel Farbe" }, 342{ "Header Text Color","Titel Farbe" },
343{ "Highlight Color","Auswahlfarbe" }, 343{ "Highlight Color","Auswahlfarbe" },
344{ "Highlighted Text Color","Auswahltextfarbe" }, 344{ "Highlighted Text Color","Auswahltextfarbe" },
345{ "Alternating Background Color","Abwechselnder Hintergrundfarbe" }, 345{ "Alternating Background Color","Abwechselnder Hintergrundfarbe" },
346{ "Postal","Post" }, 346{ "Postal","Post" },
347{ "Dr.","Dr." }, 347{ "Dr.","Dr." },
348{ "Miss","Frl." }, 348{ "Miss","Frl." },
349{ "Mr.","Herr" }, 349{ "Mr.","Herr" },
350{ "Mrs.","Frau" }, 350{ "Mrs.","Frau" },
351{ "Ms.","Fr." }, 351{ "Ms.","Fr." },
352{ "Prof.","Prof." }, 352{ "Prof.","Prof." },
353{ "I","I" }, 353{ "I","I" },
354{ "II","II" }, 354{ "II","II" },
355{ "III","III" }, 355{ "III","III" },
356{ "Jr.","Jr." }, 356{ "Jr.","Jr." },
357{ "Sr.","Sr." }, 357{ "Sr.","Sr." },
358{ "Name:","Name:" }, 358{ "Name:","Name:" },
359{ "Documents","Dokumente" }, 359{ "Documents","Dokumente" },
360{ "Files","Dateien" }, 360{ "Files","Dateien" },
361{ "All Files","Alle Dateien" }, 361{ "All Files","Alle Dateien" },
362{ "Name","Name" }, 362{ "Name","Name" },
363{ "Size","Größe" }, 363{ "Size","Größe" },
364{ "Date","Datum" }, 364{ "Date","Datum" },
365{ "Mime Type","Mime Typ" }, 365{ "Mime Type","Mime Typ" },
366{ "Geo Data Input","Geo Dateneingabe" }, 366{ "Geo Data Input","Geo Dateneingabe" },
367{ "Sexagesimal","Sexagesimal" }, 367{ "Sexagesimal","Sexagesimal" },
368{ "North","Nord" }, 368{ "North","Nord" },
369{ "South","Süd" }, 369{ "South","Süd" },
370{ "East","Ost" }, 370{ "East","Ost" },
371{ "West","West" }, 371{ "West","West" },
372{ "Undefined","Unbestimmt" }, 372{ "Undefined","Unbestimmt" },
373{ "Edit Address","Bearbeite Adresse" }, 373{ "Edit Address","Bearbeite Adresse" },
374{ "Street:","Strasse:" }, 374{ "Street:","Strasse:" },
375{ "Post office box:","Postfach:" }, 375{ "Post office box:","Postfach:" },
376{ "Locality:","Stadt:" }, 376{ "Locality:","Stadt:" },
377{ "Region:","Region:" }, 377{ "Region:","Region:" },
378{ "Postal code:","PLZ:" }, 378{ "Postal code:","PLZ:" },
379{ "Country:","Staat:" }, 379{ "Country:","Staat:" },
380{ "This is the preferred address","Dies ist die bevorzugte Adresse" }, 380{ "This is the preferred address","Dies ist die bevorzugte Adresse" },
381{ "New...","Neu..." }, 381{ "New...","Neu..." },
382{ "Change Type","Ändere Art" }, 382{ "Change Type","Ändere Art" },
383{ "Edit Address Type","Ändere Address Art" }, 383{ "Edit Address Type","Ändere Address Art" },
384{ "Address Types","Address Art" }, 384{ "Address Types","Address Art" },
385{ "Domestic","Inland" }, 385{ "Domestic","Inland" },
386{ "International","International" }, 386{ "International","International" },
387{ "Parcel","Paket" }, 387{ "Parcel","Paket" },
388{ "Edit Contact Name","Ändere Kontakt Name" }, 388{ "Edit Contact Name","Ändere Kontakt Name" },
389{ "Honorific prefixes:","Namensprefixes:" }, 389{ "Honorific prefixes:","Namensprefixes:" },
390{ "Given name:","Vorname:" }, 390{ "Given name:","Vorname:" },
391{ "Additional names:","Mittelnamen:" }, 391{ "Additional names:","Mittelnamen:" },
392{ "Family names:","Nachname:" }, 392{ "Family names:","Nachname:" },
393{ "Honorific suffixes:","Namenssuffixe:" }, 393{ "Honorific suffixes:","Namenssuffixe:" },
394{ "Parse name automatically","Setze Namen automatisch" }, 394{ "Parse name automatically","Setze Namen automatisch" },
395{ "Edit Phone Numbers","Bearbeite Telefonnummern" }, 395{ "Edit Phone Numbers","Bearbeite Telefonnummern" },
396{ "Number","Nummer" }, 396{ "Number","Nummer" },
397{ "Type","Typ" }, 397{ "Type","Typ" },
398{ "Edit Phone Number","Bearbeite Telefonnummer" }, 398{ "Edit Phone Number","Bearbeite Telefonnummer" },
399{ "Number:","Nummer:" }, 399{ "Number:","Nummer:" },
400{ "This is the preferred phone number","Dies ist die bevorzugte Telefonnummer" }, 400{ "This is the preferred phone number","Dies ist die bevorzugte Telefonnummer" },
401{ "Types","Typen" }, 401{ "Types","Typen" },
402{ "Messenger","Messenger" }, 402{ "Messenger","Messenger" },
403{ "Other","Anderes" }, 403{ "Other","Sonstiges" },
404{ "Video","Video" }, 404{ "Video","Video" },
405{ "Mailbox","Mailbox" }, 405{ "Mailbox","Mailbox" },
406{ "Modem","Modem" }, 406{ "Modem","Modem" },
407{ "Car","Auto" }, 407{ "Car","Auto" },
408{ "PCS","PCS" }, 408{ "PCS","PCS" },
409{ "Category","Kategorie" }, 409{ "Category","Kategorie" },
410{ "Select Categories","Wähle Kategorien" }, 410{ "Select Categories","Wähle Kategorien" },
411{ " &Deselect All "," &Deselektiere alle " }, 411{ " &Deselect All "," &Deselektiere alle " },
412{ " &Edit Categories "," B&earbeite Kategorien " }, 412{ " &Edit Categories "," B&earbeite Kategorien " },
413{ "&OK","&OK" }, 413{ "&OK","&OK" },
414{ "&Cancel","Abbre&chen" }, 414{ "&Cancel","Abbre&chen" },
415{ "Configure","Konfiguriere" }, 415{ "Configure","Konfiguriere" },
416{ "Default","Voreinstellungen" }, 416{ "Default","Voreinstellungen" },
417{ "Addressbook","Adressbuch" }, 417{ "Addressbook","Adressbuch" },
418{ "Details view font","Schriftart Detailansicht" }, 418{ "Details view font","Schriftart Detailansicht" },
419{ "phone:123","phone:123" }, 419{ "phone:123","phone:123" },
420{ "Search only after <return> key pressed","Suche nur nach <return> Taste" }, 420{ "Search only after <return> key pressed","Suche nur nach <return> Taste" },
421{ "Show edit dialog on single click","Zeige Edit Dialog bei Einzelklick" }, 421{ "Show edit dialog on single click","Zeige Edit Dialog bei Einzelklick" },
422{ "Automatic name parsing for new contacts","Automa. Name Parsen für neue Kontakte" }, 422{ "Automatic name parsing for new contacts","Automa. Name Parsen für neue Kontakte" },
423{ "Display List and Details at once (restart)","Zeige Liste und Details zusammen(neustart)" }, 423{ "Display List and Details at once (restart)","Zeige Liste und Details zusammen(neustart)" },
424{ "Show exit confirmation","Vor dem Beenden nachfragen" }, 424{ "Show exit confirmation","Vor dem Beenden nachfragen" },
425{ "General","Allgemein" }, 425{ "General","Allgemein" },
426{ "Extensions (restart)","Extensions (restart)" }, 426{ "Extensions (restart)","Extensions (restart)" },
427{ "Description","Beschreibungen" }, 427{ "Description","Beschreibungen" },
428{ "Extensions","Extensions" }, 428{ "Extensions","Extensions" },
429{ "Prefixes","Prefixe" }, 429{ "Prefixes","Prefixe" },
430{ "Inclusions","Inclusions" }, 430{ "Inclusions","Inclusions" },
431{ "Suffixes","Suffixe" }, 431{ "Suffixes","Suffixe" },
432{ "Default formatted name:","Default format. Name:" }, 432{ "Default formatted name:","Default format. Name:" },
433{ "Empty","Leer" }, 433{ "Empty","Leer" },
434{ "Simple Name","Einfacher Name" }, 434{ "Simple Name","Einfacher Name" },
435{ "Full Name","Voller Name" }, 435{ "Full Name","Voller Name" },
436{ "Reverse Name","Namen umdrehen" }, 436{ "Reverse Name","Namen umdrehen" },
437{ "Contact","Kontakt" }, 437{ "Contact","Kontakt" },
438{ "Global","Allgemein" }, 438{ "Global","Allgemein" },
439{ "Phone","Telefon" }, 439{ "Phone","Telefon" },
440{ "SMS","SMS" }, 440{ "SMS","SMS" },
441{ "Language:(needs restart)","Sprache:(Neustart)" }, 441{ "Language:(needs restart)","Sprache:(Neustart)" },
442{ "English","English" }, 442{ "English","English" },
443{ "German","Deutsch" }, 443{ "German","Deutsch" },
444{ "French","Französisch" }, 444{ "French","Französisch" },
445{ "Italian","Italienisch" }, 445{ "Italian","Italienisch" },
446{ "User defined (usertranslation.txt)","Benutzerdef. (usertranslation.txt)" }, 446{ "User defined (usertranslation.txt)","Benutzerdef. (usertranslation.txt)" },
447{ "Time Format(nr):","Zeit Format(nr):" }, 447{ "Time Format(nr):","Zeit Format(nr):" },
448{ "24:00","24:00" }, 448{ "24:00","24:00" },
449{ "12:00am","12:00am" }, 449{ "12:00am","12:00am" },
450{ "Week starts on Sunday","Woche beginnt Sonntags" }, 450{ "Week starts on Sunday","Woche beginnt Sonntags" },
451{ "Locale","Locale" }, 451{ "Locale","Locale" },
452{ "Date Format:","Datums Format:" }, 452{ "Date Format:","Datums Format:" },
453{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 453{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
454{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 454{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
455{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 455{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
456{ "User defined","Benutzerdefiniert" }, 456{ "User defined","Benutzerdefiniert" },
457{ "User long date:","Format langes Datum:" }, 457{ "User long date:","Format langes Datum:" },
458{ "User short date:","Format kurzes Datum:" }, 458{ "User short date:","Format kurzes Datum:" },
459{ "Daylight start:","Sommerzeit Start:" }, 459{ "Daylight start:","Sommerzeit Start:" },
460{ "Daylight end:","Sommerzeit Ende:" }, 460{ "Daylight end:","Sommerzeit Ende:" },
461{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 461{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
462{ "Monday 19 April 2004: %A %d %B %Y","Monday 19 April 2004: %A %d %B %Y" }, 462{ "Monday 19 April 2004: %A %d %B %Y","Monday 19 April 2004: %A %d %B %Y" },
463{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 463{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
464{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 464{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
465{ "Date Format","Datums Format" }, 465{ "Date Format","Datums Format" },
466{ "Timezone:","Zeitzone:" }, 466{ "Timezone:","Zeitzone:" },
467{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 467{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
468{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 468{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
469{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 469{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
470{ "Used Mail Client","Benutzter Mail Client" }, 470{ "Used Mail Client","Benutzter Mail Client" },
471{ "Channel:","Channel:" }, 471{ "Channel:","Channel:" },
472{ "Message:","Message:" }, 472{ "Message:","Message:" },
473{ "Parameters:","Parameter:" }, 473{ "Parameters:","Parameter:" },
474{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 474{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
475{ "extra Message:","extra Message:" }, 475{ "extra Message:","extra Message:" },
476{ "extra Parameters:","extra Parameter:" }, 476{ "extra Parameters:","extra Parameter:" },
477{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 477{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
478{ "External Apps.","Externe Appl." }, 478{ "External Apps.","Externe Appl." },
479{ "Used %1 Client","Benutzer %1 Client" }, 479{ "Used %1 Client","Benutzer %1 Client" },
480{ "No email client installed","Keine Email Client installiert" }, 480{ "No email client installed","Keine Email Client installiert" },
481{ "Userdefined email client","Benutzerdef. Email Client" }, 481{ "Userdefined email client","Benutzerdef. Email Client" },
482{ "OM/Pi email client","OM/Pi Email Client" }, 482{ "OM/Pi email client","OM/Pi Email Client" },
483{ "Close KA/Pi?","Schließe KA/Pi?" }, 483{ "Close KA/Pi?","Schließe KA/Pi?" },
484{ "\nChanges will be saved!","\nÄnderungen werden gespeichert!" }, 484{ "\nChanges will be saved!","\nÄnderungen werden gespeichert!" },
485{ "Yes!","Ja!" }, 485{ "Yes!","Ja!" },
486{ "There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. ","#There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. " }, 486{ "There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. ","#There was an error while attempting to save\n the address book. Please check that some \nother application is not using it. " },
487{ "Saving addressbook ... ","Speichere Adressbuch ... " }, 487{ "Saving addressbook ... ","Speichere Adressbuch ... " },
488{ "Addressbook saved!","Adressbuch gespeichert!" }, 488{ "Addressbook saved!","Adressbuch gespeichert!" },
489{ "Default Table View","Default Tabellenansicht" }, 489{ "Default Table View","Default Tabellenansicht" },
490{ "Merge and Remove","Zusammenfügen/entfernen" }, 490{ "Merge and Remove","Zusammenfügen/entfernen" },
491{ "Merge","Zusammenfügen" }, 491{ "Merge","Zusammenfügen" },
492{ "Merge Contacts Editor","Contact-Zusammenfüge-Editor" }, 492{ "Merge Contacts Editor","Contact-Zusammenfüge-Editor" },
493{ "New List...","Neue Liste..." }, 493{ "New List...","Neue Liste..." },
494{ "Rename List...","Ändere Namen..." }, 494{ "Rename List...","Ändere Namen..." },
495{ "Remove List","Lösche Liste" }, 495{ "Remove List","Lösche Liste" },
496{ "Add Contact","Kontakt hinzu" }, 496{ "Add Contact","Kontakt hinzu" },
497{ "Change Email...","Ändere Email..." }, 497{ "Change Email...","Ändere Email..." },
498{ "Remove Contact","Entferne Kontakt" }, 498{ "Remove Contact","Entferne Kontakt" },
499{ "Use Preferred","Nutze Preferred" }, 499{ "Use Preferred","Nutze Preferred" },
500{ "Distribution List Editor","Distribution List Editor" }, 500{ "Distribution List Editor","Distribution List Editor" },
501{ "Choose which contacts to export","Wähle Kontakte zum Exportieren" }, 501{ "Choose which contacts to export","Wähle Kontakte zum Exportieren" },
502{ "Which contacts do you want to export?","Welche Kontakte sollen exportiert werden?" }, 502{ "Which contacts do you want to export?","Welche Kontakte sollen exportiert werden?" },
503{ "Contact Selection","Kontaktauswahl" }, 503{ "Contact Selection","Kontaktauswahl" },
504{ "&All","&Alle" }, 504{ "&All","&Alle" },
505{ "Export the entire address book","Exportiere das komplette Addressbuch" }, 505{ "Export the entire address book","Exportiere das komplette Addressbuch" },
506{ "&Selected","Au&sgewählte" }, 506{ "&Selected","Au&sgewählte" },
507{ "Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","###Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected." }, 507{ "Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","###Only export contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected." },
508{ "By matching &filter","Zutreffender &Filter" }, 508{ "By matching &filter","Zutreffender &Filter" },
509{ "Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","###Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters" }, 509{ "Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","###Only export contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters" },
510{ "By Cate&gories","Kategorien" }, 510{ "By Cate&gories","Kategorien" },
511{ "Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","###Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories." }, 511{ "Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","###Only export contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories." },
512{ "Select a filter to decide which contacts to export.","Wähle Filter zum Export aus." }, 512{ "Select a filter to decide which contacts to export.","Wähle Filter zum Export aus." },
513{ "Check the categories whose members you want to export.","Wähle die Kategorien zum Export aus." }, 513{ "Check the categories whose members you want to export.","Wähle die Kategorien zum Export aus." },
514{ "Sorting","Sortieren" }, 514{ "Sorting","Sortieren" },
515{ "Criterion:","Merkmal:" }, 515{ "Criterion:","Merkmal:" },
516{ "Order:","Reihenfolge:" }, 516{ "Order:","Reihenfolge:" },
517{ "Ascending","Aufsteigend" }, 517{ "Ascending","Aufsteigend" },
518{ "Descending","Absteigend" }, 518{ "Descending","Absteigend" },
519{ "Save file","Datei speichern" }, 519{ "Save file","Datei speichern" },
520{ "Error","Fehler" }, 520{ "Error","Fehler" },
521{ "Unable to export contacts.","Exportieren der Kontakte geht nicht." }, 521{ "Unable to export contacts.","Exportieren der Kontakte geht nicht." },
522{ "\nNo unsaved changes detected!\nNothing will be saved!","\nKeine ungespeicherten\nÄnderungen erkannt!\nNichts wird gespeichert!" }, 522{ "\nNo unsaved changes detected!\nNothing will be saved!","\nKeine ungespeicherten\nÄnderungen erkannt!\nNichts wird gespeichert!" },
523{ "Manage new categories...","Verwalte neue Kategorien..." }, 523{ "Manage new categories...","Verwalte neue Kategorien..." },
524{ "&File","Datei" }, 524{ "&File","Datei" },
525{ "&Edit","Bearbeite" }, 525{ "&Edit","Bearbeite" },
526{ "&View","Ansichten" }, 526{ "&View","Ansichten" },
527{ "&Settings","Konfiguration" }, 527{ "&Settings","Konfiguration" },
528{ "&Change selected","Ändere Selekt." }, 528{ "&Change selected","Ändere Selekt." },
529{ "&Help","Hilfe" }, 529{ "&Help","Hilfe" },
530{ "Remove sync info","Entferne Sync Info" }, 530{ "Remove sync info","Entferne Sync Info" },
531{ "For all profiles","Für alle Profile" }, 531{ "For all profiles","Für alle Profile" },
532{ "&Change","Ändere" }, 532{ "&Change","Ändere" },
533{ "Import xml (Qtopia)...","Importiere xml (Qtopia)..." }, 533{ "Import xml (Qtopia)...","Importiere xml (Qtopia)..." },
534{ "Export xml (Qtopia)...","Exportiere xml (Qtopia)..." }, 534{ "Export xml (Qtopia)...","Exportiere xml (Qtopia)..." },
535{ "Export to phone","Exportiere aufs Handy..." }, 535{ "Export to phone","Exportiere aufs Handy..." },
536{ "Which contacts do you want to select?","Welche Kontakte möchten Sie wählen?" }, 536{ "Which contacts do you want to select?","Welche Kontakte möchten Sie wählen?" },
537{ "&Modify","Ändere" }, 537{ "&Modify","Ändere" },
538{ "Choose which contacts to select","Bitte Kontakte auswählen!" }, 538{ "Choose which contacts to select","Bitte Kontakte auswählen!" },
539{ "After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nKontakten geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 539{ "After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nKontakten geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
540{ "Manage new Categories","Verwalte neue Kategorien" }, 540{ "Manage new Categories","Verwalte neue Kategorien" },
541{ "Add to category list","Füge zur Kategorieliste hinzu" }, 541{ "Add to category list","Füge zur Kategorieliste hinzu" },
542{ "Remove from addressees","Entferne von den Kontakten" }, 542{ "Remove from addressees","Entferne von den Kontakten" },
543{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 543{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
544{ "A&dd","Hinzufügen" }, 544{ "A&dd","Hinzufügen" },
545{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 545{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
546{ "NOTE: This will remove all old\ncontact data on phone!","ACHTUNG: Das löscht alle alten\nKontakt Daten auf dem Handy!" }, 546{ "NOTE: This will remove all old\ncontact data on phone!","ACHTUNG: Das löscht alle alten\nKontakt Daten auf dem Handy!" },
547{ "Export to mobile phone!","Exportiere auf das Handy!" }, 547{ "Export to mobile phone!","Exportiere auf das Handy!" },
548{ "Export to phone options","Export ans Handy Optionen" }, 548{ "Export to phone options","Export ans Handy Optionen" },
549{ "Writing to phone...","Sende Daten ans Handy..." }, 549{ "Writing to phone...","Sende Daten ans Handy..." },
550{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 550{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
551{ "Retry","Nochmal versuchen" }, 551{ "Retry","Nochmal versuchen" },
552{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 552{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
553{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 553{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
554{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 554{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
555{ "&Print View","Drucke Ansicht" }, 555{ "&Print View","Drucke Ansicht" },
556{ "&Print Details","Drucke Details" }, 556{ "&Print Details","Drucke Details" },
557{ "Beam v&Card(s)...","Beame v&Card(s)..." }, 557{ "Beam v&Card(s)...","Beame v&Card(s)..." },
558{ "Set formatted name...","Setze formatierten Namen..." }, 558{ "Set formatted name...","Setze formatierten Namen..." },
559{ "Kde Sync HowTo","Kde Sync HowTo" }, 559{ "Kde Sync HowTo","Kde Sync HowTo" },
560{ "Multi Sync HowTo","Multi Sync HowTo" }, 560{ "Multi Sync HowTo","Multi Sync HowTo" },
561{ "&Beam","&Beame" }, 561{ "&Beam","&Beame" },
562{ "Edit Email Addresses","Editiere Email Adressen" }, 562{ "Edit Email Addresses","Editiere Email Adressen" },
563{ "Email address:","Email Adresse:" }, 563{ "Email address:","Email Adresse:" },
564{ "Change","Ändere" }, 564{ "Change","Ändere" },
565{ "Set Standard","Setze Standard" }, 565{ "Set Standard","Setze Standard" },
566{ "New Contact","Neuer Contact" }, 566{ "New Contact","Neuer Contact" },
567{ "Undo %1","Rückgängig %1" }, 567{ "Undo %1","Rückgängig %1" },
568{ "Redo","Wiederholen" }, 568{ "Redo","Wiederholen" },
569{ "Saving ... please wait! ","Am Speichern ... bitte warten! " }, 569{ "Saving ... please wait! ","Am Speichern ... bitte warten! " },
570{ "CSV Import Dialog","CSV Import Dialog" }, 570{ "CSV Import Dialog","CSV Import Dialog" },
571{ "File to import:","Datei zum Import:" }, 571{ "File to import:","Datei zum Import:" },
572{ "Delimiter","Trennzeichen" }, 572{ "Delimiter","Trennzeichen" },
573{ "Comma","Komma" }, 573{ "Comma","Komma" },
574{ "Semicolon","Semikolon" }, 574{ "Semicolon","Semikolon" },
575{ "Tabulator","Tabulator" }, 575{ "Tabulator","Tabulator" },
576{ "Space","Leerzeichen" }, 576{ "Space","Leerzeichen" },
577{ "1","1" }, 577{ "1","1" },
578{ """,""" }, 578{ """,""" },
579{ "'","'" }, 579{ "'","'" },
580{ "Start at line:","Beginne mit Zeile:" }, 580{ "Start at line:","Beginne mit Zeile:" },
581{ "Textquote:","Textquote:" }, 581{ "Textquote:","Textquote:" },
582{ "Ignore duplicate delimiters","Ignoriere doppelte Trennzeichen" }, 582{ "Ignore duplicate delimiters","Ignoriere doppelte Trennzeichen" },
583{ "Import KDE 2 Addressbook","Importiere KDE 2 Addressbook" }, 583{ "Import KDE 2 Addressbook","Importiere KDE 2 Addressbook" },
584{ "Override previously imported entries?","Überschreibe bereits importierte Einträge?" }, 584{ "Override previously imported entries?","Überschreibe bereits importierte Einträge?" },
585{ "Select vCard to Import","Selektiere zu importierende vCard" }, 585{ "Select vCard to Import","Selektiere zu importierende vCard" },
586{ "Information","Information" }, 586{ "Information","Information" },
587{ "Import xml file","Importiere xml Datei" }, 587{ "Import xml file","Importiere xml Datei" },
588{ "Choose contact selection","Wähle Kontakt Auswahl" }, 588{ "Choose contact selection","Wähle Kontakt Auswahl" },
589{ "Select the entire address book","Wähle das ganze Adressbuch" }, 589{ "Select the entire address book","Wähle das ganze Adressbuch" },
590{ "Only contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","Nur in KA/Pi selektierte Kontate.\nDiese Option ist nicht verfügbar\nwhen keine Kontakte selektiert sind." }, 590{ "Only contacts selected in KAddressBook.\nThis option is disabled if no contacts are selected.","Nur in KA/Pi selektierte Kontate.\nDiese Option ist nicht verfügbar\nwhen keine Kontakte selektiert sind." },
591{ "Only contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","Nur Kontakte die auf den Filter zutreffen.\nDiese Option ist nicht verfügbar, wenn keine Filter definiert sind." }, 591{ "Only contacts matching the selected filter.\nThis option is disabled if you haven't defined any filters","Nur Kontakte die auf den Filter zutreffen.\nDiese Option ist nicht verfügbar, wenn keine Filter definiert sind." },
592{ "Only contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","Nur Kontakte die Mitglieder der Kategirien sind,\die links selektiert sind.\nDiese Option ist nicht verfügbar, wenn es keine Kategirien gibt." }, 592{ "Only contacts who are members of a category that is checked on the list to the left.\nThis option is disabled if you have no categories.","Nur Kontakte die Mitglieder der Kategirien sind,\die links selektiert sind.\nDiese Option ist nicht verfügbar, wenn es keine Kategirien gibt." },
593{ "Select a filter to decide which contacts to select.","Selektiere einen Filter um festzulegen welche Kontakte ausgewählt werden sollen." }, 593{ "Select a filter to decide which contacts to select.","Selektiere einen Filter um festzulegen welche Kontakte ausgewählt werden sollen." },
594{ "Check the categories whose members you want to select.","Setzte die Kategorien, dessen Mitglieder Sie auswählen möchten." }, 594{ "Check the categories whose members you want to select.","Setzte die Kategorien, dessen Mitglieder Sie auswählen möchten." },
595{ "I/O device: ","I/O device: " }, 595{ "I/O device: ","I/O device: " },
596{ "Connection: ","Connection: " }, 596{ "Connection: ","Connection: " },
597{ "Model(opt.): ","Model(opt.): " }, 597{ "Model(opt.): ","Model(opt.): " },
598{ "Exporting to phone...","Exportiere aufs Handy..." }, 598{ "Exporting to phone...","Exportiere aufs Handy..." },
599{ "Error exporting to phone","Fehler beim Export aufs Handy" }, 599{ "Error exporting to phone","Fehler beim Export aufs Handy" },
600{ "contacts successfully exported.","Kontakte erfolgreich exportiert." }, 600{ "contacts successfully exported.","Kontakte erfolgreich exportiert." },
601{ "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?","Wollen Sie<br>alle existieren Einträge von<br>%1<br>vor dem Export entfernen?" }, 601{ "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?","Wollen Sie<br>alle existieren Einträge von<br>%1<br>vor dem Export entfernen?" },
602{ "Set formatted name","Setze formatierten Namen" }, 602{ "Set formatted name","Setze formatierten Namen" },
603{ "You can set the formatted name\nfor a list of contacts in one go.","Sie können den formatierten Namen für\nein Liste von Kontakten auf einmal setzen." }, 603{ "You can set the formatted name\nfor a list of contacts in one go.","Sie können den formatierten Namen für\nein Liste von Kontakten auf einmal setzen." },
604{ "Set formatted name to:","Setze formatierten Name auf:" }, 604{ "Set formatted name to:","Setze formatierten Name auf:" },
605{ "Simple: James Bond","Einfach: James Bond" }, 605{ "Simple: James Bond","Einfach: James Bond" },
606{ "Full: Mr. James 007 Bond I","Voll: Mr. James 007 Bond I" }, 606{ "Full: Mr. James 007 Bond I","Voll: Mr. James 007 Bond I" },
607{ "Reverse: Bond, James","Umgekehrt: Bond, James" }, 607{ "Reverse: Bond, James","Umgekehrt: Bond, James" },
608{ "Organization: MI6","Organisation: MI6" }, 608{ "Organization: MI6","Organisation: MI6" },
609{ "Set formatted name to\norganization, if name empty","Setze formatierten Namen auf\nOrganisation, wenn Name leer ist." }, 609{ "Set formatted name to\norganization, if name empty","Setze formatierten Namen auf\nOrganisation, wenn Name leer ist." },
610{ "Select contact list","Selektiere Kontakt Liste" }, 610{ "Select contact list","Selektiere Kontakt Liste" },
611{ "Changing contact #%1","Ändere Kontakt #%1" }, 611{ "Changing contact #%1","Ändere Kontakt #%1" },
612{ "Refreshing view...","Lade Ansicht neu..." }, 612{ "Refreshing view...","Lade Ansicht neu..." },
613{ "Setting formatted name completed!","Setzen vom formatierten Namen beendet!" }, 613{ "Setting formatted name completed!","Setzen vom formatierten Namen beendet!" },
614{ "Removing voice...","Entferne voice..." }, 614{ "Removing voice...","Entferne voice..." },
615{ "Remove voice completed!","Entferne voice beendet!" }, 615{ "Remove voice completed!","Entferne voice beendet!" },
616{ "Merge with existing categories?","Zu bestehenden\nKategorien hinzufügen?" }, 616{ "Merge with existing categories?","Zu bestehenden\nKategorien hinzufügen?" },
617{ "Setting categories ... please wait!","Setze Kategorien ... bitte warten!" }, 617{ "Setting categories ... please wait!","Setze Kategorien ... bitte warten!" },
618{ "Setting categories completed!","Setzen der Kategorien beendet!" }, 618{ "Setting categories completed!","Setzen der Kategorien beendet!" },
619{ "OK","OK" }, 619{ "OK","OK" },
620{ "Please wait, processing categories...","Bitte warten, bearbeite Kategorien..." }, 620{ "Please wait, processing categories...","Bitte warten, bearbeite Kategorien..." },
621{ "Processing contact #%1","Bearbeite Kontakt #%1" }, 621{ "Processing contact #%1","Bearbeite Kontakt #%1" },
622{ " categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 622{ " categories added to list! "," Kategorien zur Liste hinzugefügt! " },
623{ "%1: %2","%1: %2" }, 623{ "%1: %2","%1: %2" },
624{ "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n","Ihr persönlicher Kontakt ist\nnicht gesetzt! Bitte selektieren Sie\nihn und setzen ihn mit Menu:\nKonfiguration - Setze wer bin ich\n" }, 624{ "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n","Ihr persönlicher Kontakt ist\nnicht gesetzt! Bitte selektieren Sie\nihn und setzen ihn mit Menu:\nKonfiguration - Setze wer bin ich\n" },
625{ "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>","<qt>Wollen Sie wirklich<br><b>%1</b><br>als persönlichen Kontakt setzent?</qt>" }, 625{ "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>","<qt>Wollen Sie wirklich<br><b>%1</b><br>als persönlichen Kontakt setzent?</qt>" },
626{ "Cut","Ausschneiden" }, 626{ "Cut","Ausschneiden" },
627{ "Paste","Einfügen" }, 627{ "Paste","Einfügen" },
628{ "Delete","Löschen" }, 628{ "Delete","Löschen" },
629{ "Choose...","Wähle..." }, 629{ "Choose...","Wähle..." },
630{ "Add View","Ansicht hinzufügen" }, 630{ "Add View","Ansicht hinzufügen" },
631{ "View name:","Ansicht Name:" }, 631{ "View name:","Ansicht Name:" },
632{ "View Type","Typ der Ansicht" }, 632{ "View Type","Typ der Ansicht" },
633{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." }, 633{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." },
634{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." }, 634{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." },
635{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." }, 635{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." },
636{ "Draw &separators","Zeichne &Trennlinie" }, 636{ "Draw &separators","Zeichne &Trennlinie" },
637{ "Separator &width:","Trennlinien &Breite:" }, 637{ "Separator &width:","Trennlinien &Breite:" },
638{ "&Padding:","Füllung:" }, 638{ "&Padding:","Füllung:" },
639{ "Cards","Karten" }, 639{ "Cards","Karten" },
640{ "&Margin:","&Rand:" }, 640{ "&Margin:","&Rand:" },
641{ "Draw &borders","Zeichne Ränder" }, 641{ "Draw &borders","Zeichne Ränder" },
642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." }, 642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." },
643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." }, 643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." },
644{ "Sets the width of column separators","Sets the width of column separators" }, 644{ "Sets the width of column separators","Sets the width of column separators" },
645{ "&Layout","&Layout" }, 645{ "&Layout","&Layout" },
646{ "Show &empty fields","Zeige leere Felder" }, 646{ "Show &empty fields","Zeige leere Felder" },
647{ "Show field &labels","Zeige Feld Label" }, 647{ "Show field &labels","Zeige Feld Label" },
648{ "Be&havior","Ver&halten" }, 648{ "Be&havior","Ver&halten" },
649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" }, 649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" },
650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" }, 650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" },
651{ "Confirm Delete","Bestätige Löschen" }, 651{ "Confirm Delete","Bestätige Löschen" },
652{ "Edit Address Book Filter","Editiere Adressbuch Filter" }, 652{ "Edit Address Book Filter","Editiere Adressbuch Filter" },
653{ "Category rule","Kategorie Regel" }, 653{ "Category rule","Kategorie Regel" },
654{ "Include categories","Inklusive" }, 654{ "Include categories","Inklusive" },
655{ "Exclude categories","Exclusive" }, 655{ "Exclude categories","Exclusive" },
656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" }, 656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" },
657{ "public","Öffentlich" }, 657{ "public","Öffentlich" },
658{ "private","Privat" }, 658{ "private","Privat" },
659{ "confidential","Vertraulich" }, 659{ "confidential","Vertraulich" },
660{ "Configure Resources","Konfiguriere Resourcen" }, 660{ "Configure Resources","Konfiguriere Resourcen" },
661{ "Resource Configuration","Resource Konfiguration" }, 661{ "Resource Configuration","Resource Konfiguration" },
662{ "Resources","Resourcen" }, 662{ "Resources","Resourcen" },
663{ "Standard","Standard" }, 663{ "Standard","Standard" },
664{ "&Use as Standard","Setze als Standard" }, 664{ "&Use as Standard","Setze als Standard" },
665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" }, 665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" },
666{ "General Settings","Allgemeine Einstellungen" }, 666{ "General Settings","Allgemeine Einstellungen" },
667{ "Read-only","Nur-Lesen" }, 667{ "Read-only","Nur-Lesen" },
668{ "Include in sync","Schließe in Sync mit ein" }, 668{ "Include in sync","Schließe in Sync mit ein" },
669{ "%1 Resource Settings","%1 Resource Einstellungen" }, 669{ "%1 Resource Settings","%1 Resource Einstellungen" },
670{ "Format:","Format:" }, 670{ "Format:","Format:" },
671{ "Location:","Ort:" }, 671{ "Location:","Ort:" },
672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" }, 672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" },
673{ "Language","Sprache" }, 673{ "Language","Sprache" },
674{ "Time Format","Zeit Format" }, 674{ "Time Format","Zeit Format" },
675{ "Time Zone","Zeit Zone" }, 675{ "Time Zone","Zeit Zone" },
676{ "Data storage path","Daten Speicherpfad" }, 676{ "Data storage path","Daten Speicherpfad" },
677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
680{ "Save settings","Speichere Einstellungen" }, 680{ "Save settings","Speichere Einstellungen" },
681{ "Save standard","Speichere Standard" }, 681{ "Save standard","Speichere Standard" },
682{ "Save","Speichern" }, 682{ "Save","Speichern" },
683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
685{ "Multiple Sync options","Multi Sync Optionen" }, 685{ "Multiple Sync options","Multi Sync Optionen" },
686{ "Sync algo options","Sync Ablauf Optionen" }, 686{ "Sync algo options","Sync Ablauf Optionen" },
687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
688{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 688{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
690{ "Write back options","Optionen zum Zurückschreiben" }, 690{ "Write back options","Optionen zum Zurückschreiben" },
691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
696{ "Time period","Zeitspanne" }, 696{ "Time period","Zeitspanne" },
697{ "From ","Von " }, 697{ "From ","Von " },
698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
699{ " weeks in the future "," Wochen in der Zukunft " }, 699{ " weeks in the future "," Wochen in der Zukunft " },
700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
701{ "Local temp file:","Lokale temp Datei:" }, 701{ "Local temp file:","Lokale temp Datei:" },
702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." }, 704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." },
705{ "Sorry","Tut mir leid" }, 705{ "Sorry","Tut mir leid" },
706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" }, 706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" },
707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" }, 707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" },
708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" }, 708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" },
709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
716{ "Error","Fehler" }, 716{ "Error","Fehler" },
717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
719{ "Warning","Warnung" }, 719{ "Warning","Warnung" },
720{ "Select week number","Wähle Wochen Nummer" }, 720{ "Select week number","Wähle Wochen Nummer" },
721{ "Februar","Februar" }, 721{ "Februar","Februar" },
722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
723{ "Password for remote access:","Passwort für fernen Zugriff:" }, 723{ "Password for remote access:","Passwort für fernen Zugriff:" },
724{ "Remote IP address:","Ferne IP Adresse:" }, 724{ "Remote IP address:","Ferne IP Adresse:" },
725{ "Remote port number:","Ferne Port Nummer:" }, 725{ "Remote port number:","Ferne Port Nummer:" },
726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
727{ "Remote from: ","Fern von: " }, 727{ "Remote from: ","Fern von: " },
728{ "Local from: ","Lokal von: " }, 728{ "Local from: ","Lokal von: " },
729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
731{ "Write back","Schreibe zurück" }, 731{ "Write back","Schreibe zurück" },
732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
733{ "Received sync request","Sync Anfrage erhalten" }, 733{ "Received sync request","Sync Anfrage erhalten" },
734{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 734{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
737{ "Sending file...","Sende Datei..." }, 737{ "Sending file...","Sende Datei..." },
738{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 738{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
739{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 739{ "Receiving synced file...","Gesyncte Daten erhalten..." },
740{ "Received %1 bytes","%1 Bytes erhalten" }, 740{ "Received %1 bytes","%1 Bytes erhalten" },
741{ "Writing file to disk...","Speichere Datei..." }, 741{ "Writing file to disk...","Speichere Datei..." },
742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
744{ "Synchronize!","Synchronisiere!" }, 744{ "Synchronize!","Synchronisiere!" },
745{ "High clock skew!","Großer Uhrzeitunterschied!" }, 745{ "High clock skew!","Großer Uhrzeitunterschied!" },
746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
747{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 747{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
751{ "Edit new contact","Bearbeite neuen Kontakt" }, 751{ "Edit new contact","Bearbeite neuen Kontakt" },
752{ "Edit ","Bearbeite " }, 752{ "Edit ","Bearbeite " },
753{ "No contact changed!","Kein Kontakt verändert" }, 753{ "No contact changed!","Kein Kontakt verändert" },
754{ "%1 contacts changed!","%1 Kontakte geändert!" }, 754{ "%1 contacts changed!","%1 Kontakte geändert!" },
755{ "Mobile (home)","Handy (Privat)" }, 755{ "Mobile (home)","Handy (Privat)" },
756{ "Mobile (work)","Handy (Arbeit)" }, 756{ "Mobile (work)","Handy (Arbeit)" },
757{ "Def.Formatted Name","Def. Format. Name" }, 757{ "Def.Formatted Name","Def. Format. Name" },
758{ "Colors","Farben" }, 758{ "Colors","Farben" },
759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
760{ "Backup enabled","Backup angeschaltet" }, 760{ "Backup enabled","Backup angeschaltet" },
761{ "Use standard backup dir","Standard Backupverzeichnis" }, 761{ "Use standard backup dir","Standard Backupverzeichnis" },
762{ "Number of Backups:","Anzahl der Backups" }, 762{ "Number of Backups:","Anzahl der Backups" },
763{ "Make backup every ","Mache ein Backup alle " }, 763{ "Make backup every ","Mache ein Backup alle " },
764{ " days"," Tage" }, 764{ " days"," Tage" },
765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
766{ "Backup Failed!","Backup Problem!" }, 766{ "Backup Failed!","Backup Problem!" },
767{ "Try again now","Versuche jetzt nochmal" }, 767{ "Try again now","Versuche jetzt nochmal" },
768{ "Try again later","Versuche später nochmal" }, 768{ "Try again later","Versuche später nochmal" },
769{ "Try again tomorrow","Versuche morgen nochmal" }, 769{ "Try again tomorrow","Versuche morgen nochmal" },
770{ "Disable backup","Schalte Backup ab" }, 770{ "Disable backup","Schalte Backup ab" },
771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
773{ "Choose action","Wähle Aktion" }, 773{ "Choose action","Wähle Aktion" },
774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." }, 774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." },
775{ "Global Settings...","Globale Einstellungen..." }, 775{ "Global Settings...","Globale Einstellungen..." },
776{ "Spouse","Ehegatte" }, 776{ "Spouse","Ehegatte" },
777{ "Notes","Notizen" }, 777{ "Notes","Notizen" },
778{ "Messanger","Messanger" }, 778{ "Messanger","Messanger" },
779{ "Assistant","Assistent" }, 779{ "Assistant","Assistent" },
780{ "Manager","Manager" }, 780{ "Manager","Manager" },
781{ "Secrecy","Sichtbar" }, 781{ "Secrecy","Sichtbar" },
782{ "male","männlich" }, 782{ "male","männlich" },
783{ "female","weiblich" }, 783{ "female","weiblich" },
784{ "Hide!","Verbergen!" }, 784{ "Hide!","Verbergen!" },
785{ "Show!","Anzeigen!" }, 785{ "Show!","Anzeigen!" },
786{ "Details","Details" }, 786{ "Details","Details" },
787{ "Search:","Suche:" }, 787{ "Search:","Suche:" },
788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
793{ "Pi-Sync Error","Pi-Sync Fehler" }, 793{ "Pi-Sync Error","Pi-Sync Fehler" },
794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
800{ "Receiving file from remote...","Empfange entfernte Datei..." }, 800{ "Receiving file from remote...","Empfange entfernte Datei..." },
801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
806{ "Writing back file ...","Schreibe Datei zurück..." }, 806{ "Writing back file ...","Schreibe Datei zurück..." },
807{ "Sending back file ...","Sende Datei zurück..." }, 807{ "Sending back file ...","Sende Datei zurück..." },
808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" }, 808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" },
809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" }, 810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" },
811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" }, 811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" },
812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." }, 812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." },
813{ "Import this contact?","Importiere diesen Kontakt?" }, 813{ "Import this contact?","Importiere diesen Kontakt?" },
814{ "Import all!","Importiere alle!" }, 814{ "Import all!","Importiere alle!" },
815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" }, 815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" },
816{ "Import Format","Import Format" }, 816{ "Import Format","Import Format" },
817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." }, 817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." },
818{ "Home2","Privat2" }, 818{ "Home2","Privat2" },
819{ "Work2","Arbeit2" }, 819{ "Work2","Arbeit2" },
820{ "Fax (Work)","Fax (Arbeit)" }, 820{ "Fax (Work)","Fax (Arbeit)" },
821{ "Fax (Home)","Fax (Privat)" }, 821{ "Fax (Home)","Fax (Privat)" },
822{ "Assistent","Sekretär(in)" }, 822{ "Assistent","Sekretär(in)" },
823{ "Company","Firma" }, 823{ "Company","Firma" },
824{ "Mobile2 (Work)","Handy2 (Arbeit)" }, 824{ "Mobile2 (Work)","Handy2 (Arbeit)" },
825{ "Mobile2 (Car)","Handy2 (Auto)" }, 825{ "Mobile2 (Car)","Handy2 (Auto)" },
826{ "Callback","Rückruf" }, 826{ "Callback","Rückruf" },
827{ "Fax (Other)","Fax (Anderes)" }, 827{ "Fax (Other)","Fax (Sonst.)" },
828{ "Primary","Bevorzugt" }, 828{ "Primary","Bevorzugt" },
829{ "Mobile (Home)","Handy (Privat)" }, 829{ "Mobile (Home)","Handy (Privat)" },
830{ "Unfiled","Nicht zugeordnet" }, 830{ "Unfiled","Nicht zugeordnet" },
831{ "Format.n.:","Format.N.:" }, 831{ "Format.n.:","Format.N.:" },
832{ "","" }, 832{ "Other Phone","Sonst. Telefon" },
833{ "","" }, 833{ "","" },
834{ "","" }, 834{ "","" },
835{ "","" }, 835{ "","" },
836{ "","" }, 836{ "","" },
837{ "","" }, \ No newline at end of file 837{ "","" }, \ No newline at end of file
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 789a694..0d8e8e8 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,2292 +1,2296 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#include <kconfig.h> 29#include <kconfig.h>
30 30
31#include <ksharedptr.h> 31#include <ksharedptr.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kapplication.h> 33#include <kapplication.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kidmanager.h> 35#include <kidmanager.h>
36//US 36//US
37#include <kstandarddirs.h> 37#include <kstandarddirs.h>
38#include <libkcal/syncdefines.h> 38#include <libkcal/syncdefines.h>
39 39
40//US #include "resource.h" 40//US #include "resource.h"
41#include "addressee.h" 41#include "addressee.h"
42 42
43using namespace KABC; 43using namespace KABC;
44 44
45static bool matchBinaryPattern( int value, int pattern ); 45static bool matchBinaryPattern( int value, int pattern );
46static bool matchBinaryPatternA( int value, int pattern ); 46static bool matchBinaryPatternA( int value, int pattern );
47static bool matchBinaryPatternP( int value, int pattern ); 47static bool matchBinaryPatternP( int value, int pattern );
48 48
49struct Addressee::AddresseeData : public KShared 49struct Addressee::AddresseeData : public KShared
50{ 50{
51 QString uid; 51 QString uid;
52 QString name; 52 QString name;
53 QString formattedName; 53 QString formattedName;
54 QString familyName; 54 QString familyName;
55 QString givenName; 55 QString givenName;
56 QString additionalName; 56 QString additionalName;
57 QString prefix; 57 QString prefix;
58 QString suffix; 58 QString suffix;
59 QString nickName; 59 QString nickName;
60 QDateTime birthday; 60 QDateTime birthday;
61 QString mailer; 61 QString mailer;
62 TimeZone timeZone; 62 TimeZone timeZone;
63 Geo geo; 63 Geo geo;
64 QString title; 64 QString title;
65 QString role; 65 QString role;
66 QString organization; 66 QString organization;
67 QString note; 67 QString note;
68 QString productId; 68 QString productId;
69 QDateTime revision; 69 QDateTime revision;
70 QString sortString; 70 QString sortString;
71 QString externalUID; 71 QString externalUID;
72 QString originalExternalUID; 72 QString originalExternalUID;
73 KURL url; 73 KURL url;
74 Secrecy secrecy; 74 Secrecy secrecy;
75 Picture logo; 75 Picture logo;
76 Picture photo; 76 Picture photo;
77 Sound sound; 77 Sound sound;
78 Agent agent; 78 Agent agent;
79 QString mExternalId; 79 QString mExternalId;
80 PhoneNumber::List phoneNumbers; 80 PhoneNumber::List phoneNumbers;
81 Address::List addresses; 81 Address::List addresses;
82 Key::List keys; 82 Key::List keys;
83 QStringList emails; 83 QStringList emails;
84 QStringList categories; 84 QStringList categories;
85 QStringList custom; 85 QStringList custom;
86 int mTempSyncStat; 86 int mTempSyncStat;
87 Resource *resource; 87 Resource *resource;
88 88
89 bool empty :1; 89 bool empty :1;
90 bool changed :1; 90 bool changed :1;
91 bool tagged :1; 91 bool tagged :1;
92}; 92};
93 93
94Addressee::Addressee() 94Addressee::Addressee()
95{ 95{
96 mData = new AddresseeData; 96 mData = new AddresseeData;
97 mData->empty = true; 97 mData->empty = true;
98 mData->changed = false; 98 mData->changed = false;
99 mData->resource = 0; 99 mData->resource = 0;
100 mData->mExternalId = ":"; 100 mData->mExternalId = ":";
101 mData->revision = QDateTime ( QDate( 2003,1,1)); 101 mData->revision = QDateTime ( QDate( 2003,1,1));
102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
103} 103}
104 104
105Addressee::~Addressee() 105Addressee::~Addressee()
106{ 106{
107} 107}
108 108
109Addressee::Addressee( const Addressee &a ) 109Addressee::Addressee( const Addressee &a )
110{ 110{
111 mData = a.mData; 111 mData = a.mData;
112} 112}
113 113
114Addressee &Addressee::operator=( const Addressee &a ) 114Addressee &Addressee::operator=( const Addressee &a )
115{ 115{
116 mData = a.mData; 116 mData = a.mData;
117 return (*this); 117 return (*this);
118} 118}
119 119
120Addressee Addressee::copy() 120Addressee Addressee::copy()
121{ 121{
122 Addressee a; 122 Addressee a;
123 *(a.mData) = *mData; 123 *(a.mData) = *mData;
124 return a; 124 return a;
125} 125}
126 126
127void Addressee::detach() 127void Addressee::detach()
128{ 128{
129 if ( mData.count() == 1 ) return; 129 if ( mData.count() == 1 ) return;
130 *this = copy(); 130 *this = copy();
131} 131}
132 132
133bool Addressee::operator==( const Addressee &a ) const 133bool Addressee::operator==( const Addressee &a ) const
134{ 134{
135 if ( uid() != a.uid() ) return false; 135 if ( uid() != a.uid() ) return false;
136 if ( mData->name != a.mData->name ) return false; 136 if ( mData->name != a.mData->name ) return false;
137 if ( mData->formattedName != a.mData->formattedName ) return false; 137 if ( mData->formattedName != a.mData->formattedName ) return false;
138 if ( mData->familyName != a.mData->familyName ) return false; 138 if ( mData->familyName != a.mData->familyName ) return false;
139 if ( mData->givenName != a.mData->givenName ) return false; 139 if ( mData->givenName != a.mData->givenName ) return false;
140 if ( mData->additionalName != a.mData->additionalName ) return false; 140 if ( mData->additionalName != a.mData->additionalName ) return false;
141 if ( mData->prefix != a.mData->prefix ) return false; 141 if ( mData->prefix != a.mData->prefix ) return false;
142 if ( mData->suffix != a.mData->suffix ) return false; 142 if ( mData->suffix != a.mData->suffix ) return false;
143 if ( mData->nickName != a.mData->nickName ) return false; 143 if ( mData->nickName != a.mData->nickName ) return false;
144 if ( mData->birthday != a.mData->birthday ) return false; 144 if ( mData->birthday != a.mData->birthday ) return false;
145 if ( mData->mailer != a.mData->mailer ) return false; 145 if ( mData->mailer != a.mData->mailer ) return false;
146 if ( mData->timeZone != a.mData->timeZone ) return false; 146 if ( mData->timeZone != a.mData->timeZone ) return false;
147 if ( mData->geo != a.mData->geo ) return false; 147 if ( mData->geo != a.mData->geo ) return false;
148 if ( mData->title != a.mData->title ) return false; 148 if ( mData->title != a.mData->title ) return false;
149 if ( mData->role != a.mData->role ) return false; 149 if ( mData->role != a.mData->role ) return false;
150 if ( mData->organization != a.mData->organization ) return false; 150 if ( mData->organization != a.mData->organization ) return false;
151 if ( mData->note != a.mData->note ) return false; 151 if ( mData->note != a.mData->note ) return false;
152 if ( mData->productId != a.mData->productId ) return false; 152 if ( mData->productId != a.mData->productId ) return false;
153 //if ( mData->revision != a.mData->revision ) return false; 153 //if ( mData->revision != a.mData->revision ) return false;
154 if ( mData->sortString != a.mData->sortString ) return false; 154 if ( mData->sortString != a.mData->sortString ) return false;
155 if ( mData->secrecy != a.mData->secrecy ) return false; 155 if ( mData->secrecy != a.mData->secrecy ) return false;
156 if ( mData->logo != a.mData->logo ) return false; 156 if ( mData->logo != a.mData->logo ) return false;
157 if ( mData->photo != a.mData->photo ) return false; 157 if ( mData->photo != a.mData->photo ) return false;
158 if ( mData->sound != a.mData->sound ) return false; 158 if ( mData->sound != a.mData->sound ) return false;
159 if ( mData->agent != a.mData->agent ) return false; 159 if ( mData->agent != a.mData->agent ) return false;
160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
161 ( mData->url != a.mData->url ) ) return false; 161 ( mData->url != a.mData->url ) ) return false;
162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
163 if ( mData->addresses != a.mData->addresses ) return false; 163 if ( mData->addresses != a.mData->addresses ) return false;
164 if ( mData->keys != a.mData->keys ) return false; 164 if ( mData->keys != a.mData->keys ) return false;
165 if ( mData->emails != a.mData->emails ) return false; 165 if ( mData->emails != a.mData->emails ) return false;
166 if ( mData->categories != a.mData->categories ) return false; 166 if ( mData->categories != a.mData->categories ) return false;
167 if ( mData->custom != a.mData->custom ) return false; 167 if ( mData->custom != a.mData->custom ) return false;
168 168
169 return true; 169 return true;
170} 170}
171 171
172bool Addressee::operator!=( const Addressee &a ) const 172bool Addressee::operator!=( const Addressee &a ) const
173{ 173{
174 return !( a == *this ); 174 return !( a == *this );
175} 175}
176 176
177bool Addressee::isEmpty() const 177bool Addressee::isEmpty() const
178{ 178{
179 return mData->empty; 179 return mData->empty;
180} 180}
181ulong Addressee::getCsum4List( const QStringList & attList) 181ulong Addressee::getCsum4List( const QStringList & attList)
182{ 182{
183 int max = attList.count(); 183 int max = attList.count();
184 ulong cSum = 0; 184 ulong cSum = 0;
185 int j,k,i; 185 int j,k,i;
186 int add; 186 int add;
187 for ( i = 0; i < max ; ++i ) { 187 for ( i = 0; i < max ; ++i ) {
188 QString s = attList[i]; 188 QString s = attList[i];
189 if ( ! s.isEmpty() ){ 189 if ( ! s.isEmpty() ){
190 j = s.length(); 190 j = s.length();
191 for ( k = 0; k < j; ++k ) { 191 for ( k = 0; k < j; ++k ) {
192 int mul = k +1; 192 int mul = k +1;
193 add = s[k].unicode (); 193 add = s[k].unicode ();
194 if ( k < 16 ) 194 if ( k < 16 )
195 mul = mul * mul; 195 mul = mul * mul;
196 int ii = i+1; 196 int ii = i+1;
197 add = add * mul *ii*ii*ii; 197 add = add * mul *ii*ii*ii;
198 cSum += add; 198 cSum += add;
199 //qDebug("csum: %d %d %d", i,k,cSum); 199 //qDebug("csum: %d %d %d", i,k,cSum);
200 } 200 }
201 } 201 }
202 202
203 } 203 }
204 //QString dump = attList.join(","); 204 //QString dump = attList.join(",");
205 //qDebug("csum: %d %s", cSum,dump.latin1()); 205 //qDebug("csum: %d %s", cSum,dump.latin1());
206 206
207 return cSum; 207 return cSum;
208 208
209} 209}
210void Addressee::computeCsum(const QString &dev) 210void Addressee::computeCsum(const QString &dev)
211{ 211{
212 QStringList l; 212 QStringList l;
213 //if ( !mData->name.isEmpty() ) l.append(mData->name); 213 //if ( !mData->name.isEmpty() ) l.append(mData->name);
214 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 214 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
215 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 215 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
216 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 216 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
217 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName ); 217 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName );
218 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 218 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
219 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 219 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
220 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 220 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
221 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 221 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
222 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 222 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
223 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 223 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
224 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 224 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
225 if ( !mData->title .isEmpty() ) l.append( mData->title ); 225 if ( !mData->title .isEmpty() ) l.append( mData->title );
226 if ( !mData->role.isEmpty() ) l.append( mData->role ); 226 if ( !mData->role.isEmpty() ) l.append( mData->role );
227 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 227 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
228 if ( !mData->note.isEmpty() ) l.append( mData->note ); 228 if ( !mData->note.isEmpty() ) l.append( mData->note );
229 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 229 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
230 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 230 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
231 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 231 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
232 if ( !mData->logo.undefined() ) { 232 if ( !mData->logo.undefined() ) {
233 if ( !mData->logo.isIntern() ) 233 if ( !mData->logo.isIntern() )
234 l.append( mData->logo.url() ); 234 l.append( mData->logo.url() );
235 else 235 else
236 l.append( QString::number(mData->logo.data().width()* mData->logo.data().height())); 236 l.append( QString::number(mData->logo.data().width()* mData->logo.data().height()));
237 } else { 237 } else {
238 l.append( "nologo"); 238 l.append( "nologo");
239 } 239 }
240 if ( !mData->photo.undefined() ) { 240 if ( !mData->photo.undefined() ) {
241 if ( !mData->photo.isIntern() ) 241 if ( !mData->photo.isIntern() )
242 l.append( mData->photo.url() ); 242 l.append( mData->photo.url() );
243 else 243 else
244 l.append( QString::number(mData->photo.data().width()* mData->photo.data().height())); 244 l.append( QString::number(mData->photo.data().width()* mData->photo.data().height()));
245 } else { 245 } else {
246 l.append( "nophoto"); 246 l.append( "nophoto");
247 } 247 }
248#if 0 248#if 0
249 if ( !mData->sound.undefined() ) { 249 if ( !mData->sound.undefined() ) {
250 if ( !mData->sound.isIntern() ) 250 if ( !mData->sound.isIntern() )
251 l.append( mData->sound.url() ); 251 l.append( mData->sound.url() );
252 else 252 else
253 l.append( QString(mData->sound.data().with()* mData->sound.data().height())); 253 l.append( QString(mData->sound.data().with()* mData->sound.data().height()));
254 } else { 254 } else {
255 l.append( "nosound"); 255 l.append( "nosound");
256 } 256 }
257#endif 257#endif
258 //if ( !mData->agent.isEmpty() ) l.append( ); 258 //if ( !mData->agent.isEmpty() ) l.append( );
259 if ( mData->url.isValid() ) 259 if ( mData->url.isValid() )
260 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() ); 260 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() );
261 KABC::PhoneNumber::List phoneNumbers; 261 KABC::PhoneNumber::List phoneNumbers;
262 KABC::PhoneNumber::List::Iterator phoneIter; 262 KABC::PhoneNumber::List::Iterator phoneIter;
263 263
264 QStringList t; 264 QStringList t;
265 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 265 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
266 ++phoneIter ) 266 ++phoneIter )
267 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 267 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
268 t.sort(); 268 t.sort();
269 uint iii; 269 uint iii;
270 for ( iii = 0; iii < t.count(); ++iii) 270 for ( iii = 0; iii < t.count(); ++iii)
271 l.append( t[iii] ); 271 l.append( t[iii] );
272 t = mData->emails; 272 t = mData->emails;
273 t.sort(); 273 t.sort();
274 for ( iii = 0; iii < t.count(); ++iii) 274 for ( iii = 0; iii < t.count(); ++iii)
275 l.append( t[iii] ); 275 l.append( t[iii] );
276 t = mData->categories; 276 t = mData->categories;
277 t.sort(); 277 t.sort();
278 for ( iii = 0; iii < t.count(); ++iii) 278 for ( iii = 0; iii < t.count(); ++iii)
279 l.append( t[iii] ); 279 l.append( t[iii] );
280 t = mData->custom; 280 t = mData->custom;
281 t.sort(); 281 t.sort();
282 for ( iii = 0; iii < t.count(); ++iii) 282 for ( iii = 0; iii < t.count(); ++iii)
283 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { 283 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) {
284 int find = t[iii].find (':')+1; 284 int find = t[iii].find (':')+1;
285 //qDebug("lennnn %d %d ", find, t[iii].length()); 285 //qDebug("lennnn %d %d ", find, t[iii].length());
286 if ( find < t[iii].length()) 286 if ( find < t[iii].length())
287 l.append( t[iii] ); 287 l.append( t[iii] );
288 288
289 } 289 }
290 KABC::Address::List::Iterator addressIter; 290 KABC::Address::List::Iterator addressIter;
291 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 291 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
292 ++addressIter ) { 292 ++addressIter ) {
293 t = (*addressIter).asList(); 293 t = (*addressIter).asList();
294 t.sort(); 294 t.sort();
295 for ( iii = 0; iii < t.count(); ++iii) 295 for ( iii = 0; iii < t.count(); ++iii)
296 l.append( t[iii] ); 296 l.append( t[iii] );
297 } 297 }
298 uint cs = getCsum4List(l); 298 uint cs = getCsum4List(l);
299 299
300#if 0 300#if 0
301 for ( iii = 0; iii < l.count(); ++iii) 301 for ( iii = 0; iii < l.count(); ++iii)
302 qDebug("%d***%s***",iii,l[iii].latin1()); 302 qDebug("%d***%s***",iii,l[iii].latin1());
303 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); 303 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
304#endif 304#endif
305 305
306 306
307 setCsum( dev, QString::number (cs )); 307 setCsum( dev, QString::number (cs ));
308} 308}
309bool Addressee::matchAddress( QRegExp* re ) const 309bool Addressee::matchAddress( QRegExp* re ) const
310{ 310{
311 KABC::Address::List::Iterator addressIter; 311 KABC::Address::List::Iterator addressIter;
312 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 312 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
313 ++addressIter ) { 313 ++addressIter ) {
314 if ( (*addressIter).matchAddress( re ) ) 314 if ( (*addressIter).matchAddress( re ) )
315 return true; 315 return true;
316 } 316 }
317 return false; 317 return false;
318} 318}
319bool Addressee::matchPhoneNumber( QRegExp* re ) const 319bool Addressee::matchPhoneNumber( QRegExp* re ) const
320{ 320{
321 KABC::PhoneNumber::List::Iterator phoneIter; 321 KABC::PhoneNumber::List::Iterator phoneIter;
322 322
323 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) { 323 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) {
324#if QT_VERSION >= 0x030000 324#if QT_VERSION >= 0x030000
325 if (re->search( (*phoneIter).number() ) == 0) 325 if (re->search( (*phoneIter).number() ) == 0)
326#else 326#else
327 if (re->match( (*phoneIter).number() ) == 0) 327 if (re->match( (*phoneIter).number() ) == 0)
328#endif 328#endif
329 return true; 329 return true;
330 330
331 } 331 }
332 return false; 332 return false;
333 333
334} 334}
335void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 335void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
336{ 336{
337 // merge all standard non-outlook fields. 337 // merge all standard non-outlook fields.
338 //if isSubSet (e.g. mobile phone sync) merge all fields 338 //if isSubSet (e.g. mobile phone sync) merge all fields
339 339
340 detach(); 340 detach();
341 if ( isSubSet ) { 341 if ( isSubSet ) {
342 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 342 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
343 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 343 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
344 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 344 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
345 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 345 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
346 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 346 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
347 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; 347 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix;
348 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; 348 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix;
349 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; 349 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ;
350 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; 350 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ;
351 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; 351 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName;
352 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; 352 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ;
353 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; 353 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ;
354 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; 354 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy;
355 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ; 355 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
356 if ( !mData->birthday.isValid() ) 356 if ( !mData->birthday.isValid() )
357 if ( ad.mData->birthday.isValid()) 357 if ( ad.mData->birthday.isValid())
358 mData->birthday = ad.mData->birthday; 358 mData->birthday = ad.mData->birthday;
359 359
360 } 360 }
361 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; 361 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
362 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; 362 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
363 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; 363 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
364 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; 364 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId;
365 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; 365 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString;
366 QStringList t; 366 QStringList t;
367 QStringList tAD; 367 QStringList tAD;
368 uint iii; 368 uint iii;
369 369
370 // ********** phone numbers 370 // ********** phone numbers
371 if ( isSubSet ) { 371 if ( isSubSet ) {
372 PhoneNumber::List phoneAD = ad.phoneNumbers(); 372 PhoneNumber::List phoneAD = ad.phoneNumbers();
373 PhoneNumber::List::Iterator phoneItAD; 373 PhoneNumber::List::Iterator phoneItAD;
374 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 374 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
375 bool found = false; 375 bool found = false;
376 PhoneNumber::List::Iterator it; 376 PhoneNumber::List::Iterator it;
377 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 377 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
378 if ( ( *phoneItAD ).contains( (*it) ) ) { 378 if ( ( *phoneItAD ).contains( (*it) ) ) {
379 found = true; 379 found = true;
380 (*it).setType( ( *phoneItAD ).type() ); 380 (*it).setType( ( *phoneItAD ).type() );
381 (*it).setNumber( ( *phoneItAD ).number() ); 381 (*it).setNumber( ( *phoneItAD ).number() );
382 break; 382 break;
383 } 383 }
384 } 384 }
385 // if ( isSubSet && ! found ) 385 // if ( isSubSet && ! found )
386 if ( ! found ) // LR try this one... 386 if ( ! found ) // LR try this one...
387 mData->phoneNumbers.append( *phoneItAD ); 387 mData->phoneNumbers.append( *phoneItAD );
388 } 388 }
389 } else { 389 } else {
390 PhoneNumber::List phoneAD = ad.phoneNumbers(); 390 PhoneNumber::List phoneAD = ad.phoneNumbers();
391 PhoneNumber::List::Iterator phoneItAD; 391 PhoneNumber::List::Iterator phoneItAD;
392 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 392 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
393 bool found = false; 393 bool found = false;
394 PhoneNumber::List::Iterator it; 394 PhoneNumber::List::Iterator it;
395 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 395 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
396 if ( ( *phoneItAD ).contains( (*it) ) ) { 396 if ( ( *phoneItAD ).contains( (*it) ) ) {
397 found = true; 397 found = true;
398 (*it).setType( ( *phoneItAD ).type() ); 398 (*it).setType( ( *phoneItAD ).type() );
399 (*it).setNumber( ( *phoneItAD ).number() ); 399 (*it).setNumber( ( *phoneItAD ).number() );
400 break; 400 break;
401 } 401 }
402 } 402 }
403 if ( ! found ) { // append numbers which do not have work or home type 403 if ( ! found ) { // append numbers which do not have work or home type
404 if ( ! ( ( *phoneItAD ).type() & (PhoneNumber::Work | PhoneNumber::Home) ) ) 404 if ( ! ( ( *phoneItAD ).type() & (PhoneNumber::Work | PhoneNumber::Home) ) )
405 mData->phoneNumbers.append( *phoneItAD ); 405 mData->phoneNumbers.append( *phoneItAD );
406 } 406 }
407 } 407 }
408 } 408 }
409 if ( isSubSet ) { 409 if ( isSubSet ) {
410 // ************* emails; 410 // ************* emails;
411 t = mData->emails; 411 t = mData->emails;
412 tAD = ad.mData->emails; 412 tAD = ad.mData->emails;
413 for ( iii = 0; iii < tAD.count(); ++iii) 413 for ( iii = 0; iii < tAD.count(); ++iii)
414 if ( !t.contains(tAD[iii] ) ) 414 if ( !t.contains(tAD[iii] ) )
415 mData->emails.append( tAD[iii] ); 415 mData->emails.append( tAD[iii] );
416 } 416 }
417 417
418 // ************* categories; 418 // ************* categories;
419 if ( isSubSet ) { 419 if ( isSubSet ) {
420 t = mData->categories; 420 t = mData->categories;
421 tAD = ad.mData->categories; 421 tAD = ad.mData->categories;
422 for ( iii = 0; iii < tAD.count(); ++iii) 422 for ( iii = 0; iii < tAD.count(); ++iii)
423 if ( !t.contains(tAD[iii] ) ) 423 if ( !t.contains(tAD[iii] ) )
424 mData->categories.append( tAD[iii] ); 424 mData->categories.append( tAD[iii] );
425 } 425 }
426 QStringList::ConstIterator it; 426 QStringList::ConstIterator it;
427 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) { 427 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) {
428 QString qualifiedName = (*it).left( (*it).find( ":" )); 428 QString qualifiedName = (*it).left( (*it).find( ":" ));
429 bool found = false; 429 bool found = false;
430 QStringList::ConstIterator itL; 430 QStringList::ConstIterator itL;
431 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) { 431 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) {
432 if ( (*itL).startsWith( qualifiedName ) ) { 432 if ( (*itL).startsWith( qualifiedName ) ) {
433 found = true; 433 found = true;
434 break; 434 break;
435 } 435 }
436 } 436 }
437 if ( ! found ) { 437 if ( ! found ) {
438 mData->custom.append( *it ); 438 mData->custom.append( *it );
439 } 439 }
440 } 440 }
441 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo; 441 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo;
442 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo; 442 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo;
443 if ( !mData->sound.isIntern() ) { 443 if ( !mData->sound.isIntern() ) {
444 if ( mData->sound.url().isEmpty() ) { 444 if ( mData->sound.url().isEmpty() ) {
445 mData->sound = ad.mData->sound; 445 mData->sound = ad.mData->sound;
446 } 446 }
447 } 447 }
448 if ( !mData->agent.isIntern() ) { 448 if ( !mData->agent.isIntern() ) {
449 if ( mData->agent.url().isEmpty() ) { 449 if ( mData->agent.url().isEmpty() ) {
450 mData->agent = ad.mData->agent; 450 mData->agent = ad.mData->agent;
451 } 451 }
452 } 452 }
453 { 453 {
454 Key::List::Iterator itA; 454 Key::List::Iterator itA;
455 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) { 455 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) {
456 bool found = false; 456 bool found = false;
457 Key::List::Iterator it; 457 Key::List::Iterator it;
458 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 458 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
459 if ( (*it) == (*itA)) { 459 if ( (*it) == (*itA)) {
460 found = true; 460 found = true;
461 break; 461 break;
462 462
463 } 463 }
464 } 464 }
465 if ( ! found ) { 465 if ( ! found ) {
466 mData->keys.append( *itA ); 466 mData->keys.append( *itA );
467 } 467 }
468 } 468 }
469 } 469 }
470 if ( isSubSet ) { 470 if ( isSubSet ) {
471 KABC::Address::List::Iterator addressIterA; 471 KABC::Address::List::Iterator addressIterA;
472 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) { 472 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) {
473 bool found = false; 473 bool found = false;
474 KABC::Address::List::Iterator addressIter; 474 KABC::Address::List::Iterator addressIter;
475 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 475 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
476 ++addressIter ) { 476 ++addressIter ) {
477 if ( (*addressIter) == (*addressIterA)) { 477 if ( (*addressIter) == (*addressIterA)) {
478 found = true; 478 found = true;
479 (*addressIter).setType( (*addressIterA).type() ); 479 (*addressIter).setType( (*addressIterA).type() );
480 break; 480 break;
481 } 481 }
482 482
483 } 483 }
484 if ( isSubSet && ! found ) { 484 if ( isSubSet && ! found ) {
485 mData->addresses.append( *addressIterA ); 485 mData->addresses.append( *addressIterA );
486 } 486 }
487 } 487 }
488 } 488 }
489 //qDebug("merge contact %s ", ad.uid().latin1()); 489 //qDebug("merge contact %s ", ad.uid().latin1());
490 setUid( ad.uid() ); 490 setUid( ad.uid() );
491 setRevision( ad.revision() ); 491 setRevision( ad.revision() );
492} 492}
493 493
494bool Addressee::removeVoice() 494bool Addressee::removeVoice()
495{ 495{
496 PhoneNumber::List phoneN = phoneNumbers(); 496 PhoneNumber::List phoneN = phoneNumbers();
497 PhoneNumber::List::Iterator phoneIt; 497 PhoneNumber::List::Iterator phoneIt;
498 bool found = false; 498 bool found = false;
499 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 499 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
500 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 500 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
501 if ((*phoneIt).type() - PhoneNumber::Voice ) { 501 if ((*phoneIt).type() - PhoneNumber::Voice ) {
502 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 502 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
503 insertPhoneNumber( (*phoneIt) ); 503 insertPhoneNumber( (*phoneIt) );
504 found = true; 504 found = true;
505 } 505 }
506 } 506 }
507 507
508 } 508 }
509 return found; 509 return found;
510} 510}
511 511
512bool Addressee::containsAdr(const Addressee& ad ) 512bool Addressee::containsAdr(const Addressee& ad )
513{ 513{
514 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false; 514 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false;
515 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false; 515 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false;
516 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ; 516 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ;
517 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ; 517 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ;
518 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ; 518 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ;
519 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ; 519 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ;
520 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ; 520 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ;
521 521
522 // compare phone numbers 522 // compare phone numbers
523 PhoneNumber::List phoneN = ad.phoneNumbers(); 523 PhoneNumber::List phoneN = ad.phoneNumbers();
524 PhoneNumber::List::Iterator phoneIt; 524 PhoneNumber::List::Iterator phoneIt;
525 bool found = false; 525 bool found = false;
526 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 526 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
527 bool found = false; 527 bool found = false;
528 PhoneNumber::List phoneL = ad.phoneNumbers(); 528 PhoneNumber::List phoneL = ad.phoneNumbers();
529 PhoneNumber::List::Iterator phoneItL; 529 PhoneNumber::List::Iterator phoneItL;
530 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) { 530 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) {
531 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) { 531 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) {
532 found = true; 532 found = true;
533 break; 533 break;
534 } 534 }
535 } 535 }
536 if ( ! found ) 536 if ( ! found )
537 return false; 537 return false;
538 } 538 }
539 return true; 539 return true;
540 540
541} 541}
542void Addressee::simplifyAddresses() 542void Addressee::simplifyAddresses()
543{ 543{
544 544
545 545
546 Address::List list; 546 Address::List list;
547 Address::List::Iterator it; 547 Address::List::Iterator it;
548 Address::List::Iterator it2; 548 Address::List::Iterator it2;
549 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 549 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
550 it2 = it; 550 it2 = it;
551 ++it2; 551 ++it2;
552 for( ; it2 != mData->addresses.end(); ++it2 ) { 552 for( ; it2 != mData->addresses.end(); ++it2 ) {
553 if ( (*it) == (*it2) ) { 553 if ( (*it) == (*it2) ) {
554 list.append( *it ); 554 list.append( *it );
555 break; 555 break;
556 } 556 }
557 } 557 }
558 } 558 }
559 for( it = list.begin(); it != list.end(); ++it ) { 559 for( it = list.begin(); it != list.end(); ++it ) {
560 removeAddress( (*it) ); 560 removeAddress( (*it) );
561 } 561 }
562 562
563 list.clear(); 563 list.clear();
564 int max = 2; 564 int max = 2;
565 if ( mData->url.isValid() ) 565 if ( mData->url.isValid() )
566 max = 1; 566 max = 1;
567 if ( mData->addresses.count() <= max ) return ; 567 if ( mData->addresses.count() <= max ) return ;
568 int count = 0; 568 int count = 0;
569 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 569 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
570 if ( count >= max ) 570 if ( count >= max )
571 list.append( *it ); 571 list.append( *it );
572 ++count; 572 ++count;
573 } 573 }
574 for( it = list.begin(); it != list.end(); ++it ) { 574 for( it = list.begin(); it != list.end(); ++it ) {
575 removeAddress( (*it) ); 575 removeAddress( (*it) );
576 } 576 }
577} 577}
578 578
579// removes all emails but the first 579// removes all emails but the first
580// needed by phone sync 580// needed by phone sync
581void Addressee::simplifyEmails() 581void Addressee::simplifyEmails()
582{ 582{
583 if ( mData->emails.count() == 0 ) return ; 583 if ( mData->emails.count() == 0 ) return ;
584 QString email = mData->emails.first(); 584 QString email = mData->emails.first();
585 detach(); 585 detach();
586 mData->emails.clear(); 586 mData->emails.clear();
587 mData->emails.append( email ); 587 mData->emails.append( email );
588} 588}
589void Addressee::makePhoneNumbersOLcompatible() 589void Addressee::makePhoneNumbersOLcompatible()
590{ 590{
591 KABC::PhoneNumber::List::Iterator phoneIter; 591 KABC::PhoneNumber::List::Iterator phoneIter;
592 KABC::PhoneNumber::List::Iterator phoneIter2; 592 KABC::PhoneNumber::List::Iterator phoneIter2;
593 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 593 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
594 ++phoneIter ) { 594 ++phoneIter ) {
595 ( *phoneIter ).makeCompat(); 595 ( *phoneIter ).makeCompat();
596 } 596 }
597 int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref ); 597 int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref );
598 int hasHome2 = hasPhoneNumberType( PhoneNumber::Home ); 598 int hasHome2 = hasPhoneNumberType( PhoneNumber::Home );
599 int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref ); 599 int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref );
600 int hasWork2 = hasPhoneNumberType( PhoneNumber::Work ); 600 int hasWork2 = hasPhoneNumberType( PhoneNumber::Work );
601 int hasCell = hasPhoneNumberType( PhoneNumber::Cell ); 601 int hasCell = hasPhoneNumberType( PhoneNumber::Cell );
602 int hasCell2 = hasPhoneNumberType( PhoneNumber::Car ); 602 int hasCell2 = hasPhoneNumberType( PhoneNumber::Car );
603 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 603 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
604 ++phoneIter ) { 604 ++phoneIter ) {
605 if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) { 605 if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) {
606 (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref ); 606 (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref );
607 ++hasHome; 607 ++hasHome;
608 if ( hasHome2 ) --hasHome2; 608 if ( hasHome2 ) --hasHome2;
609 } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) { 609 } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) {
610 (*phoneIter).setType( PhoneNumber::Home ); 610 (*phoneIter).setType( PhoneNumber::Home );
611 --hasHome; 611 --hasHome;
612 ++hasHome2; 612 ++hasHome2;
613 } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) { 613 } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) {
614 (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref ); 614 (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref );
615 ++hasWork; 615 ++hasWork;
616 if ( hasWork2 ) --hasWork2; 616 if ( hasWork2 ) --hasWork2;
617 } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) { 617 } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) {
618 (*phoneIter).setType( PhoneNumber::Work ); 618 (*phoneIter).setType( PhoneNumber::Work );
619 --hasWork; 619 --hasWork;
620 ++hasWork2; 620 ++hasWork2;
621 } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) { 621 } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) {
622 (*phoneIter).setType( PhoneNumber::Car ); 622 (*phoneIter).setType( PhoneNumber::Car );
623 ++hasCell2; 623 ++hasCell2;
624 --hasCell; 624 --hasCell;
625 } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) { 625 } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) {
626 (*phoneIter).setType( PhoneNumber::Cell ); 626 (*phoneIter).setType( PhoneNumber::Cell );
627 ++hasCell; 627 ++hasCell;
628 --hasCell2; 628 --hasCell2;
629 } else{ 629 } else{
630 phoneIter2 = phoneIter; 630 phoneIter2 = phoneIter;
631 ++phoneIter2; 631 ++phoneIter2;
632 for ( ; phoneIter2 != mData->phoneNumbers.end(); 632 for ( ; phoneIter2 != mData->phoneNumbers.end();
633 ++phoneIter2 ) { 633 ++phoneIter2 ) {
634 if ( (*phoneIter2).type() == (*phoneIter).type() ) { 634 if ( (*phoneIter2).type() == (*phoneIter).type() ) {
635 (*phoneIter2).setType( PhoneNumber::Voice ); 635 (*phoneIter2).setType( PhoneNumber::Voice );
636 636
637 } 637 }
638 } 638 }
639 } 639 }
640 } 640 }
641} 641}
642void Addressee::simplifyPhoneNumbers() 642void Addressee::simplifyPhoneNumbers()
643{ 643{
644 int max = 4; 644 int max = 4;
645 int inList = mData->phoneNumbers.count(); 645 int inList = mData->phoneNumbers.count();
646 KABC::PhoneNumber::List removeNumbers; 646 KABC::PhoneNumber::List removeNumbers;
647 KABC::PhoneNumber::List::Iterator phoneIter; 647 KABC::PhoneNumber::List::Iterator phoneIter;
648 if ( inList > max ) { 648 if ( inList > max ) {
649 // delete non-preferred numbers 649 // delete non-preferred numbers
650 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 650 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
651 ++phoneIter ) { 651 ++phoneIter ) {
652 if ( inList > max ) { 652 if ( inList > max ) {
653 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { 653 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) {
654 removeNumbers.append( ( *phoneIter ) ); 654 removeNumbers.append( ( *phoneIter ) );
655 --inList; 655 --inList;
656 } 656 }
657 } else 657 } else
658 break; 658 break;
659 } 659 }
660 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 660 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
661 ++phoneIter ) { 661 ++phoneIter ) {
662 removePhoneNumber(( *phoneIter )); 662 removePhoneNumber(( *phoneIter ));
663 } 663 }
664 // delete preferred numbers 664 // delete preferred numbers
665 if ( inList > max ) { 665 if ( inList > max ) {
666 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 666 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
667 ++phoneIter ) { 667 ++phoneIter ) {
668 if ( inList > max ) { 668 if ( inList > max ) {
669 removeNumbers.append( ( *phoneIter ) ); 669 removeNumbers.append( ( *phoneIter ) );
670 --inList; 670 --inList;
671 } else 671 } else
672 break; 672 break;
673 } 673 }
674 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 674 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
675 ++phoneIter ) { 675 ++phoneIter ) {
676 removePhoneNumber(( *phoneIter )); 676 removePhoneNumber(( *phoneIter ));
677 } 677 }
678 } 678 }
679 } 679 }
680 // remove non-numeric characters 680 // remove non-numeric characters
681 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 681 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
682 ++phoneIter ) { 682 ++phoneIter ) {
683 if ( ! ( *phoneIter ).simplifyNumber() ) 683 if ( ! ( *phoneIter ).simplifyNumber() )
684 removeNumbers.append( ( *phoneIter ) ); 684 removeNumbers.append( ( *phoneIter ) );
685 } 685 }
686 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 686 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
687 ++phoneIter ) { 687 ++phoneIter ) {
688 removePhoneNumber(( *phoneIter )); 688 removePhoneNumber(( *phoneIter ));
689 } 689 }
690} 690}
691void Addressee::simplifyPhoneNumberTypes() 691void Addressee::simplifyPhoneNumberTypes()
692{ 692{
693 KABC::PhoneNumber::List::Iterator phoneIter; 693 KABC::PhoneNumber::List::Iterator phoneIter;
694 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 694 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
695 ++phoneIter ) 695 ++phoneIter )
696 ( *phoneIter ).simplifyType(); 696 ( *phoneIter ).simplifyType();
697} 697}
698void Addressee::removeID(const QString &prof) 698void Addressee::removeID(const QString &prof)
699{ 699{
700 detach(); 700 detach();
701 if ( prof.isEmpty() ) 701 if ( prof.isEmpty() )
702 mData->mExternalId = ":"; 702 mData->mExternalId = ":";
703 else 703 else
704 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 704 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
705 705
706} 706}
707void Addressee::setID( const QString & prof , const QString & id ) 707void Addressee::setID( const QString & prof , const QString & id )
708{ 708{
709 detach(); 709 detach();
710 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 710 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
711 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 711 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
712} 712}
713void Addressee::setTempSyncStat( int id ) 713void Addressee::setTempSyncStat( int id )
714{ 714{
715 if ( mData->mTempSyncStat == id ) return; 715 if ( mData->mTempSyncStat == id ) return;
716 detach(); 716 detach();
717 mData->mTempSyncStat = id; 717 mData->mTempSyncStat = id;
718} 718}
719int Addressee::tempSyncStat() const 719int Addressee::tempSyncStat() const
720{ 720{
721 return mData->mTempSyncStat; 721 return mData->mTempSyncStat;
722} 722}
723 723
724const QString Addressee::getID( const QString & prof) const 724const QString Addressee::getID( const QString & prof) const
725{ 725{
726 return KIdManager::getId ( mData->mExternalId, prof ); 726 return KIdManager::getId ( mData->mExternalId, prof );
727} 727}
728 728
729void Addressee::setCsum( const QString & prof , const QString & id ) 729void Addressee::setCsum( const QString & prof , const QString & id )
730{ 730{
731 detach(); 731 detach();
732 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 732 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
733 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 733 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
734 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 734 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
735} 735}
736 736
737const QString Addressee::getCsum( const QString & prof) const 737const QString Addressee::getCsum( const QString & prof) const
738{ 738{
739 return KIdManager::getCsum ( mData->mExternalId, prof ); 739 return KIdManager::getCsum ( mData->mExternalId, prof );
740} 740}
741 741
742void Addressee::setIDStr( const QString & s ) 742void Addressee::setIDStr( const QString & s )
743{ 743{
744 detach(); 744 detach();
745 mData->mExternalId = s; 745 mData->mExternalId = s;
746} 746}
747 747
748const QString Addressee::IDStr() const 748const QString Addressee::IDStr() const
749{ 749{
750 return mData->mExternalId; 750 return mData->mExternalId;
751} 751}
752 752
753void Addressee::setExternalUID( const QString &id ) 753void Addressee::setExternalUID( const QString &id )
754{ 754{
755 if ( id == mData->externalUID ) return; 755 if ( id == mData->externalUID ) return;
756 detach(); 756 detach();
757 mData->empty = false; 757 mData->empty = false;
758 mData->externalUID = id; 758 mData->externalUID = id;
759} 759}
760 760
761const QString Addressee::externalUID() const 761const QString Addressee::externalUID() const
762{ 762{
763 return mData->externalUID; 763 return mData->externalUID;
764} 764}
765void Addressee::setOriginalExternalUID( const QString &id ) 765void Addressee::setOriginalExternalUID( const QString &id )
766{ 766{
767 if ( id == mData->originalExternalUID ) return; 767 if ( id == mData->originalExternalUID ) return;
768 detach(); 768 detach();
769 mData->empty = false; 769 mData->empty = false;
770 //qDebug("*******Set orig uid %s ", id.latin1()); 770 //qDebug("*******Set orig uid %s ", id.latin1());
771 mData->originalExternalUID = id; 771 mData->originalExternalUID = id;
772} 772}
773 773
774QString Addressee::originalExternalUID() const 774QString Addressee::originalExternalUID() const
775{ 775{
776 return mData->originalExternalUID; 776 return mData->originalExternalUID;
777} 777}
778 778
779void Addressee::setUid( const QString &id ) 779void Addressee::setUid( const QString &id )
780{ 780{
781 if ( id == mData->uid ) return; 781 if ( id == mData->uid ) return;
782 detach(); 782 detach();
783 //qDebug("****setuid %s ", id.latin1()); 783 //qDebug("****setuid %s ", id.latin1());
784 mData->empty = false; 784 mData->empty = false;
785 mData->uid = id; 785 mData->uid = id;
786} 786}
787 787
788const QString Addressee::uid() const 788const QString Addressee::uid() const
789{ 789{
790 if ( mData->uid.isEmpty() ) 790 if ( mData->uid.isEmpty() )
791 mData->uid = KApplication::randomString( 10 ); 791 mData->uid = KApplication::randomString( 10 );
792 792
793 return mData->uid; 793 return mData->uid;
794} 794}
795 795
796QString Addressee::uidLabel() 796QString Addressee::uidLabel()
797{ 797{
798 return i18n("Unique Identifier"); 798 return i18n("Unique Identifier");
799} 799}
800 800
801void Addressee::setName( const QString &name ) 801void Addressee::setName( const QString &name )
802{ 802{
803 if ( name == mData->name ) return; 803 if ( name == mData->name ) return;
804 detach(); 804 detach();
805 mData->empty = false; 805 mData->empty = false;
806 mData->name = name; 806 mData->name = name;
807} 807}
808 808
809QString Addressee::name() const 809QString Addressee::name() const
810{ 810{
811 return mData->name; 811 return mData->name;
812} 812}
813 813
814QString Addressee::nameLabel() 814QString Addressee::nameLabel()
815{ 815{
816 return i18n("Name"); 816 return i18n("Name");
817} 817}
818 818
819 819
820void Addressee::setFormattedName( const QString &formattedName ) 820void Addressee::setFormattedName( const QString &formattedName )
821{ 821{
822 if ( formattedName == mData->formattedName ) return; 822 if ( formattedName == mData->formattedName ) return;
823 detach(); 823 detach();
824 mData->empty = false; 824 mData->empty = false;
825 mData->formattedName = formattedName; 825 mData->formattedName = formattedName;
826} 826}
827 827
828QString Addressee::formattedName() const 828QString Addressee::formattedName() const
829{ 829{
830 return mData->formattedName; 830 return mData->formattedName;
831} 831}
832 832
833QString Addressee::formattedNameLabel() 833QString Addressee::formattedNameLabel()
834{ 834{
835 return i18n("Formatted Name"); 835 return i18n("Formatted Name");
836} 836}
837 837
838 838
839void Addressee::setFamilyName( const QString &familyName ) 839void Addressee::setFamilyName( const QString &familyName )
840{ 840{
841 if ( familyName == mData->familyName ) return; 841 if ( familyName == mData->familyName ) return;
842 detach(); 842 detach();
843 mData->empty = false; 843 mData->empty = false;
844 mData->familyName = familyName; 844 mData->familyName = familyName;
845} 845}
846 846
847QString Addressee::familyName() const 847QString Addressee::familyName() const
848{ 848{
849 return mData->familyName; 849 return mData->familyName;
850} 850}
851 851
852QString Addressee::familyNameLabel() 852QString Addressee::familyNameLabel()
853{ 853{
854 return i18n("Family Name"); 854 return i18n("Family Name");
855} 855}
856 856
857 857
858void Addressee::setGivenName( const QString &givenName ) 858void Addressee::setGivenName( const QString &givenName )
859{ 859{
860 if ( givenName == mData->givenName ) return; 860 if ( givenName == mData->givenName ) return;
861 detach(); 861 detach();
862 mData->empty = false; 862 mData->empty = false;
863 mData->givenName = givenName; 863 mData->givenName = givenName;
864} 864}
865 865
866QString Addressee::givenName() const 866QString Addressee::givenName() const
867{ 867{
868 return mData->givenName; 868 return mData->givenName;
869} 869}
870 870
871QString Addressee::givenNameLabel() 871QString Addressee::givenNameLabel()
872{ 872{
873 return i18n("Given Name"); 873 return i18n("Given Name");
874} 874}
875 875
876 876
877void Addressee::setAdditionalName( const QString &additionalName ) 877void Addressee::setAdditionalName( const QString &additionalName )
878{ 878{
879 if ( additionalName == mData->additionalName ) return; 879 if ( additionalName == mData->additionalName ) return;
880 detach(); 880 detach();
881 mData->empty = false; 881 mData->empty = false;
882 mData->additionalName = additionalName; 882 mData->additionalName = additionalName;
883} 883}
884 884
885QString Addressee::additionalName() const 885QString Addressee::additionalName() const
886{ 886{
887 return mData->additionalName; 887 return mData->additionalName;
888} 888}
889 889
890QString Addressee::additionalNameLabel() 890QString Addressee::additionalNameLabel()
891{ 891{
892 return i18n("Additional Names"); 892 return i18n("Additional Names");
893} 893}
894 894
895 895
896void Addressee::setPrefix( const QString &prefix ) 896void Addressee::setPrefix( const QString &prefix )
897{ 897{
898 if ( prefix == mData->prefix ) return; 898 if ( prefix == mData->prefix ) return;
899 detach(); 899 detach();
900 mData->empty = false; 900 mData->empty = false;
901 mData->prefix = prefix; 901 mData->prefix = prefix;
902} 902}
903 903
904QString Addressee::prefix() const 904QString Addressee::prefix() const
905{ 905{
906 return mData->prefix; 906 return mData->prefix;
907} 907}
908 908
909QString Addressee::prefixLabel() 909QString Addressee::prefixLabel()
910{ 910{
911 return i18n("Honorific Prefixes"); 911 return i18n("Honorific Prefixes");
912} 912}
913 913
914 914
915void Addressee::setSuffix( const QString &suffix ) 915void Addressee::setSuffix( const QString &suffix )
916{ 916{
917 if ( suffix == mData->suffix ) return; 917 if ( suffix == mData->suffix ) return;
918 detach(); 918 detach();
919 mData->empty = false; 919 mData->empty = false;
920 mData->suffix = suffix; 920 mData->suffix = suffix;
921} 921}
922 922
923QString Addressee::suffix() const 923QString Addressee::suffix() const
924{ 924{
925 return mData->suffix; 925 return mData->suffix;
926} 926}
927 927
928QString Addressee::suffixLabel() 928QString Addressee::suffixLabel()
929{ 929{
930 return i18n("Honorific Suffixes"); 930 return i18n("Honorific Suffixes");
931} 931}
932 932
933 933
934void Addressee::setNickName( const QString &nickName ) 934void Addressee::setNickName( const QString &nickName )
935{ 935{
936 if ( nickName == mData->nickName ) return; 936 if ( nickName == mData->nickName ) return;
937 detach(); 937 detach();
938 mData->empty = false; 938 mData->empty = false;
939 mData->nickName = nickName; 939 mData->nickName = nickName;
940} 940}
941 941
942QString Addressee::nickName() const 942QString Addressee::nickName() const
943{ 943{
944 return mData->nickName; 944 return mData->nickName;
945} 945}
946 946
947QString Addressee::nickNameLabel() 947QString Addressee::nickNameLabel()
948{ 948{
949 return i18n("Nick Name"); 949 return i18n("Nick Name");
950} 950}
951 951
952 952
953void Addressee::setBirthday( const QDateTime &birthday ) 953void Addressee::setBirthday( const QDateTime &birthday )
954{ 954{
955 if ( birthday == mData->birthday ) return; 955 if ( birthday == mData->birthday ) return;
956 detach(); 956 detach();
957 mData->empty = false; 957 mData->empty = false;
958 mData->birthday = birthday; 958 mData->birthday = birthday;
959} 959}
960 960
961QDateTime Addressee::birthday() const 961QDateTime Addressee::birthday() const
962{ 962{
963 return mData->birthday; 963 return mData->birthday;
964} 964}
965 965
966QString Addressee::birthdayLabel() 966QString Addressee::birthdayLabel()
967{ 967{
968 return i18n("Birthday"); 968 return i18n("Birthday");
969} 969}
970 970
971 971
972QString Addressee::homeAddressStreetLabel() 972QString Addressee::homeAddressStreetLabel()
973{ 973{
974 return i18n("Home Address Street"); 974 return i18n("Home Address Street");
975} 975}
976 976
977 977
978QString Addressee::homeAddressLocalityLabel() 978QString Addressee::homeAddressLocalityLabel()
979{ 979{
980 return i18n("Home Address Locality"); 980 return i18n("Home Address Locality");
981} 981}
982 982
983 983
984QString Addressee::homeAddressRegionLabel() 984QString Addressee::homeAddressRegionLabel()
985{ 985{
986 return i18n("Home Address Region"); 986 return i18n("Home Address Region");
987} 987}
988 988
989 989
990QString Addressee::homeAddressPostalCodeLabel() 990QString Addressee::homeAddressPostalCodeLabel()
991{ 991{
992 return i18n("Home Address Postal Code"); 992 return i18n("Home Address Postal Code");
993} 993}
994 994
995 995
996QString Addressee::homeAddressCountryLabel() 996QString Addressee::homeAddressCountryLabel()
997{ 997{
998 return i18n("Home Address Country"); 998 return i18n("Home Address Country");
999} 999}
1000 1000
1001 1001
1002QString Addressee::homeAddressLabelLabel() 1002QString Addressee::homeAddressLabelLabel()
1003{ 1003{
1004 return i18n("Home Address Label"); 1004 return i18n("Home Address Label");
1005} 1005}
1006 1006
1007 1007
1008QString Addressee::businessAddressStreetLabel() 1008QString Addressee::businessAddressStreetLabel()
1009{ 1009{
1010 return i18n("Business Address Street"); 1010 return i18n("Business Address Street");
1011} 1011}
1012 1012
1013 1013
1014QString Addressee::businessAddressLocalityLabel() 1014QString Addressee::businessAddressLocalityLabel()
1015{ 1015{
1016 return i18n("Business Address Locality"); 1016 return i18n("Business Address Locality");
1017} 1017}
1018 1018
1019 1019
1020QString Addressee::businessAddressRegionLabel() 1020QString Addressee::businessAddressRegionLabel()
1021{ 1021{
1022 return i18n("Business Address Region"); 1022 return i18n("Business Address Region");
1023} 1023}
1024 1024
1025 1025
1026QString Addressee::businessAddressPostalCodeLabel() 1026QString Addressee::businessAddressPostalCodeLabel()
1027{ 1027{
1028 return i18n("Business Address Postal Code"); 1028 return i18n("Business Address Postal Code");
1029} 1029}
1030 1030
1031 1031
1032QString Addressee::businessAddressCountryLabel() 1032QString Addressee::businessAddressCountryLabel()
1033{ 1033{
1034 return i18n("Business Address Country"); 1034 return i18n("Business Address Country");
1035} 1035}
1036 1036
1037 1037
1038QString Addressee::businessAddressLabelLabel() 1038QString Addressee::businessAddressLabelLabel()
1039{ 1039{
1040 return i18n("Business Address Label"); 1040 return i18n("Business Address Label");
1041} 1041}
1042 1042
1043 1043
1044QString Addressee::homePhoneLabel() 1044QString Addressee::homePhoneLabel()
1045{ 1045{
1046 return i18n("Home Phone"); 1046 return i18n("Home Phone");
1047} 1047}
1048 1048
1049 1049
1050QString Addressee::businessPhoneLabel() 1050QString Addressee::businessPhoneLabel()
1051{ 1051{
1052 return i18n("Work Phone"); 1052 return i18n("Work Phone");
1053} 1053}
1054 1054
1055 1055
1056QString Addressee::mobilePhoneLabel() 1056QString Addressee::mobilePhoneLabel()
1057{ 1057{
1058 return i18n("Mobile Phone"); 1058 return i18n("Mobile Phone");
1059} 1059}
1060QString Addressee::mobileWorkPhoneLabel() 1060QString Addressee::mobileWorkPhoneLabel()
1061{ 1061{
1062 return i18n("Mobile2 (Work)"); 1062 return i18n("Mobile2 (Work)");
1063} 1063}
1064QString Addressee::mobileHomePhoneLabel() 1064QString Addressee::mobileHomePhoneLabel()
1065{ 1065{
1066 return i18n("Mobile (Home)"); 1066 return i18n("Mobile (Home)");
1067} 1067}
1068 1068
1069 1069
1070QString Addressee::homeFaxLabel() 1070QString Addressee::homeFaxLabel()
1071{ 1071{
1072 return i18n("Fax (Home)"); 1072 return i18n("Fax (Home)");
1073} 1073}
1074 1074
1075 1075
1076QString Addressee::businessFaxLabel() 1076QString Addressee::businessFaxLabel()
1077{ 1077{
1078 return i18n("Fax (Work)"); 1078 return i18n("Fax (Work)");
1079} 1079}
1080 1080
1081 1081
1082QString Addressee::carPhoneLabel() 1082QString Addressee::carPhoneLabel()
1083{ 1083{
1084 return i18n("Mobile2 (Car)"); 1084 return i18n("Mobile2 (Car)");
1085} 1085}
1086 1086
1087 1087
1088QString Addressee::isdnLabel() 1088QString Addressee::isdnLabel()
1089{ 1089{
1090 return i18n("ISDN"); 1090 return i18n("ISDN");
1091} 1091}
1092 1092
1093 1093
1094QString Addressee::pagerLabel() 1094QString Addressee::pagerLabel()
1095{ 1095{
1096 return i18n("Pager"); 1096 return i18n("Pager");
1097} 1097}
1098QString Addressee::otherPhoneLabel()
1099{
1100 return i18n("Other Phone");
1101}
1098 1102
1099QString Addressee::sipLabel() 1103QString Addressee::sipLabel()
1100{ 1104{
1101 return i18n("SIP"); 1105 return i18n("SIP");
1102} 1106}
1103 1107
1104QString Addressee::emailLabel() 1108QString Addressee::emailLabel()
1105{ 1109{
1106 return i18n("Email Address"); 1110 return i18n("Email Address");
1107} 1111}
1108 1112
1109 1113
1110void Addressee::setMailer( const QString &mailer ) 1114void Addressee::setMailer( const QString &mailer )
1111{ 1115{
1112 if ( mailer == mData->mailer ) return; 1116 if ( mailer == mData->mailer ) return;
1113 detach(); 1117 detach();
1114 mData->empty = false; 1118 mData->empty = false;
1115 mData->mailer = mailer; 1119 mData->mailer = mailer;
1116} 1120}
1117 1121
1118QString Addressee::mailer() const 1122QString Addressee::mailer() const
1119{ 1123{
1120 return mData->mailer; 1124 return mData->mailer;
1121} 1125}
1122 1126
1123QString Addressee::mailerLabel() 1127QString Addressee::mailerLabel()
1124{ 1128{
1125 return i18n("Mail Client"); 1129 return i18n("Mail Client");
1126} 1130}
1127 1131
1128 1132
1129void Addressee::setTimeZone( const TimeZone &timeZone ) 1133void Addressee::setTimeZone( const TimeZone &timeZone )
1130{ 1134{
1131 if ( timeZone == mData->timeZone ) return; 1135 if ( timeZone == mData->timeZone ) return;
1132 detach(); 1136 detach();
1133 mData->empty = false; 1137 mData->empty = false;
1134 mData->timeZone = timeZone; 1138 mData->timeZone = timeZone;
1135} 1139}
1136 1140
1137TimeZone Addressee::timeZone() const 1141TimeZone Addressee::timeZone() const
1138{ 1142{
1139 return mData->timeZone; 1143 return mData->timeZone;
1140} 1144}
1141 1145
1142QString Addressee::timeZoneLabel() 1146QString Addressee::timeZoneLabel()
1143{ 1147{
1144 return i18n("Time Zone"); 1148 return i18n("Time Zone");
1145} 1149}
1146 1150
1147 1151
1148void Addressee::setGeo( const Geo &geo ) 1152void Addressee::setGeo( const Geo &geo )
1149{ 1153{
1150 if ( geo == mData->geo ) return; 1154 if ( geo == mData->geo ) return;
1151 detach(); 1155 detach();
1152 mData->empty = false; 1156 mData->empty = false;
1153 mData->geo = geo; 1157 mData->geo = geo;
1154} 1158}
1155 1159
1156Geo Addressee::geo() const 1160Geo Addressee::geo() const
1157{ 1161{
1158 return mData->geo; 1162 return mData->geo;
1159} 1163}
1160 1164
1161QString Addressee::geoLabel() 1165QString Addressee::geoLabel()
1162{ 1166{
1163 return i18n("Geographic Position"); 1167 return i18n("Geographic Position");
1164} 1168}
1165 1169
1166 1170
1167void Addressee::setTitle( const QString &title ) 1171void Addressee::setTitle( const QString &title )
1168{ 1172{
1169 if ( title == mData->title ) return; 1173 if ( title == mData->title ) return;
1170 detach(); 1174 detach();
1171 mData->empty = false; 1175 mData->empty = false;
1172 mData->title = title; 1176 mData->title = title;
1173} 1177}
1174 1178
1175QString Addressee::title() const 1179QString Addressee::title() const
1176{ 1180{
1177 return mData->title; 1181 return mData->title;
1178} 1182}
1179 1183
1180QString Addressee::titleLabel() 1184QString Addressee::titleLabel()
1181{ 1185{
1182 return i18n("Title"); 1186 return i18n("Title");
1183} 1187}
1184 1188
1185 1189
1186void Addressee::setRole( const QString &role ) 1190void Addressee::setRole( const QString &role )
1187{ 1191{
1188 if ( role == mData->role ) return; 1192 if ( role == mData->role ) return;
1189 detach(); 1193 detach();
1190 mData->empty = false; 1194 mData->empty = false;
1191 mData->role = role; 1195 mData->role = role;
1192} 1196}
1193 1197
1194QString Addressee::role() const 1198QString Addressee::role() const
1195{ 1199{
1196 return mData->role; 1200 return mData->role;
1197} 1201}
1198 1202
1199QString Addressee::roleLabel() 1203QString Addressee::roleLabel()
1200{ 1204{
1201 return i18n("Role"); 1205 return i18n("Role");
1202} 1206}
1203 1207
1204 1208
1205void Addressee::setOrganization( const QString &organization ) 1209void Addressee::setOrganization( const QString &organization )
1206{ 1210{
1207 if ( organization == mData->organization ) return; 1211 if ( organization == mData->organization ) return;
1208 detach(); 1212 detach();
1209 mData->empty = false; 1213 mData->empty = false;
1210 mData->organization = organization; 1214 mData->organization = organization;
1211} 1215}
1212 1216
1213QString Addressee::organization() const 1217QString Addressee::organization() const
1214{ 1218{
1215 return mData->organization; 1219 return mData->organization;
1216} 1220}
1217 1221
1218QString Addressee::organizationLabel() 1222QString Addressee::organizationLabel()
1219{ 1223{
1220 return i18n("Organization"); 1224 return i18n("Organization");
1221} 1225}
1222 1226
1223 1227
1224void Addressee::setNote( const QString &note ) 1228void Addressee::setNote( const QString &note )
1225{ 1229{
1226 if ( note == mData->note ) return; 1230 if ( note == mData->note ) return;
1227 detach(); 1231 detach();
1228 mData->empty = false; 1232 mData->empty = false;
1229 mData->note = note; 1233 mData->note = note;
1230} 1234}
1231 1235
1232QString Addressee::note() const 1236QString Addressee::note() const
1233{ 1237{
1234 return mData->note; 1238 return mData->note;
1235} 1239}
1236 1240
1237QString Addressee::noteLabel() 1241QString Addressee::noteLabel()
1238{ 1242{
1239 return i18n("Note"); 1243 return i18n("Note");
1240} 1244}
1241 1245
1242 1246
1243void Addressee::setProductId( const QString &productId ) 1247void Addressee::setProductId( const QString &productId )
1244{ 1248{
1245 if ( productId == mData->productId ) return; 1249 if ( productId == mData->productId ) return;
1246 detach(); 1250 detach();
1247 mData->empty = false; 1251 mData->empty = false;
1248 mData->productId = productId; 1252 mData->productId = productId;
1249} 1253}
1250 1254
1251QString Addressee::productId() const 1255QString Addressee::productId() const
1252{ 1256{
1253 return mData->productId; 1257 return mData->productId;
1254} 1258}
1255 1259
1256QString Addressee::productIdLabel() 1260QString Addressee::productIdLabel()
1257{ 1261{
1258 return i18n("Product Identifier"); 1262 return i18n("Product Identifier");
1259} 1263}
1260 1264
1261 1265
1262void Addressee::setRevision( const QDateTime &revision ) 1266void Addressee::setRevision( const QDateTime &revision )
1263{ 1267{
1264 if ( revision == mData->revision ) return; 1268 if ( revision == mData->revision ) return;
1265 detach(); 1269 detach();
1266 mData->empty = false; 1270 mData->empty = false;
1267 mData->revision = QDateTime( revision.date(), 1271 mData->revision = QDateTime( revision.date(),
1268 QTime (revision.time().hour(), 1272 QTime (revision.time().hour(),
1269 revision.time().minute(), 1273 revision.time().minute(),
1270 revision.time().second())); 1274 revision.time().second()));
1271} 1275}
1272 1276
1273QDateTime Addressee::revision() const 1277QDateTime Addressee::revision() const
1274{ 1278{
1275 return mData->revision; 1279 return mData->revision;
1276} 1280}
1277 1281
1278QString Addressee::revisionLabel() 1282QString Addressee::revisionLabel()
1279{ 1283{
1280 return i18n("Revision Date"); 1284 return i18n("Revision Date");
1281} 1285}
1282 1286
1283 1287
1284void Addressee::setSortString( const QString &sortString ) 1288void Addressee::setSortString( const QString &sortString )
1285{ 1289{
1286 if ( sortString == mData->sortString ) return; 1290 if ( sortString == mData->sortString ) return;
1287 detach(); 1291 detach();
1288 mData->empty = false; 1292 mData->empty = false;
1289 mData->sortString = sortString; 1293 mData->sortString = sortString;
1290} 1294}
1291 1295
1292QString Addressee::sortString() const 1296QString Addressee::sortString() const
1293{ 1297{
1294 return mData->sortString; 1298 return mData->sortString;
1295} 1299}
1296 1300
1297QString Addressee::sortStringLabel() 1301QString Addressee::sortStringLabel()
1298{ 1302{
1299 return i18n("Sort String"); 1303 return i18n("Sort String");
1300} 1304}
1301 1305
1302 1306
1303void Addressee::setUrl( const KURL &url ) 1307void Addressee::setUrl( const KURL &url )
1304{ 1308{
1305 if ( url == mData->url ) return; 1309 if ( url == mData->url ) return;
1306 detach(); 1310 detach();
1307 mData->empty = false; 1311 mData->empty = false;
1308 mData->url = url; 1312 mData->url = url;
1309} 1313}
1310 1314
1311KURL Addressee::url() const 1315KURL Addressee::url() const
1312{ 1316{
1313 return mData->url; 1317 return mData->url;
1314} 1318}
1315 1319
1316QString Addressee::urlLabel() 1320QString Addressee::urlLabel()
1317{ 1321{
1318 return i18n("URL"); 1322 return i18n("URL");
1319} 1323}
1320 1324
1321 1325
1322void Addressee::setSecrecy( const Secrecy &secrecy ) 1326void Addressee::setSecrecy( const Secrecy &secrecy )
1323{ 1327{
1324 if ( secrecy == mData->secrecy ) return; 1328 if ( secrecy == mData->secrecy ) return;
1325 detach(); 1329 detach();
1326 mData->empty = false; 1330 mData->empty = false;
1327 mData->secrecy = secrecy; 1331 mData->secrecy = secrecy;
1328} 1332}
1329 1333
1330Secrecy Addressee::secrecy() const 1334Secrecy Addressee::secrecy() const
1331{ 1335{
1332 return mData->secrecy; 1336 return mData->secrecy;
1333} 1337}
1334 1338
1335QString Addressee::secrecyLabel() 1339QString Addressee::secrecyLabel()
1336{ 1340{
1337 return i18n("Security Class"); 1341 return i18n("Security Class");
1338} 1342}
1339 1343
1340 1344
1341void Addressee::setLogo( const Picture &logo ) 1345void Addressee::setLogo( const Picture &logo )
1342{ 1346{
1343 if ( logo == mData->logo ) return; 1347 if ( logo == mData->logo ) return;
1344 detach(); 1348 detach();
1345 mData->empty = false; 1349 mData->empty = false;
1346 mData->logo = logo; 1350 mData->logo = logo;
1347} 1351}
1348 1352
1349Picture Addressee::logo() const 1353Picture Addressee::logo() const
1350{ 1354{
1351 return mData->logo; 1355 return mData->logo;
1352} 1356}
1353 1357
1354QString Addressee::logoLabel() 1358QString Addressee::logoLabel()
1355{ 1359{
1356 return i18n("Logo"); 1360 return i18n("Logo");
1357} 1361}
1358 1362
1359 1363
1360void Addressee::setPhoto( const Picture &photo ) 1364void Addressee::setPhoto( const Picture &photo )
1361{ 1365{
1362 if ( photo == mData->photo ) return; 1366 if ( photo == mData->photo ) return;
1363 detach(); 1367 detach();
1364 mData->empty = false; 1368 mData->empty = false;
1365 mData->photo = photo; 1369 mData->photo = photo;
1366} 1370}
1367 1371
1368Picture Addressee::photo() const 1372Picture Addressee::photo() const
1369{ 1373{
1370 return mData->photo; 1374 return mData->photo;
1371} 1375}
1372 1376
1373QString Addressee::photoLabel() 1377QString Addressee::photoLabel()
1374{ 1378{
1375 return i18n("Photo"); 1379 return i18n("Photo");
1376} 1380}
1377 1381
1378 1382
1379void Addressee::setSound( const Sound &sound ) 1383void Addressee::setSound( const Sound &sound )
1380{ 1384{
1381 if ( sound == mData->sound ) return; 1385 if ( sound == mData->sound ) return;
1382 detach(); 1386 detach();
1383 mData->empty = false; 1387 mData->empty = false;
1384 mData->sound = sound; 1388 mData->sound = sound;
1385} 1389}
1386 1390
1387Sound Addressee::sound() const 1391Sound Addressee::sound() const
1388{ 1392{
1389 return mData->sound; 1393 return mData->sound;
1390} 1394}
1391 1395
1392QString Addressee::soundLabel() 1396QString Addressee::soundLabel()
1393{ 1397{
1394 return i18n("Sound"); 1398 return i18n("Sound");
1395} 1399}
1396 1400
1397 1401
1398void Addressee::setAgent( const Agent &agent ) 1402void Addressee::setAgent( const Agent &agent )
1399{ 1403{
1400 if ( agent == mData->agent ) return; 1404 if ( agent == mData->agent ) return;
1401 detach(); 1405 detach();
1402 mData->empty = false; 1406 mData->empty = false;
1403 mData->agent = agent; 1407 mData->agent = agent;
1404} 1408}
1405 1409
1406Agent Addressee::agent() const 1410Agent Addressee::agent() const
1407{ 1411{
1408 return mData->agent; 1412 return mData->agent;
1409} 1413}
1410 1414
1411QString Addressee::agentLabel() 1415QString Addressee::agentLabel()
1412{ 1416{
1413 return i18n("Agent"); 1417 return i18n("Agent");
1414} 1418}
1415 1419
1416 1420
1417 1421
1418void Addressee::setNameFromString( const QString &str ) 1422void Addressee::setNameFromString( const QString &str )
1419{ 1423{
1420 setFormattedName( str ); 1424 setFormattedName( str );
1421 setName( str ); 1425 setName( str );
1422 1426
1423 static bool first = true; 1427 static bool first = true;
1424 static QStringList titles; 1428 static QStringList titles;
1425 static QStringList suffixes; 1429 static QStringList suffixes;
1426 static QStringList prefixes; 1430 static QStringList prefixes;
1427 1431
1428 if ( first ) { 1432 if ( first ) {
1429 first = false; 1433 first = false;
1430 titles += i18n( "Dr." ); 1434 titles += i18n( "Dr." );
1431 titles += i18n( "Miss" ); 1435 titles += i18n( "Miss" );
1432 titles += i18n( "Mr." ); 1436 titles += i18n( "Mr." );
1433 titles += i18n( "Mrs." ); 1437 titles += i18n( "Mrs." );
1434 titles += i18n( "Ms." ); 1438 titles += i18n( "Ms." );
1435 titles += i18n( "Prof." ); 1439 titles += i18n( "Prof." );
1436 1440
1437 suffixes += i18n( "I" ); 1441 suffixes += i18n( "I" );
1438 suffixes += i18n( "II" ); 1442 suffixes += i18n( "II" );
1439 suffixes += i18n( "III" ); 1443 suffixes += i18n( "III" );
1440 suffixes += i18n( "Jr." ); 1444 suffixes += i18n( "Jr." );
1441 suffixes += i18n( "Sr." ); 1445 suffixes += i18n( "Sr." );
1442 1446
1443 prefixes += "van"; 1447 prefixes += "van";
1444 prefixes += "von"; 1448 prefixes += "von";
1445 prefixes += "de"; 1449 prefixes += "de";
1446 1450
1447 KConfig config( locateLocal( "config", "kabcrc") ); 1451 KConfig config( locateLocal( "config", "kabcrc") );
1448 config.setGroup( "General" ); 1452 config.setGroup( "General" );
1449 titles += config.readListEntry( "Prefixes" ); 1453 titles += config.readListEntry( "Prefixes" );
1450 titles.remove( "" ); 1454 titles.remove( "" );
1451 prefixes += config.readListEntry( "Inclusions" ); 1455 prefixes += config.readListEntry( "Inclusions" );
1452 prefixes.remove( "" ); 1456 prefixes.remove( "" );
1453 suffixes += config.readListEntry( "Suffixes" ); 1457 suffixes += config.readListEntry( "Suffixes" );
1454 suffixes.remove( "" ); 1458 suffixes.remove( "" );
1455 } 1459 }
1456 1460
1457 // clear all name parts 1461 // clear all name parts
1458 setPrefix( "" ); 1462 setPrefix( "" );
1459 setGivenName( "" ); 1463 setGivenName( "" );
1460 setAdditionalName( "" ); 1464 setAdditionalName( "" );
1461 setFamilyName( "" ); 1465 setFamilyName( "" );
1462 setSuffix( "" ); 1466 setSuffix( "" );
1463 1467
1464 if ( str.isEmpty() ) 1468 if ( str.isEmpty() )
1465 return; 1469 return;
1466 1470
1467 int i = str.find(','); 1471 int i = str.find(',');
1468 if( i < 0 ) { 1472 if( i < 0 ) {
1469 QStringList parts = QStringList::split( " ", str ); 1473 QStringList parts = QStringList::split( " ", str );
1470 int leftOffset = 0; 1474 int leftOffset = 0;
1471 int rightOffset = parts.count() - 1; 1475 int rightOffset = parts.count() - 1;
1472 1476
1473 QString suffix; 1477 QString suffix;
1474 while ( rightOffset >= 0 ) { 1478 while ( rightOffset >= 0 ) {
1475 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1479 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1476 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1480 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1477 rightOffset--; 1481 rightOffset--;
1478 } else 1482 } else
1479 break; 1483 break;
1480 } 1484 }
1481 setSuffix( suffix ); 1485 setSuffix( suffix );
1482 1486
1483 if ( rightOffset < 0 ) 1487 if ( rightOffset < 0 )
1484 return; 1488 return;
1485 1489
1486 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1490 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1487 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1491 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1488 rightOffset--; 1492 rightOffset--;
1489 } else 1493 } else
1490 setFamilyName( parts[ rightOffset ] ); 1494 setFamilyName( parts[ rightOffset ] );
1491 1495
1492 QString prefix; 1496 QString prefix;
1493 while ( leftOffset < rightOffset ) { 1497 while ( leftOffset < rightOffset ) {
1494 if ( titles.contains( parts[ leftOffset ] ) ) { 1498 if ( titles.contains( parts[ leftOffset ] ) ) {
1495 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1499 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1496 leftOffset++; 1500 leftOffset++;
1497 } else 1501 } else
1498 break; 1502 break;
1499 } 1503 }
1500 setPrefix( prefix ); 1504 setPrefix( prefix );
1501 1505
1502 if ( leftOffset < rightOffset ) { 1506 if ( leftOffset < rightOffset ) {
1503 setGivenName( parts[ leftOffset ] ); 1507 setGivenName( parts[ leftOffset ] );
1504 leftOffset++; 1508 leftOffset++;
1505 } 1509 }
1506 1510
1507 QString additionalName; 1511 QString additionalName;
1508 while ( leftOffset < rightOffset ) { 1512 while ( leftOffset < rightOffset ) {
1509 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1513 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1510 leftOffset++; 1514 leftOffset++;
1511 } 1515 }
1512 setAdditionalName( additionalName ); 1516 setAdditionalName( additionalName );
1513 } else { 1517 } else {
1514 QString part1 = str.left( i ); 1518 QString part1 = str.left( i );
1515 QString part2 = str.mid( i + 1 ); 1519 QString part2 = str.mid( i + 1 );
1516 1520
1517 QStringList parts = QStringList::split( " ", part1 ); 1521 QStringList parts = QStringList::split( " ", part1 );
1518 int leftOffset = 0; 1522 int leftOffset = 0;
1519 int rightOffset = parts.count() - 1; 1523 int rightOffset = parts.count() - 1;
1520 1524
1521 QString suffix; 1525 QString suffix;
1522 while ( rightOffset >= 0 ) { 1526 while ( rightOffset >= 0 ) {
1523 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1527 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1524 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1528 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1525 rightOffset--; 1529 rightOffset--;
1526 } else 1530 } else
1527 break; 1531 break;
1528 } 1532 }
1529 setSuffix( suffix ); 1533 setSuffix( suffix );
1530 1534
1531 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1535 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1532 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1536 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1533 rightOffset--; 1537 rightOffset--;
1534 } else 1538 } else
1535 setFamilyName( parts[ rightOffset ] ); 1539 setFamilyName( parts[ rightOffset ] );
1536 1540
1537 QString prefix; 1541 QString prefix;
1538 while ( leftOffset < rightOffset ) { 1542 while ( leftOffset < rightOffset ) {
1539 if ( titles.contains( parts[ leftOffset ] ) ) { 1543 if ( titles.contains( parts[ leftOffset ] ) ) {
1540 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1544 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1541 leftOffset++; 1545 leftOffset++;
1542 } else 1546 } else
1543 break; 1547 break;
1544 } 1548 }
1545 1549
1546 parts = QStringList::split( " ", part2 ); 1550 parts = QStringList::split( " ", part2 );
1547 1551
1548 leftOffset = 0; 1552 leftOffset = 0;
1549 rightOffset = parts.count(); 1553 rightOffset = parts.count();
1550 1554
1551 while ( leftOffset < rightOffset ) { 1555 while ( leftOffset < rightOffset ) {
1552 if ( titles.contains( parts[ leftOffset ] ) ) { 1556 if ( titles.contains( parts[ leftOffset ] ) ) {
1553 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1557 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1554 leftOffset++; 1558 leftOffset++;
1555 } else 1559 } else
1556 break; 1560 break;
1557 } 1561 }
1558 setPrefix( prefix ); 1562 setPrefix( prefix );
1559 1563
1560 if ( leftOffset < rightOffset ) { 1564 if ( leftOffset < rightOffset ) {
1561 setGivenName( parts[ leftOffset ] ); 1565 setGivenName( parts[ leftOffset ] );
1562 leftOffset++; 1566 leftOffset++;
1563 } 1567 }
1564 1568
1565 QString additionalName; 1569 QString additionalName;
1566 while ( leftOffset < rightOffset ) { 1570 while ( leftOffset < rightOffset ) {
1567 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1571 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1568 leftOffset++; 1572 leftOffset++;
1569 } 1573 }
1570 setAdditionalName( additionalName ); 1574 setAdditionalName( additionalName );
1571 } 1575 }
1572} 1576}
1573 1577
1574QString Addressee::realName() const 1578QString Addressee::realName() const
1575{ 1579{
1576 if ( !formattedName().isEmpty() ) 1580 if ( !formattedName().isEmpty() )
1577 return formattedName(); 1581 return formattedName();
1578 1582
1579 QString n = assembledName(); 1583 QString n = assembledName();
1580 1584
1581 if ( n.isEmpty() ) 1585 if ( n.isEmpty() )
1582 n = name(); 1586 n = name();
1583 if ( n.isEmpty() ) 1587 if ( n.isEmpty() )
1584 n = organization(); 1588 n = organization();
1585 return n; 1589 return n;
1586} 1590}
1587 1591
1588QString Addressee::assembledName() const 1592QString Addressee::assembledName() const
1589{ 1593{
1590 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1594 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1591 familyName() + " " + suffix(); 1595 familyName() + " " + suffix();
1592 1596
1593 return name.simplifyWhiteSpace(); 1597 return name.simplifyWhiteSpace();
1594} 1598}
1595 1599
1596QString Addressee::fullEmail( const QString &email ) const 1600QString Addressee::fullEmail( const QString &email ) const
1597{ 1601{
1598 QString e; 1602 QString e;
1599 if ( email.isNull() ) { 1603 if ( email.isNull() ) {
1600 e = preferredEmail(); 1604 e = preferredEmail();
1601 } else { 1605 } else {
1602 e = email; 1606 e = email;
1603 } 1607 }
1604 if ( e.isEmpty() ) return QString::null; 1608 if ( e.isEmpty() ) return QString::null;
1605 1609
1606 QString text; 1610 QString text;
1607 if ( realName().isEmpty() ) 1611 if ( realName().isEmpty() )
1608 text = e; 1612 text = e;
1609 else 1613 else
1610 text = assembledName() + " <" + e + ">"; 1614 text = assembledName() + " <" + e + ">";
1611 1615
1612 return text; 1616 return text;
1613} 1617}
1614 1618
1615void Addressee::insertEmail( const QString &email, bool preferred ) 1619void Addressee::insertEmail( const QString &email, bool preferred )
1616{ 1620{
1617 detach(); 1621 detach();
1618 1622
1619 QStringList::Iterator it = mData->emails.find( email ); 1623 QStringList::Iterator it = mData->emails.find( email );
1620 1624
1621 if ( it != mData->emails.end() ) { 1625 if ( it != mData->emails.end() ) {
1622 if ( !preferred || it == mData->emails.begin() ) return; 1626 if ( !preferred || it == mData->emails.begin() ) return;
1623 mData->emails.remove( it ); 1627 mData->emails.remove( it );
1624 mData->emails.prepend( email ); 1628 mData->emails.prepend( email );
1625 } else { 1629 } else {
1626 if ( preferred ) { 1630 if ( preferred ) {
1627 mData->emails.prepend( email ); 1631 mData->emails.prepend( email );
1628 } else { 1632 } else {
1629 mData->emails.append( email ); 1633 mData->emails.append( email );
1630 } 1634 }
1631 } 1635 }
1632} 1636}
1633 1637
1634void Addressee::removeEmail( const QString &email ) 1638void Addressee::removeEmail( const QString &email )
1635{ 1639{
1636 detach(); 1640 detach();
1637 1641
1638 QStringList::Iterator it = mData->emails.find( email ); 1642 QStringList::Iterator it = mData->emails.find( email );
1639 if ( it == mData->emails.end() ) return; 1643 if ( it == mData->emails.end() ) return;
1640 1644
1641 mData->emails.remove( it ); 1645 mData->emails.remove( it );
1642} 1646}
1643 1647
1644QString Addressee::preferredEmail() const 1648QString Addressee::preferredEmail() const
1645{ 1649{
1646 if ( mData->emails.count() == 0 ) return QString::null; 1650 if ( mData->emails.count() == 0 ) return QString::null;
1647 else return mData->emails.first(); 1651 else return mData->emails.first();
1648} 1652}
1649 1653
1650QStringList Addressee::emails() const 1654QStringList Addressee::emails() const
1651{ 1655{
1652 return mData->emails; 1656 return mData->emails;
1653} 1657}
1654void Addressee::setEmails( const QStringList& emails ) { 1658void Addressee::setEmails( const QStringList& emails ) {
1655 detach(); 1659 detach();
1656 mData->emails = emails; 1660 mData->emails = emails;
1657} 1661}
1658void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1662void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1659{ 1663{
1660 detach(); 1664 detach();
1661 mData->empty = false; 1665 mData->empty = false;
1662 1666
1663 PhoneNumber::List::Iterator it; 1667 PhoneNumber::List::Iterator it;
1664 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1668 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1665 if ( (*it).id() == phoneNumber.id() ) { 1669 if ( (*it).id() == phoneNumber.id() ) {
1666 *it = phoneNumber; 1670 *it = phoneNumber;
1667 return; 1671 return;
1668 } 1672 }
1669 } 1673 }
1670 mData->phoneNumbers.append( phoneNumber ); 1674 mData->phoneNumbers.append( phoneNumber );
1671} 1675}
1672 1676
1673void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1677void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1674{ 1678{
1675 detach(); 1679 detach();
1676 1680
1677 PhoneNumber::List::Iterator it; 1681 PhoneNumber::List::Iterator it;
1678 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1682 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1679 if ( (*it).id() == phoneNumber.id() ) { 1683 if ( (*it).id() == phoneNumber.id() ) {
1680 mData->phoneNumbers.remove( it ); 1684 mData->phoneNumbers.remove( it );
1681 return; 1685 return;
1682 } 1686 }
1683 } 1687 }
1684} 1688}
1685 1689
1686PhoneNumber Addressee::phoneNumber( int type ) const 1690PhoneNumber Addressee::phoneNumber( int type ) const
1687{ 1691{
1688 PhoneNumber phoneNumber( "", type ); 1692 PhoneNumber phoneNumber( "", type );
1689 PhoneNumber::List::ConstIterator it; 1693 PhoneNumber::List::ConstIterator it;
1690 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1694 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1691 if ( matchBinaryPatternP( (*it).type(), type ) ) { 1695 if ( matchBinaryPatternP( (*it).type(), type ) ) {
1692 if ( (*it).type() & PhoneNumber::Pref ) 1696 if ( (*it).type() & PhoneNumber::Pref )
1693 return (*it); 1697 return (*it);
1694 else if ( phoneNumber.number().isEmpty() ) 1698 else if ( phoneNumber.number().isEmpty() )
1695 phoneNumber = (*it); 1699 phoneNumber = (*it);
1696 } 1700 }
1697 } 1701 }
1698 1702
1699 return phoneNumber; 1703 return phoneNumber;
1700} 1704}
1701 1705
1702PhoneNumber::List Addressee::phoneNumbers() const 1706PhoneNumber::List Addressee::phoneNumbers() const
1703{ 1707{
1704 return mData->phoneNumbers; 1708 return mData->phoneNumbers;
1705} 1709}
1706 1710
1707int Addressee::hasPhoneNumberType( int type ) 1711int Addressee::hasPhoneNumberType( int type )
1708{ 1712{
1709 int retval = 0; 1713 int retval = 0;
1710 PhoneNumber::List::ConstIterator it; 1714 PhoneNumber::List::ConstIterator it;
1711 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1715 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1712 if ( (*it).type() == type ) 1716 if ( (*it).type() == type )
1713 ++retval; 1717 ++retval;
1714 } 1718 }
1715 return retval; 1719 return retval;
1716} 1720}
1717PhoneNumber::List Addressee::phoneNumbers( int type ) const 1721PhoneNumber::List Addressee::phoneNumbers( int type ) const
1718{ 1722{
1719 PhoneNumber::List list; 1723 PhoneNumber::List list;
1720 1724
1721 PhoneNumber::List::ConstIterator it; 1725 PhoneNumber::List::ConstIterator it;
1722 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1726 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1723 if ( matchBinaryPattern( (*it).type(), type ) ) { 1727 if ( matchBinaryPattern( (*it).type(), type ) ) {
1724 list.append( *it ); 1728 list.append( *it );
1725 } 1729 }
1726 } 1730 }
1727 return list; 1731 return list;
1728} 1732}
1729 1733
1730PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1734PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1731{ 1735{
1732 PhoneNumber::List::ConstIterator it; 1736 PhoneNumber::List::ConstIterator it;
1733 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1737 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1734 if ( (*it).id() == id ) { 1738 if ( (*it).id() == id ) {
1735 return *it; 1739 return *it;
1736 } 1740 }
1737 } 1741 }
1738 return PhoneNumber(); 1742 return PhoneNumber();
1739} 1743}
1740 1744
1741void Addressee::insertKey( const Key &key ) 1745void Addressee::insertKey( const Key &key )
1742{ 1746{
1743 detach(); 1747 detach();
1744 mData->empty = false; 1748 mData->empty = false;
1745 1749
1746 Key::List::Iterator it; 1750 Key::List::Iterator it;
1747 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1751 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1748 if ( (*it).id() == key.id() ) { 1752 if ( (*it).id() == key.id() ) {
1749 *it = key; 1753 *it = key;
1750 return; 1754 return;
1751 } 1755 }
1752 } 1756 }
1753 mData->keys.append( key ); 1757 mData->keys.append( key );
1754} 1758}
1755 1759
1756void Addressee::removeKey( const Key &key ) 1760void Addressee::removeKey( const Key &key )
1757{ 1761{
1758 detach(); 1762 detach();
1759 1763
1760 Key::List::Iterator it; 1764 Key::List::Iterator it;
1761 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1765 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1762 if ( (*it).id() == key.id() ) { 1766 if ( (*it).id() == key.id() ) {
1763 mData->keys.remove( key ); 1767 mData->keys.remove( key );
1764 return; 1768 return;
1765 } 1769 }
1766 } 1770 }
1767} 1771}
1768 1772
1769Key Addressee::key( int type, QString customTypeString ) const 1773Key Addressee::key( int type, QString customTypeString ) const
1770{ 1774{
1771 Key::List::ConstIterator it; 1775 Key::List::ConstIterator it;
1772 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1776 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1773 if ( (*it).type() == type ) { 1777 if ( (*it).type() == type ) {
1774 if ( type == Key::Custom ) { 1778 if ( type == Key::Custom ) {
1775 if ( customTypeString.isEmpty() ) { 1779 if ( customTypeString.isEmpty() ) {
1776 return *it; 1780 return *it;
1777 } else { 1781 } else {
1778 if ( (*it).customTypeString() == customTypeString ) 1782 if ( (*it).customTypeString() == customTypeString )
1779 return (*it); 1783 return (*it);
1780 } 1784 }
1781 } else { 1785 } else {
1782 return *it; 1786 return *it;
1783 } 1787 }
1784 } 1788 }
1785 } 1789 }
1786 return Key( QString(), type ); 1790 return Key( QString(), type );
1787} 1791}
1788void Addressee::setKeys( const Key::List& list ) { 1792void Addressee::setKeys( const Key::List& list ) {
1789 detach(); 1793 detach();
1790 mData->keys = list; 1794 mData->keys = list;
1791} 1795}
1792 1796
1793Key::List Addressee::keys() const 1797Key::List Addressee::keys() const
1794{ 1798{
1795 return mData->keys; 1799 return mData->keys;
1796} 1800}
1797 1801
1798Key::List Addressee::keys( int type, QString customTypeString ) const 1802Key::List Addressee::keys( int type, QString customTypeString ) const
1799{ 1803{
1800 Key::List list; 1804 Key::List list;
1801 1805
1802 Key::List::ConstIterator it; 1806 Key::List::ConstIterator it;
1803 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1807 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1804 if ( (*it).type() == type ) { 1808 if ( (*it).type() == type ) {
1805 if ( type == Key::Custom ) { 1809 if ( type == Key::Custom ) {
1806 if ( customTypeString.isEmpty() ) { 1810 if ( customTypeString.isEmpty() ) {
1807 list.append(*it); 1811 list.append(*it);
1808 } else { 1812 } else {
1809 if ( (*it).customTypeString() == customTypeString ) 1813 if ( (*it).customTypeString() == customTypeString )
1810 list.append(*it); 1814 list.append(*it);
1811 } 1815 }
1812 } else { 1816 } else {
1813 list.append(*it); 1817 list.append(*it);
1814 } 1818 }
1815 } 1819 }
1816 } 1820 }
1817 return list; 1821 return list;
1818} 1822}
1819 1823
1820Key Addressee::findKey( const QString &id ) const 1824Key Addressee::findKey( const QString &id ) const
1821{ 1825{
1822 Key::List::ConstIterator it; 1826 Key::List::ConstIterator it;
1823 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1827 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1824 if ( (*it).id() == id ) { 1828 if ( (*it).id() == id ) {
1825 return *it; 1829 return *it;
1826 } 1830 }
1827 } 1831 }
1828 return Key(); 1832 return Key();
1829} 1833}
1830 1834
1831QString Addressee::asString() const 1835QString Addressee::asString() const
1832{ 1836{
1833 return "Smith, agent Smith..."; 1837 return "Smith, agent Smith...";
1834} 1838}
1835 1839
1836void Addressee::dump() const 1840void Addressee::dump() const
1837{ 1841{
1838 return; 1842 return;
1839#if 0 1843#if 0
1840 kdDebug(5700) << "Addressee {" << endl; 1844 kdDebug(5700) << "Addressee {" << endl;
1841 1845
1842 kdDebug(5700) << " Uid: '" << uid() << "'" << endl; 1846 kdDebug(5700) << " Uid: '" << uid() << "'" << endl;
1843 1847
1844 kdDebug(5700) << " Name: '" << name() << "'" << endl; 1848 kdDebug(5700) << " Name: '" << name() << "'" << endl;
1845 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; 1849 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl;
1846 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; 1850 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl;
1847 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; 1851 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl;
1848 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; 1852 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl;
1849 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; 1853 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl;
1850 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; 1854 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl;
1851 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; 1855 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl;
1852 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; 1856 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl;
1853 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; 1857 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl;
1854 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; 1858 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl;
1855 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; 1859 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl;
1856 kdDebug(5700) << " Title: '" << title() << "'" << endl; 1860 kdDebug(5700) << " Title: '" << title() << "'" << endl;
1857 kdDebug(5700) << " Role: '" << role() << "'" << endl; 1861 kdDebug(5700) << " Role: '" << role() << "'" << endl;
1858 kdDebug(5700) << " Organization: '" << organization() << "'" << endl; 1862 kdDebug(5700) << " Organization: '" << organization() << "'" << endl;
1859 kdDebug(5700) << " Note: '" << note() << "'" << endl; 1863 kdDebug(5700) << " Note: '" << note() << "'" << endl;
1860 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; 1864 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl;
1861 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; 1865 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl;
1862 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; 1866 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl;
1863 kdDebug(5700) << " Url: '" << url().url() << "'" << endl; 1867 kdDebug(5700) << " Url: '" << url().url() << "'" << endl;
1864 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; 1868 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl;
1865 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; 1869 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl;
1866 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; 1870 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl;
1867 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; 1871 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl;
1868 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; 1872 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl;
1869 1873
1870 kdDebug(5700) << " Emails {" << endl; 1874 kdDebug(5700) << " Emails {" << endl;
1871 QStringList e = emails(); 1875 QStringList e = emails();
1872 QStringList::ConstIterator it; 1876 QStringList::ConstIterator it;
1873 for( it = e.begin(); it != e.end(); ++it ) { 1877 for( it = e.begin(); it != e.end(); ++it ) {
1874 kdDebug(5700) << " " << (*it) << endl; 1878 kdDebug(5700) << " " << (*it) << endl;
1875 } 1879 }
1876 kdDebug(5700) << " }" << endl; 1880 kdDebug(5700) << " }" << endl;
1877 1881
1878 kdDebug(5700) << " PhoneNumbers {" << endl; 1882 kdDebug(5700) << " PhoneNumbers {" << endl;
1879 PhoneNumber::List p = phoneNumbers(); 1883 PhoneNumber::List p = phoneNumbers();
1880 PhoneNumber::List::ConstIterator it2; 1884 PhoneNumber::List::ConstIterator it2;
1881 for( it2 = p.begin(); it2 != p.end(); ++it2 ) { 1885 for( it2 = p.begin(); it2 != p.end(); ++it2 ) {
1882 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; 1886 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl;
1883 } 1887 }
1884 kdDebug(5700) << " }" << endl; 1888 kdDebug(5700) << " }" << endl;
1885 1889
1886 Address::List a = addresses(); 1890 Address::List a = addresses();
1887 Address::List::ConstIterator it3; 1891 Address::List::ConstIterator it3;
1888 for( it3 = a.begin(); it3 != a.end(); ++it3 ) { 1892 for( it3 = a.begin(); it3 != a.end(); ++it3 ) {
1889 (*it3).dump(); 1893 (*it3).dump();
1890 } 1894 }
1891 1895
1892 kdDebug(5700) << " Keys {" << endl; 1896 kdDebug(5700) << " Keys {" << endl;
1893 Key::List k = keys(); 1897 Key::List k = keys();
1894 Key::List::ConstIterator it4; 1898 Key::List::ConstIterator it4;
1895 for( it4 = k.begin(); it4 != k.end(); ++it4 ) { 1899 for( it4 = k.begin(); it4 != k.end(); ++it4 ) {
1896 kdDebug(5700) << " Type: " << int((*it4).type()) << 1900 kdDebug(5700) << " Type: " << int((*it4).type()) <<
1897 " Key: " << (*it4).textData() << 1901 " Key: " << (*it4).textData() <<
1898 " CustomString: " << (*it4).customTypeString() << endl; 1902 " CustomString: " << (*it4).customTypeString() << endl;
1899 } 1903 }
1900 kdDebug(5700) << " }" << endl; 1904 kdDebug(5700) << " }" << endl;
1901 1905
1902 kdDebug(5700) << "}" << endl; 1906 kdDebug(5700) << "}" << endl;
1903#endif 1907#endif
1904} 1908}
1905 1909
1906 1910
1907void Addressee::insertAddress( const Address &address ) 1911void Addressee::insertAddress( const Address &address )
1908{ 1912{
1909 detach(); 1913 detach();
1910 mData->empty = false; 1914 mData->empty = false;
1911 1915
1912 Address::List::Iterator it; 1916 Address::List::Iterator it;
1913 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1917 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1914 if ( (*it).id() == address.id() ) { 1918 if ( (*it).id() == address.id() ) {
1915 *it = address; 1919 *it = address;
1916 return; 1920 return;
1917 } 1921 }
1918 } 1922 }
1919 mData->addresses.append( address ); 1923 mData->addresses.append( address );
1920} 1924}
1921 1925
1922void Addressee::removeAddress( const Address &address ) 1926void Addressee::removeAddress( const Address &address )
1923{ 1927{
1924 detach(); 1928 detach();
1925 1929
1926 Address::List::Iterator it; 1930 Address::List::Iterator it;
1927 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1931 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1928 if ( (*it).id() == address.id() ) { 1932 if ( (*it).id() == address.id() ) {
1929 mData->addresses.remove( it ); 1933 mData->addresses.remove( it );
1930 return; 1934 return;
1931 } 1935 }
1932 } 1936 }
1933} 1937}
1934 1938
1935Address Addressee::address( int type ) const 1939Address Addressee::address( int type ) const
1936{ 1940{
1937 Address address( type ); 1941 Address address( type );
1938 Address::List::ConstIterator it; 1942 Address::List::ConstIterator it;
1939 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1943 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1940 if ( matchBinaryPatternA( (*it).type(), type ) ) { 1944 if ( matchBinaryPatternA( (*it).type(), type ) ) {
1941 if ( (*it).type() & Address::Pref ) 1945 if ( (*it).type() & Address::Pref )
1942 return (*it); 1946 return (*it);
1943 else if ( address.isEmpty() ) 1947 else if ( address.isEmpty() )
1944 address = (*it); 1948 address = (*it);
1945 } 1949 }
1946 } 1950 }
1947 1951
1948 return address; 1952 return address;
1949} 1953}
1950 1954
1951Address::List Addressee::addresses() const 1955Address::List Addressee::addresses() const
1952{ 1956{
1953 return mData->addresses; 1957 return mData->addresses;
1954} 1958}
1955 1959
1956Address::List Addressee::addresses( int type ) const 1960Address::List Addressee::addresses( int type ) const
1957{ 1961{
1958 Address::List list; 1962 Address::List list;
1959 1963
1960 Address::List::ConstIterator it; 1964 Address::List::ConstIterator it;
1961 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1965 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1962 if ( matchBinaryPattern( (*it).type(), type ) ) { 1966 if ( matchBinaryPattern( (*it).type(), type ) ) {
1963 list.append( *it ); 1967 list.append( *it );
1964 } 1968 }
1965 } 1969 }
1966 1970
1967 return list; 1971 return list;
1968} 1972}
1969 1973
1970Address Addressee::findAddress( const QString &id ) const 1974Address Addressee::findAddress( const QString &id ) const
1971{ 1975{
1972 Address::List::ConstIterator it; 1976 Address::List::ConstIterator it;
1973 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1977 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1974 if ( (*it).id() == id ) { 1978 if ( (*it).id() == id ) {
1975 return *it; 1979 return *it;
1976 } 1980 }
1977 } 1981 }
1978 return Address(); 1982 return Address();
1979} 1983}
1980 1984
1981void Addressee::insertCategory( const QString &c ) 1985void Addressee::insertCategory( const QString &c )
1982{ 1986{
1983 detach(); 1987 detach();
1984 mData->empty = false; 1988 mData->empty = false;
1985 1989
1986 if ( mData->categories.contains( c ) ) return; 1990 if ( mData->categories.contains( c ) ) return;
1987 1991
1988 mData->categories.append( c ); 1992 mData->categories.append( c );
1989} 1993}
1990 1994
1991void Addressee::removeCategory( const QString &c ) 1995void Addressee::removeCategory( const QString &c )
1992{ 1996{
1993 detach(); 1997 detach();
1994 1998
1995 QStringList::Iterator it = mData->categories.find( c ); 1999 QStringList::Iterator it = mData->categories.find( c );
1996 if ( it == mData->categories.end() ) return; 2000 if ( it == mData->categories.end() ) return;
1997 2001
1998 mData->categories.remove( it ); 2002 mData->categories.remove( it );
1999} 2003}
2000 2004
2001bool Addressee::hasCategory( const QString &c ) const 2005bool Addressee::hasCategory( const QString &c ) const
2002{ 2006{
2003 return ( mData->categories.contains( c ) ); 2007 return ( mData->categories.contains( c ) );
2004} 2008}
2005 2009
2006void Addressee::setCategories( const QStringList &c ) 2010void Addressee::setCategories( const QStringList &c )
2007{ 2011{
2008 detach(); 2012 detach();
2009 mData->empty = false; 2013 mData->empty = false;
2010 2014
2011 mData->categories = c; 2015 mData->categories = c;
2012} 2016}
2013 2017
2014QStringList Addressee::categories() const 2018QStringList Addressee::categories() const
2015{ 2019{
2016 return mData->categories; 2020 return mData->categories;
2017} 2021}
2018 2022
2019void Addressee::insertCustom( const QString &app, const QString &name, 2023void Addressee::insertCustom( const QString &app, const QString &name,
2020 const QString &value ) 2024 const QString &value )
2021{ 2025{
2022 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; 2026 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return;
2023 2027
2024 detach(); 2028 detach();
2025 mData->empty = false; 2029 mData->empty = false;
2026 2030
2027 QString qualifiedName = app + "-" + name + ":"; 2031 QString qualifiedName = app + "-" + name + ":";
2028 2032
2029 QStringList::Iterator it; 2033 QStringList::Iterator it;
2030 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 2034 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
2031 if ( (*it).startsWith( qualifiedName ) ) { 2035 if ( (*it).startsWith( qualifiedName ) ) {
2032 (*it) = qualifiedName + value; 2036 (*it) = qualifiedName + value;
2033 return; 2037 return;
2034 } 2038 }
2035 } 2039 }
2036 mData->custom.append( qualifiedName + value ); 2040 mData->custom.append( qualifiedName + value );
2037} 2041}
2038 2042
2039void Addressee::removeCustom( const QString &app, const QString &name) 2043void Addressee::removeCustom( const QString &app, const QString &name)
2040{ 2044{
2041 detach(); 2045 detach();
2042 2046
2043 QString qualifiedName = app + "-" + name + ":"; 2047 QString qualifiedName = app + "-" + name + ":";
2044 2048
2045 QStringList::Iterator it; 2049 QStringList::Iterator it;
2046 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 2050 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
2047 if ( (*it).startsWith( qualifiedName ) ) { 2051 if ( (*it).startsWith( qualifiedName ) ) {
2048 mData->custom.remove( it ); 2052 mData->custom.remove( it );
2049 return; 2053 return;
2050 } 2054 }
2051 } 2055 }
2052} 2056}
2053 2057
2054QString Addressee::custom( const QString &app, const QString &name ) const 2058QString Addressee::custom( const QString &app, const QString &name ) const
2055{ 2059{
2056 QString qualifiedName = app + "-" + name + ":"; 2060 QString qualifiedName = app + "-" + name + ":";
2057 QString value; 2061 QString value;
2058 2062
2059 QStringList::ConstIterator it; 2063 QStringList::ConstIterator it;
2060 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 2064 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
2061 if ( (*it).startsWith( qualifiedName ) ) { 2065 if ( (*it).startsWith( qualifiedName ) ) {
2062 value = (*it).mid( (*it).find( ":" ) + 1 ); 2066 value = (*it).mid( (*it).find( ":" ) + 1 );
2063 break; 2067 break;
2064 } 2068 }
2065 } 2069 }
2066 2070
2067 return value; 2071 return value;
2068} 2072}
2069 2073
2070void Addressee::setCustoms( const QStringList &l ) 2074void Addressee::setCustoms( const QStringList &l )
2071{ 2075{
2072 detach(); 2076 detach();
2073 mData->empty = false; 2077 mData->empty = false;
2074 2078
2075 mData->custom = l; 2079 mData->custom = l;
2076} 2080}
2077 2081
2078QStringList Addressee::customs() const 2082QStringList Addressee::customs() const
2079{ 2083{
2080 return mData->custom; 2084 return mData->custom;
2081} 2085}
2082 2086
2083void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, 2087void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName,
2084 QString &email) 2088 QString &email)
2085{ 2089{
2086 int startPos, endPos, len; 2090 int startPos, endPos, len;
2087 QString partA, partB, result; 2091 QString partA, partB, result;
2088 char endCh = '>'; 2092 char endCh = '>';
2089 2093
2090 startPos = rawEmail.find('<'); 2094 startPos = rawEmail.find('<');
2091 if (startPos < 0) 2095 if (startPos < 0)
2092 { 2096 {
2093 startPos = rawEmail.find('('); 2097 startPos = rawEmail.find('(');
2094 endCh = ')'; 2098 endCh = ')';
2095 } 2099 }
2096 if (startPos < 0) 2100 if (startPos < 0)
2097 { 2101 {
2098 // We couldn't find any separators, so we assume the whole string 2102 // We couldn't find any separators, so we assume the whole string
2099 // is the email address 2103 // is the email address
2100 email = rawEmail; 2104 email = rawEmail;
2101 fullName = ""; 2105 fullName = "";
2102 } 2106 }
2103 else 2107 else
2104 { 2108 {
2105 // We have a start position, try to find an end 2109 // We have a start position, try to find an end
2106 endPos = rawEmail.find(endCh, startPos+1); 2110 endPos = rawEmail.find(endCh, startPos+1);
2107 2111
2108 if (endPos < 0) 2112 if (endPos < 0)
2109 { 2113 {
2110 // We couldn't find the end of the email address. We can only 2114 // We couldn't find the end of the email address. We can only
2111 // assume the entire string is the email address. 2115 // assume the entire string is the email address.
2112 email = rawEmail; 2116 email = rawEmail;
2113 fullName = ""; 2117 fullName = "";
2114 } 2118 }
2115 else 2119 else
2116 { 2120 {
2117 // We have a start and end to the email address 2121 // We have a start and end to the email address
2118 2122
2119 // Grab the name part 2123 // Grab the name part
2120 fullName = rawEmail.left(startPos).stripWhiteSpace(); 2124 fullName = rawEmail.left(startPos).stripWhiteSpace();
2121 2125
2122 // grab the email part 2126 // grab the email part
2123 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace(); 2127 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace();
2124 2128
2125 // Check that we do not have any extra characters on the end of the 2129 // Check that we do not have any extra characters on the end of the
2126 // strings 2130 // strings
2127 len = fullName.length(); 2131 len = fullName.length();
2128 if (fullName[0]=='"' && fullName[len-1]=='"') 2132 if (fullName[0]=='"' && fullName[len-1]=='"')
2129 fullName = fullName.mid(1, len-2); 2133 fullName = fullName.mid(1, len-2);
2130 else if (fullName[0]=='<' && fullName[len-1]=='>') 2134 else if (fullName[0]=='<' && fullName[len-1]=='>')
2131 fullName = fullName.mid(1, len-2); 2135 fullName = fullName.mid(1, len-2);
2132 else if (fullName[0]=='(' && fullName[len-1]==')') 2136 else if (fullName[0]=='(' && fullName[len-1]==')')
2133 fullName = fullName.mid(1, len-2); 2137 fullName = fullName.mid(1, len-2);
2134 } 2138 }
2135 } 2139 }
2136} 2140}
2137 2141
2138void Addressee::setResource( Resource *resource ) 2142void Addressee::setResource( Resource *resource )
2139{ 2143{
2140 detach(); 2144 detach();
2141 mData->resource = resource; 2145 mData->resource = resource;
2142} 2146}
2143 2147
2144Resource *Addressee::resource() const 2148Resource *Addressee::resource() const
2145{ 2149{
2146 return mData->resource; 2150 return mData->resource;
2147} 2151}
2148 2152
2149//US 2153//US
2150QString Addressee::resourceLabel() 2154QString Addressee::resourceLabel()
2151{ 2155{
2152 return i18n("Resource"); 2156 return i18n("Resource");
2153} 2157}
2154QString Addressee::categoryLabel() 2158QString Addressee::categoryLabel()
2155{ 2159{
2156 return i18n("Category"); 2160 return i18n("Category");
2157} 2161}
2158 2162
2159void Addressee::setChanged( bool value ) 2163void Addressee::setChanged( bool value )
2160{ 2164{
2161 detach(); 2165 detach();
2162 mData->changed = value; 2166 mData->changed = value;
2163} 2167}
2164 2168
2165bool Addressee::changed() const 2169bool Addressee::changed() const
2166{ 2170{
2167 return mData->changed; 2171 return mData->changed;
2168} 2172}
2169 2173
2170void Addressee::setTagged( bool value ) 2174void Addressee::setTagged( bool value )
2171{ 2175{
2172 detach(); 2176 detach();
2173 mData->tagged = value; 2177 mData->tagged = value;
2174} 2178}
2175 2179
2176bool Addressee::tagged() const 2180bool Addressee::tagged() const
2177{ 2181{
2178 return mData->tagged; 2182 return mData->tagged;
2179} 2183}
2180 2184
2181QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) 2185QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
2182{ 2186{
2183 if (!a.mData) return s; 2187 if (!a.mData) return s;
2184 2188
2185 s << a.uid(); 2189 s << a.uid();
2186 2190
2187 s << a.mData->name; 2191 s << a.mData->name;
2188 s << a.mData->formattedName; 2192 s << a.mData->formattedName;
2189 s << a.mData->familyName; 2193 s << a.mData->familyName;
2190 s << a.mData->givenName; 2194 s << a.mData->givenName;
2191 s << a.mData->additionalName; 2195 s << a.mData->additionalName;
2192 s << a.mData->prefix; 2196 s << a.mData->prefix;
2193 s << a.mData->suffix; 2197 s << a.mData->suffix;
2194 s << a.mData->nickName; 2198 s << a.mData->nickName;
2195 s << a.mData->birthday; 2199 s << a.mData->birthday;
2196 s << a.mData->mailer; 2200 s << a.mData->mailer;
2197 s << a.mData->timeZone; 2201 s << a.mData->timeZone;
2198 s << a.mData->geo; 2202 s << a.mData->geo;
2199 s << a.mData->title; 2203 s << a.mData->title;
2200 s << a.mData->role; 2204 s << a.mData->role;
2201 s << a.mData->organization; 2205 s << a.mData->organization;
2202 s << a.mData->note; 2206 s << a.mData->note;
2203 s << a.mData->productId; 2207 s << a.mData->productId;
2204 s << a.mData->revision; 2208 s << a.mData->revision;
2205 s << a.mData->sortString; 2209 s << a.mData->sortString;
2206 s << a.mData->url; 2210 s << a.mData->url;
2207 s << a.mData->secrecy; 2211 s << a.mData->secrecy;
2208 s << a.mData->logo; 2212 s << a.mData->logo;
2209 s << a.mData->photo; 2213 s << a.mData->photo;
2210 s << a.mData->sound; 2214 s << a.mData->sound;
2211 s << a.mData->agent; 2215 s << a.mData->agent;
2212 s << a.mData->phoneNumbers; 2216 s << a.mData->phoneNumbers;
2213 s << a.mData->addresses; 2217 s << a.mData->addresses;
2214 s << a.mData->emails; 2218 s << a.mData->emails;
2215 s << a.mData->categories; 2219 s << a.mData->categories;
2216 s << a.mData->custom; 2220 s << a.mData->custom;
2217 s << a.mData->keys; 2221 s << a.mData->keys;
2218 return s; 2222 return s;
2219} 2223}
2220 2224
2221QDataStream &KABC::operator>>( QDataStream &s, Addressee &a ) 2225QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
2222{ 2226{
2223 if (!a.mData) return s; 2227 if (!a.mData) return s;
2224 2228
2225 s >> a.mData->uid; 2229 s >> a.mData->uid;
2226 2230
2227 s >> a.mData->name; 2231 s >> a.mData->name;
2228 s >> a.mData->formattedName; 2232 s >> a.mData->formattedName;
2229 s >> a.mData->familyName; 2233 s >> a.mData->familyName;
2230 s >> a.mData->givenName; 2234 s >> a.mData->givenName;
2231 s >> a.mData->additionalName; 2235 s >> a.mData->additionalName;
2232 s >> a.mData->prefix; 2236 s >> a.mData->prefix;
2233 s >> a.mData->suffix; 2237 s >> a.mData->suffix;
2234 s >> a.mData->nickName; 2238 s >> a.mData->nickName;
2235 s >> a.mData->birthday; 2239 s >> a.mData->birthday;
2236 s >> a.mData->mailer; 2240 s >> a.mData->mailer;
2237 s >> a.mData->timeZone; 2241 s >> a.mData->timeZone;
2238 s >> a.mData->geo; 2242 s >> a.mData->geo;
2239 s >> a.mData->title; 2243 s >> a.mData->title;
2240 s >> a.mData->role; 2244 s >> a.mData->role;
2241 s >> a.mData->organization; 2245 s >> a.mData->organization;
2242 s >> a.mData->note; 2246 s >> a.mData->note;
2243 s >> a.mData->productId; 2247 s >> a.mData->productId;
2244 s >> a.mData->revision; 2248 s >> a.mData->revision;
2245 s >> a.mData->sortString; 2249 s >> a.mData->sortString;
2246 s >> a.mData->url; 2250 s >> a.mData->url;
2247 s >> a.mData->secrecy; 2251 s >> a.mData->secrecy;
2248 s >> a.mData->logo; 2252 s >> a.mData->logo;
2249 s >> a.mData->photo; 2253 s >> a.mData->photo;
2250 s >> a.mData->sound; 2254 s >> a.mData->sound;
2251 s >> a.mData->agent; 2255 s >> a.mData->agent;
2252 s >> a.mData->phoneNumbers; 2256 s >> a.mData->phoneNumbers;
2253 s >> a.mData->addresses; 2257 s >> a.mData->addresses;
2254 s >> a.mData->emails; 2258 s >> a.mData->emails;
2255 s >> a.mData->categories; 2259 s >> a.mData->categories;
2256 s >> a.mData->custom; 2260 s >> a.mData->custom;
2257 s >> a.mData->keys; 2261 s >> a.mData->keys;
2258 2262
2259 a.mData->empty = false; 2263 a.mData->empty = false;
2260 2264
2261 return s; 2265 return s;
2262} 2266}
2263bool matchBinaryPattern( int value, int pattern ) 2267bool matchBinaryPattern( int value, int pattern )
2264{ 2268{
2265 /** 2269 /**
2266 We want to match all telephonnumbers/addresses which have the bits in the 2270 We want to match all telephonnumbers/addresses which have the bits in the
2267 pattern set. More are allowed. 2271 pattern set. More are allowed.
2268 if pattern == 0 we have a special handling, then we want only those with 2272 if pattern == 0 we have a special handling, then we want only those with
2269 exactly no bit set. 2273 exactly no bit set.
2270 */ 2274 */
2271 if ( pattern == 0 ) 2275 if ( pattern == 0 )
2272 return ( value == 0 ); 2276 return ( value == 0 );
2273 else 2277 else
2274 return ( pattern == ( pattern & value ) ); 2278 return ( pattern == ( pattern & value ) );
2275} 2279}
2276 2280
2277bool matchBinaryPatternP( int value, int pattern ) 2281bool matchBinaryPatternP( int value, int pattern )
2278{ 2282{
2279 2283
2280 if ( pattern == 0 ) 2284 if ( pattern == 0 )
2281 return ( value == 0 ); 2285 return ( value == 0 );
2282 else 2286 else
2283 return ( (pattern |PhoneNumber::Pref ) == ( value |PhoneNumber::Pref ) ); 2287 return ( (pattern |PhoneNumber::Pref ) == ( value |PhoneNumber::Pref ) );
2284} 2288}
2285bool matchBinaryPatternA( int value, int pattern ) 2289bool matchBinaryPatternA( int value, int pattern )
2286{ 2290{
2287 2291
2288 if ( pattern == 0 ) 2292 if ( pattern == 0 )
2289 return ( value == 0 ); 2293 return ( value == 0 );
2290 else 2294 else
2291 return ( (pattern | Address::Pref) == ( value | Address::Pref ) ); 2295 return ( (pattern | Address::Pref) == ( value | Address::Pref ) );
2292} 2296}
diff --git a/kabc/addressee.h b/kabc/addressee.h
index 0c488eb..fcadda6 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -1,861 +1,861 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#ifndef KABC_ADDRESSEE_H 29#ifndef KABC_ADDRESSEE_H
30#define KABC_ADDRESSEE_H 30#define KABC_ADDRESSEE_H
31 31
32#include <qdatetime.h> 32#include <qdatetime.h>
33#include <qstring.h> 33#include <qstring.h>
34#include <qregexp.h> 34#include <qregexp.h>
35#include <qstringlist.h> 35#include <qstringlist.h>
36#include <qvaluelist.h> 36#include <qvaluelist.h>
37 37
38#include <ksharedptr.h> 38#include <ksharedptr.h>
39#include <kurl.h> 39#include <kurl.h>
40 40
41#include "address.h" 41#include "address.h"
42#include "agent.h" 42#include "agent.h"
43#include "geo.h" 43#include "geo.h"
44#include "key.h" 44#include "key.h"
45#include "phonenumber.h" 45#include "phonenumber.h"
46#include "picture.h" 46#include "picture.h"
47#include "secrecy.h" 47#include "secrecy.h"
48#include "sound.h" 48#include "sound.h"
49#include "timezone.h" 49#include "timezone.h"
50 50
51namespace KABC { 51namespace KABC {
52 52
53class Resource; 53class Resource;
54 54
55/** 55/**
56 @short address book entry 56 @short address book entry
57 57
58 This class represents an entry in the address book. 58 This class represents an entry in the address book.
59 59
60 The data of this class is implicitly shared. You can pass this class by value. 60 The data of this class is implicitly shared. You can pass this class by value.
61 61
62 If you need the name of a field for presenting it to the user you should use 62 If you need the name of a field for presenting it to the user you should use
63 the functions ending in Label(). They return a translated string which can be 63 the functions ending in Label(). They return a translated string which can be
64 used as label for the corresponding field. 64 used as label for the corresponding field.
65 65
66 About the name fields: 66 About the name fields:
67 67
68 givenName() is the first name and familyName() the last name. In some 68 givenName() is the first name and familyName() the last name. In some
69 countries the family name comes first, that's the reason for the 69 countries the family name comes first, that's the reason for the
70 naming. formattedName() is the full name with the correct formatting. 70 naming. formattedName() is the full name with the correct formatting.
71 It is used as an override, when the correct formatting can't be generated 71 It is used as an override, when the correct formatting can't be generated
72 from the other name fields automatically. 72 from the other name fields automatically.
73 73
74 realName() returns a fully formatted name(). It uses formattedName, if set, 74 realName() returns a fully formatted name(). It uses formattedName, if set,
75 otherwise it constucts the name from the name fields. As fallback, if 75 otherwise it constucts the name from the name fields. As fallback, if
76 nothing else is set it uses name(). 76 nothing else is set it uses name().
77 77
78 name() is the NAME type of RFC2426. It can be used as internal name for the 78 name() is the NAME type of RFC2426. It can be used as internal name for the
79 data enty, but shouldn't be used for displaying the data to the user. 79 data enty, but shouldn't be used for displaying the data to the user.
80 */ 80 */
81class Addressee 81class Addressee
82{ 82{
83 friend QDataStream &operator<<( QDataStream &, const Addressee & ); 83 friend QDataStream &operator<<( QDataStream &, const Addressee & );
84 friend QDataStream &operator>>( QDataStream &, Addressee & ); 84 friend QDataStream &operator>>( QDataStream &, Addressee & );
85 85
86 public: 86 public:
87 typedef QValueList<Addressee> List; 87 typedef QValueList<Addressee> List;
88 88
89 /** 89 /**
90 Construct an empty address book entry. 90 Construct an empty address book entry.
91 */ 91 */
92 Addressee(); 92 Addressee();
93 ~Addressee(); 93 ~Addressee();
94 94
95 Addressee( const Addressee & ); 95 Addressee( const Addressee & );
96 Addressee &operator=( const Addressee & ); 96 Addressee &operator=( const Addressee & );
97 97
98 bool operator==( const Addressee & ) const; 98 bool operator==( const Addressee & ) const;
99 bool operator!=( const Addressee & ) const; 99 bool operator!=( const Addressee & ) const;
100 // sync stuff 100 // sync stuff
101 void setTempSyncStat(int id); 101 void setTempSyncStat(int id);
102 int tempSyncStat() const; 102 int tempSyncStat() const;
103 void setIDStr( const QString & ); 103 void setIDStr( const QString & );
104 const QString IDStr() const; 104 const QString IDStr() const;
105 void setID( const QString &, const QString & ); 105 void setID( const QString &, const QString & );
106 const QString getID( const QString & ) const; 106 const QString getID( const QString & ) const;
107 void setCsum( const QString &, const QString & ); 107 void setCsum( const QString &, const QString & );
108 const QString getCsum( const QString & ) const ; 108 const QString getCsum( const QString & ) const ;
109 void removeID(const QString &); 109 void removeID(const QString &);
110 void computeCsum(const QString &dev); 110 void computeCsum(const QString &dev);
111 ulong getCsum4List( const QStringList & attList); 111 ulong getCsum4List( const QStringList & attList);
112 /** 112 /**
113 Return, if the address book entry is empty. 113 Return, if the address book entry is empty.
114 */ 114 */
115 bool isEmpty() const; 115 bool isEmpty() const;
116 void setExternalUID( const QString &id ); 116 void setExternalUID( const QString &id );
117 const QString externalUID() const; 117 const QString externalUID() const;
118 void setOriginalExternalUID( const QString &id ); 118 void setOriginalExternalUID( const QString &id );
119 QString originalExternalUID() const; 119 QString originalExternalUID() const;
120 void mergeContact( const Addressee& ad, bool isSubSet ); 120 void mergeContact( const Addressee& ad, bool isSubSet );
121 void simplifyEmails(); 121 void simplifyEmails();
122 void simplifyAddresses(); 122 void simplifyAddresses();
123 void simplifyPhoneNumbers(); 123 void simplifyPhoneNumbers();
124 void simplifyPhoneNumberTypes(); 124 void simplifyPhoneNumberTypes();
125 void makePhoneNumbersOLcompatible(); 125 void makePhoneNumbersOLcompatible();
126 int hasPhoneNumberType( int type ); 126 int hasPhoneNumberType( int type );
127 bool removeVoice(); 127 bool removeVoice();
128 bool containsAdr(const Addressee& addr ); 128 bool containsAdr(const Addressee& addr );
129 129
130 /** 130 /**
131 Set unique identifier. 131 Set unique identifier.
132 */ 132 */
133 void setUid( const QString &uid ); 133 void setUid( const QString &uid );
134 /** 134 /**
135 Return unique identifier. 135 Return unique identifier.
136 */ 136 */
137 const QString uid() const; 137 const QString uid() const;
138 /** 138 /**
139 Return translated label for uid field. 139 Return translated label for uid field.
140 */ 140 */
141 static QString uidLabel(); 141 static QString uidLabel();
142 142
143 /** 143 /**
144 Set name. 144 Set name.
145 */ 145 */
146 void setName( const QString &name ); 146 void setName( const QString &name );
147 /** 147 /**
148 Return name. 148 Return name.
149 */ 149 */
150 QString name() const; 150 QString name() const;
151 /** 151 /**
152 Return translated label for name field. 152 Return translated label for name field.
153 */ 153 */
154 static QString nameLabel(); 154 static QString nameLabel();
155 155
156 /** 156 /**
157 Set formatted name. 157 Set formatted name.
158 */ 158 */
159 void setFormattedName( const QString &formattedName ); 159 void setFormattedName( const QString &formattedName );
160 /** 160 /**
161 Return formatted name. 161 Return formatted name.
162 */ 162 */
163 QString formattedName() const; 163 QString formattedName() const;
164 /** 164 /**
165 Return translated label for formattedName field. 165 Return translated label for formattedName field.
166 */ 166 */
167 static QString formattedNameLabel(); 167 static QString formattedNameLabel();
168 168
169 /** 169 /**
170 Set family name. 170 Set family name.
171 */ 171 */
172 void setFamilyName( const QString &familyName ); 172 void setFamilyName( const QString &familyName );
173 /** 173 /**
174 Return family name. 174 Return family name.
175 */ 175 */
176 QString familyName() const; 176 QString familyName() const;
177 /** 177 /**
178 Return translated label for familyName field. 178 Return translated label for familyName field.
179 */ 179 */
180 static QString familyNameLabel(); 180 static QString familyNameLabel();
181 181
182 /** 182 /**
183 Set given name. 183 Set given name.
184 */ 184 */
185 void setGivenName( const QString &givenName ); 185 void setGivenName( const QString &givenName );
186 /** 186 /**
187 Return given name. 187 Return given name.
188 */ 188 */
189 QString givenName() const; 189 QString givenName() const;
190 /** 190 /**
191 Return translated label for givenName field. 191 Return translated label for givenName field.
192 */ 192 */
193 static QString givenNameLabel(); 193 static QString givenNameLabel();
194 194
195 /** 195 /**
196 Set additional names. 196 Set additional names.
197 */ 197 */
198 void setAdditionalName( const QString &additionalName ); 198 void setAdditionalName( const QString &additionalName );
199 /** 199 /**
200 Return additional names. 200 Return additional names.
201 */ 201 */
202 QString additionalName() const; 202 QString additionalName() const;
203 /** 203 /**
204 Return translated label for additionalName field. 204 Return translated label for additionalName field.
205 */ 205 */
206 static QString additionalNameLabel(); 206 static QString additionalNameLabel();
207 207
208 /** 208 /**
209 Set honorific prefixes. 209 Set honorific prefixes.
210 */ 210 */
211 void setPrefix( const QString &prefix ); 211 void setPrefix( const QString &prefix );
212 /** 212 /**
213 Return honorific prefixes. 213 Return honorific prefixes.
214 */ 214 */
215 QString prefix() const; 215 QString prefix() const;
216 /** 216 /**
217 Return translated label for prefix field. 217 Return translated label for prefix field.
218 */ 218 */
219 static QString prefixLabel(); 219 static QString prefixLabel();
220 220
221 /** 221 /**
222 Set honorific suffixes. 222 Set honorific suffixes.
223 */ 223 */
224 void setSuffix( const QString &suffix ); 224 void setSuffix( const QString &suffix );
225 /** 225 /**
226 Return honorific suffixes. 226 Return honorific suffixes.
227 */ 227 */
228 QString suffix() const; 228 QString suffix() const;
229 /** 229 /**
230 Return translated label for suffix field. 230 Return translated label for suffix field.
231 */ 231 */
232 static QString suffixLabel(); 232 static QString suffixLabel();
233 233
234 /** 234 /**
235 Set nick name. 235 Set nick name.
236 */ 236 */
237 void setNickName( const QString &nickName ); 237 void setNickName( const QString &nickName );
238 /** 238 /**
239 Return nick name. 239 Return nick name.
240 */ 240 */
241 QString nickName() const; 241 QString nickName() const;
242 /** 242 /**
243 Return translated label for nickName field. 243 Return translated label for nickName field.
244 */ 244 */
245 static QString nickNameLabel(); 245 static QString nickNameLabel();
246 246
247 /** 247 /**
248 Set birthday. 248 Set birthday.
249 */ 249 */
250 void setBirthday( const QDateTime &birthday ); 250 void setBirthday( const QDateTime &birthday );
251 /** 251 /**
252 Return birthday. 252 Return birthday.
253 */ 253 */
254 QDateTime birthday() const; 254 QDateTime birthday() const;
255 /** 255 /**
256 Return translated label for birthday field. 256 Return translated label for birthday field.
257 */ 257 */
258 static QString birthdayLabel(); 258 static QString birthdayLabel();
259 259
260 /** 260 /**
261 Return translated label for homeAddressStreet field. 261 Return translated label for homeAddressStreet field.
262 */ 262 */
263 static QString homeAddressStreetLabel(); 263 static QString homeAddressStreetLabel();
264 264
265 /** 265 /**
266 Return translated label for homeAddressLocality field. 266 Return translated label for homeAddressLocality field.
267 */ 267 */
268 static QString homeAddressLocalityLabel(); 268 static QString homeAddressLocalityLabel();
269 269
270 /** 270 /**
271 Return translated label for homeAddressRegion field. 271 Return translated label for homeAddressRegion field.
272 */ 272 */
273 static QString homeAddressRegionLabel(); 273 static QString homeAddressRegionLabel();
274 274
275 /** 275 /**
276 Return translated label for homeAddressPostalCode field. 276 Return translated label for homeAddressPostalCode field.
277 */ 277 */
278 static QString homeAddressPostalCodeLabel(); 278 static QString homeAddressPostalCodeLabel();
279 279
280 /** 280 /**
281 Return translated label for homeAddressCountry field. 281 Return translated label for homeAddressCountry field.
282 */ 282 */
283 static QString homeAddressCountryLabel(); 283 static QString homeAddressCountryLabel();
284 284
285 /** 285 /**
286 Return translated label for homeAddressLabel field. 286 Return translated label for homeAddressLabel field.
287 */ 287 */
288 static QString homeAddressLabelLabel(); 288 static QString homeAddressLabelLabel();
289 289
290 /** 290 /**
291 Return translated label for businessAddressStreet field. 291 Return translated label for businessAddressStreet field.
292 */ 292 */
293 static QString businessAddressStreetLabel(); 293 static QString businessAddressStreetLabel();
294 294
295 /** 295 /**
296 Return translated label for businessAddressLocality field. 296 Return translated label for businessAddressLocality field.
297 */ 297 */
298 static QString businessAddressLocalityLabel(); 298 static QString businessAddressLocalityLabel();
299 299
300 /** 300 /**
301 Return translated label for businessAddressRegion field. 301 Return translated label for businessAddressRegion field.
302 */ 302 */
303 static QString businessAddressRegionLabel(); 303 static QString businessAddressRegionLabel();
304 304
305 /** 305 /**
306 Return translated label for businessAddressPostalCode field. 306 Return translated label for businessAddressPostalCode field.
307 */ 307 */
308 static QString businessAddressPostalCodeLabel(); 308 static QString businessAddressPostalCodeLabel();
309 309
310 /** 310 /**
311 Return translated label for businessAddressCountry field. 311 Return translated label for businessAddressCountry field.
312 */ 312 */
313 static QString businessAddressCountryLabel(); 313 static QString businessAddressCountryLabel();
314 314
315 /** 315 /**
316 Return translated label for businessAddressLabel field. 316 Return translated label for businessAddressLabel field.
317 */ 317 */
318 static QString businessAddressLabelLabel(); 318 static QString businessAddressLabelLabel();
319 319
320 /** 320 /**
321 Return translated label for homePhone field. 321 Return translated label for homePhone field.
322 */ 322 */
323 static QString homePhoneLabel(); 323 static QString homePhoneLabel();
324 324
325 /** 325 /**
326 Return translated label for businessPhone field. 326 Return translated label for businessPhone field.
327 */ 327 */
328 static QString businessPhoneLabel(); 328 static QString businessPhoneLabel();
329 329
330 /** 330 /**
331 Return translated label for mobilePhone field. 331 Return translated label for mobilePhone field.
332 */ 332 */
333 static QString mobilePhoneLabel(); 333 static QString mobilePhoneLabel();
334 static QString mobileWorkPhoneLabel(); 334 static QString mobileWorkPhoneLabel();
335 static QString mobileHomePhoneLabel(); 335 static QString mobileHomePhoneLabel();
336 336
337 /** 337 /**
338 Return translated label for homeFax field. 338 Return translated label for homeFax field.
339 */ 339 */
340 static QString homeFaxLabel(); 340 static QString homeFaxLabel();
341 341
342 /** 342 /**
343 Return translated label for businessFax field. 343 Return translated label for businessFax field.
344 */ 344 */
345 static QString businessFaxLabel(); 345 static QString businessFaxLabel();
346 346
347 /** 347 /**
348 Return translated label for carPhone field. 348 Return translated label for carPhone field.
349 */ 349 */
350 static QString carPhoneLabel(); 350 static QString carPhoneLabel();
351 351
352 /** 352 /**
353 Return translated label for isdn field. 353 Return translated label for isdn field.
354 */ 354 */
355 static QString isdnLabel(); 355 static QString isdnLabel();
356 356
357 /** 357 /**
358 Return translated label for pager field. 358 Return translated label for pager field.
359 */ 359 */
360 static QString pagerLabel(); 360 static QString pagerLabel();
361 361 static QString otherPhoneLabel();
362 /** 362 /**
363 Return translated label for sip field. 363 Return translated label for sip field.
364 */ 364 */
365 static QString sipLabel(); 365 static QString sipLabel();
366 366
367 /** 367 /**
368 Return translated label for email field. 368 Return translated label for email field.
369 */ 369 */
370 static QString emailLabel(); 370 static QString emailLabel();
371 371
372 /** 372 /**
373 Set mail client. 373 Set mail client.
374 */ 374 */
375 void setMailer( const QString &mailer ); 375 void setMailer( const QString &mailer );
376 /** 376 /**
377 Return mail client. 377 Return mail client.
378 */ 378 */
379 QString mailer() const; 379 QString mailer() const;
380 /** 380 /**
381 Return translated label for mailer field. 381 Return translated label for mailer field.
382 */ 382 */
383 static QString mailerLabel(); 383 static QString mailerLabel();
384 384
385 /** 385 /**
386 Set time zone. 386 Set time zone.
387 */ 387 */
388 void setTimeZone( const TimeZone &timeZone ); 388 void setTimeZone( const TimeZone &timeZone );
389 /** 389 /**
390 Return time zone. 390 Return time zone.
391 */ 391 */
392 TimeZone timeZone() const; 392 TimeZone timeZone() const;
393 /** 393 /**
394 Return translated label for timeZone field. 394 Return translated label for timeZone field.
395 */ 395 */
396 static QString timeZoneLabel(); 396 static QString timeZoneLabel();
397 397
398 /** 398 /**
399 Set geographic position. 399 Set geographic position.
400 */ 400 */
401 void setGeo( const Geo &geo ); 401 void setGeo( const Geo &geo );
402 /** 402 /**
403 Return geographic position. 403 Return geographic position.
404 */ 404 */
405 Geo geo() const; 405 Geo geo() const;
406 /** 406 /**
407 Return translated label for geo field. 407 Return translated label for geo field.
408 */ 408 */
409 static QString geoLabel(); 409 static QString geoLabel();
410 410
411 /** 411 /**
412 Set title. 412 Set title.
413 */ 413 */
414 void setTitle( const QString &title ); 414 void setTitle( const QString &title );
415 /** 415 /**
416 Return title. 416 Return title.
417 */ 417 */
418 QString title() const; 418 QString title() const;
419 /** 419 /**
420 Return translated label for title field. 420 Return translated label for title field.
421 */ 421 */
422 static QString titleLabel(); 422 static QString titleLabel();
423 423
424 /** 424 /**
425 Set role. 425 Set role.
426 */ 426 */
427 void setRole( const QString &role ); 427 void setRole( const QString &role );
428 /** 428 /**
429 Return role. 429 Return role.
430 */ 430 */
431 QString role() const; 431 QString role() const;
432 /** 432 /**
433 Return translated label for role field. 433 Return translated label for role field.
434 */ 434 */
435 static QString roleLabel(); 435 static QString roleLabel();
436 436
437 /** 437 /**
438 Set organization. 438 Set organization.
439 */ 439 */
440 void setOrganization( const QString &organization ); 440 void setOrganization( const QString &organization );
441 /** 441 /**
442 Return organization. 442 Return organization.
443 */ 443 */
444 QString organization() const; 444 QString organization() const;
445 /** 445 /**
446 Return translated label for organization field. 446 Return translated label for organization field.
447 */ 447 */
448 static QString organizationLabel(); 448 static QString organizationLabel();
449 449
450 /** 450 /**
451 Set note. 451 Set note.
452 */ 452 */
453 void setNote( const QString &note ); 453 void setNote( const QString &note );
454 /** 454 /**
455 Return note. 455 Return note.
456 */ 456 */
457 QString note() const; 457 QString note() const;
458 /** 458 /**
459 Return translated label for note field. 459 Return translated label for note field.
460 */ 460 */
461 static QString noteLabel(); 461 static QString noteLabel();
462 462
463 /** 463 /**
464 Set product identifier. 464 Set product identifier.
465 */ 465 */
466 void setProductId( const QString &productId ); 466 void setProductId( const QString &productId );
467 /** 467 /**
468 Return product identifier. 468 Return product identifier.
469 */ 469 */
470 QString productId() const; 470 QString productId() const;
471 /** 471 /**
472 Return translated label for productId field. 472 Return translated label for productId field.
473 */ 473 */
474 static QString productIdLabel(); 474 static QString productIdLabel();
475 475
476 /** 476 /**
477 Set revision date. 477 Set revision date.
478 */ 478 */
479 void setRevision( const QDateTime &revision ); 479 void setRevision( const QDateTime &revision );
480 /** 480 /**
481 Return revision date. 481 Return revision date.
482 */ 482 */
483 QDateTime revision() const; 483 QDateTime revision() const;
484 /** 484 /**
485 Return translated label for revision field. 485 Return translated label for revision field.
486 */ 486 */
487 static QString revisionLabel(); 487 static QString revisionLabel();
488 488
489 /** 489 /**
490 Set sort string. 490 Set sort string.
491 */ 491 */
492 void setSortString( const QString &sortString ); 492 void setSortString( const QString &sortString );
493 /** 493 /**
494 Return sort string. 494 Return sort string.
495 */ 495 */
496 QString sortString() const; 496 QString sortString() const;
497 /** 497 /**
498 Return translated label for sortString field. 498 Return translated label for sortString field.
499 */ 499 */
500 static QString sortStringLabel(); 500 static QString sortStringLabel();
501 501
502 /** 502 /**
503 Set URL. 503 Set URL.
504 */ 504 */
505 void setUrl( const KURL &url ); 505 void setUrl( const KURL &url );
506 /** 506 /**
507 Return URL. 507 Return URL.
508 */ 508 */
509 KURL url() const; 509 KURL url() const;
510 /** 510 /**
511 Return translated label for url field. 511 Return translated label for url field.
512 */ 512 */
513 static QString urlLabel(); 513 static QString urlLabel();
514 514
515 /** 515 /**
516 Set security class. 516 Set security class.
517 */ 517 */
518 void setSecrecy( const Secrecy &secrecy ); 518 void setSecrecy( const Secrecy &secrecy );
519 /** 519 /**
520 Return security class. 520 Return security class.
521 */ 521 */
522 Secrecy secrecy() const; 522 Secrecy secrecy() const;
523 /** 523 /**
524 Return translated label for secrecy field. 524 Return translated label for secrecy field.
525 */ 525 */
526 static QString secrecyLabel(); 526 static QString secrecyLabel();
527 527
528 /** 528 /**
529 Set logo. 529 Set logo.
530 */ 530 */
531 void setLogo( const Picture &logo ); 531 void setLogo( const Picture &logo );
532 /** 532 /**
533 Return logo. 533 Return logo.
534 */ 534 */
535 Picture logo() const; 535 Picture logo() const;
536 /** 536 /**
537 Return translated label for logo field. 537 Return translated label for logo field.
538 */ 538 */
539 static QString logoLabel(); 539 static QString logoLabel();
540 540
541 /** 541 /**
542 Set photo. 542 Set photo.
543 */ 543 */
544 void setPhoto( const Picture &photo ); 544 void setPhoto( const Picture &photo );
545 /** 545 /**
546 Return photo. 546 Return photo.
547 */ 547 */
548 Picture photo() const; 548 Picture photo() const;
549 /** 549 /**
550 Return translated label for photo field. 550 Return translated label for photo field.
551 */ 551 */
552 static QString photoLabel(); 552 static QString photoLabel();
553 553
554 /** 554 /**
555 Set sound. 555 Set sound.
556 */ 556 */
557 void setSound( const Sound &sound ); 557 void setSound( const Sound &sound );
558 /** 558 /**
559 Return sound. 559 Return sound.
560 */ 560 */
561 Sound sound() const; 561 Sound sound() const;
562 /** 562 /**
563 Return translated label for sound field. 563 Return translated label for sound field.
564 */ 564 */
565 static QString soundLabel(); 565 static QString soundLabel();
566 566
567 /** 567 /**
568 Set agent. 568 Set agent.
569 */ 569 */
570 void setAgent( const Agent &agent ); 570 void setAgent( const Agent &agent );
571 /** 571 /**
572 Return agent. 572 Return agent.
573 */ 573 */
574 Agent agent() const; 574 Agent agent() const;
575 /** 575 /**
576 Return translated label for agent field. 576 Return translated label for agent field.
577 */ 577 */
578 static QString agentLabel(); 578 static QString agentLabel();
579 579
580 /** 580 /**
581 Set name fields by parsing the given string and trying to associate the 581 Set name fields by parsing the given string and trying to associate the
582 parts of the string with according fields. This function should probably 582 parts of the string with according fields. This function should probably
583 be a bit more clever. 583 be a bit more clever.
584 */ 584 */
585 void setNameFromString( const QString & ); 585 void setNameFromString( const QString & );
586 586
587 /** 587 /**
588 Return the name of the addressee. This is calculated from all the name 588 Return the name of the addressee. This is calculated from all the name
589 fields. 589 fields.
590 */ 590 */
591 QString realName() const; 591 QString realName() const;
592 592
593 /** 593 /**
594 Return the name that consists of all name parts. 594 Return the name that consists of all name parts.
595 */ 595 */
596 QString assembledName() const; 596 QString assembledName() const;
597 597
598 /** 598 /**
599 Return email address including real name. 599 Return email address including real name.
600 600
601 @param email Email address to be used to construct the full email string. 601 @param email Email address to be used to construct the full email string.
602 If this is QString::null the preferred email address is used. 602 If this is QString::null the preferred email address is used.
603 */ 603 */
604 QString fullEmail( const QString &email=QString::null ) const; 604 QString fullEmail( const QString &email=QString::null ) const;
605 605
606 /** 606 /**
607 Insert an email address. If the email address already exists in this 607 Insert an email address. If the email address already exists in this
608 addressee it is not duplicated. 608 addressee it is not duplicated.
609 609
610 @param email Email address 610 @param email Email address
611 @param preferred Set to true, if this is the preferred email address of 611 @param preferred Set to true, if this is the preferred email address of
612 the addressee. 612 the addressee.
613 */ 613 */
614 void insertEmail( const QString &email, bool preferred=false ); 614 void insertEmail( const QString &email, bool preferred=false );
615 615
616 /** 616 /**
617 Remove email address. If the email address doesn't exist, nothing happens. 617 Remove email address. If the email address doesn't exist, nothing happens.
618 */ 618 */
619 void removeEmail( const QString &email ); 619 void removeEmail( const QString &email );
620 620
621 /** 621 /**
622 Return preferred email address. This is the first email address or the 622 Return preferred email address. This is the first email address or the
623 last one added with @ref insertEmail() with a set preferred parameter. 623 last one added with @ref insertEmail() with a set preferred parameter.
624 */ 624 */
625 QString preferredEmail() const; 625 QString preferredEmail() const;
626 626
627 /** 627 /**
628 Return list of all email addresses. 628 Return list of all email addresses.
629 */ 629 */
630 QStringList emails() const; 630 QStringList emails() const;
631 631
632 /** 632 /**
633 Set the emails to @param. 633 Set the emails to @param.
634 The first email address gets the preferred one! 634 The first email address gets the preferred one!
635 @param list The list of email addresses. 635 @param list The list of email addresses.
636 */ 636 */
637 void setEmails( const QStringList& list); 637 void setEmails( const QStringList& list);
638 638
639 /** 639 /**
640 Insert a phone number. If a phone number with the same id already exists 640 Insert a phone number. If a phone number with the same id already exists
641 in this addressee it is not duplicated. 641 in this addressee it is not duplicated.
642 */ 642 */
643 void insertPhoneNumber( const PhoneNumber &phoneNumber ); 643 void insertPhoneNumber( const PhoneNumber &phoneNumber );
644 644
645 /** 645 /**
646 Remove phone number. If no phone number with the given id exists for this 646 Remove phone number. If no phone number with the given id exists for this
647 addresse nothing happens. 647 addresse nothing happens.
648 */ 648 */
649 void removePhoneNumber( const PhoneNumber &phoneNumber ); 649 void removePhoneNumber( const PhoneNumber &phoneNumber );
650 650
651 /** 651 /**
652 Return phone number, which matches the given type. 652 Return phone number, which matches the given type.
653 */ 653 */
654 PhoneNumber phoneNumber( int type ) const; 654 PhoneNumber phoneNumber( int type ) const;
655 655
656 bool matchPhoneNumber( QRegExp* searchExp ) const; 656 bool matchPhoneNumber( QRegExp* searchExp ) const;
657 bool matchAddress( QRegExp* searchExp ) const; 657 bool matchAddress( QRegExp* searchExp ) const;
658 658
659 /** 659 /**
660 Return list of all phone numbers. 660 Return list of all phone numbers.
661 */ 661 */
662 PhoneNumber::List phoneNumbers() const; 662 PhoneNumber::List phoneNumbers() const;
663 663
664 /** 664 /**
665 Return list of phone numbers with a special type. 665 Return list of phone numbers with a special type.
666 */ 666 */
667 PhoneNumber::List phoneNumbers( int type ) const; 667 PhoneNumber::List phoneNumbers( int type ) const;
668 668
669 /** 669 /**
670 Return phone number with the given id. 670 Return phone number with the given id.
671 */ 671 */
672 PhoneNumber findPhoneNumber( const QString &id ) const; 672 PhoneNumber findPhoneNumber( const QString &id ) const;
673 673
674 /** 674 /**
675 Insert a key. If a key with the same id already exists 675 Insert a key. If a key with the same id already exists
676 in this addressee it is not duplicated. 676 in this addressee it is not duplicated.
677 */ 677 */
678 void insertKey( const Key &key ); 678 void insertKey( const Key &key );
679 679
680 /** 680 /**
681 Remove a key. If no key with the given id exists for this 681 Remove a key. If no key with the given id exists for this
682 addresse nothing happens. 682 addresse nothing happens.
683 */ 683 */
684 void removeKey( const Key &key ); 684 void removeKey( const Key &key );
685 685
686 /** 686 /**
687 Return key, which matches the given type. 687 Return key, which matches the given type.
688 If @p type == Key::Custom you can specify a string 688 If @p type == Key::Custom you can specify a string
689 that should match. If you leave the string empty, the first 689 that should match. If you leave the string empty, the first
690 key with a custom value is returned. 690 key with a custom value is returned.
691 */ 691 */
692 Key key( int type, QString customTypeString = QString::null ) const; 692 Key key( int type, QString customTypeString = QString::null ) const;
693 693
694 /** 694 /**
695 Return list of all keys. 695 Return list of all keys.
696 */ 696 */
697 Key::List keys() const; 697 Key::List keys() const;
698 698
699 /** 699 /**
700 Set the list of keys 700 Set the list of keys
701 @param keys The keys to be set. 701 @param keys The keys to be set.
702 */ 702 */
703 void setKeys( const Key::List& keys); 703 void setKeys( const Key::List& keys);
704 704
705 /** 705 /**
706 Return list of keys with a special type. 706 Return list of keys with a special type.
707 If @p type == Key::Custom you can specify a string 707 If @p type == Key::Custom you can specify a string
708 that should match. If you leave the string empty, all custom 708 that should match. If you leave the string empty, all custom
709 keys will be returned. 709 keys will be returned.
710 */ 710 */
711 Key::List keys( int type, QString customTypeString = QString::null ) const; 711 Key::List keys( int type, QString customTypeString = QString::null ) const;
712 712
713 /** 713 /**
714 Return key with the given id. 714 Return key with the given id.
715 */ 715 */
716 Key findKey( const QString &id ) const; 716 Key findKey( const QString &id ) const;
717 717
718 /** 718 /**
719 Insert an address. If an address with the same id already exists 719 Insert an address. If an address with the same id already exists
720 in this addressee it is not duplicated. 720 in this addressee it is not duplicated.
721 */ 721 */
722 void insertAddress( const Address &address ); 722 void insertAddress( const Address &address );
723 723
724 /** 724 /**
725 Remove address. If no address with the given id exists for this 725 Remove address. If no address with the given id exists for this
726 addresse nothing happens. 726 addresse nothing happens.
727 */ 727 */
728 void removeAddress( const Address &address ); 728 void removeAddress( const Address &address );
729 729
730 /** 730 /**
731 Return address, which matches the given type. 731 Return address, which matches the given type.
732 */ 732 */
733 Address address( int type ) const; 733 Address address( int type ) const;
734 734
735 /** 735 /**
736 Return list of all addresses. 736 Return list of all addresses.
737 */ 737 */
738 Address::List addresses() const; 738 Address::List addresses() const;
739 739
740 /** 740 /**
741 Return list of addresses with a special type. 741 Return list of addresses with a special type.
742 */ 742 */
743 Address::List addresses( int type ) const; 743 Address::List addresses( int type ) const;
744 744
745 /** 745 /**
746 Return address with the given id. 746 Return address with the given id.
747 */ 747 */
748 Address findAddress( const QString &id ) const; 748 Address findAddress( const QString &id ) const;
749 749
750 /** 750 /**
751 Insert category. If the category already exists it is not duplicated. 751 Insert category. If the category already exists it is not duplicated.
752 */ 752 */
753 void insertCategory( const QString & ); 753 void insertCategory( const QString & );
754 754
755 /** 755 /**
756 Remove category. 756 Remove category.
757 */ 757 */
758 void removeCategory( const QString & ); 758 void removeCategory( const QString & );
759 759
760 /** 760 /**
761 Return, if addressee has the given category. 761 Return, if addressee has the given category.
762 */ 762 */
763 bool hasCategory( const QString & ) const; 763 bool hasCategory( const QString & ) const;
764 764
765 /** 765 /**
766 Set categories to given value. 766 Set categories to given value.
767 */ 767 */
768 void setCategories( const QStringList & ); 768 void setCategories( const QStringList & );
769 769
770 /** 770 /**
771 Return list of all set categories. 771 Return list of all set categories.
772 */ 772 */
773 QStringList categories() const; 773 QStringList categories() const;
774 774
775 /** 775 /**
776 Insert custom entry. The entry is identified by the name of the inserting 776 Insert custom entry. The entry is identified by the name of the inserting
777 application and a unique name. If an entry with the given app and name 777 application and a unique name. If an entry with the given app and name
778 already exists its value is replaced with the new given value. 778 already exists its value is replaced with the new given value.
779 */ 779 */
780 void insertCustom( const QString &app, const QString &name, 780 void insertCustom( const QString &app, const QString &name,
781 const QString &value ); 781 const QString &value );
782 782
783 /** 783 /**
784 Remove custom entry. 784 Remove custom entry.
785 */ 785 */
786 void removeCustom( const QString &app, const QString &name ); 786 void removeCustom( const QString &app, const QString &name );
787 787
788 /** 788 /**
789 Return value of custom entry, identified by app and entry name. 789 Return value of custom entry, identified by app and entry name.
790 */ 790 */
791 QString custom( const QString &app, const QString &name ) const; 791 QString custom( const QString &app, const QString &name ) const;
792 792
793 /** 793 /**
794 Set all custom entries. 794 Set all custom entries.
795 */ 795 */
796 void setCustoms( const QStringList & ); 796 void setCustoms( const QStringList & );
797 797
798 /** 798 /**
799 Return list of all custom entries. 799 Return list of all custom entries.
800 */ 800 */
801 QStringList customs() const; 801 QStringList customs() const;
802 802
803 /** 803 /**
804 Parse full email address. The result is given back in fullName and email. 804 Parse full email address. The result is given back in fullName and email.
805 */ 805 */
806 static void parseEmailAddress( const QString &rawEmail, QString &fullName, 806 static void parseEmailAddress( const QString &rawEmail, QString &fullName,
807 QString &email ); 807 QString &email );
808 808
809 /** 809 /**
810 Debug output. 810 Debug output.
811 */ 811 */
812 void dump() const; 812 void dump() const;
813 813
814 /** 814 /**
815 Returns string representation of the addressee. 815 Returns string representation of the addressee.
816 */ 816 */
817 QString asString() const; 817 QString asString() const;
818 818
819 /** 819 /**
820 Set resource where the addressee is from. 820 Set resource where the addressee is from.
821 */ 821 */
822 void setResource( Resource *resource ); 822 void setResource( Resource *resource );
823 823
824 /** 824 /**
825 Return pointer to resource. 825 Return pointer to resource.
826 */ 826 */
827 Resource *resource() const; 827 Resource *resource() const;
828 828
829 /** 829 /**
830 Return resourcelabel. 830 Return resourcelabel.
831 */ 831 */
832 //US 832 //US
833 static QString resourceLabel(); 833 static QString resourceLabel();
834 static QString categoryLabel(); 834 static QString categoryLabel();
835 /** 835 /**
836 Mark addressee as changed. 836 Mark addressee as changed.
837 */ 837 */
838 void setChanged( bool value ); 838 void setChanged( bool value );
839 839
840 /** 840 /**
841 Return whether the addressee is changed. 841 Return whether the addressee is changed.
842 */ 842 */
843 bool changed() const; 843 bool changed() const;
844 844
845 void setTagged( bool value ); 845 void setTagged( bool value );
846 bool tagged() const; 846 bool tagged() const;
847 847
848 private: 848 private:
849 Addressee copy(); 849 Addressee copy();
850 void detach(); 850 void detach();
851 851
852 struct AddresseeData; 852 struct AddresseeData;
853 mutable KSharedPtr<AddresseeData> mData; 853 mutable KSharedPtr<AddresseeData> mData;
854}; 854};
855 855
856QDataStream &operator<<( QDataStream &, const Addressee & ); 856QDataStream &operator<<( QDataStream &, const Addressee & );
857QDataStream &operator>>( QDataStream &, Addressee & ); 857QDataStream &operator>>( QDataStream &, Addressee & );
858 858
859} 859}
860 860
861#endif 861#endif
diff --git a/kabc/field.cpp b/kabc/field.cpp
index 20885de..6f2b307 100644
--- a/kabc/field.cpp
+++ b/kabc/field.cpp
@@ -1,590 +1,596 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#include <klocale.h> 29#include <klocale.h>
30#include <kconfig.h> 30#include <kconfig.h>
31#include <kconfigbase.h> 31#include <kconfigbase.h>
32#include <kglobal.h> 32#include <kglobal.h>
33 33
34#include "field.h" 34#include "field.h"
35#include "resource.h" 35#include "resource.h"
36 36
37using namespace KABC; 37using namespace KABC;
38 38
39class Field::FieldImpl 39class Field::FieldImpl
40{ 40{
41 public: 41 public:
42 FieldImpl( int fieldId, int category = 0, 42 FieldImpl( int fieldId, int category = 0,
43 const QString &label = QString::null, 43 const QString &label = QString::null,
44 const QString &key = QString::null, 44 const QString &key = QString::null,
45 const QString &app = QString::null ) 45 const QString &app = QString::null )
46 : mFieldId( fieldId ), mCategory( category ), mLabel( label ), 46 : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
47 mKey( key ), mApp( app ) {} 47 mKey( key ), mApp( app ) {}
48 48
49 enum FieldId 49 enum FieldId
50 { 50 {
51 CustomField, 51 CustomField,
52 FormattedName, 52 FormattedName,
53 FamilyName, 53 FamilyName,
54 GivenName, 54 GivenName,
55 AdditionalName, 55 AdditionalName,
56 Prefix, 56 Prefix,
57 Suffix, 57 Suffix,
58 NickName, 58 NickName,
59 Birthday, 59 Birthday,
60 Category, 60 Category,
61 HomeAddressStreet, 61 HomeAddressStreet,
62 HomeAddressLocality, 62 HomeAddressLocality,
63 HomeAddressRegion, 63 HomeAddressRegion,
64 HomeAddressPostalCode, 64 HomeAddressPostalCode,
65 HomeAddressCountry, 65 HomeAddressCountry,
66 HomeAddressLabel, 66 HomeAddressLabel,
67 BusinessAddressStreet, 67 BusinessAddressStreet,
68 BusinessAddressLocality, 68 BusinessAddressLocality,
69 BusinessAddressRegion, 69 BusinessAddressRegion,
70 BusinessAddressPostalCode, 70 BusinessAddressPostalCode,
71 BusinessAddressCountry, 71 BusinessAddressCountry,
72 BusinessAddressLabel, 72 BusinessAddressLabel,
73 HomePhone, 73 HomePhone,
74 BusinessPhone, 74 BusinessPhone,
75 MobilePhone, 75 MobilePhone,
76 HomeFax, 76 HomeFax,
77 BusinessFax, 77 BusinessFax,
78 CarPhone, 78 CarPhone,
79 Isdn, 79 Isdn,
80 Pager, 80 Pager,
81 Email, 81 Email,
82 Mailer, 82 Mailer,
83 Title, 83 Title,
84 Role, 84 Role,
85 Organization, 85 Organization,
86 Note, 86 Note,
87 Url, 87 Url,
88 Resource, 88 Resource,
89 Sip, 89 Sip,
90 MobileWorkPhone, 90 MobileWorkPhone,
91 MobileHomePhone 91 MobileHomePhone,
92 OtherPhone
92 }; 93 };
93 94
94 int fieldId() { return mFieldId; } 95 int fieldId() { return mFieldId; }
95 int category() { return mCategory; } 96 int category() { return mCategory; }
96 97
97 QString label() { return mLabel; } 98 QString label() { return mLabel; }
98 QString key() { return mKey; } 99 QString key() { return mKey; }
99 QString app() { return mApp; } 100 QString app() { return mApp; }
100 101
101 private: 102 private:
102 int mFieldId; 103 int mFieldId;
103 int mCategory; 104 int mCategory;
104 105
105 QString mLabel; 106 QString mLabel;
106 QString mKey; 107 QString mKey;
107 QString mApp; 108 QString mApp;
108}; 109};
109 110
110 111
111Field::List Field::mAllFields; 112Field::List Field::mAllFields;
112Field::List Field::mDefaultFields; 113Field::List Field::mDefaultFields;
113Field::List Field::mCustomFields; 114Field::List Field::mCustomFields;
114 115
115 116
116Field::Field( FieldImpl *impl ) 117Field::Field( FieldImpl *impl )
117{ 118{
118 mImpl = impl; 119 mImpl = impl;
119} 120}
120 121
121Field::~Field() 122Field::~Field()
122{ 123{
123 delete mImpl; 124 delete mImpl;
124} 125}
125 126
126QString Field::label() 127QString Field::label()
127{ 128{
128 switch ( mImpl->fieldId() ) { 129 switch ( mImpl->fieldId() ) {
129 case FieldImpl::FormattedName: 130 case FieldImpl::FormattedName:
130 return Addressee::formattedNameLabel(); 131 return Addressee::formattedNameLabel();
131 case FieldImpl::FamilyName: 132 case FieldImpl::FamilyName:
132 return Addressee::familyNameLabel(); 133 return Addressee::familyNameLabel();
133 case FieldImpl::GivenName: 134 case FieldImpl::GivenName:
134 return Addressee::givenNameLabel(); 135 return Addressee::givenNameLabel();
135 case FieldImpl::AdditionalName: 136 case FieldImpl::AdditionalName:
136 return Addressee::additionalNameLabel(); 137 return Addressee::additionalNameLabel();
137 case FieldImpl::Prefix: 138 case FieldImpl::Prefix:
138 return Addressee::prefixLabel(); 139 return Addressee::prefixLabel();
139 case FieldImpl::Suffix: 140 case FieldImpl::Suffix:
140 return Addressee::suffixLabel(); 141 return Addressee::suffixLabel();
141 case FieldImpl::NickName: 142 case FieldImpl::NickName:
142 return Addressee::nickNameLabel(); 143 return Addressee::nickNameLabel();
143 case FieldImpl::Birthday: 144 case FieldImpl::Birthday:
144 return Addressee::birthdayLabel(); 145 return Addressee::birthdayLabel();
145 case FieldImpl::HomeAddressStreet: 146 case FieldImpl::HomeAddressStreet:
146 return Addressee::homeAddressStreetLabel(); 147 return Addressee::homeAddressStreetLabel();
147 case FieldImpl::HomeAddressLocality: 148 case FieldImpl::HomeAddressLocality:
148 return Addressee::homeAddressLocalityLabel(); 149 return Addressee::homeAddressLocalityLabel();
149 case FieldImpl::HomeAddressRegion: 150 case FieldImpl::HomeAddressRegion:
150 return Addressee::homeAddressRegionLabel(); 151 return Addressee::homeAddressRegionLabel();
151 case FieldImpl::HomeAddressPostalCode: 152 case FieldImpl::HomeAddressPostalCode:
152 return Addressee::homeAddressPostalCodeLabel(); 153 return Addressee::homeAddressPostalCodeLabel();
153 case FieldImpl::HomeAddressCountry: 154 case FieldImpl::HomeAddressCountry:
154 return Addressee::homeAddressCountryLabel(); 155 return Addressee::homeAddressCountryLabel();
155 case FieldImpl::HomeAddressLabel: 156 case FieldImpl::HomeAddressLabel:
156 return Addressee::homeAddressLabelLabel(); 157 return Addressee::homeAddressLabelLabel();
157 case FieldImpl::BusinessAddressStreet: 158 case FieldImpl::BusinessAddressStreet:
158 return Addressee::businessAddressStreetLabel(); 159 return Addressee::businessAddressStreetLabel();
159 case FieldImpl::BusinessAddressLocality: 160 case FieldImpl::BusinessAddressLocality:
160 return Addressee::businessAddressLocalityLabel(); 161 return Addressee::businessAddressLocalityLabel();
161 case FieldImpl::BusinessAddressRegion: 162 case FieldImpl::BusinessAddressRegion:
162 return Addressee::businessAddressRegionLabel(); 163 return Addressee::businessAddressRegionLabel();
163 case FieldImpl::BusinessAddressPostalCode: 164 case FieldImpl::BusinessAddressPostalCode:
164 return Addressee::businessAddressPostalCodeLabel(); 165 return Addressee::businessAddressPostalCodeLabel();
165 case FieldImpl::BusinessAddressCountry: 166 case FieldImpl::BusinessAddressCountry:
166 return Addressee::businessAddressCountryLabel(); 167 return Addressee::businessAddressCountryLabel();
167 case FieldImpl::BusinessAddressLabel: 168 case FieldImpl::BusinessAddressLabel:
168 return Addressee::businessAddressLabelLabel(); 169 return Addressee::businessAddressLabelLabel();
169 case FieldImpl::HomePhone: 170 case FieldImpl::HomePhone:
170 return Addressee::homePhoneLabel(); 171 return Addressee::homePhoneLabel();
171 case FieldImpl::BusinessPhone: 172 case FieldImpl::BusinessPhone:
172 return Addressee::businessPhoneLabel(); 173 return Addressee::businessPhoneLabel();
173 case FieldImpl::MobilePhone: 174 case FieldImpl::MobilePhone:
174 return Addressee::mobilePhoneLabel(); 175 return Addressee::mobilePhoneLabel();
175 case FieldImpl::MobileHomePhone: 176 case FieldImpl::MobileHomePhone:
176 return Addressee::mobileHomePhoneLabel(); 177 return Addressee::mobileHomePhoneLabel();
177 case FieldImpl::MobileWorkPhone: 178 case FieldImpl::MobileWorkPhone:
178 return Addressee::mobileWorkPhoneLabel(); 179 return Addressee::mobileWorkPhoneLabel();
179 case FieldImpl::HomeFax: 180 case FieldImpl::HomeFax:
180 return Addressee::homeFaxLabel(); 181 return Addressee::homeFaxLabel();
181 case FieldImpl::BusinessFax: 182 case FieldImpl::BusinessFax:
182 return Addressee::businessFaxLabel(); 183 return Addressee::businessFaxLabel();
183 case FieldImpl::CarPhone: 184 case FieldImpl::CarPhone:
184 return Addressee::carPhoneLabel(); 185 return Addressee::carPhoneLabel();
185 case FieldImpl::Isdn: 186 case FieldImpl::Isdn:
186 return Addressee::isdnLabel(); 187 return Addressee::isdnLabel();
187 case FieldImpl::Pager: 188 case FieldImpl::Pager:
188 return Addressee::pagerLabel(); 189 return Addressee::pagerLabel();
189 case FieldImpl::Email: 190 case FieldImpl::Email:
190 return Addressee::emailLabel(); 191 return Addressee::emailLabel();
191 case FieldImpl::Mailer: 192 case FieldImpl::Mailer:
192 return Addressee::mailerLabel(); 193 return Addressee::mailerLabel();
193 case FieldImpl::Title: 194 case FieldImpl::Title:
194 return Addressee::titleLabel(); 195 return Addressee::titleLabel();
195 case FieldImpl::Role: 196 case FieldImpl::Role:
196 return Addressee::roleLabel(); 197 return Addressee::roleLabel();
197 case FieldImpl::Organization: 198 case FieldImpl::Organization:
198 return Addressee::organizationLabel(); 199 return Addressee::organizationLabel();
199 case FieldImpl::Note: 200 case FieldImpl::Note:
200 return Addressee::noteLabel(); 201 return Addressee::noteLabel();
201 case FieldImpl::Url: 202 case FieldImpl::Url:
202 return Addressee::urlLabel(); 203 return Addressee::urlLabel();
203 case FieldImpl::Resource: 204 case FieldImpl::Resource:
204 return Addressee::resourceLabel(); 205 return Addressee::resourceLabel();
205 case FieldImpl::Category: 206 case FieldImpl::Category:
206 return Addressee::categoryLabel(); 207 return Addressee::categoryLabel();
207 case FieldImpl::Sip: 208 case FieldImpl::Sip:
208 return Addressee::sipLabel(); 209 return Addressee::sipLabel();
210 case FieldImpl::OtherPhone:
211 return Addressee::otherPhoneLabel();
209 case FieldImpl::CustomField: 212 case FieldImpl::CustomField:
210 return mImpl->label(); 213 return mImpl->label();
211 default: 214 default:
212 return i18n("Unknown Field"); 215 return i18n("Unknown Field");
213 } 216 }
214} 217}
215 218
216int Field::category() 219int Field::category()
217{ 220{
218 return mImpl->category(); 221 return mImpl->category();
219} 222}
220 223
221QString Field::categoryLabel( int category ) 224QString Field::categoryLabel( int category )
222{ 225{
223 switch ( category ) { 226 switch ( category ) {
224 case All: 227 case All:
225 return i18n("All"); 228 return i18n("All");
226 case Frequent: 229 case Frequent:
227 return i18n("Frequent"); 230 return i18n("Frequent");
228 case Address: 231 case Address:
229 return i18n("Address"); 232 return i18n("Address");
230 case Email: 233 case Email:
231 return i18n("Email"); 234 return i18n("Email");
232 case Personal: 235 case Personal:
233 return i18n("Personal"); 236 return i18n("Personal");
234 case Organization: 237 case Organization:
235 return i18n("Organization"); 238 return i18n("Organization");
236 case CustomCategory: 239 case CustomCategory:
237 return i18n("Custom"); 240 return i18n("Custom");
238 default: 241 default:
239 return i18n("Undefined"); 242 return i18n("Undefined");
240 } 243 }
241} 244}
242 245
243QString Field::value( const KABC::Addressee &a ) 246QString Field::value( const KABC::Addressee &a )
244{ 247{
245 switch ( mImpl->fieldId() ) { 248 switch ( mImpl->fieldId() ) {
246 case FieldImpl::FormattedName: 249 case FieldImpl::FormattedName:
247 return a.formattedName(); 250 return a.formattedName();
248 case FieldImpl::FamilyName: 251 case FieldImpl::FamilyName:
249 return a.familyName(); 252 return a.familyName();
250 case FieldImpl::GivenName: 253 case FieldImpl::GivenName:
251 return a.givenName(); 254 return a.givenName();
252 case FieldImpl::AdditionalName: 255 case FieldImpl::AdditionalName:
253 return a.additionalName(); 256 return a.additionalName();
254 case FieldImpl::Prefix: 257 case FieldImpl::Prefix:
255 return a.prefix(); 258 return a.prefix();
256 case FieldImpl::Suffix: 259 case FieldImpl::Suffix:
257 return a.suffix(); 260 return a.suffix();
258 case FieldImpl::NickName: 261 case FieldImpl::NickName:
259 return a.nickName(); 262 return a.nickName();
260 case FieldImpl::Mailer: 263 case FieldImpl::Mailer:
261 return a.mailer(); 264 return a.mailer();
262 case FieldImpl::Title: 265 case FieldImpl::Title:
263 return a.title(); 266 return a.title();
264 case FieldImpl::Role: 267 case FieldImpl::Role:
265 return a.role(); 268 return a.role();
266 case FieldImpl::Organization: 269 case FieldImpl::Organization:
267 return a.organization(); 270 return a.organization();
268 case FieldImpl::Note: 271 case FieldImpl::Note:
269 return a.note(); 272 return a.note();
270 case FieldImpl::Email: 273 case FieldImpl::Email:
271 return a.preferredEmail(); 274 return a.preferredEmail();
272 case FieldImpl::Birthday: 275 case FieldImpl::Birthday:
273 if ( a.birthday().isValid() ) { 276 if ( a.birthday().isValid() ) {
274//the generated code had the following format: return a.birthday().date().toString( Qt::ISODate ); 277//the generated code had the following format: return a.birthday().date().toString( Qt::ISODate );
275// But Qt::IsoDate was not specified. 278// But Qt::IsoDate was not specified.
276// QString _oldFormat = KGlobal::locale()->dateFormat(); 279// QString _oldFormat = KGlobal::locale()->dateFormat();
277// KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate 280// KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate
278 QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false, KLocale::ISODate); 281 QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false, KLocale::ISODate);
279// KGlobal::locale()->setDateFormat(_oldFormat); 282// KGlobal::locale()->setDateFormat(_oldFormat);
280 return dt; 283 return dt;
281 } 284 }
282 else 285 else
283 return QString::null; 286 return QString::null;
284 case FieldImpl::Url: 287 case FieldImpl::Url:
285 return a.url().prettyURL(); 288 return a.url().prettyURL();
286//US 289//US
287 case FieldImpl::Resource: 290 case FieldImpl::Resource:
288 return a.resource()->resourceName(); 291 return a.resource()->resourceName();
289 case FieldImpl::Category: 292 case FieldImpl::Category:
290 return a.categories().join(","); 293 return a.categories().join(",");
291 case FieldImpl::HomePhone: 294 case FieldImpl::HomePhone:
292 return a.phoneNumber( PhoneNumber::Home| PhoneNumber::Pref ).number(); 295 return a.phoneNumber( PhoneNumber::Home| PhoneNumber::Pref ).number();
293 case FieldImpl::BusinessPhone: 296 case FieldImpl::BusinessPhone:
294 return a.phoneNumber( PhoneNumber::Work| PhoneNumber::Pref ).number(); 297 return a.phoneNumber( PhoneNumber::Work| PhoneNumber::Pref ).number();
295 case FieldImpl::MobilePhone: 298 case FieldImpl::MobilePhone:
296 return a.phoneNumber( PhoneNumber::Cell ).number(); 299 return a.phoneNumber( PhoneNumber::Cell ).number();
297 case FieldImpl::MobileWorkPhone: 300 case FieldImpl::MobileWorkPhone:
298 return a.phoneNumber( PhoneNumber::Car ).number(); 301 return a.phoneNumber( PhoneNumber::Car ).number();
299 case FieldImpl::MobileHomePhone: 302 case FieldImpl::MobileHomePhone:
300 return a.phoneNumber( PhoneNumber::Cell ).number(); 303 return a.phoneNumber( PhoneNumber::Cell ).number();
301 case FieldImpl::HomeFax: 304 case FieldImpl::HomeFax:
302 return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(); 305 return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
303 case FieldImpl::BusinessFax: 306 case FieldImpl::BusinessFax:
304 return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number(); 307 return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
305 case FieldImpl::CarPhone: 308 case FieldImpl::CarPhone:
306 return a.phoneNumber( PhoneNumber::Car ).number(); 309 return a.phoneNumber( PhoneNumber::Car ).number();
307 case FieldImpl::Isdn: 310 case FieldImpl::Isdn:
308 return a.phoneNumber( PhoneNumber::Isdn ).number(); 311 return a.phoneNumber( PhoneNumber::Isdn ).number();
309 case FieldImpl::Pager: 312 case FieldImpl::Pager:
310 return a.phoneNumber( PhoneNumber::Pager ).number(); 313 return a.phoneNumber( PhoneNumber::Pager ).number();
311 case FieldImpl::Sip: 314 case FieldImpl::Sip:
312 return a.phoneNumber( PhoneNumber::Pcs | PhoneNumber::Pref ).number(); 315 return a.phoneNumber( PhoneNumber::Pcs | PhoneNumber::Pref ).number();
316 case FieldImpl::OtherPhone:
317 return a.phoneNumber( PhoneNumber::Voice ).number();
313 case FieldImpl::HomeAddressStreet: 318 case FieldImpl::HomeAddressStreet:
314 return a.address( Address::Home ).street(); 319 return a.address( Address::Home ).street();
315 case FieldImpl::HomeAddressLocality: 320 case FieldImpl::HomeAddressLocality:
316 return a.address( Address::Home ).locality(); 321 return a.address( Address::Home ).locality();
317 case FieldImpl::HomeAddressRegion: 322 case FieldImpl::HomeAddressRegion:
318 return a.address( Address::Home ).region(); 323 return a.address( Address::Home ).region();
319 case FieldImpl::HomeAddressPostalCode: 324 case FieldImpl::HomeAddressPostalCode:
320 return a.address( Address::Home ).postalCode(); 325 return a.address( Address::Home ).postalCode();
321 case FieldImpl::HomeAddressCountry: 326 case FieldImpl::HomeAddressCountry:
322 return a.address( Address::Home ).country(); 327 return a.address( Address::Home ).country();
323 case FieldImpl::BusinessAddressStreet: 328 case FieldImpl::BusinessAddressStreet:
324 return a.address( Address::Work ).street(); 329 return a.address( Address::Work ).street();
325 case FieldImpl::BusinessAddressLocality: 330 case FieldImpl::BusinessAddressLocality:
326 return a.address( Address::Work ).locality(); 331 return a.address( Address::Work ).locality();
327 case FieldImpl::BusinessAddressRegion: 332 case FieldImpl::BusinessAddressRegion:
328 return a.address( Address::Work ).region(); 333 return a.address( Address::Work ).region();
329 case FieldImpl::BusinessAddressPostalCode: 334 case FieldImpl::BusinessAddressPostalCode:
330 return a.address( Address::Work ).postalCode(); 335 return a.address( Address::Work ).postalCode();
331 case FieldImpl::BusinessAddressCountry: 336 case FieldImpl::BusinessAddressCountry:
332 return a.address( Address::Work ).country(); 337 return a.address( Address::Work ).country();
333 case FieldImpl::CustomField: 338 case FieldImpl::CustomField:
334 return a.custom( mImpl->app(), mImpl->key() ); 339 return a.custom( mImpl->app(), mImpl->key() );
335 default: 340 default:
336 return QString::null; 341 return QString::null;
337 } 342 }
338} 343}
339 344
340bool Field::setValue( KABC::Addressee &a, const QString &value ) 345bool Field::setValue( KABC::Addressee &a, const QString &value )
341{ 346{
342 switch ( mImpl->fieldId() ) { 347 switch ( mImpl->fieldId() ) {
343 case FieldImpl::FormattedName: 348 case FieldImpl::FormattedName:
344 a.setFormattedName( value ); 349 a.setFormattedName( value );
345 return true; 350 return true;
346 case FieldImpl::FamilyName: 351 case FieldImpl::FamilyName:
347 a.setFamilyName( value ); 352 a.setFamilyName( value );
348 return true; 353 return true;
349 case FieldImpl::GivenName: 354 case FieldImpl::GivenName:
350 a.setGivenName( value ); 355 a.setGivenName( value );
351 return true; 356 return true;
352 case FieldImpl::AdditionalName: 357 case FieldImpl::AdditionalName:
353 a.setAdditionalName( value ); 358 a.setAdditionalName( value );
354 return true; 359 return true;
355 case FieldImpl::Prefix: 360 case FieldImpl::Prefix:
356 a.setPrefix( value ); 361 a.setPrefix( value );
357 return true; 362 return true;
358 case FieldImpl::Suffix: 363 case FieldImpl::Suffix:
359 a.setSuffix( value ); 364 a.setSuffix( value );
360 return true; 365 return true;
361 case FieldImpl::NickName: 366 case FieldImpl::NickName:
362 a.setNickName( value ); 367 a.setNickName( value );
363 return true; 368 return true;
364 case FieldImpl::Mailer: 369 case FieldImpl::Mailer:
365 a.setMailer( value ); 370 a.setMailer( value );
366 return true; 371 return true;
367 case FieldImpl::Title: 372 case FieldImpl::Title:
368 a.setTitle( value ); 373 a.setTitle( value );
369 return true; 374 return true;
370 case FieldImpl::Role: 375 case FieldImpl::Role:
371 a.setRole( value ); 376 a.setRole( value );
372 return true; 377 return true;
373 case FieldImpl::Organization: 378 case FieldImpl::Organization:
374 a.setOrganization( value ); 379 a.setOrganization( value );
375 return true; 380 return true;
376 case FieldImpl::Note: 381 case FieldImpl::Note:
377 a.setNote( value ); 382 a.setNote( value );
378 return true; 383 return true;
379 case FieldImpl::Birthday: 384 case FieldImpl::Birthday:
380//US 385//US
381//the generated code had the following format: return a.setBirthday( QDate::fromString( value, Qt::ISODate ) ); 386//the generated code had the following format: return a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
382// But Qt::IsoDate and QDate::fromString was not specified. Do I have the wrong QT version ? 387// But Qt::IsoDate and QDate::fromString was not specified. Do I have the wrong QT version ?
383 { 388 {
384 QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate 389 QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate
385 a.setBirthday(dt); 390 a.setBirthday(dt);
386 } 391 }
387 return true; 392 return true;
388 case FieldImpl::CustomField: 393 case FieldImpl::CustomField:
389 a.insertCustom( mImpl->app(), mImpl->key(), value ); 394 a.insertCustom( mImpl->app(), mImpl->key(), value );
390//US never copy the resourcename back to the adressee. 395//US never copy the resourcename back to the adressee.
391 case FieldImpl::Resource: 396 case FieldImpl::Resource:
392 default: 397 default:
393 return false; 398 return false;
394 } 399 }
395} 400}
396 401
397bool Field::isCustom() 402bool Field::isCustom()
398{ 403{
399 return mImpl->fieldId() == FieldImpl::CustomField; 404 return mImpl->fieldId() == FieldImpl::CustomField;
400} 405}
401 406
402Field::List Field::allFields() 407Field::List Field::allFields()
403{ 408{
404 if ( mAllFields.isEmpty() ) { 409 if ( mAllFields.isEmpty() ) {
405 createField( FieldImpl::FormattedName, Frequent ); 410 createField( FieldImpl::FormattedName, Frequent );
406 createField( FieldImpl::FamilyName, Frequent ); 411 createField( FieldImpl::FamilyName, Frequent );
407 createField( FieldImpl::GivenName, Frequent ); 412 createField( FieldImpl::GivenName, Frequent );
408 createField( FieldImpl::AdditionalName ); 413 createField( FieldImpl::AdditionalName );
409 createField( FieldImpl::Prefix ); 414 createField( FieldImpl::Prefix );
410 createField( FieldImpl::Suffix ); 415 createField( FieldImpl::Suffix );
411 createField( FieldImpl::NickName, Personal ); 416 createField( FieldImpl::NickName, Personal );
412 createField( FieldImpl::Birthday, Personal ); 417 createField( FieldImpl::Birthday, Personal );
413 createField( FieldImpl::Category ); 418 createField( FieldImpl::Category );
414 createField( FieldImpl::HomeAddressStreet, Address|Personal ); 419 createField( FieldImpl::HomeAddressStreet, Address|Personal );
415 createField( FieldImpl::HomeAddressLocality, Address|Personal ); 420 createField( FieldImpl::HomeAddressLocality, Address|Personal );
416 createField( FieldImpl::HomeAddressRegion, Address|Personal ); 421 createField( FieldImpl::HomeAddressRegion, Address|Personal );
417 createField( FieldImpl::HomeAddressPostalCode, Address|Personal ); 422 createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
418 createField( FieldImpl::HomeAddressCountry, Address|Personal ); 423 createField( FieldImpl::HomeAddressCountry, Address|Personal );
419 createField( FieldImpl::HomeAddressLabel, Address|Personal ); 424 createField( FieldImpl::HomeAddressLabel, Address|Personal );
420 createField( FieldImpl::BusinessAddressStreet, Address|Organization ); 425 createField( FieldImpl::BusinessAddressStreet, Address|Organization );
421 createField( FieldImpl::BusinessAddressLocality, Address|Organization ); 426 createField( FieldImpl::BusinessAddressLocality, Address|Organization );
422 createField( FieldImpl::BusinessAddressRegion, Address|Organization ); 427 createField( FieldImpl::BusinessAddressRegion, Address|Organization );
423 createField( FieldImpl::BusinessAddressPostalCode, Address|Organization ); 428 createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
424 createField( FieldImpl::BusinessAddressCountry, Address|Organization ); 429 createField( FieldImpl::BusinessAddressCountry, Address|Organization );
425 createField( FieldImpl::BusinessAddressLabel, Address|Organization ); 430 createField( FieldImpl::BusinessAddressLabel, Address|Organization );
426 createField( FieldImpl::HomePhone, Personal|Frequent ); 431 createField( FieldImpl::HomePhone, Personal|Frequent );
427 createField( FieldImpl::BusinessPhone, Organization|Frequent ); 432 createField( FieldImpl::BusinessPhone, Organization|Frequent );
428 createField( FieldImpl::MobilePhone, Frequent ); 433 createField( FieldImpl::MobilePhone, Frequent );
429 createField( FieldImpl::MobileHomePhone, Frequent ); 434 createField( FieldImpl::MobileHomePhone, Frequent );
430 createField( FieldImpl::MobileWorkPhone, Frequent ); 435 createField( FieldImpl::MobileWorkPhone, Frequent );
431 createField( FieldImpl::HomeFax ); 436 createField( FieldImpl::HomeFax );
432 createField( FieldImpl::BusinessFax ); 437 createField( FieldImpl::BusinessFax );
433 createField( FieldImpl::CarPhone ); 438 createField( FieldImpl::CarPhone );
434 createField( FieldImpl::Isdn ); 439 createField( FieldImpl::Isdn );
435 createField( FieldImpl::Pager ); 440 createField( FieldImpl::Pager );
436 createField( FieldImpl::Email, Email|Frequent ); 441 createField( FieldImpl::Email, Email|Frequent );
437 createField( FieldImpl::Mailer, Email ); 442 createField( FieldImpl::Mailer, Email );
438 createField( FieldImpl::Title, Organization ); 443 createField( FieldImpl::Title, Organization );
439 createField( FieldImpl::Role, Organization ); 444 createField( FieldImpl::Role, Organization );
440 createField( FieldImpl::Organization, Organization ); 445 createField( FieldImpl::Organization, Organization );
441 createField( FieldImpl::Note ); 446 createField( FieldImpl::Note );
442 createField( FieldImpl::Url ); 447 createField( FieldImpl::Url );
443 createField( FieldImpl::Resource ); 448 createField( FieldImpl::Resource );
444 createField( FieldImpl::Sip ); 449 createField( FieldImpl::Sip );
450 createField( FieldImpl::OtherPhone );
445 } 451 }
446 452
447 return mAllFields; 453 return mAllFields;
448} 454}
449 455
450Field::List Field::defaultFields() 456Field::List Field::defaultFields()
451{ 457{
452 if ( mDefaultFields.isEmpty() ) { 458 if ( mDefaultFields.isEmpty() ) {
453 createDefaultField( FieldImpl::GivenName ); 459 createDefaultField( FieldImpl::GivenName );
454 createDefaultField( FieldImpl::FamilyName ); 460 createDefaultField( FieldImpl::FamilyName );
455 createDefaultField( FieldImpl::Email ); 461 createDefaultField( FieldImpl::Email );
456 } 462 }
457 463
458 return mDefaultFields; 464 return mDefaultFields;
459} 465}
460 466
461void Field::createField( int id, int category ) 467void Field::createField( int id, int category )
462{ 468{
463 mAllFields.append( new Field( new FieldImpl( id, category ) ) ); 469 mAllFields.append( new Field( new FieldImpl( id, category ) ) );
464} 470}
465 471
466void Field::createDefaultField( int id, int category ) 472void Field::createDefaultField( int id, int category )
467{ 473{
468 mDefaultFields.append( new Field( new FieldImpl( id, category ) ) ); 474 mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
469} 475}
470 476
471void Field::deleteFields() 477void Field::deleteFields()
472{ 478{
473 Field::List::ConstIterator it; 479 Field::List::ConstIterator it;
474 480
475 for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) { 481 for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) {
476 delete (*it); 482 delete (*it);
477 } 483 }
478 mAllFields.clear(); 484 mAllFields.clear();
479 485
480 for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) { 486 for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) {
481 delete (*it); 487 delete (*it);
482 } 488 }
483 mDefaultFields.clear(); 489 mDefaultFields.clear();
484 490
485 for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) { 491 for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) {
486 delete (*it); 492 delete (*it);
487 } 493 }
488 mCustomFields.clear(); 494 mCustomFields.clear();
489} 495}
490 496
491void Field::saveFields( const QString &identifier, 497void Field::saveFields( const QString &identifier,
492 const Field::List &fields ) 498 const Field::List &fields )
493{ 499{
494 KConfig *cfg = KGlobal::config(); 500 KConfig *cfg = KGlobal::config();
495 KConfigGroupSaver( cfg, "KABCFields" ); 501 KConfigGroupSaver( cfg, "KABCFields" );
496 saveFields( cfg, identifier, fields ); 502 saveFields( cfg, identifier, fields );
497} 503}
498 504
499void Field::saveFields( KConfig *cfg, const QString &identifier, 505void Field::saveFields( KConfig *cfg, const QString &identifier,
500 const Field::List &fields ) 506 const Field::List &fields )
501{ 507{
502 QValueList<int> fieldIds; 508 QValueList<int> fieldIds;
503 509
504//US 510//US
505// qDebug("Field::saveFields to %s %s", cfg->getFileName().latin1(), identifier.latin1()); 511// qDebug("Field::saveFields to %s %s", cfg->getFileName().latin1(), identifier.latin1());
506 512
507 int custom = 0; 513 int custom = 0;
508 Field::List::ConstIterator it; 514 Field::List::ConstIterator it;
509 for( it = fields.begin(); it != fields.end(); ++it ) { 515 for( it = fields.begin(); it != fields.end(); ++it ) {
510//US 516//US
511// qDebug("Field::saveFields field:%i", (*it)->mImpl->fieldId()); 517// qDebug("Field::saveFields field:%i", (*it)->mImpl->fieldId());
512 518
513 fieldIds.append( (*it)->mImpl->fieldId() ); 519 fieldIds.append( (*it)->mImpl->fieldId() );
514 if( (*it)->isCustom() ) { 520 if( (*it)->isCustom() ) {
515 QStringList customEntry; 521 QStringList customEntry;
516 customEntry << (*it)->mImpl->label(); 522 customEntry << (*it)->mImpl->label();
517 customEntry << (*it)->mImpl->key(); 523 customEntry << (*it)->mImpl->key();
518 customEntry << (*it)->mImpl->app(); 524 customEntry << (*it)->mImpl->app();
519 cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" + 525 cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
520 QString::number( custom++ ), customEntry ); 526 QString::number( custom++ ), customEntry );
521 } 527 }
522 } 528 }
523 cfg->writeEntry( identifier, fieldIds ); 529 cfg->writeEntry( identifier, fieldIds );
524} 530}
525 531
526Field::List Field::restoreFields( const QString &identifier ) 532Field::List Field::restoreFields( const QString &identifier )
527{ 533{
528//US 534//US
529// qDebug("Field::restoreFields, identifier: %s", identifier.latin1()); 535// qDebug("Field::restoreFields, identifier: %s", identifier.latin1());
530 536
531 KConfig *cfg = KGlobal::config(); 537 KConfig *cfg = KGlobal::config();
532 KConfigGroupSaver( cfg, "KABCFields" ); 538 KConfigGroupSaver( cfg, "KABCFields" );
533 cfg->setGroup( "KABCFields" ); 539 cfg->setGroup( "KABCFields" );
534 540
535 Field::List l = restoreFields( cfg, identifier ); 541 Field::List l = restoreFields( cfg, identifier );
536 542
537 return l; 543 return l;
538} 544}
539 545
540Field::List Field::restoreFields( KConfig *cfg, const QString &identifier ) 546Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
541{ 547{
542 QValueList<int> fieldIds = cfg->readIntListEntry( identifier); 548 QValueList<int> fieldIds = cfg->readIntListEntry( identifier);
543//US 549//US
544// qDebug("Field::restoreFields from %s, identifier: %s", cfg->getFileName().latin1(), identifier.latin1()); 550// qDebug("Field::restoreFields from %s, identifier: %s", cfg->getFileName().latin1(), identifier.latin1());
545 551
546 Field::List fields; 552 Field::List fields;
547 553
548 int custom = 0; 554 int custom = 0;
549 QValueList<int>::ConstIterator it; 555 QValueList<int>::ConstIterator it;
550 for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) { 556 for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
551 FieldImpl *f = 0; 557 FieldImpl *f = 0;
552 if ( (*it) == FieldImpl::CustomField ) { 558 if ( (*it) == FieldImpl::CustomField ) {
553 QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" + 559 QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
554 identifier + "_" + 560 identifier + "_" +
555 QString::number( custom++ ) ); 561 QString::number( custom++ ) );
556 f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ], 562 f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
557 customEntry[ 1 ], customEntry[ 2 ] ); 563 customEntry[ 1 ], customEntry[ 2 ] );
558 } else { 564 } else {
559 f = new FieldImpl( *it ); 565 f = new FieldImpl( *it );
560 } 566 }
561 fields.append( new Field( f ) ); 567 fields.append( new Field( f ) );
562 } 568 }
563 569
564 return fields; 570 return fields;
565} 571}
566 572
567bool Field::equals( Field *field ) 573bool Field::equals( Field *field )
568{ 574{
569 bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() ); 575 bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
570 576
571 if ( !sameId ) return false; 577 if ( !sameId ) return false;
572 578
573 if ( mImpl->fieldId() != FieldImpl::CustomField ) return true; 579 if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
574 580
575 return mImpl->key() == field->mImpl->key(); 581 return mImpl->key() == field->mImpl->key();
576} 582}
577 583
578Field *Field::createCustomField( const QString &label, int category, 584Field *Field::createCustomField( const QString &label, int category,
579 const QString &key, const QString &app ) 585 const QString &key, const QString &app )
580{ 586{
581 Field *field = new Field( new FieldImpl( FieldImpl::CustomField, 587 Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
582 category | CustomCategory, 588 category | CustomCategory,
583 label, key, app ) ); 589 label, key, app ) );
584//US 590//US
585// qDebug("Field::createCustomField label %s", label.latin1() ); 591// qDebug("Field::createCustomField label %s", label.latin1() );
586 592
587 mCustomFields.append( field ); 593 mCustomFields.append( field );
588 594
589 return field; 595 return field;
590} 596}
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index 9e7e221..66f0a5e 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -1,709 +1,718 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
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 <qlayout.h> 24#include <qlayout.h>
25#include <qlabel.h> 25#include <qlabel.h>
26#include <qtooltip.h> 26#include <qtooltip.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qstring.h> 29#include <qstring.h>
30#include <qlistbox.h> 30#include <qlistbox.h>
31#include <qlistview.h> 31#include <qlistview.h>
32#include <qbuttongroup.h> 32#include <qbuttongroup.h>
33#include <qhbox.h> 33#include <qhbox.h>
34#include <qcursor.h> 34#include <qcursor.h>
35 35
36#include <kbuttonbox.h> 36#include <kbuttonbox.h>
37#include <klistview.h> 37#include <klistview.h>
38#include <kapplication.h> 38#include <kapplication.h>
39#include <qapplication.h> 39#include <qapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <klineedit.h> 41#include <klineedit.h>
42#include <kcombobox.h> 42#include <kcombobox.h>
43#include <klocale.h> 43#include <klocale.h>
44#include <kdebug.h> 44#include <kdebug.h>
45#include <kglobal.h> 45#include <kglobal.h>
46#include <kiconloader.h> 46#include <kiconloader.h>
47 47
48#include <kabc/phonenumber.h> 48#include <kabc/phonenumber.h>
49 49
50#include "typecombo.h" 50#include "typecombo.h"
51 51
52#include "phoneeditwidget.h" 52#include "phoneeditwidget.h"
53 53
54PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 54PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
55 : QWidget(parent,name) 55 : QWidget(parent,name)
56{ 56{
57 QGridLayout* gridLayout = new QGridLayout ( this, 2,2 ); 57 QGridLayout* gridLayout = new QGridLayout ( this, 2,2 );
58 58
59 QLabel *temp = new QLabel( "", this ); 59 QLabel *temp = new QLabel( "", this );
60 temp->setAlignment( Qt::AlignCenter ); 60 temp->setAlignment( Qt::AlignCenter );
61 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 61 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
62 gridLayout->addWidget( temp, 1, 0 ); 62 gridLayout->addWidget( temp, 1, 0 );
63 QPushButton *addBut = new QPushButton ( "add", this ); 63 QPushButton *addBut = new QPushButton ( "add", this );
64 addBut->setPixmap ( SmallIcon("plus")); 64 addBut->setPixmap ( SmallIcon("plus"));
65 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() ); 65 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() );
66 connect(addBut,SIGNAL(clicked ()),SLOT(addNumber())); 66 connect(addBut,SIGNAL(clicked ()),SLOT(addNumber()));
67 gridLayout->addWidget( addBut, 0, 0 ); 67 gridLayout->addWidget( addBut, 0, 0 );
68 68
69 sv = new QScrollView( this ); 69 sv = new QScrollView( this );
70 sv->setFrameStyle ( QFrame::Panel | QFrame::Plain ); 70 sv->setFrameStyle ( QFrame::Panel | QFrame::Plain );
71 sv->setLineWidth ( 1 ); 71 sv->setLineWidth ( 1 );
72 sv->setMidLineWidth ( 1 ); 72 sv->setMidLineWidth ( 1 );
73 mw = new QWidget ( sv->viewport() ); 73 mw = new QWidget ( sv->viewport() );
74 sv->addChild(mw); 74 sv->addChild(mw);
75 sv->setResizePolicy( QScrollView::AutoOneFit ); 75 sv->setResizePolicy( QScrollView::AutoOneFit );
76 mainLayout = new QVBoxLayout ( mw ); 76 mainLayout = new QVBoxLayout ( mw );
77 mainLayout->setMargin( 2 ); 77 mainLayout->setMargin( 2 );
78 mainLayout->setSpacing( 2 ); 78 mainLayout->setSpacing( 2 );
79 gridLayout->addMultiCellWidget( sv, 0, 1, 1,1 ); 79 gridLayout->addMultiCellWidget( sv, 0, 1, 1,1 );
80 setDefaults(); 80 setDefaults();
81 mTypeNumberEditList.setAutoDelete( true ); 81 mTypeNumberEditList.setAutoDelete( true );
82 mPopup = new QPopupMenu( this ); 82 mPopup = new QPopupMenu( this );
83 QStringList list = PhoneNumber::supportedTypeListNames(); 83 QStringList list = PhoneNumber::supportedTypeListNames();
84 mPopupCount = list.count(); 84 mPopupCount = list.count();
85 int i = 0; 85 int i = 0;
86 while ( i < mPopupCount ) { 86 while ( i < mPopupCount ) {
87 mPopup->insertItem( list[ i ], i ); 87 mPopup->insertItem( list[ i ], i );
88 ++i; 88 ++i;
89 } 89 }
90 connect(mPopup,SIGNAL(activated(int)),this,SLOT(addNumberInt( int))); 90 connect(mPopup,SIGNAL(activated(int)),this,SLOT(addNumberInt( int)));
91 91
92} 92}
93 93
94PhoneEditWidget::~PhoneEditWidget() 94PhoneEditWidget::~PhoneEditWidget()
95{ 95{
96} 96}
97void PhoneEditWidget::setDefaults() 97void PhoneEditWidget::setDefaults()
98{ 98{
99 mTypeNumberEditList.clear(); 99 mTypeNumberEditList.clear();
100 PhoneTypeNumberEdit* edit = appendEditCombo(); 100 PhoneTypeNumberEdit* edit = appendEditCombo();
101 KABC::PhoneNumber phoneNumber; 101 KABC::PhoneNumber phoneNumber;
102 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref ); 102 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref );
103 edit->setPhoneNumber( phoneNumber ); 103 edit->setPhoneNumber( phoneNumber );
104 edit = appendEditCombo(); 104 edit = appendEditCombo();
105 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref ); 105 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref );
106 edit->setPhoneNumber( phoneNumber ); 106 edit->setPhoneNumber( phoneNumber );
107 edit = appendEditCombo(); 107 edit = appendEditCombo();
108 phoneNumber.setType( KABC::PhoneNumber::Cell ); 108 phoneNumber.setType( KABC::PhoneNumber::Cell );
109 edit->setPhoneNumber( phoneNumber ); 109 edit->setPhoneNumber( phoneNumber );
110 110
111} 111}
112void PhoneEditWidget::addNumberInt( int index ) 112void PhoneEditWidget::addNumberInt( int index )
113{ 113{
114 PhoneTypeNumberEdit* edit = appendEditCombo(); 114 PhoneTypeNumberEdit* edit = appendEditCombo();
115 KABC::PhoneNumber phoneNumber; 115 KABC::PhoneNumber phoneNumber;
116 phoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); 116 phoneNumber.setType( PhoneNumber::supportedTypeList()[index] );
117 edit->setPhoneNumber( phoneNumber ); 117 edit->setPhoneNumber( phoneNumber );
118 //verticalScrollBar()->setValue( 1024); 118 //verticalScrollBar()->setValue( 1024);
119 QTimer::singleShot( 0, this, SLOT ( bottomVisible() ) ); 119 QTimer::singleShot( 0, this, SLOT ( bottomVisible() ) );
120} 120}
121void PhoneEditWidget::bottomVisible() 121void PhoneEditWidget::bottomVisible()
122{ 122{
123 sv->setContentsPos ( 0, 1024 ); 123 sv->setContentsPos ( 0, 1024 );
124} 124}
125void PhoneEditWidget::addNumber() 125void PhoneEditWidget::addNumber()
126{ 126{
127 int i = 0; 127 int i = 0;
128 while ( i < mPopupCount ) { 128 while ( i < mPopupCount ) {
129 mPopup->setItemEnabled( i, true ); 129 mPopup->setItemEnabled( i, true );
130 ++i; 130 ++i;
131 } 131 }
132 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); 132 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
133 while ( edit ) { 133 while ( edit ) {
134 if ( edit->currentType() < mPopupCount -1 ) 134 if ( edit->currentType() < mPopupCount -1 )
135 mPopup->setItemEnabled( edit->currentType(), false ); 135 mPopup->setItemEnabled( edit->currentType(), false );
136 edit = mTypeNumberEditList.next(); 136 edit = mTypeNumberEditList.next();
137 } 137 }
138 mPopup->popup( QCursor::pos() ); 138 mPopup->popup( QCursor::pos() );
139} 139}
140PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo() 140PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo()
141{ 141{
142 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw ); 142 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw );
143 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) ); 143 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) );
144 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) ); 144 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) );
145 connect ( edit, SIGNAL ( deleteMe( PhoneTypeNumberEdit* ) ), this, SLOT ( deleteEdit( PhoneTypeNumberEdit*) ) ); 145 connect ( edit, SIGNAL ( deleteMe( PhoneTypeNumberEdit* ) ), this, SLOT ( deleteEdit( PhoneTypeNumberEdit*) ) );
146 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) ); 146 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) );
147 147
148 mainLayout->add( edit ); 148 mainLayout->add( edit );
149 mTypeNumberEditList.append( edit ); 149 mTypeNumberEditList.append( edit );
150 return edit; 150 return edit;
151} 151}
152 152
153void PhoneEditWidget::deleteEdit( PhoneTypeNumberEdit* ew ) 153void PhoneEditWidget::deleteEdit( PhoneTypeNumberEdit* ew )
154{ 154{
155 mPendingDelete = ew; 155 mPendingDelete = ew;
156 QTimer::singleShot( 0, this, SLOT ( pendingDelete() ) ); 156 QTimer::singleShot( 0, this, SLOT ( pendingDelete() ) );
157} 157}
158void PhoneEditWidget::pendingDelete() 158void PhoneEditWidget::pendingDelete()
159{ 159{
160 mTypeNumberEditList.removeRef( mPendingDelete ); 160 mTypeNumberEditList.removeRef( mPendingDelete );
161 emit modified(); 161 emit modified();
162} 162}
163 163
164void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li ) 164void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li )
165{ 165{
166 if ( li.isEmpty() ) { 166 if ( li.isEmpty() ) {
167 setDefaults(); 167 setDefaults();
168 return; 168 return;
169 } 169 }
170 mTypeNumberEditList.clear(); 170 mTypeNumberEditList.clear();
171 KABC::PhoneNumber::List::Iterator it; 171 KABC::PhoneNumber::List::Iterator it;
172 KABC::PhoneNumber::List list = li; 172 KABC::PhoneNumber::List list2 = li;
173 PhoneTypeNumberEdit* edit = 0;//mTypeNumberEditList.first(); 173 KABC::PhoneNumber::List list ;
174
175 PhoneNumber::TypeList tList = PhoneNumber::supportedTypeList();
176 int i = 0;
177 int max = tList.count();
178 while ( i < max-1 ) {
179 for ( it = list2.begin(); it != list2.end(); ++it ) {
180 if ( (*it).type() == tList[i] ) {
181 list.append( (*it ) );
182 break;
183 }
184 }
185 ++i;
186 }
187 for ( it = list2.begin(); it != list2.end(); ++it ) {
188 if ( (*it).type() == tList[ max-1 ] )
189 list.append( (*it ) );
190 }
174 for ( it = list.begin(); it != list.end(); ++it ) { 191 for ( it = list.begin(); it != list.end(); ++it ) {
175 if ( edit ) {
176 edit->setPhoneNumber( (*it ) );
177 edit = mTypeNumberEditList.next();
178 } else {
179 PhoneTypeNumberEdit* editNew = appendEditCombo(); 192 PhoneTypeNumberEdit* editNew = appendEditCombo();
180 editNew->setPhoneNumber( (*it ) ); 193 editNew->setPhoneNumber( (*it ) );
181 }
182 }
183 while ( edit ) {
184 edit->hide();
185 edit = mTypeNumberEditList.next();
186 } 194 }
195
187} 196}
188KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 197KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
189{ 198{
190 KABC::PhoneNumber::List retList; 199 KABC::PhoneNumber::List retList;
191 200
192 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); 201 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
193 while ( edit ) { 202 while ( edit ) {
194 if ( edit->isValid() ) { 203 if ( edit->isValid() ) {
195 retList.append( edit->phoneNumber()); 204 retList.append( edit->phoneNumber());
196 } 205 }
197 edit = mTypeNumberEditList.next(); 206 edit = mTypeNumberEditList.next();
198 207
199 } 208 }
200 return retList; 209 return retList;
201} 210}
202 211
203#if 0 212#if 0
204PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 213PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
205 : QWidget( parent, name ) 214 : QWidget( parent, name )
206{ 215{
207 QGridLayout *layout = new QGridLayout( this, 4, 1 ); 216 QGridLayout *layout = new QGridLayout( this, 4, 1 );
208//US layout->setSpacing( KDialog::spacingHint() ); 217//US layout->setSpacing( KDialog::spacingHint() );
209 layout->setSpacing( KDialogBase::spacingHintSmall() ); 218 layout->setSpacing( KDialogBase::spacingHintSmall() );
210 219
211 220
212 221
213 QLabel* label = new QLabel( this ); 222 QLabel* label = new QLabel( this );
214//US loadIcon call is ambiguous. Add one more parameter 223//US loadIcon call is ambiguous. Add one more parameter
215//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); 224//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
216 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 225 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
217 label->setAlignment( AlignCenter ); 226 label->setAlignment( AlignCenter );
218//US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); 227//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
219 layout->addWidget( label, 0, 0 ); 228 layout->addWidget( label, 0, 0 );
220 229
221 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), 230 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ),
222 this ); 231 this );
223 if ( QApplication::desktop()->width() < 640 ) 232 if ( QApplication::desktop()->width() < 640 )
224 layout->addWidget( editButton, 0, 1 ); 233 layout->addWidget( editButton, 0, 1 );
225 else 234 else
226 layout->addMultiCellWidget( editButton, 0, 0, 1, 3); 235 layout->addMultiCellWidget( editButton, 0, 0, 1, 3);
227 236
228 mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); 237 mPrefCombo = new PhoneTypeCombo( mPhoneList, this );
229 mPrefEdit = new KLineEdit( this ); 238 mPrefEdit = new KLineEdit( this );
230 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); 239 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) );
231 mPrefCombo->setLineEdit( mPrefEdit ); 240 mPrefCombo->setLineEdit( mPrefEdit );
232 layout->addWidget( mPrefCombo, 1, 0 ); 241 layout->addWidget( mPrefCombo, 1, 0 );
233 layout->addWidget( mPrefEdit, 1, 1 ); 242 layout->addWidget( mPrefEdit, 1, 1 );
234 int x = 1, y = 2; 243 int x = 1, y = 2;
235 if ( QApplication::desktop()->width() < 640 ) { 244 if ( QApplication::desktop()->width() < 640 ) {
236 ++x; 245 ++x;
237 y = 0; 246 y = 0;
238 } 247 }
239 mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); 248 mSecondCombo = new PhoneTypeCombo( mPhoneList, this );
240 mSecondEdit = new KLineEdit( this ); 249 mSecondEdit = new KLineEdit( this );
241 mSecondCombo->setLineEdit( mSecondEdit ); 250 mSecondCombo->setLineEdit( mSecondEdit );
242 layout->addWidget( mSecondCombo, x, y++ ); 251 layout->addWidget( mSecondCombo, x, y++ );
243 layout->addWidget( mSecondEdit, x, y++ ); 252 layout->addWidget( mSecondEdit, x, y++ );
244 253
245 y = 0; 254 y = 0;
246 ++x; 255 ++x;
247 mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); 256 mThirdCombo = new PhoneTypeCombo( mPhoneList, this );
248 mThirdEdit = new KLineEdit( this ); 257 mThirdEdit = new KLineEdit( this );
249 mThirdCombo->setLineEdit( mThirdEdit ); 258 mThirdCombo->setLineEdit( mThirdEdit );
250 layout->addWidget( mThirdCombo, x, y++ ); 259 layout->addWidget( mThirdCombo, x, y++ );
251 layout->addWidget( mThirdEdit, x, y++ ); 260 layout->addWidget( mThirdEdit, x, y++ );
252 if ( QApplication::desktop()->width() < 640 ) { 261 if ( QApplication::desktop()->width() < 640 ) {
253 ++x; 262 ++x;
254 y = 0; 263 y = 0;
255 } 264 }
256 mFourthCombo = new PhoneTypeCombo( mPhoneList, this ); 265 mFourthCombo = new PhoneTypeCombo( mPhoneList, this );
257 mFourthEdit = new KLineEdit( this ); 266 mFourthEdit = new KLineEdit( this );
258 mFourthCombo->setLineEdit( mFourthEdit ); 267 mFourthCombo->setLineEdit( mFourthEdit );
259 layout->addWidget( mFourthCombo, x, y++ ); 268 layout->addWidget( mFourthCombo, x, y++ );
260 layout->addWidget( mFourthEdit, x, y++ ); 269 layout->addWidget( mFourthEdit, x, y++ );
261 270
262 // Four numbers don't fit in the current dialog 271 // Four numbers don't fit in the current dialog
263 if ( QApplication::desktop()->width() < 640 ) { 272 if ( QApplication::desktop()->width() < 640 ) {
264 mFourthCombo->hide(); 273 mFourthCombo->hide();
265 mFourthEdit->hide(); 274 mFourthEdit->hide();
266 } else { 275 } else {
267 QFontMetrics fm ( font () ) ; 276 QFontMetrics fm ( font () ) ;
268 int wid = fm.width( "Messenger" ) +60; 277 int wid = fm.width( "Messenger" ) +60;
269 mPrefCombo->setMaximumWidth( wid ); 278 mPrefCombo->setMaximumWidth( wid );
270 mSecondCombo->setMaximumWidth( wid ); 279 mSecondCombo->setMaximumWidth( wid );
271 mThirdCombo->setMaximumWidth( wid ); 280 mThirdCombo->setMaximumWidth( wid );
272 mFourthCombo->setMaximumWidth( wid ); 281 mFourthCombo->setMaximumWidth( wid );
273 } 282 }
274 283
275 284
276 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ), 285 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ),
277 SLOT( slotPrefEditChanged() ) ); 286 SLOT( slotPrefEditChanged() ) );
278 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ), 287 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ),
279 SLOT( slotSecondEditChanged() ) ); 288 SLOT( slotSecondEditChanged() ) );
280 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ), 289 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ),
281 SLOT( slotThirdEditChanged() ) ); 290 SLOT( slotThirdEditChanged() ) );
282 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ), 291 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ),
283 SLOT( slotFourthEditChanged() ) ); 292 SLOT( slotFourthEditChanged() ) );
284 293
285 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); 294 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) );
286 295
287 connect( mPrefCombo, SIGNAL( activated( int ) ), 296 connect( mPrefCombo, SIGNAL( activated( int ) ),
288 SLOT( updatePrefEdit() ) ); 297 SLOT( updatePrefEdit() ) );
289 connect( mSecondCombo, SIGNAL( activated( int ) ), 298 connect( mSecondCombo, SIGNAL( activated( int ) ),
290 SLOT( updateSecondEdit() ) ); 299 SLOT( updateSecondEdit() ) );
291 connect( mThirdCombo, SIGNAL( activated( int ) ), 300 connect( mThirdCombo, SIGNAL( activated( int ) ),
292 SLOT( updateThirdEdit() ) ); 301 SLOT( updateThirdEdit() ) );
293 connect( mFourthCombo, SIGNAL( activated( int ) ), 302 connect( mFourthCombo, SIGNAL( activated( int ) ),
294 SLOT( updateFourthEdit() ) ); 303 SLOT( updateFourthEdit() ) );
295} 304}
296 305
297PhoneEditWidget::~PhoneEditWidget() 306PhoneEditWidget::~PhoneEditWidget()
298{ 307{
299} 308}
300 309
301void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list ) 310void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list )
302{ 311{
303 mPhoneList.clear(); 312 mPhoneList.clear();
304 313
305 // Insert types for existing numbers. 314 // Insert types for existing numbers.
306 mPrefCombo->insertTypeList( list ); 315 mPrefCombo->insertTypeList( list );
307 316
308 QValueList<int> defaultTypes; 317 QValueList<int> defaultTypes;
309 defaultTypes << KABC::PhoneNumber::Home; 318 defaultTypes << KABC::PhoneNumber::Home;
310 defaultTypes << KABC::PhoneNumber::Work; 319 defaultTypes << KABC::PhoneNumber::Work;
311 defaultTypes << KABC::PhoneNumber::Cell; 320 defaultTypes << KABC::PhoneNumber::Cell;
312 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 321 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
313 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 322 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
314 323
315 // Insert default types. 324 // Insert default types.
316 // Doing this for mPrefCombo is enough because the list is shared by all 325 // Doing this for mPrefCombo is enough because the list is shared by all
317 // combos. 326 // combos.
318 QValueList<int>::ConstIterator it; 327 QValueList<int>::ConstIterator it;
319 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { 328 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) {
320 if ( !mPrefCombo->hasType( *it ) ) 329 if ( !mPrefCombo->hasType( *it ) )
321 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) ); 330 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) );
322 } 331 }
323 332
324 updateCombos(); 333 updateCombos();
325 334
326 mPrefCombo->selectType( defaultTypes[ 0 ] ); 335 mPrefCombo->selectType( defaultTypes[ 0 ] );
327 mSecondCombo->selectType( defaultTypes[ 1 ] ); 336 mSecondCombo->selectType( defaultTypes[ 1 ] );
328 mThirdCombo->selectType( defaultTypes[ 2 ] ); 337 mThirdCombo->selectType( defaultTypes[ 2 ] );
329 mFourthCombo->selectType( defaultTypes[ 3 ] ); 338 mFourthCombo->selectType( defaultTypes[ 3 ] );
330 339
331 updateLineEdits(); 340 updateLineEdits();
332} 341}
333 342
334void PhoneEditWidget::updateLineEdits() 343void PhoneEditWidget::updateLineEdits()
335{ 344{
336 updatePrefEdit(); 345 updatePrefEdit();
337 updateSecondEdit(); 346 updateSecondEdit();
338 updateThirdEdit(); 347 updateThirdEdit();
339 updateFourthEdit(); 348 updateFourthEdit();
340} 349}
341 350
342void PhoneEditWidget::updateCombos() 351void PhoneEditWidget::updateCombos()
343{ 352{
344 mPrefCombo->updateTypes(); 353 mPrefCombo->updateTypes();
345 mSecondCombo->updateTypes(); 354 mSecondCombo->updateTypes();
346 mThirdCombo->updateTypes(); 355 mThirdCombo->updateTypes();
347 mFourthCombo->updateTypes(); 356 mFourthCombo->updateTypes();
348} 357}
349 358
350KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 359KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
351{ 360{
352 KABC::PhoneNumber::List retList; 361 KABC::PhoneNumber::List retList;
353 362
354 KABC::PhoneNumber::List::Iterator it; 363 KABC::PhoneNumber::List::Iterator it;
355 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it ) 364 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it )
356 if ( !(*it).number().isEmpty() ) 365 if ( !(*it).number().isEmpty() )
357 retList.append( *it ); 366 retList.append( *it );
358 367
359 return retList; 368 return retList;
360} 369}
361 370
362void PhoneEditWidget::edit() 371void PhoneEditWidget::edit()
363{ 372{
364 PhoneEditDialog dlg( mPhoneList, this ); 373 PhoneEditDialog dlg( mPhoneList, this );
365 374
366 if ( dlg.exec() ) { 375 if ( dlg.exec() ) {
367 if ( dlg.changed() ) { 376 if ( dlg.changed() ) {
368 KABC::PhoneNumber::List list = dlg.phoneNumbers(); 377 KABC::PhoneNumber::List list = dlg.phoneNumbers();
369 setPhoneNumbers( list ); 378 setPhoneNumbers( list );
370 updateCombos(); 379 updateCombos();
371 updateLineEdits(); 380 updateLineEdits();
372 emit modified(); 381 emit modified();
373 } 382 }
374 } 383 }
375} 384}
376 385
377void PhoneEditWidget::updatePrefEdit() 386void PhoneEditWidget::updatePrefEdit()
378{ 387{
379 updateEdit( mPrefCombo ); 388 updateEdit( mPrefCombo );
380} 389}
381 390
382void PhoneEditWidget::updateSecondEdit() 391void PhoneEditWidget::updateSecondEdit()
383{ 392{
384 updateEdit( mSecondCombo ); 393 updateEdit( mSecondCombo );
385} 394}
386 395
387void PhoneEditWidget::updateThirdEdit() 396void PhoneEditWidget::updateThirdEdit()
388{ 397{
389 updateEdit( mThirdCombo ); 398 updateEdit( mThirdCombo );
390} 399}
391 400
392void PhoneEditWidget::updateFourthEdit() 401void PhoneEditWidget::updateFourthEdit()
393{ 402{
394 updateEdit( mFourthCombo ); 403 updateEdit( mFourthCombo );
395} 404}
396 405
397void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo ) 406void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo )
398{ 407{
399 QLineEdit *edit = combo->lineEdit(); 408 QLineEdit *edit = combo->lineEdit();
400 if ( !edit ) 409 if ( !edit )
401 return; 410 return;
402 411
403#if 0 412#if 0
404 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl; 413 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl;
405 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl; 414 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl;
406 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl; 415 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl;
407 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl; 416 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl;
408#endif 417#endif
409 418
410 PhoneNumber::List::Iterator it = combo->selectedElement(); 419 PhoneNumber::List::Iterator it = combo->selectedElement();
411 if ( it != mPhoneList.end() ) { 420 if ( it != mPhoneList.end() ) {
412 edit->setText( (*it).number() ); 421 edit->setText( (*it).number() );
413 } else { 422 } else {
414 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl; 423 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl;
415 } 424 }
416} 425}
417 426
418void PhoneEditWidget::slotPrefEditChanged() 427void PhoneEditWidget::slotPrefEditChanged()
419{ 428{
420 updatePhoneNumber( mPrefCombo ); 429 updatePhoneNumber( mPrefCombo );
421} 430}
422 431
423void PhoneEditWidget::slotSecondEditChanged() 432void PhoneEditWidget::slotSecondEditChanged()
424{ 433{
425 updatePhoneNumber( mSecondCombo ); 434 updatePhoneNumber( mSecondCombo );
426} 435}
427 436
428void PhoneEditWidget::slotThirdEditChanged() 437void PhoneEditWidget::slotThirdEditChanged()
429{ 438{
430 updatePhoneNumber( mThirdCombo ); 439 updatePhoneNumber( mThirdCombo );
431} 440}
432 441
433void PhoneEditWidget::slotFourthEditChanged() 442void PhoneEditWidget::slotFourthEditChanged()
434{ 443{
435 updatePhoneNumber( mFourthCombo ); 444 updatePhoneNumber( mFourthCombo );
436} 445}
437 446
438void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo ) 447void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo )
439{ 448{
440 QLineEdit *edit = combo->lineEdit(); 449 QLineEdit *edit = combo->lineEdit();
441 if ( !edit ) return; 450 if ( !edit ) return;
442 451
443 PhoneNumber::List::Iterator it = combo->selectedElement(); 452 PhoneNumber::List::Iterator it = combo->selectedElement();
444 if ( it != mPhoneList.end() ) { 453 if ( it != mPhoneList.end() ) {
445 (*it).setNumber( edit->text() ); 454 (*it).setNumber( edit->text() );
446 } 455 }
447 456
448 updateOtherEdit( combo, mPrefCombo ); 457 updateOtherEdit( combo, mPrefCombo );
449 updateOtherEdit( combo, mSecondCombo ); 458 updateOtherEdit( combo, mSecondCombo );
450 updateOtherEdit( combo, mThirdCombo ); 459 updateOtherEdit( combo, mThirdCombo );
451 updateOtherEdit( combo, mFourthCombo ); 460 updateOtherEdit( combo, mFourthCombo );
452 461
453 emit modified(); 462 emit modified();
454} 463}
455 464
456void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ) 465void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo )
457{ 466{
458 if ( combo == otherCombo ) return; 467 if ( combo == otherCombo ) return;
459 468
460 if ( combo->currentItem() == otherCombo->currentItem() ) { 469 if ( combo->currentItem() == otherCombo->currentItem() ) {
461 updateEdit( otherCombo ); 470 updateEdit( otherCombo );
462 } 471 }
463} 472}
464 473
465/////////////////////////////////////////// 474///////////////////////////////////////////
466// PhoneEditDialog 475// PhoneEditDialog
467 476
468class PhoneViewItem : public QListViewItem 477class PhoneViewItem : public QListViewItem
469{ 478{
470public: 479public:
471 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ); 480 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number );
472 481
473 void setPhoneNumber( const KABC::PhoneNumber &number ) 482 void setPhoneNumber( const KABC::PhoneNumber &number )
474 { 483 {
475 mPhoneNumber = number; 484 mPhoneNumber = number;
476 makeText(); 485 makeText();
477 } 486 }
478 487
479 QString key() { return mPhoneNumber.id(); } 488 QString key() { return mPhoneNumber.id(); }
480 QString country() { return ""; } 489 QString country() { return ""; }
481 QString region() { return ""; } 490 QString region() { return ""; }
482 QString number() { return ""; } 491 QString number() { return ""; }
483 492
484 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; } 493 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; }
485 494
486private: 495private:
487 void makeText(); 496 void makeText();
488 497
489 KABC::PhoneNumber mPhoneNumber; 498 KABC::PhoneNumber mPhoneNumber;
490}; 499};
491 500
492PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ) 501PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number )
493 : QListViewItem( parent ), mPhoneNumber( number ) 502 : QListViewItem( parent ), mPhoneNumber( number )
494{ 503{
495#ifdef DESKTOP_VERSION 504#ifdef DESKTOP_VERSION
496 setRenameEnabled ( 0, true ); 505 setRenameEnabled ( 0, true );
497#endif 506#endif
498 makeText(); 507 makeText();
499} 508}
500 509
501void PhoneViewItem::makeText() 510void PhoneViewItem::makeText()
502{ 511{
503 /** 512 /**
504 * Will be used in future versions of kaddressbook/libkabc 513 * Will be used in future versions of kaddressbook/libkabc
505 514
506 setText( 0, mPhoneNumber.country() ); 515 setText( 0, mPhoneNumber.country() );
507 setText( 1, mPhoneNumber.region() ); 516 setText( 1, mPhoneNumber.region() );
508 setText( 2, mPhoneNumber.number() ); 517 setText( 2, mPhoneNumber.number() );
509 setText( 3, mPhoneNumber.typeLabel() ); 518 setText( 3, mPhoneNumber.typeLabel() );
510 */ 519 */
511 520
512 setText( 0, mPhoneNumber.number() ); 521 setText( 0, mPhoneNumber.number() );
513 setText( 1, mPhoneNumber.typeLabel() ); 522 setText( 1, mPhoneNumber.typeLabel() );
514} 523}
515 524
516PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) 525PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name )
517 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), 526 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ),
518 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 527 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
519 parent, name, true) 528 parent, name, true)
520{ 529{
521 mPhoneNumberList = list; 530 mPhoneNumberList = list;
522 531
523 QWidget *page = plainPage(); 532 QWidget *page = plainPage();
524 533
525 QGridLayout *layout = new QGridLayout( page, 1, 2 ); 534 QGridLayout *layout = new QGridLayout( page, 1, 2 );
526 layout->setSpacing( spacingHint() ); 535 layout->setSpacing( spacingHint() );
527 536
528 mListView = new KListView( page ); 537 mListView = new KListView( page );
529 mListView->setAllColumnsShowFocus( true ); 538 mListView->setAllColumnsShowFocus( true );
530 mListView->addColumn( i18n( "Number" ) ); 539 mListView->addColumn( i18n( "Number" ) );
531 mListView->addColumn( i18n( "Type" ) ); 540 mListView->addColumn( i18n( "Type" ) );
532 541
533 KButtonBox *buttonBox = new KButtonBox( page, Vertical ); 542 KButtonBox *buttonBox = new KButtonBox( page, Vertical );
534 543
535 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); 544 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) );
536 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); 545 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) );
537 mEditButton->setEnabled( false ); 546 mEditButton->setEnabled( false );
538 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); 547 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) );
539 mRemoveButton->setEnabled( false ); 548 mRemoveButton->setEnabled( false );
540 buttonBox->layout(); 549 buttonBox->layout();
541 550
542 layout->addWidget( mListView, 0, 0 ); 551 layout->addWidget( mListView, 0, 0 );
543 layout->addWidget( buttonBox, 0, 1 ); 552 layout->addWidget( buttonBox, 0, 1 );
544 553
545 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); 554 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) );
546 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); 555 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber()));
547 556
548 KABC::PhoneNumber::List::Iterator it; 557 KABC::PhoneNumber::List::Iterator it;
549 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) 558 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it )
550 new PhoneViewItem( mListView, *it ); 559 new PhoneViewItem( mListView, *it );
551 if (QApplication::desktop()->width() < 480 ) 560 if (QApplication::desktop()->width() < 480 )
552 showMaximized(); 561 showMaximized();
553 else 562 else
554 resize( 400, 400 ); 563 resize( 400, 400 );
555 mChanged = false; 564 mChanged = false;
556} 565}
557 566
558PhoneEditDialog::~PhoneEditDialog() 567PhoneEditDialog::~PhoneEditDialog()
559{ 568{
560 qDebug("PhoneEditDialog::~PhoneEditDialog() "); 569 qDebug("PhoneEditDialog::~PhoneEditDialog() ");
561} 570}
562 571
563void PhoneEditDialog::slotAddPhoneNumber() 572void PhoneEditDialog::slotAddPhoneNumber()
564{ 573{
565 KABC::PhoneNumber tmp( "", 0 ); 574 KABC::PhoneNumber tmp( "", 0 );
566 PhoneTypeDialog dlg( tmp, this ); 575 PhoneTypeDialog dlg( tmp, this );
567 576
568 if ( dlg.exec() ) { 577 if ( dlg.exec() ) {
569 QListViewItem* i = mListView->firstChild(); 578 QListViewItem* i = mListView->firstChild();
570 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 579 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
571 bool insert = true; 580 bool insert = true;
572 while ( i ) { 581 while ( i ) {
573 PhoneViewItem* p = ( PhoneViewItem* ) i; 582 PhoneViewItem* p = ( PhoneViewItem* ) i;
574 KABC::PhoneNumber pn = p->phoneNumber(); 583 KABC::PhoneNumber pn = p->phoneNumber();
575 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { 584 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) {
576 if ( p->text(0).isEmpty()) { 585 if ( p->text(0).isEmpty()) {
577 p->setPhoneNumber( phoneNumber ); 586 p->setPhoneNumber( phoneNumber );
578 mPhoneNumberList.remove( pn ); 587 mPhoneNumberList.remove( pn );
579 mPhoneNumberList.append( phoneNumber ); 588 mPhoneNumberList.append( phoneNumber );
580 insert = false; 589 insert = false;
581 break; 590 break;
582 } 591 }
583 } 592 }
584 i = i->nextSibling(); 593 i = i->nextSibling();
585 } 594 }
586 if ( insert ) { 595 if ( insert ) {
587 mPhoneNumberList.append( phoneNumber ); 596 mPhoneNumberList.append( phoneNumber );
588 new PhoneViewItem( mListView, phoneNumber ); 597 new PhoneViewItem( mListView, phoneNumber );
589 } 598 }
590 mChanged = true; 599 mChanged = true;
591 } 600 }
592} 601}
593 602
594void PhoneEditDialog::slotRemovePhoneNumber() 603void PhoneEditDialog::slotRemovePhoneNumber()
595{ 604{
596 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 605 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
597 if ( !item ) 606 if ( !item )
598 return; 607 return;
599 608
600 mPhoneNumberList.remove( item->phoneNumber() ); 609 mPhoneNumberList.remove( item->phoneNumber() );
601 QListViewItem *currItem = mListView->currentItem(); 610 QListViewItem *currItem = mListView->currentItem();
602 mListView->takeItem( currItem ); 611 mListView->takeItem( currItem );
603 delete currItem; 612 delete currItem;
604 613
605 mChanged = true; 614 mChanged = true;
606} 615}
607 616
608void PhoneEditDialog::slotEditPhoneNumber() 617void PhoneEditDialog::slotEditPhoneNumber()
609{ 618{
610 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 619 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
611 if ( !item ) 620 if ( !item )
612 return; 621 return;
613 622
614 PhoneTypeDialog dlg( item->phoneNumber(), this ); 623 PhoneTypeDialog dlg( item->phoneNumber(), this );
615 624
616 if ( dlg.exec() ) { 625 if ( dlg.exec() ) {
617 slotRemovePhoneNumber(); 626 slotRemovePhoneNumber();
618 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 627 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
619 mPhoneNumberList.append( phoneNumber ); 628 mPhoneNumberList.append( phoneNumber );
620 new PhoneViewItem( mListView, phoneNumber ); 629 new PhoneViewItem( mListView, phoneNumber );
621 630
622 mChanged = true; 631 mChanged = true;
623 } 632 }
624} 633}
625 634
626void PhoneEditDialog::slotSelectionChanged() 635void PhoneEditDialog::slotSelectionChanged()
627{ 636{
628 bool state = ( mListView->currentItem() != 0 ); 637 bool state = ( mListView->currentItem() != 0 );
629 638
630 mRemoveButton->setEnabled( state ); 639 mRemoveButton->setEnabled( state );
631 mEditButton->setEnabled( state ); 640 mEditButton->setEnabled( state );
632} 641}
633 642
634const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers() 643const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers()
635{ 644{
636 return mPhoneNumberList; 645 return mPhoneNumberList;
637} 646}
638 647
639bool PhoneEditDialog::changed() const 648bool PhoneEditDialog::changed() const
640{ 649{
641 return mChanged; 650 return mChanged;
642} 651}
643 652
644/////////////////////////////////////////// 653///////////////////////////////////////////
645// PhoneTypeDialog 654// PhoneTypeDialog
646PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, 655PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber,
647 QWidget *parent, const char *name) 656 QWidget *parent, const char *name)
648 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ), 657 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ),
649 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 658 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
650 parent, name, true), mPhoneNumber( phoneNumber ) 659 parent, name, true), mPhoneNumber( phoneNumber )
651{ 660{
652 QWidget *page = plainPage(); 661 QWidget *page = plainPage();
653 QLabel *label = 0; 662 QLabel *label = 0;
654 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() ); 663 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() );
655 664
656 label = new QLabel( i18n( "Number:" ), page ); 665 label = new QLabel( i18n( "Number:" ), page );
657 layout->addWidget( label, 0, 0 ); 666 layout->addWidget( label, 0, 0 );
658 mNumber = new KLineEdit( page ); 667 mNumber = new KLineEdit( page );
659 layout->addWidget( mNumber, 0, 1 ); 668 layout->addWidget( mNumber, 0, 1 );
660 669
661 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); 670 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page );
662 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); 671 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 );
663 672
664 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); 673 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page );
665 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); 674 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 );
666 675
667 // fill widgets 676 // fill widgets
668 mNumber->setText( mPhoneNumber.number() ); 677 mNumber->setText( mPhoneNumber.number() );
669 678
670 mTypeList = KABC::PhoneNumber::typeList(); 679 mTypeList = KABC::PhoneNumber::typeList();
671 mTypeList.remove( KABC::PhoneNumber::Pref ); 680 mTypeList.remove( KABC::PhoneNumber::Pref );
672 681
673 KABC::PhoneNumber::TypeList::Iterator it; 682 KABC::PhoneNumber::TypeList::Iterator it;
674 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) 683 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it )
675 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); 684 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup );
676 685
677 for ( int i = 0; i < mGroup->count(); ++i ) { 686 for ( int i = 0; i < mGroup->count(); ++i ) {
678 int type = mPhoneNumber.type(); 687 int type = mPhoneNumber.type();
679 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 688 QCheckBox *box = (QCheckBox*)mGroup->find( i );
680 box->setChecked( type & mTypeList[ i ] ); 689 box->setChecked( type & mTypeList[ i ] );
681 } 690 }
682 691
683 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); 692 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref );
684 mNumber->setFocus(); 693 mNumber->setFocus();
685 mNumber->setSelection( 0, 1024); 694 mNumber->setSelection( 0, 1024);
686} 695}
687 696
688KABC::PhoneNumber PhoneTypeDialog::phoneNumber() 697KABC::PhoneNumber PhoneTypeDialog::phoneNumber()
689{ 698{
690 mPhoneNumber.setNumber( mNumber->text() ); 699 mPhoneNumber.setNumber( mNumber->text() );
691 700
692 int type = 0; 701 int type = 0;
693 for ( int i = 0; i < mGroup->count(); ++i ) { 702 for ( int i = 0; i < mGroup->count(); ++i ) {
694 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 703 QCheckBox *box = (QCheckBox*)mGroup->find( i );
695 if ( box->isChecked() ) 704 if ( box->isChecked() )
696 type += mTypeList[ i ]; 705 type += mTypeList[ i ];
697 } 706 }
698 707
699 if ( mPreferredBox->isChecked() ) 708 if ( mPreferredBox->isChecked() )
700 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); 709 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref );
701 else 710 else
702 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); 711 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref );
703 712
704 return mPhoneNumber; 713 return mPhoneNumber;
705} 714}
706#endif 715#endif
707#ifndef KAB_EMBEDDED 716#ifndef KAB_EMBEDDED
708#include "phoneeditwidget.moc" 717#include "phoneeditwidget.moc"
709#endif //KAB_EMBEDDED 718#endif //KAB_EMBEDDED