diff -r d4f567ce2e7c -r 5b6f26637ad3 phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp Tue Aug 31 15:05:21 2010 +0300 @@ -0,0 +1,277 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include "cntdebug.h" + +#include "cntcontactcarddetailitem.h" +#include "cntcontactcarddataitem.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const int CNT_CONTACTCARD_Z_FRAME = -1; +const int CNT_CONTACTCARD_Z_FOCUS = -2; + +CntContactCardDetailItem::CntContactCardDetailItem(int index, QGraphicsItem *parent, bool isFocusable) : + HbWidget(parent), + mIcon(NULL), + mSecondaryIcon(NULL), + mFirstLineText(NULL), + mSecondLineText(NULL), + mFrameItem(NULL), + mFocusItem(NULL), + mHasFocus(false), + mIndex(index), + mIsFocusable(isFocusable), + mValueTextElideMode(Qt::ElideRight), + mIsUnderline(false) +{ + if (mIsFocusable) + { + HbEffect::add("frameitem", "listviewitem_press", "pressed"); + HbEffect::add("frameitem", "listviewitem_release", "released"); + initGesture(); + } + setProperty("state", "normal"); +} + +CntContactCardDetailItem::~CntContactCardDetailItem() +{ + +} + +void CntContactCardDetailItem::createPrimitives() +{ + if (!icon.isNull()) + { + if (!mIcon) + { + mIcon = new HbIconItem(this); + style()->setItemName(mIcon, "icon"); + } + mIcon->setIcon(icon); + } + else + { + if (mIcon) + { + delete mIcon; + } + mIcon = 0; + } + + if (!secondaryIcon.isNull()) + { + if (!mSecondaryIcon) + { + mSecondaryIcon = new HbIconItem(this); + mSecondaryIcon->setFlags(HbIcon::Colorized); + style()->setItemName(mSecondaryIcon, "secondaryIcon"); + } + mSecondaryIcon->setIcon(secondaryIcon); + mSecondaryIcon->setColor(HbColorScheme::color("qtc_view_normal")); + } + else + { + if (mSecondaryIcon) + { + delete mSecondaryIcon; + } + mSecondaryIcon = 0; + } + + if (!mFirstLineText) + { + mFirstLineText = new HbTextItem(this); + mFirstLineText->setTextWrapping(Hb::TextNoWrap); + style()->setItemName(mFirstLineText, "text"); + } + mFirstLineText->setText(text); + + + if (!mSecondLineText) + { + mSecondLineText = new HbTextItem(this); + mSecondLineText->setElideMode(mValueTextElideMode); + style()->setItemName(mSecondLineText, "valueText"); + } + + mSecondLineText->setText(valueText); + + + if (!mFrameItem) + { + mFrameItem = new HbFrameItem(this); + mFrameItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_normal"); + mFrameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); + mFrameItem->setZValue(CNT_CONTACTCARD_Z_FOCUS); + style()->setItemName(mFrameItem, "background"); + } + + + if (!mFocusItem && mIsFocusable) + { + mFocusItem = new HbFrameItem(this); + mFocusItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_pressed"); + mFocusItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); + mFocusItem->setZValue(CNT_CONTACTCARD_Z_FRAME); + mFocusItem->setVisible(false); + style()->setItemName(mFocusItem, "highlight"); + } + + HbWidget::updatePrimitives(); + updateGeometry(); + repolish(); +} + +void CntContactCardDetailItem::recreatePrimitives() +{ + HbWidget::recreatePrimitives(); + + createPrimitives(); +} + +void CntContactCardDetailItem::initGesture() +{ + grabGesture(Qt::TapGesture); +} + +void CntContactCardDetailItem::gestureEvent(QGestureEvent* event) +{ + CNT_ENTRY + + if (HbTapGesture *tap = qobject_cast(event->gesture(Qt::TapGesture))) + { + switch(tap->state()) + { + case Qt::GestureStarted: // + if (mIsFocusable) + { + HbInstantFeedback::play(HbFeedback::Basic); + } + mHasFocus = true; + updatePrimitives(); + break; + case Qt::GestureCanceled: // Reset state + mHasFocus = false; + updatePrimitives(); + break; + case Qt::GestureUpdated: + if(tap->tapStyleHint() == HbTapGesture::TapAndHold) + { + emit onLongPress(event->mapToGraphicsScene(tap->position())); + } + break; + case Qt::GestureFinished: // emit clicked + mHasFocus = false; + updatePrimitives(); + if (tap->tapStyleHint() == HbTapGesture::Tap) + { + emit clicked(); + } + break; + default: + break; + } + event->accept(); + } + else + { + event->ignore(); + } + + CNT_EXIT +} + +void CntContactCardDetailItem::onLongPress(const QPointF &point) +{ + mHasFocus = false; + updatePrimitives(); + emit longPressed(point); +} + +void CntContactCardDetailItem::updatePrimitives() +{ + if (mHasFocus && mIsFocusable) + { + mFocusItem->setVisible(true); + setProperty("state", "pressed"); + HbEffect::start(mFocusItem, QString("frameitem"), QString("pressed")); + } + else + { + HbEffect::start(mFocusItem, QString("frameitem"), QString("released")); + mFocusItem->setVisible(false); + setProperty("state", "normal"); + } + HbWidget::updatePrimitives(); +} + +void CntContactCardDetailItem::setDetails(CntContactCardDataItem* aDataItem) +{ + mValueTextElideMode = aDataItem->elideMode(); + + if (aDataItem->icon() != icon) + { + icon.clear(); + icon = aDataItem->icon(); + } + if (aDataItem->secondaryIcon() != secondaryIcon) + { + secondaryIcon.clear(); + secondaryIcon = aDataItem->secondaryIcon(); + } + + text.clear(); + text = aDataItem->titleText(); + + valueText.clear(); + valueText = aDataItem->valueText(); + + recreatePrimitives(); +} + +//To update the secondary icon item +void CntContactCardDetailItem::setSecondaryIconItem(HbIcon aIcon) +{ + secondaryIcon.clear(); + secondaryIcon = aIcon; + if (!mSecondaryIcon) + { + mSecondaryIcon = new HbIconItem(this); + mSecondaryIcon->setFlags(HbIcon::Colorized); + style()->setItemName(mSecondaryIcon, "secondaryIcon"); + } + mSecondaryIcon->setIcon(secondaryIcon); + mSecondaryIcon->setColor(HbColorScheme::color("qtc_view_normal")); +} + +int CntContactCardDetailItem::index() +{ + return mIndex; +} +