diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicommandmanager.cpp --- /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 + +#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 ] ); + } + }