vtuis/videotelui/src/commands/cvtuicommandpolicymanager.cpp
changeset 0 ed9695c8bcbe
--- /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" )
+    }
+