-rw-r--r-- | kabc/address.cpp | 27 | ||||
-rw-r--r-- | kabc/address.h | 2 | ||||
-rw-r--r-- | kabc/addressee.cpp | 25 | ||||
-rw-r--r-- | kabc/addressee.h | 4 | ||||
-rw-r--r-- | kaddressbook/views/kaddressbookcardview.cpp | 22 | ||||
-rw-r--r-- | kaddressbook/views/kaddressbookiconview.cpp | 39 | ||||
-rw-r--r-- | kaddressbook/views/kaddressbooktableview.cpp | 16 |
7 files changed, 128 insertions, 7 deletions
diff --git a/kabc/address.cpp b/kabc/address.cpp index 5ffe511..6151f9e 100644 --- a/kabc/address.cpp +++ b/kabc/address.cpp | |||
@@ -72,64 +72,91 @@ bool Address::operator!=( const Address &a ) const | |||
72 | { | 72 | { |
73 | return !( a == *this ); | 73 | return !( a == *this ); |
74 | } | 74 | } |
75 | 75 | ||
76 | bool Address::isEmpty() const | 76 | bool Address::isEmpty() const |
77 | { | 77 | { |
78 | if ( mPostOfficeBox.isEmpty() && | 78 | if ( mPostOfficeBox.isEmpty() && |
79 | mExtended.isEmpty() && | 79 | mExtended.isEmpty() && |
80 | mStreet.isEmpty() && | 80 | mStreet.isEmpty() && |
81 | mLocality.isEmpty() && | 81 | mLocality.isEmpty() && |
82 | mRegion.isEmpty() && | 82 | mRegion.isEmpty() && |
83 | mPostalCode.isEmpty() && | 83 | mPostalCode.isEmpty() && |
84 | mCountry.isEmpty() && | 84 | mCountry.isEmpty() && |
85 | mLabel.isEmpty() ) { | 85 | mLabel.isEmpty() ) { |
86 | return true; | 86 | return true; |
87 | } | 87 | } |
88 | return false; | 88 | return false; |
89 | } | 89 | } |
90 | 90 | ||
91 | QStringList Address::asList() | 91 | QStringList Address::asList() |
92 | { | 92 | { |
93 | QStringList result; | 93 | QStringList result; |
94 | if ( ! mPostOfficeBox.isEmpty() )result.append(mPostOfficeBox); | 94 | if ( ! mPostOfficeBox.isEmpty() )result.append(mPostOfficeBox); |
95 | if ( ! mExtended.isEmpty())result.append(mExtended); | 95 | if ( ! mExtended.isEmpty())result.append(mExtended); |
96 | if ( ! mStreet.isEmpty())result.append(mStreet); | 96 | if ( ! mStreet.isEmpty())result.append(mStreet); |
97 | if ( ! mLocality.isEmpty() )result.append(mLocality); | 97 | if ( ! mLocality.isEmpty() )result.append(mLocality); |
98 | if ( ! mRegion.isEmpty())result.append(mRegion); | 98 | if ( ! mRegion.isEmpty())result.append(mRegion); |
99 | if ( ! mPostalCode.isEmpty())result.append(mPostalCode); | 99 | if ( ! mPostalCode.isEmpty())result.append(mPostalCode); |
100 | if ( ! mCountry.isEmpty())result.append(mCountry); | 100 | if ( ! mCountry.isEmpty())result.append(mCountry); |
101 | if ( ! mLabel.isEmpty() )result.append(mLabel); | 101 | if ( ! mLabel.isEmpty() )result.append(mLabel); |
102 | return result; | 102 | return result; |
103 | } | 103 | } |
104 | |||
105 | bool Address::matchAddress( QRegExp* re ) const | ||
106 | { | ||
107 | |||
108 | #if QT_VERSION >= 0x030000 | ||
109 | if (re->search( mPostOfficeBox ) == 0) return true; | ||
110 | if (re->search( mExtended ) == 0) return true; | ||
111 | if (re->search( mStreet ) == 0) return true; | ||
112 | if (re->search( mLocality ) == 0) return true; | ||
113 | if (re->search( mRegion ) == 0) return true; | ||
114 | if (re->search( mPostalCode ) == 0) return true; | ||
115 | if (re->search( mCountry ) == 0) return true; | ||
116 | if (re->search( mLabel ) == 0) return true; | ||
117 | #else | ||
118 | if (re->match( mPostOfficeBox ) == 0) return true; | ||
119 | if (re->match( mExtended ) == 0) return true; | ||
120 | if (re->match( mStreet ) == 0) return true; | ||
121 | if (re->match( mLocality ) == 0) return true; | ||
122 | if (re->match( mRegion ) == 0) return true; | ||
123 | if (re->match( mPostalCode ) == 0) return true; | ||
124 | if (re->match( mCountry ) == 0) return true; | ||
125 | if (re->match( mLabel ) == 0) return true; | ||
126 | #endif | ||
127 | |||
128 | return false; | ||
129 | } | ||
130 | |||
104 | void Address::clear() | 131 | void Address::clear() |
105 | { | 132 | { |
106 | *this = Address(); | 133 | *this = Address(); |
107 | } | 134 | } |
108 | 135 | ||
109 | void Address::setId( const QString &id ) | 136 | void Address::setId( const QString &id ) |
110 | { | 137 | { |
111 | mEmpty = false; | 138 | mEmpty = false; |
112 | 139 | ||
113 | mId = id; | 140 | mId = id; |
114 | } | 141 | } |
115 | 142 | ||
116 | QString Address::id() const | 143 | QString Address::id() const |
117 | { | 144 | { |
118 | return mId; | 145 | return mId; |
119 | } | 146 | } |
120 | 147 | ||
121 | void Address::setType( int type ) | 148 | void Address::setType( int type ) |
122 | { | 149 | { |
123 | mEmpty = false; | 150 | mEmpty = false; |
124 | 151 | ||
125 | mType = type; | 152 | mType = type; |
126 | } | 153 | } |
127 | 154 | ||
128 | int Address::type() const | 155 | int Address::type() const |
129 | { | 156 | { |
130 | return mType; | 157 | return mType; |
131 | } | 158 | } |
132 | 159 | ||
133 | QString Address::typeLabel() const | 160 | QString Address::typeLabel() const |
134 | { | 161 | { |
135 | QString label; | 162 | QString label; |
diff --git a/kabc/address.h b/kabc/address.h index 37dd851..38ad20b 100644 --- a/kabc/address.h +++ b/kabc/address.h | |||
@@ -1,64 +1,65 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of libkabc. | 2 | This file is part of libkabc. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Library General Public | 6 | modify it under the terms of the GNU Library General Public |
7 | License as published by the Free Software Foundation; either | 7 | License as published by the Free Software Foundation; either |
8 | version 2 of the License, or (at your option) any later version. | 8 | version 2 of the License, or (at your option) any later version. |
9 | 9 | ||
10 | This library is distributed in the hope that it will be useful, | 10 | This library 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 GNU | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | Library General Public License for more details. | 13 | Library General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU Library General Public License | 15 | You should have received a copy of the GNU Library General Public License |
16 | along with this library; see the file COPYING.LIB. If not, write to | 16 | along with this library; see the file COPYING.LIB. If not, write to |
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 | Boston, MA 02111-1307, USA. | 18 | Boston, MA 02111-1307, USA. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | /* | 21 | /* |
22 | Enhanced Version of the file for platform independent KDE tools. | 22 | Enhanced Version of the file for platform independent KDE tools. |
23 | Copyright (c) 2004 Ulf Schenk | 23 | Copyright (c) 2004 Ulf Schenk |
24 | 24 | ||
25 | $Id$ | 25 | $Id$ |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #ifndef KABC_ADDRESS_H | 28 | #ifndef KABC_ADDRESS_H |
29 | #define KABC_ADDRESS_H | 29 | #define KABC_ADDRESS_H |
30 | 30 | ||
31 | #include <qmap.h> | 31 | #include <qmap.h> |
32 | #include <qstring.h> | 32 | #include <qstring.h> |
33 | #include <qregexp.h> | ||
33 | #include <qstringlist.h> | 34 | #include <qstringlist.h> |
34 | #include <qvaluelist.h> | 35 | #include <qvaluelist.h> |
35 | 36 | ||
36 | // template tags for address formatting localization | 37 | // template tags for address formatting localization |
37 | #define KABC_FMTTAG_realname QString("%n") | 38 | #define KABC_FMTTAG_realname QString("%n") |
38 | #define KABC_FMTTAG_REALNAME QString("%N") | 39 | #define KABC_FMTTAG_REALNAME QString("%N") |
39 | #define KABC_FMTTAG_company QString("%cm") | 40 | #define KABC_FMTTAG_company QString("%cm") |
40 | #define KABC_FMTTAG_COMPANY QString("%CM") | 41 | #define KABC_FMTTAG_COMPANY QString("%CM") |
41 | #define KABC_FMTTAG_pobox QString("%p") | 42 | #define KABC_FMTTAG_pobox QString("%p") |
42 | #define KABC_FMTTAG_street QString("%s") | 43 | #define KABC_FMTTAG_street QString("%s") |
43 | #define KABC_FMTTAG_STREET QString("%S") | 44 | #define KABC_FMTTAG_STREET QString("%S") |
44 | #define KABC_FMTTAG_zipcode QString("%z") | 45 | #define KABC_FMTTAG_zipcode QString("%z") |
45 | #define KABC_FMTTAG_location QString("%l") | 46 | #define KABC_FMTTAG_location QString("%l") |
46 | #define KABC_FMTTAG_LOCATION QString("%L") | 47 | #define KABC_FMTTAG_LOCATION QString("%L") |
47 | #define KABC_FMTTAG_region QString("%r") | 48 | #define KABC_FMTTAG_region QString("%r") |
48 | #define KABC_FMTTAG_REGION QString("%R") | 49 | #define KABC_FMTTAG_REGION QString("%R") |
49 | #define KABC_FMTTAG_newline QString("\\n") | 50 | #define KABC_FMTTAG_newline QString("\\n") |
50 | #define KABC_FMTTAG_condcomma QString("%,") | 51 | #define KABC_FMTTAG_condcomma QString("%,") |
51 | #define KABC_FMTTAG_condwhite QString("%w") | 52 | #define KABC_FMTTAG_condwhite QString("%w") |
52 | #define KABC_FMTTAG_purgeempty QString("%0") | 53 | #define KABC_FMTTAG_purgeempty QString("%0") |
53 | 54 | ||
54 | namespace KABC { | 55 | namespace KABC { |
55 | 56 | ||
56 | /** | 57 | /** |
57 | @short Postal address information. | 58 | @short Postal address information. |
58 | 59 | ||
59 | This class represents information about a postal address. | 60 | This class represents information about a postal address. |
60 | */ | 61 | */ |
61 | class Address | 62 | class Address |
62 | { | 63 | { |
63 | friend QDataStream &operator<<( QDataStream &, const Address & ); | 64 | friend QDataStream &operator<<( QDataStream &, const Address & ); |
64 | friend QDataStream &operator>>( QDataStream &, Address & ); | 65 | friend QDataStream &operator>>( QDataStream &, Address & ); |
@@ -66,64 +67,65 @@ class Address | |||
66 | public: | 67 | public: |
67 | /** | 68 | /** |
68 | List of addresses. | 69 | List of addresses. |
69 | */ | 70 | */ |
70 | typedef QValueList<Address> List; | 71 | typedef QValueList<Address> List; |
71 | typedef QValueList<int> TypeList; | 72 | typedef QValueList<int> TypeList; |
72 | 73 | ||
73 | /** | 74 | /** |
74 | Address types: | 75 | Address types: |
75 | 76 | ||
76 | @li @p Dom - domestic | 77 | @li @p Dom - domestic |
77 | @li @p Intl - international | 78 | @li @p Intl - international |
78 | @li @p Postal - postal | 79 | @li @p Postal - postal |
79 | @li @p Parcel - parcel | 80 | @li @p Parcel - parcel |
80 | @li @p Home - home address | 81 | @li @p Home - home address |
81 | @li @p Work - address at work | 82 | @li @p Work - address at work |
82 | @li @p Pref - preferred address | 83 | @li @p Pref - preferred address |
83 | */ | 84 | */ |
84 | enum Type { Dom = 1, Intl = 2, Postal = 4, Parcel = 8, Home = 16, Work = 32, | 85 | enum Type { Dom = 1, Intl = 2, Postal = 4, Parcel = 8, Home = 16, Work = 32, |
85 | Pref = 64 }; | 86 | Pref = 64 }; |
86 | 87 | ||
87 | /** | 88 | /** |
88 | Constructor that creates an empty Address, which is initialized | 89 | Constructor that creates an empty Address, which is initialized |
89 | with a unique id (see @ref id()). | 90 | with a unique id (see @ref id()). |
90 | */ | 91 | */ |
91 | Address(); | 92 | Address(); |
92 | 93 | ||
93 | /** | 94 | /** |
94 | This is like @ref Address() just above, with the difference | 95 | This is like @ref Address() just above, with the difference |
95 | that you can specify the type. | 96 | that you can specify the type. |
96 | */ | 97 | */ |
97 | Address( int ); | 98 | Address( int ); |
99 | bool matchAddress( QRegExp* searchExp ) const; | ||
98 | 100 | ||
99 | bool operator==( const Address & ) const; | 101 | bool operator==( const Address & ) const; |
100 | bool operator!=( const Address & ) const; | 102 | bool operator!=( const Address & ) const; |
101 | 103 | ||
102 | /** | 104 | /** |
103 | Returns true, if the address is empty. | 105 | Returns true, if the address is empty. |
104 | */ | 106 | */ |
105 | bool isEmpty() const; | 107 | bool isEmpty() const; |
106 | 108 | ||
107 | /** | 109 | /** |
108 | Clears all entries of the address. | 110 | Clears all entries of the address. |
109 | */ | 111 | */ |
110 | void clear(); | 112 | void clear(); |
111 | QStringList asList(); | 113 | QStringList asList(); |
112 | 114 | ||
113 | /** | 115 | /** |
114 | Sets the unique id. | 116 | Sets the unique id. |
115 | */ | 117 | */ |
116 | void setId( const QString & ); | 118 | void setId( const QString & ); |
117 | 119 | ||
118 | /* | 120 | /* |
119 | Returns the unique id. | 121 | Returns the unique id. |
120 | */ | 122 | */ |
121 | QString id() const; | 123 | QString id() const; |
122 | 124 | ||
123 | /** | 125 | /** |
124 | Sets the type of address. See enum for definiton of types. | 126 | Sets the type of address. See enum for definiton of types. |
125 | 127 | ||
126 | @param type type, can be a bitwise or of multiple types. | 128 | @param type type, can be a bitwise or of multiple types. |
127 | */ | 129 | */ |
128 | void setType( int type ); | 130 | void setType( int type ); |
129 | 131 | ||
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index 155ce24..7e1e414 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp | |||
@@ -277,65 +277,90 @@ void Addressee::computeCsum(const QString &dev) | |||
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 | } |
309 | bool Addressee::matchAddress( QRegExp* re ) const | ||
310 | { | ||
311 | KABC::Address::List::Iterator addressIter; | ||
312 | for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); | ||
313 | ++addressIter ) { | ||
314 | if ( (*addressIter).matchAddress( re ) ) | ||
315 | return true; | ||
316 | } | ||
317 | return false; | ||
318 | } | ||
319 | bool Addressee::matchPhoneNumber( QRegExp* re ) const | ||
320 | { | ||
321 | KABC::PhoneNumber::List::Iterator phoneIter; | ||
322 | |||
323 | for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) { | ||
324 | #if QT_VERSION >= 0x030000 | ||
325 | if (re->search( (*phoneIter).number() ) == 0) | ||
326 | #else | ||
327 | if (re->match( (*phoneIter).number() ) == 0) | ||
328 | #endif | ||
329 | return true; | ||
309 | 330 | ||
331 | } | ||
332 | return false; | ||
333 | |||
334 | } | ||
310 | void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) | 335 | void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) |
311 | { | 336 | { |
312 | // merge all standard non-outlook fields. | 337 | // merge all standard non-outlook fields. |
313 | //if isSubSet (e.g. mobile phone sync) merge all fields | 338 | //if isSubSet (e.g. mobile phone sync) merge all fields |
314 | 339 | ||
315 | detach(); | 340 | detach(); |
316 | if ( isSubSet ) { | 341 | if ( isSubSet ) { |
317 | if ( mData->name.isEmpty() ) mData->name = ad.mData->name; | 342 | if ( mData->name.isEmpty() ) mData->name = ad.mData->name; |
318 | if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; | 343 | if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; |
319 | if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; | 344 | if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; |
320 | if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; | 345 | if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; |
321 | if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; | 346 | if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; |
322 | if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; | 347 | if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; |
323 | if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; | 348 | if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; |
324 | if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; | 349 | if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; |
325 | if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; | 350 | if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; |
326 | if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; | 351 | if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; |
327 | if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; | 352 | if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; |
328 | if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; | 353 | if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; |
329 | if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; | 354 | if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; |
330 | 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 ; |
331 | if ( !mData->birthday.isValid() ) | 356 | if ( !mData->birthday.isValid() ) |
332 | if ( ad.mData->birthday.isValid()) | 357 | if ( ad.mData->birthday.isValid()) |
333 | mData->birthday = ad.mData->birthday; | 358 | mData->birthday = ad.mData->birthday; |
334 | 359 | ||
335 | } | 360 | } |
336 | if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; | 361 | if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; |
337 | if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; | 362 | if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; |
338 | if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; | 363 | if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; |
339 | if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; | 364 | if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; |
340 | if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; | 365 | if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; |
341 | QStringList t; | 366 | QStringList t; |
diff --git a/kabc/addressee.h b/kabc/addressee.h index a2fbcf5..d1c07cb 100644 --- a/kabc/addressee.h +++ b/kabc/addressee.h | |||
@@ -2,64 +2,65 @@ | |||
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 | /* |
23 | Enhanced Version of the file for platform independent KDE tools. | 23 | Enhanced Version of the file for platform independent KDE tools. |
24 | Copyright (c) 2004 Ulf Schenk | 24 | Copyright (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 <qstringlist.h> | 35 | #include <qstringlist.h> |
35 | #include <qvaluelist.h> | 36 | #include <qvaluelist.h> |
36 | 37 | ||
37 | #include <ksharedptr.h> | 38 | #include <ksharedptr.h> |
38 | #include <kurl.h> | 39 | #include <kurl.h> |
39 | 40 | ||
40 | #include "address.h" | 41 | #include "address.h" |
41 | #include "agent.h" | 42 | #include "agent.h" |
42 | #include "geo.h" | 43 | #include "geo.h" |
43 | #include "key.h" | 44 | #include "key.h" |
44 | #include "phonenumber.h" | 45 | #include "phonenumber.h" |
45 | #include "picture.h" | 46 | #include "picture.h" |
46 | #include "secrecy.h" | 47 | #include "secrecy.h" |
47 | #include "sound.h" | 48 | #include "sound.h" |
48 | #include "timezone.h" | 49 | #include "timezone.h" |
49 | 50 | ||
50 | namespace KABC { | 51 | namespace KABC { |
51 | 52 | ||
52 | class Resource; | 53 | class Resource; |
53 | 54 | ||
54 | /** | 55 | /** |
55 | @short address book entry | 56 | @short address book entry |
56 | 57 | ||
57 | This class represents an entry in the address book. | 58 | This class represents an entry in the address book. |
58 | 59 | ||
59 | 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. |
60 | 61 | ||
61 | 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 |
62 | 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 |
63 | used as label for the corresponding field. | 64 | used as label for the corresponding field. |
64 | 65 | ||
65 | About the name fields: | 66 | About the name fields: |
@@ -621,64 +622,67 @@ class Addressee | |||
621 | */ | 622 | */ |
622 | QString preferredEmail() const; | 623 | QString preferredEmail() const; |
623 | 624 | ||
624 | /** | 625 | /** |
625 | Return list of all email addresses. | 626 | Return list of all email addresses. |
626 | */ | 627 | */ |
627 | QStringList emails() const; | 628 | QStringList emails() const; |
628 | 629 | ||
629 | /** | 630 | /** |
630 | Set the emails to @param. | 631 | Set the emails to @param. |
631 | The first email address gets the preferred one! | 632 | The first email address gets the preferred one! |
632 | @param list The list of email addresses. | 633 | @param list The list of email addresses. |
633 | */ | 634 | */ |
634 | void setEmails( const QStringList& list); | 635 | void setEmails( const QStringList& list); |
635 | 636 | ||
636 | /** | 637 | /** |
637 | Insert a phone number. If a phone number with the same id already exists | 638 | Insert a phone number. If a phone number with the same id already exists |
638 | in this addressee it is not duplicated. | 639 | in this addressee it is not duplicated. |
639 | */ | 640 | */ |
640 | void insertPhoneNumber( const PhoneNumber &phoneNumber ); | 641 | void insertPhoneNumber( const PhoneNumber &phoneNumber ); |
641 | 642 | ||
642 | /** | 643 | /** |
643 | Remove phone number. If no phone number with the given id exists for this | 644 | Remove phone number. If no phone number with the given id exists for this |
644 | addresse nothing happens. | 645 | addresse nothing happens. |
645 | */ | 646 | */ |
646 | void removePhoneNumber( const PhoneNumber &phoneNumber ); | 647 | void removePhoneNumber( const PhoneNumber &phoneNumber ); |
647 | 648 | ||
648 | /** | 649 | /** |
649 | Return phone number, which matches the given type. | 650 | Return phone number, which matches the given type. |
650 | */ | 651 | */ |
651 | PhoneNumber phoneNumber( int type ) const; | 652 | PhoneNumber phoneNumber( int type ) const; |
652 | 653 | ||
654 | bool matchPhoneNumber( QRegExp* searchExp ) const; | ||
655 | bool matchAddress( QRegExp* searchExp ) const; | ||
656 | |||
653 | /** | 657 | /** |
654 | Return list of all phone numbers. | 658 | Return list of all phone numbers. |
655 | */ | 659 | */ |
656 | PhoneNumber::List phoneNumbers() const; | 660 | PhoneNumber::List phoneNumbers() const; |
657 | 661 | ||
658 | /** | 662 | /** |
659 | Return list of phone numbers with a special type. | 663 | Return list of phone numbers with a special type. |
660 | */ | 664 | */ |
661 | PhoneNumber::List phoneNumbers( int type ) const; | 665 | PhoneNumber::List phoneNumbers( int type ) const; |
662 | 666 | ||
663 | /** | 667 | /** |
664 | Return phone number with the given id. | 668 | Return phone number with the given id. |
665 | */ | 669 | */ |
666 | PhoneNumber findPhoneNumber( const QString &id ) const; | 670 | PhoneNumber findPhoneNumber( const QString &id ) const; |
667 | 671 | ||
668 | /** | 672 | /** |
669 | Insert a key. If a key with the same id already exists | 673 | Insert a key. If a key with the same id already exists |
670 | in this addressee it is not duplicated. | 674 | in this addressee it is not duplicated. |
671 | */ | 675 | */ |
672 | void insertKey( const Key &key ); | 676 | void insertKey( const Key &key ); |
673 | 677 | ||
674 | /** | 678 | /** |
675 | Remove a key. If no key with the given id exists for this | 679 | Remove a key. If no key with the given id exists for this |
676 | addresse nothing happens. | 680 | addresse nothing happens. |
677 | */ | 681 | */ |
678 | void removeKey( const Key &key ); | 682 | void removeKey( const Key &key ); |
679 | 683 | ||
680 | /** | 684 | /** |
681 | Return key, which matches the given type. | 685 | Return key, which matches the given type. |
682 | If @p type == Key::Custom you can specify a string | 686 | If @p type == Key::Custom you can specify a string |
683 | that should match. If you leave the string empty, the first | 687 | that should match. If you leave the string empty, the first |
684 | key with a custom value is returned. | 688 | key with a custom value is returned. |
diff --git a/kaddressbook/views/kaddressbookcardview.cpp b/kaddressbook/views/kaddressbookcardview.cpp index ca21016..b503652 100644 --- a/kaddressbook/views/kaddressbookcardview.cpp +++ b/kaddressbook/views/kaddressbookcardview.cpp | |||
@@ -300,76 +300,94 @@ void KAddressBookCardView::writeConfig( KConfig *config ) | |||
300 | void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) | 300 | void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) |
301 | { | 301 | { |
302 | mCardView->clear(); | 302 | mCardView->clear(); |
303 | if ( s.isEmpty() || s == "*" ) { | 303 | if ( s.isEmpty() || s == "*" ) { |
304 | refresh(); | 304 | refresh(); |
305 | return; | 305 | return; |
306 | } | 306 | } |
307 | QRegExp re = getRegExp( s ); | 307 | QRegExp re = getRegExp( s ); |
308 | if (!re.isValid()) | 308 | if (!re.isValid()) |
309 | return; | 309 | return; |
310 | mCardView->viewport()->setUpdatesEnabled( false ); | 310 | mCardView->viewport()->setUpdatesEnabled( false ); |
311 | KABC::Addressee::List addresseeList = addressees(); | 311 | KABC::Addressee::List addresseeList = addressees(); |
312 | KABC::Addressee::List::Iterator it; | 312 | KABC::Addressee::List::Iterator it; |
313 | if ( field ) { | 313 | if ( field ) { |
314 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 314 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
315 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 315 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
316 | continue; | 316 | continue; |
317 | #if QT_VERSION >= 0x030000 | 317 | #if QT_VERSION >= 0x030000 |
318 | if (re.search(field->value( *it ).lower()) == 0) | 318 | if (re.search(field->value( *it ).lower()) == 0) |
319 | #else | 319 | #else |
320 | if (re.match(field->value( *it ).lower()) == 0) | 320 | if (re.match(field->value( *it ).lower()) == 0) |
321 | #endif | 321 | #endif |
322 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | 322 | new AddresseeCardViewItem(fields(), mShowEmptyFields, |
323 | addressBook(), *it, mCardView); | 323 | addressBook(), *it, mCardView); |
324 | 324 | ||
325 | } | 325 | } |
326 | } else { | 326 | } else { |
327 | KABC::Field::List fieldList = allFields(); | 327 | KABC::Field::List fieldList = allFields(); |
328 | KABC::Field::List::ConstIterator fieldIt; | 328 | KABC::Field::List::ConstIterator fieldIt; |
329 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 329 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
330 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 330 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
331 | continue; | 331 | continue; |
332 | bool match = false; | ||
332 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { | 333 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { |
333 | #if QT_VERSION >= 0x030000 | 334 | #if QT_VERSION >= 0x030000 |
334 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) | 335 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) |
335 | #else | 336 | #else |
336 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) | 337 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) |
337 | #endif | 338 | #endif |
338 | { | 339 | { |
339 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | 340 | new AddresseeCardViewItem(fields(), mShowEmptyFields, |
340 | addressBook(), *it, mCardView); | 341 | addressBook(), *it, mCardView); |
342 | match = true; | ||
341 | break; | 343 | break; |
342 | } | 344 | } |
343 | } | 345 | } |
346 | if ( ! match ) { | ||
347 | if ( (*it).matchPhoneNumber( &re ) ) { | ||
348 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | ||
349 | addressBook(), *it, mCardView); | ||
350 | match = true; | ||
351 | break; | ||
352 | } | ||
353 | } | ||
354 | if ( ! match ) { | ||
355 | if ( (*it).matchAddress( &re ) ) { | ||
356 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | ||
357 | addressBook(), *it, mCardView); | ||
358 | match = true; | ||
359 | break; | ||
360 | } | ||
361 | } | ||
344 | } | 362 | } |
345 | } | 363 | } |
346 | mCardView->viewport()->setUpdatesEnabled( true ); | 364 | mCardView->viewport()->setUpdatesEnabled( true ); |
347 | mCardView->viewport()->update(); | 365 | mCardView->viewport()->update(); |
348 | if ( mCardView->firstItem() ) { | 366 | if ( mCardView->firstItem() ) { |
349 | mCardView->setCurrentItem ( mCardView->firstItem() ); | 367 | mCardView->setCurrentItem ( mCardView->firstItem() ); |
350 | mCardView->setSelected ( mCardView->firstItem() , true ); | 368 | mCardView->setSelected ( mCardView->firstItem() , true ); |
351 | } | 369 | } |
352 | else | 370 | else |
353 | emit selected(QString::null); | 371 | emit selected(QString::null); |
354 | } | 372 | } |
355 | QStringList KAddressBookCardView::selectedUids() | 373 | QStringList KAddressBookCardView::selectedUids() |
356 | { | 374 | { |
357 | QStringList uidList; | 375 | QStringList uidList; |
358 | CardViewItem *item; | 376 | CardViewItem *item; |
359 | AddresseeCardViewItem *aItem; | 377 | AddresseeCardViewItem *aItem; |
360 | 378 | ||
361 | for (item = mCardView->firstItem(); item; item = item->nextItem()) | 379 | for (item = mCardView->firstItem(); item; item = item->nextItem()) |
362 | { | 380 | { |
363 | if (item->isSelected()) | 381 | if (item->isSelected()) |
364 | { | 382 | { |
365 | #ifndef KAB_EMBEDDED | 383 | #ifndef KAB_EMBEDDED |
366 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 384 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
367 | #else //KAB_EMBEDDED | 385 | #else //KAB_EMBEDDED |
368 | aItem = (AddresseeCardViewItem*)(item); | 386 | aItem = (AddresseeCardViewItem*)(item); |
369 | #endif //KAB_EMBEDDED | 387 | #endif //KAB_EMBEDDED |
370 | if (aItem) | 388 | if (aItem) |
371 | uidList << aItem->addressee().uid(); | 389 | uidList << aItem->addressee().uid(); |
372 | } | 390 | } |
373 | } | 391 | } |
374 | 392 | ||
375 | return uidList; | 393 | return uidList; |
diff --git a/kaddressbook/views/kaddressbookiconview.cpp b/kaddressbook/views/kaddressbookiconview.cpp index 4bbdf1d..d6ddec3 100644 --- a/kaddressbook/views/kaddressbookiconview.cpp +++ b/kaddressbook/views/kaddressbookiconview.cpp | |||
@@ -121,84 +121,97 @@ class AddresseeIconViewItem : public QIconViewItem | |||
121 | #endif //KAB_EMBEDDED | 121 | #endif //KAB_EMBEDDED |
122 | { | 122 | { |
123 | public: | 123 | public: |
124 | #ifndef KAB_EMBEDDED | 124 | #ifndef KAB_EMBEDDED |
125 | AddresseeIconViewItem(const KABC::Field::List &fields, | 125 | AddresseeIconViewItem(const KABC::Field::List &fields, |
126 | KABC::AddressBook *doc, const KABC::Addressee &a, | 126 | KABC::AddressBook *doc, const KABC::Addressee &a, |
127 | QIconView *parent) | 127 | QIconView *parent) |
128 | : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) | 128 | : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) |
129 | #else //KAB_EMBEDDED | 129 | #else //KAB_EMBEDDED |
130 | AddresseeIconViewItem(const KABC::Field::List &fields, | 130 | AddresseeIconViewItem(const KABC::Field::List &fields, |
131 | KABC::AddressBook *doc, const KABC::Addressee &a, | 131 | KABC::AddressBook *doc, const KABC::Addressee &a, |
132 | QIconView *parent) | 132 | QIconView *parent) |
133 | : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) | 133 | : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) |
134 | #endif //KAB_EMBEDDED | 134 | #endif //KAB_EMBEDDED |
135 | { | 135 | { |
136 | if ( mFields.isEmpty() ) { | 136 | if ( mFields.isEmpty() ) { |
137 | mFields = KABC::Field::defaultFields(); | 137 | mFields = KABC::Field::defaultFields(); |
138 | } | 138 | } |
139 | refresh(); | 139 | refresh(); |
140 | } | 140 | } |
141 | 141 | ||
142 | const KABC::Addressee &addressee() const { return mAddressee; } | 142 | const KABC::Addressee &addressee() const { return mAddressee; } |
143 | 143 | ||
144 | void refresh() | 144 | void refresh() |
145 | { | 145 | { |
146 | // Update our addressee, since it may have changed elsewhere | 146 | // Update our addressee, since it may have changed elsewhere |
147 | mAddressee = mDocument->findByUid(mAddressee.uid()); | 147 | mAddressee = mDocument->findByUid(mAddressee.uid()); |
148 | 148 | ||
149 | if (!mAddressee.isEmpty()) | 149 | if (!mAddressee.isEmpty()) |
150 | setText( mAddressee.givenName() + " " + mAddressee.familyName() ); | 150 | setText( mAddressee.givenName() + " " + mAddressee.familyName() ); |
151 | 151 | ||
152 | QPixmap icon; | 152 | QPixmap icon; |
153 | QPixmap defaultIcon( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ) ); | 153 | |
154 | KABC::Picture pic = mAddressee.photo(); | 154 | KABC::Picture pic = mAddressee.photo(); |
155 | if ( pic.data().isNull() ) | 155 | if ( pic.data().isNull() ) |
156 | pic = mAddressee.logo(); | 156 | pic = mAddressee.logo(); |
157 | 157 | ||
158 | if ( pic.isIntern() && !pic.data().isNull() ) { | 158 | if ( pic.isIntern() && !pic.data().isNull() ) { |
159 | QImage img = pic.data(); | 159 | QImage img = pic.data(); |
160 | #ifndef KAB_EMBEDDED | 160 | #ifndef KAB_EMBEDDED |
161 | if ( img.width() > img.height() ) | 161 | if ( img.width() > img.height() ) |
162 | icon = img.scaleWidth( 32 ); | 162 | icon = img.scaleWidth( 32 ); |
163 | else | 163 | else |
164 | icon = img.scaleHeight( 32 ); | 164 | icon = img.scaleHeight( 32 ); |
165 | #else //KAB_EMBEDDED | 165 | #else //KAB_EMBEDDED |
166 | |||
167 | int wid = pic.data().width(); | ||
168 | int hei = pic.data().height(); | ||
169 | int max = 48; | ||
170 | if ( wid > max || hei > max ) { | ||
171 | if ( wid > hei ) { | ||
172 | hei = (hei*max)/wid; | ||
173 | wid = max; | ||
174 | } else { | ||
175 | wid = (wid*max)/hei; | ||
176 | hei = max; | ||
177 | } | ||
178 | } | ||
166 | qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor"); | 179 | qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor"); |
167 | icon.convertFromImage(img.smoothScale(32, 32)); | 180 | icon.convertFromImage(img.smoothScale(wid, hei)); |
168 | #endif //KAB_EMBEDDED | 181 | #endif //KAB_EMBEDDED |
169 | 182 | ||
170 | } else | 183 | } else { |
171 | icon = defaultIcon; | 184 | icon = KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ); |
172 | 185 | } | |
173 | setPixmap( icon ); | 186 | setPixmap( icon ); |
174 | } | 187 | } |
175 | 188 | ||
176 | private: | 189 | private: |
177 | KABC::Field::List mFields; | 190 | KABC::Field::List mFields; |
178 | KABC::AddressBook *mDocument; | 191 | KABC::AddressBook *mDocument; |
179 | KABC::Addressee mAddressee; | 192 | KABC::Addressee mAddressee; |
180 | }; | 193 | }; |
181 | 194 | ||
182 | /////////////////////////////// | 195 | /////////////////////////////// |
183 | // KAddressBookView | 196 | // KAddressBookView |
184 | 197 | ||
185 | KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab, | 198 | KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab, |
186 | QWidget *parent, const char *name) | 199 | QWidget *parent, const char *name) |
187 | : KAddressBookView( ab, parent, name ) | 200 | : KAddressBookView( ab, parent, name ) |
188 | { | 201 | { |
189 | // Init the GUI | 202 | // Init the GUI |
190 | QVBoxLayout *layout = new QVBoxLayout(viewWidget()); | 203 | QVBoxLayout *layout = new QVBoxLayout(viewWidget()); |
191 | 204 | ||
192 | mIconView = new AddresseeIconView(viewWidget(), "mIconView"); | 205 | mIconView = new AddresseeIconView(viewWidget(), "mIconView"); |
193 | layout->addWidget(mIconView); | 206 | layout->addWidget(mIconView); |
194 | 207 | ||
195 | // Connect up the signals | 208 | // Connect up the signals |
196 | 209 | ||
197 | //US method executed is part of KIconView | 210 | //US method executed is part of KIconView |
198 | //US connect(mIconView, SIGNAL(executed(QIconViewItem *)), | 211 | //US connect(mIconView, SIGNAL(executed(QIconViewItem *)), |
199 | //US this, SLOT(addresseeExecuted(QIconViewItem *))); | 212 | //US this, SLOT(addresseeExecuted(QIconViewItem *))); |
200 | connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), | 213 | connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), |
201 | this, SLOT(addresseeExecuted(QIconViewItem *))); | 214 | this, SLOT(addresseeExecuted(QIconViewItem *))); |
202 | 215 | ||
203 | connect(mIconView, SIGNAL(selectionChanged()), | 216 | connect(mIconView, SIGNAL(selectionChanged()), |
204 | this, SLOT(addresseeSelected())); | 217 | this, SLOT(addresseeSelected())); |
@@ -254,74 +267,90 @@ void KAddressBookIconView::readConfig(KConfig *config) | |||
254 | void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field ) | 267 | void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field ) |
255 | { | 268 | { |
256 | mIconView->clear(); | 269 | mIconView->clear(); |
257 | mIconList.clear(); | 270 | mIconList.clear(); |
258 | if ( s.isEmpty() || s == "*" ) { | 271 | if ( s.isEmpty() || s == "*" ) { |
259 | refresh(); | 272 | refresh(); |
260 | return; | 273 | return; |
261 | } | 274 | } |
262 | QRegExp re = getRegExp( s ); | 275 | QRegExp re = getRegExp( s ); |
263 | if (!re.isValid()) | 276 | if (!re.isValid()) |
264 | return; | 277 | return; |
265 | KABC::Addressee::List addresseeList = addressees(); | 278 | KABC::Addressee::List addresseeList = addressees(); |
266 | KABC::Addressee::List::Iterator it; | 279 | KABC::Addressee::List::Iterator it; |
267 | if ( field ) { | 280 | if ( field ) { |
268 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 281 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
269 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 282 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
270 | continue; | 283 | continue; |
271 | #if QT_VERSION >= 0x030000 | 284 | #if QT_VERSION >= 0x030000 |
272 | if (re.search(field->value( *it ).lower()) == 0) | 285 | if (re.search(field->value( *it ).lower()) == 0) |
273 | #else | 286 | #else |
274 | if (re.match(field->value( *it ).lower()) == 0) | 287 | if (re.match(field->value( *it ).lower()) == 0) |
275 | #endif | 288 | #endif |
276 | mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); | 289 | mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); |
277 | 290 | ||
278 | 291 | ||
279 | } | 292 | } |
280 | } else { | 293 | } else { |
281 | KABC::Field::List fieldList = allFields(); | 294 | KABC::Field::List fieldList = allFields(); |
282 | KABC::Field::List::ConstIterator fieldIt; | 295 | KABC::Field::List::ConstIterator fieldIt; |
283 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 296 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
284 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 297 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
285 | continue; | 298 | continue; |
299 | bool match = false; | ||
286 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { | 300 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { |
287 | #if QT_VERSION >= 0x030000 | 301 | #if QT_VERSION >= 0x030000 |
288 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) | 302 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) |
289 | #else | 303 | #else |
290 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) | 304 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) |
291 | #endif | 305 | #endif |
292 | { | 306 | { |
293 | mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); | 307 | mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); |
308 | match = true; | ||
294 | break; | 309 | break; |
295 | } | 310 | } |
311 | } | ||
312 | if ( ! match ) { | ||
313 | if ( (*it).matchPhoneNumber( &re ) ) { | ||
314 | mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); | ||
315 | match = true; | ||
316 | break; | ||
317 | } | ||
318 | } | ||
319 | if ( ! match ) { | ||
320 | if ( (*it).matchAddress( &re ) ) { | ||
321 | mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); | ||
322 | match = true; | ||
323 | break; | ||
324 | } | ||
296 | } | 325 | } |
297 | } | 326 | } |
298 | } | 327 | } |
299 | mIconView->arrangeItemsInGrid( true ); | 328 | mIconView->arrangeItemsInGrid( true ); |
300 | if ( mIconView->firstItem() ) { | 329 | if ( mIconView->firstItem() ) { |
301 | mIconView->setCurrentItem ( mIconView->firstItem() ); | 330 | mIconView->setCurrentItem ( mIconView->firstItem() ); |
302 | mIconView->setSelected ( mIconView->firstItem() , true ); | 331 | mIconView->setSelected ( mIconView->firstItem() , true ); |
303 | } | 332 | } |
304 | else | 333 | else |
305 | emit selected(QString::null); | 334 | emit selected(QString::null); |
306 | } | 335 | } |
307 | QStringList KAddressBookIconView::selectedUids() | 336 | QStringList KAddressBookIconView::selectedUids() |
308 | { | 337 | { |
309 | QStringList uidList; | 338 | QStringList uidList; |
310 | QIconViewItem *item; | 339 | QIconViewItem *item; |
311 | AddresseeIconViewItem *aItem; | 340 | AddresseeIconViewItem *aItem; |
312 | 341 | ||
313 | for (item = mIconView->firstItem(); item; item = item->nextItem()) | 342 | for (item = mIconView->firstItem(); item; item = item->nextItem()) |
314 | { | 343 | { |
315 | if (item->isSelected()) | 344 | if (item->isSelected()) |
316 | { | 345 | { |
317 | #ifndef KAB_EMBEDDED | 346 | #ifndef KAB_EMBEDDED |
318 | aItem = dynamic_cast<AddresseeIconViewItem*>(item); | 347 | aItem = dynamic_cast<AddresseeIconViewItem*>(item); |
319 | #else //KAB_EMBEDDED | 348 | #else //KAB_EMBEDDED |
320 | aItem = (AddresseeIconViewItem*)(item); | 349 | aItem = (AddresseeIconViewItem*)(item); |
321 | #endif //KAB_EMBEDDED | 350 | #endif //KAB_EMBEDDED |
322 | if (aItem) | 351 | if (aItem) |
323 | uidList << aItem->addressee().uid(); | 352 | uidList << aItem->addressee().uid(); |
324 | } | 353 | } |
325 | } | 354 | } |
326 | 355 | ||
327 | return uidList; | 356 | return uidList; |
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp index 348f491..02fc40a 100644 --- a/kaddressbook/views/kaddressbooktableview.cpp +++ b/kaddressbook/views/kaddressbooktableview.cpp | |||
@@ -141,76 +141,92 @@ void KAddressBookTableView::reconstructListView() | |||
141 | } | 141 | } |
142 | 142 | ||
143 | void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) | 143 | void 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()) == 0) | 162 | if (re.match(field->value( *it ).lower()) == 0) |
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 | bool match = false; | ||
173 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { | 174 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { |
174 | #if QT_VERSION >= 0x030000 | 175 | #if QT_VERSION >= 0x030000 |
175 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) | 176 | if (re.search((*fieldIt)->value( *it ).lower()) == 0) |
176 | #else | 177 | #else |
177 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) | 178 | if (re.match((*fieldIt)->value( *it ).lower()) == 0) |
178 | #endif | 179 | #endif |
179 | { | 180 | { |
180 | //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); | 181 | //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); |
181 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | 182 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); |
183 | match = true; | ||
182 | break; | 184 | break; |
183 | } | 185 | } |
184 | } | 186 | } |
187 | if ( ! match ) { | ||
188 | if ( (*it).matchPhoneNumber( &re ) ) { | ||
189 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | ||
190 | match = true; | ||
191 | break; | ||
192 | } | ||
193 | } | ||
194 | if ( ! match ) { | ||
195 | if ( (*it).matchAddress( &re ) ) { | ||
196 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | ||
197 | match = true; | ||
198 | break; | ||
199 | } | ||
200 | } | ||
185 | } | 201 | } |
186 | } | 202 | } |
187 | // Sometimes the background pixmap gets messed up when we add lots | 203 | // Sometimes the background pixmap gets messed up when we add lots |
188 | // of items. | 204 | // of items. |
189 | //mListView->repaint(); | 205 | //mListView->repaint(); |
190 | if ( mListView->firstChild() ) { | 206 | if ( mListView->firstChild() ) { |
191 | mListView->setCurrentItem ( mListView->firstChild() ); | 207 | mListView->setCurrentItem ( mListView->firstChild() ); |
192 | mListView->setSelected ( mListView->firstChild(), true ); | 208 | mListView->setSelected ( mListView->firstChild(), true ); |
193 | } | 209 | } |
194 | else | 210 | else |
195 | emit selected(QString::null); | 211 | emit selected(QString::null); |
196 | 212 | ||
197 | } | 213 | } |
198 | void KAddressBookTableView::writeConfig(KConfig *config) | 214 | void KAddressBookTableView::writeConfig(KConfig *config) |
199 | { | 215 | { |
200 | KAddressBookView::writeConfig(config); | 216 | KAddressBookView::writeConfig(config); |
201 | 217 | ||
202 | mListView->saveLayout(config, config->group()); | 218 | mListView->saveLayout(config, config->group()); |
203 | } | 219 | } |
204 | 220 | ||
205 | void KAddressBookTableView::readConfig(KConfig *config) | 221 | void KAddressBookTableView::readConfig(KConfig *config) |
206 | { | 222 | { |
207 | KAddressBookView::readConfig( config ); | 223 | KAddressBookView::readConfig( config ); |
208 | // The config could have changed the fields, so we need to reconstruct | 224 | // The config could have changed the fields, so we need to reconstruct |
209 | // the listview. | 225 | // the listview. |
210 | reconstructListView(); | 226 | reconstructListView(); |
211 | 227 | ||
212 | // costum colors? | 228 | // costum colors? |
213 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) | 229 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) |
214 | { | 230 | { |
215 | QPalette p( mListView->palette() ); | 231 | QPalette p( mListView->palette() ); |
216 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); | 232 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); |