uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewmenuhandler.cpp
branchRCL_3
changeset 23 9a48e301e94b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewmenuhandler.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,368 @@
+/*
+* Copyright (c) 2008 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:  Implementation of detailsview plugin menu handler
+*
+*/
+
+ 
+#include "cvimpstdetailsviewmenuhandler.h"
+
+#include "cvimpstdetailsviewlistboxmodel.h"
+#include "cvimpstdetailsviewcontainer.h"
+#include "cvimpstdetailsviewplugin.h"
+#include "cvimpstdetailscontacthandler.h"
+#include "vimpstdetailsview.hrh"
+#include <vimpstdetailsviewpluginrsc.rsg>
+#include <ccappdetailsviewpluginrsc.rsg>
+#include <aknnotewrappers.h>
+#include <AiwContactAssignDataTypes.h>
+#include <CVPbkContactLinkArray.h>
+
+using namespace AiwContactAssign;
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewMenuHandler* CVIMPSTDetailsViewMenuHandler::NewL(
+									CVIMPSTDetailsViewPlugin& aPlugin, 
+									TStoreType aStoreType )
+	{
+	CVIMPSTDetailsViewMenuHandler* self = new(ELeave) CVIMPSTDetailsViewMenuHandler( aPlugin,aStoreType );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::~CVIMPSTDetailsViewMenuHandler
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewMenuHandler::~CVIMPSTDetailsViewMenuHandler()
+	{
+	delete iAiwServiceHandler;
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::CVIMPSTDetailsViewMenuHandler()
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewMenuHandler::CVIMPSTDetailsViewMenuHandler(
+	CVIMPSTDetailsViewPlugin& aPlugin,
+	TStoreType aStoreType) :
+	iPlugin(aPlugin),
+	iStoreType( aStoreType )
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::ConstructL()
+	{
+	PrepareAiwMenusL();
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::DynInitMenuPaneL(TInt aResourceId,
+												CEikMenuPane* aMenuPane )
+	{
+	if (iAiwServiceHandler)
+		{
+		if ( iAiwServiceHandler->HandleSubmenuL(*aMenuPane))
+            {
+            return;
+            }
+	  }
+	switch (aResourceId)
+		{
+		case R_VIMPSTDETAILSVIEW_MENUPANE:
+			{
+			TInt pos = 0;			
+ 			if ( iAiwServiceHandler )
+				{
+				if ( iAiwServiceHandler->IsAiwMenu(aResourceId))
+				    {
+				    iAiwServiceHandler->InitializeMenuPaneL( *aMenuPane,
+				            aResourceId, ECCAppDetailsViewAiwBaseCmd,
+				            iAiwServiceHandler->InParamListL() );			           
+				    }
+				} 
+			if ( aMenuPane->MenuItemExists(ECCAppDetailsViewSetTopContactCmd, pos)  )
+				{
+				aMenuPane->SetItemDimmed(ECCAppDetailsViewSetTopContactCmd, ETrue );	
+				}
+			if( aMenuPane->MenuItemExists(ECCAppDetailsViewRemoveTopContactCmd, pos) )
+				{
+				aMenuPane->SetItemDimmed(ECCAppDetailsViewRemoveTopContactCmd, ETrue );
+				}
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewNumberCmd, pos) )
+				{	
+				 aMenuPane->SetItemDimmed(ECCAppDetailsViewNumberCmd,ETrue );
+				}
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewAddressCmd, pos) )
+				{
+				 aMenuPane->SetItemDimmed(ECCAppDetailsViewAddressCmd,ETrue );
+				}   
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyNumberCmd, pos) )
+				{
+				 aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyNumberCmd, ETrue );
+				}
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyAddressCmd, pos) )
+				{
+				aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyAddressCmd, ETrue );
+				}
+	    	if (aMenuPane->MenuItemExists(ECCAppDetailsViewImageCmd, pos) )
+				{
+				aMenuPane->SetItemDimmed(ECCAppDetailsViewImageCmd, ETrue );
+				}
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewSendBusinessCardCmd, pos) )
+				{
+				aMenuPane->SetItemDimmed(ECCAppDetailsViewSendBusinessCardCmd, ETrue );
+				}
+			if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyCmd, pos) )
+			    {
+			    aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyCmd, ETrue );
+			    }
+			// Dims the edit option in service details view.
+			if(aMenuPane->MenuItemExists(KAiwCmdAssign, pos))
+			    {                                      
+			    aMenuPane->SetItemDimmed(KAiwCmdAssign,ETrue );
+			    }
+			
+            if (aMenuPane->MenuItemExists(EVIMPSTDetailsCopyCmd, pos))
+                   {
+                   aMenuPane->SetItemDimmed(EVIMPSTDetailsCopyCmd, ETrue );
+                   }
+            if (aMenuPane->MenuItemExists(EVIMPSTDetailsDeleteCmd, pos))
+                {
+                aMenuPane->SetItemDimmed(EVIMPSTDetailsDeleteCmd, ETrue );
+                }
+
+
+			const CVIMPSTDetailsViewContainer& container =
+                    static_cast<const CVIMPSTDetailsViewContainer&>( iPlugin.GetContainer() );
+                    
+			TInt count = container.ListBoxModel().MdcaCount();
+			if( !count )
+				{
+				// no items hide options
+				if (aMenuPane->MenuItemExists(EVIMPSTDetailsEditCmd, pos))
+					{
+					aMenuPane->SetItemDimmed(EVIMPSTDetailsEditCmd, ETrue );
+					}
+				if (aMenuPane->MenuItemExists(ECCAppDetailsViewDeleteCmd, pos) )
+					{
+					aMenuPane->SetItemDimmed(ECCAppDetailsViewDeleteCmd, ETrue );
+					}
+				if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyDetailCmd, pos) )
+					{
+					aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyDetailCmd,ETrue );
+					}
+				if (aMenuPane->MenuItemExists(ECCAppDetailsViewEditItemCmd, pos) )
+					{
+					aMenuPane->SetItemDimmed(ECCAppDetailsViewEditItemCmd,ETrue );
+					}
+				}
+			break;
+			}
+	   default:
+	        break;
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::HandleNotifyL
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTDetailsViewMenuHandler::HandleNotifyL(
+    TInt aCmdId,
+    TInt aEventId,
+    CAiwGenericParamList& aEventParamList,
+    const CAiwGenericParamList& /*aInParamList*/)
+    {
+    TInt result = KErrNone;
+
+    if (aCmdId == KAiwCmdAssign)
+        {
+        if (aEventId == KAiwEventCompleted)
+            {
+            TInt index = 0;
+            const TAiwGenericParam* param = aEventParamList.FindFirst(index,
+                    EGenericParamContactLinkArray);
+            if (param)
+                {               
+                TPtrC8 contactLinks = param->Value().AsData();
+                CVPbkContactLinkArray* links = CVPbkContactLinkArray::NewLC(
+                        contactLinks, iPlugin.GetContactHandler()->ContactStoresL());
+                if(links)
+                    {
+                    iPlugin.GetContactHandler()->SetLinks(links, EFalse);
+                    }                                 
+                CleanupStack::Pop(links);                     
+                }
+
+            const TAiwGenericParam* indexparam = aEventParamList.FindFirst(index,
+                    EGenericParamContactItem);
+            if (indexparam)
+                {
+                const CVIMPSTDetailsViewContainer& container =
+                static_cast<const CVIMPSTDetailsViewContainer&>(iPlugin.GetContainer());
+                TInt index = indexparam->Value().AsTInt32();
+                container.ListBoxModel().SetFocusedListIndex(index);
+                }
+            result = ETrue;
+            }
+        else if (aEventId == KAiwEventCanceled)
+            {
+            //if cancelled
+            result = ETrue;    
+            }
+        else if (aEventId == KAiwEventQueryExit)
+            {
+            //issue command to cancel the previous request.
+            iAiwServiceHandler->ExecuteServiceCmdL(
+                    KAiwCmdAssign,
+                    iAiwServiceHandler->InParamListL(),
+                    iAiwServiceHandler->OutParamListL(),
+                    KAiwOptCancel,
+                    this);
+            result = ETrue;
+            }
+        }
+
+    return result;
+    }
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::HandleCommandL(TInt aCommand)
+	{
+	// TODO : dependency on cca , they are not deleting the menu items Then check if command is normal application command
+	switch (aCommand)
+		{
+	    case KAiwCmdAssign:// AIW service cmd for Editing
+	        {
+	        if(iAiwServiceHandler && (iStoreType == EStoreLocal))
+	            {
+	            DoEditCmdL();
+	            }	        
+	        break;
+	        }
+		case EVIMPSTDetailsEditCmd:
+		case ECCAppDetailsViewEditItemCmd:
+			{
+			//TODO: in case of server store nick names has to be supported
+			break;	
+			}
+		case EVIMPSTDetailsDeleteCmd:
+		case ECCAppDetailsViewDeleteCmd:
+			{
+			DoDeleteCmdL();
+			break;
+			}
+	   	case EVIMPSTDetailsCopyCmd:
+		case ECCAppDetailsViewCopyDetailCmd:
+			{
+			DoCopyCmdL();
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::DoEditCmdL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::DoEditCmdL()
+	{
+	const CVIMPSTDetailsViewContainer& container =
+	static_cast<const CVIMPSTDetailsViewContainer&>(iPlugin.GetContainer());
+
+
+	CAiwGenericParamList& inParamList = iAiwServiceHandler->InParamListL();
+
+	inParamList.AppendL(TAiwGenericParam(
+	        EGenericParamContactAssignData,
+	        TAiwVariant(TAiwSingleContactAssignDataV1Pckg(
+	                TAiwSingleContactAssignDataV1().SetFlags(EskipInfoNotes)))));
+
+	HBufC8* packedLinks = iPlugin.GetContactHandler()->Links()->PackLC();
+
+	inParamList.AppendL(TAiwGenericParam(EGenericParamContactLinkArray,
+	        TAiwVariant( *packedLinks)));
+
+	TInt focusIndex = container.ListBoxModel().FocusedFieldIndex();
+
+	// TODO: use int instead of buf.
+	TBuf<8> focusIndexBuf;
+	focusIndexBuf.Num(focusIndex);
+	const TAiwVariant focusIndexVariant(focusIndexBuf);
+
+	inParamList.AppendL(TAiwGenericParam(EGenericParamContactItem, focusIndexVariant));
+
+	iAiwServiceHandler->ExecuteServiceCmdL(
+	        KAiwCmdAssign,
+	        inParamList,
+	        iAiwServiceHandler->OutParamListL(),
+	        NULL,
+	        this);
+
+	CleanupStack::PopAndDestroy(packedLinks);
+	    
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::DoDeleteCmdL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::DoDeleteCmdL()
+	{
+	CAknInformationNote* informationNote = new(ELeave) CAknInformationNote;
+	informationNote->ExecuteLD(_L("Delete not supported yet"));
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::DoCopyCmdL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::DoCopyCmdL()
+	{
+	CAknInformationNote* informationNote = new(ELeave) CAknInformationNote;
+	informationNote->ExecuteLD(_L("Copy not supported yet"));
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewMenuHandler::PrepareAiwMenusL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewMenuHandler::PrepareAiwMenusL()
+    {
+    // Initialisation of AIW Servicehandler cannot be in
+    // ConstructL, since the menus of plugin are given
+    // later via ProvideApplicationResourcesL(..)
+    iAiwServiceHandler = CAiwServiceHandler::NewL();
+    iAiwServiceHandler->AttachL(
+            R_VIMPSTDETAILSVIEW_AIW_SERVICE_INTERESTS);
+    
+    }
+// End of File