phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp
changeset 24 0ba2181d7c28
child 27 de1630741fbe
equal deleted inserted replaced
0:e686773b3f54 24:0ba2181d7c28
       
     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 "cntcontactcarddetailitem.h"
       
    19 #include <hbiconitem.h>
       
    20 #include <hbtextitem.h>
       
    21 #include <hbrichtextitem.h>
       
    22 #include <hbframedrawer.h>
       
    23 #include <hbframeitem.h>
       
    24 #include <hbeffect.h>
       
    25 #include <hbgesturefilter.h>
       
    26 #include <hbgesture.h>
       
    27 #include <hbstyleloader.h>
       
    28 #include <QGraphicsSceneMouseEvent>
       
    29 #include <hbinstantfeedback.h>
       
    30 
       
    31 CntContactCardDetailItem::CntContactCardDetailItem(int index, QGraphicsItem *parent, bool isFocusable) :
       
    32     HbWidget(parent),
       
    33     mIcon(0),
       
    34     mFirstLineText(0),
       
    35     mPrimaryText(0),
       
    36     mSecondLineText(0),
       
    37     mFrameItem(0),
       
    38     mFocusItem(0),
       
    39     mHasFocus(false),
       
    40     mGestureFilter(0),
       
    41     mGestureLongpressed(0),
       
    42     mIndex(index),
       
    43     mIsFocusable(isFocusable),
       
    44     mValueTextElideMode(Qt::ElideRight),
       
    45     mIsUnderline(false)
       
    46 {  
       
    47     if (mIsFocusable)
       
    48     {
       
    49         HbEffect::add(QString("frameitem"), QString(":/xml/edit_button_pressed.fxml"), QString("pressed"));
       
    50         HbEffect::add(QString("frameitem"), QString(":/xml/edit_button_released.fxml"), QString("released"));
       
    51         initGesture();
       
    52     }
       
    53 }
       
    54 
       
    55 CntContactCardDetailItem::~CntContactCardDetailItem()
       
    56 {
       
    57 
       
    58 }
       
    59 
       
    60 void CntContactCardDetailItem::createPrimitives()
       
    61 {
       
    62     if (!icon.isNull())
       
    63     {
       
    64         if (!mIcon)
       
    65         {
       
    66             mIcon = new HbIconItem(this);
       
    67             mIcon->setIcon(icon);
       
    68             style()->setItemName(mIcon, "icon");
       
    69         }
       
    70     }
       
    71     else
       
    72     {
       
    73         if (mIcon)
       
    74         {
       
    75             delete mIcon;
       
    76         }
       
    77         mIcon = 0;
       
    78     }
       
    79 
       
    80     if (!text.isNull())
       
    81     {
       
    82         mFirstLineText = new HbRichTextItem(this);
       
    83         if (mIsUnderline)
       
    84         {
       
    85             QString temp = text;
       
    86             temp.prepend("<u>");
       
    87             temp.append("</u>");
       
    88             mFirstLineText->setText(temp);
       
    89         }
       
    90         else
       
    91         {    
       
    92             mFirstLineText->setText(text);
       
    93         }
       
    94         
       
    95         mFirstLineText->setTextWrapping(Hb::TextWordWrap);
       
    96         style()->setItemName(mFirstLineText, "text");    
       
    97     }
       
    98     else
       
    99     {
       
   100         if (mFirstLineText)
       
   101         {
       
   102             delete mFirstLineText;
       
   103         }
       
   104         mFirstLineText = 0;
       
   105     }
       
   106     
       
   107     if (!primaryText.isNull())
       
   108     {
       
   109         if (!mPrimaryText)
       
   110         {
       
   111             mPrimaryText = new HbTextItem(this);
       
   112             mPrimaryText->setText(primaryText);
       
   113             mPrimaryText->setMaximumLines(2);
       
   114             mPrimaryText->setTextWrapping(Hb::TextWordWrap);
       
   115             style()->setItemName(mPrimaryText, "primaryText");
       
   116         }
       
   117     }
       
   118     else
       
   119     {
       
   120         if (mPrimaryText)
       
   121         {
       
   122             delete mPrimaryText;
       
   123         }
       
   124         mPrimaryText = 0;
       
   125     }
       
   126     
       
   127     if (!valueText.isNull())
       
   128     {
       
   129         if (!mSecondLineText)
       
   130         {
       
   131             mSecondLineText = new HbTextItem(this);
       
   132             mSecondLineText->setText(valueText);
       
   133             mSecondLineText->setElideMode(mValueTextElideMode);
       
   134             style()->setItemName(mSecondLineText, "valueText");
       
   135         }
       
   136     }
       
   137     else
       
   138     {
       
   139         if (mSecondLineText)
       
   140         {
       
   141             delete mSecondLineText;
       
   142         }
       
   143         mSecondLineText = 0;
       
   144     }
       
   145 
       
   146     if (!mFrameItem)
       
   147     {
       
   148         mFrameItem = new HbFrameItem(this);
       
   149         mFrameItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_normal");
       
   150         mFrameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
       
   151         mFrameItem->setZValue(-2);
       
   152         style()->setItemName(mFrameItem, "background");
       
   153     }
       
   154 
       
   155     if (!mFocusItem && mIsFocusable)
       
   156     {
       
   157         mFocusItem = new HbFrameItem(this);
       
   158         mFocusItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_pressed");
       
   159         mFocusItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
       
   160         mFocusItem->setZValue(-1);
       
   161         mFocusItem->setVisible(false);
       
   162         style()->setItemName(mFocusItem, "highlight");
       
   163     }
       
   164 }
       
   165 
       
   166 void CntContactCardDetailItem::recreatePrimitives()
       
   167 {
       
   168     HbWidget::recreatePrimitives();
       
   169 
       
   170     delete mIcon;
       
   171     mIcon = 0;
       
   172 
       
   173     delete mFirstLineText;
       
   174     mFirstLineText = 0;
       
   175     
       
   176     delete mPrimaryText;
       
   177     mPrimaryText = 0;
       
   178 
       
   179     delete mSecondLineText;
       
   180     mSecondLineText = 0;
       
   181 
       
   182     delete mFrameItem;
       
   183     mFrameItem = 0;
       
   184 
       
   185     delete mFocusItem;
       
   186     mFocusItem = 0;
       
   187 
       
   188     createPrimitives();
       
   189 }
       
   190 
       
   191 void CntContactCardDetailItem::initGesture()
       
   192 {
       
   193     mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
       
   194     mGestureLongpressed = new HbGesture(HbGesture::longpress, 5);
       
   195     mGestureFilter->addGesture(mGestureLongpressed);
       
   196     mGestureFilter->setLongpressAnimation(true);
       
   197     installSceneEventFilter(mGestureFilter);
       
   198 
       
   199     connect(mGestureLongpressed, SIGNAL(longPress(QPointF)), this, SLOT(onLongPress(QPointF)));
       
   200 }
       
   201 
       
   202 void CntContactCardDetailItem::onLongPress(const QPointF &point)
       
   203 {
       
   204     mHasFocus = false;
       
   205     updatePrimitives();
       
   206     emit longPressed(point);
       
   207 }
       
   208 
       
   209 void CntContactCardDetailItem::updatePrimitives()
       
   210 {
       
   211     HbWidget::updatePrimitives();
       
   212     if (mHasFocus && mIsFocusable)
       
   213     {
       
   214         mFocusItem->setVisible(true);
       
   215         HbEffect::start(mFocusItem, QString("frameitem"), QString("pressed"));
       
   216     }
       
   217     else
       
   218     {
       
   219         HbEffect::start(mFocusItem, QString("frameitem"), QString("released"));
       
   220     }
       
   221 }
       
   222 
       
   223 void CntContactCardDetailItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
       
   224 {
       
   225     if (mIsFocusable)
       
   226     {
       
   227         HbInstantFeedback::play(HbFeedback::Basic);
       
   228     }
       
   229     event->accept();
       
   230     mHasFocus = true;
       
   231     updatePrimitives();
       
   232 }
       
   233 
       
   234 void CntContactCardDetailItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
       
   235 {
       
   236     if (!rect().contains(event->pos()) && mHasFocus)
       
   237     {
       
   238         mHasFocus = false;
       
   239         updatePrimitives();
       
   240     }
       
   241     event->accept();
       
   242 }
       
   243 
       
   244 
       
   245 void CntContactCardDetailItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
       
   246 {
       
   247     bool hadFocus = mHasFocus;
       
   248     mHasFocus = false;
       
   249     if (rect().contains(event->pos()) && hadFocus)
       
   250     {
       
   251         updatePrimitives();
       
   252         emit clicked();
       
   253     }
       
   254     event->accept();
       
   255 }
       
   256 
       
   257 void CntContactCardDetailItem::setDetails(const HbIcon detailIcon, const QString& detailText, const QString& detailValueText, Qt::TextElideMode valueTextElideMode, bool underLine)
       
   258 {
       
   259     text.clear();
       
   260     valueText.clear();
       
   261     icon.clear();
       
   262     mValueTextElideMode = valueTextElideMode;
       
   263     mIsUnderline = underLine;
       
   264 
       
   265     if (!detailIcon.isNull())
       
   266         icon = detailIcon;
       
   267     if (!detailText.isEmpty())
       
   268         text = detailText;
       
   269     if (!detailValueText.isEmpty())
       
   270         valueText = detailValueText;
       
   271 
       
   272     recreatePrimitives();
       
   273 }
       
   274 
       
   275 void CntContactCardDetailItem::setDetails(const HbIcon detailIcon, const QString& detailText)
       
   276 {
       
   277     primaryText.clear();
       
   278     icon.clear();
       
   279 
       
   280     if (!detailIcon.isNull())
       
   281         icon = detailIcon;
       
   282     if (!detailText.isEmpty())
       
   283         primaryText = detailText;
       
   284     
       
   285     recreatePrimitives();
       
   286 }
       
   287 
       
   288 void CntContactCardDetailItem::setUnderLine(bool underLine)
       
   289 {
       
   290     if (mIsUnderline != underLine)
       
   291     {
       
   292         QString temp;
       
   293         mIsUnderline = underLine; 
       
   294         createPrimitives();
       
   295         if (underLine)
       
   296         {
       
   297             temp = text;
       
   298             temp.prepend("<u>");
       
   299             temp.append("</u>");
       
   300         }
       
   301         else
       
   302         {
       
   303             temp = text;
       
   304         }
       
   305         mFirstLineText->setText(temp);
       
   306         repolish();
       
   307     }   
       
   308 }
       
   309 
       
   310 int CntContactCardDetailItem::index()
       
   311 {
       
   312     return mIndex;
       
   313 }
       
   314