phonebookui/phonebookservices/src/cntserviceproviderviewing.cpp
changeset 65 ae724a111993
parent 59 a642906a277a
child 75 4ecbe3571b5a
--- a/phonebookui/phonebookservices/src/cntserviceproviderviewing.cpp	Wed Aug 18 09:39:00 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntserviceproviderviewing.cpp	Thu Sep 02 20:16:15 2010 +0300
@@ -28,7 +28,8 @@
 CntServiceProviderViewing::CntServiceProviderViewing(CntServices& aServices, QObject *parent):
     XQServiceProvider(QLatin1String(KCntServiceInterfaceView), parent),
     mServices(aServices),
-    mCurrentRequestIndex(0)
+    mCurrentRequestIndex(0),
+    mAllowExit(true)
 {
     CNT_ENTRY
     publishAll();
@@ -43,39 +44,52 @@
 }
 
 void CntServiceProviderViewing::openContactCard( int aContactId )
-    {
+{
     CNT_ENTRY
     mCurrentRequestIndex = setCurrentRequestAsync();
     mServices.setQuittable(requestInfo().isEmbedded());
     mServices.launchContactCard( aContactId, *this );
     CNT_EXIT
-    }
+}
 
 void CntServiceProviderViewing::openTemporaryContactCard( QString aFieldName, QString aFieldValue )
-    {
+{
     CNT_ENTRY
     mCurrentRequestIndex = setCurrentRequestAsync();
     mServices.setQuittable(requestInfo().isEmbedded());
     mServices.launchTemporaryContactCard( aFieldName, aFieldValue, *this );
     CNT_EXIT
-    }
+}
 
 void CntServiceProviderViewing::openGroup( int aContactId )
-    {
+{
     CNT_ENTRY
     mCurrentRequestIndex = setCurrentRequestAsync();
+    mAllowExit = false;
     mServices.setQuittable(requestInfo().isEmbedded());
     mServices.launchGroupMemberView( aContactId, *this );
     CNT_EXIT
-    }
+}
 
 void CntServiceProviderViewing::CompleteServiceAndCloseApp(const QVariant& retValue)
-    {
+{
     CNT_ENTRY
     connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit()));
     if ( mCurrentRequestIndex != 0 )
     {
-        const bool success = completeRequest(mCurrentRequestIndex, retValue);
+        bool success = false;
+        
+        if (!mOverriddenReturnValue.isNull() && retValue.value<int>() != KCntServicesReturnValueContactDeleted)
+        {
+            CNT_LOG_ARGS(mOverriddenReturnValue.value<int>());
+            success = completeRequest(mCurrentRequestIndex, mOverriddenReturnValue);
+        }
+        else
+        {
+            CNT_LOG_ARGS(retValue.value<int>());
+            success = completeRequest(mCurrentRequestIndex, retValue);
+        }
+        
         if ( !success )
         {
             CNT_LOG_ARGS("Failed to complete highway request.");
@@ -83,4 +97,21 @@
         mCurrentRequestIndex = 0;
     }
     CNT_EXIT
+}
+
+void CntServiceProviderViewing::overrideReturnValue(const QVariant& retValue)
+{
+    CNT_ENTRY
+    
+    if (mOverriddenReturnValue.isNull() || mOverriddenReturnValue.value<int>() != KCntServicesReturnValueContactSaved)
+    {
+        mOverriddenReturnValue = retValue;
     }
+    
+    CNT_EXIT
+}
+
+bool CntServiceProviderViewing::allowSubViewsExit()
+{
+    return mAllowExit;
+}