phonebookui/cntcommonui/contactcard/cntcontactcarddetailitem.cpp
author hgs
Fri, 15 Oct 2010 12:24:46 +0300
changeset 81 640d30f4fb64
parent 72 6abfb1094884
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 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:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <QGraphicsLayout>
hgs
parents:
diff changeset
    19
#include "cntdebug.h"
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include "cntcontactcarddetailitem.h"
hgs
parents:
diff changeset
    22
#include "cntcontactcarddataitem.h"
hgs
parents:
diff changeset
    23
#include <hbiconitem.h>
hgs
parents:
diff changeset
    24
#include <hbtextitem.h>
hgs
parents:
diff changeset
    25
#include <hbrichtextitem.h>
hgs
parents:
diff changeset
    26
#include <hbframedrawer.h>
hgs
parents:
diff changeset
    27
#include <hbframeitem.h>
hgs
parents:
diff changeset
    28
#include <hbeffect.h>
hgs
parents:
diff changeset
    29
#include <hbstyleloader.h>
hgs
parents:
diff changeset
    30
#include <QGraphicsSceneMouseEvent>
hgs
parents:
diff changeset
    31
#include <hbinstantfeedback.h>
hgs
parents:
diff changeset
    32
#include <hbcolorscheme.h>
hgs
parents:
diff changeset
    33
#include <QGestureEvent>
hgs
parents:
diff changeset
    34
#include <hbtapgesture.h>
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
const int CNT_CONTACTCARD_Z_FRAME = -1;
hgs
parents:
diff changeset
    37
const int CNT_CONTACTCARD_Z_FOCUS = -2;
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
CntContactCardDetailItem::CntContactCardDetailItem(int index, QGraphicsItem *parent, bool isFocusable) :
hgs
parents:
diff changeset
    40
    HbWidget(parent),
hgs
parents:
diff changeset
    41
    mIcon(NULL),
hgs
parents:
diff changeset
    42
    mSecondaryIcon(NULL),
hgs
parents:
diff changeset
    43
    mFirstLineText(NULL),
hgs
parents:
diff changeset
    44
    mSecondLineText(NULL),
hgs
parents:
diff changeset
    45
    mFrameItem(NULL),
hgs
parents:
diff changeset
    46
    mFocusItem(NULL),
hgs
parents:
diff changeset
    47
    mHasFocus(false),
hgs
parents:
diff changeset
    48
    mIndex(index),
hgs
parents:
diff changeset
    49
    mIsFocusable(isFocusable),
hgs
parents:
diff changeset
    50
    mValueTextElideMode(Qt::ElideNone),
hgs
parents:
diff changeset
    51
    mIsUnderline(false)
hgs
parents:
diff changeset
    52
{  
hgs
parents:
diff changeset
    53
    if (mIsFocusable)
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
        HbEffect::add("frameitem", "listviewitem_press", "pressed");
hgs
parents:
diff changeset
    56
        HbEffect::add("frameitem", "listviewitem_release", "released");
hgs
parents:
diff changeset
    57
        initGesture();
hgs
parents:
diff changeset
    58
    }
hgs
parents:
diff changeset
    59
    setProperty("state", "normal");
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
CntContactCardDetailItem::~CntContactCardDetailItem()
hgs
parents:
diff changeset
    63
{
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
void CntContactCardDetailItem::createPrimitives()
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
    if (!icon.isNull())
hgs
parents:
diff changeset
    70
    {
hgs
parents:
diff changeset
    71
        if (!mIcon)
hgs
parents:
diff changeset
    72
        {
hgs
parents:
diff changeset
    73
            mIcon = new HbIconItem(this);
hgs
parents:
diff changeset
    74
            style()->setItemName(mIcon, "icon");
hgs
parents:
diff changeset
    75
        }
hgs
parents:
diff changeset
    76
        mIcon->setIcon(icon);
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
    else
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
        if (mIcon)
hgs
parents:
diff changeset
    81
        {
hgs
parents:
diff changeset
    82
            delete mIcon;
hgs
parents:
diff changeset
    83
        }
hgs
parents:
diff changeset
    84
        mIcon = 0;
hgs
parents:
diff changeset
    85
    }
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
    if (!secondaryIcon.isNull())
hgs
parents:
diff changeset
    88
    {
hgs
parents:
diff changeset
    89
        if (!mSecondaryIcon)
hgs
parents:
diff changeset
    90
        {
hgs
parents:
diff changeset
    91
            mSecondaryIcon = new HbIconItem(this);
hgs
parents:
diff changeset
    92
            mSecondaryIcon->setFlags(HbIcon::Colorized);
hgs
parents:
diff changeset
    93
            style()->setItemName(mSecondaryIcon, "secondaryIcon");
hgs
parents:
diff changeset
    94
        }
hgs
parents:
diff changeset
    95
        mSecondaryIcon->setIcon(secondaryIcon);
hgs
parents:
diff changeset
    96
        mSecondaryIcon->setColor(HbColorScheme::color("qtc_view_normal"));
hgs
parents:
diff changeset
    97
    }
hgs
parents:
diff changeset
    98
    else
hgs
parents:
diff changeset
    99
    {
hgs
parents:
diff changeset
   100
        if (mSecondaryIcon)
hgs
parents:
diff changeset
   101
        {
hgs
parents:
diff changeset
   102
            delete mSecondaryIcon;
hgs
parents:
diff changeset
   103
        }
hgs
parents:
diff changeset
   104
        mSecondaryIcon = 0;
hgs
parents:
diff changeset
   105
    }
hgs
parents:
diff changeset
   106
    
hgs
parents:
diff changeset
   107
    if (!mFirstLineText)
hgs
parents:
diff changeset
   108
    {
hgs
parents:
diff changeset
   109
        mFirstLineText = new HbTextItem(this);
hgs
parents:
diff changeset
   110
        mFirstLineText->setTextWrapping(Hb::TextNoWrap);
hgs
parents:
diff changeset
   111
        style()->setItemName(mFirstLineText, "text");    
hgs
parents:
diff changeset
   112
    }
hgs
parents:
diff changeset
   113
    mFirstLineText->setText(text);        
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    
hgs
parents:
diff changeset
   116
    if (!mSecondLineText)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        mSecondLineText = new HbTextItem(this);
hgs
parents:
diff changeset
   119
        mSecondLineText->setElideMode(mValueTextElideMode);
hgs
parents:
diff changeset
   120
        style()->setItemName(mSecondLineText, "valueText");
hgs
parents:
diff changeset
   121
    }
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
    mSecondLineText->setText(valueText);
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
81
hgs
parents: 72
diff changeset
   126
    if (!mFrameItem && mIsFocusable)
72
hgs
parents:
diff changeset
   127
    {
hgs
parents:
diff changeset
   128
        mFrameItem = new HbFrameItem(this);
hgs
parents:
diff changeset
   129
        mFrameItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_normal");
hgs
parents:
diff changeset
   130
        mFrameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   131
        mFrameItem->setZValue(CNT_CONTACTCARD_Z_FOCUS);
hgs
parents:
diff changeset
   132
        style()->setItemName(mFrameItem, "background");
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    
hgs
parents:
diff changeset
   136
    if (!mFocusItem && mIsFocusable)
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
        mFocusItem = new HbFrameItem(this);
hgs
parents:
diff changeset
   139
        mFocusItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_pressed");
hgs
parents:
diff changeset
   140
        mFocusItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   141
        mFocusItem->setZValue(CNT_CONTACTCARD_Z_FRAME);
hgs
parents:
diff changeset
   142
        mFocusItem->setVisible(false);
hgs
parents:
diff changeset
   143
        style()->setItemName(mFocusItem, "highlight");
hgs
parents:
diff changeset
   144
    }
hgs
parents:
diff changeset
   145
   
hgs
parents:
diff changeset
   146
    HbWidget::updatePrimitives();
hgs
parents:
diff changeset
   147
    updateGeometry();
hgs
parents:
diff changeset
   148
    repolish();
hgs
parents:
diff changeset
   149
}
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
void CntContactCardDetailItem::recreatePrimitives()
hgs
parents:
diff changeset
   152
{
hgs
parents:
diff changeset
   153
    HbWidget::recreatePrimitives();
hgs
parents:
diff changeset
   154
   
hgs
parents:
diff changeset
   155
    createPrimitives();
hgs
parents:
diff changeset
   156
}
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
void CntContactCardDetailItem::initGesture()
hgs
parents:
diff changeset
   159
{
hgs
parents:
diff changeset
   160
    grabGesture(Qt::TapGesture);
hgs
parents:
diff changeset
   161
}
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
void CntContactCardDetailItem::gestureEvent(QGestureEvent* event)
hgs
parents:
diff changeset
   164
{
hgs
parents:
diff changeset
   165
    CNT_ENTRY
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    if (HbTapGesture *tap = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) 
hgs
parents:
diff changeset
   168
    {
hgs
parents:
diff changeset
   169
        switch(tap->state()) 
hgs
parents:
diff changeset
   170
        {
hgs
parents:
diff changeset
   171
            case Qt::GestureStarted:  //
hgs
parents:
diff changeset
   172
                if (mIsFocusable)
hgs
parents:
diff changeset
   173
                {
hgs
parents:
diff changeset
   174
                    HbInstantFeedback::play(HbFeedback::Basic);
hgs
parents:
diff changeset
   175
                }
hgs
parents:
diff changeset
   176
                mHasFocus = true;
hgs
parents:
diff changeset
   177
                updatePrimitives();
hgs
parents:
diff changeset
   178
                break;
hgs
parents:
diff changeset
   179
            case Qt::GestureCanceled: // Reset state
hgs
parents:
diff changeset
   180
                mHasFocus = false;
hgs
parents:
diff changeset
   181
                updatePrimitives();
hgs
parents:
diff changeset
   182
                break;
hgs
parents:
diff changeset
   183
            case Qt::GestureUpdated:
hgs
parents:
diff changeset
   184
                if(tap->tapStyleHint() == HbTapGesture::TapAndHold) 
hgs
parents:
diff changeset
   185
                {
hgs
parents:
diff changeset
   186
                    emit onLongPress(event->mapToGraphicsScene(tap->position()));
hgs
parents:
diff changeset
   187
                }
hgs
parents:
diff changeset
   188
                break;
hgs
parents:
diff changeset
   189
            case Qt::GestureFinished: // emit clicked
hgs
parents:
diff changeset
   190
                mHasFocus = false;
hgs
parents:
diff changeset
   191
                updatePrimitives();
hgs
parents:
diff changeset
   192
                if (tap->tapStyleHint() == HbTapGesture::Tap) 
hgs
parents:
diff changeset
   193
                {
hgs
parents:
diff changeset
   194
                    emit clicked();                  
hgs
parents:
diff changeset
   195
                }
hgs
parents:
diff changeset
   196
                break;
hgs
parents:
diff changeset
   197
            default:
hgs
parents:
diff changeset
   198
                break;
hgs
parents:
diff changeset
   199
        }  
hgs
parents:
diff changeset
   200
        event->accept();
hgs
parents:
diff changeset
   201
    } 
hgs
parents:
diff changeset
   202
    else 
hgs
parents:
diff changeset
   203
    {
hgs
parents:
diff changeset
   204
        event->ignore();
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
    
hgs
parents:
diff changeset
   207
    CNT_EXIT
hgs
parents:
diff changeset
   208
}
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
void CntContactCardDetailItem::onLongPress(const QPointF &point)
hgs
parents:
diff changeset
   211
{
hgs
parents:
diff changeset
   212
    mHasFocus = false;
hgs
parents:
diff changeset
   213
    updatePrimitives();
hgs
parents:
diff changeset
   214
    emit longPressed(point);
hgs
parents:
diff changeset
   215
}
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
void CntContactCardDetailItem::updatePrimitives()
hgs
parents:
diff changeset
   218
{
hgs
parents:
diff changeset
   219
    if (mHasFocus && mIsFocusable)
hgs
parents:
diff changeset
   220
    {
hgs
parents:
diff changeset
   221
        mFocusItem->setVisible(true);
hgs
parents:
diff changeset
   222
        setProperty("state", "pressed");
hgs
parents:
diff changeset
   223
        HbEffect::start(mFocusItem, QString("frameitem"), QString("pressed"));      
hgs
parents:
diff changeset
   224
    }
hgs
parents:
diff changeset
   225
    else
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
        HbEffect::start(mFocusItem, QString("frameitem"), QString("released"));
hgs
parents:
diff changeset
   228
        mFocusItem->setVisible(false);
hgs
parents:
diff changeset
   229
        setProperty("state", "normal");
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
    HbWidget::updatePrimitives();
hgs
parents:
diff changeset
   232
}
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
void CntContactCardDetailItem::setDetails(CntContactCardDataItem* aDataItem)
hgs
parents:
diff changeset
   235
{
hgs
parents:
diff changeset
   236
    mValueTextElideMode = aDataItem->elideMode();
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
    if (aDataItem->icon() != icon)
hgs
parents:
diff changeset
   239
    {
hgs
parents:
diff changeset
   240
        icon.clear();
hgs
parents:
diff changeset
   241
        icon = aDataItem->icon();
hgs
parents:
diff changeset
   242
    }
hgs
parents:
diff changeset
   243
    if (aDataItem->secondaryIcon() != secondaryIcon)
hgs
parents:
diff changeset
   244
    {
hgs
parents:
diff changeset
   245
        secondaryIcon.clear();
hgs
parents:
diff changeset
   246
        secondaryIcon = aDataItem->secondaryIcon();
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
   
hgs
parents:
diff changeset
   249
    text.clear();
hgs
parents:
diff changeset
   250
    text = aDataItem->titleText();
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    valueText.clear();
hgs
parents:
diff changeset
   253
    valueText = aDataItem->valueText();
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
    recreatePrimitives();
hgs
parents:
diff changeset
   256
}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
//To update the secondary icon item
hgs
parents:
diff changeset
   259
void CntContactCardDetailItem::setSecondaryIconItem(HbIcon aIcon)
hgs
parents:
diff changeset
   260
{
hgs
parents:
diff changeset
   261
    secondaryIcon.clear();
hgs
parents:
diff changeset
   262
    secondaryIcon = aIcon;
hgs
parents:
diff changeset
   263
    if (!mSecondaryIcon)
hgs
parents:
diff changeset
   264
    {
hgs
parents:
diff changeset
   265
        mSecondaryIcon = new HbIconItem(this);
hgs
parents:
diff changeset
   266
        mSecondaryIcon->setFlags(HbIcon::Colorized);
hgs
parents:
diff changeset
   267
        style()->setItemName(mSecondaryIcon, "secondaryIcon");
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
    mSecondaryIcon->setIcon(secondaryIcon);
hgs
parents:
diff changeset
   270
    mSecondaryIcon->setColor(HbColorScheme::color("qtc_view_normal"));
hgs
parents:
diff changeset
   271
}
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
int CntContactCardDetailItem::index()
hgs
parents:
diff changeset
   274
{
hgs
parents:
diff changeset
   275
    return mIndex;
hgs
parents:
diff changeset
   276
}