webengine/wmlengine/src/MVC/include/MVCScroll.h
branchRCL_3
changeset 49 919f36ff910f
parent 0 dd21522fd290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/MVC/include/MVCScroll.h	Wed Sep 01 12:28:30 2010 +0100
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Object for containing scrolling specific methods.
+*
+*/
+
+
+#ifndef __MVCSCROLL_H
+#define __MVCSCROLL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "MVCView.h"
+#include "nw_evt_controlkeyevent.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+NONSHARABLE_CLASS(CMVCScroll) : public CBase
+{
+public:
+    /**
+    * Two-phased constructor.
+    * @param view A pointer to the view object associated with this scroll object
+    * @return CMVCScroll*
+	  */
+    static CMVCScroll* NewL(CView* view);
+
+    /**
+    * Destructor.
+    */
+    ~CMVCScroll();
+
+    /**
+    * Navigates downward through the page
+    * @since 2.X
+    * @param isNewPage A flag passed to SetCurrentBox
+    * @param noBoxVisible A flag used for deciding whether or not to call ForceCurrentBox
+    * @return TBool
+	  */
+    TBool TabForward(TBool isNewPage,
+                     TBool* noBoxVisible);
+        
+    /**
+    * Navigates upward through the page
+    * @since 2.X
+    * @param noBoxVisible A flag used for deciding whether or not to call ForceCurrentBox
+    * @return TBool
+	  */
+    TBool TabBackward(TBool* noBoxVisible);
+
+    /**
+    * Navigates left horizontally through the page
+    * @since 2.X
+    * @param noBoxVisible A flag used for deciding whether or not to call ForceCurrentBox
+    * @return TBool
+	  */
+    TBool TabLeft(TBool* noBoxVisible);
+
+    /**
+    * Navigates right horizontally through the page
+    * @since 2.X
+    * @param noBoxVisible A flag used for deciding whether or not to call ForceCurrentBox
+    * @return TBool
+	  */
+    TBool TabRight(TBool* noBoxVisible);
+
+    /**
+    * Returns a NW_LMgr_Box_t pointer to the the previous box in the index
+    * @since 2.X
+    * @param oldBox A pointer to the (current)box used to calculate the previous box
+    * @return NW_LMgr_Box_t*
+	  */
+    NW_LMgr_Box_t* GetPreviousTabIndex(const NW_LMgr_Box_t* oldBox,
+                                       NW_Int32* currentTabIndex);
+ 
+    /**
+    * Returns a NW_LMgr_Box_t pointer to the the next box in the index
+    * @since 2.X
+    * @param oldBox A pointer to the (current)box used to calculate the previous box
+    * @return NW_LMgr_Box_t*
+	  */
+    NW_LMgr_Box_t* GetNextTabIndex(const NW_LMgr_Box_t* oldBox,
+                                   NW_Int32* currentTabIndex);
+
+    /**
+    * Processes the control key for normal layout
+    * @since 2.X
+    * @param key The control key that was pressed, up, down, left, right
+    * @return TBool
+	  */
+    TBool ProcessControlKey(NW_Evt_ControlKeyType_t key);
+
+    /**
+    * Processes the control key for vertical layout
+    * @since 2.X
+    * @param key The control key that was pressed, up, down, left, right
+    * @return TBool
+	  */
+    TBool ProcessControlKeyVL(NW_Evt_ControlKeyType_t key);
+
+    /**
+    * Method used to calculate the amount to scroll the page up or down
+    * @since 2.X
+    * @param void
+    * @return NW_Uint16
+    */
+    NW_Uint16 GetScrollAmount(void);
+
+    /**
+    * Method used in vertical layout to page up or down by one full
+    * page size minus 2 lines
+    */
+    TBool ScrollPage(NW_Evt_ControlKeyType_t key);
+
+    /**
+    * Method returns the first sibling box whose width and height are not zero
+    */
+    NW_LMgr_Box_t* CMVCScroll::GetFirstSiblingBox (NW_LMgr_Box_t* box);  
+
+private: // Private methods and member variables
+    /**
+    * C++ default constructor.
+    */
+    CMVCScroll(CView* view);
+    
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+
+    /**
+    * Method used in vertical layout to tab to the appropriate link
+    */
+    TBool ScrollLink(NW_Evt_ControlKeyType_t key,
+                     TBool* noBoxVisible);
+ 
+    /**
+    * Method used to calculate the next box to tab to 
+    */
+    void GetBoxRange(NW_LMgr_Box_t* box, 
+                     NW_GDI_Metric_t* referenceY, NW_GDI_Metric_t* refY2,
+                     NW_GDI_Metric_t* referenceX, NW_GDI_Metric_t* refX2);
+
+    /**
+    * Method to set focus to the current box
+    */
+    TBrowserStatusCode SetCurrentBox(NW_LMgr_Box_t* box, 
+                              NW_Evt_TabEvent_t* tabEvent,
+                              TBool isNewPage,
+                              TBool* noBoxVisible);
+    /**
+    * Method returns true if the box is visible in both rectangles
+    */
+    TBool IsBoxVisibleInEither(const NW_LMgr_Box_t* box,
+                               NW_GDI_Rectangle_t* bounds1,
+                               NW_GDI_Rectangle_t* bounds2);
+    /**
+    * Method used to get range of the box, not considering sibling or master box's range
+    */
+    void GetBoxRangeRestrict (NW_LMgr_Box_t* box, 
+                              NW_GDI_Metric_t* referenceY, NW_GDI_Metric_t* refY2,
+                              NW_GDI_Metric_t* referenceX, NW_GDI_Metric_t* refX2 );
+    /**
+    * Method used to get master range of the box
+    */
+    void GetMasterBoxRange (NW_LMgr_Box_t* box, 
+                            NW_GDI_Metric_t* referenceY, NW_GDI_Metric_t* refY2,
+                            NW_GDI_Metric_t* referenceX, NW_GDI_Metric_t* refX2 );
+   
+    /**
+    * Method used to get the first sibling box range
+    */
+    void GetFirstSiblingBoxRange (NW_LMgr_Box_t* box, 
+                                  NW_GDI_Metric_t* referenceY, NW_GDI_Metric_t* refY2,
+                                  NW_GDI_Metric_t* referenceX, NW_GDI_Metric_t* refX2 );
+   /**
+    * Method used to get the size of the visible box
+    */
+    NW_Bool HowBigIsBoxVisible ( const NW_LMgr_Box_t* box,
+                                 NW_GDI_Rectangle_t* bounds,
+                                 NW_GDI_Rectangle_t* overlap );
+   /**
+    * Method used to get the scroll down bounds
+    */
+    NW_Bool GetScrollDownBounds ( CView* view,
+                                  NW_GDI_Rectangle_t* scrolledBounds );
+   /**
+    * Method used to get the scroll up bounds
+    */
+    NW_Bool GetScrollUpBounds ( CView* view,
+                                NW_GDI_Rectangle_t* scrolledBounds );
+   /**
+    * Method used to get the tab index
+    */
+    NW_LMgr_Box_t* GetTabIndex( const NW_LMgr_Box_t* oldBox, 
+                                NW_Bool nextIndex, 
+                                NW_Int32* currentTabIndex );
+   /**
+    * Method used to get the next event listener
+    */
+    NW_LMgr_Box_t* GetNextEventListener (NW_LMgr_BoxVisitor_t* boxVisitor);
+   
+    /**
+    * Method used to find the first visible box on a page
+    */
+    void GetFirstVisible(NW_LMgr_Box_t* box, 
+                         NW_LMgr_Box_t** firstVisible);
+    /**
+    * Method used to calculate the amount to page up or down
+    */
+    NW_Uint16 GetPagingAmount(void);
+
+    // Pointer to the scroll objects associated view object
+    CView* iView;
+};
+
+#endif //__MVCSCROLL_H