diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluirendering/uiengine/inc/xnkeyeventdispatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xnkeyeventdispatcher.h Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2008 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: Key event dispatcher header +* +*/ + + +#ifndef __XNKEYEVENTDISPATCHER_H__ +#define __XNKEYEVENTDISPATCHER_H__ + +// System includes +#include +#include +#include + +// Uder includes +#include "xnviewmanager.h" + +// Forward declarations +class CXnNode; +class CXnUiEngine; +class CEikButtonGroupContainer; +class CXnViewData; +class CXnPluginData; + +// Class declaration + +/** + * Control adapter class implementation. + * + * @ingroup group_xnlayoutengine + * @lib xn3layoutengine.lib + * @since Series 60 3.1 + */ +NONSHARABLE_CLASS( CXnKeyEventDispatcher ) : public CCoeControl, + public MCoeMessageMonitorObserver, + public MXnViewObserver + { +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CXnKeyEventDispatcher* NewL( CXnUiEngine& aUiEngine ); + + /** + * Destructor. + */ + ~CXnKeyEventDispatcher(); + +private: + // From CCoeControl + + /** + * @see CCoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + +private: + // from MCoeMessageMonitorObserver + + /** + * @see MCoeMessageMonitorObserver + */ + void MonitorWsMessage( const TWsEvent& aEvent ); + +public: + // New functions + + /** + * Set the node to which key events are given + * + * @since Series 60 3.1 + * @param aNode Node to set + * @param aSource A source of event that triggered focus change. + */ + void SetNodeL( CXnNode* aNode, TInt aSource = 0 ); + + /** + * Set the node to which key events are given, but do not notify. + * + * @since Series 60 3.1 + * @param aNode Node to set + */ + void SetNodeWithoutNotificationL( CXnNode* aNode ); + + /** + * Get the node to which holds focus + * + * @since Series 60 3.1 + * @return Focused node, NULL if no focus. + */ + CXnNode* FocusedNode() const; + + /** + * Set the node to which menu events are given + * + * @since Series 60 3.1 + * @param aNode Node to set + */ + void SetMenuNodeL( CXnNode* aNode ); + + /** + * Removes the node to which menu events are given + * + * @since Series 60 3.2 + */ + void ResetMenuNodeL(); + + /** + * Refresh current menu + * + * @since Series 60 3.1 + */ + void RefreshMenuL(); + + /** + * Checks whether the menu is focused. + * + * @since S60 3.1 + * @return ETrue if menu is focused. + */ + TBool IsMenuFocused() const; + + /** + * Set node as passive, and add it to the passive focused node array. + * + * @since Series 60 3.2 + * @param aNode Node to use. + */ + void AddPassiveFocusedNodeL( CXnNode* aNode ); + + /** + * Unset the passive focus from the node, and remove it from the passive + * focused node array. + * + * @since Series 60 3.2 + * @param aNode Node to use. + */ + void RemovePassiveFocusedNodeL( CXnNode* aNode ); + + /** + * Clear the passive focused node array, and unset the passive focus + * states. + * + * @since Series 60 3.2 + */ + void ClearPassiveFocusedNodesL(); + +private: + // new functions + + void SetNodeL( CXnNode* aToLose, CXnNode* aToGain, TBool aNotify, + TInt aSource = 0 ); + + void ResolveAndSetFocusL(); + + void ClearStateL(); + +protected: + // New functions + + /** + * C++ default constructor. + */ + CXnKeyEventDispatcher( CXnUiEngine& aUiEngine ); + + /** + * Two-phased constructor. + */ + void ConstructL(); + +private: + // from MXnViewObserver + + void NotifyViewActivatedL( const CXnViewData& aViewData ); + + void NotifyViewDeactivatedL( const CXnViewData& aViewData ); + + void NotifyConfigureWidgetL( const CHsContentInfo& aContentInfo, + CXnPluginData& aPluginData ); + + void NotifyWidgetAdditionL( const CXnPluginData& aPluginData ); + void NotifyWidgetRemovalL( const CXnPluginData& aPluginData ); + void NotifyViewAdditionL( const CXnPluginData& /*aPluginData*/ ){}; + void NotifyViewRemovalL( const CXnPluginData& /*aPluginData*/ ){}; + +private: + // Data + + /** Reference to uiengine */ + CXnUiEngine& iUiEngine; + /** Losefocus trigger, owned */ + CXnNode* iLoseFocus; + /** Gainfocus trigger, owned */ + CXnNode* iGainFocus; + /** Node that receives key events */ + CXnNode* iNode; + /** Previous key event receiver */ + CXnNode* iPreviousNode; + /** Node that receives menu events */ + CXnNode* iMenuNode; + /** Node that was focused when keyevent started */ + CXnNode* iKeyEventNode; + /** Event code for keyevents */ + TEventCode iEventCode; + /** Focused node is changed during keyevent process */ + TBool iFocusChanged; + /** Command button array for softkeys, not owned */ + CEikButtonGroupContainer* iCbaContainer; + /** For storing the nodes that have passive focus. */ + RPointerArray< CXnNode > iPassiveFocusedNodes; + }; + +#endif //__XNKEYEVENTDISPATCHER_H__