diff -r 64e38f08e49c -r 47d84de1c893 emailuis/nmhswidget/src/nmhswidgetemailrow.cpp --- a/emailuis/nmhswidget/src/nmhswidgetemailrow.cpp Fri Sep 17 08:27:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -/* - * Copyright (c) 2010 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include "nmicons.h" -#include "nmcommon.h" -#include "nmhswidgetemailrow.h" -#include "nmhswidgetconsts.h" -#include "emailtrace.h" - -NmHsWidgetEmailRow::NmHsWidgetEmailRow(QGraphicsItem *parent, Qt::WindowFlags flags) : - HbWidget(parent, flags), - mSenderLabel(0), - mSubjectLabel(0), - mTimeLabel(0), - mNewMailIcon(0), - mSeparatorIcon(0), - mMessageId(0), - mBackgroundLayoutItem(0) -{ - NM_FUNCTION; - grabGesture(Qt::TapGesture); -} - -/*! - Destructor - */ -NmHsWidgetEmailRow::~NmHsWidgetEmailRow() -{ - NM_FUNCTION; -} - -/*! - Returns id of message shown - */ -NmId NmHsWidgetEmailRow::messageId() -{ - NM_FUNCTION; - return mMessageId; - -} - -/* - Setup email row ui - Must be called after constructor. - /return true if loading succeeded, otherwise false. False indicates that object is unusable. - */ -bool NmHsWidgetEmailRow::setupUI() - { - NM_FUNCTION; - - if(!loadDocML() || !setupGraphics()){ - return false; - } - return true; - } - - - -/*! - Loads layout data and child items from docml file - /return true if loading succeeded, otherwise false. False indicates that object is unusable. - */ -bool NmHsWidgetEmailRow::loadDocML() -{ - NM_FUNCTION; - - QT_TRY{ - // Use document loader to load the contents - HbDocumentLoader loader; - bool ok(false); - loader.load(KNmHsWidgetMailRowDocML, &ok); - if (!ok) { - NM_ERROR(1,"NmHsWidgetEmailRow::loadDocML fail @ loader"); - return false; - } - - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical); - - //Do the layout stuff and Set layout before next return to avoid memoryleak - layout->setContentsMargins(KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin, - KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin); - layout->setSpacing(KNmHsWidgetContentsMargin); - setLayout(layout); - - //find container widget - QGraphicsWidget *container = loader.findWidget(KNmHsWidgetMailRowContainer); - if (!container) { - NM_ERROR(1,"NmHsWidgetEmailRow::loadDocML fail @ container"); - return false; - } - layout->addItem(container); - - //child items possible to update - //separator - mSeparatorIcon = static_cast (loader.findWidget(KNmHsWidgetMailSeparatorIcon)); - - //labels - mSenderLabel = static_cast (loader.findWidget(KNmHsWidgetMailRowSenderLabel)); - mSubjectLabel = static_cast (loader.findWidget(KNmHsWidgetMailRowSubjectLabel)); - mTimeLabel = static_cast (loader.findWidget(KNmHsWidgetMailRowTimeLabel)); - - //icons - mNewMailIcon = static_cast (loader.findWidget(KNmHsWidgetMailRowNewMailIcon)); - // KNmHsWidgetMailRowLeftIcon is not yet used, because followup information is not shown in client side - // and thus it is not wanted to be shown in widget side - mStatusIcons.append(static_cast (loader.findWidget(KNmHsWidgetMailRowRightIcon))); - mStatusIcons.append(static_cast (loader.findWidget(KNmHsWidgetMailRowMiddleIcon))); - mStatusIcons.append(static_cast (loader.findWidget(KNmHsWidgetMailRowLeftIcon))); - - //Verify that items are valid - if (!mSenderLabel || !mSubjectLabel || !mTimeLabel || !mNewMailIcon || !mSeparatorIcon) { - NM_ERROR(1,"NmHsWidgetEmailRow::loadDocML fail @ labels & icons"); - return false; - } - //Verify all mStatusIcons - for (int i = 0; i < mStatusIcons.length(); i++) { - if (!mStatusIcons.at(i)) { - return false; - } - } - - return true; - } - QT_CATCH(...){ - return false; - } -} - -/* - Setup graphics that cannot be loaded from docml. - /return true if loading succeeded, otherwise false. False indicates that object is unusable. - */ -bool NmHsWidgetEmailRow::setupGraphics() - { - NM_FUNCTION; - - HbFrameDrawer* newMailIconFrameDrawer = 0; - HbFrameItem* newMailIconFrameItem = 0; - HbFrameDrawer* backgroundFrameDrawer = 0; - QT_TRY{ - //separator icon - HbIcon separatorIcon("qtg_graf_divider_h_thin"); - mSeparatorIcon->setIcon(separatorIcon); - - //new email icon - newMailIconFrameDrawer = new HbFrameDrawer("qtg_fr_list_new_item", - HbFrameDrawer::ThreePiecesVertical); - newMailIconFrameItem = new HbFrameItem(newMailIconFrameDrawer); - mNewMailIcon->setBackgroundItem(newMailIconFrameItem); - - //hide all the icons first to avoid blinking - hideIcons(); - - //pressed background - backgroundFrameDrawer = new HbFrameDrawer("qtg_fr_hsitems_pressed", HbFrameDrawer::NinePieces); - mBackgroundLayoutItem = new HbFrameItem( backgroundFrameDrawer ); - setBackgroundItem( mBackgroundLayoutItem ); - mBackgroundLayoutItem->hide(); - - return true; - } - QT_CATCH(...){ - if(!newMailIconFrameItem && newMailIconFrameDrawer){ - delete newMailIconFrameDrawer; - newMailIconFrameDrawer = NULL; - } - if(!mBackgroundLayoutItem && backgroundFrameDrawer){ - delete backgroundFrameDrawer; - backgroundFrameDrawer = NULL; - } - return false; - } -} - -/*! - Sets the data provided as a parameter to the UI components - \param envelope message envelope representing an email - */ -void NmHsWidgetEmailRow::updateMailData(const NmMessageEnvelope& envelope) -{ - NM_FUNCTION; - - mEnvelope = NmMessageEnvelope(envelope); - - //hide all icons, so no previous data is messing with the new - hideIcons(); - - mMessageId = envelope.messageId(); - //Show sender name if it is available, otherwise show email address - QString senderDisplayName = envelope.sender().displayName(); - if (!senderDisplayName.isNull() && !senderDisplayName.isEmpty()) { - mSenderLabel->setPlainText(senderDisplayName); - } - else { - mSenderLabel->setPlainText(envelope.sender().address()); - } - - //Set subject - mSubjectLabel->setPlainText(envelope.subject()); - - mMessageSentTime = envelope.sentTime(); - updateDateTime(); - - //set new icons to widget based on the data - setIconsToWidget( envelope ); - - //set fonts color and size - setFontsSize(mEnvelope.isRead()); - setHighlighedFontsColor(false); - } - -/*! - updateDateTime to label using correct locale -*/ -void NmHsWidgetEmailRow::updateDateTime() - { - NM_FUNCTION; - //Set Date with locale support - //Time shown if message is sent today, otherwise show date - HbExtendedLocale locale = HbExtendedLocale::system(); - QDateTime now = QDateTime::currentDateTime(); - //change time to locale time. mMessageSentTime is always in GMT - QDateTime localTime = mMessageSentTime.addSecs(locale.universalTimeOffset()); - if ( localTime.date() == now.date() ) - { - //time format specification - QString timeSpec = r_qtn_time_usual; - mTimeLabel->setPlainText( locale.format(localTime.time(), timeSpec) ); - } - else - { - QString dateSpec = r_qtn_date_without_year; - mTimeLabel->setPlainText( locale.format(localTime.date(), dateSpec) ); - } - } - -/*! - hide icons from widget - */ -void NmHsWidgetEmailRow::hideIcons() -{ - NM_FUNCTION; - for (int i = 0; i < mStatusIcons.count(); i++) { - mStatusIcons.at(i)->hide(); - } - mNewMailIcon->hide(); -} - -/*! - Set icons to widget - */ -void NmHsWidgetEmailRow::setIconsToWidget(const NmMessageEnvelope& envelope) -{ - NM_FUNCTION; - - bool unreadMail = !envelope.isRead(); - bool attachment = envelope.hasAttachments(); - int priority = envelope.priority(); - - if (unreadMail) { - mNewMailIcon->show(); - } - - // Here we have list for priority and attachment icons. Later it is easy to add - // followup icon or something else if needed. - QList iconList; - - // Priority icon is added to list first thus it is always shown most right. - switch (priority) { - case NmMessagePriorityLow: - iconList.append(NmIcons::getIcon(NmIcons::NmIconPriorityLow)); - break; - case NmMessagePriorityHigh: - iconList.append(NmIcons::getIcon(NmIcons::NmIconPriorityHigh)); - break; - case NmMessagePriorityNormal: - default: - // Normal priority has no icon - break; - } - - // Attachment icon is always shown on the left side of attachment icon if it - // exists. Otherwise in the most right. - if (attachment) { - iconList.append(NmIcons::getIcon(NmIcons::NmIconAttachment)); - } - - // Here we show icons added to the iconList in the order they have been added. - for (int count = 0; count < iconList.count(); count++) { - mStatusIcons.at(count)->setIcon(iconList.at(count)); - mStatusIcons.at(count)->show(); - } -} - - -/*! - sets fonts size. Unread and read mails are shown differently -*/ -void NmHsWidgetEmailRow::setFontsSize( bool read ) - { - NM_FUNCTION; - HbFontSpec fontSpec; - - if(!read){ - fontSpec.setRole(HbFontSpec::Primary); - mTimeLabel->fontSpec().setRole(HbFontSpec::Primary); - } - else{ - fontSpec.setRole(HbFontSpec::Secondary); - mTimeLabel->fontSpec().setRole(HbFontSpec::Secondary); - } - - qreal size; - bool found = style()->parameter(QString("hb-param-text-height-secondary"), size ); - if (found) { - fontSpec.setTextHeight(size); - } - - mSenderLabel->setFontSpec(fontSpec); - mSubjectLabel->setFontSpec(fontSpec); - } - -/*! - sets fonts color. - /param bool pressed indicates if row is pressed down or not -*/ -void NmHsWidgetEmailRow::setHighlighedFontsColor( bool pressed ) - { - NM_FUNCTION; - QColor newFontColor; - - if(pressed){ - newFontColor = HbColorScheme::color("qtc_hs_list_item_pressed"); - } - else if(mEnvelope.isRead()){ - newFontColor = HbColorScheme::color("qtc_hs_list_item_content_normal"); - } - else{ - newFontColor = HbColorScheme::color("qtc_hs_list_item_title_normal"); - } - - mSenderLabel->setTextColor(newFontColor); - mSubjectLabel->setTextColor(newFontColor); - mTimeLabel->setTextColor(newFontColor); - } - -/*! - change background highlight - /param bool show if true then shown, false hide -*/ -void NmHsWidgetEmailRow::showHighlight( bool show ) - { - NM_FUNCTION; - - if(show){ - mBackgroundLayoutItem->show(); - } - else{ - mBackgroundLayoutItem->hide(); - } - } - -/* - * NmHsWidgetEmailRow::gestureEvent(QGestureEvent *event) - */ -void NmHsWidgetEmailRow::gestureEvent(QGestureEvent *event) -{ - NM_FUNCTION; - if(!event){ - return; - } - HbTapGesture *gesture = qobject_cast(event->gesture(Qt::TapGesture)); - if(!gesture){ - return; - } - switch (gesture->state()) { - case Qt::GestureStarted: - setHighlighedFontsColor(true); - showHighlight(true); - break; - case Qt::GestureCanceled: - setHighlighedFontsColor(false); - showHighlight(false); - break; - case Qt::GestureFinished: - setHighlighedFontsColor(false); - showHighlight(false); - if (gesture->tapStyleHint() == HbTapGesture::Tap) { - HbInstantFeedback::play(HbFeedback::BasicItem); - emit mailViewerLaunchTriggered(mMessageId); - } - break; - default: - break; - } -} - -/* - * NmHsWidgetEmailRow::event() - */ -bool NmHsWidgetEmailRow::event( QEvent *event ) -{ - NM_FUNCTION; - QEvent::Type eventType = event->type(); - if( eventType == HbEvent::ThemeChanged ){ - setHighlighedFontsColor(false); - return true; - } - return HbWidget::event(event); -}