diff -r fa1df4b99609 -r ebe688cedc25 messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -0,0 +1,390 @@ +/* + * 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 +#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" + +// 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"); + +//DB-file +_LIT(KDbFileName, "c:[2002A542]conversations.db"); +// query to see if msg is forwardable +_LIT(KSelectMsgPropertyStmt, " SELECT message_id, msg_property FROM conversation_messages WHERE message_id=:message_id "); + + +//LOCALIZED CONSTANTS +#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message") +#define LOC_DELETE_SHARED_MESSAGE hbTrId("txt_messaging_dialog_same_message_exists_in_multip") + +//---------------------------------------------------------------------------- +// 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 + { + // do not show reply option for multi recipient outgoing message + if(!(!mViewFeeder->isIncoming() && mViewFeeder->recipientCount()>1)) + { + toolbar->addAction(HbIcon(REPLY_ICON), "", this, SLOT(handleReplyAction())); + } + + if (mViewFeeder->recipientCount() > 1) + { + toolbar->addAction(HbIcon(REPLY_ALL_ICON), "", this, SLOT(handleReplyAllAction())); + } + } + + if (isForwardOk()) + { + 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() +{ + launchEditor(MsgBaseView::FORWARD_MSG); +} + +//--------------------------------------------------------------- +// UnifiedViewer::handleReplyAction +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::handleReplyAction() +{ + launchEditor(MsgBaseView::REPLY_MSG); +} + +//--------------------------------------------------------------- +// UnifiedViewer::handleReplyAllAction +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::handleReplyAllAction() +{ + launchEditor(MsgBaseView::REPLY_ALL_MSG); +} + +//--------------------------------------------------------------- +// 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() +{ + QString txt = LOC_DELETE_MESSAGE; + + //if mms and out going. check for sharing + if((mViewFeeder->msgType() == KSenduiMtmMmsUidValue) && (!mViewFeeder->isIncoming())) + { + if(mViewFeeder->recipientCount() > 1 ) + { + txt = LOC_DELETE_SHARED_MESSAGE; + } + } + + HbMessageBox::question(txt,this,SLOT(onDialogDeleteMsg(int)), + HbMessageBox::Delete | HbMessageBox::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::onDialogDeleteMsg +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::onDialogDeleteMsg(int val) +{ + if (val == HbMessageBox::Delete) { + 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); + } +} + +//--------------------------------------------------------------- +// UnifiedViewer::launchEditor +// @see header file +//--------------------------------------------------------------- +void UnifiedViewer::launchEditor( + MsgBaseView::UniEditorOperation operation) +{ + 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 << operation; + + emit switchView(params); +} + +//--------------------------------------------------------------- +// UnifiedViewer::isForwardOk +// @see header file +//--------------------------------------------------------------- +bool UnifiedViewer::isForwardOk() +{ + bool canForwardMsg = true; + if(mViewFeeder->msgType() == KSenduiMtmMmsUidValue) + { + // open DB + RSqlDatabase sqlDb; + TInt error = sqlDb.Open(KDbFileName); + if(error == KErrNone) + { + RSqlStatement sqlSelectStmt; + CleanupClosePushL(sqlSelectStmt); + sqlSelectStmt.PrepareL(sqlDb,KSelectMsgPropertyStmt); + TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id")); + sqlSelectStmt.BindInt(msgIdIndex, mMessageId); + // read the flag + TInt msgPropertyIndex = + sqlSelectStmt.ColumnIndex(_L("msg_property")); + TInt retValue = 0; + if (sqlSelectStmt.Next() == KSqlAtRow) + { + retValue = static_cast + (sqlSelectStmt.ColumnInt(msgPropertyIndex)); + } + CleanupStack::PopAndDestroy(&sqlSelectStmt); + sqlDb.Close(); + canForwardMsg = (retValue & EPreviewForward)? true:false; + } + else + { + // fall-back plan + MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck; + canForwardMsg = mmsConformanceCheck->validateMsgForForward(mMessageId); + delete mmsConformanceCheck; + } + } + return canForwardMsg; +} + +// EOF