messagingapp/msgui/msgapp/src/msgviewmanager.cpp
changeset 52 12db4185673b
parent 44 36f374c67aa8
child 70 a15d9966050f
--- a/messagingapp/msgui/msgapp/src/msgviewmanager.cpp	Tue Jul 06 14:12:40 2010 +0300
+++ b/messagingapp/msgui/msgapp/src/msgviewmanager.cpp	Wed Aug 18 09:45:25 2010 +0300
@@ -179,10 +179,29 @@
             completeServiceRequest();
         }
         else {
-            //switch to clv.
+            //switch to previous view.
             QVariantList param;
-            param << MsgBaseView::CLV;
+            param << mPreviousView;
             param << MsgBaseView::UNIEDITOR;
+            
+            if(mPreviousView == MsgBaseView::CV) {
+                param << mConversationId;
+                }
+            else if(mPreviousView == MsgBaseView::UNIVIEWER){
+                qint32 contactId = mViewerData.at(0).toLongLong();
+                qint32 messageId = mViewerData.at(1).toInt();
+                int msgCount = mViewerData.at(2).toInt();
+                
+                param << contactId;
+                param << messageId;
+                param << msgCount;
+            }
+            else if(mPreviousView == MsgBaseView::UNIEDITOR){
+                //TODO: Remove error handling once Audio fetcher 
+                //becomes dialog
+                param[0] = MsgBaseView::CLV;
+                }
+            
             switchView(param);
         }
 
@@ -256,16 +275,15 @@
     }
     case MsgBaseView::CLV:
     {
-            switchToClv(data);
-            break;
-        }
+         switchToClv(data);
+         break;
+    }
 
-        case MsgBaseView::CV:
-        {
-
-            switchToCv(data);
-            break;
-        }
+    case MsgBaseView::CV:
+    {
+         switchToCv(data);
+         break;
+    }
 
     case MsgBaseView::DLV:
     {
@@ -507,7 +525,7 @@
         mConversationId = -1;
         return;
     }
-    
+
     //delete UniEditor
     if (mUniEditor)
     {
@@ -540,11 +558,13 @@
         mMainWindow->addView(mListView);
     }
 
-    mMainWindow->setCurrentView(mListView);
+    mMainWindow->setCurrentView(mListView,true,Hb::ViewSwitchSequential);
 }
 
 void MsgViewManager::switchToCv(const QVariantList& data)
 {
+    QCRITICAL_WRITE("MsgViewManager::switchToCv start.");
+    
     //switch to CV.
     mCurrentView = MsgBaseView::CV;
     mPreviousView = data.at(1).toInt();
@@ -565,6 +585,10 @@
     //delete UniEditor
     if (mUniEditor)
     {
+        // Save to drafts if CV is launched via service
+        if (mPreviousView == MsgBaseView::SERVICE) {
+            mUniEditor->saveContentToDrafts();
+        }
         appendViewToBeDeleted(mUniEditor);
         mUniEditor = NULL;
     }
@@ -605,7 +629,7 @@
         // this case comes when a message is deleted from
         // Unified viewer  set curent view as conversation view
         // and return
-        mMainWindow->setCurrentView(mConversationView);
+        mMainWindow->setCurrentView(mConversationView,true,Hb::ViewSwitchSequential);
 
 		// publish already opened conversation's id
         mConversationView->setPSCVId(true);
@@ -633,11 +657,20 @@
     }
 
     mConversationView->openConversation(conversationId);
-    mMainWindow->setCurrentView(mConversationView);
+    mMainWindow->setCurrentView(mConversationView,true,Hb::ViewSwitchSequential);
+    
+    QCRITICAL_WRITE("MsgViewManager::switchToCv end.");
 }
 
 void MsgViewManager::switchToDlv(const QVariantList& data)
 {
+    //delete UniEditor
+    if (mUniEditor)
+    {
+        appendViewToBeDeleted(mUniEditor);
+        mUniEditor = NULL;
+    }
+    
     //switch to DLV.
     mCurrentView = MsgBaseView::DLV;
     mPreviousView = data.at(1).toInt();
@@ -650,11 +683,13 @@
 
         mMainWindow->addView(mDraftsListView);
     }
-    mMainWindow->setCurrentView(mDraftsListView);
+    mMainWindow->setCurrentView(mDraftsListView,true,Hb::ViewSwitchSequential);
 }
 
 void MsgViewManager::switchToUniEditor(const QVariantList& data)
 {
+    QCRITICAL_WRITE("MsgViewManager::switchToUniEditor start.");
+    
     /**
      * Editor is tried to open again before exiting the previously
      * opened editor. Multi taping in DLV or Forward.
@@ -722,7 +757,9 @@
         }
     }
 
-    mMainWindow->setCurrentView(mUniEditor);
+    mMainWindow->setCurrentView(mUniEditor,true,Hb::ViewSwitchSequential);
+    
+    QCRITICAL_WRITE("MsgViewManager::switchToUniEditor end.");
 }
 
 void MsgViewManager::switchToUniViewer(const QVariantList& data)
@@ -735,6 +772,15 @@
         return;
     }
 
+    if (mUniEditor)
+    {
+        appendViewToBeDeleted(mUniEditor);
+        mUniEditor = NULL;
+    }
+
+    //Clear the old viewer data
+    mViewerData.clear();
+    
     mCurrentView = MsgBaseView::UNIVIEWER;
     mPreviousView = data.at(1).toInt();
 
@@ -743,10 +789,14 @@
         qint32 contactId = data.at(2).toLongLong();
         qint32 messageId = data.at(3).toInt();
         int msgCount = data.at(4).toInt();
-        int canForwardMessage = data.at(5).toInt();
 
+        //Save the viewer data to be used when u come back from Editor
+        mViewerData << contactId;
+        mViewerData << messageId;
+        mViewerData << msgCount;
+        
         if (!mUniViewer) {
-            mUniViewer = new UnifiedViewer(messageId, canForwardMessage);
+            mUniViewer = new UnifiedViewer(messageId);
             mUniViewer->setNavigationAction(mBackAction);
             mMainWindow->addView(mUniViewer);
             connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
@@ -760,30 +810,50 @@
         mConversationView->setPSCVId(false);
         }
 
-    mMainWindow->setCurrentView(mUniViewer);
+    mMainWindow->setCurrentView(mUniViewer,true,Hb::ViewSwitchSequential);
 }
 void MsgViewManager::switchToMsgSettings(const QVariantList& data)
 {
-    mCurrentView = MsgBaseView::MSGSETTINGS;
-    mPreviousView = data.at(1).toInt();
-
-    if (!mSettingsView) {
+    int previousView = data.at(1).toInt();
+    
+    MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
+    if (previousView == MsgBaseView::UNIEDITOR || previousView
+            == MsgBaseView::CV)
+        {
+        view = (MsgSettingsView::SettingsView)data.at(2).toInt();
+        }
 
-        MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
-        if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
-                        == MsgBaseView::CV)
-                {
-                    view = (MsgSettingsView::SettingsView)data.at(2).toInt();
-                }
+    //launch settings service
+    QList<QVariant> args;
+    QString serviceName("messagesettings");
+    QString interfaceName("com.nokia.symbian.IMessageSettings");
+    QString operation("launchSettings(int)");
+    XQAiwRequest* request;
+    XQApplicationManager appManager;
+    request = appManager.create(serviceName, interfaceName, operation, true); //embedded
+    if ( request == NULL )
+        {
+        return;       
+        }
+ 
+    args <<  view;
 
-        mSettingsView = new MsgSettingsView(view);
-        mSettingsView->setNavigationAction(mBackAction);
-        mMainWindow->addView(mSettingsView);
-        mMainWindow->setCurrentView(mSettingsView);
-    }
-    if(mPreviousView==MsgBaseView::CV && mConversationView){
+    request->setArguments(args);
+
+    if(previousView==MsgBaseView::CV && mConversationView){
         mConversationView->setPSCVId(false);
         }
+
+    if(!request->send())
+        {
+        QDEBUG_WRITE("launchSettings failed")
+        }
+    delete request;
+
+    
+    if(previousView==MsgBaseView::CV && mConversationView){
+        mConversationView->setPSCVId(true);
+        }
 }
 
 void MsgViewManager::handleDefault(const QVariantList& data)
@@ -804,28 +874,28 @@
         case MsgBaseView::CLV:
         {
             if (mListView)
-                mMainWindow->setCurrentView(mListView);
+                mMainWindow->setCurrentView(mListView,true,Hb::ViewSwitchSequential);
             break;
         }
         case MsgBaseView::CV:
         {
             if (mConversationView)
-                mMainWindow->setCurrentView(mConversationView);
+                mMainWindow->setCurrentView(mConversationView,true,Hb::ViewSwitchSequential);
             break;
         }
         case MsgBaseView::DLV:
         {
             if (mDraftsListView)
-                mMainWindow->setCurrentView(mDraftsListView);
+                mMainWindow->setCurrentView(mDraftsListView,true,Hb::ViewSwitchSequential);
             break;
         }
         case MsgBaseView::UNIEDITOR:
         {
             if (mServiceRequest) {
-                mMainWindow->setCurrentView(mUniEditor);
+                mMainWindow->setCurrentView(mUniEditor,true,Hb::ViewSwitchSequential);
             }
             else {
-                mMainWindow->setCurrentView(mUniEditor);
+                mMainWindow->setCurrentView(mUniEditor,true,Hb::ViewSwitchSequential);
             }
             break;
         }
@@ -894,7 +964,7 @@
     }
     mUniViewer->populateContent(msgId, true, -1);
 
-    mMainWindow->setCurrentView(mUniViewer);
+    mMainWindow->setCurrentView(mUniViewer,true,Hb::ViewSwitchSequential);
 }
 
 // ----------------------------------------------------------------------------
@@ -966,9 +1036,11 @@
 // ----------------------------------------------------------------------------
 void MsgViewManager::populateUniEditorAfterViewReady(const QVariantList& editorData)
 	{
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorAfterViewReady start.");
 	 //Save the editor data and use it in ViewReady handler
 	 mEditorData = editorData;	 
 	 connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(populateUniEditorView()));
+	QCRITICAL_WRITE("MsgViewManager::populateUniEditorAfterViewReady end.");
 	}
 
 // ----------------------------------------------------------------------------
@@ -977,6 +1049,7 @@
 // ----------------------------------------------------------------------------
 void MsgViewManager::populateUniEditorView()
     {
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorView start.");
     if (mUniEditor)
         {
         mUniEditor->openDraftsMessage(mEditorData);
@@ -985,6 +1058,7 @@
     
     disconnect(mMainWindow, SIGNAL(viewReady()), this,
             SLOT(populateUniEditorView()));
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorView end.");
 }
 
 // ----------------------------------------------------------------------------
@@ -1076,7 +1150,7 @@
         }
 
     mMainWindow->addView(mAudioFetcherView);
-    mMainWindow->setCurrentView(mAudioFetcherView);
+    mMainWindow->setCurrentView(mAudioFetcherView,true,Hb::ViewSwitchSequential);
     }
 
 // ----------------------------------------------------------------------------
@@ -1135,7 +1209,8 @@
     
     // set the current view
     mCurrentView = MsgBaseView::UNIEDITOR;
-    mMainWindow->setCurrentView(mUniEditor);
+    mPreviousView =MsgBaseView::CLV;
+    mMainWindow->setCurrentView(mUniEditor,true,Hb::ViewSwitchSequential);
 }
 
 // ----------------------------------------------------------------------------