summaryrefslogtreecommitdiffabout
path: root/kabc
Unidiff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/phonenumber.cpp26
-rw-r--r--kabc/phonenumber.h3
2 files changed, 29 insertions, 0 deletions
diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp
index 0d46ba7..eee25a5 100644
--- a/kabc/phonenumber.cpp
+++ b/kabc/phonenumber.cpp
@@ -97,247 +97,273 @@ int PhoneNumber::getCompatType( int type )
97 return Work; 97 return Work;
98 } 98 }
99 if ((type & Pcs) == Pcs) { 99 if ((type & Pcs) == Pcs) {
100 if ((type & Pref) == Pref) 100 if ((type & Pref) == Pref)
101 return Pcs | Pref; 101 return Pcs | Pref;
102 return Pcs; 102 return Pcs;
103 } 103 }
104 if ((type & Car) == Car) 104 if ((type & Car) == Car)
105 return Car; 105 return Car;
106 if ((type & Pager) == Pager) 106 if ((type & Pager) == Pager)
107 return Pager; 107 return Pager;
108 if ((type & Isdn) == Isdn) 108 if ((type & Isdn) == Isdn)
109 return Isdn; 109 return Isdn;
110 if ((type & Video) == Video) 110 if ((type & Video) == Video)
111 return Video; 111 return Video;
112 112
113 if ((type & Msg) == Msg) 113 if ((type & Msg) == Msg)
114 return Msg; 114 return Msg;
115 if ((type & Fax) == Fax) 115 if ((type & Fax) == Fax)
116 return Fax; 116 return Fax;
117 117
118 if ((type & Pref) == Pref) 118 if ((type & Pref) == Pref)
119 return Pref; 119 return Pref;
120 120
121 return Voice; 121 return Voice;
122 122
123} 123}
124bool PhoneNumber::simplifyNumber() 124bool PhoneNumber::simplifyNumber()
125{ 125{
126 QString Number; 126 QString Number;
127 int i; 127 int i;
128 Number = mNumber.stripWhiteSpace (); 128 Number = mNumber.stripWhiteSpace ();
129 mNumber = ""; 129 mNumber = "";
130 for ( i = 0; i < Number.length(); ++i) { 130 for ( i = 0; i < Number.length(); ++i) {
131 if ( Number.at(i).isDigit() || Number.at(i) == '+'|| Number.at(i) == '*'|| Number.at(i) == '#' ) 131 if ( Number.at(i).isDigit() || Number.at(i) == '+'|| Number.at(i) == '*'|| Number.at(i) == '#' )
132 mNumber += Number.at(i); 132 mNumber += Number.at(i);
133 } 133 }
134 return ( mNumber.length() > 0 ); 134 return ( mNumber.length() > 0 );
135} 135}
136// make cellphone compatible 136// make cellphone compatible
137void PhoneNumber::simplifyType() 137void PhoneNumber::simplifyType()
138{ 138{
139 if ( mType & Fax ) mType = Fax; 139 if ( mType & Fax ) mType = Fax;
140 else if ( mType & Cell ) mType = Cell; 140 else if ( mType & Cell ) mType = Cell;
141 else if ( mType & Work ) mType = Work ; 141 else if ( mType & Work ) mType = Work ;
142 else if ( mType & Home ) mType = Home; 142 else if ( mType & Home ) mType = Home;
143 else mType = Pref; 143 else mType = Pref;
144} 144}
145bool PhoneNumber::contains( const PhoneNumber &p ) 145bool PhoneNumber::contains( const PhoneNumber &p )
146{ 146{
147 PhoneNumber myself; 147 PhoneNumber myself;
148 PhoneNumber other; 148 PhoneNumber other;
149 myself = *this; 149 myself = *this;
150 other = p; 150 other = p;
151 myself.simplifyNumber(); 151 myself.simplifyNumber();
152 other.simplifyNumber(); 152 other.simplifyNumber();
153 if ( myself.number() != other.number ()) 153 if ( myself.number() != other.number ())
154 return false; 154 return false;
155 myself.simplifyType(); 155 myself.simplifyType();
156 other.simplifyType(); 156 other.simplifyType();
157 if ( myself.type() == other.type()) 157 if ( myself.type() == other.type())
158 return true; 158 return true;
159 return false; 159 return false;
160} 160}
161 161
162void PhoneNumber::setId( const QString &id ) 162void PhoneNumber::setId( const QString &id )
163{ 163{
164 mId = id; 164 mId = id;
165} 165}
166 166
167QString PhoneNumber::id() const 167QString PhoneNumber::id() const
168{ 168{
169 return mId; 169 return mId;
170} 170}
171 171
172void PhoneNumber::setNumber( const QString &number ) 172void PhoneNumber::setNumber( const QString &number )
173{ 173{
174 mNumber = number; 174 mNumber = number;
175} 175}
176 176
177QString PhoneNumber::number() const 177QString PhoneNumber::number() const
178{ 178{
179 return mNumber; 179 return mNumber;
180} 180}
181 181
182void PhoneNumber::setType( int type ) 182void PhoneNumber::setType( int type )
183{ 183{
184 mType = type; 184 mType = type;
185} 185}
186 186
187int PhoneNumber::type() const 187int PhoneNumber::type() const
188{ 188{
189 return mType; 189 return mType;
190} 190}
191 191
192QString PhoneNumber::typeLabel() const 192QString PhoneNumber::typeLabel() const
193{ 193{
194 QString label; 194 QString label;
195 bool first = true; 195 bool first = true;
196 196
197 TypeList list = typeList(); 197 TypeList list = typeList();
198 198
199 TypeList::Iterator it; 199 TypeList::Iterator it;
200 for ( it = list.begin(); it != list.end(); ++it ) { 200 for ( it = list.begin(); it != list.end(); ++it ) {
201 if ( ( type() & (*it) ) && ( (*it) != Pref ) ) { 201 if ( ( type() & (*it) ) && ( (*it) != Pref ) ) {
202 label.append( ( first ? "" : "/" ) + typeLabel( *it ) ); 202 label.append( ( first ? "" : "/" ) + typeLabel( *it ) );
203 if ( first ) 203 if ( first )
204 first = false; 204 first = false;
205 } 205 }
206 } 206 }
207 207
208 return label; 208 return label;
209} 209}
210 210
211QString PhoneNumber::label() const 211QString PhoneNumber::label() const
212{ 212{
213 return typeLabel( type() ); 213 return typeLabel( type() );
214} 214}
215 215
216PhoneNumber::TypeList PhoneNumber::typeList() 216PhoneNumber::TypeList PhoneNumber::typeList()
217{ 217{
218 TypeList list; 218 TypeList list;
219 219
220 list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video 220 list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video
221 << Bbs << Modem << Car << Isdn << Pcs << Pager; 221 << Bbs << Modem << Car << Isdn << Pcs << Pager;
222 222
223 return list; 223 return list;
224} 224}
225PhoneNumber::TypeList PhoneNumber::supportedTypeList()
226{
227 static TypeList list;
228 if ( list.count() == 0 )
229 list << (Home| Pref) << (Work| Pref) << Cell << Home << Work << Car << (Work| Msg | Voice) << (Work| Msg) << (Home | Fax) << (Work| Fax) << Fax<< (Pcs|Pref)<< Pcs<< Pager << Isdn << Video << Msg << Pref << Voice;
230 return list;
231}
232QStringList PhoneNumber::supportedTypeListNames()
233{
234 static QStringList list;
235 if ( list.count() == 0 )
236 list << i18n("Home") << i18n("Work") << i18n("Mobile") << i18n("Home2")<< i18n("Work2") << i18n("Mobile2 (Work)") << i18n("Assistent") << i18n("Company") << i18n("Fax (Home)") << i18n("Fax (Work)") << i18n("Fax (Other)") << i18n("SIP") << i18n("VoIP") << i18n("Pager") << i18n("ISDN") << i18n("Video") << i18n("Callback") << i18n("Primary")<< i18n("Other");
237 return list;
238}
239
240int PhoneNumber::typeListIndex4Type(int type )
241{
242 TypeList list = supportedTypeList();
243 int i = 0;
244 while ( i < list.count() ) {
245 if ( list [i] == type )
246 return i;
247 ++i;
248 }
249 return list.count()-1;
250}
225 251
226QString PhoneNumber::label( int type ) 252QString PhoneNumber::label( int type )
227{ 253{
228 return typeLabel( type ); 254 return typeLabel( type );
229} 255}
230 256
231QString PhoneNumber::typeLabel( int type ) 257QString PhoneNumber::typeLabel( int type )
232{ 258{
233 if ((type & Cell) == Cell) 259 if ((type & Cell) == Cell)
234 return i18n("Mobile"); 260 return i18n("Mobile");
235 if ((type & Home) == Home) { 261 if ((type & Home) == Home) {
236 if ((type & Pref) == Pref) 262 if ((type & Pref) == Pref)
237 return i18n("Home"); 263 return i18n("Home");
238 if ((type & Fax) == Fax) 264 if ((type & Fax) == Fax)
239 return i18n("Fax (Home)"); 265 return i18n("Fax (Home)");
240 return i18n("Home2"); 266 return i18n("Home2");
241 } 267 }
242 268
243 if ((type & Work) == Work) { 269 if ((type & Work) == Work) {
244 if ((type & Pref) == Pref) 270 if ((type & Pref) == Pref)
245 return i18n("Work"); 271 return i18n("Work");
246 if ((type & Fax) == Fax) 272 if ((type & Fax) == Fax)
247 return i18n("Fax (Work)"); 273 return i18n("Fax (Work)");
248 if ((type & Msg) == Msg) { 274 if ((type & Msg) == Msg) {
249 if ((type & Voice) == Voice) 275 if ((type & Voice) == Voice)
250 return i18n("Assistent"); 276 return i18n("Assistent");
251 return i18n("Company"); 277 return i18n("Company");
252 } 278 }
253 return i18n("Work2"); 279 return i18n("Work2");
254 } 280 }
255 if ((type & Pcs) == Pcs) { 281 if ((type & Pcs) == Pcs) {
256 if ((type & Pref) == Pref) 282 if ((type & Pref) == Pref)
257 return i18n("SIP"); 283 return i18n("SIP");
258 return i18n("VoIP"); 284 return i18n("VoIP");
259 } 285 }
260 if ((type & Car) == Car) 286 if ((type & Car) == Car)
261 return i18n("Mobile2 (Work)"); 287 return i18n("Mobile2 (Work)");
262 if ((type & Pager) == Pager) 288 if ((type & Pager) == Pager)
263 return i18n("Pager"); 289 return i18n("Pager");
264 if ((type & Isdn) == Isdn) 290 if ((type & Isdn) == Isdn)
265 return i18n("ISDN"); 291 return i18n("ISDN");
266 if ((type & Video) == Video) 292 if ((type & Video) == Video)
267 return i18n("Video"); 293 return i18n("Video");
268 294
269 if ((type & Msg) == Msg) 295 if ((type & Msg) == Msg)
270 return i18n("Callback"); 296 return i18n("Callback");
271 if ((type & Fax) == Fax) 297 if ((type & Fax) == Fax)
272 return i18n("Fax (Other)"); 298 return i18n("Fax (Other)");
273 299
274 if ((type & Pref) == Pref) 300 if ((type & Pref) == Pref)
275 return i18n("Primary"); 301 return i18n("Primary");
276 302
277 303
278 return i18n("Other"); 304 return i18n("Other");
279 305
280 306
281#if 0 307#if 0
282 308
283 309
284 310
285 QString typeString; 311 QString typeString;
286 312
287 313
288 if ((type & Cell) == Cell) 314 if ((type & Cell) == Cell)
289 typeString += i18n("Mobile") +" "; 315 typeString += i18n("Mobile") +" ";
290 if ((type & Home) == Home) 316 if ((type & Home) == Home)
291 typeString += i18n("Home")+" "; 317 typeString += i18n("Home")+" ";
292 else if ((type & Work) == Work) 318 else if ((type & Work) == Work)
293 typeString += i18n("Work")+" "; 319 typeString += i18n("Work")+" ";
294 320
295 if ((type & Sip) == Sip) 321 if ((type & Sip) == Sip)
296 typeString += i18n("SIP")+" "; 322 typeString += i18n("SIP")+" ";
297 if ((type & Car) == Car) 323 if ((type & Car) == Car)
298 typeString += i18n("Car")+" "; 324 typeString += i18n("Car")+" ";
299 325
300 if ((type & Fax) == Fax) 326 if ((type & Fax) == Fax)
301 typeString += i18n("Fax"); 327 typeString += i18n("Fax");
302 else if ((type & Msg) == Msg) 328 else if ((type & Msg) == Msg)
303 typeString += i18n("Messenger"); 329 typeString += i18n("Messenger");
304 else if ((type & Video) == Video) 330 else if ((type & Video) == Video)
305 typeString += i18n("Video"); 331 typeString += i18n("Video");
306 else if ((type & Bbs) == Bbs) 332 else if ((type & Bbs) == Bbs)
307 typeString += i18n("Mailbox"); 333 typeString += i18n("Mailbox");
308 else if ((type & Modem) == Modem) 334 else if ((type & Modem) == Modem)
309 typeString += i18n("Modem"); 335 typeString += i18n("Modem");
310 else if ((type & Isdn) == Isdn) 336 else if ((type & Isdn) == Isdn)
311 typeString += i18n("ISDN"); 337 typeString += i18n("ISDN");
312 else if ((type & Pcs) == Pcs) 338 else if ((type & Pcs) == Pcs)
313 typeString += i18n("PCS"); 339 typeString += i18n("PCS");
314 else if ((type & Pager) == Pager) 340 else if ((type & Pager) == Pager)
315 typeString += i18n("Pager"); 341 typeString += i18n("Pager");
316 // add the prefered flag 342 // add the prefered flag
317 /* 343 /*
318 if ((type & Pref) == Pref) 344 if ((type & Pref) == Pref)
319 typeString += i18n("(p)"); 345 typeString += i18n("(p)");
320 */ 346 */
321 //if we still have no match, return "other" 347 //if we still have no match, return "other"
322 if (typeString.isEmpty()) { 348 if (typeString.isEmpty()) {
323 if ((type & Voice) == Voice) 349 if ((type & Voice) == Voice)
324 return i18n("Voice"); 350 return i18n("Voice");
325 else 351 else
326 return i18n("Other"); 352 return i18n("Other");
327 } 353 }
328 354
329 return typeString.stripWhiteSpace(); 355 return typeString.stripWhiteSpace();
330#endif 356#endif
331} 357}
332 358
333QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone ) 359QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone )
334{ 360{
335 return s << phone.mId << phone.mType << phone.mNumber; 361 return s << phone.mId << phone.mType << phone.mNumber;
336} 362}
337 363
338QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone ) 364QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone )
339{ 365{
340 s >> phone.mId >> phone.mType >> phone.mNumber; 366 s >> phone.mId >> phone.mType >> phone.mNumber;
341 367
342 return s; 368 return s;
343} 369}
diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h
index b9d6a17..feeba6c 100644
--- a/kabc/phonenumber.h
+++ b/kabc/phonenumber.h
@@ -23,148 +23,151 @@ Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#ifndef KABC_PHONENUMBER_H 28#ifndef KABC_PHONENUMBER_H
29#define KABC_PHONENUMBER_H 29#define KABC_PHONENUMBER_H
30 30
31#include <qvaluelist.h> 31#include <qvaluelist.h>
32#include <qstring.h> 32#include <qstring.h>
33 33
34namespace KABC { 34namespace KABC {
35 35
36/** 36/**
37 @short Phonenumber information. 37 @short Phonenumber information.
38 38
39 This class provides phone number information. A phone number is classified by 39 This class provides phone number information. A phone number is classified by
40 a type. The following types are available, it's possible to use multiple types 40 a type. The following types are available, it's possible to use multiple types
41 @ref Types for a number by combining them through a logical or. 41 @ref Types for a number by combining them through a logical or.
42*/ 42*/
43class PhoneNumber 43class PhoneNumber
44{ 44{
45 friend QDataStream &operator<<( QDataStream &, const PhoneNumber & ); 45 friend QDataStream &operator<<( QDataStream &, const PhoneNumber & );
46 friend QDataStream &operator>>( QDataStream &, PhoneNumber & ); 46 friend QDataStream &operator>>( QDataStream &, PhoneNumber & );
47 47
48 public: 48 public:
49 typedef QValueList<PhoneNumber> List; 49 typedef QValueList<PhoneNumber> List;
50 typedef QValueList<int> TypeList; 50 typedef QValueList<int> TypeList;
51 51
52 /** 52 /**
53 @li @p Home - Home number 53 @li @p Home - Home number
54 @li @p Work - Office number 54 @li @p Work - Office number
55 @li @p Msg - Messaging 55 @li @p Msg - Messaging
56 @li @p Pref - Preferred number 56 @li @p Pref - Preferred number
57 @li @p Voice - Voice 57 @li @p Voice - Voice
58 @li @p Fax - Fax machine 58 @li @p Fax - Fax machine
59 @li @p Cell - Cell phone 59 @li @p Cell - Cell phone
60 @li @p Video - Video phone 60 @li @p Video - Video phone
61 @li @p Bbs - Mailbox 61 @li @p Bbs - Mailbox
62 @li @p Modem - Modem 62 @li @p Modem - Modem
63 @li @p Car - Car phone 63 @li @p Car - Car phone
64 @li @p Isdn - ISDN connection 64 @li @p Isdn - ISDN connection
65 @li @p Pcs - Personal Communication Service 65 @li @p Pcs - Personal Communication Service
66 @li @p Pager - Pager 66 @li @p Pager - Pager
67 */ 67 */
68 enum Types { Home = 1, Work = 2, Msg = 4, Pref = 8, Voice = 16, Fax = 32, 68 enum Types { Home = 1, Work = 2, Msg = 4, Pref = 8, Voice = 16, Fax = 32,
69 Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024, 69 Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024,
70 Isdn = 2048, Pcs = 4096, Pager = 8192 }; 70 Isdn = 2048, Pcs = 4096, Pager = 8192 };
71 71
72 /** 72 /**
73 Create an empty phone number object. 73 Create an empty phone number object.
74 */ 74 */
75 PhoneNumber(); 75 PhoneNumber();
76 76
77 /** 77 /**
78 Create a phonenumber object. 78 Create a phonenumber object.
79 79
80 @param number Number 80 @param number Number
81 @param type Type as defined in enum. Multiple types can be 81 @param type Type as defined in enum. Multiple types can be
82 specified by combining them by a logical or. 82 specified by combining them by a logical or.
83 */ 83 */
84 PhoneNumber( const QString &number, int type = Home ); 84 PhoneNumber( const QString &number, int type = Home );
85 85
86 /** 86 /**
87 Destructor. 87 Destructor.
88 */ 88 */
89 ~PhoneNumber(); 89 ~PhoneNumber();
90 90
91 bool operator==( const PhoneNumber & ) const; 91 bool operator==( const PhoneNumber & ) const;
92 bool operator!=( const PhoneNumber & ) const; 92 bool operator!=( const PhoneNumber & ) const;
93 93
94 bool contains( const PhoneNumber &p ); 94 bool contains( const PhoneNumber &p );
95 /** 95 /**
96 Sets the unique identifier. 96 Sets the unique identifier.
97 */ 97 */
98 void setId( const QString &id ); 98 void setId( const QString &id );
99 99
100 /** 100 /**
101 Returns the unique identifier. 101 Returns the unique identifier.
102 */ 102 */
103 QString id() const; 103 QString id() const;
104 104
105 /** 105 /**
106 Sets the number. 106 Sets the number.
107 */ 107 */
108 void setNumber( const QString & ); 108 void setNumber( const QString & );
109 109
110 /** 110 /**
111 Returns the number. 111 Returns the number.
112 */ 112 */
113 QString number() const; 113 QString number() const;
114 114
115 /** 115 /**
116 Sets the type. Multiple types can be specified by combining them by 116 Sets the type. Multiple types can be specified by combining them by
117 a logical or. 117 a logical or.
118 */ 118 */
119 void setType( int ); 119 void setType( int );
120 120
121 /** 121 /**
122 Returns the type. Can be a multiple types combined by a logical or. 122 Returns the type. Can be a multiple types combined by a logical or.
123 */ 123 */
124 int type() const; 124 int type() const;
125 125
126 /** 126 /**
127 Returns a translated string of all types the address has. 127 Returns a translated string of all types the address has.
128 */ 128 */
129 QString typeLabel() const; 129 QString typeLabel() const;
130 130
131 /** 131 /**
132 Returns the translated label for phone number depending on its type. 132 Returns the translated label for phone number depending on its type.
133 */ 133 */
134 QString label() const; 134 QString label() const;
135 135
136 /** 136 /**
137 Returns a list of all available types 137 Returns a list of all available types
138 */ 138 */
139 static TypeList typeList(); 139 static TypeList typeList();
140 140
141 /** 141 /**
142 Returns the translated label for phone number type. 142 Returns the translated label for phone number type.
143 */ 143 */
144 static QString typeLabel( int type ); 144 static QString typeLabel( int type );
145 145
146 /** 146 /**
147 Returns the translated label for phone number type. 147 Returns the translated label for phone number type.
148 @obsolete 148 @obsolete
149 */ 149 */
150 static QString label( int type ); 150 static QString label( int type );
151 static TypeList supportedTypeList();
152 static QStringList supportedTypeListNames();
153 static int typeListIndex4Type(int type );
151 bool simplifyNumber(); 154 bool simplifyNumber();
152 void simplifyType(); 155 void simplifyType();
153 void makeCompat(); 156 void makeCompat();
154 int getCompatType( int type ); 157 int getCompatType( int type );
155 158
156 private: 159 private:
157 void init(); 160 void init();
158 161
159 QString mId; 162 QString mId;
160 163
161 int mType; 164 int mType;
162 QString mNumber; 165 QString mNumber;
163}; 166};
164 167
165QDataStream &operator<<( QDataStream &, const PhoneNumber & ); 168QDataStream &operator<<( QDataStream &, const PhoneNumber & );
166QDataStream &operator>>( QDataStream &, PhoneNumber & ); 169QDataStream &operator>>( QDataStream &, PhoneNumber & );
167 170
168} 171}
169 172
170#endif 173#endif