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