• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kabc
 

kabc

  • kabc
  • scripts
field.src.cpp
1 /*
2  This file is part of libkabc.
3  Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
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
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include <klocale.h>
22 #include <kconfig.h>
23 #include <kglobal.h>
24 
25 #include "field.h"
26 #include "address.h"
27 
28 using namespace KABC;
29 
30 class Field::FieldImpl
31 {
32  public:
33  FieldImpl( int fieldId, int category = 0,
34  const TQString &label = TQString::null,
35  const TQString &key = TQString::null,
36  const TQString &app = TQString::null )
37  : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
38  mKey( key ), mApp( app ) {}
39 
40  enum FieldId
41  {
42  CustomField,
43  --ENUMS--
44  };
45 
46  int fieldId() { return mFieldId; }
47  int category() { return mCategory; }
48 
49  TQString label() { return mLabel; }
50  TQString key() { return mKey; }
51  TQString app() { return mApp; }
52 
53  private:
54  int mFieldId;
55  int mCategory;
56 
57  TQString mLabel;
58  TQString mKey;
59  TQString mApp;
60 };
61 
62 
63 Field::List Field::mAllFields;
64 Field::List Field::mDefaultFields;
65 Field::List Field::mCustomFields;
66 
67 
68 Field::Field( FieldImpl *impl )
69 {
70  mImpl = impl;
71 }
72 
73 Field::~Field()
74 {
75  delete mImpl;
76 }
77 
78 TQString Field::label()
79 {
80  switch ( mImpl->fieldId() ) {
81  --CASELABEL--
82  case FieldImpl::CustomField:
83  return mImpl->label();
84  default:
85  return i18n("Unknown Field");
86  }
87 }
88 
89 int Field::category()
90 {
91  return mImpl->category();
92 }
93 
94 TQString Field::categoryLabel( int category )
95 {
96  switch ( category ) {
97  case All:
98  return i18n("All");
99  case Frequent:
100  return i18n("Frequent");
101  case Address:
102  return i18n("street/postal","Address");
103  case Email:
104  return i18n("Email");
105  case Personal:
106  return i18n("Personal");
107  case Organization:
108  return i18n("Organization");
109  case CustomCategory:
110  return i18n("Custom");
111  default:
112  return i18n("Undefined");
113  }
114 }
115 
116 TQString Field::value( const KABC::Addressee &a )
117 {
118  switch ( mImpl->fieldId() ) {
119  --CASEVALUE--
120  case FieldImpl::Email:
121  return a.preferredEmail();
122  case FieldImpl::Birthday:
123  if ( a.birthday().isValid() )
124  return a.birthday().date().toString( Qt::ISODate );
125  else
126  return TQString::null;
127  case FieldImpl::Url:
128  return a.url().prettyURL();
129  case FieldImpl::HomePhone:
130  {
131  PhoneNumber::List::ConstIterator it;
132 
133  {
134  // check for preferred number
135  const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
136  for ( it = list.begin(); it != list.end(); ++it )
137  if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
138  return (*it).number();
139  }
140 
141  {
142  // check for normal home number
143  const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home );
144  for ( it = list.begin(); it != list.end(); ++it )
145  if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
146  return (*it).number();
147  }
148 
149  return TQString::null;
150  }
151  case FieldImpl::BusinessPhone:
152  {
153  PhoneNumber::List::ConstIterator it;
154 
155  {
156  // check for preferred number
157  const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
158  for ( it = list.begin(); it != list.end(); ++it )
159  if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
160  return (*it).number();
161  }
162 
163  {
164  // check for normal work number
165  const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work );
166  for ( it = list.begin(); it != list.end(); ++it )
167  if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
168  return (*it).number();
169  }
170 
171  return TQString::null;
172  }
173  case FieldImpl::MobilePhone:
174  return a.phoneNumber( PhoneNumber::Cell ).number();
175  case FieldImpl::HomeFax:
176  return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
177  case FieldImpl::BusinessFax:
178  return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
179  case FieldImpl::CarPhone:
180  return a.phoneNumber( PhoneNumber::Car ).number();
181  case FieldImpl::Isdn:
182  return a.phoneNumber( PhoneNumber::Isdn ).number();
183  case FieldImpl::Pager:
184  return a.phoneNumber( PhoneNumber::Pager ).number();
185  case FieldImpl::HomeAddressStreet:
186  return a.address( Address::Home ).street();
187  case FieldImpl::HomeAddressLocality:
188  return a.address( Address::Home ).locality();
189  case FieldImpl::HomeAddressRegion:
190  return a.address( Address::Home ).region();
191  case FieldImpl::HomeAddressPostalCode:
192  return a.address( Address::Home ).postalCode();
193  case FieldImpl::HomeAddressCountry:
194  return a.address( Address::Home ).country();
195  case FieldImpl::HomeAddressLabel:
196  return a.address( Address::Home ).label();
197  case FieldImpl::BusinessAddressStreet:
198  return a.address( Address::Work ).street();
199  case FieldImpl::BusinessAddressLocality:
200  return a.address( Address::Work ).locality();
201  case FieldImpl::BusinessAddressRegion:
202  return a.address( Address::Work ).region();
203  case FieldImpl::BusinessAddressPostalCode:
204  return a.address( Address::Work ).postalCode();
205  case FieldImpl::BusinessAddressCountry:
206  return a.address( Address::Work ).country();
207  case FieldImpl::BusinessAddressLabel:
208  return a.address( Address::Work ).label();
209  case FieldImpl::CustomField:
210  return a.custom( mImpl->app(), mImpl->key() );
211  default:
212  return TQString::null;
213  }
214 }
215 
216 bool Field::setValue( KABC::Addressee &a, const TQString &value )
217 {
218  switch ( mImpl->fieldId() ) {
219  --CASESETVALUE--
220  case FieldImpl::MobilePhone:
221  {
222  PhoneNumber number = a.phoneNumber( PhoneNumber::Cell );
223  number.setNumber( value );
224  a.insertPhoneNumber( number );
225  return true;
226  }
227  case FieldImpl::HomeFax:
228  {
229  PhoneNumber number = a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
230  number.setNumber( value );
231  a.insertPhoneNumber( number );
232  return true;
233  }
234  case FieldImpl::BusinessFax:
235  {
236  PhoneNumber number = a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
237  number.setNumber( value );
238  a.insertPhoneNumber( number );
239  return true;
240  }
241  case FieldImpl::CarPhone:
242  {
243  PhoneNumber number = a.phoneNumber( PhoneNumber::Car );
244  number.setNumber( value );
245  a.insertPhoneNumber( number );
246  return true;
247  }
248  case FieldImpl::Isdn:
249  {
250  PhoneNumber number = a.phoneNumber( PhoneNumber::Isdn );
251  number.setNumber( value );
252  a.insertPhoneNumber( number );
253  return true;
254  }
255  case FieldImpl::Pager:
256  {
257  PhoneNumber number = a.phoneNumber( PhoneNumber::Pager );
258  number.setNumber( value );
259  a.insertPhoneNumber( number );
260  return true;
261  }
262  case FieldImpl::HomeAddressStreet:
263  {
264  KABC::Address address = a.address( Address::Home );
265  address.setStreet( value );
266  a.insertAddress( address );
267  return true;
268  }
269  case FieldImpl::HomeAddressLocality:
270  {
271  KABC::Address address = a.address( Address::Home );
272  address.setLocality( value );
273  a.insertAddress( address );
274  return true;
275  }
276  case FieldImpl::HomeAddressRegion:
277  {
278  KABC::Address address = a.address( Address::Home );
279  address.setRegion( value );
280  a.insertAddress( address );
281  return true;
282  }
283  case FieldImpl::HomeAddressPostalCode:
284  {
285  KABC::Address address = a.address( Address::Home );
286  address.setPostalCode( value );
287  a.insertAddress( address );
288  return true;
289  }
290  case FieldImpl::HomeAddressCountry:
291  {
292  KABC::Address address = a.address( Address::Home );
293  address.setCountry( value );
294  a.insertAddress( address );
295  return true;
296  }
297  case FieldImpl::HomeAddressLabel:
298  {
299  KABC::Address address = a.address( Address::Home );
300  address.setLabel( value );
301  a.insertAddress( address );
302  return true;
303  }
304  case FieldImpl::BusinessAddressStreet:
305  {
306  KABC::Address address = a.address( Address::Work );
307  address.setStreet( value );
308  a.insertAddress( address );
309  return true;
310  }
311  case FieldImpl::BusinessAddressLocality:
312  {
313  KABC::Address address = a.address( Address::Work );
314  address.setLocality( value );
315  a.insertAddress( address );
316  return true;
317  }
318  case FieldImpl::BusinessAddressRegion:
319  {
320  KABC::Address address = a.address( Address::Work );
321  address.setRegion( value );
322  a.insertAddress( address );
323  return true;
324  }
325  case FieldImpl::BusinessAddressPostalCode:
326  {
327  KABC::Address address = a.address( Address::Work );
328  address.setPostalCode( value );
329  a.insertAddress( address );
330  return true;
331  }
332  case FieldImpl::BusinessAddressCountry:
333  {
334  KABC::Address address = a.address( Address::Work );
335  address.setCountry( value );
336  a.insertAddress( address );
337  return true;
338  }
339  case FieldImpl::BusinessAddressLabel:
340  {
341  KABC::Address address = a.address( Address::Work );
342  address.setLabel( value );
343  a.insertAddress( address );
344  return true;
345  }
346  case FieldImpl::Birthday:
347  a.setBirthday( TQT_TQDATE_OBJECT(TQDate::fromString( value, Qt::ISODate )) );
348  return true;
349  case FieldImpl::CustomField:
350  a.insertCustom( mImpl->app(), mImpl->key(), value );
351  return true;
352  default:
353  return false;
354  }
355 }
356 
357 TQString Field::sortKey( const KABC::Addressee &a )
358 {
359  switch ( mImpl->fieldId() ) {
360  --CASEVALUE--
361  case FieldImpl::Birthday:
362  if ( a.birthday().isValid() ) {
363  TQDate date = TQT_TQDATE_OBJECT(a.birthday().date());
364  TQString key;
365  key.sprintf( "%02d-%02d", date.month(), date.day() );
366  return key;
367  } else
368  return TQString( "00-00" );
369  default:
370  return value( a ).lower();
371  }
372 }
373 
374 bool Field::isCustom()
375 {
376  return mImpl->fieldId() == FieldImpl::CustomField;
377 }
378 
379 Field::List Field::allFields()
380 {
381  if ( mAllFields.isEmpty() ) {
382  --CREATEFIELDS--
383  }
384 
385  return mAllFields;
386 }
387 
388 Field::List Field::defaultFields()
389 {
390  if ( mDefaultFields.isEmpty() ) {
391  createDefaultField( FieldImpl::FormattedName );
392  createDefaultField( FieldImpl::Email );
393  }
394 
395  return mDefaultFields;
396 }
397 
398 void Field::createField( int id, int category )
399 {
400  mAllFields.append( new Field( new FieldImpl( id, category ) ) );
401 }
402 
403 void Field::createDefaultField( int id, int category )
404 {
405  mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
406 }
407 
408 void Field::deleteFields()
409 {
410  Field::List::ConstIterator it;
411 
412  for ( it = mAllFields.constBegin(); it != mAllFields.constEnd(); ++it ) {
413  delete (*it);
414  }
415  mAllFields.clear();
416 
417  for ( it = mDefaultFields.constBegin(); it != mDefaultFields.constEnd(); ++it ) {
418  delete (*it);
419  }
420  mDefaultFields.clear();
421 
422  for ( it = mCustomFields.constBegin(); it != mCustomFields.constEnd(); ++it ) {
423  delete (*it);
424  }
425  mCustomFields.clear();
426 }
427 
428 void Field::saveFields( const TQString &identifier,
429  const Field::List &fields )
430 {
431  KConfig *cfg = KGlobal::config();
432  KConfigGroupSaver( cfg, "KABCFields" );
433 
434  saveFields( cfg, identifier, fields );
435 }
436 
437 void Field::saveFields( KConfig *cfg, const TQString &identifier,
438  const Field::List &fields )
439 {
440  TQValueList<int> fieldIds;
441 
442  int custom = 0;
443  Field::List::ConstIterator it;
444  for( it = fields.begin(); it != fields.end(); ++it ) {
445  fieldIds.append( (*it)->mImpl->fieldId() );
446  if( (*it)->isCustom() ) {
447  TQStringList customEntry;
448  customEntry << (*it)->mImpl->label();
449  customEntry << (*it)->mImpl->key();
450  customEntry << (*it)->mImpl->app();
451  cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
452  TQString::number( custom++ ), customEntry );
453  }
454  }
455 
456  cfg->writeEntry( identifier, fieldIds );
457 }
458 
459 Field::List Field::restoreFields( const TQString &identifier )
460 {
461  KConfig *cfg = KGlobal::config();
462  KConfigGroupSaver( cfg, "KABCFields" );
463 
464  return restoreFields( cfg, identifier );
465 }
466 
467 Field::List Field::restoreFields( KConfig *cfg, const TQString &identifier )
468 {
469  const TQValueList<int> fieldIds = cfg->readIntListEntry( identifier );
470 
471  Field::List fields;
472 
473  int custom = 0;
474  TQValueList<int>::ConstIterator it;
475  for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
476  FieldImpl *f = 0;
477  if ( (*it) == FieldImpl::CustomField ) {
478  TQStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
479  identifier + "_" +
480  TQString::number( custom++ ) );
481  f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
482  customEntry[ 1 ], customEntry[ 2 ] );
483  } else {
484  f = new FieldImpl( *it );
485  }
486  fields.append( new Field( f ) );
487  }
488 
489  return fields;
490 }
491 
492 bool Field::equals( Field *field )
493 {
494  bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
495 
496  if ( !sameId ) return false;
497 
498  if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
499 
500  return mImpl->key() == field->mImpl->key();
501 }
502 
503 Field *Field::createCustomField( const TQString &label, int category,
504  const TQString &key, const TQString &app )
505 {
506  Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
507  category | CustomCategory,
508  label, key, app ) );
509  mCustomFields.append( field );
510 
511  return field;
512 }

kabc

Skip menu "kabc"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kabc

Skip menu "kabc"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for kabc by doxygen 1.8.3.1
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |