• Skip to content
  • Skip to link menu
KDE 4.2 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       label.append( ( first ? "" : "/" ) + typeLabel( *it ) );
00154       if ( first ) {
00155         first = false;
00156       }
00157     }
00158   }
00159 
00160   return label;
00161 }
00162 
00163 PhoneNumber::TypeList PhoneNumber::typeList()
00164 {
00165   static TypeList list;
00166 
00167   if ( list.isEmpty() ) {
00168     list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video
00169          << Bbs << Modem << Car << Isdn << Pcs << Pager;
00170   }
00171 
00172   return list;
00173 }
00174 
00175 QString PhoneNumber::typeLabel( Type type )
00176 {
00177   if ( type & Pref ) {
00178     return i18nc( "Preferred phone", "Preferred" );
00179   }
00180 
00181   switch ( type ) {
00182     case Home:
00183       return i18nc( "Home phone", "Home" );
00184       break;
00185     case Work:
00186       return i18nc( "Work phone", "Work" );
00187       break;
00188     case Msg:
00189       return i18n( "Messenger" );
00190       break;
00191     case Pref:
00192       return i18n( "Preferred Number" );
00193       break;
00194     case Voice:
00195       return i18n( "Voice" );
00196       break;
00197     case Fax:
00198       return i18n( "Fax" );
00199       break;
00200     case Cell:
00201       return i18nc( "Mobile Phone", "Mobile" );
00202       break;
00203     case Video:
00204       return i18nc( "Video phone", "Video" );
00205       break;
00206     case Bbs:
00207       return i18n( "Mailbox" );
00208       break;
00209     case Modem:
00210       return i18n( "Modem" );
00211       break;
00212     case Car:
00213       return i18nc( "Car Phone", "Car" );
00214       break;
00215     case Isdn:
00216       return i18n( "ISDN" );
00217       break;
00218     case Pcs:
00219       return i18n( "PCS" );
00220       break;
00221     case Pager:
00222       return i18n( "Pager" );
00223       break;
00224     case Home + Fax:
00225       return i18n( "Home Fax" );
00226       break;
00227     case Work + Fax:
00228       return i18n( "Work Fax" );
00229       break;
00230     default:
00231       return i18nc( "another type of phone", "Other" );
00232   }
00233 }
00234 
00235 QString PhoneNumber::toString() const
00236 {
00237   QString str;
00238 
00239   str += QString( "PhoneNumber {\n" );
00240   str += QString( "    Id: %1\n" ).arg( d->mId );
00241   str += QString( "    Type: %1\n" ).arg( typeLabel( d->mType ) );
00242   str += QString( "    Number: %1\n" ).arg( d->mNumber );
00243   str += QString( "}\n" );
00244 
00245   return str;
00246 }
00247 
00248 QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone )
00249 {
00250   return s << phone.d->mId << (uint)phone.d->mType << phone.d->mNumber;
00251 }
00252 
00253 QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone )
00254 {
00255   uint type;
00256   s >> phone.d->mId >> type >> phone.d->mNumber;
00257   phone.d->mType = PhoneNumber::Type( type );
00258 
00259   return s;
00260 }

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
  • kimap
  • kioslave
  •   imap4
  •   mbox
  • kldap
  • kmime
  • kpimidentities
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.5.7.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