diff -r 84d9eb65b26f -r e4592d119491 messagingapp/msgui/msgapp/src/msgviewmanager.cpp --- a/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Mon May 03 12:29:07 2010 +0300 +++ b/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Fri May 14 15:49:35 2010 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include #include "conversationsengine.h" #include "msglistview.h" @@ -43,16 +44,18 @@ #define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete") #define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel") #define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message") +#define LOC_DIALOG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone") +#define LOC_COMMON_SAVE hbTrId("txt_common_menu_save") const qint64 NULL_CONVERSATIONID = -1; MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent) : QObject(parent), mMainWindow(mainWindow), mUniEditor(0), mListView(0), mConversationView(0), mUniViewer(0), mDraftsListView(0), mSettingsView(0), mBackAction(0), mServiceRequest( - serviceRequest), mConversationId(-1), mViewServiceRequest(false) + serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1) { //creating back action. - mBackAction = new HbAction(Hb::BackAction, this); + mBackAction = new HbAction(Hb::BackNaviAction, this); connect(mBackAction, SIGNAL(triggered()), this, SLOT(onBackAction())); //create clv as first view if not a service request. @@ -62,6 +65,13 @@ param << MsgBaseView::CLV; switchView(param); } + else + { + mDummyview = new HbView(); + mMainWindow->addView(mDummyview); + mMainWindow->setCurrentView(mDummyview); + mViewTobeDeleted << mDummyview; + } } MsgViewManager::~MsgViewManager() @@ -98,6 +108,9 @@ //marking messages as red in CV. mConversationView->markMessagesAsRead(); + // reset the conversation id published + mConversationView->setPSCVId(false); + //clearing content of cv. mConversationView->clearContent(); @@ -150,14 +163,6 @@ break; } - //Now UE can be launched from viewer and on its back - //we need to clear viewer - if (mUniViewer) { - mMainWindow->removeView(mUniViewer); - delete mUniViewer; - mUniViewer = NULL; - } - //switch to clv. if (mServiceRequest) { completeServiceRequest(); @@ -186,8 +191,6 @@ param << mConversationId; switchView(param); - delete mUniViewer; - mUniViewer = NULL; } break; } @@ -208,7 +211,12 @@ void MsgViewManager::switchView(const QVariantList& data) { + + connect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive())); + mMainWindow->setInteractive(false); + int viewId = data.at(0).toInt(); + switch (viewId) { case MsgBaseView::DEFAULT: { @@ -217,15 +225,16 @@ } case MsgBaseView::CLV: { - switchToClv(data); - break; - } + switchToClv(data); + break; + } - case MsgBaseView::CV: - { - switchToCv(data); - break; - } + case MsgBaseView::CV: + { + + switchToCv(data); + break; + } case MsgBaseView::DLV: { @@ -253,6 +262,18 @@ } } +void MsgViewManager::deletePreviousView() +{ + while(mViewTobeDeleted.count()) + { + HbView* v = mViewTobeDeleted.takeAt(0); + mMainWindow->removeView(v); + delete v; + } + disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView())); +} + + void MsgViewManager::send(const qint32 contactId, const QString phoneNumber, const QString displayName) { @@ -348,6 +369,11 @@ if (conversationId < 0) { param << MsgBaseView::CLV; param << MsgBaseView::SERVICE; + + if( mCurrentView == MsgBaseView::CV && mConversationView) + { + mConversationView->setPSCVId(false); + } } else { param << MsgBaseView::CV; @@ -433,13 +459,8 @@ HbApplication::quit(); } - //remove the settings view from main window - if (mSettingsView) { - mMainWindow->removeView(mSettingsView); - mSettingsView->setNavigationAction(mBackAction); - connect(mBackAction, SIGNAL(triggered()), this, SLOT(onBackAction()), Qt::UniqueConnection); - } if (mConversationView) { + mConversationView->saveContentToDrafts(); //clearing content of cv. mConversationView->clearContent(); } @@ -452,20 +473,21 @@ mMainWindow->addView(mListView); } - //delete uni editor. - if (mUniEditor) { - mMainWindow->removeView(mUniEditor); - delete mUniEditor; + mMainWindow->setCurrentView(mListView); + + //delete UniEditor + if (mUniEditor) + { + appendViewToBeDeleted(mUniEditor); mUniEditor = NULL; } - - if (mUniViewer) { - mMainWindow->removeView(mUniViewer); - delete mUniViewer; + + //delete UniViewer + if (mUniViewer) + { + appendViewToBeDeleted(mUniViewer); mUniViewer = NULL; } - - mMainWindow->setCurrentView(mListView); } void MsgViewManager::switchToCv(const QVariantList& data) @@ -480,19 +502,6 @@ HbApplication::quit(); } - //delete uni editor. - if (mUniEditor) { - mMainWindow->removeView(mUniEditor); - delete mUniEditor; - mUniEditor = NULL; - } - - if (mUniViewer) { - mMainWindow->removeView(mUniViewer); - delete mUniViewer; - mUniViewer = NULL; - } - QVariant var = data.at(2); qint64 conversationId; if (var.type() == QVariant::String) { @@ -503,6 +512,11 @@ QVariantList param; param << MsgBaseView::CLV; param << MsgBaseView::CV; + + if( mCurrentView == MsgBaseView::CV && mConversationView){ + mConversationView->setPSCVId(false); + } + switchView(param); return; } @@ -512,9 +526,15 @@ // Unified viewer set curent view as conversation view // and return mMainWindow->setCurrentView(mConversationView); - - delete mUniViewer; - mUniViewer = NULL; + + // publish already opened conversation's id + mConversationView->setPSCVId(true); + + if (mUniViewer) + { + appendViewToBeDeleted(mUniViewer); + mUniViewer = NULL; + } return; } @@ -532,6 +552,12 @@ mMainWindow->addView(mConversationView); } + else if (mConversationView->conversationId() != mConversationId){ + //Save content to drafts before switching to different CV + mConversationView->saveContentToDrafts(); + //clearing content of current cv. + mConversationView->clearContent(); + } mConversationView->openConversation(conversationId); @@ -541,6 +567,20 @@ else { mMainWindow->setCurrentView(mConversationView); } + + //delete UniEditor + if (mUniEditor) + { + appendViewToBeDeleted(mUniEditor); + mUniEditor = NULL; + } + + //delete UniViewer + if (mUniViewer) + { + appendViewToBeDeleted(mUniViewer); + mUniViewer = NULL; + } } void MsgViewManager::switchToDlv(const QVariantList& data) @@ -549,13 +589,6 @@ mCurrentView = MsgBaseView::DLV; mPreviousView = data.at(1).toInt(); - //delete uni editor. - if (mUniEditor) { - mMainWindow->removeView(mUniEditor); - delete mUniEditor; - mUniEditor = NULL; - } - if (!mDraftsListView) { mDraftsListView = new DraftsListView(); mDraftsListView->setNavigationAction(mBackAction); @@ -585,6 +618,12 @@ mConversationView->clearContent(); } + // reset conversation id published + if(mPreviousView == MsgBaseView::CV && mConversationView) + { + mConversationView->setPSCVId(false); + } + //swich to unieditor. if (!mUniEditor) { mUniEditor = new MsgUnifiedEditorView(); @@ -616,6 +655,12 @@ else { mMainWindow->setCurrentView(mUniEditor); } + //delete UniViewer + if (mUniViewer ) + { + appendViewToBeDeleted(mUniViewer); + mUniViewer = NULL; + } } void MsgViewManager::switchToUniViewer(const QVariantList& data) @@ -651,6 +696,12 @@ mUniViewer->populateContent(messageId, true, msgCount); delete message; } + + if(mPreviousView==MsgBaseView::CV && mConversationView) + { + mConversationView->setPSCVId(false); + } + mMainWindow->setCurrentView(mUniViewer); } void MsgViewManager::switchToMsgSettings(const QVariantList& data) @@ -659,11 +710,22 @@ mPreviousView = data.at(1).toInt(); if (!mSettingsView) { - mSettingsView = new MsgSettingsView(); + + MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView; + if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView + == MsgBaseView::CV) + { + view = (MsgSettingsView::SettingsView)data.at(2).toInt(); + } + + mSettingsView = new MsgSettingsView(view); mSettingsView->setNavigationAction(mBackAction); mMainWindow->addView(mSettingsView); mMainWindow->setCurrentView(mSettingsView); } + if(mPreviousView==MsgBaseView::CV && mConversationView){ + mConversationView->setPSCVId(false); + } } void MsgViewManager::handleDefault(const QVariantList& data) @@ -675,9 +737,9 @@ mCurrentView = mPreviousView; mPreviousView = previousViewId; //remove the settings view from main window - if (mSettingsView) { - mMainWindow->removeView(mSettingsView); - delete mSettingsView; + if (mSettingsView) + { + appendViewToBeDeleted(mSettingsView); mSettingsView = NULL; } switch (mCurrentView) { @@ -717,7 +779,7 @@ { int msgType; int msgSubType; - + mMessageId = msgId; qint32 messageId(msgId); ConversationsEngine::instance()->markAsReadAndGetType(messageId, msgType, msgSubType); @@ -747,14 +809,9 @@ default: { // for un supported message show delete option - bool result = HbMessageBox::question(LOC_DELETE_MESSAGE, LOC_BUTTON_DELETE, + HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)), + LOC_BUTTON_DELETE, LOC_BUTTON_CANCEL); - if (result) { - QList msgIdList; - msgIdList << msgId; - ConversationsEngine::instance()->deleteMessages(msgIdList); - } - HbApplication::quit(); // exit after handling break; } } @@ -788,29 +845,9 @@ // ---------------------------------------------------------------------------- void MsgViewManager::handleRingtoneMsg(int msgId) { - if (RingBc::askSaveQuery()) { - UniDataModelLoader* pluginLoader = new UniDataModelLoader(); - UniDataModelPluginInterface* pluginInterface = pluginLoader->getDataModelPlugin( - ConvergedMessage::BioMsg); - pluginInterface->setMessageId(msgId); - UniMessageInfoList attachments = pluginInterface->attachmentList(); - - QString attachmentPath = attachments.at(0)->path(); - - RingBc* ringBc = new RingBc(); - ringBc->saveTone(attachmentPath); - - // clear attachement list : its allocated at data model - while (!attachments.isEmpty()) { - delete attachments.takeFirst(); - } - - delete ringBc; - delete pluginLoader; - } - - // close the application once its handled - HbApplication::quit(); + mMessageId = msgId; + HbMessageBox::question(LOC_DIALOG_SAVE_RINGTONE, this, + SLOT(onDialogSaveTone(HbAction*)), LOC_COMMON_SAVE, LOC_BUTTON_CANCEL); } // ---------------------------------------------------------------------------- @@ -844,3 +881,70 @@ // close the application once its handled HbApplication::quit(); } + +void MsgViewManager::setViewInteractive() +{ + if(!mMainWindow->isInteractive()) + { + mMainWindow->setInteractive(true); + } + + disconnect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive())); +} + +void MsgViewManager::appendViewToBeDeleted(HbView* view) +{ + if (view) + { + mViewTobeDeleted << view; + connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView())); + } +} + +// ---------------------------------------------------------------------------- +// MsgViewManager::onDialogDeleteMsg +// @see header +// ---------------------------------------------------------------------------- +void MsgViewManager::onDialogDeleteMsg(HbAction* action) +{ + HbMessageBox *dlg = qobject_cast (sender()); + if (action == dlg->actions().at(0)) { + QList msgIdList; + msgIdList << mMessageId; + ConversationsEngine::instance()->deleteMessages(msgIdList); + } + HbApplication::quit(); // exit after handling +} + +// ---------------------------------------------------------------------------- +// MsgViewManager::onDialogSaveTone +// @see header +// ---------------------------------------------------------------------------- +void MsgViewManager::onDialogSaveTone(HbAction* action) + { + HbMessageBox *dlg = qobject_cast (sender()); + if (action == dlg->actions().at(0)) { + UniDataModelLoader* pluginLoader = new UniDataModelLoader(); + UniDataModelPluginInterface* pluginInterface = pluginLoader->getDataModelPlugin( + ConvergedMessage::BioMsg); + pluginInterface->setMessageId(mMessageId); + UniMessageInfoList attachments = pluginInterface->attachmentList(); + + QString attachmentPath = attachments.at(0)->path(); + + RingBc* ringBc = new RingBc(); + ringBc->saveTone(attachmentPath); + + // clear attachement list : its allocated at data model + while (!attachments.isEmpty()) { + delete attachments.takeFirst(); + } + + delete ringBc; + delete pluginLoader; + } + + // close the application once its handled + HbApplication::quit(); +} +