idlehomescreen/xmluirendering/uiengine/inc/xnkeyeventdispatcher.h
changeset 0 f72a12da539e
child 34 d05a55b217df
--- /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__