--- /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