summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt2
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt6
-rw-r--r--kabc/addressee.cpp25
-rw-r--r--kabc/addressee.h5
-rw-r--r--kabc/field.cpp20
-rw-r--r--kabc/phonenumber.cpp11
-rw-r--r--kaddressbook/views/kaddressbooktableview.cpp2
7 files changed, 60 insertions, 11 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 53eb428..bc0c62a 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,53 +1,55 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.26 ************ 3********** VERSION 2.0.26 ************
4 4
5And again fixed some bugs. 5And again fixed some bugs.
6Added two more fields to the KA/Pi view config:
7A "Mobile (home)" and a "Mobile (work)" field.
6 8
7********** VERSION 2.0.25 ************ 9********** VERSION 2.0.25 ************
8 10
9And again fixed some bugs. 11And again fixed some bugs.
10 12
11********** VERSION 2.0.24 ************ 13********** VERSION 2.0.24 ************
12 14
13Fixed again a lot of small bugs. 15Fixed again a lot of small bugs.
14Some performance optimizations in date navigator. 16Some performance optimizations in date navigator.
15Month view displays now multi days events on top of each cell, such that it is more likely that all multi days items of one event are in the same row. 17Month view displays now multi days events on top of each cell, such that it is more likely that all multi days items of one event are in the same row.
16 18
17********** VERSION 2.0.23 ************ 19********** VERSION 2.0.23 ************
18 20
19Fixed again a lot of small and strange bugs, e.g. the missing toolbar of KA/Pi after a new installation. 21Fixed again a lot of small and strange bugs, e.g. the missing toolbar of KA/Pi after a new installation.
20Fixed the (agenda) layout of KO/Pi on 5500er. 22Fixed the (agenda) layout of KO/Pi on 5500er.
21Some usebility enhancements (e.g. reselection the current item of the todo view after some changes). 23Some usebility enhancements (e.g. reselection the current item of the todo view after some changes).
22 24
23********** VERSION 2.0.22 ************ 25********** VERSION 2.0.22 ************
24 26
25KO/Pi: 27KO/Pi:
26Fix for creating events/todos via the abgenda context menu. 28Fix for creating events/todos via the abgenda context menu.
27Added option to split toolbar to 3 toolbars. 29Added option to split toolbar to 3 toolbars.
28(Toolbar moving s disabled for this option due to a bug in Qt somewhere). 30(Toolbar moving s disabled for this option due to a bug in Qt somewhere).
29Added option to show one small filter-view-toolbar. 31Added option to show one small filter-view-toolbar.
30Added a print option to the desktop version: 32Added a print option to the desktop version:
31Now you can print out the view of the "Event Viewer". 33Now you can print out the view of the "Event Viewer".
32That means you can print all data of one particular event/todo. 34That means you can print all data of one particular event/todo.
33Added scaling options to printout of Event Viewer and What'sNext View. 35Added scaling options to printout of Event Viewer and What'sNext View.
34Fixed some problems in the month view in "week start sunday" mode. 36Fixed some problems in the month view in "week start sunday" mode.
35KA/Pi: 37KA/Pi:
36Added two more config options. 38Added two more config options.
37Fixed resizing problem of address request dialog when orientation was switched. 39Fixed resizing problem of address request dialog when orientation was switched.
38Cleaned up the menu structure. 40Cleaned up the menu structure.
39Fixed some more problems. 41Fixed some more problems.
40 42
41Fixed the annoying problem that scrolling continued after the key was released in KO/Pi Monthview and the KA/Pi views. 43Fixed the annoying problem that scrolling continued after the key was released in KO/Pi Monthview and the KA/Pi views.
42 44
43And, this is a really cool option (Ben did suggest it): 45And, this is a really cool option (Ben did suggest it):
44Now KO/Pi and KA/Pi can be run from a USB stick: 46Now KO/Pi and KA/Pi can be run from a USB stick:
45All data is read from and written to the stick. 47All data is read from and written to the stick.
46You can enable this in the global configure option TAB with: 48You can enable this in the global configure option TAB with:
47Save using LOCAL storage. 49Save using LOCAL storage.
48Just put KDE-Pim/Pi on a memory stick and you can access all your PIM data on every computer with Windows XP. It will work with the ME and Linux versions as well. I will put a memory stick version for teh next stable release online. 50Just put KDE-Pim/Pi on a memory stick and you can access all your PIM data on every computer with Windows XP. It will work with the ME and Linux versions as well. I will put a memory stick version for teh next stable release online.
49 51
50********** VERSION 2.0.21 ************ 52********** VERSION 2.0.21 ************
51 53
52Fixed another SMTP problem in OM/Pi. 54Fixed another SMTP problem in OM/Pi.
53Some small changed in the new datenavigator in KO/Pi. 55Some small changed in the new datenavigator in KO/Pi.
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index e54e140..f67a34d 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -708,55 +708,55 @@
708{ "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{ "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" },
709{ "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{ "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" },
710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
715{ "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{ "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?" },
716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
717{ "Error","Fehler" }, 717{ "Error","Fehler" },
718{ ""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 Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
720{ "Warning","Warnung" }, 720{ "Warning","Warnung" },
721{ "Select week number","Wähle Wochen Nummer" }, 721{ "Select week number","Wähle Wochen Nummer" },
722{ "Februar","Februar" }, 722{ "Februar","Februar" },
723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
724{ "Password for remote access:","Passwort für fernen Zugriff:" }, 724{ "Password for remote access:","Passwort für fernen Zugriff:" },
725{ "Remote IP address:","Ferne IP Adresse:" }, 725{ "Remote IP address:","Ferne IP Adresse:" },
726{ "Remote port number:","Ferne Port Nummer:" }, 726{ "Remote port number:","Ferne Port Nummer:" },
727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
728{ "Remote from: ","Fern von: " }, 728{ "Remote from: ","Fern von: " },
729{ "Local from: ","Lokal von: " }, 729{ "Local from: ","Lokal von: " },
730{ "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{ "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" },
731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
732{ "Write back","Schreibe zurück" }, 732{ "Write back","Schreibe zurück" },
733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
734{ "Received sync request","Sync Anfrage erhalten" }, 734{ "Received sync request","Sync Anfrage erhalten" },
735{ "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{ "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." },
736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
738{ "Sending file...","Sende Datei..." }, 738{ "Sending file...","Sende Datei..." },
739{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 739{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
740{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 740{ "Receiving synced file...","Gesyncte Daten erhalten..." },
741{ "Received %1 bytes","%1 Bytes erhalten" }, 741{ "Received %1 bytes","%1 Bytes erhalten" },
742{ "Writing file to disk...","Speichere Datei..." }, 742{ "Writing file to disk...","Speichere Datei..." },
743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
745{ "Synchronize!","Synchronisiere!" }, 745{ "Synchronize!","Synchronisiere!" },
746{ "High clock skew!","Großer Uhrzeitunterschied!" }, 746{ "High clock skew!","Großer Uhrzeitunterschied!" },
747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
748{ "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{ "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!" },
749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
752{ "Edit new contact","Bearbeite neuen Kontakt" }, 752{ "Edit new contact","Bearbeite neuen Kontakt" },
753{ "Edit ","Bearbeite " }, 753{ "Edit ","Bearbeite " },
754{ "No contact changed!","Kein Kontakt verändert" }, 754{ "No contact changed!","Kein Kontakt verändert" },
755{ "%1 contacts changed!","%1 Kontakte geändert!" }, 755{ "%1 contacts changed!","%1 Kontakte geändert!" },
756{ "","" }, 756{ "Mobile (home)","Handy (Arbeit)" },
757{ "","" }, 757{ "Mobile (work)","Handy (Privat)" },
758{ "","" }, 758{ "Def.Formatted Name","Def. Format. Name" },
759{ "","" }, 759{ "","" },
760{ "","" }, 760{ "","" },
761{ "","" }, 761{ "","" },
762{ "","" }, \ No newline at end of file 762{ "","" }, \ No newline at end of file
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 39d14bb..7f592e9 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -6,96 +6,97 @@
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 defaultFormattedName;
54 QString familyName; 55 QString familyName;
55 QString givenName; 56 QString givenName;
56 QString additionalName; 57 QString additionalName;
57 QString prefix; 58 QString prefix;
58 QString suffix; 59 QString suffix;
59 QString nickName; 60 QString nickName;
60 QDateTime birthday; 61 QDateTime birthday;
61 QString mailer; 62 QString mailer;
62 TimeZone timeZone; 63 TimeZone timeZone;
63 Geo geo; 64 Geo geo;
64 QString title; 65 QString title;
65 QString role; 66 QString role;
66 QString organization; 67 QString organization;
67 QString note; 68 QString note;
68 QString productId; 69 QString productId;
69 QDateTime revision; 70 QDateTime revision;
70 QString sortString; 71 QString sortString;
71 QString externalUID; 72 QString externalUID;
72 QString originalExternalUID; 73 QString originalExternalUID;
73 KURL url; 74 KURL url;
74 Secrecy secrecy; 75 Secrecy secrecy;
75 Picture logo; 76 Picture logo;
76 Picture photo; 77 Picture photo;
77 Sound sound; 78 Sound sound;
78 Agent agent; 79 Agent agent;
79 QString mExternalId; 80 QString mExternalId;
80 PhoneNumber::List phoneNumbers; 81 PhoneNumber::List phoneNumbers;
81 Address::List addresses; 82 Address::List addresses;
82 Key::List keys; 83 Key::List keys;
83 QStringList emails; 84 QStringList emails;
84 QStringList categories; 85 QStringList categories;
85 QStringList custom; 86 QStringList custom;
86 int mTempSyncStat; 87 int mTempSyncStat;
87 Resource *resource; 88 Resource *resource;
88 89
89 bool empty :1; 90 bool empty :1;
90 bool changed :1; 91 bool changed :1;
91 bool tagged :1; 92 bool tagged :1;
92}; 93};
93 94
94Addressee::Addressee() 95Addressee::Addressee()
95{ 96{
96 mData = new AddresseeData; 97 mData = new AddresseeData;
97 mData->empty = true; 98 mData->empty = true;
98 mData->changed = false; 99 mData->changed = false;
99 mData->resource = 0; 100 mData->resource = 0;
100 mData->mExternalId = ":"; 101 mData->mExternalId = ":";
101 mData->revision = QDateTime ( QDate( 2003,1,1)); 102 mData->revision = QDateTime ( QDate( 2003,1,1));
@@ -702,107 +703,123 @@ QString Addressee::originalExternalUID() const
702void Addressee::setUid( const QString &id ) 703void Addressee::setUid( const QString &id )
703{ 704{
704 if ( id == mData->uid ) return; 705 if ( id == mData->uid ) return;
705 detach(); 706 detach();
706 //qDebug("****setuid %s ", id.latin1()); 707 //qDebug("****setuid %s ", id.latin1());
707 mData->empty = false; 708 mData->empty = false;
708 mData->uid = id; 709 mData->uid = id;
709} 710}
710 711
711const QString Addressee::uid() const 712const QString Addressee::uid() const
712{ 713{
713 if ( mData->uid.isEmpty() ) 714 if ( mData->uid.isEmpty() )
714 mData->uid = KApplication::randomString( 10 ); 715 mData->uid = KApplication::randomString( 10 );
715 716
716 return mData->uid; 717 return mData->uid;
717} 718}
718 719
719QString Addressee::uidLabel() 720QString Addressee::uidLabel()
720{ 721{
721 return i18n("Unique Identifier"); 722 return i18n("Unique Identifier");
722} 723}
723 724
724void Addressee::setName( const QString &name ) 725void Addressee::setName( const QString &name )
725{ 726{
726 if ( name == mData->name ) return; 727 if ( name == mData->name ) return;
727 detach(); 728 detach();
728 mData->empty = false; 729 mData->empty = false;
729 mData->name = name; 730 mData->name = name;
730} 731}
731 732
732QString Addressee::name() const 733QString Addressee::name() const
733{ 734{
734 return mData->name; 735 return mData->name;
735} 736}
736 737
737QString Addressee::nameLabel() 738QString Addressee::nameLabel()
738{ 739{
739 return i18n("Name"); 740 return i18n("Name");
740} 741}
741 742
742 743
743void Addressee::setFormattedName( const QString &formattedName ) 744void Addressee::setFormattedName( const QString &formattedName )
744{ 745{
745 if ( formattedName == mData->formattedName ) return; 746 if ( formattedName == mData->formattedName ) return;
746 detach(); 747 detach();
747 mData->empty = false; 748 mData->empty = false;
748 mData->formattedName = formattedName; 749 mData->formattedName = formattedName;
749} 750}
751void Addressee::setDefaultFormattedName( const QString &formattedName )
752{
753 if ( formattedName == mData->defaultFormattedName ) return;
754 detach();
755 mData->empty = false;
756 mData->defaultFormattedName = formattedName;
757}
750 758
751QString Addressee::formattedName() const 759QString Addressee::formattedName() const
752{ 760{
753 return mData->formattedName; 761 return mData->formattedName;
754} 762}
763QString Addressee::defaultFormattedName() const
764{
765 return mData->defaultFormattedName;
766}
755 767
756QString Addressee::formattedNameLabel() 768QString Addressee::formattedNameLabel()
757{ 769{
758 return i18n("Formatted Name"); 770 return i18n("Formatted Name");
759} 771}
760 772
773QString Addressee::defaultFormattedNameLabel()
774{
775 return i18n("Def.Formatted Name");
776}
777
761 778
762void Addressee::setFamilyName( const QString &familyName ) 779void Addressee::setFamilyName( const QString &familyName )
763{ 780{
764 if ( familyName == mData->familyName ) return; 781 if ( familyName == mData->familyName ) return;
765 detach(); 782 detach();
766 mData->empty = false; 783 mData->empty = false;
767 mData->familyName = familyName; 784 mData->familyName = familyName;
768} 785}
769 786
770QString Addressee::familyName() const 787QString Addressee::familyName() const
771{ 788{
772 return mData->familyName; 789 return mData->familyName;
773} 790}
774 791
775QString Addressee::familyNameLabel() 792QString Addressee::familyNameLabel()
776{ 793{
777 return i18n("Family Name"); 794 return i18n("Family Name");
778} 795}
779 796
780 797
781void Addressee::setGivenName( const QString &givenName ) 798void Addressee::setGivenName( const QString &givenName )
782{ 799{
783 if ( givenName == mData->givenName ) return; 800 if ( givenName == mData->givenName ) return;
784 detach(); 801 detach();
785 mData->empty = false; 802 mData->empty = false;
786 mData->givenName = givenName; 803 mData->givenName = givenName;
787} 804}
788 805
789QString Addressee::givenName() const 806QString Addressee::givenName() const
790{ 807{
791 return mData->givenName; 808 return mData->givenName;
792} 809}
793 810
794QString Addressee::givenNameLabel() 811QString Addressee::givenNameLabel()
795{ 812{
796 return i18n("Given Name"); 813 return i18n("Given Name");
797} 814}
798 815
799 816
800void Addressee::setAdditionalName( const QString &additionalName ) 817void Addressee::setAdditionalName( const QString &additionalName )
801{ 818{
802 if ( additionalName == mData->additionalName ) return; 819 if ( additionalName == mData->additionalName ) return;
803 detach(); 820 detach();
804 mData->empty = false; 821 mData->empty = false;
805 mData->additionalName = additionalName; 822 mData->additionalName = additionalName;
806} 823}
807 824
808QString Addressee::additionalName() const 825QString Addressee::additionalName() const
@@ -935,96 +952,104 @@ QString Addressee::businessAddressStreetLabel()
935 952
936 953
937QString Addressee::businessAddressLocalityLabel() 954QString Addressee::businessAddressLocalityLabel()
938{ 955{
939 return i18n("Business Address Locality"); 956 return i18n("Business Address Locality");
940} 957}
941 958
942 959
943QString Addressee::businessAddressRegionLabel() 960QString Addressee::businessAddressRegionLabel()
944{ 961{
945 return i18n("Business Address Region"); 962 return i18n("Business Address Region");
946} 963}
947 964
948 965
949QString Addressee::businessAddressPostalCodeLabel() 966QString Addressee::businessAddressPostalCodeLabel()
950{ 967{
951 return i18n("Business Address Postal Code"); 968 return i18n("Business Address Postal Code");
952} 969}
953 970
954 971
955QString Addressee::businessAddressCountryLabel() 972QString Addressee::businessAddressCountryLabel()
956{ 973{
957 return i18n("Business Address Country"); 974 return i18n("Business Address Country");
958} 975}
959 976
960 977
961QString Addressee::businessAddressLabelLabel() 978QString Addressee::businessAddressLabelLabel()
962{ 979{
963 return i18n("Business Address Label"); 980 return i18n("Business Address Label");
964} 981}
965 982
966 983
967QString Addressee::homePhoneLabel() 984QString Addressee::homePhoneLabel()
968{ 985{
969 return i18n("Home Phone"); 986 return i18n("Home Phone");
970} 987}
971 988
972 989
973QString Addressee::businessPhoneLabel() 990QString Addressee::businessPhoneLabel()
974{ 991{
975 return i18n("Business Phone"); 992 return i18n("Business Phone");
976} 993}
977 994
978 995
979QString Addressee::mobilePhoneLabel() 996QString Addressee::mobilePhoneLabel()
980{ 997{
981 return i18n("Mobile Phone"); 998 return i18n("Mobile Phone");
982} 999}
1000QString Addressee::mobileWorkPhoneLabel()
1001{
1002 return i18n("Mobile (work)");
1003}
1004QString Addressee::mobileHomePhoneLabel()
1005{
1006 return i18n("Mobile (home)");
1007}
983 1008
984 1009
985QString Addressee::homeFaxLabel() 1010QString Addressee::homeFaxLabel()
986{ 1011{
987 return i18n("Home Fax"); 1012 return i18n("Home Fax");
988} 1013}
989 1014
990 1015
991QString Addressee::businessFaxLabel() 1016QString Addressee::businessFaxLabel()
992{ 1017{
993 return i18n("Business Fax"); 1018 return i18n("Business Fax");
994} 1019}
995 1020
996 1021
997QString Addressee::carPhoneLabel() 1022QString Addressee::carPhoneLabel()
998{ 1023{
999 return i18n("Car Phone"); 1024 return i18n("Car Phone");
1000} 1025}
1001 1026
1002 1027
1003QString Addressee::isdnLabel() 1028QString Addressee::isdnLabel()
1004{ 1029{
1005 return i18n("ISDN"); 1030 return i18n("ISDN");
1006} 1031}
1007 1032
1008 1033
1009QString Addressee::pagerLabel() 1034QString Addressee::pagerLabel()
1010{ 1035{
1011 return i18n("Pager"); 1036 return i18n("Pager");
1012} 1037}
1013 1038
1014QString Addressee::sipLabel() 1039QString Addressee::sipLabel()
1015{ 1040{
1016 return i18n("SIP"); 1041 return i18n("SIP");
1017} 1042}
1018 1043
1019QString Addressee::emailLabel() 1044QString Addressee::emailLabel()
1020{ 1045{
1021 return i18n("Email Address"); 1046 return i18n("Email Address");
1022} 1047}
1023 1048
1024 1049
1025void Addressee::setMailer( const QString &mailer ) 1050void Addressee::setMailer( const QString &mailer )
1026{ 1051{
1027 if ( mailer == mData->mailer ) return; 1052 if ( mailer == mData->mailer ) return;
1028 detach(); 1053 detach();
1029 mData->empty = false; 1054 mData->empty = false;
1030 mData->mailer = mailer; 1055 mData->mailer = mailer;
diff --git a/kabc/addressee.h b/kabc/addressee.h
index 8051fec..0d688f8 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -109,104 +109,107 @@ class Addressee
109 void computeCsum(const QString &dev); 109 void computeCsum(const QString &dev);
110 ulong getCsum4List( const QStringList & attList); 110 ulong getCsum4List( const QStringList & attList);
111 /** 111 /**
112 Return, if the address book entry is empty. 112 Return, if the address book entry is empty.
113 */ 113 */
114 bool isEmpty() const; 114 bool isEmpty() const;
115 void setExternalUID( const QString &id ); 115 void setExternalUID( const QString &id );
116 const QString externalUID() const; 116 const QString externalUID() const;
117 void setOriginalExternalUID( const QString &id ); 117 void setOriginalExternalUID( const QString &id );
118 QString originalExternalUID() const; 118 QString originalExternalUID() const;
119 void mergeContact( const Addressee& ad, bool isSubSet ); 119 void mergeContact( const Addressee& ad, bool isSubSet );
120 void simplifyEmails(); 120 void simplifyEmails();
121 void simplifyAddresses(); 121 void simplifyAddresses();
122 void simplifyPhoneNumbers(); 122 void simplifyPhoneNumbers();
123 void simplifyPhoneNumberTypes(); 123 void simplifyPhoneNumberTypes();
124 bool removeVoice(); 124 bool removeVoice();
125 bool containsAdr(const Addressee& addr ); 125 bool containsAdr(const Addressee& addr );
126 126
127 /** 127 /**
128 Set unique identifier. 128 Set unique identifier.
129 */ 129 */
130 void setUid( const QString &uid ); 130 void setUid( const QString &uid );
131 /** 131 /**
132 Return unique identifier. 132 Return unique identifier.
133 */ 133 */
134 const QString uid() const; 134 const QString uid() const;
135 /** 135 /**
136 Return translated label for uid field. 136 Return translated label for uid field.
137 */ 137 */
138 static QString uidLabel(); 138 static QString uidLabel();
139 139
140 /** 140 /**
141 Set name. 141 Set name.
142 */ 142 */
143 void setName( const QString &name ); 143 void setName( const QString &name );
144 /** 144 /**
145 Return name. 145 Return name.
146 */ 146 */
147 QString name() const; 147 QString name() const;
148 /** 148 /**
149 Return translated label for name field. 149 Return translated label for name field.
150 */ 150 */
151 static QString nameLabel(); 151 static QString nameLabel();
152 152
153 /** 153 /**
154 Set formatted name. 154 Set formatted name.
155 */ 155 */
156 void setFormattedName( const QString &formattedName ); 156 void setFormattedName( const QString &formattedName );
157 void setDefaultFormattedName( const QString &formattedName );
157 /** 158 /**
158 Return formatted name. 159 Return formatted name.
159 */ 160 */
160 QString formattedName() const; 161 QString formattedName() const;
162 QString defaultFormattedName() const;
161 /** 163 /**
162 Return translated label for formattedName field. 164 Return translated label for formattedName field.
163 */ 165 */
164 static QString formattedNameLabel(); 166 static QString formattedNameLabel();
167 static QString defaultFormattedNameLabel();
165 168
166 /** 169 /**
167 Set family name. 170 Set family name.
168 */ 171 */
169 void setFamilyName( const QString &familyName ); 172 void setFamilyName( const QString &familyName );
170 /** 173 /**
171 Return family name. 174 Return family name.
172 */ 175 */
173 QString familyName() const; 176 QString familyName() const;
174 /** 177 /**
175 Return translated label for familyName field. 178 Return translated label for familyName field.
176 */ 179 */
177 static QString familyNameLabel(); 180 static QString familyNameLabel();
178 181
179 /** 182 /**
180 Set given name. 183 Set given name.
181 */ 184 */
182 void setGivenName( const QString &givenName ); 185 void setGivenName( const QString &givenName );
183 /** 186 /**
184 Return given name. 187 Return given name.
185 */ 188 */
186 QString givenName() const; 189 QString givenName() const;
187 /** 190 /**
188 Return translated label for givenName field. 191 Return translated label for givenName field.
189 */ 192 */
190 static QString givenNameLabel(); 193 static QString givenNameLabel();
191 194
192 /** 195 /**
193 Set additional names. 196 Set additional names.
194 */ 197 */
195 void setAdditionalName( const QString &additionalName ); 198 void setAdditionalName( const QString &additionalName );
196 /** 199 /**
197 Return additional names. 200 Return additional names.
198 */ 201 */
199 QString additionalName() const; 202 QString additionalName() const;
200 /** 203 /**
201 Return translated label for additionalName field. 204 Return translated label for additionalName field.
202 */ 205 */
203 static QString additionalNameLabel(); 206 static QString additionalNameLabel();
204 207
205 /** 208 /**
206 Set honorific prefixes. 209 Set honorific prefixes.
207 */ 210 */
208 void setPrefix( const QString &prefix ); 211 void setPrefix( const QString &prefix );
209 /** 212 /**
210 Return honorific prefixes. 213 Return honorific prefixes.
211 */ 214 */
212 QString prefix() const; 215 QString prefix() const;
@@ -283,96 +286,98 @@ class Addressee
283 Return translated label for homeAddressLabel field. 286 Return translated label for homeAddressLabel field.
284 */ 287 */
285 static QString homeAddressLabelLabel(); 288 static QString homeAddressLabelLabel();
286 289
287 /** 290 /**
288 Return translated label for businessAddressStreet field. 291 Return translated label for businessAddressStreet field.
289 */ 292 */
290 static QString businessAddressStreetLabel(); 293 static QString businessAddressStreetLabel();
291 294
292 /** 295 /**
293 Return translated label for businessAddressLocality field. 296 Return translated label for businessAddressLocality field.
294 */ 297 */
295 static QString businessAddressLocalityLabel(); 298 static QString businessAddressLocalityLabel();
296 299
297 /** 300 /**
298 Return translated label for businessAddressRegion field. 301 Return translated label for businessAddressRegion field.
299 */ 302 */
300 static QString businessAddressRegionLabel(); 303 static QString businessAddressRegionLabel();
301 304
302 /** 305 /**
303 Return translated label for businessAddressPostalCode field. 306 Return translated label for businessAddressPostalCode field.
304 */ 307 */
305 static QString businessAddressPostalCodeLabel(); 308 static QString businessAddressPostalCodeLabel();
306 309
307 /** 310 /**
308 Return translated label for businessAddressCountry field. 311 Return translated label for businessAddressCountry field.
309 */ 312 */
310 static QString businessAddressCountryLabel(); 313 static QString businessAddressCountryLabel();
311 314
312 /** 315 /**
313 Return translated label for businessAddressLabel field. 316 Return translated label for businessAddressLabel field.
314 */ 317 */
315 static QString businessAddressLabelLabel(); 318 static QString businessAddressLabelLabel();
316 319
317 /** 320 /**
318 Return translated label for homePhone field. 321 Return translated label for homePhone field.
319 */ 322 */
320 static QString homePhoneLabel(); 323 static QString homePhoneLabel();
321 324
322 /** 325 /**
323 Return translated label for businessPhone field. 326 Return translated label for businessPhone field.
324 */ 327 */
325 static QString businessPhoneLabel(); 328 static QString businessPhoneLabel();
326 329
327 /** 330 /**
328 Return translated label for mobilePhone field. 331 Return translated label for mobilePhone field.
329 */ 332 */
330 static QString mobilePhoneLabel(); 333 static QString mobilePhoneLabel();
334 static QString mobileWorkPhoneLabel();
335 static QString mobileHomePhoneLabel();
331 336
332 /** 337 /**
333 Return translated label for homeFax field. 338 Return translated label for homeFax field.
334 */ 339 */
335 static QString homeFaxLabel(); 340 static QString homeFaxLabel();
336 341
337 /** 342 /**
338 Return translated label for businessFax field. 343 Return translated label for businessFax field.
339 */ 344 */
340 static QString businessFaxLabel(); 345 static QString businessFaxLabel();
341 346
342 /** 347 /**
343 Return translated label for carPhone field. 348 Return translated label for carPhone field.
344 */ 349 */
345 static QString carPhoneLabel(); 350 static QString carPhoneLabel();
346 351
347 /** 352 /**
348 Return translated label for isdn field. 353 Return translated label for isdn field.
349 */ 354 */
350 static QString isdnLabel(); 355 static QString isdnLabel();
351 356
352 /** 357 /**
353 Return translated label for pager field. 358 Return translated label for pager field.
354 */ 359 */
355 static QString pagerLabel(); 360 static QString pagerLabel();
356 361
357 /** 362 /**
358 Return translated label for sip field. 363 Return translated label for sip field.
359 */ 364 */
360 static QString sipLabel(); 365 static QString sipLabel();
361 366
362 /** 367 /**
363 Return translated label for email field. 368 Return translated label for email field.
364 */ 369 */
365 static QString emailLabel(); 370 static QString emailLabel();
366 371
367 /** 372 /**
368 Set mail client. 373 Set mail client.
369 */ 374 */
370 void setMailer( const QString &mailer ); 375 void setMailer( const QString &mailer );
371 /** 376 /**
372 Return mail client. 377 Return mail client.
373 */ 378 */
374 QString mailer() const; 379 QString mailer() const;
375 /** 380 /**
376 Return translated label for mailer field. 381 Return translated label for mailer field.
377 */ 382 */
378 static QString mailerLabel(); 383 static QString mailerLabel();
diff --git a/kabc/field.cpp b/kabc/field.cpp
index 89d0b77..5c561c3 100644
--- a/kabc/field.cpp
+++ b/kabc/field.cpp
@@ -41,298 +41,313 @@ class Field::FieldImpl
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 DefaultFormattedName,
91 MobileWorkPhone,
92 MobileHomePhone
90 }; 93 };
91 94
92 int fieldId() { return mFieldId; } 95 int fieldId() { return mFieldId; }
93 int category() { return mCategory; } 96 int category() { return mCategory; }
94 97
95 QString label() { return mLabel; } 98 QString label() { return mLabel; }
96 QString key() { return mKey; } 99 QString key() { return mKey; }
97 QString app() { return mApp; } 100 QString app() { return mApp; }
98 101
99 private: 102 private:
100 int mFieldId; 103 int mFieldId;
101 int mCategory; 104 int mCategory;
102 105
103 QString mLabel; 106 QString mLabel;
104 QString mKey; 107 QString mKey;
105 QString mApp; 108 QString mApp;
106}; 109};
107 110
108 111
109Field::List Field::mAllFields; 112Field::List Field::mAllFields;
110Field::List Field::mDefaultFields; 113Field::List Field::mDefaultFields;
111Field::List Field::mCustomFields; 114Field::List Field::mCustomFields;
112 115
113 116
114Field::Field( FieldImpl *impl ) 117Field::Field( FieldImpl *impl )
115{ 118{
116 mImpl = impl; 119 mImpl = impl;
117} 120}
118 121
119Field::~Field() 122Field::~Field()
120{ 123{
121 delete mImpl; 124 delete mImpl;
122} 125}
123 126
124QString Field::label() 127QString Field::label()
125{ 128{
126 switch ( mImpl->fieldId() ) { 129 switch ( mImpl->fieldId() ) {
127 case FieldImpl::FormattedName: 130 case FieldImpl::FormattedName:
128 return Addressee::formattedNameLabel(); 131 return Addressee::formattedNameLabel();
132 case FieldImpl::DefaultFormattedName:
133 return Addressee::defaultFormattedNameLabel();
129 case FieldImpl::FamilyName: 134 case FieldImpl::FamilyName:
130 return Addressee::familyNameLabel(); 135 return Addressee::familyNameLabel();
131 case FieldImpl::GivenName: 136 case FieldImpl::GivenName:
132 return Addressee::givenNameLabel(); 137 return Addressee::givenNameLabel();
133 case FieldImpl::AdditionalName: 138 case FieldImpl::AdditionalName:
134 return Addressee::additionalNameLabel(); 139 return Addressee::additionalNameLabel();
135 case FieldImpl::Prefix: 140 case FieldImpl::Prefix:
136 return Addressee::prefixLabel(); 141 return Addressee::prefixLabel();
137 case FieldImpl::Suffix: 142 case FieldImpl::Suffix:
138 return Addressee::suffixLabel(); 143 return Addressee::suffixLabel();
139 case FieldImpl::NickName: 144 case FieldImpl::NickName:
140 return Addressee::nickNameLabel(); 145 return Addressee::nickNameLabel();
141 case FieldImpl::Birthday: 146 case FieldImpl::Birthday:
142 return Addressee::birthdayLabel(); 147 return Addressee::birthdayLabel();
143 case FieldImpl::HomeAddressStreet: 148 case FieldImpl::HomeAddressStreet:
144 return Addressee::homeAddressStreetLabel(); 149 return Addressee::homeAddressStreetLabel();
145 case FieldImpl::HomeAddressLocality: 150 case FieldImpl::HomeAddressLocality:
146 return Addressee::homeAddressLocalityLabel(); 151 return Addressee::homeAddressLocalityLabel();
147 case FieldImpl::HomeAddressRegion: 152 case FieldImpl::HomeAddressRegion:
148 return Addressee::homeAddressRegionLabel(); 153 return Addressee::homeAddressRegionLabel();
149 case FieldImpl::HomeAddressPostalCode: 154 case FieldImpl::HomeAddressPostalCode:
150 return Addressee::homeAddressPostalCodeLabel(); 155 return Addressee::homeAddressPostalCodeLabel();
151 case FieldImpl::HomeAddressCountry: 156 case FieldImpl::HomeAddressCountry:
152 return Addressee::homeAddressCountryLabel(); 157 return Addressee::homeAddressCountryLabel();
153 case FieldImpl::HomeAddressLabel: 158 case FieldImpl::HomeAddressLabel:
154 return Addressee::homeAddressLabelLabel(); 159 return Addressee::homeAddressLabelLabel();
155 case FieldImpl::BusinessAddressStreet: 160 case FieldImpl::BusinessAddressStreet:
156 return Addressee::businessAddressStreetLabel(); 161 return Addressee::businessAddressStreetLabel();
157 case FieldImpl::BusinessAddressLocality: 162 case FieldImpl::BusinessAddressLocality:
158 return Addressee::businessAddressLocalityLabel(); 163 return Addressee::businessAddressLocalityLabel();
159 case FieldImpl::BusinessAddressRegion: 164 case FieldImpl::BusinessAddressRegion:
160 return Addressee::businessAddressRegionLabel(); 165 return Addressee::businessAddressRegionLabel();
161 case FieldImpl::BusinessAddressPostalCode: 166 case FieldImpl::BusinessAddressPostalCode:
162 return Addressee::businessAddressPostalCodeLabel(); 167 return Addressee::businessAddressPostalCodeLabel();
163 case FieldImpl::BusinessAddressCountry: 168 case FieldImpl::BusinessAddressCountry:
164 return Addressee::businessAddressCountryLabel(); 169 return Addressee::businessAddressCountryLabel();
165 case FieldImpl::BusinessAddressLabel: 170 case FieldImpl::BusinessAddressLabel:
166 return Addressee::businessAddressLabelLabel(); 171 return Addressee::businessAddressLabelLabel();
167 case FieldImpl::HomePhone: 172 case FieldImpl::HomePhone:
168 return Addressee::homePhoneLabel(); 173 return Addressee::homePhoneLabel();
169 case FieldImpl::BusinessPhone: 174 case FieldImpl::BusinessPhone:
170 return Addressee::businessPhoneLabel(); 175 return Addressee::businessPhoneLabel();
171 case FieldImpl::MobilePhone: 176 case FieldImpl::MobilePhone:
172 return Addressee::mobilePhoneLabel(); 177 return Addressee::mobilePhoneLabel();
178 case FieldImpl::MobileHomePhone:
179 return Addressee::mobileHomePhoneLabel();
180 case FieldImpl::MobileWorkPhone:
181 return Addressee::mobileWorkPhoneLabel();
173 case FieldImpl::HomeFax: 182 case FieldImpl::HomeFax:
174 return Addressee::homeFaxLabel(); 183 return Addressee::homeFaxLabel();
175 case FieldImpl::BusinessFax: 184 case FieldImpl::BusinessFax:
176 return Addressee::businessFaxLabel(); 185 return Addressee::businessFaxLabel();
177 case FieldImpl::CarPhone: 186 case FieldImpl::CarPhone:
178 return Addressee::carPhoneLabel(); 187 return Addressee::carPhoneLabel();
179 case FieldImpl::Isdn: 188 case FieldImpl::Isdn:
180 return Addressee::isdnLabel(); 189 return Addressee::isdnLabel();
181 case FieldImpl::Pager: 190 case FieldImpl::Pager:
182 return Addressee::pagerLabel(); 191 return Addressee::pagerLabel();
183 case FieldImpl::Email: 192 case FieldImpl::Email:
184 return Addressee::emailLabel(); 193 return Addressee::emailLabel();
185 case FieldImpl::Mailer: 194 case FieldImpl::Mailer:
186 return Addressee::mailerLabel(); 195 return Addressee::mailerLabel();
187 case FieldImpl::Title: 196 case FieldImpl::Title:
188 return Addressee::titleLabel(); 197 return Addressee::titleLabel();
189 case FieldImpl::Role: 198 case FieldImpl::Role:
190 return Addressee::roleLabel(); 199 return Addressee::roleLabel();
191 case FieldImpl::Organization: 200 case FieldImpl::Organization:
192 return Addressee::organizationLabel(); 201 return Addressee::organizationLabel();
193 case FieldImpl::Note: 202 case FieldImpl::Note:
194 return Addressee::noteLabel(); 203 return Addressee::noteLabel();
195 case FieldImpl::Url: 204 case FieldImpl::Url:
196 return Addressee::urlLabel(); 205 return Addressee::urlLabel();
197 case FieldImpl::Resource: 206 case FieldImpl::Resource:
198 return Addressee::resourceLabel(); 207 return Addressee::resourceLabel();
199 case FieldImpl::Category: 208 case FieldImpl::Category:
200 return Addressee::categoryLabel(); 209 return Addressee::categoryLabel();
201 case FieldImpl::Sip: 210 case FieldImpl::Sip:
202 return Addressee::sipLabel(); 211 return Addressee::sipLabel();
203 case FieldImpl::CustomField: 212 case FieldImpl::CustomField:
204 return mImpl->label(); 213 return mImpl->label();
205 default: 214 default:
206 return i18n("Unknown Field"); 215 return i18n("Unknown Field");
207 } 216 }
208} 217}
209 218
210int Field::category() 219int Field::category()
211{ 220{
212 return mImpl->category(); 221 return mImpl->category();
213} 222}
214 223
215QString Field::categoryLabel( int category ) 224QString Field::categoryLabel( int category )
216{ 225{
217 switch ( category ) { 226 switch ( category ) {
218 case All: 227 case All:
219 return i18n("All"); 228 return i18n("All");
220 case Frequent: 229 case Frequent:
221 return i18n("Frequent"); 230 return i18n("Frequent");
222 case Address: 231 case Address:
223 return i18n("Address"); 232 return i18n("Address");
224 case Email: 233 case Email:
225 return i18n("Email"); 234 return i18n("Email");
226 case Personal: 235 case Personal:
227 return i18n("Personal"); 236 return i18n("Personal");
228 case Organization: 237 case Organization:
229 return i18n("Organization"); 238 return i18n("Organization");
230 case CustomCategory: 239 case CustomCategory:
231 return i18n("Custom"); 240 return i18n("Custom");
232 default: 241 default:
233 return i18n("Undefined"); 242 return i18n("Undefined");
234 } 243 }
235} 244}
236 245
237QString Field::value( const KABC::Addressee &a ) 246QString Field::value( const KABC::Addressee &a )
238{ 247{
239 switch ( mImpl->fieldId() ) { 248 switch ( mImpl->fieldId() ) {
240 case FieldImpl::FormattedName: 249 case FieldImpl::FormattedName:
241 return a.formattedName(); 250 return a.formattedName();
251 case FieldImpl::DefaultFormattedName:
252 return a.defaultFormattedName();
242 case FieldImpl::FamilyName: 253 case FieldImpl::FamilyName:
243 return a.familyName(); 254 return a.familyName();
244 case FieldImpl::GivenName: 255 case FieldImpl::GivenName:
245 return a.givenName(); 256 return a.givenName();
246 case FieldImpl::AdditionalName: 257 case FieldImpl::AdditionalName:
247 return a.additionalName(); 258 return a.additionalName();
248 case FieldImpl::Prefix: 259 case FieldImpl::Prefix:
249 return a.prefix(); 260 return a.prefix();
250 case FieldImpl::Suffix: 261 case FieldImpl::Suffix:
251 return a.suffix(); 262 return a.suffix();
252 case FieldImpl::NickName: 263 case FieldImpl::NickName:
253 return a.nickName(); 264 return a.nickName();
254 case FieldImpl::Mailer: 265 case FieldImpl::Mailer:
255 return a.mailer(); 266 return a.mailer();
256 case FieldImpl::Title: 267 case FieldImpl::Title:
257 return a.title(); 268 return a.title();
258 case FieldImpl::Role: 269 case FieldImpl::Role:
259 return a.role(); 270 return a.role();
260 case FieldImpl::Organization: 271 case FieldImpl::Organization:
261 return a.organization(); 272 return a.organization();
262 case FieldImpl::Note: 273 case FieldImpl::Note:
263 return a.note(); 274 return a.note();
264 case FieldImpl::Email: 275 case FieldImpl::Email:
265 return a.preferredEmail(); 276 return a.preferredEmail();
266 case FieldImpl::Birthday: 277 case FieldImpl::Birthday:
267 if ( a.birthday().isValid() ) { 278 if ( a.birthday().isValid() ) {
268//the generated code had the following format: return a.birthday().date().toString( Qt::ISODate ); 279//the generated code had the following format: return a.birthday().date().toString( Qt::ISODate );
269// But Qt::IsoDate was not specified. 280// But Qt::IsoDate was not specified.
270// QString _oldFormat = KGlobal::locale()->dateFormat(); 281// QString _oldFormat = KGlobal::locale()->dateFormat();
271// KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate 282// KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate
272 QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false, KLocale::ISODate); 283 QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false, KLocale::ISODate);
273// KGlobal::locale()->setDateFormat(_oldFormat); 284// KGlobal::locale()->setDateFormat(_oldFormat);
274 return dt; 285 return dt;
275 } 286 }
276 else 287 else
277 return QString::null; 288 return QString::null;
278 case FieldImpl::Url: 289 case FieldImpl::Url:
279 return a.url().prettyURL(); 290 return a.url().prettyURL();
280//US 291//US
281 case FieldImpl::Resource: 292 case FieldImpl::Resource:
282 return a.resource()->resourceName(); 293 return a.resource()->resourceName();
283 case FieldImpl::Category: 294 case FieldImpl::Category:
284 return a.categories().join(","); 295 return a.categories().join(",");
285 case FieldImpl::HomePhone: 296 case FieldImpl::HomePhone:
286 return a.phoneNumber( PhoneNumber::Home ).number(); 297 return a.phoneNumber( PhoneNumber::Home ).number();
287 case FieldImpl::BusinessPhone: 298 case FieldImpl::BusinessPhone:
288 return a.phoneNumber( PhoneNumber::Work ).number(); 299 return a.phoneNumber( PhoneNumber::Work ).number();
289 case FieldImpl::MobilePhone: 300 case FieldImpl::MobilePhone:
290 return a.phoneNumber( PhoneNumber::Cell ).number(); 301 return a.phoneNumber( PhoneNumber::Cell ).number();
302 case FieldImpl::MobileWorkPhone:
303 return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Work ).number();
304 case FieldImpl::MobileHomePhone:
305 return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Home ).number();
291 case FieldImpl::HomeFax: 306 case FieldImpl::HomeFax:
292 return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(); 307 return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
293 case FieldImpl::BusinessFax: 308 case FieldImpl::BusinessFax:
294 return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number(); 309 return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
295 case FieldImpl::CarPhone: 310 case FieldImpl::CarPhone:
296 return a.phoneNumber( PhoneNumber::Car ).number(); 311 return a.phoneNumber( PhoneNumber::Car ).number();
297 case FieldImpl::Isdn: 312 case FieldImpl::Isdn:
298 return a.phoneNumber( PhoneNumber::Isdn ).number(); 313 return a.phoneNumber( PhoneNumber::Isdn ).number();
299 case FieldImpl::Pager: 314 case FieldImpl::Pager:
300 return a.phoneNumber( PhoneNumber::Pager ).number(); 315 return a.phoneNumber( PhoneNumber::Pager ).number();
301 case FieldImpl::Sip: 316 case FieldImpl::Sip:
302 return a.phoneNumber( PhoneNumber::Sip ).number(); 317 return a.phoneNumber( PhoneNumber::Sip ).number();
303 case FieldImpl::HomeAddressStreet: 318 case FieldImpl::HomeAddressStreet:
304 return a.address( Address::Home ).street(); 319 return a.address( Address::Home ).street();
305 case FieldImpl::HomeAddressLocality: 320 case FieldImpl::HomeAddressLocality:
306 return a.address( Address::Home ).locality(); 321 return a.address( Address::Home ).locality();
307 case FieldImpl::HomeAddressRegion: 322 case FieldImpl::HomeAddressRegion:
308 return a.address( Address::Home ).region(); 323 return a.address( Address::Home ).region();
309 case FieldImpl::HomeAddressPostalCode: 324 case FieldImpl::HomeAddressPostalCode:
310 return a.address( Address::Home ).postalCode(); 325 return a.address( Address::Home ).postalCode();
311 case FieldImpl::HomeAddressCountry: 326 case FieldImpl::HomeAddressCountry:
312 return a.address( Address::Home ).country(); 327 return a.address( Address::Home ).country();
313 case FieldImpl::BusinessAddressStreet: 328 case FieldImpl::BusinessAddressStreet:
314 return a.address( Address::Work ).street(); 329 return a.address( Address::Work ).street();
315 case FieldImpl::BusinessAddressLocality: 330 case FieldImpl::BusinessAddressLocality:
316 return a.address( Address::Work ).locality(); 331 return a.address( Address::Work ).locality();
317 case FieldImpl::BusinessAddressRegion: 332 case FieldImpl::BusinessAddressRegion:
318 return a.address( Address::Work ).region(); 333 return a.address( Address::Work ).region();
319 case FieldImpl::BusinessAddressPostalCode: 334 case FieldImpl::BusinessAddressPostalCode:
320 return a.address( Address::Work ).postalCode(); 335 return a.address( Address::Work ).postalCode();
321 case FieldImpl::BusinessAddressCountry: 336 case FieldImpl::BusinessAddressCountry:
322 return a.address( Address::Work ).country(); 337 return a.address( Address::Work ).country();
323 case FieldImpl::CustomField: 338 case FieldImpl::CustomField:
324 return a.custom( mImpl->app(), mImpl->key() ); 339 return a.custom( mImpl->app(), mImpl->key() );
325 default: 340 default:
326 return QString::null; 341 return QString::null;
327 } 342 }
328} 343}
329 344
330bool Field::setValue( KABC::Addressee &a, const QString &value ) 345bool Field::setValue( KABC::Addressee &a, const QString &value )
331{ 346{
332 switch ( mImpl->fieldId() ) { 347 switch ( mImpl->fieldId() ) {
333 case FieldImpl::FormattedName: 348 case FieldImpl::FormattedName:
334 a.setFormattedName( value ); 349 a.setFormattedName( value );
335 return true; 350 return true;
336 case FieldImpl::FamilyName: 351 case FieldImpl::FamilyName:
337 a.setFamilyName( value ); 352 a.setFamilyName( value );
338 return true; 353 return true;
@@ -348,119 +363,122 @@ bool Field::setValue( KABC::Addressee &a, const QString &value )
348 case FieldImpl::Suffix: 363 case FieldImpl::Suffix:
349 a.setSuffix( value ); 364 a.setSuffix( value );
350 return true; 365 return true;
351 case FieldImpl::NickName: 366 case FieldImpl::NickName:
352 a.setNickName( value ); 367 a.setNickName( value );
353 return true; 368 return true;
354 case FieldImpl::Mailer: 369 case FieldImpl::Mailer:
355 a.setMailer( value ); 370 a.setMailer( value );
356 return true; 371 return true;
357 case FieldImpl::Title: 372 case FieldImpl::Title:
358 a.setTitle( value ); 373 a.setTitle( value );
359 return true; 374 return true;
360 case FieldImpl::Role: 375 case FieldImpl::Role:
361 a.setRole( value ); 376 a.setRole( value );
362 return true; 377 return true;
363 case FieldImpl::Organization: 378 case FieldImpl::Organization:
364 a.setOrganization( value ); 379 a.setOrganization( value );
365 return true; 380 return true;
366 case FieldImpl::Note: 381 case FieldImpl::Note:
367 a.setNote( value ); 382 a.setNote( value );
368 return true; 383 return true;
369 case FieldImpl::Birthday: 384 case FieldImpl::Birthday:
370//US 385//US
371//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 ) );
372// 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 ?
373 { 388 {
374 QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate 389 QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate
375 a.setBirthday(dt); 390 a.setBirthday(dt);
376 } 391 }
377 return true; 392 return true;
378 case FieldImpl::CustomField: 393 case FieldImpl::CustomField:
379 a.insertCustom( mImpl->app(), mImpl->key(), value ); 394 a.insertCustom( mImpl->app(), mImpl->key(), value );
380//US never copy the resourcename back to the adressee. 395//US never copy the resourcename back to the adressee.
381 case FieldImpl::Resource: 396 case FieldImpl::Resource:
382 default: 397 default:
383 return false; 398 return false;
384 } 399 }
385} 400}
386 401
387bool Field::isCustom() 402bool Field::isCustom()
388{ 403{
389 return mImpl->fieldId() == FieldImpl::CustomField; 404 return mImpl->fieldId() == FieldImpl::CustomField;
390} 405}
391 406
392Field::List Field::allFields() 407Field::List Field::allFields()
393{ 408{
394 if ( mAllFields.isEmpty() ) { 409 if ( mAllFields.isEmpty() ) {
395 createField( FieldImpl::FormattedName, Frequent ); 410 createField( FieldImpl::FormattedName, Frequent );
411 createField( FieldImpl::DefaultFormattedName, Frequent );
396 createField( FieldImpl::FamilyName, Frequent ); 412 createField( FieldImpl::FamilyName, Frequent );
397 createField( FieldImpl::GivenName, Frequent ); 413 createField( FieldImpl::GivenName, Frequent );
398 createField( FieldImpl::AdditionalName ); 414 createField( FieldImpl::AdditionalName );
399 createField( FieldImpl::Prefix ); 415 createField( FieldImpl::Prefix );
400 createField( FieldImpl::Suffix ); 416 createField( FieldImpl::Suffix );
401 createField( FieldImpl::NickName, Personal ); 417 createField( FieldImpl::NickName, Personal );
402 createField( FieldImpl::Birthday, Personal ); 418 createField( FieldImpl::Birthday, Personal );
403 createField( FieldImpl::Category ); 419 createField( FieldImpl::Category );
404 createField( FieldImpl::HomeAddressStreet, Address|Personal ); 420 createField( FieldImpl::HomeAddressStreet, Address|Personal );
405 createField( FieldImpl::HomeAddressLocality, Address|Personal ); 421 createField( FieldImpl::HomeAddressLocality, Address|Personal );
406 createField( FieldImpl::HomeAddressRegion, Address|Personal ); 422 createField( FieldImpl::HomeAddressRegion, Address|Personal );
407 createField( FieldImpl::HomeAddressPostalCode, Address|Personal ); 423 createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
408 createField( FieldImpl::HomeAddressCountry, Address|Personal ); 424 createField( FieldImpl::HomeAddressCountry, Address|Personal );
409 createField( FieldImpl::HomeAddressLabel, Address|Personal ); 425 createField( FieldImpl::HomeAddressLabel, Address|Personal );
410 createField( FieldImpl::BusinessAddressStreet, Address|Organization ); 426 createField( FieldImpl::BusinessAddressStreet, Address|Organization );
411 createField( FieldImpl::BusinessAddressLocality, Address|Organization ); 427 createField( FieldImpl::BusinessAddressLocality, Address|Organization );
412 createField( FieldImpl::BusinessAddressRegion, Address|Organization ); 428 createField( FieldImpl::BusinessAddressRegion, Address|Organization );
413 createField( FieldImpl::BusinessAddressPostalCode, Address|Organization ); 429 createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
414 createField( FieldImpl::BusinessAddressCountry, Address|Organization ); 430 createField( FieldImpl::BusinessAddressCountry, Address|Organization );
415 createField( FieldImpl::BusinessAddressLabel, Address|Organization ); 431 createField( FieldImpl::BusinessAddressLabel, Address|Organization );
416 createField( FieldImpl::HomePhone, Personal|Frequent ); 432 createField( FieldImpl::HomePhone, Personal|Frequent );
417 createField( FieldImpl::BusinessPhone, Organization|Frequent ); 433 createField( FieldImpl::BusinessPhone, Organization|Frequent );
418 createField( FieldImpl::MobilePhone, Frequent ); 434 createField( FieldImpl::MobilePhone, Frequent );
435 createField( FieldImpl::MobileHomePhone, Frequent );
436 createField( FieldImpl::MobileWorkPhone, Frequent );
419 createField( FieldImpl::HomeFax ); 437 createField( FieldImpl::HomeFax );
420 createField( FieldImpl::BusinessFax ); 438 createField( FieldImpl::BusinessFax );
421 createField( FieldImpl::CarPhone ); 439 createField( FieldImpl::CarPhone );
422 createField( FieldImpl::Isdn ); 440 createField( FieldImpl::Isdn );
423 createField( FieldImpl::Pager ); 441 createField( FieldImpl::Pager );
424 createField( FieldImpl::Email, Email|Frequent ); 442 createField( FieldImpl::Email, Email|Frequent );
425 createField( FieldImpl::Mailer, Email ); 443 createField( FieldImpl::Mailer, Email );
426 createField( FieldImpl::Title, Organization ); 444 createField( FieldImpl::Title, Organization );
427 createField( FieldImpl::Role, Organization ); 445 createField( FieldImpl::Role, Organization );
428 createField( FieldImpl::Organization, Organization ); 446 createField( FieldImpl::Organization, Organization );
429 createField( FieldImpl::Note ); 447 createField( FieldImpl::Note );
430 createField( FieldImpl::Url ); 448 createField( FieldImpl::Url );
431 createField( FieldImpl::Resource ); 449 createField( FieldImpl::Resource );
432 createField( FieldImpl::Sip ); 450 createField( FieldImpl::Sip );
433 } 451 }
434 452
435 return mAllFields; 453 return mAllFields;
436} 454}
437 455
438Field::List Field::defaultFields() 456Field::List Field::defaultFields()
439{ 457{
440 if ( mDefaultFields.isEmpty() ) { 458 if ( mDefaultFields.isEmpty() ) {
441 createDefaultField( FieldImpl::GivenName ); 459 createDefaultField( FieldImpl::GivenName );
442 createDefaultField( FieldImpl::FamilyName ); 460 createDefaultField( FieldImpl::FamilyName );
443 createDefaultField( FieldImpl::Email ); 461 createDefaultField( FieldImpl::Email );
444 } 462 }
445 463
446 return mDefaultFields; 464 return mDefaultFields;
447} 465}
448 466
449void Field::createField( int id, int category ) 467void Field::createField( int id, int category )
450{ 468{
451 mAllFields.append( new Field( new FieldImpl( id, category ) ) ); 469 mAllFields.append( new Field( new FieldImpl( id, category ) ) );
452} 470}
453 471
454void Field::createDefaultField( int id, int category ) 472void Field::createDefaultField( int id, int category )
455{ 473{
456 mDefaultFields.append( new Field( new FieldImpl( id, category ) ) ); 474 mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
457} 475}
458 476
459void Field::deleteFields() 477void Field::deleteFields()
460{ 478{
461 Field::List::ConstIterator it; 479 Field::List::ConstIterator it;
462 480
463 for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) { 481 for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) {
464 delete (*it); 482 delete (*it);
465 } 483 }
466 mAllFields.clear(); 484 mAllFields.clear();
diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp
index 041effc..4c6231d 100644
--- a/kabc/phonenumber.cpp
+++ b/kabc/phonenumber.cpp
@@ -132,105 +132,104 @@ void PhoneNumber::setType( int type )
132int PhoneNumber::type() const 132int PhoneNumber::type() const
133{ 133{
134 return mType; 134 return mType;
135} 135}
136 136
137QString PhoneNumber::typeLabel() const 137QString PhoneNumber::typeLabel() const
138{ 138{
139 QString label; 139 QString label;
140 bool first = true; 140 bool first = true;
141 141
142 TypeList list = typeList(); 142 TypeList list = typeList();
143 143
144 TypeList::Iterator it; 144 TypeList::Iterator it;
145 for ( it = list.begin(); it != list.end(); ++it ) { 145 for ( it = list.begin(); it != list.end(); ++it ) {
146 if ( ( type() & (*it) ) && ( (*it) != Pref ) ) { 146 if ( ( type() & (*it) ) && ( (*it) != Pref ) ) {
147 label.append( ( first ? "" : "/" ) + typeLabel( *it ) ); 147 label.append( ( first ? "" : "/" ) + typeLabel( *it ) );
148 if ( first ) 148 if ( first )
149 first = false; 149 first = false;
150 } 150 }
151 } 151 }
152 152
153 return label; 153 return label;
154} 154}
155 155
156QString PhoneNumber::label() const 156QString PhoneNumber::label() const
157{ 157{
158 return typeLabel( type() ); 158 return typeLabel( type() );
159} 159}
160 160
161PhoneNumber::TypeList PhoneNumber::typeList() 161PhoneNumber::TypeList PhoneNumber::typeList()
162{ 162{
163 TypeList list; 163 TypeList list;
164 164
165 list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video 165 list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video
166 << Bbs << Modem << Car << Isdn << Pcs << Pager << Sip; 166 << Bbs << Modem << Car << Isdn << Pcs << Pager << Sip;
167 167
168 return list; 168 return list;
169} 169}
170 170
171QString PhoneNumber::label( int type ) 171QString PhoneNumber::label( int type )
172{ 172{
173 return typeLabel( type ); 173 return typeLabel( type );
174} 174}
175 175
176QString PhoneNumber::typeLabel( int type ) 176QString PhoneNumber::typeLabel( int type )
177{ 177{
178 QString typeString; 178 QString typeString;
179 179
180 if ((type & Home) == Home)
181 typeString += i18n("Home");
182 else if ((type & Work) == Work)
183 typeString += i18n("Work");
184 180
185 if (!typeString.isEmpty())
186 typeString += " ";
187 if ((type & Cell) == Cell) 181 if ((type & Cell) == Cell)
188 typeString += i18n("Mobile") +" "; 182 typeString += i18n("Mobile") +" ";
183 if ((type & Home) == Home)
184 typeString += i18n("Home")+" ";
185 else if ((type & Work) == Work)
186 typeString += i18n("Work")+" ";
187
189 if ((type & Sip) == Sip) 188 if ((type & Sip) == Sip)
190 typeString += i18n("SIP")+" "; 189 typeString += i18n("SIP")+" ";
191 if ((type & Car) == Car) 190 if ((type & Car) == Car)
192 typeString += i18n("Car")+" "; 191 typeString += i18n("Car")+" ";
193 192
194 if ((type & Fax) == Fax) 193 if ((type & Fax) == Fax)
195 typeString += i18n("Fax"); 194 typeString += i18n("Fax");
196 else if ((type & Msg) == Msg) 195 else if ((type & Msg) == Msg)
197 typeString += i18n("Messenger"); 196 typeString += i18n("Messenger");
198 else if ((type & Video) == Video) 197 else if ((type & Video) == Video)
199 typeString += i18n("Video"); 198 typeString += i18n("Video");
200 else if ((type & Bbs) == Bbs) 199 else if ((type & Bbs) == Bbs)
201 typeString += i18n("Mailbox"); 200 typeString += i18n("Mailbox");
202 else if ((type & Modem) == Modem) 201 else if ((type & Modem) == Modem)
203 typeString += i18n("Modem"); 202 typeString += i18n("Modem");
204 else if ((type & Isdn) == Isdn) 203 else if ((type & Isdn) == Isdn)
205 typeString += i18n("ISDN"); 204 typeString += i18n("ISDN");
206 else if ((type & Pcs) == Pcs) 205 else if ((type & Pcs) == Pcs)
207 typeString += i18n("PCS"); 206 typeString += i18n("PCS");
208 else if ((type & Pager) == Pager) 207 else if ((type & Pager) == Pager)
209 typeString += i18n("Pager"); 208 typeString += i18n("Pager");
210 // add the prefered flag 209 // add the prefered flag
211 /* 210 /*
212 if ((type & Pref) == Pref) 211 if ((type & Pref) == Pref)
213 typeString += i18n("(p)"); 212 typeString += i18n("(p)");
214 */ 213 */
215 //if we still have no match, return "other" 214 //if we still have no match, return "other"
216 if (typeString.isEmpty()) { 215 if (typeString.isEmpty()) {
217 if ((type & Voice) == Voice) 216 if ((type & Voice) == Voice)
218 return i18n("Voice"); 217 return i18n("Voice");
219 else 218 else
220 return i18n("Other"); 219 return i18n("Other");
221 } 220 }
222 221
223 return typeString.stripWhiteSpace(); 222 return typeString.stripWhiteSpace();
224} 223}
225 224
226QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone ) 225QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone )
227{ 226{
228 return s << phone.mId << phone.mType << phone.mNumber; 227 return s << phone.mId << phone.mType << phone.mNumber;
229} 228}
230 229
231QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone ) 230QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone )
232{ 231{
233 s >> phone.mId >> phone.mType >> phone.mNumber; 232 s >> phone.mId >> phone.mType >> phone.mNumber;
234 233
235 return s; 234 return s;
236} 235}
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp
index e322473..565cd1d 100644
--- a/kaddressbook/views/kaddressbooktableview.cpp
+++ b/kaddressbook/views/kaddressbooktableview.cpp
@@ -141,97 +141,97 @@ void KAddressBookTableView::reconstructListView()
141} 141}
142 142
143void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) 143void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field )
144{ 144{
145 mListView->clear(); 145 mListView->clear();
146 if ( s.isEmpty() || s == "*" ) { 146 if ( s.isEmpty() || s == "*" ) {
147 refresh(); 147 refresh();
148 return; 148 return;
149 } 149 }
150 QRegExp re = getRegExp( s ); 150 QRegExp re = getRegExp( s );
151 if (!re.isValid()) 151 if (!re.isValid())
152 return; 152 return;
153 KABC::Addressee::List addresseeList = addressees(); 153 KABC::Addressee::List addresseeList = addressees();
154 KABC::Addressee::List::Iterator it; 154 KABC::Addressee::List::Iterator it;
155 if ( field ) { 155 if ( field ) {
156 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 156 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
157 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) 157 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") )
158 continue; 158 continue;
159#if QT_VERSION >= 0x030000 159#if QT_VERSION >= 0x030000
160 if (re.search(field->value( *it ).lower()) == 0) 160 if (re.search(field->value( *it ).lower()) == 0)
161#else 161#else
162 if (re.match(field->value( *it ).lower()) != -1) 162 if (re.match(field->value( *it ).lower()) != -1)
163#endif 163#endif
164 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); 164 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
165 165
166 } 166 }
167 } else { 167 } else {
168 KABC::Field::List fieldList = allFields(); 168 KABC::Field::List fieldList = allFields();
169 KABC::Field::List::ConstIterator fieldIt; 169 KABC::Field::List::ConstIterator fieldIt;
170 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 170 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
171 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) 171 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") )
172 continue; 172 continue;
173 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 173 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
174#if QT_VERSION >= 0x030000 174#if QT_VERSION >= 0x030000
175 if (re.search((*fieldIt)->value( *it ).lower()) != -1) 175 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
176#else 176#else
177 if (re.match((*fieldIt)->value( *it ).lower()) != -1) 177 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
178#endif 178#endif
179 { 179 {
180 //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); 180 //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() );
181 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); 181 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
182 break; 182 break;
183 } 183 }
184 } 184 }
185 } 185 }
186 } 186 }
187 // Sometimes the background pixmap gets messed up when we add lots 187 // Sometimes the background pixmap gets messed up when we add lots
188 // of items. 188 // of items.
189 mListView->repaint(); 189 //mListView->repaint();
190 if ( mListView->firstChild() ) { 190 if ( mListView->firstChild() ) {
191 mListView->setCurrentItem ( mListView->firstChild() ); 191 mListView->setCurrentItem ( mListView->firstChild() );
192 mListView->setSelected ( mListView->firstChild(), true ); 192 mListView->setSelected ( mListView->firstChild(), true );
193 } 193 }
194 else 194 else
195 emit selected(QString::null); 195 emit selected(QString::null);
196 196
197} 197}
198void KAddressBookTableView::writeConfig(KConfig *config) 198void KAddressBookTableView::writeConfig(KConfig *config)
199{ 199{
200 KAddressBookView::writeConfig(config); 200 KAddressBookView::writeConfig(config);
201 201
202 mListView->saveLayout(config, config->group()); 202 mListView->saveLayout(config, config->group());
203} 203}
204 204
205void KAddressBookTableView::readConfig(KConfig *config) 205void KAddressBookTableView::readConfig(KConfig *config)
206{ 206{
207 KAddressBookView::readConfig( config ); 207 KAddressBookView::readConfig( config );
208 // The config could have changed the fields, so we need to reconstruct 208 // The config could have changed the fields, so we need to reconstruct
209 // the listview. 209 // the listview.
210 reconstructListView(); 210 reconstructListView();
211 211
212 // costum colors? 212 // costum colors?
213 if ( config->readBoolEntry( "EnableCustomColors", false ) ) 213 if ( config->readBoolEntry( "EnableCustomColors", false ) )
214 { 214 {
215 QPalette p( mListView->palette() ); 215 QPalette p( mListView->palette() );
216 QColor c = p.color(QPalette::Normal, QColorGroup::Base ); 216 QColor c = p.color(QPalette::Normal, QColorGroup::Base );
217 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); 217 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) );
218 c = p.color(QPalette::Normal, QColorGroup::Text ); 218 c = p.color(QPalette::Normal, QColorGroup::Text );
219 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); 219 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) );
220 c = p.color(QPalette::Normal, QColorGroup::Button ); 220 c = p.color(QPalette::Normal, QColorGroup::Button );
221 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); 221 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) );
222 c = p.color(QPalette::Normal, QColorGroup::ButtonText ); 222 c = p.color(QPalette::Normal, QColorGroup::ButtonText );
223 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); 223 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) );
224 c = p.color(QPalette::Normal, QColorGroup::Highlight ); 224 c = p.color(QPalette::Normal, QColorGroup::Highlight );
225 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); 225 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) );
226 c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); 226 c = p.color(QPalette::Normal, QColorGroup::HighlightedText );
227 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); 227 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) );
228#ifndef KAB_EMBEDDED 228#ifndef KAB_EMBEDDED
229 c = KGlobalSettings::alternateBackgroundColor(); 229 c = KGlobalSettings::alternateBackgroundColor();
230#else //KAB_EMBEDDED 230#else //KAB_EMBEDDED
231 c = QColor(240, 240, 240); 231 c = QColor(240, 240, 240);
232#endif //KAB_EMBEDDED 232#endif //KAB_EMBEDDED
233 c = config->readColorEntry ("AlternatingBackgroundColor", &c); 233 c = config->readColorEntry ("AlternatingBackgroundColor", &c);
234 mListView->setAlternateColor(c); 234 mListView->setAlternateColor(c);
235 235
236 236
237 //US mListView->viewport()->setPalette( p ); 237 //US mListView->viewport()->setPalette( p );