--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/commands/cvtuicommandpolicymanager.cpp Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,334 @@
+/*
+* Copyright (c) 2006 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: Command policy manager class.
+*
+*/
+
+
+#include <cvtlogger.h>
+
+#include "cvtuicommandpolicymanager.h"
+#include "cvtuicmdcontext.h"
+#include "cvtuicmdvalidatorbase.h"
+#include "cvtuicmdvalidationactionbase.h"
+#include "cvtuicmdcustomvalidationactionbase.h"
+#include "cvtuiprimarycmdpolicy.h"
+#include "cvtuicommandmanager.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Used in InsertInOrder() method to compare two instances of CVtUiCmdContext.
+// ---------------------------------------------------------------------------
+//
+TInt ContextTypeCmpFunc( const CVtUiCmdContext& aV1,
+ const CVtUiCmdContext& aV2 )
+ {
+ return static_cast< TInt >( aV1.ContextType() ) -
+ static_cast< TInt >( aV2.ContextType() );
+ }
+
+// ---------------------------------------------------------------------------
+// Used in FindInOrder() method to compare instances of CVtUiCmdContext versus
+// given key value.
+// ---------------------------------------------------------------------------
+//
+TInt ContextTypeCmpFuncVsKey( const TVtUiCmdContextType* aKey,
+ const CVtUiCmdContext& aValue )
+ {
+ return static_cast< TInt > ( *aKey ) -
+ static_cast< TInt >( aValue.ContextType() );
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::NewL
+// ---------------------------------------------------------------------------
+//
+CVtUiCommandPolicyManager*
+CVtUiCommandPolicyManager::NewL( const CVtUiCommandManager& aCmdManager )
+ {
+ CVtUiCommandPolicyManager* self =
+ new ( ELeave ) CVtUiCommandPolicyManager( aCmdManager );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::~CVtUiCommandPolicyManager
+// ---------------------------------------------------------------------------
+//
+CVtUiCommandPolicyManager::~CVtUiCommandPolicyManager()
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.~" )
+ iContexts.Reset();
+ iValidators.Reset();
+ delete iPrimaryCommandPolicy;
+ __VTPRINTEXIT( "CmdPolicyMgr.~" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::RegisterCommandContext
+// ---------------------------------------------------------------------------
+//
+TInt CVtUiCommandPolicyManager::RegisterCommandContext(
+ CVtUiCmdContext& aContext )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.RegisterCommandContext" )
+ TLinearOrder< CVtUiCmdContext > cmpFunc( ::ContextTypeCmpFunc );
+ TInt result( KErrNone );
+ TInt index( iContexts.FindInOrder( &aContext, cmpFunc ) );
+ if ( index == KErrNotFound )
+ {
+ TInt error( iContexts.InsertInOrder( &aContext, cmpFunc ) );
+ if ( !error )
+ {
+ CommandContextRegistered( aContext );
+ }
+ result = error;
+ }
+ else
+ {
+ result = KErrAlreadyExists;
+ }
+ __VTPRINTEXITR( "CmdPolicyMgr.RegisterCommandContext %d", result )
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::UnregisterCommandContext
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::UnregisterCommandContext(
+ CVtUiCmdContext& aContext )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.UnregisterCommandContext" )
+ TLinearOrder< CVtUiCmdContext > cmpFunc( ::ContextTypeCmpFunc );
+ TInt index( iContexts.FindInOrder( &aContext, cmpFunc ) );
+ if ( index != KErrNotFound )
+ {
+ iContexts.Remove( index );
+ CommandContextUnregistered( aContext );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.UnregisterCommandContext" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::AddValidator
+// ---------------------------------------------------------------------------
+//
+TInt CVtUiCommandPolicyManager::AddValidator(
+ CVtUiCmdValidatorBase& aValidator )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.AddValidator" )
+ TInt error( iValidators.Append( &aValidator ) );
+ if ( !error )
+ {
+ ValidatorAdded( aValidator );
+ }
+ __VTPRINTEXITR( "CmdPolicyMgr.AddValidator %d", error )
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::RemoveValidator
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::RemoveValidator(
+ CVtUiCmdValidatorBase& aValidator )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.RemoveValidator" )
+ TInt index( iValidators.Find( &aValidator ) );
+ if ( index != KErrNotFound )
+ {
+ iValidators.Remove( index );
+ ValidatorRemoved( aValidator );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.RemoveValidator" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidateMenuItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidateMenuItemsL(
+ CVtUiCmdValidationActionBase& aAction )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidateMenuItemsL" )
+ ValidateL( EVtUiCmdContextTypeMenu, aAction );
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidateMenuItemsL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidateSoftkeyItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidateSoftkeyItemsL(
+ CVtUiCmdValidationActionBase& aAction )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidateSoftkeyItemsL" )
+ ValidateL( EVtUiCmdContextTypeSoftkey, aAction );
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidateSoftkeyItemsL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidateToolbarItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidateToolbarItemsL(
+ CVtUiCmdValidationActionBase& aAction )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidateToolbarItemsL" )
+ ValidateL( EVtUiCmdContextTypeToolbar, aAction );
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidateToolbarItemsL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::CustomValidateL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::CustomValidateL(
+ CVtUiCmdCustomValidationActionBase& aAction )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.CustomValidateL" )
+ ValidateL( EVtUiCmdContextTypeExecution, aAction );
+ __VTPRINTEXIT( "CmdPolicyMgr.CustomValidateL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::CVtUiCommandPolicyManager
+// ---------------------------------------------------------------------------
+//
+CVtUiCommandPolicyManager::CVtUiCommandPolicyManager(
+ const CVtUiCommandManager& aCmdManager ) : iCommandManager( aCmdManager )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ctor" )
+ __VTPRINTEXIT( "CmdPolicyMgr.ctor" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ConstructL()
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ConstructL" )
+ iPrimaryCommandPolicy =
+ CVtUiPrimaryCmdPolicy::NewL( iCommandManager.UiStates(),
+ iCommandManager.AppUi() );
+ User::LeaveIfError( AddValidator( *iPrimaryCommandPolicy ) );
+ __VTPRINTEXIT( "CmdPolicyMgr.ConstructL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::CommandContextRegistered
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::CommandContextRegistered(
+ CVtUiCmdContext& aContext )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.CommandContextRegistered" )
+ for ( TInt i = iValidators.Count() - 1 ; i >= 0; i-- )
+ {
+ aContext.AddValidator( *iValidators[ i ] );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.CommandContextRegistered" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::CommandContextUnregistered
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::CommandContextUnregistered(
+ CVtUiCmdContext& aContext )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.CommandContextUnregistered" )
+ for ( TInt i = iValidators.Count() - 1 ; i >= 0; i-- )
+ {
+ aContext.RemoveValidator( *iValidators[ i ] );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.CommandContextUnregistered" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidatorAdded
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidatorAdded(
+ CVtUiCmdValidatorBase& aValidator )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidatorAdded" )
+ for ( TInt i = iContexts.Count() - 1 ; i >= 0; i-- )
+ {
+ iContexts[ i ]->AddValidator( aValidator );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidatorAdded" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidatorRemoved
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidatorRemoved(
+ CVtUiCmdValidatorBase& aValidator )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidatorRemoved" )
+ for ( TInt i = iContexts.Count() - 1 ; i >= 0; i-- )
+ {
+ iContexts[ i ]->RemoveValidator( aValidator );
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidatorRemoved" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::FindCommandContextByType
+// ---------------------------------------------------------------------------
+//
+CVtUiCmdContext* CVtUiCommandPolicyManager::FindCommandContextByType(
+ TVtUiCmdContextType aContextType )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.FindCommandContextByType" )
+ CVtUiCmdContext* result = NULL;
+ TInt index( iContexts.FindInOrder( aContextType,
+ ::ContextTypeCmpFuncVsKey ) );
+ if ( index != KErrNotFound )
+ {
+ result = iContexts[ index ];
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.FindCommandContextByType" )
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiCommandPolicyManager::ValidateL
+// ---------------------------------------------------------------------------
+//
+void CVtUiCommandPolicyManager::ValidateL( TVtUiCmdContextType aContextType,
+ CVtUiCmdValidationActionBase& aAction )
+ {
+ __VTPRINTENTER( "CmdPolicyMgr.ValidateL" )
+ CVtUiCmdContext* context =
+ FindCommandContextByType( aContextType );
+ if ( context )
+ {
+ aAction.BeginProcess();
+ context->ValidateL( aAction );
+ aAction.EndProcess();
+ }
+ __VTPRINTEXIT( "CmdPolicyMgr.ValidateL" )
+ }
+