diff -r e686773b3f54 -r 0ba2181d7c28 phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp Fri Mar 19 09:27:18 2010 +0200 @@ -0,0 +1,314 @@ +/* +* 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 "cntcontactcarddetailitem.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +CntContactCardDetailItem::CntContactCardDetailItem(int index, QGraphicsItem *parent, bool isFocusable) : + HbWidget(parent), + mIcon(0), + mFirstLineText(0), + mPrimaryText(0), + mSecondLineText(0), + mFrameItem(0), + mFocusItem(0), + mHasFocus(false), + mGestureFilter(0), + mGestureLongpressed(0), + mIndex(index), + mIsFocusable(isFocusable), + mValueTextElideMode(Qt::ElideRight), + mIsUnderline(false) +{ + if (mIsFocusable) + { + HbEffect::add(QString("frameitem"), QString(":/xml/edit_button_pressed.fxml"), QString("pressed")); + HbEffect::add(QString("frameitem"), QString(":/xml/edit_button_released.fxml"), QString("released")); + initGesture(); + } +} + +CntContactCardDetailItem::~CntContactCardDetailItem() +{ + +} + +void CntContactCardDetailItem::createPrimitives() +{ + if (!icon.isNull()) + { + if (!mIcon) + { + mIcon = new HbIconItem(this); + mIcon->setIcon(icon); + style()->setItemName(mIcon, "icon"); + } + } + else + { + if (mIcon) + { + delete mIcon; + } + mIcon = 0; + } + + if (!text.isNull()) + { + mFirstLineText = new HbRichTextItem(this); + if (mIsUnderline) + { + QString temp = text; + temp.prepend(""); + temp.append(""); + mFirstLineText->setText(temp); + } + else + { + mFirstLineText->setText(text); + } + + mFirstLineText->setTextWrapping(Hb::TextWordWrap); + style()->setItemName(mFirstLineText, "text"); + } + else + { + if (mFirstLineText) + { + delete mFirstLineText; + } + mFirstLineText = 0; + } + + if (!primaryText.isNull()) + { + if (!mPrimaryText) + { + mPrimaryText = new HbTextItem(this); + mPrimaryText->setText(primaryText); + mPrimaryText->setMaximumLines(2); + mPrimaryText->setTextWrapping(Hb::TextWordWrap); + style()->setItemName(mPrimaryText, "primaryText"); + } + } + else + { + if (mPrimaryText) + { + delete mPrimaryText; + } + mPrimaryText = 0; + } + + if (!valueText.isNull()) + { + if (!mSecondLineText) + { + mSecondLineText = new HbTextItem(this); + mSecondLineText->setText(valueText); + mSecondLineText->setElideMode(mValueTextElideMode); + style()->setItemName(mSecondLineText, "valueText"); + } + } + else + { + if (mSecondLineText) + { + delete mSecondLineText; + } + mSecondLineText = 0; + } + + if (!mFrameItem) + { + mFrameItem = new HbFrameItem(this); + mFrameItem->frameDrawer().setFrameGraphicsName("qtg_fr_list_normal"); + mFrameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); + mFrameItem->setZValue(-2); + 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(-1); + mFocusItem->setVisible(false); + style()->setItemName(mFocusItem, "highlight"); + } +} + +void CntContactCardDetailItem::recreatePrimitives() +{ + HbWidget::recreatePrimitives(); + + delete mIcon; + mIcon = 0; + + delete mFirstLineText; + mFirstLineText = 0; + + delete mPrimaryText; + mPrimaryText = 0; + + delete mSecondLineText; + mSecondLineText = 0; + + delete mFrameItem; + mFrameItem = 0; + + delete mFocusItem; + mFocusItem = 0; + + createPrimitives(); +} + +void CntContactCardDetailItem::initGesture() +{ + mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this); + mGestureLongpressed = new HbGesture(HbGesture::longpress, 5); + mGestureFilter->addGesture(mGestureLongpressed); + mGestureFilter->setLongpressAnimation(true); + installSceneEventFilter(mGestureFilter); + + connect(mGestureLongpressed, SIGNAL(longPress(QPointF)), this, SLOT(onLongPress(QPointF))); +} + +void CntContactCardDetailItem::onLongPress(const QPointF &point) +{ + mHasFocus = false; + updatePrimitives(); + emit longPressed(point); +} + +void CntContactCardDetailItem::updatePrimitives() +{ + HbWidget::updatePrimitives(); + if (mHasFocus && mIsFocusable) + { + mFocusItem->setVisible(true); + HbEffect::start(mFocusItem, QString("frameitem"), QString("pressed")); + } + else + { + HbEffect::start(mFocusItem, QString("frameitem"), QString("released")); + } +} + +void CntContactCardDetailItem::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + if (mIsFocusable) + { + HbInstantFeedback::play(HbFeedback::Basic); + } + event->accept(); + mHasFocus = true; + updatePrimitives(); +} + +void CntContactCardDetailItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (!rect().contains(event->pos()) && mHasFocus) + { + mHasFocus = false; + updatePrimitives(); + } + event->accept(); +} + + +void CntContactCardDetailItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + bool hadFocus = mHasFocus; + mHasFocus = false; + if (rect().contains(event->pos()) && hadFocus) + { + updatePrimitives(); + emit clicked(); + } + event->accept(); +} + +void CntContactCardDetailItem::setDetails(const HbIcon detailIcon, const QString& detailText, const QString& detailValueText, Qt::TextElideMode valueTextElideMode, bool underLine) +{ + text.clear(); + valueText.clear(); + icon.clear(); + mValueTextElideMode = valueTextElideMode; + mIsUnderline = underLine; + + if (!detailIcon.isNull()) + icon = detailIcon; + if (!detailText.isEmpty()) + text = detailText; + if (!detailValueText.isEmpty()) + valueText = detailValueText; + + recreatePrimitives(); +} + +void CntContactCardDetailItem::setDetails(const HbIcon detailIcon, const QString& detailText) +{ + primaryText.clear(); + icon.clear(); + + if (!detailIcon.isNull()) + icon = detailIcon; + if (!detailText.isEmpty()) + primaryText = detailText; + + recreatePrimitives(); +} + +void CntContactCardDetailItem::setUnderLine(bool underLine) +{ + if (mIsUnderline != underLine) + { + QString temp; + mIsUnderline = underLine; + createPrimitives(); + if (underLine) + { + temp = text; + temp.prepend(""); + temp.append(""); + } + else + { + temp = text; + } + mFirstLineText->setText(temp); + repolish(); + } +} + +int CntContactCardDetailItem::index() +{ + return mIndex; +} +