phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardplugin.cpp
branchRCL_3
changeset 6 e8e3147d53eb
parent 5 81f8547efd4f
child 7 b3431bff8c19
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardplugin.cpp	Fri Mar 12 15:41:25 2010 +0200
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardplugin.cpp	Mon Mar 15 12:39:26 2010 +0200
@@ -22,6 +22,7 @@
 #include "ccappmycardpluginuids.hrh"
 #include "ccappmycard.h"
 #include "ccappmycard.hrh"
+#include <spbcontactdatamodel.h>
 #include <ccappmycardpluginrsc.rsg>
 #include <Pbk2UIControls.rsg>
 #include <data_caging_path_literals.hrh>
@@ -34,6 +35,7 @@
 #include <AiwContactAssignDataTypes.h>
 #include <avkon.hrh>
 #include <aknappui.h>
+#include <s32mem.h>
 #include <CPbk2CommandHandler.h>
 #include <Pbk2Commands.hrh>		//pbk2cmdsend
 #include <Pbk2DataCaging.hrh>	
@@ -43,6 +45,9 @@
 #include <CPbk2PresentationContactFieldCollection.h>
 #include <StringLoader.h>
 #include <AknQueryDialog.h>
+#include <mccapppluginparameter.h>
+#include <mccaparameter.h>
+#include <CVPbkContactManager.h>
 
 // ---------------------------------------------------------------------------
 // Constants
@@ -94,6 +99,8 @@
     
     iCommandsResourceFile.Close();
     
+    delete iModel;
+
     delete iMyCard;
     
     delete iCommandHandler;
@@ -138,15 +145,61 @@
     }
 
 // ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::Model
+// ---------------------------------------------------------------------------
+//
+CSpbContactDataModel& CCCAppMyCardPlugin::Model()
+    {
+    return *iModel;
+    }
+
+// ---------------------------------------------------------------------------
 // CCCAppMyCardPlugin::PreparePluginViewL
 // ---------------------------------------------------------------------------
 //
 void CCCAppMyCardPlugin::PreparePluginViewL(
-    MCCAppPluginParameter& /*aPluginParameter*/ )
+    MCCAppPluginParameter& aPluginParameter )
     {
     CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::PreparePluginViewL()"));
 
+    iModel = CSpbContactDataModel::NewL( 
+        iMyCard->ContactManager(), *iCoeEnv, R_MYCARD_CLIP_FIELD_SELECTOR );
+    
     BaseConstructL( R_CCAMYCARD_VIEW );
+    MCCAParameter& param = aPluginParameter.CCAppLaunchParameter();
+    if( param.ContactDataFlag() == MCCAParameter::EContactLink )
+        {
+        HBufC& data = param.ContactDataL();
+        HBufC8* data8 = HBufC8::NewLC( data.Size() );
+        data8->Des().Copy( data );
+        CVPbkContactLinkArray* array = CVPbkContactLinkArray::NewLC( 
+            *data8, iMyCard->ContactManager().ContactStoresL() );
+        if( array->Count() )
+            {
+            iMyCard->SetLinkL( array->At( 0 ) );
+            }
+        CleanupStack::PopAndDestroy( 2 ); // data, array
+        }
+    else if( param.ContactDataFlag() == MCCAParameter::EContactDataModel )
+        {
+        HBufC& cntData = param.ContactDataL();
+        TPtrC8 data( (TUint8*)cntData.Ptr(), cntData.Size() );
+        RDesReadStream stream( data );
+        CleanupClosePushL( stream );
+        iModel->InternalizeL( stream );
+        CleanupStack::PopAndDestroy(); // strean
+
+        MVPbkContactLink* link = iModel->ContactLink();
+        if( link )
+            {
+            iMyCard->SetLinkL( *link );
+            }
+        else
+            {
+            // model without a link means that mycard does not exist.
+            iMyCard->ForceCreateMyCard();
+            }
+        }
     
     CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::PreparePluginViewL()"));
     }
@@ -171,6 +224,8 @@
     SetTitleL( *title );
     CleanupStack::PopAndDestroy( title );
     
+    iMyCard->FetchMyCardL();
+    
     CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::DoActivateL()"));
     }
 
@@ -299,6 +354,14 @@
 	iMyCard->EditContactL(  aFocusedFieldIndex );
 	}
 
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::HandleError
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::HandleError( TInt aError )
+    {
+    CCoeEnv::Static()->HandleError( aError );
+    }
 
 // ---------------------------------------------------------------------------
 // CCCAppMyCardPlugin::NewContainerL
@@ -395,32 +458,39 @@
 //
 void CCCAppMyCardPlugin::ProcessCommandL(TInt aCommandId)
      {
+     TInt err = KErrNone;
+     
      switch(aCommandId)
          {
-         case ECCAppMyCardCmdStylusViewImageCmd:
-             ViewImageCmdL();
-             break;
+         case ECCAppMyCardCmdStylusViewImageCmd:             
+             TRAP( err, ViewImageCmdL() );             
+             break;             
              
          case ECCAppMyCardCmdStylusChangeImageCmd:
-             ChangeImageCmdL();
+             TRAP( err, ChangeImageCmdL() );             
              break;
              
          case ECCAppMyCardCmdStylusRemoveImageCmd:
-             RemoveImageCmdL();
+             TRAP( err, RemoveImageCmdL() );             
              break;
              
          case ECCAppMyCardCmdStylusAddImageCmd:
-             AddImageCmdL();
+             TRAP( err, AddImageCmdL() );             
              break;
              
          case ECCAppMyCardCmdStylusCopyDetailCmd:             
-              CopyDetailL();
+              TRAP( err, CopyDetailL() );              
               break;                        
              
          default:
         	 CAknView::ProcessCommandL(aCommandId);
              break;
          }
+     
+      if( err != KErrNone )
+         {
+         HandleError( err );
+         }
      }
 
 // --------------------------------------------------------------------------- 
@@ -467,4 +537,5 @@
     {
     CommandHandlerL()->HandleCommandL( EPbk2CmdCopyDetail, *iOwnContainer, NULL );
     }
+
 // End of File