diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/unifiededitor/src/msgunieditorview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditorview.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,924 @@ +/* + * 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: + * + */ + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "debugtraces.h" +#include "msgunieditorview.h" +#include "msgunieditoraddress.h" +#include "msgunieditorsubject.h" +#include "msgunieditorbody.h" +#include "msgtypenotifier.h" +#include "msgmonitor.h" +#include "msgattachmentcontainer.h" +#include "msguiutilsmanager.h" +#include "convergedmessageaddress.h" +#include "matchphnumberutil.h" +#include "unieditorgenutils.h" +#include "unieditorpluginloader.h" +#include "unieditorplugininterface.h" + +// Constants +const QString SEND_ICON(":/qtg_mono_send.svg"); +const QString ATTACH_ICON(":/qtg_mono_attach.svg"); + +const int INVALID_MSGID = -1; + +// LOCALIZED CONSTANTS +#define LOC_TO hbTrId("txt_messaging_formlabel_to") +#define LOC_HIGH hbTrId("txt_messaging_setlabel_priority_val_high") +#define LOC_NORMAL hbTrId("txt_messaging_setlabel_priority_val_normal") +#define LOC_LOW hbTrId("txt_messaging_setlabel_priority_val_low") +#define LOC_SENDING_OPTIONS hbTrId("txt_messaging_opt_sending_options") + +#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_opt_delete_message") +#define LOC_CC hbTrId("txt_messaging_formlabel_cc") +#define LOC_BCC hbTrId("txt_messaging_formlabel_bcc") +#define LOC_OTHER_RECIPIENTS hbTrId("txt_messaging_group_title_ln_other_recipients") + +#define LOC_PHOTO hbTrId("txt_messaging_button_photo") +#define LOC_VIDEO hbTrId("txt_messaging_button_video") +#define LOC_SOUND hbTrId("txt_messaging_button_sound") +#define LOC_MORE hbTrId("txt_messaging_button_more") + +//--------------------------------------------------------------- +// MsgUnifiedEditorView::MsgUnifiedEditorView +// @see header file +//--------------------------------------------------------------- +MsgUnifiedEditorView::MsgUnifiedEditorView( QGraphicsItem *parent ) : +MsgBaseView(parent), +mSubjectAction(0), +mCcBccAction(0), +mMainLayout(0), +mSubjectField(0), +mToField(0), +mCcField(0), +mBccField(0), +mBody(0), +mPrioritySubMenu(0), +mContentWidget(0), +mNotifier(0), +mMsgMonitor(0), +mUtilsManager(0), +mAttachmentContainer(0), +mPluginLoader(0) +{ + addMenu(); + addToolBar(); + + HbScrollArea* scrollArea = new HbScrollArea(this); + this->setWidget(scrollArea); + + mContentWidget = new HbWidget(this); + scrollArea->setContentWidget(mContentWidget); + + mPluginPath = pluginPath(); + + mMainLayout = new QGraphicsLinearLayout(Qt::Vertical, mContentWidget); + mMainLayout->setContentsMargins(0,0,0,0); + + //Adding suitable spacing between the Custom Widgets + qreal vItemSpacing = 0.0; + style()->parameter("hb-param-margin-gene-middle-vertical",vItemSpacing); + mMainLayout->setSpacing(vItemSpacing); + + // notifier for recording msg type transitions between sms & mms + mNotifier = new MsgTypeNotifier(this); + mMsgMonitor = new MsgMonitor(this); + mUtilsManager = new MsgUiUtilsManager(this); + + mToField = new MsgUnifiedEditorAddress( LOC_TO, mPluginPath, mContentWidget ); + mBody = new MsgUnifiedEditorBody(mPluginPath, mContentWidget); + + mMainLayout->addItem(mToField); + mMainLayout->addItem(mBody); + + //Set the invalid msg id + mOpenedMessageId.setId(-1); + + connect(mToField, SIGNAL(sendMessage()), this, SLOT(send())); + connect(mBody, SIGNAL(sendMessage()), this, SLOT(send())); + connect(mBody, SIGNAL(mmContentAdded(bool)), + mNotifier, SLOT(onMMContentAdded(bool))); + connect(mBody, SIGNAL(sizeChanged(int)), + mMsgMonitor, SLOT(onSizeChanged(int))); + connect(mUtilsManager, SIGNAL(imagesFetched(const QVariant&)), + this, SLOT(imagesFetched(const QVariant&))); + connect(mUtilsManager, SIGNAL(audiosFetched(const QVariant&)), + this, SLOT(audiosFetched(const QVariant&))); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorView::~MsgUnifiedEditorView +// @see header file +//--------------------------------------------------------------- +MsgUnifiedEditorView::~MsgUnifiedEditorView() +{ +} + +void MsgUnifiedEditorView::addMenu() +{ + //Create Menu Options + HbMenu* mainMenu = new HbMenu(); + + //TODO:These 2 should be submenu option to Add + mSubjectAction = mainMenu->addAction(tr("Add Subject")); + mCcBccAction = mainMenu->addAction(tr("Add Cc/Bcc")); + + mPrioritySubMenu = mainMenu->addMenu(tr("Add Priority")); + + HbAction* highPriorityAction = mPrioritySubMenu->addAction(LOC_HIGH); + highPriorityAction->setData(ConvergedMessage::High); + + HbAction* normalPriorityAction = mPrioritySubMenu->addAction(LOC_NORMAL); + normalPriorityAction->setData(ConvergedMessage::Normal); + + HbAction* lowPriorityAction = mPrioritySubMenu->addAction(LOC_LOW); + lowPriorityAction->setData(ConvergedMessage::Low); + + HbAction* sendOptionsAction = mainMenu->addAction(LOC_SENDING_OPTIONS); + HbAction* deleteMsgAction = mainMenu->addAction(LOC_DELETE_MESSAGE); + HbAction* helpAction = mainMenu->addAction(tr("Help")); + + connect(mSubjectAction,SIGNAL(triggered()),this, SLOT(addSubject())); + connect(mCcBccAction,SIGNAL(triggered()),this, SLOT(addCcBcc())); + connect(highPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority())); + connect(normalPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority())); + connect(lowPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority())); + connect(sendOptionsAction,SIGNAL(triggered()),this, SLOT(sendingOptions())); + connect(deleteMsgAction,SIGNAL(triggered()),this, SLOT(deleteMessage())); + connect(helpAction,SIGNAL(triggered()),this, SLOT(launchHelp())); + + setMenu(mainMenu); +} + +void MsgUnifiedEditorView::openDraftsMessage(ConvergedMessageId& messageId, + ConvergedMessage::MessageType messageType ) +{ + if(!mPluginLoader) + { + mPluginLoader = new UniEditorPluginLoader(this); + mPluginLoader->loadPlugins(); + } + + UniEditorPluginInterface* pluginInterface = + mPluginLoader->getUniEditorPlugin(messageType); + + mOpenedMessageId.setId(messageId.getId()); + mmOpenedMessageType = messageType; + + //Fetch the converged message from the msgId + ConvergedMessage* msg; + msg = pluginInterface->convertFrom(messageId.getId()); + + if( msg != NULL ) + { + //Populate the content inside editor + populateDraftsContent(*msg); + delete msg; + } +} + +void MsgUnifiedEditorView::populateContent(const ConvergedMessage& messageDetails, int editorFields) +{ + mToField->setAddresses(messageDetails.toAddressList()); + QString bodyTxt = messageDetails.bodyText(); + mBody->setText(bodyTxt); + + int attachmentCount = messageDetails.attachments().count(); + if(attachmentCount == 1) + { + int imageSize=0; + QString mimeType; + TMsgMediaType mediaType = EMsgMediaUnknown; + QString filePath = messageDetails.attachments().at(0)->filePath(); + UniEditorGenUtils* genUtils = new UniEditorGenUtils; + TRAP_IGNORE(genUtils->getFileInfoL(filePath,imageSize, + mimeType,mediaType)); + delete genUtils; + switch(mediaType) + { + case EMsgMediaImage: + { + mBody->setImage(filePath); + break; + } + case EMsgMediaVideo: + { + mBody->setVideo(filePath); + break; + } + case EMsgMediaAudio: + { + mBody->setAudio(filePath); + break; + } + case EMsgMediaUnknown: + case EMsgMediaText: + default: + { + addAttachment(filePath); + break; + } + } + + addSubject(); + } + else if(attachmentCount > 1) + { + for(int i=0; ifilePath(); + //TODO: put size checks and show size exceeded msg when appropriate + addAttachment(filePath); + } + + addSubject(); + } + + if(editorFields & MsgBaseView::ADD_RECIPIENTS) + { + addCcBcc(); + } + else if(editorFields & MsgBaseView::ADD_SUBJECT) + { + addSubject(); + } +} + +void MsgUnifiedEditorView::populateDraftsContent( + const ConvergedMessage& messageDetails) +{ + // skip first-time MMS type switch note for draft + mNotifier->setSkipNote(); + mToField->setAddresses(messageDetails.toAddressList()); + if(messageDetails.ccAddressList().count() > 0 ) + { + if(!mCcField) + { + addCcBcc(); + } + mCcField->setAddresses(messageDetails.ccAddressList()); + } + if(messageDetails.bccAddressList().count() > 0 ) + { + if(!mBccField) + { + addCcBcc(); + } + mBccField->setAddresses(messageDetails.bccAddressList()); + } + if(messageDetails.subject().size() > 0) + { + if(!mSubjectField) + { + addSubject(); + } + mSubjectField->setText(messageDetails.subject()); + } + + if(messageDetails.priority()==ConvergedMessage::High || + messageDetails.priority() == ConvergedMessage::Low) + { + if(!mSubjectField) + { + addSubject(); + } + mSubjectField->setPriority(messageDetails.priority()); + } + + QString bodyTxt = messageDetails.bodyText(); + mBody->setText(bodyTxt); + + ConvergedMessageAttachmentList attachmentList = + messageDetails.attachments(); + int attachmentCount = attachmentList.count(); + + UniEditorGenUtils* genUtils = new UniEditorGenUtils; + + for( int i=0; i < attachmentCount; i++ ) + { + QString filePath = messageDetails.attachments().at(i)->filePath(); + + if(attachmentList.at(i)->attachmentType() == + ConvergedMessageAttachment::EInline) + { + int imageSize=0; + QString mimeType; + TMsgMediaType mediaType = EMsgMediaUnknown; + TRAP_IGNORE(genUtils->getFileInfoL(filePath,imageSize, + mimeType,mediaType)); + + switch(mediaType) + { + case EMsgMediaImage: + { + mBody->setImage(filePath); + break; + } + case EMsgMediaVideo: + { + mBody->setVideo(filePath); + break; + } + case EMsgMediaAudio: + { + mBody->setAudio(filePath); + break; + } + case EMsgMediaUnknown: + case EMsgMediaText: + default: + { + addAttachment(filePath); + break; + } + } + } + else + { + addAttachment(filePath); + } + } + delete genUtils; +} + +void MsgUnifiedEditorView::addToolBar() +{ + //Create Tool Bar + HbToolBar *toolBar = new HbToolBar(); + toolBar->setOrientation(Qt::Horizontal); + + //Add Action to the toolbar and show toolbar + HbAction* attachToolButton = toolBar->addAction(HbIcon(ATTACH_ICON), QString()); + HbAction* sendToolButton = toolBar->addAction(HbIcon(SEND_ICON), QString()); + + connect(attachToolButton, SIGNAL(triggered()), this, SLOT(showAttachmentPopup())); + connect(sendToolButton, SIGNAL(triggered()), this, SLOT(send())); + + setToolBar(toolBar); +} + +void MsgUnifiedEditorView::addSubject() +{ + if(mSubjectField) + { // do nothing if already present + return; + } + // remove mainmenu's "Add Subject" action + HbMenu* mainMenu = this->menu(); + mainMenu->removeAction(mSubjectAction); + mSubjectAction->setParent(NULL); + delete mSubjectAction; + + int index =0; + int offset = 1; + if(mAttachmentContainer) + { + ++offset; + } + index = mMainLayout->count() - offset; + + mSubjectField = new MsgUnifiedEditorSubject(mPluginPath, mContentWidget); + mMainLayout->insertItem(index,mSubjectField); + connect(mSubjectField, SIGNAL(mmContentAdded(bool)), + mNotifier, SLOT(onMMContentAdded(bool))); + connect(mSubjectField, SIGNAL(sizeChanged(int)), + mMsgMonitor, SLOT(onSizeChanged(int))); +} + +void MsgUnifiedEditorView::addCcBcc() +{ + if(mCcField && mBccField) + { // do nothing if already present + return; + } + + // remove mainmenu's "Add Cc/Bcc" & "Add Subject" actions + HbMenu* mainmenu = this->menu(); + mainmenu->removeAction(mCcBccAction); + mCcBccAction->setParent(NULL); + delete mCcBccAction; + + mCcField = new MsgUnifiedEditorAddress( LOC_CC, mPluginPath, mContentWidget ); + mBccField = new MsgUnifiedEditorAddress( LOC_BCC, mPluginPath, mContentWidget ); + + connect(mCcField, SIGNAL(sendMessage()), this, SLOT(send())); + connect(mCcField, SIGNAL(mmContentAdded(bool)), mNotifier, SLOT(onMMContentAdded(bool))); + connect(mBccField, SIGNAL(sendMessage()), this, SLOT(send())); + connect(mBccField, SIGNAL(mmContentAdded(bool)), mNotifier, SLOT(onMMContentAdded(bool))); + + HbWidget* groupWidget = new HbWidget(mContentWidget); + groupWidget->setContentsMargins(0,0,0,0); + QGraphicsLinearLayout* ccBccLayout = new QGraphicsLinearLayout(Qt::Vertical, groupWidget); + ccBccLayout->addItem(mCcField); + ccBccLayout->addItem(mBccField); + + HbGroupBox* groupBox = new HbGroupBox(mContentWidget); + groupBox->setCollapsable(true); + groupBox->setContentWidget(groupWidget); + groupBox->setHeading(tr("Other recipients")); + connect(groupBox, SIGNAL(toggled(bool)), this, SLOT(updateOtherRecipientCount(bool))); + + mMainLayout->insertItem(1,groupBox); + // add subject field too + addSubject(); +} + +void MsgUnifiedEditorView::updateOtherRecipientCount(bool state) +{ + HbGroupBox* groupBox = qobject_cast(sender()); + if(groupBox) + { + if(!state) + { + groupBox->setHeading(tr("Other recipients")); + } + else + { + int addrCount = mCcField->addressCount(); + addrCount += mBccField->addressCount(); + QString str; + str = QString(tr("%1 Other recipients")).arg(addrCount); + groupBox->setHeading(str); + } + } +} + +void MsgUnifiedEditorView::changePriority() +{ + HbAction* action = qobject_cast(sender()); + + ConvergedMessage::Priority priority = ConvergedMessage::Normal; + if(action) + { + int data = action->data().toInt(); + priority = ConvergedMessage::Priority(data); + } + + addSubject(); + mSubjectField->setPriority(priority); + if(priority != ConvergedMessage::Normal) + { + mPrioritySubMenu->setTitle("Change Priority"); + } + else + { + mPrioritySubMenu->setTitle("Add Priority"); + } +} + +void MsgUnifiedEditorView::sendingOptions() +{ +} + +void MsgUnifiedEditorView::deleteMessage() +{ +} + +void MsgUnifiedEditorView::launchHelp() +{ +} + +void MsgUnifiedEditorView::showAttachmentPopup() +{ + HbMenu* attachMenu = new HbMenu(); + attachMenu->deleteLater(); + attachMenu->setFrameType(HbPopup::Strong); + + HbAction* attachPhoto = attachMenu->addAction(LOC_PHOTO,mUtilsManager,SLOT(fetchImages())); + HbAction* attachVideo = attachMenu->addAction(LOC_VIDEO,mUtilsManager,SLOT(fetchVideo())); + HbAction* attachAudio = attachMenu->addAction(LOC_SOUND,mUtilsManager,SLOT(fetchAudio())); + HbAction* attachOther = attachMenu->addAction(LOC_MORE,mUtilsManager,SLOT(fetchOther())); + attachMenu->exec(QPoint()); + delete attachMenu; +} + +void MsgUnifiedEditorView::removeAttachmentContainer() +{ + if(mAttachmentContainer) + { + mMainLayout->removeItem(mAttachmentContainer); + mAttachmentContainer->setParent(NULL); + delete mAttachmentContainer; + mAttachmentContainer = NULL; + } +} + +void MsgUnifiedEditorView::addAttachment(const QString& filepath) +{ + if(!mAttachmentContainer) + { + mAttachmentContainer = new MsgAttachmentContainer(mPluginPath, mContentWidget); + connect(mAttachmentContainer, SIGNAL(emptyAttachmentContainer()), + this, SLOT(removeAttachmentContainer())); + connect(mAttachmentContainer, SIGNAL(mmContentAdded(bool)), + mNotifier, SLOT(onMMContentAdded(bool))); + connect(mAttachmentContainer, SIGNAL(sizeChanged(int)), + mMsgMonitor, SLOT(onSizeChanged(int))); + int index = mMainLayout->count() - 1; + mMainLayout->insertItem(index,mAttachmentContainer); + } + mAttachmentContainer->addAttachment(filepath); +} + +void MsgUnifiedEditorView::imagesFetched(const QVariant& result ) + { + if(result.canConvert()) + { + QStringList fileList = result.value(); + if ( fileList.size()>0 ) + { + QString filepath(fileList.at(0)); + mBody->setImage(filepath); + addSubject(); + } + } + } + +void MsgUnifiedEditorView::audiosFetched(const QVariant& result ) + { + if(result.canConvert()) + { + QStringList fileList = result.value(); + if ( fileList.size()>0 && !fileList.at(0).isEmpty()) + { + QString filepath(QDir::toNativeSeparators(fileList.at(0))); + QDEBUG_WRITE_FORMAT("Received audio file path = ", fileList.at(0)); + mBody->setAudio(filepath); + addSubject(); + } + } + } + +QString MsgUnifiedEditorView::pluginPath() +{ + QString pluginPath; + #ifdef Q_OS_WIN + #define PLUGINPATH "../unifiededitorplugin/debug/unifiededitorplugind.dll" + #endif + #ifdef Q_OS_SYMBIAN + #define PLUGINPATH "unifiededitorplugin.dll" + #endif + pluginPath.append(PLUGINPATH); + return pluginPath; +} + +void MsgUnifiedEditorView::send() +{ + mUtilsManager->activateInputBlocker(this); + + // converged msg for sending + ConvergedMessage msg; + ConvergedMessage::MessageType messageType = mNotifier->messageType(); + msg.setMessageType(messageType); + + ConvergedMessageAddressList addresses = mToField->addresses(); + if(messageType == ConvergedMessage::Sms && + addresses.isEmpty()) + { + // no recipient specified for sms, do not send msg + mUtilsManager->deactivateInputBlocker(); + return; + } + + ConvergedMessageAddressList ccAddresses; + ConvergedMessageAddressList bccAddresses; + if(mCcField) + { + ccAddresses = mCcField->addresses(); + } + if(mBccField) + { + bccAddresses = mBccField->addresses(); + } + if( messageType == ConvergedMessage::Mms && + addresses.isEmpty() && + ccAddresses.isEmpty() && + bccAddresses.isEmpty()) + { + // no recipient specified for mms, do not send msg + mUtilsManager->deactivateInputBlocker(); + return; + } + + packMessage(msg); + + int sendResult = mUtilsManager->send(msg); + + // all checks and validations happen before send + if( sendResult == KErrNone) + { + //After sending the new content to drafts chk if the msg + //was originally opened from drafts and delete the opened entry + if( mOpenedMessageId.getId() != -1) + { + + if(!mPluginLoader) + { + mPluginLoader = new UniEditorPluginLoader(this); + mPluginLoader->loadPlugins(); + } + + UniEditorPluginInterface* pluginInterface = + mPluginLoader->getUniEditorPlugin(messageType); + //TODO delete the entry + pluginInterface->deleteDraftsEntry(mOpenedMessageId.getId()); + } + + ConvergedMessageAddressList addrList = addresses; + QString receipient; + + int recepientCount = addrList.count(); + if(recepientCount) + { + receipient = addrList.at(0)->address(); + } + + if( mCcField && mBccField) + { + addrList = ccAddresses; + int ccCount = addrList.count(); + recepientCount += ccCount; + if(ccCount) + { + receipient = addrList.at(0)->address(); + } + + addrList = bccAddresses; + int bccCount = addrList.count(); + recepientCount += bccCount; + if(bccCount) + { + receipient = addrList.at(0)->address(); + } + } + + + QVariantList params; + + if(recepientCount == 1 ) + { + params << MsgBaseView::CV; // target view + params << MsgBaseView::UNIEDITOR; // source view + + params << receipient; + } + else + { + params << MsgBaseView::CLV;// target view + params << MsgBaseView::UNIEDITOR; // source view + } + mUtilsManager->deactivateInputBlocker(); + emit switchView(params); + } + else + { + mUtilsManager->deactivateInputBlocker(); + if(sendResult == KErrNotFound) + { + QVariantList params; + params << MsgBaseView::MSGSETTINGS;// target view + params << MsgBaseView::UNIEDITOR; // source view + emit switchView(params); + } + } +} + +void MsgUnifiedEditorView::packMessage(ConvergedMessage &msg) +{ + ConvergedMessage::MessageType messageType = mNotifier->messageType(); + msg.setMessageType(messageType); + + ConvergedMessageAddressList addresses = mToField->addresses(); + ConvergedMessageAddressList ccAddresses; + ConvergedMessageAddressList bccAddresses; + + msg.addToRecipients(addresses); + msg.setBodyText(mBody->text()); + msg.setDirection(ConvergedMessage::Outgoing); + QDateTime time = QDateTime::currentDateTime(); + msg.setTimeStamp(time.toTime_t()); + + if(messageType == ConvergedMessage::Mms) + { + if(mCcField) + { + ccAddresses = mCcField->addresses(); + } + + if(mBccField) + { + bccAddresses = mBccField->addresses(); + } + + int matchDigitsCount = MatchPhNumberUtil::matchDigits(); + //comapre cc and to field,remove duplicate from cc + foreach(ConvergedMessageAddress *ccAddress,ccAddresses) + { + foreach(ConvergedMessageAddress *toAddress,addresses) + { + if(0 == ccAddress->address().right(matchDigitsCount).compare(toAddress->address().right(matchDigitsCount))) + { + ccAddresses.removeOne(ccAddress); + } + } + } + //comapre bcc and cc field,remove duplicate from bcc + foreach(ConvergedMessageAddress *bccAddress,bccAddresses) + { + foreach(ConvergedMessageAddress *ccAddress,ccAddresses) + { + if(0 == bccAddress->address().right(matchDigitsCount).compare(ccAddress->address().right(matchDigitsCount))) + { + bccAddresses.removeOne(bccAddress); + } + } + } + //comapre bcc and to field,remove duplicate from bcc + foreach(ConvergedMessageAddress *bccAddress,bccAddresses) + { + foreach(ConvergedMessageAddress *toAddress,addresses) + { + if(0 == bccAddress->address().right(matchDigitsCount).compare(toAddress->address().right(matchDigitsCount))) + { + bccAddresses.removeOne(bccAddress); + } + } + } + + if(ccAddresses.count()>0) + { + msg.addCcRecipients(ccAddresses); + } + if(bccAddresses.count()>0) + { + msg.addBccRecipients(bccAddresses); + } + if(mSubjectField) + { + msg.setSubject(mSubjectField->text()); + msg.setPriority(mSubjectField->priority()); + } + + ConvergedMessageAttachmentList mediaList; + + QStringList mediafiles(mBody->mediaContent()); + if (!mediafiles.isEmpty()) + { + for (int i = 0; i < mediafiles.size(); ++i) + { + ConvergedMessageAttachment* attachment = + new ConvergedMessageAttachment( + mediafiles.at(i), + ConvergedMessageAttachment::EInline); + mediaList << attachment; + } + + } + if(mediaList.count() > 0) + { + msg.addAttachments(mediaList); + } + } + + // sms/mms attachment list + ConvergedMessageAttachmentList attachmentList; + if(mAttachmentContainer) + { + MsgUnifiedEditorAttachmentList editorAttachmentList = + mAttachmentContainer->attachmentList(); + for (int i = 0; i < editorAttachmentList.count(); ++i) + { + ConvergedMessageAttachment* attachment = + new ConvergedMessageAttachment( + editorAttachmentList.at(i)->path(), + ConvergedMessageAttachment::EAttachment); + attachmentList << attachment; + } + } + if(attachmentList.count() > 0) + { + msg.addAttachments(attachmentList); + } +} + +bool MsgUnifiedEditorView::saveContentToDrafts() +{ + mUtilsManager->activateInputBlocker(this); + ConvergedMessage::MessageType messageType = mNotifier->messageType(); + + ConvergedMessageAddressList addresses = mToField->addresses(); + + UniEditorPluginInterface* pluginInterface = NULL; + + if( mOpenedMessageId.getId() != -1) + { + if(!mPluginLoader) + { + mPluginLoader = new UniEditorPluginLoader(this); + mPluginLoader->loadPlugins(); + } + + pluginInterface = + mPluginLoader->getUniEditorPlugin(messageType); + } + + if(messageType == ConvergedMessage::Sms && + addresses.isEmpty() && MsgMonitor::bodySize() <= 0) + { + if(mOpenedMessageId.getId() != -1) + { + pluginInterface->deleteDraftsEntry(mOpenedMessageId.getId()); + } + + // no recipient specified for sms, do not send msg + mUtilsManager->deactivateInputBlocker(); + return false; + } + + ConvergedMessageAddressList ccAddresses; + ConvergedMessageAddressList bccAddresses; + if(mCcField) + { + ccAddresses = mCcField->addresses(); + } + if(mBccField) + { + bccAddresses = mBccField->addresses(); + } + int subectSize =0; + if(mSubjectField) + { + subectSize = mSubjectField->text().size(); + } + + if( messageType == ConvergedMessage::Mms && + addresses.isEmpty() && + ccAddresses.isEmpty() && + bccAddresses.isEmpty() && + subectSize <= 0 && + MsgMonitor::bodySize() <= 0 && + MsgMonitor::containerSize() <= 0) + { + if(mOpenedMessageId.getId() != -1) + { + pluginInterface->deleteDraftsEntry(mOpenedMessageId.getId()); + } + // no recipient specified for mms, do not send msg + mUtilsManager->deactivateInputBlocker(); + return false; + } + ConvergedMessage msg; + packMessage(msg); + + int msgId = mUtilsManager->saveToDrafts(msg); + + //After saving the new content to drafts chk if the msg + //was originally opened from drafts and delete the opened entry + if(mOpenedMessageId.getId() != -1) + { + pluginInterface->deleteDraftsEntry(mOpenedMessageId.getId()); + mOpenedMessageId.setId(INVALID_MSGID); + } + + mUtilsManager->deactivateInputBlocker(); + + return ((msgId > INVALID_MSGID)? true : false); +} + +void MsgUnifiedEditorView::resizeEvent( QGraphicsSceneResizeEvent * event ) +{ + Q_UNUSED(event) + #ifdef _DEBUG_TRACES_ + qDebug()<<"resize event"; +#endif + + mContentWidget->resize(this->rect().width(),this->rect().height()+1); +} + +//EOF