--- /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 <e32base.h>
+#include <coecntrl.h>
+#include <eikmobs.h>
+
+// 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__