diff -r f15ac8e65a02 -r 779871d1e4f4 vtuis/videotelui/inc/compman/cvtuicomponentmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/cvtuicomponentmanager.h Wed Sep 01 12:29:12 2010 +0100 @@ -0,0 +1,435 @@ +/* +* 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: Component manager implementation. +* +*/ + + +#ifndef C_VTUICOMPONENTMANAGER_H +#define C_VTUICOMPONENTMANAGER_H + +#include + +#include "mvtuicomponentmanager.h" +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" + +/** + * CVtUiComponentManager + * + * Component manager implementation. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiComponentManager ) + : public CBase, public MVtUiComponentManager + { + +public: // public methods + + /** + * Static constructor. + * + * @return Newly created instance of CVtUiComponentManager class. + */ + static CVtUiComponentManager* NewL(); + + /** + * Destructor. + */ + ~CVtUiComponentManager(); + + /** + * Called when a Ws event is delivered. + * + * @param aEvent Window server event. + * @param aDestination Event destination control. + */ + void HandleWsEventL( const TWsEvent& aEvent, CCoeControl *aDestination ); + + /** + * Called when a resource change is informed. + * + * @param aType Type of change. + */ + void HandleResourceChangeL( TInt aType ); + + /** + * Called when a keyevent needs handling. + * + * @param aKeyEvent Key event structure. + * @param aCode Event code. + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType); + + /** + * Called when a layout change is informed. + * + */ + void HandleLayoutChangeL(); + +public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::ChangeWsEventRegistration + */ + TInt ChangeWsEventRegistration( MVtUiWindowServerEventObserver& aObserver, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeResourceChangeRegistration + */ + TInt ChangeResourceChangeRegistration( + MVtUiResourceChangeObserver& aObserver, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeKeyEventRegistration + */ + TInt ChangeKeyEventRegistration( MVtUiKeyEventObserver& aComponent, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeLayoutChangeRegistration + */ + TInt ChangeLayoutChangeRegistration( MVtUiLayoutChangeObserver& aComponent, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeComponentRegistration + */ + TInt ChangeComponentRegistration( TVtUiComponentState& aComponentState, + TAction aAction ); + + /** + * @see MVtUiComponentManager::RequestActivation + */ + void RequestActivationL( MVtUiComponent::TComponentId aId ); + + /** + * @see MVtUiComponentManager::DeActivateComponentL + */ + void DeActivateComponentL( MVtUiComponent::TComponentId aId ); + +private: // private classes + + /** + * TStateListItem + * + * Contains one component's state in state list. + */ + class TStateListItem + { + + public: // public type definitions + + /** + * Compare by key type definition. + */ + typedef TInt (*TKeyCmpFunc) + ( const MVtUiComponent::TComponentId*, const TStateListItem& ); + + public: // public methods + + /** + * Constructor + * + * @param aState Constant reference to component state. + */ + TStateListItem( const TVtUiComponentState& aState ); + + /** + * Returns component id. + * + * @return Component's id. + */ + MVtUiComponent::TComponentId ComponentId() const; + + /** + * Returns component's state. + * + * @return Component's state. + */ + TVtUiComponentState::TState State() const; + + /** + * Sets component's state. + * + * @param aState Component's new state. + */ + void SetState( TVtUiComponentState::TState aState ); + + /** + * Returns const reference to block list. + * + * @return Constant reference to block list. + */ + const TVtUiBlockList& BlockList() const; + + /** + * Sets this object as root. + */ + void SetRoot(); + + /** + * Returns ETrue if this object is root. + * + * @return ETrue if this item is root, EFalse otherwise. + */ + TBool IsRoot() const; + + /** + * Sets this object as visited. + */ + void SetVisited(); + + /** + * Returns ETrue if this object is visited. + * + * @return ETrue if this item has been visited, EFalse otherwise. + */ + TBool IsVisited() const; + + public: // static public methods + + /** + * Returns TLinearOrder for RArray operations. Ordered by component id. + * + * @return TLinearOrder insntace for RArray operations. Ordering will + * be done based on component Id. + */ + static TLinearOrder< TStateListItem > LinearOrder(); + + /** + * Returns key order function for RArray operations. + * + * @return Key compare method pointer for RArray operations. + */ + static TKeyCmpFunc KeyOrder(); + + /** + * Returns TLinearOrder for RArray operations. Ordered by component + * state. + * + * @return TLinearOrder instance for RArray operations. Ordering will + * be done based on component state. + */ + static TLinearOrder< TStateListItem > StateOrder(); + + private: // static private methods + + /** + * StateListItem compare method. + */ + static TInt ItemCmpFunc( const TStateListItem& aItem1, + const TStateListItem& aItem2 ); + + /** + * StateListItem vs key compare method. + */ + static TInt KeyCmpFunc( const MVtUiComponent::TComponentId* aKey, + const TStateListItem& aItem ); + + /** + * StateListItem by state compare method. + */ + static TInt StateCmpFunc( const TStateListItem& aItem1, + const TStateListItem& aItem2 ); + + private: // data + + // Component's ID + MVtUiComponent::TComponentId iComponentId; + + // Component's state + TVtUiComponentState::TState iState; + + // Block mask (IDs which will be blocked by this component) + TVtUiBlockListBitField iBlockList; + + // ETrue if this component is the root compoent, EFalse otherwise + TBool iIsRoot; + + // ETrue if this component has been already visited (i.e. evaluated) + TBool iIsVisited; + + }; + + /** + * TStateList + * + * Contains list of component states. This list can be modified and when all + * modifications are ready, the whole list can be commited at once. + * + */ + class TStateList + { + + public: // public methods + + /** + * Constructor. + */ + TStateList(); + + /** + * Destructor. + */ + ~TStateList(); + + /** + * Add new item to state list. + * + * @param aItem Reference to item to be added to the list. + */ + void AddItemL( TStateListItem& aItem ); + + /** + * Returns number of items in state list. + * + * @return Number of items on list. + */ + TInt ItemCount() const; + + /** + * Find state list item by component id. + * + * @param aComponentId Id of component that will be searched. + * @return Index of the component or KErrNotFound if component with + * given Id could not be found. + */ + TInt FindItem( MVtUiComponent::TComponentId aComponentId ) const; + + /** + * Returns reference to state list item at given index. + * + * @param aIndex Index of the item to be fetched. + * @return Reference to item at given index. + */ + TStateListItem& At( TInt aIndex ); + + /** + * Returns const reference to state list item at given index. + * + * @param aIndex Index of the item to be fetched. + * @return Constant reference to item at given index. + */ + const TStateListItem& At( TInt aIndex ) const; + + /** + * Sorts list using given linear order. + * + * @param aOrder TLinearObject that will be used in sorting. + */ + void Sort( + TLinearOrder< CVtUiComponentManager::TStateListItem > aOrder ); + + private: // data + + // List items + RArray< TStateListItem > iItems; + + }; + +private: // enumerations + + /** + * Activation actions + */ + enum TActivationAction + { + /** Hide component */ + EHide, + /** Show component */ + EShow + }; + +private: + + /** + * Constructor + */ + CVtUiComponentManager(); + + /** + * 2nd constructor, may leave + */ + void ConstructL(); + + /** + * Adds or removes component from given array. + */ + template < class T > + TInt AddOrRemoveComponent( RPointerArray< T >& aArray, T* aComponent, + TAction aAction ); + + /** + * Returns linear order object for array operations. + */ + static TLinearOrder< MVtUiComponent > ComponentOrder(); + + /** + * Returns linear order object for array operations. + */ + static TLinearOrder< TVtUiComponentState > ComponentStateOrder(); + + /** + * Starts activation process. + */ + void DoActivationL( TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ); + + /** + * Starts deactivation process. + */ + void DoDeactivationL( TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ); + + /** + * Calculates activation. + */ + void CalculateActivationL( const TVtUiBlockList& aBlockList, + const TVtUiBlockList& aExclList, TStateList& aStateList, + TActivationAction aAction ); + + /** + * Commits activation calculation results. + */ + void CommitStateListL( TStateList& aList ); + + /** + * Constructs component state list before the calculations. + */ + void ConstructStateListL( TStateList& aList ); + +private: // data + + // Window server event listeners + RPointerArray< MVtUiWindowServerEventObserver > iWsEventObservers; + + // Resource change event listeners + RPointerArray< MVtUiResourceChangeObserver > iResourceChangeObservers; + + // Key event listeners + RPointerArray< MVtUiKeyEventObserver > iKeyEventObservers; + + // Layout change listeners + RPointerArray< MVtUiLayoutChangeObserver > iLayoutChangeObservers; + + // Registered components + RPointerArray< TVtUiComponentState > iComponents; + + }; + +#endif // C_VTUICOMPONENTMANAGER_H