--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccadetailsviewplugin/src/ccappdetailsviewmenuhandler.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,946 @@
+/*
+* 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 ccappdetailsview menuhandler
+* Version : %version: he1s60#31.1.13 %
+*
+*/
+
+#include <AiwServiceHandler.h>
+#include <AiwContactAssignDataTypes.h>
+
+#include <aknnotewrappers.h>
+
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactStoreProperties.h>
+#include <Pbk2Commands.hrh>
+#include <CPbk2ContactRelocator.h>
+#include <CPbk2CommandHandler.h>
+#include <CPbk2ApplicationServices.h>
+#include <CVPbkContactManager.h>
+#include <CPbk2PresentationContact.h>
+#include <CPbk2PresentationContactFieldCollection.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <pbk2mapcommands.hrh>
+
+#include "ccappdetailsviewmenuhandler.h"
+#include "ccappdetailsviewlistboxmodel.h"
+#include "ccappdetailsviewcontainer.h"
+#include "ccappdetailsviewplugin.h"
+#include "ccappdetailsviewdefs.h"
+
+#include <mccaparameter.h>
+
+#include <ccappdetailsviewpluginrsc.rsg>
+#include "ccappdetailsview.hrh"
+
+#include <mnproviderfinder.h>
+#include <MVPbkFieldType.h>
+#include <TVPbkFieldVersitProperty.h>
+
+using namespace AiwContactAssign;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CCCAppDetailsViewMenuHandler* CCCAppDetailsViewMenuHandler::NewL(
+ CCCAppDetailsViewPlugin& aPlugin)
+{
+ CCCAppDetailsViewMenuHandler* self = new(ELeave) CCCAppDetailsViewMenuHandler(aPlugin);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::~CCCAppDetailsViewMenuHandler
+// ---------------------------------------------------------------------------
+//
+CCCAppDetailsViewMenuHandler::~CCCAppDetailsViewMenuHandler()
+{
+ delete iAiwServiceHandler;
+ delete iCommandHandler;
+ delete iMapViewProvider;
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::CCCAppDetailsViewMenuHandler()
+// ---------------------------------------------------------------------------
+//
+CCCAppDetailsViewMenuHandler::CCCAppDetailsViewMenuHandler(
+ CCCAppDetailsViewPlugin& aPlugin)
+:
+ iPlugin(aPlugin)
+{
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::ConstructL()
+{
+ //CCA_DP(KDetailsViewLogFile, CCA_L(">>> CCCAppDetailsViewMenuHandler::ConstructL()"));
+
+ iCommandHandler = CPbk2CommandHandler::NewL();
+
+ RPointerArray<CMnProvider> providers;
+ CleanupClosePushL( providers );
+
+ MnProviderFinder::FindProvidersL( providers,
+ CMnProvider::EServiceMapView );
+
+ if (providers.Count() > 0)
+ {
+ iMapViewProvider = providers[0];
+ providers.Remove(0);
+ }
+
+ providers.ResetAndDestroy();
+ CleanupStack::PopAndDestroy( &providers );
+
+ PrepareAiwMenusL();
+
+ //CCA_DP(KDetailsViewLogFile, CCA_L("<<< CCCAppDetailsViewMenuHandler::ConstructL()"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DynInitMenuPaneL(TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+{
+ //CCA_DP(KDetailsViewLogFile, CCA_L(">>> CCCAppDetailsViewMenuHandler::DynInitMenuPaneL()"));
+
+ if (iAiwServiceHandler->HandleSubmenuL(*aMenuPane))
+ {
+ return;
+ }
+
+ switch (aResourceId)
+ {
+ case R_CCAPPDETAILSVIEW_MENUPANE:
+ case R_DETAILSVIEW_DETAIL_MENUPANE:
+ {
+ TInt pos = 0;
+
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ TBool isNumberField = IsFocusedFieldTypeL(R_DETAILSVIEW_PHONENUMBER_SELECTOR);
+ TBool isAddressField =
+ IsFocusedFieldTypeL(R_DETAILSVIEW_EL_ADDRESS_SELECTOR) ||
+ IsFocusedFieldTypeL(R_DETAILSVIEW_URL_SELECTOR);
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewSetTopContactCmd, pos) &&
+ aMenuPane->MenuItemExists(ECCAppDetailsViewRemoveTopContactCmd, pos)
+ )
+ {
+ TBool isTopContact = container.ListBoxModel().IsTopContact();
+
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewSetTopContactCmd, isTopContact);
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewRemoveTopContactCmd, !isTopContact);
+ }
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyDetailCmd, pos))
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyDetailCmd,
+ (isNumberField || isAddressField));
+ }
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewNumberCmd, pos)/* &&
+ aMenuPane->MenuItemExists(ECCAppDetailsViewAddressCmd, pos)*/
+ )
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewNumberCmd, !isNumberField);
+ // aMenuPane->SetItemDimmed(ECCAppDetailsViewAddressCmd, !isAddressField);
+ }
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewAddressCmd, pos)/* &&
+ // aMenuPane->MenuItemExists(ECCAppDetailsViewAddressCmd, pos)*/
+ )
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewAddressCmd, !isAddressField);
+ }
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyNumberCmd, pos))
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyNumberCmd, !isNumberField);
+ }
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewCopyAddressCmd, pos))
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewCopyAddressCmd, !isAddressField);
+ }
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewImageCmd, pos))
+ {
+ TBool isImageField = IsFocusedFieldTypeL(R_DETAILSVIEW_IMAGE_FIELDS_SELECTOR);
+
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewImageCmd, !isImageField);
+ }
+
+ if (aMenuPane->MenuItemExists(KAiwCmdAssign, pos))
+ {
+ TBool isReadOnlyContact = container.ListBoxModel().IsReadOnlyContact();
+ if (isReadOnlyContact)
+ {
+ aMenuPane->SetItemDimmed(KAiwCmdAssign, ETrue);
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewDeleteCmd, ETrue);
+ }
+ }
+
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewPrependCmd, pos))
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewPrependCmd, !isNumberField);
+ }
+
+ if ( aMenuPane->MenuItemExists(
+ ECCAppDetailsViewFindOnMapCmd, pos )
+ && aMenuPane->MenuItemExists(
+ ECCAppDetailsViewShowOnMapCmd, pos ) )
+ {
+ if ( iMapViewProvider && HasAddressFieldL() )
+ {
+ if ( IsAddressValidatedL() )
+ {
+ aMenuPane->SetItemDimmed(
+ ECCAppDetailsViewFindOnMapCmd, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(
+ ECCAppDetailsViewShowOnMapCmd, ETrue );
+ }
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(
+ ECCAppDetailsViewFindOnMapCmd, ETrue );
+ aMenuPane->SetItemDimmed(
+ ECCAppDetailsViewShowOnMapCmd, ETrue );
+ }
+ }
+
+ TBool isSdnContact = container.ListBoxModel().IsSdnContact();
+
+ if( isNumberField && !isSdnContact )
+ {
+ CPbk2ContactRelocator* contactRelocator = CPbk2ContactRelocator::NewL();
+ CleanupStack::PushL( contactRelocator );
+ TBool phoneMemoryInConfiguration =
+ contactRelocator->IsPhoneMemoryInConfigurationL();
+ CleanupStack::PopAndDestroy();//contactRelocator
+
+ // Weed out phone memory specific commands, if there is no
+ // phone memory in configuration
+ if (!phoneMemoryInConfiguration)
+ {
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewAssignSpeedDialCmd, pos))
+ {
+ aMenuPane->SetItemDimmed(ECCAppDetailsViewAssignSpeedDialCmd, ETrue);
+ }
+ }
+
+ TInt focusIndex = container.ListBoxModel().FocusedFieldIndex();
+ TBool hasSpeedDial = container.ListBoxModel().HasSpeedDialL(focusIndex);
+
+ // Filtering is based on the speed dial existence
+ if ( !hasSpeedDial )
+ {
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewUnassignSpeedDialCmd, pos))
+ {
+ aMenuPane->SetItemDimmed
+ ( ECCAppDetailsViewUnassignSpeedDialCmd, ETrue );
+ }
+ }
+ else
+ {
+ if (aMenuPane->MenuItemExists(ECCAppDetailsViewAssignSpeedDialCmd, pos))
+ {
+ aMenuPane->SetItemDimmed
+ ( ECCAppDetailsViewAssignSpeedDialCmd, ETrue );
+ }
+ }
+ }
+ else
+ {
+ if( aMenuPane->MenuItemExists(ECCAppDetailsViewAssignSpeedDialCmd, pos) )
+ {
+ aMenuPane->SetItemDimmed( ECCAppDetailsViewAssignSpeedDialCmd, ETrue );
+ }
+
+ if( aMenuPane->MenuItemExists(ECCAppDetailsViewUnassignSpeedDialCmd, pos) )
+ {
+ aMenuPane->SetItemDimmed( ECCAppDetailsViewUnassignSpeedDialCmd, ETrue );
+ }
+ }
+
+
+
+ if (iAiwServiceHandler->IsAiwMenu(aResourceId))
+ {
+ iAiwServiceHandler->InitializeMenuPaneL( *aMenuPane,
+ aResourceId, ECCAppDetailsViewAiwBaseCmd,
+ iAiwServiceHandler->InParamListL() );
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ //CCA_DP(KDetailsViewLogFile, CCA_L("<<< CCCAppDetailsViewMenuHandler::DynInitMenuPaneL()"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::HandleNotifyL
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppDetailsViewMenuHandler::HandleNotifyL(
+ TInt aCmdId,
+ TInt aEventId,
+ CAiwGenericParamList& aEventParamList,
+ const CAiwGenericParamList& /*aInParamList*/)
+{
+ CCA_DP(KDetailsViewLogFile, CCA_L(">>> CCCAppDetailsViewMenuHandler::HandleNotifyL() eventid = %d"), aEventId);
+
+ TInt result = 0;
+ TInt index = 0;
+
+ const TAiwGenericParam* errParam = aEventParamList.FindFirst(index,
+ EGenericParamError);
+
+ if (errParam)
+ {
+ TInt32 err;
+ errParam->Value().Get(err);
+ if (err == (TInt32)KErrInUse)
+ {
+ CCoeEnv::Static()->HandleError(KErrInUse);
+ }
+ }
+
+ if (aCmdId == KAiwCmdAssign)
+ {
+ if (aEventId == KAiwEventCompleted)
+ {
+ index = 0;
+ const TAiwGenericParam* param = aEventParamList.FindFirst(index,
+ EGenericParamContactLinkArray);
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ if (param)
+ {
+ TPtrC8 contactLink = param->Value().AsData();
+
+ CVPbkContactLinkArray* links = CVPbkContactLinkArray::NewLC(
+ contactLink, container.ContactManager().ContactStoresL() );
+
+ if ( !links->At(0).RefersTo(*(container.ListBoxModel().StoreContact())) )
+ {
+ // Update the CCA parameter contact data
+ HBufC16* link16 = HBufC16::NewLC( contactLink.Length() );
+ link16->Des().Copy( contactLink );
+ iPlugin.AppEngine()->Parameter().SetContactDataL(link16->Des());
+ CleanupStack::PopAndDestroy(1); // link16
+
+ // Inform the CCApp engine of the contact relocation
+ iPlugin.AppEngine()->CCAppContactEventL();
+
+ // Update the details view UI
+ container.ListBoxModel().SetLinks(links);
+ CleanupStack::Pop(links);
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(); // links
+ }
+ }
+ index = 0;
+ const TAiwGenericParam* indexparam = aEventParamList.FindFirst(index,
+ EGenericParamContactItem);
+
+ if (indexparam)
+ {
+ TInt focus = indexparam->Value().AsTInt32();
+
+ container.ListBoxModel().SetInitialFocusIndex(focus);
+ }
+
+ container.DrawDeferred();
+
+ }
+ else if (aEventId == KAiwEventCanceled)
+ {
+ /*
+ iControl->ListBoxModel().SetLinks(NULL);
+ iControl->DrawDeferred();
+ */
+ }
+ else if (aEventId == KAiwEventOutParamCheck)
+ {
+ }
+ else if (aEventId == KAiwEventQueryExit)
+ {
+ // Send an exit command in order to close CCA and Phonebook2
+ CAknAppUi* appUi = static_cast<CAknAppUi*>( CCoeEnv::Static()->AppUi() );
+
+ if ( appUi )
+ {
+ appUi->ProcessCommandL( EAknCmdExit );
+ }
+
+ // allow pbk editor AIW service to close whole app chain
+ result = ETrue;
+ }
+ }
+
+ CCA_DP(KDetailsViewLogFile, CCA_L("<<< CCCAppDetailsViewMenuHandler::HandleNotifyL()"));
+
+ return result;
+}
+
+// --------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::Reset
+// --------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::Reset()
+ {
+ if ( iAiwServiceHandler != NULL )
+ {
+ iAiwServiceHandler->Reset();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::Activate
+// --------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::Activate()
+ {
+ if ( iAiwServiceHandler != NULL )
+ {
+ TRAP_IGNORE( iAiwServiceHandler->AttachL(
+ R_DETAILSVIEW_AIW_SERVICE_INTERESTS) );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::IsFocusedFieldTypeL
+// --------------------------------------------------------------------------
+//
+TBool CCCAppDetailsViewMenuHandler::IsFocusedFieldTypeL(TInt aSelectorResId)
+{
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ TBool ret = container.ListBoxModel().IsFocusedFieldTypeL(aSelectorResId);
+
+ return ret;
+}
+
+// --------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::HasContactFieldTypeL
+// --------------------------------------------------------------------------
+//
+TBool CCCAppDetailsViewMenuHandler::HasContactFieldTypeL(TInt aSelectorResId)
+{
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ TBool ret = container.ListBoxModel().HasContactFieldTypeL(aSelectorResId);
+
+ return ret;
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::PrepareAiwMenusL
+// Prepares plugin for AIW-menu usage
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::PrepareAiwMenusL()
+{
+ //CCA_DP(KDetailsViewLogFile, CCA_L(">>> CCCAppDetailsViewMenuHandler::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_DETAILSVIEW_AIW_SERVICE_INTERESTS);
+
+ iCommandHandler->RegisterAiwInterestL
+ ( KAiwCmdCall, R_DETAILSVIEW_DETAIL_MENUPANE,
+ R_DETAILSVIEW_CALLUI_AIW_INTEREST, ETrue );
+
+
+ /*iAiwServiceHandler->AttachMenuL(
+ R_CCACOMMLAUNCHER_MENUPANE,
+ R_CCACOMMLAUNCHER_AIW_MENU_INTERESTS );*/
+
+ //CCA_DP(KDetailsViewLogFile, CCA_L("<<< CCCAppDetailsViewMenuHandler::PrepareAiwMenusL()"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::HandleCommandL(TInt aCommand)
+{
+ //CCA_DP(KDetailsViewLogFile, CCA_L(">>> CCCAppDetailsViewMenuHandler::HandleCommandL()"));
+
+ // CCApp handles the "Exit"- and "Back"-commands
+
+ // Quick guide:
+ // - iParameter contains the launching information like contact id/link
+ // - iEnabledFields contains the fields contact has available
+ // - iContactFieldsArray contains the fields already fetched from pbk
+
+ // Check and handle the Aiw commands 1st
+ /*
+ TODO: NEEDED?
+ TInt aiwCmd = iAiwServiceHandler->ServiceCmdByMenuCmd(aCommand);
+ if(aiwCmd)
+ {
+ DoAiwCommandL(aCommand, aiwCmd);
+ return;// aCommand should not match with non-Aiw commands, but just to be sure
+ }
+ */
+ // Then check if command is normal application command
+ switch (aCommand)
+ {
+ case EAknSoftkeyEdit:
+ case KAiwCmdAssign: // AIW service cmd for Editing
+ case ECCAppDetailsViewEditItemCmd:
+ DoEditCmdL();
+ break;
+
+ case ECCAppDetailsViewImageCmd:
+ DoViewImageCmdL();
+ break;
+
+ case ECCAppDetailsViewSendBusinessCardCmd:
+ DoSendBusinessCardCmdL();
+ break;
+
+ case ECCAppDetailsViewSetTopContactCmd:
+ case ECCAppDetailsViewRemoveTopContactCmd:
+ DoTopContactCmdL();
+ break;
+
+ case ECCAppDetailsViewDeleteCmd:
+ DoDeleteCmdL();
+ break;
+
+ case ECCAppDetailsViewCopyCmd:
+ DoCopyCmdL();
+ break;
+
+ case ECCAppDetailsViewCopyDetailCmd:
+ DoCopyDetailCmdL();
+ break;
+ case ECCAppDetailsViewCopyNumberCmd:
+ DoCopyNumberCmdL();
+ break;
+
+ case ECCAppDetailsViewCopyAddressCmd:
+ DoCopyAddressCmdL();
+ break;
+ case ECCAppDetailsViewAssignSpeedDialCmd:
+ DoAssignSpeeddialCmdL();
+ break;
+
+ case ECCAppDetailsViewUnassignSpeedDialCmd:
+ DoUnassignSpeeddialCmdL();
+ break;
+
+ case ECCAppDetailsViewSetAsDefaultCmd:
+ DoSetDefaultCmdL();
+ break;
+
+ case ECCAppDetailsViewPrependCmd:
+ DoPrependCmdL();
+ break;
+
+ case ECCAppDetailsViewFindOnMapCmd:
+ case ECCAppDetailsViewShowOnMapCmd:
+ DoShowOnMapCmdL();
+ break;
+
+ default:
+ break;
+ }
+
+ //CCA_DP(KDetailsViewLogFile, CCA_L("<<< CCCAppDetailsViewMenuHandler::HandleCommandL()"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoEditCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoEditCmdL()
+{
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+#if 0
+ container.ListBoxModel().OpenEditorL();
+#else
+ CAiwGenericParamList& inParamList = iAiwServiceHandler->InParamListL();
+
+ inParamList.AppendL(TAiwGenericParam(
+ EGenericParamContactAssignData,
+ TAiwVariant(TAiwSingleContactAssignDataV1Pckg(
+ TAiwSingleContactAssignDataV1().SetFlags(EskipInfoNotes)))));
+
+ HBufC8* packedLinks = container.ListBoxModel().Links()->PackLC();
+
+ inParamList.AppendL(TAiwGenericParam(EGenericParamContactLinkArray,
+ TAiwVariant( *packedLinks)));
+
+ TInt focusIndex = container.ListBoxModel().FocusedFieldIndex();
+
+ CCA_DP(KDetailsViewLogFile, CCA_L("CCCAppDetailsViewMenuHandler::DoEditCmdL() focusIndex = %d"), focusIndex);
+
+ // 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);
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoViewImageCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoViewImageCmdL()
+{
+ CAknInformationNote* informationNote = new(ELeave) CAknInformationNote;
+ informationNote->ExecuteLD(_L("Viewing image not supported yet"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoSendBusinessCardCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoSendBusinessCardCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdSend, container, NULL);
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoTopContactCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoTopContactCmdL()
+{
+ CAknInformationNote* informationNote = new(ELeave) CAknInformationNote;
+ informationNote->ExecuteLD(_L("Setting/dropping as top contact not supported yet"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoDeleteCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoDeleteCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdDeleteMe, container, NULL);
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoCopyCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoCopyCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdCopy, container, NULL);
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoCopyDetailCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoCopyDetailCmdL()
+{
+ //EPbk2CmdCopyDetail
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdCopyDetail, container, NULL);
+
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoCopyNumberCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoCopyNumberCmdL()
+{
+ //EPbk2CmdCopyNumber
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdCopyNumber, container, NULL);
+
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoCopyDetailCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoCopyAddressCmdL()
+{
+ //EPbk2CmdCopyAddress
+
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(EPbk2CmdCopyAddress, container, NULL);
+
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoAssignSpeeddialCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoAssignSpeeddialCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL( EPbk2CmdAssignSpeedDial, container, NULL );
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoUnassignSpeeddialCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoUnassignSpeeddialCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL( EPbk2CmdRemoveSpeedDial, container, NULL );
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoSetDefaultCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoSetDefaultCmdL()
+{
+ CAknInformationNote* informationNote = new(ELeave) CAknInformationNote;
+ informationNote->ExecuteLD(_L("Default not supported yet"));
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoPrependCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoPrependCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+ iCommandHandler->HandleCommandL(EPbk2CmdPrepend, container, NULL);
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::DoShowOnMapCmdL
+// ---------------------------------------------------------------------------
+//
+void CCCAppDetailsViewMenuHandler::DoShowOnMapCmdL()
+{
+ CCCAppDetailsViewContainer& container =
+ static_cast<CCCAppDetailsViewContainer&>(iPlugin.GetContainer());
+
+ iCommandHandler->HandleCommandL(
+ EPbk2ExtensionShowOnMap, container, NULL);
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::HasAddressFieldL
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppDetailsViewMenuHandler::HasAddressFieldL()
+{
+ TBool addressField = EFalse;
+
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>( iPlugin.GetContainer() );
+ TInt countFields =
+ container.FocusedStoreContact()->Fields().FieldCount();
+ for ( TInt i = 0; i < countFields; i++ )
+ {
+ const MVPbkStoreContactField& field =
+ container.FocusedStoreContact()->Fields().FieldAt( i );
+ TInt countProps =
+ field.BestMatchingFieldType()->VersitProperties().Count();
+ TArray<TVPbkFieldVersitProperty> props =
+ field.BestMatchingFieldType()->VersitProperties();
+ for ( TInt ii = 0; ii < countProps; ii++ )
+ {
+ if ( props[ ii ].Name() == EVPbkVersitNameADR )
+ {
+ addressField = ETrue;
+ break;
+ }
+ }
+ }
+ return addressField;
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppDetailsViewMenuHandler::IsAddressValidatedL
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppDetailsViewMenuHandler::IsAddressValidatedL()
+{
+ TBool generalAddress = ETrue;
+ TBool homeAddress = ETrue;
+ TBool workAddress = ETrue;
+ TBool geoField = EFalse;
+ TVPbkFieldTypeParameter focusedField = EVPbkVersitParamOther;
+
+ if ( IsFocusedFieldTypeL( R_DETAILSVIEW_HOME_ADDRESS_SELECTOR ) )
+ {
+ focusedField = EVPbkVersitParamHOME;
+ }
+ else if ( IsFocusedFieldTypeL( R_DETAILSVIEW_WORK_ADDRESS_SELECTOR ) )
+ {
+ focusedField = EVPbkVersitParamWORK;
+ }
+ else if ( IsFocusedFieldTypeL( R_DETAILSVIEW_GENERAL_ADDRESS_SELECTOR ) )
+ {
+ focusedField = EVPbkVersitParamPREF;
+ }
+
+ const CCCAppDetailsViewContainer& container =
+ static_cast<const CCCAppDetailsViewContainer&>( iPlugin.GetContainer() );
+ TInt countFields =
+ container.FocusedStoreContact()->Fields().FieldCount();
+
+ if ( focusedField == EVPbkVersitParamOther )
+ {
+ for ( TInt i = 0; i < countFields; i++ )
+ {
+ const MVPbkStoreContactField& field =
+ container.FocusedStoreContact()->Fields().FieldAt( i );
+ TInt countProps =
+ field.BestMatchingFieldType()->VersitProperties().Count();
+ TArray<TVPbkFieldVersitProperty> props =
+ field.BestMatchingFieldType()->VersitProperties();
+ for ( TInt ii = 0; ii < countProps; ii++ )
+ {
+ if ( props[ ii ].Name() == EVPbkVersitNameADR )
+ {
+ if ( props[ ii ].Parameters().Contains(
+ EVPbkVersitParamHOME ) )
+ {
+ homeAddress = EFalse;
+ }
+ else if ( props[ ii ].Parameters().Contains(
+ EVPbkVersitParamWORK ) )
+ {
+ workAddress = EFalse;
+ }
+ else
+ {
+ generalAddress = EFalse;
+ }
+ }
+ }
+ }
+ }
+
+ for ( TInt i = 0; i < countFields; i++ )
+ {
+ const MVPbkStoreContactField& field =
+ container.FocusedStoreContact()->Fields().FieldAt( i );
+ TInt countProps =
+ field.BestMatchingFieldType()->VersitProperties().Count();
+ TArray<TVPbkFieldVersitProperty> props =
+ field.BestMatchingFieldType()->VersitProperties();
+ for ( TInt ii = 0; ii < countProps; ii++ )
+ {
+ if ( props[ ii ].Name() == EVPbkVersitNameGEO )
+ {
+ if ( props[ ii ].Parameters().Contains(
+ EVPbkVersitParamHOME ) )
+ {
+ if ( focusedField == EVPbkVersitParamHOME )
+ {
+ return ETrue;
+ }
+ homeAddress = ETrue;
+ }
+ else if ( props[ ii ].Parameters().Contains(
+ EVPbkVersitParamWORK ) )
+ {
+ if ( focusedField == EVPbkVersitParamWORK )
+ {
+ return ETrue;
+ }
+ workAddress = ETrue;
+ }
+ else
+ {
+ if ( focusedField == EVPbkVersitParamPREF )
+ {
+ return ETrue;
+ }
+ generalAddress = ETrue;
+ }
+ }
+ }
+ }
+
+ if ( focusedField == EVPbkVersitParamOther
+ && generalAddress && homeAddress && workAddress )
+ {
+ geoField = ETrue;
+ }
+
+ return geoField;
+}
+
+// End of File