phonebookui/pbkcommonui/src/cntcontactcarddetailitem.cpp
changeset 24 0ba2181d7c28
child 27 de1630741fbe
--- /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 <hbiconitem.h>
+#include <hbtextitem.h>
+#include <hbrichtextitem.h>
+#include <hbframedrawer.h>
+#include <hbframeitem.h>
+#include <hbeffect.h>
+#include <hbgesturefilter.h>
+#include <hbgesture.h>
+#include <hbstyleloader.h>
+#include <QGraphicsSceneMouseEvent>
+#include <hbinstantfeedback.h>
+
+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("<u>");
+            temp.append("</u>");
+            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("<u>");
+            temp.append("</u>");
+        }
+        else
+        {
+            temp = text;
+        }
+        mFirstLineText->setText(temp);
+        repolish();
+    }   
+}
+
+int CntContactCardDetailItem::index()
+{
+    return mIndex;
+}
+