• Skip to content
  • Skip to link menu
KDE 4.3 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • Sitemap
  • Contact Us
 

kabc

phonenumber.cpp

00001 /*
00002     This file is part of libkabc.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include "phonenumber.h"
00022 
00023 #include <klocale.h>
00024 #include <krandom.h>
00025 
00026 #include <QtCore/QDataStream>
00027 #include <QtCore/QSharedData>
00028 
00029 using namespace KABC;
00030 
00031 static QString cleanupNumber( const QString &input )
00032 {
00033   return input.simplified();
00034 }
00035 
00036 class PhoneNumber::Private : public QSharedData
00037 {
00038   public:
00039     Private( Type type )
00040       : mId( KRandom::randomString( 8 ) ), mType( type )
00041     {
00042     }
00043 
00044     Private( const Private &other )
00045       : QSharedData( other )
00046     {
00047       mId = other.mId;
00048       mType = other.mType;
00049       mNumber = other.mNumber;
00050     }
00051 
00052     QString mId;
00053     Type mType;
00054     QString mNumber;
00055 };
00056 
00057 PhoneNumber::PhoneNumber()
00058   : d( new Private( Home ) )
00059 {
00060 }
00061 
00062 PhoneNumber::PhoneNumber( const QString &number, Type type )
00063   : d( new Private( type ) )
00064 {
00065   d->mNumber = cleanupNumber( number );
00066 }
00067 
00068 PhoneNumber::PhoneNumber( const PhoneNumber &other )
00069   : d( other.d )
00070 {
00071 }
00072 
00073 PhoneNumber::~PhoneNumber()
00074 {
00075 }
00076 
00077 bool PhoneNumber::operator==( const PhoneNumber &other ) const
00078 {
00079   if ( d->mId != other.d->mId ) {
00080     return false;
00081   }
00082 
00083   if ( d->mNumber != other.d->mNumber ) {
00084     return false;
00085   }
00086 
00087   if ( d->mType != other.d->mType ) {
00088     return false;
00089   }
00090 
00091   return true;
00092 }
00093 
00094 bool PhoneNumber::operator!=( const PhoneNumber &other ) const
00095 {
00096   return !( other == *this );
00097 }
00098 
00099 PhoneNumber &PhoneNumber::operator=( const PhoneNumber &other )
00100 {
00101   if ( this != &other ) {
00102     d = other.d;
00103   }
00104 
00105   return *this;
00106 }
00107 
00108 bool PhoneNumber::isEmpty() const
00109 {
00110   return d->mNumber.isEmpty();
00111 }
00112 
00113 void PhoneNumber::setId( const QString &id )
00114 {
00115   d->mId = id;
00116 }
00117 
00118 QString PhoneNumber::id() const
00119 {
00120   return d->mId;
00121 }
00122 
00123 void PhoneNumber::setNumber( const QString &number )
00124 {
00125   d->mNumber = cleanupNumber( number );
00126 }
00127 
00128 QString PhoneNumber::number() const
00129 {
00130   return d->mNumber;
00131 }
00132 
00133 void PhoneNumber::setType( Type type )
00134 {
00135   d->mType = type;
00136 }
00137 
00138 PhoneNumber::Type PhoneNumber::type() const
00139 {
00140   return d->mType;
00141 }
00142 
00143 QString PhoneNumber::typeLabel() const
00144 {
00145   QString label;
00146   bool first = true;
00147 
00148   const TypeList list = typeList();
00149 
00150   TypeList::ConstIterator it;
00151   for ( it = list.begin(); it != list.end(); ++it ) {
00152     if ( ( type() & (*it) ) && ( (*it) != Pref ) ) {
00153       if ( !first ) {
00154         label.append( QLatin1Char( '/' ) );
00155       }
00156       label.append( typeLabel( *it ) );
00157       if ( first ) {
00158         first = false;
00159       }
00160     }
00161   }
00162 
00163   return label;
00164 }
00165 
00166 PhoneNumber::TypeList PhoneNumber::typeList()
00167 {
00168   static TypeList list;
00169 
00170   if ( list.isEmpty() ) {
00171     list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video
00172          << Bbs << Modem << Car << Isdn << Pcs << Pager;
00173   }
00174 
00175   return list;
00176 }
00177 
00178 QString PhoneNumber::typeLabel( Type type )
00179 {
00180   if ( type & Pref ) {
00181     return i18nc( "Preferred phone", "Preferred" );
00182   }
00183 
00184   switch ( type ) {
00185     case Home:
00186       return i18nc( "Home phone", "Home" );
00187       break;
00188     case Work:
00189       return i18nc( "Work phone", "Work" );
00190       break;
00191     case Msg:
00192       return i18n( "Messenger" );
00193       break;
00194     case Pref:
00195       return i18n( "Preferred Number" );
00196       break;
00197     case Voice:
00198       return i18n( "Voice" );
00199       break;
00200     case Fax:
00201       return i18n( "Fax" );
00202       break;
00203     case Cell:
00204       return i18nc( "Mobile Phone", "Mobile" );
00205       break;
00206     case Video:
00207       return i18nc( "Video phone", "Video" );
00208       break;
00209     case Bbs:
00210       return i18n( "Mailbox" );
00211       break;
00212     case Modem:
00213       return i18n( "Modem" );
00214       break;
00215     case Car:
00216       return i18nc( "Car Phone", "Car" );
00217       break;
00218     case Isdn:
00219       return i18n( "ISDN" );
00220       break;
00221     case Pcs:
00222       return i18n( "PCS" );
00223       break;
00224     case Pager:
00225       return i18n( "Pager" );
00226       break;
00227     case Home + Fax:
00228       return i18n( "Home Fax" );
00229       break;
00230     case Work + Fax:
00231       return i18n( "Work Fax" );
00232       break;
00233     default:
00234       return i18nc( "another type of phone", "Other" );
00235   }
00236 }
00237 
00238 QString PhoneNumber::toString() const
00239 {
00240   QString str;
00241 
00242   str += QString::fromLatin1( "PhoneNumber {\n" );
00243   str += QString::fromLatin1( "    Id: %1\n" ).arg( d->mId );
00244   str += QString::fromLatin1( "    Type: %1\n" ).arg( typeLabel( d->mType ) );
00245   str += QString::fromLatin1( "    Number: %1\n" ).arg( d->mNumber );
00246   str += QString::fromLatin1( "}\n" );
00247 
00248   return str;
00249 }
00250 
00251 QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone )
00252 {
00253   return s << phone.d->mId << (uint)phone.d->mType << phone.d->mNumber;
00254 }
00255 
00256 QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone )
00257 {
00258   uint type;
00259   s >> phone.d->mId >> type >> phone.d->mNumber;
00260   phone.d->mType = PhoneNumber::Type( type );
00261 
00262   return s;
00263 }

kabc

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

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  • kabc
  • kblog
  • kcal
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  • kldap
  • kmime
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.6.1
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal