diff -r 6a20128ce557 -r ebfee66fde93 messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,317 @@ +/* + * 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: Main view of unified viewer + * + */ + +#include "unifiedviewer.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "uniscrollarea.h" +#include "unicontentswidget.h" +#include "univiewerfeeder.h" +#include "convergedmessageid.h" +#include "convergedmessage.h" +#include "convergedmessageaddress.h" +#include "conversationsenginedefines.h" +#include "conversationsengine.h" +#include "debugtraces.h" +#include "nativemessageconsts.h" +#include "mmsconformancecheck.h" +#include "UniEditorGenUtils.h" // This is needed for KDefaultMaxSize + +// LOCAL CONSTANTS +const QString REPLY_ICON("qtg_mono_reply"); +const QString REPLY_ALL_ICON("qtg_mono_reply_all"); +const QString FORWARD_ICON("qtg_mono_forward_msg"); +const QString SEND_ICON("qtg_mono_send"); +const QString DELETE_ICON("qtg_mono_delete"); + +//LOCALIZED CONSTANTS +#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message") +#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete") +#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel") + +//---------------------------------------------------------------------------- +// UnifiedViewer::UnifiedViewer +// constructor +//---------------------------------------------------------------------------- +UnifiedViewer::UnifiedViewer(const qint32 messageId, QGraphicsItem *parent) : + MsgBaseView(parent) +{ + QDEBUG_WRITE("UnifiedViewer contruction start"); + + if (!HbStyleLoader::registerFilePath(":/layouts")) + { + QDEBUG_WRITE("ERROR: UnifiedViewer -> HbStyleLoader::registerFilePath"); + } + + mMessageId = messageId; + mViewFeeder = new UniViewerFeeder(mMessageId, this); + + mScrollArea = new UniScrollArea(this); + this->setWidget(mScrollArea); + + mContentsWidget = new UniContentsWidget(mViewFeeder,this); + + connect(mContentsWidget,SIGNAL(sendMessage(const QString&,const QString&)), + this, SLOT(sendMessage(const QString&,const QString&))); + + connect(mScrollArea, SIGNAL(scrolledToNextSlide()), + mContentsWidget, SLOT(populateNextSlide())); + + mScrollArea->setContentWidget(mContentsWidget); + mScrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + mScrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide); + + QDEBUG_WRITE("UnifiedViewer contruction End"); +} + +//---------------------------------------------------------------------------- +// UnifiedViewer::UnifiedViewer +// Destructor +//---------------------------------------------------------------------------- +UnifiedViewer::~UnifiedViewer() +{ + HbStyleLoader::unregisterFilePath(":/layouts"); +} + +//---------------------------------------------------------------------------- +// UnifiedViewer::createToolBar +// Creates tool bar actions +//---------------------------------------------------------------------------- +void UnifiedViewer::createToolBar() +{ + HbToolBar* toolbar = this->toolBar(); + toolbar->setOrientation(Qt::Horizontal); + + int sendingState = mViewFeeder->sendingState(); + + if (mViewFeeder->sendingState() == ConvergedMessage::Failed) + { + toolbar->addAction(HbIcon(SEND_ICON), ""); + } + else + { + toolbar->addAction(HbIcon(REPLY_ICON), ""); + toolbar->addAction(HbIcon(REPLY_ALL_ICON), ""); + } + + if (validateMsgForForward()) + { + toolbar->addAction(HbIcon(FORWARD_ICON), "", this, SLOT(handleFwdAction())); + } + + toolbar->addAction(HbIcon(DELETE_ICON), "", this, SLOT(handleDeleteAction())); +} + +//--------------------------------------------------------------- +// UnifiedViewer::clearContent +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::clearContent() +{ + QDEBUG_WRITE("UnifiedViewer clearContent start"); + + mContentsWidget->clearContent(); + mContentsWidget->resize(mContentsWidget->rect().width(), -1); + mScrollArea->setPosToStart(); + mViewFeeder->clearContent(); + + QDEBUG_WRITE("UnifiedViewer clearContent End"); +} + +//--------------------------------------------------------------- +// UnifiedViewer::populateContent +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::populateContent(const qint32 messageId, bool update, int msgCount) +{ + QDEBUG_WRITE("UnifiedViewer populateContent Start"); + + mMsgCount = msgCount; + mMessageId = messageId; + + QDEBUG_WRITE("UnifiedViewer feeder->updateContent START"); + + if (update) + { + mViewFeeder->updateContent(messageId); + } + QDEBUG_WRITE("UnifiedViewer feeder->updateContent END"); + + // Dont show the scroll bar. + mScrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + + if ( (mViewFeeder->msgType() == KSenduiMtmMmsUidValue) && + (mViewFeeder->slideCount() > 0) ) + { + mScrollArea->setTotalSlides(mViewFeeder->slideCount()); + } + else + { + mScrollArea->setTotalSlides(1); + } + mScrollArea->resetCurrentSlide(); + + mContentsWidget->populateContent(); + + //Creation of toolbar now depends on content + createToolBar(); + + QDEBUG_WRITE("UnifiedViewer populateContent END"); +} + +//--------------------------------------------------------------- +// UnifiedViewer::handleFwdAction +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::handleFwdAction() +{ + ConvergedMessage message; + ConvergedMessageId id(mMessageId); + message.setMessageId(id); + if(mViewFeeder->msgType() == KSenduiMtmMmsUidValue) + { + message.setMessageType(ConvergedMessage::Mms); + } + else + { + message.setMessageType(ConvergedMessage::Sms); + } + + QByteArray dataArray; + QDataStream messageStream + (&dataArray, QIODevice::WriteOnly | QIODevice::Append); + message.serialize(messageStream); + + QVariantList params; + params << MsgBaseView::UNIEDITOR; // target view + params << MsgBaseView::UNIVIEWER; // source view + + params << dataArray; + params << MsgBaseView::FORWARD_MSG; + + emit switchView(params); +} + +//--------------------------------------------------------------- +// UnifiedViewer::resizeEvent +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::resizeEvent(QGraphicsSceneResizeEvent * event) +{ + Q_UNUSED(event) + mContentsWidget->resize(this->rect().width(), this->rect().height()+1); +} + +//--------------------------------------------------------------- +// UnifiedViewer::handleDeleteAction +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::handleDeleteAction() +{ + HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)), + LOC_BUTTON_DELETE, + LOC_BUTTON_CANCEL); +} + +//--------------------------------------------------------------- +// UnifiedViewer::sendMessage +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::sendMessage(const QString& phoneNumber,const QString& alias) + { + ConvergedMessage message; + message.setBodyText(QString()); + + ConvergedMessageAddress address; + address.setAlias(alias); + address.setAddress(phoneNumber); + message.addToRecipient(address); + + QByteArray dataArray; + QDataStream messageStream + (&dataArray, QIODevice::WriteOnly | QIODevice::Append); + message.serialize(messageStream); + + QVariantList params; + params << MsgBaseView::UNIEDITOR; + params << MsgBaseView::UNIVIEWER; + params << dataArray; + + emit switchView(params); + } + +//--------------------------------------------------------------- +// UnifiedViewer::validateMsgForForward +// @see header file +//--------------------------------------------------------------- +bool UnifiedViewer::validateMsgForForward() +{ + if (mViewFeeder->msgType() == KSenduiMtmMmsUidValue) + { + bool retValue = false; + + //Validate if the mms msg can be forwarded or not + MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck; + retValue = mmsConformanceCheck->validateMsgForForward(mMessageId); + + delete mmsConformanceCheck; + return retValue; + } + + return true; +} + +//--------------------------------------------------------------- +// UnifiedViewer::onDialogDeleteMsg +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::onDialogDeleteMsg(HbAction* action) +{ + HbMessageBox *dlg = qobject_cast (sender()); + if (action == dlg->actions().at(0)) { + QList msgIdList; + msgIdList << mMessageId; + + ConversationsEngine::instance()->deleteMessages(msgIdList); + + QVariantList param; + if (mMsgCount > 1) { + param << MsgBaseView::CV; + param << MsgBaseView::UNIVIEWER; + } + else { + param << MsgBaseView::CLV; + param << MsgBaseView::UNIVIEWER; + } + + QVariant dummy(QVariant::Invalid); + param << dummy; + emit switchView(param); + } +} + +// EOF