vtuis/videotelui/src/commands/cvtuicommandmanager.cpp
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/commands/cvtuicommandmanager.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,421 @@
+/*
+* 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 manager class.
+*
+*/
+
+
+#include <cvtlogger.h>
+
+#include "cvtuicmdbase.h"
+#include "cvtuicommandmanager.h"
+#include "cvtuicommandpolicymanager.h"
+#include "cvtuiprimarycmdpolicy.h"
+#include "cvtuiexecutioncontext.h"
+#include "cvtuimenuitemdimmeraction.h"
+#include "tvtuistates.h"
+#include "mvtuicommandui.h"
+#include "cvtuicommandmodifybase.h"
+#include "cvtuicmdstatecheckaction.h"
+
+// Default array granularity.
+static const TInt KVtUiArrayGranularity = 1;
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::NewL
+// -----------------------------------------------------------------------------
+//
+CVtUiCommandManager* CVtUiCommandManager::NewL( const TVtUiStates& aUiStates,
+    CVtUiAppUi& aAppUi )
+    {
+    __VTPRINTENTER( "CmdMgr.NewL" )
+    CVtUiCommandManager* self = new ( ELeave ) CVtUiCommandManager( aUiStates,
+        aAppUi );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+    __VTPRINTEXIT( "CmdMgr.NewL" )
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::~CVtUiCommandManager
+// -----------------------------------------------------------------------------
+//
+CVtUiCommandManager::~CVtUiCommandManager()
+    {
+    __VTPRINTENTER( "CmdMgr.~" )
+    iCommands.Reset();
+    iCommandUis.Reset();
+    iCommandModifiers.Reset();
+    delete iExecutionContext;
+    delete iCmdStateCheckAction;
+    delete iCmdPolicyMgr;
+    __VTPRINTEXIT( "CmdMgr.~" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::UiStates
+// -----------------------------------------------------------------------------
+//
+const TVtUiStates& CVtUiCommandManager::UiStates() const
+    {
+    return iUiStates;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::AppUi
+// -----------------------------------------------------------------------------
+//
+const CVtUiAppUi& CVtUiCommandManager::AppUi() const
+    {
+    return iAppUi;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::VideoTelephonyVariation
+// -----------------------------------------------------------------------------
+//
+const TVtUiVideoTelephonyVariation&
+CVtUiCommandManager::VideoTelephonyVariation() const
+    {
+    return iVtVariation;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::HandleCommandL( TInt aCommandId )
+    {
+    TInt index( iCommands.FindInOrder( aCommandId, CVtUiCmdBase::KeyOrder() ) );
+    if ( index != KErrNotFound )
+        {
+        iCommands[ index ]->HandleL();
+        }
+    /*
+
+    This was commented out, because current CVtUiAppUi silently ignores
+    commands that are not handled, changed this to emulate same kind of
+    behaviour.
+
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    */
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::AddCommandUi
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::AddCommandUi( MVtUiCommandUi& aCommandUi )
+    {
+    __VTPRINTENTER( "CmdMgr.AddCommandUi" )
+    TInt result( KErrAlreadyExists );
+    TInt idx( iCommandUis.Find( &aCommandUi ) );
+    if ( idx == KErrNotFound )
+        {
+        result = iCommandUis.Append( &aCommandUi );
+        if ( result == KErrNone )
+            {
+            result = CommandUiAdded( aCommandUi );
+            }
+        }
+    __VTPRINTEXITR( "CmdMgr.AddCommandUi %d", result )
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RemoveCommandUi
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::RemoveCommandUi( MVtUiCommandUi& aCommandUi )
+    {
+    __VTPRINTENTER( "CmdMgr.RemoveCommandUi" )
+    TInt idx( iCommandUis.Find( &aCommandUi ) );
+    if ( idx != KErrNotFound )
+        {
+        iCommandUis.Remove( idx );
+        CommandUiRemoved( aCommandUi );
+        }
+    __VTPRINTEXIT( "CmdMgr.RemoveCommandUi" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::ValidateMenuItemsL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::ValidateMenuItemsL(
+    CVtUiCmdValidationActionBase& aAction )
+    {
+    __VTPRINTENTER( "CmdMgr.ValidateMenuItemsL" )
+    iCmdPolicyMgr->ValidateMenuItemsL( aAction );
+    __VTPRINTEXIT( "CmdMgr.ValidateMenuItemsL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::ValidateSoftkeyItemsL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::ValidateSoftkeyItemsL(
+    CVtUiCmdValidationActionBase& aAction )
+    {
+    __VTPRINTENTER( "CmdMgr.ValidateSoftkeyItemsL" )
+    iCmdPolicyMgr->ValidateSoftkeyItemsL( aAction );
+    __VTPRINTEXIT( "CmdMgr.ValidateSoftkeyItemsL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::ValidateToolbarItemsL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::ValidateToolbarItemsL(
+    CVtUiCmdValidationActionBase& aAction )
+    {
+    __VTPRINTENTER( "CmdMgr.ValidateToolbarItemsL" )
+    iCmdPolicyMgr->ValidateToolbarItemsL( aAction );
+    __VTPRINTEXIT( "CmdMgr.ValidateToolbarItemsL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::IsCommandAllowedL
+// -----------------------------------------------------------------------------
+//
+TBool CVtUiCommandManager::IsCommandAllowedL( TInt aCommandId )
+    {
+    __VTPRINTENTER( "CmdMgr.IsCommandAllowedL" )
+    TInt index( iCommands.FindInOrder( aCommandId, CVtUiCmdBase::KeyOrder() ) );
+    if ( index == KErrNotFound )
+        {
+        iCmdStateCheckAction->SetCommand( aCommandId );
+        iCmdPolicyMgr->CustomValidateL( *iCmdStateCheckAction );
+        }
+    else
+        {
+        return iCommands[ index ]->IsEnabled();
+        }
+    __VTPRINTEXIT( "CmdMgr.IsCommandAllowedL" )
+    return iCmdStateCheckAction->IsCommandAllowed();
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RegisterCommandContext
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::RegisterCommandContext( CVtUiCmdContext& aContext )
+    {
+    __VTPRINTENTER( "CmdMgr.RegisterCommandContext" )
+    TInt result( iCmdPolicyMgr->RegisterCommandContext( aContext ) );
+    __VTPRINTEXITR( "CmdMgr.RegisterCommandContext %d", result )
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::UnregisterCommandContext
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::UnregisterCommandContext( CVtUiCmdContext& aContext )
+    {
+    __VTPRINTENTER( "CmdMgr.UnregisterCommandContext" )
+    iCmdPolicyMgr->UnregisterCommandContext( aContext );
+    __VTPRINTEXIT( "CmdMgr.UnregisterCommandContext" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::AddValidator
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::AddValidator( CVtUiCmdValidatorBase& aValidator )
+    {
+    __VTPRINTENTER( "CmdMgr.AddValidator" )
+    TInt result( iCmdPolicyMgr->AddValidator( aValidator ) );
+    __VTPRINTEXITR( "CmdMgr.AddValidator %d", result )
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RemoveValidator
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::RemoveValidator(
+    CVtUiCmdValidatorBase& aValidator )
+    {
+    __VTPRINTENTER( "CmdMgr.RemoveValidator" )
+    iCmdPolicyMgr->RemoveValidator( aValidator );
+    __VTPRINTEXIT( "CmdMgr.RemoveValidator" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RefreshL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::RefreshL()
+    {
+    __VTPRINTENTER( "CmdMgr.RefreshL" )
+    for ( TInt i = iCommandUis.Count() - 1; i >= 0; i-- )
+        {
+        iCommandUis[ i ]->RefreshL();
+        }
+    __VTPRINTEXIT( "CmdMgr.RefreshL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::AddCommandModifier
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::AddCommandModifier(
+    CVtUiCommandModifyBase& aModifier )
+    {
+    __VTPRINTENTER( "CmdMgr.AddCommandModifier" )
+    TInt result(
+        iCommandModifiers.InsertInOrder( &aModifier,
+            CVtUiCommandModifyBase::PriorityOrder() ) );
+    if ( result == KErrNone )
+        {
+        result = CommandModifierAdded( aModifier );
+        }
+    __VTPRINTEXITR( "CmdMgr.AddCommandModifier %d", result )
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RemoveCommandModifier
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::RemoveCommandModifier(
+    CVtUiCommandModifyBase& aModifier )
+    {
+    __VTPRINTENTER( "CmdMgr.RemoveCommandModifier" )
+    TInt idx( iCommandModifiers.FindInOrder( &aModifier,
+        CVtUiCommandModifyBase::PriorityOrder() ) );
+    if ( idx != KErrNotFound )
+        {
+        iCommandModifiers.Remove( idx );
+        CommandModifierRemoved( aModifier );
+        }
+    __VTPRINTEXIT( "CmdMgr.RemoveCommandModifier" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::RegisterCommandL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::RegisterCommandL( CVtUiCmdBase& aCommand )
+    {
+    __VTPRINTENTER( "CmdMgr.RegisterCommandL" )
+    iCommands.InsertInOrderL( &aCommand, CVtUiCmdBase::LinearOrder() );
+    __VTPRINTEXIT( "CmdMgr.RegisterCommandL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::UnregisterCommand
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::UnregisterCommand( const CVtUiCmdBase& aCommand )
+    {
+    __VTPRINTENTER( "CmdMgr.UnregisterCommand" )
+    TInt index( iCommands.FindInOrder( &aCommand,
+        CVtUiCmdBase::LinearOrder() ) );
+    if ( index != KErrNotFound )
+        {
+        iCommands.Remove( index );
+        }
+    __VTPRINTEXIT( "CmdMgr.UnregisterCommand" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::CVtUiCommandManager
+// -----------------------------------------------------------------------------
+//
+CVtUiCommandManager::CVtUiCommandManager( const TVtUiStates& aUiStates, 
+    CVtUiAppUi& aAppUi )
+: iCommandUis( KVtUiArrayGranularity ),
+  iCommandModifiers( KVtUiArrayGranularity ),
+  iCommands( KVtUiArrayGranularity ),
+  iUiStates( aUiStates ),
+  iAppUi( aAppUi )
+    {
+    __VTPRINTENTER( "CmdMgr.ctor" )
+    __VTPRINTEXIT( "CmdMgr.ctor" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::ConstructL()
+    {
+    __VTPRINTENTER( "CmdMgr.ConstructL" )
+    iVtVariation.ReadL();
+    iCmdPolicyMgr = CVtUiCommandPolicyManager::NewL( *this );
+    iCmdStateCheckAction = CVtUiCmdStateCheckAction::NewL();
+    iExecutionContext = CVtUiExecutionContext::NewL( *this );
+    __VTPRINTEXIT( "CmdMgr.ConstructL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::CommandModifierAdded
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::CommandModifierAdded(
+    CVtUiCommandModifyBase& aModifier )
+    {
+    TInt error( KErrNone );
+    for ( TInt i = iCommandUis.Count() - 1; !error && i >= 0; i-- )
+        {
+        error = iCommandUis[ i ]->AddCommandModifier( aModifier );
+        }
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::CommandModifierRemoved
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::CommandModifierRemoved(
+    CVtUiCommandModifyBase& aModifier )
+    {
+    for ( TInt i = iCommandUis.Count() - 1; i >= 0; i-- )
+        {
+        iCommandUis[ i ]->RemoveCommandModifier( aModifier );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::CommandUiAdded
+// -----------------------------------------------------------------------------
+//
+TInt CVtUiCommandManager::CommandUiAdded( MVtUiCommandUi& aCommandUi )
+    {
+    TInt error( KErrNone );
+    for ( TInt i = iCommandModifiers.Count() - 1; !error && i >= 0; i-- )
+        {
+        error = aCommandUi.AddCommandModifier( *iCommandModifiers[ i ] );
+        }
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiCommandManager::CommandUiRemoved
+// -----------------------------------------------------------------------------
+//
+void CVtUiCommandManager::CommandUiRemoved( MVtUiCommandUi& aCommandUi )
+    {
+    for ( TInt i = iCommandModifiers.Count() - 1; i >= 0; i-- )
+        {
+        aCommandUi.RemoveCommandModifier( *iCommandModifiers[ i ] );
+        }
+    }