phonebookui/cntlistmodel/cntcacheitems.cpp
author hgs
Fri, 15 Oct 2010 12:24:46 +0300
changeset 81 640d30f4fb64
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
81
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: Classes for each of the items (name, info and icon) in cache.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <cntcacheitems.h>
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
/*!
hgs
parents:
diff changeset
    21
    \class CntNameCacheItem
hgs
parents:
diff changeset
    22
    \brief Represents one name entry in cache.
hgs
parents:
diff changeset
    23
    
hgs
parents:
diff changeset
    24
    CntNameCacheItem wraps functionality for efficiently storing, serializing
hgs
parents:
diff changeset
    25
    and changing the display format of one name in cache.
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
    \class CntInfoCacheItem
hgs
parents:
diff changeset
    28
    \brief Holds data for info entry in cache.
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
    \class CntIconCacheItem
hgs
parents:
diff changeset
    31
    \brief Holds data for icon entry in cache.
hgs
parents:
diff changeset
    32
 */
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
/*!
hgs
parents:
diff changeset
    35
    Creates a CntNameCacheItem object.
hgs
parents:
diff changeset
    36
 */
hgs
parents:
diff changeset
    37
CntNameCacheItem::CntNameCacheItem(QContactLocalId id, const QString& firstName, const QString& lastName, CntNameOrder nameFormat)
hgs
parents:
diff changeset
    38
{
hgs
parents:
diff changeset
    39
    mContactId = id;
hgs
parents:
diff changeset
    40
    setFormattedName(firstName, lastName, nameFormat);
hgs
parents:
diff changeset
    41
}
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
/*!
hgs
parents:
diff changeset
    44
    Destroys the CntNameCacheItem object.
hgs
parents:
diff changeset
    45
 */
hgs
parents:
diff changeset
    46
CntNameCacheItem::~CntNameCacheItem()
hgs
parents:
diff changeset
    47
{
hgs
parents:
diff changeset
    48
}
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/*!
hgs
parents:
diff changeset
    51
    Changes the format used to present the name.
hgs
parents:
diff changeset
    52
 */
hgs
parents:
diff changeset
    53
void CntNameCacheItem::setNameFormat(CntNameOrder newFormat)
hgs
parents:
diff changeset
    54
{
hgs
parents:
diff changeset
    55
    QString firstName = mName.mid(mFirstNamePosition&0xffff, mFirstNamePosition>>16);
hgs
parents:
diff changeset
    56
    QString lastName = mName.mid(mLastNamePosition&0xffff, mLastNamePosition>>16);
hgs
parents:
diff changeset
    57
    setFormattedName(firstName, lastName, newFormat);
hgs
parents:
diff changeset
    58
}
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
/*!
hgs
parents:
diff changeset
    61
    Copies the contents of the other cache item to this one.
hgs
parents:
diff changeset
    62
 */
hgs
parents:
diff changeset
    63
void CntNameCacheItem::operator=(const CntNameCacheItem &other)
hgs
parents:
diff changeset
    64
{
hgs
parents:
diff changeset
    65
    mContactId = other.mContactId;
hgs
parents:
diff changeset
    66
    mFirstNamePosition = other.mFirstNamePosition;
hgs
parents:
diff changeset
    67
    mLastNamePosition = other.mLastNamePosition;
hgs
parents:
diff changeset
    68
    mName = other.mName;
hgs
parents:
diff changeset
    69
}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
/*!
hgs
parents:
diff changeset
    72
    Externalizes a CntNameCacheItem object.
hgs
parents:
diff changeset
    73
 */
hgs
parents:
diff changeset
    74
void CntNameCacheItem::externalize(QDataStream &stream)
hgs
parents:
diff changeset
    75
{
hgs
parents:
diff changeset
    76
    stream << mContactId;
hgs
parents:
diff changeset
    77
    stream << mFirstNamePosition;
hgs
parents:
diff changeset
    78
    stream << mLastNamePosition;
hgs
parents:
diff changeset
    79
    stream << mName;
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
/*!
hgs
parents:
diff changeset
    83
    Internalizes a CntNameCacheItem object.
hgs
parents:
diff changeset
    84
 */
hgs
parents:
diff changeset
    85
CntNameCacheItem* CntNameCacheItem::internalize(QDataStream &stream, CntNameOrder nameFormat)
hgs
parents:
diff changeset
    86
{
hgs
parents:
diff changeset
    87
    quint32 id;
hgs
parents:
diff changeset
    88
    quint32 firstNamePosition;
hgs
parents:
diff changeset
    89
    quint32 lastNamePosition;
hgs
parents:
diff changeset
    90
    QString name;
hgs
parents:
diff changeset
    91
    
hgs
parents:
diff changeset
    92
    stream >> id;
hgs
parents:
diff changeset
    93
    stream >> firstNamePosition;
hgs
parents:
diff changeset
    94
    stream >> lastNamePosition;
hgs
parents:
diff changeset
    95
    stream >> name;
hgs
parents:
diff changeset
    96
    
hgs
parents:
diff changeset
    97
    QString firstName = name.mid(firstNamePosition&0xffff, firstNamePosition>>16);
hgs
parents:
diff changeset
    98
    QString lastName = name.mid(lastNamePosition&0xffff, lastNamePosition>>16);
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    return new CntNameCacheItem(id, firstName, lastName, nameFormat);
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
/*!
hgs
parents:
diff changeset
   104
    Sets the formatted name and positions of the first name and last name,
hgs
parents:
diff changeset
   105
    according to the name format in the parameter.
hgs
parents:
diff changeset
   106
 */
hgs
parents:
diff changeset
   107
void CntNameCacheItem::setFormattedName(const QString& firstName, const QString& lastName, CntNameOrder nameFormat)
hgs
parents:
diff changeset
   108
{
hgs
parents:
diff changeset
   109
    int firstNameLength = firstName.length();
hgs
parents:
diff changeset
   110
    int lastNameLength = lastName.length();
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    if (lastNameLength == 0) {
hgs
parents:
diff changeset
   113
        mName = firstName;
hgs
parents:
diff changeset
   114
        mFirstNamePosition = firstNameLength << 16;
hgs
parents:
diff changeset
   115
        mLastNamePosition = 0;
hgs
parents:
diff changeset
   116
    } else if (firstNameLength == 0) {
hgs
parents:
diff changeset
   117
        mName = lastName;
hgs
parents:
diff changeset
   118
        mFirstNamePosition = 0;
hgs
parents:
diff changeset
   119
        mLastNamePosition = lastNameLength << 16;
hgs
parents:
diff changeset
   120
    } else {
hgs
parents:
diff changeset
   121
        if (nameFormat == CntOrderLastFirst) {
hgs
parents:
diff changeset
   122
            mName = lastName + " " + firstName;
hgs
parents:
diff changeset
   123
            mFirstNamePosition = (firstNameLength << 16) | (lastNameLength + 1);
hgs
parents:
diff changeset
   124
            mLastNamePosition = (lastNameLength << 16);
hgs
parents:
diff changeset
   125
        } else if (nameFormat == CntOrderLastCommaFirst) {
hgs
parents:
diff changeset
   126
            mName = lastName + ", " + firstName;
hgs
parents:
diff changeset
   127
            mFirstNamePosition = (firstNameLength << 16) | (lastNameLength + 2);
hgs
parents:
diff changeset
   128
            mLastNamePosition = (lastNameLength << 16);
hgs
parents:
diff changeset
   129
        } else {
hgs
parents:
diff changeset
   130
            mName = firstName + " " + lastName;
hgs
parents:
diff changeset
   131
            mFirstNamePosition = (firstNameLength << 16);
hgs
parents:
diff changeset
   132
            mLastNamePosition = (lastNameLength << 16) | (firstNameLength + 1);
hgs
parents:
diff changeset
   133
        }
hgs
parents:
diff changeset
   134
    }
hgs
parents:
diff changeset
   135
}
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
QString CntNameCacheItem::firstName() const
hgs
parents:
diff changeset
   138
{
hgs
parents:
diff changeset
   139
    return mName.mid(mFirstNamePosition&0xffff, mFirstNamePosition>>16);
hgs
parents:
diff changeset
   140
}
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
QString CntNameCacheItem::lastName() const
hgs
parents:
diff changeset
   143
{
hgs
parents:
diff changeset
   144
    return mName.mid(mLastNamePosition&0xffff, mLastNamePosition>>16);
hgs
parents:
diff changeset
   145
}