summaryrefslogtreecommitdiffabout
path: root/kabc/field.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /kabc/field.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'kabc/field.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/field.cpp550
1 files changed, 550 insertions, 0 deletions
diff --git a/kabc/field.cpp b/kabc/field.cpp
new file mode 100644
index 0000000..41bbfde
--- a/dev/null
+++ b/kabc/field.cpp
@@ -0,0 +1,550 @@
+/*** Warning! This file has been generated by the script makeaddressee ***/
+/*
+ This file is part of libkabc.
+ Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/*
+Enhanced Version of the file for platform independent KDE tools.
+Copyright (c) 2004 Ulf Schenk
+
+$Id$
+*/
+
+#include <klocale.h>
+#include <kconfig.h>
+#include <kconfigbase.h>
+#include <kglobal.h>
+
+#include "field.h"
+
+using namespace KABC;
+
+class Field::FieldImpl
+{
+ public:
+ FieldImpl( int fieldId, int category = 0,
+ const QString &label = QString::null,
+ const QString &key = QString::null,
+ const QString &app = QString::null )
+ : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
+ mKey( key ), mApp( app ) {}
+
+ enum FieldId
+ {
+ CustomField,
+ FormattedName,
+ FamilyName,
+ GivenName,
+ AdditionalName,
+ Prefix,
+ Suffix,
+ NickName,
+ Birthday,
+ HomeAddressStreet,
+ HomeAddressLocality,
+ HomeAddressRegion,
+ HomeAddressPostalCode,
+ HomeAddressCountry,
+ HomeAddressLabel,
+ BusinessAddressStreet,
+ BusinessAddressLocality,
+ BusinessAddressRegion,
+ BusinessAddressPostalCode,
+ BusinessAddressCountry,
+ BusinessAddressLabel,
+ HomePhone,
+ BusinessPhone,
+ MobilePhone,
+ HomeFax,
+ BusinessFax,
+ CarPhone,
+ Isdn,
+ Pager,
+ Email,
+ Mailer,
+ Title,
+ Role,
+ Organization,
+ Note,
+ Url
+ };
+
+ int fieldId() { return mFieldId; }
+ int category() { return mCategory; }
+
+ QString label() { return mLabel; }
+ QString key() { return mKey; }
+ QString app() { return mApp; }
+
+ private:
+ int mFieldId;
+ int mCategory;
+
+ QString mLabel;
+ QString mKey;
+ QString mApp;
+};
+
+
+Field::List Field::mAllFields;
+Field::List Field::mDefaultFields;
+Field::List Field::mCustomFields;
+
+
+Field::Field( FieldImpl *impl )
+{
+ mImpl = impl;
+}
+
+Field::~Field()
+{
+ delete mImpl;
+}
+
+QString Field::label()
+{
+ switch ( mImpl->fieldId() ) {
+ case FieldImpl::FormattedName:
+ return Addressee::formattedNameLabel();
+ case FieldImpl::FamilyName:
+ return Addressee::familyNameLabel();
+ case FieldImpl::GivenName:
+ return Addressee::givenNameLabel();
+ case FieldImpl::AdditionalName:
+ return Addressee::additionalNameLabel();
+ case FieldImpl::Prefix:
+ return Addressee::prefixLabel();
+ case FieldImpl::Suffix:
+ return Addressee::suffixLabel();
+ case FieldImpl::NickName:
+ return Addressee::nickNameLabel();
+ case FieldImpl::Birthday:
+ return Addressee::birthdayLabel();
+ case FieldImpl::HomeAddressStreet:
+ return Addressee::homeAddressStreetLabel();
+ case FieldImpl::HomeAddressLocality:
+ return Addressee::homeAddressLocalityLabel();
+ case FieldImpl::HomeAddressRegion:
+ return Addressee::homeAddressRegionLabel();
+ case FieldImpl::HomeAddressPostalCode:
+ return Addressee::homeAddressPostalCodeLabel();
+ case FieldImpl::HomeAddressCountry:
+ return Addressee::homeAddressCountryLabel();
+ case FieldImpl::HomeAddressLabel:
+ return Addressee::homeAddressLabelLabel();
+ case FieldImpl::BusinessAddressStreet:
+ return Addressee::businessAddressStreetLabel();
+ case FieldImpl::BusinessAddressLocality:
+ return Addressee::businessAddressLocalityLabel();
+ case FieldImpl::BusinessAddressRegion:
+ return Addressee::businessAddressRegionLabel();
+ case FieldImpl::BusinessAddressPostalCode:
+ return Addressee::businessAddressPostalCodeLabel();
+ case FieldImpl::BusinessAddressCountry:
+ return Addressee::businessAddressCountryLabel();
+ case FieldImpl::BusinessAddressLabel:
+ return Addressee::businessAddressLabelLabel();
+ case FieldImpl::HomePhone:
+ return Addressee::homePhoneLabel();
+ case FieldImpl::BusinessPhone:
+ return Addressee::businessPhoneLabel();
+ case FieldImpl::MobilePhone:
+ return Addressee::mobilePhoneLabel();
+ case FieldImpl::HomeFax:
+ return Addressee::homeFaxLabel();
+ case FieldImpl::BusinessFax:
+ return Addressee::businessFaxLabel();
+ case FieldImpl::CarPhone:
+ return Addressee::carPhoneLabel();
+ case FieldImpl::Isdn:
+ return Addressee::isdnLabel();
+ case FieldImpl::Pager:
+ return Addressee::pagerLabel();
+ case FieldImpl::Email:
+ return Addressee::emailLabel();
+ case FieldImpl::Mailer:
+ return Addressee::mailerLabel();
+ case FieldImpl::Title:
+ return Addressee::titleLabel();
+ case FieldImpl::Role:
+ return Addressee::roleLabel();
+ case FieldImpl::Organization:
+ return Addressee::organizationLabel();
+ case FieldImpl::Note:
+ return Addressee::noteLabel();
+ case FieldImpl::Url:
+ return Addressee::urlLabel();
+ case FieldImpl::CustomField:
+ return mImpl->label();
+ default:
+ return i18n("Unknown Field");
+ }
+}
+
+int Field::category()
+{
+ return mImpl->category();
+}
+
+QString Field::categoryLabel( int category )
+{
+ switch ( category ) {
+ case All:
+ return i18n("All");
+ case Frequent:
+ return i18n("Frequent");
+ case Address:
+ return i18n("Address");
+ case Email:
+ return i18n("Email");
+ case Personal:
+ return i18n("Personal");
+ case Organization:
+ return i18n("Organization");
+ case CustomCategory:
+ return i18n("Custom");
+ default:
+ return i18n("Undefined");
+ }
+}
+
+QString Field::value( const KABC::Addressee &a )
+{
+ switch ( mImpl->fieldId() ) {
+ case FieldImpl::FormattedName:
+ return a.formattedName();
+ case FieldImpl::FamilyName:
+ return a.familyName();
+ case FieldImpl::GivenName:
+ return a.givenName();
+ case FieldImpl::AdditionalName:
+ return a.additionalName();
+ case FieldImpl::Prefix:
+ return a.prefix();
+ case FieldImpl::Suffix:
+ return a.suffix();
+ case FieldImpl::NickName:
+ return a.nickName();
+ case FieldImpl::Mailer:
+ return a.mailer();
+ case FieldImpl::Title:
+ return a.title();
+ case FieldImpl::Role:
+ return a.role();
+ case FieldImpl::Organization:
+ return a.organization();
+ case FieldImpl::Note:
+ return a.note();
+ case FieldImpl::Email:
+ return a.preferredEmail();
+ case FieldImpl::Birthday:
+ if ( a.birthday().isValid() ) {
+//the generated code had the following format: return a.birthday().date().toString( Qt::ISODate );
+// But Qt::IsoDate was not specified.
+ QString _oldFormat = KGlobal::locale()->dateFormat();
+ KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate
+ QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false);
+ KGlobal::locale()->setDateFormat(_oldFormat);
+ return dt;
+ }
+ else
+ return QString::null;
+ case FieldImpl::Url:
+ return a.url().prettyURL();
+ case FieldImpl::HomePhone:
+ return a.phoneNumber( PhoneNumber::Home ).number();
+ case FieldImpl::BusinessPhone:
+ return a.phoneNumber( PhoneNumber::Work ).number();
+ case FieldImpl::MobilePhone:
+ return a.phoneNumber( PhoneNumber::Cell ).number();
+ case FieldImpl::HomeFax:
+ return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
+ case FieldImpl::BusinessFax:
+ return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
+ case FieldImpl::CarPhone:
+ return a.phoneNumber( PhoneNumber::Car ).number();
+ case FieldImpl::Isdn:
+ return a.phoneNumber( PhoneNumber::Isdn ).number();
+ case FieldImpl::Pager:
+ return a.phoneNumber( PhoneNumber::Pager ).number();
+ case FieldImpl::HomeAddressStreet:
+ return a.address( Address::Home ).street();
+ case FieldImpl::HomeAddressLocality:
+ return a.address( Address::Home ).locality();
+ case FieldImpl::HomeAddressRegion:
+ return a.address( Address::Home ).region();
+ case FieldImpl::HomeAddressPostalCode:
+ return a.address( Address::Home ).postalCode();
+ case FieldImpl::HomeAddressCountry:
+ return a.address( Address::Home ).country();
+ case FieldImpl::BusinessAddressStreet:
+ return a.address( Address::Work ).street();
+ case FieldImpl::BusinessAddressLocality:
+ return a.address( Address::Work ).locality();
+ case FieldImpl::BusinessAddressRegion:
+ return a.address( Address::Work ).region();
+ case FieldImpl::BusinessAddressPostalCode:
+ return a.address( Address::Work ).postalCode();
+ case FieldImpl::BusinessAddressCountry:
+ return a.address( Address::Work ).country();
+ case FieldImpl::CustomField:
+ return a.custom( mImpl->app(), mImpl->key() );
+ default:
+ return QString::null;
+ }
+}
+
+bool Field::setValue( KABC::Addressee &a, const QString &value )
+{
+ switch ( mImpl->fieldId() ) {
+ case FieldImpl::FormattedName:
+ a.setFormattedName( value );
+ return true;
+ case FieldImpl::FamilyName:
+ a.setFamilyName( value );
+ return true;
+ case FieldImpl::GivenName:
+ a.setGivenName( value );
+ return true;
+ case FieldImpl::AdditionalName:
+ a.setAdditionalName( value );
+ return true;
+ case FieldImpl::Prefix:
+ a.setPrefix( value );
+ return true;
+ case FieldImpl::Suffix:
+ a.setSuffix( value );
+ return true;
+ case FieldImpl::NickName:
+ a.setNickName( value );
+ return true;
+ case FieldImpl::Mailer:
+ a.setMailer( value );
+ return true;
+ case FieldImpl::Title:
+ a.setTitle( value );
+ return true;
+ case FieldImpl::Role:
+ a.setRole( value );
+ return true;
+ case FieldImpl::Organization:
+ a.setOrganization( value );
+ return true;
+ case FieldImpl::Note:
+ a.setNote( value );
+ return true;
+ case FieldImpl::Birthday:
+//US
+//the generated code had the following format: return a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
+// But Qt::IsoDate and QDate::fromString was not specified. Do I have the wrong QT version ?
+ {
+ QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate
+ a.setBirthday(dt);
+ }
+ return true;
+ case FieldImpl::CustomField:
+ a.insertCustom( mImpl->app(), mImpl->key(), value );
+ default:
+ return false;
+ }
+}
+
+bool Field::isCustom()
+{
+ return mImpl->fieldId() == FieldImpl::CustomField;
+}
+
+Field::List Field::allFields()
+{
+ if ( mAllFields.isEmpty() ) {
+ createField( FieldImpl::FormattedName, Frequent );
+ createField( FieldImpl::FamilyName, Frequent );
+ createField( FieldImpl::GivenName, Frequent );
+ createField( FieldImpl::AdditionalName );
+ createField( FieldImpl::Prefix );
+ createField( FieldImpl::Suffix );
+ createField( FieldImpl::NickName, Personal );
+ createField( FieldImpl::Birthday, Personal );
+ createField( FieldImpl::HomeAddressStreet, Address|Personal );
+ createField( FieldImpl::HomeAddressLocality, Address|Personal );
+ createField( FieldImpl::HomeAddressRegion, Address|Personal );
+ createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
+ createField( FieldImpl::HomeAddressCountry, Address|Personal );
+ createField( FieldImpl::HomeAddressLabel, Address|Personal );
+ createField( FieldImpl::BusinessAddressStreet, Address|Organization );
+ createField( FieldImpl::BusinessAddressLocality, Address|Organization );
+ createField( FieldImpl::BusinessAddressRegion, Address|Organization );
+ createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
+ createField( FieldImpl::BusinessAddressCountry, Address|Organization );
+ createField( FieldImpl::BusinessAddressLabel, Address|Organization );
+ createField( FieldImpl::HomePhone, Personal|Frequent );
+ createField( FieldImpl::BusinessPhone, Organization|Frequent );
+ createField( FieldImpl::MobilePhone, Frequent );
+ createField( FieldImpl::HomeFax );
+ createField( FieldImpl::BusinessFax );
+ createField( FieldImpl::CarPhone );
+ createField( FieldImpl::Isdn );
+ createField( FieldImpl::Pager );
+ createField( FieldImpl::Email, Email|Frequent );
+ createField( FieldImpl::Mailer, Email );
+ createField( FieldImpl::Title, Organization );
+ createField( FieldImpl::Role, Organization );
+ createField( FieldImpl::Organization, Organization );
+ createField( FieldImpl::Note );
+ createField( FieldImpl::Url );
+ }
+
+ return mAllFields;
+}
+
+Field::List Field::defaultFields()
+{
+ if ( mDefaultFields.isEmpty() ) {
+ createDefaultField( FieldImpl::GivenName );
+ createDefaultField( FieldImpl::FamilyName );
+ createDefaultField( FieldImpl::Email );
+ }
+
+ return mDefaultFields;
+}
+
+void Field::createField( int id, int category )
+{
+ mAllFields.append( new Field( new FieldImpl( id, category ) ) );
+}
+
+void Field::createDefaultField( int id, int category )
+{
+ mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
+}
+
+void Field::deleteFields()
+{
+ Field::List::ConstIterator it;
+
+ for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) {
+ delete (*it);
+ }
+ mAllFields.clear();
+
+ for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) {
+ delete (*it);
+ }
+ mDefaultFields.clear();
+
+ for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) {
+ delete (*it);
+ }
+ mCustomFields.clear();
+}
+
+void Field::saveFields( const QString &identifier,
+ const Field::List &fields )
+{
+ KConfig *cfg = KGlobal::config();
+ KConfigGroupSaver( cfg, "KABCFields" );
+ saveFields( cfg, identifier, fields );
+}
+
+void Field::saveFields( KConfig *cfg, const QString &identifier,
+ const Field::List &fields )
+{
+ QValueList<int> fieldIds;
+
+//US
+//US qDebug("Field::saveFields to %s %s", cfg->getFileName().latin1(), identifier.latin1());
+
+ int custom = 0;
+ Field::List::ConstIterator it;
+ for( it = fields.begin(); it != fields.end(); ++it ) {
+//US
+//US qDebug("Field::saveFields field:%i", (*it)->mImpl->fieldId());
+
+ fieldIds.append( (*it)->mImpl->fieldId() );
+ if( (*it)->isCustom() ) {
+ QStringList customEntry;
+ customEntry << (*it)->mImpl->label();
+ customEntry << (*it)->mImpl->key();
+ customEntry << (*it)->mImpl->app();
+ cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
+ QString::number( custom++ ), customEntry );
+ }
+ }
+ cfg->writeEntry( identifier, fieldIds );
+}
+
+Field::List Field::restoreFields( const QString &identifier )
+{
+ KConfig *cfg = KGlobal::config();
+ KConfigGroupSaver( cfg, "KABCFields" );
+ cfg->setGroup( "KABCFields" );
+
+ Field::List l = restoreFields( cfg, identifier );
+
+ return l;
+}
+
+Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
+{
+ QValueList<int> fieldIds = cfg->readIntListEntry( identifier);
+//US
+ qDebug("Field::restoreFields from %s", cfg->getFileName().latin1());
+
+ Field::List fields;
+
+ int custom = 0;
+ QValueList<int>::ConstIterator it;
+ for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
+ FieldImpl *f = 0;
+ if ( (*it) == FieldImpl::CustomField ) {
+ QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
+ identifier + "_" +
+ QString::number( custom++ ) );
+ f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
+ customEntry[ 1 ], customEntry[ 2 ] );
+ } else {
+ f = new FieldImpl( *it );
+ }
+ fields.append( new Field( f ) );
+ }
+
+ return fields;
+}
+
+bool Field::equals( Field *field )
+{
+ bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
+
+ if ( !sameId ) return false;
+
+ if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
+
+ return mImpl->key() == field->mImpl->key();
+}
+
+Field *Field::createCustomField( const QString &label, int category,
+ const QString &key, const QString &app )
+{
+ Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
+ category | CustomCategory,
+ label, key, app ) );
+ mCustomFields.append( field );
+
+ return field;
+}