webengine/wmlengine/src/lmgr/include/BoxFormatHandler.h
changeset 0 dd21522fd290
child 68 92a765b5b3e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/lmgr/include/BoxFormatHandler.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2003-2004 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:  The class handles formatting of the boxes , refreshes the boxe on the postformatting,
+              adds the active boxes  to the tab list
+*
+*/
+
+#ifndef BOX_FORMAT_HANDLER_H
+#define BOX_FORMAT_HANDLER_H
+
+#include "e32base.h"
+#include "CStack.h"
+#include "nw_gdi_utils.h"
+#include "BoxFormat.h"
+
+//  INCLUDES
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+
+/**
+*  The class handles formatting of the boxes , refreshes the boxe on the postformatting,
+*   adds the active boxes  to the tab list
+*
+*  @lib lmgr.lib
+*/
+class CLMgr_BoxFormatHandler: public CActive
+    {
+    public:
+        /**
+        * A two phase constructor that constructs  and initializes CLMgr_BoxFormatHandler class
+        * leaves KErrNoMemory if out of memory
+        * @param aRootBox - flowBox to be formatted
+        * @param aSelectiveFormatting is ETrue if only a flowBox  and its children needs to be formatted
+        * @return CLMgr_BoxFormatHandler* - pointer to the instance of  class CLMgr_BoxFormatHandler
+        */
+        static CLMgr_BoxFormatHandler* NewL(NW_LMgr_Box_t* aRootBox,
+                                            TBool aSelectiveFormatting);
+        /**
+        * the method is called from view to format box tree
+        */
+        void PartialFormatL( CActive::TPriority aPriority );
+
+        /**
+        * the method is called from view after the partialFormat is called 
+        * for the last chunk 
+        */
+        void PageLoadCompleted();
+
+        TBrowserStatusCode Collapse( NW_LMgr_FlowBox_t* aContainingFlow, NW_Bool aCollapseAnonymous );
+        /**
+        * the method clears the formatting context . 
+        * The formatting context includes the formatting stack and the current format box
+        */
+        void ClearFormattingContext();
+
+        /**
+        * initializes the flowbox and its children
+        * @param - flowbox and its children to  be initialized
+        * @return - returns KBrsrSuccess if no error 
+        */
+        TBrowserStatusCode InitializeBox(NW_LMgr_BidiFlowBox_t *flow);
+
+        /**
+        * initializes the flowbox and its children in small screen mode
+        * @param - flowbox and its children to  be initialized
+        * @return - returns KBrsrSuccess if no error 
+        */
+        TBrowserStatusCode InitializeBoxSSL(NW_LMgr_BidiFlowBox_t *flow);
+
+        /**
+        * set the background format flag to true which means that
+        * the next format is a background format
+        */
+        inline void SetBackgroundFormat() { iBackgroundFormat = ETrue; }
+
+        /**
+        * This function returns true if the current format is a background format
+        */
+        inline TBool BackgroundFormat() { return iBackgroundFormat; }
+
+        /**
+        * Destructor- deletes format stack and 
+        * removes the instance from CActiveScheduler
+        */
+        ~CLMgr_BoxFormatHandler();
+
+        /**
+        * 
+        * adds the box to the tab list 
+        * @param box - the box to be added to the tab list 
+        * @return - returns KBrsrOutOfMemory if OOM
+        */
+        TBrowserStatusCode AddTabItem(NW_LMgr_Box_t *box);
+
+        /**
+        * 
+        * returns last formatted box
+        * @return - last formatted box of the box tree
+        */
+        NW_LMgr_Box_t* GetLastFormattedBox()
+            {
+            return iFormatBox;
+            }
+        /**
+        * 
+        * sets the last box to be formatted from the boxtee
+        * @param aLastBoxToFormat - the last box to be formatted from the boxtee
+        */
+        void SetLastBoxToFormatL(NW_LMgr_Box_t *aLastBoxToFormat)
+            {
+            iLastBoxToFormat = aLastBoxToFormat;
+            }
+
+        /**
+        * 
+        * overriddes Active virtual function . The method formats  a flowbox (  including its children) 
+        * or a leaf box 
+        * leaves if OOM
+        */
+        void RunL();
+
+        /**
+        * overriddes Active virtual function 
+        * Clears the formatting context, if the formatting is cancelled
+        */
+        void DoCancel();
+
+        /**
+        * overriddes Active virtual function 
+        * Clears the formatting context, incase if any error 
+        */
+        TInt RunError(TInt aError);
+
+        /**
+        * sets the root box on the format handler (generally used if the
+        * root box changes, but the format handler is the same)
+        */
+        void SetRootBox(NW_LMgr_Box_t* aRootBox);
+		TBool GetFormattingComplete(){return iFormattingCompleted;};
+
+    private:
+        // auxiallary class to contain ,enable copying and deleting of FormatContexts
+
+    class CFormatStackContext: public CBase
+            {
+            public:
+                CFormatStackContext(CLMgr_BoxFormatHandler* aBoxFormatHandler);
+                static void CleanupStackContext(TAny* aFormatStackContext);
+           
+                CFormatStackContext(const CFormatStackContext& aFormatStackContext);
+                ~CFormatStackContext();
+                // formatbox - box to be formatted
+                NW_LMgr_Box_t *iBox;
+                // parent box of iBox
+                NW_LMgr_Box_t *iParentFormatBox;
+                // context to format iBox
+                NW_LMgr_FormatContext_t* iParentContext;
+                // used to calculate rootBox temp height after formatting part of box tree
+                NW_GDI_Dimension2D_t iTempDimensions ;
+                // is ETrue if page load is completed
+                TBool iPageLoadCompleted;
+                // reference to the containing class
+                CLMgr_BoxFormatHandler* iBoxFormatHandler;// has
+            };
+    private:
+        /**
+        * Constructor
+        **/
+        CLMgr_BoxFormatHandler();
+        /**
+        * Initializes CLMgr_BoxFormatHandler , creates stack to handle formatting
+        * and adds the CLMgr_BoxFormatHandler instance to ActiveScheduler
+        * @param aRootBox - flowbox to be formatted
+        * @param aSelectiveFormatting- is ETrue if only aRootBox and its children need
+                  to be formatted
+        **/
+        void ConstructL(NW_LMgr_Box_t* aRootBox,
+                        TBool aSelectiveFormatting);
+
+        /**
+        * Formats iFormatBox (the current box to be formatted ) and all the boxes to
+        * the left subtree iFormatBox
+        * Leaves with KErrNoMemory if OOM
+        **/
+        void HandlePartialFormatL();
+        /**
+        * Finds the format context of the next box of aFormatBox to be formatted
+        * If the aFormatBox is NULL , then a new FormatContext is created on rootbox and
+        * the child of the rootbox becomes the next box to be formattec
+        * Leaves with KErrNoMemory if OOM
+        **/
+        void FindFormatContextL(NW_LMgr_Box_t* aFormatBox);
+        /**
+        * The method is called after the formatting all the chunks and no more 
+        * chunks are available for the page. The method does post formatting of all 
+        * the boxes on the stack and calls the formatting completed on IBoxTreeListener
+        **/
+        void HandlePageLoadCompletedL();
+        /**
+        * The method handles post formatting on a box 
+        * @param CFormatStackContext- Formatting context instance to be post formatted
+        **/
+        void PostFormatL(CFormatStackContext& );
+        /**
+        * The method clears all the items on the format stack and sets the current box to 
+        * formatted to NULL
+        **/
+        void ClearFormatStack();
+        /**
+        * The method returns the BoxFormatter instance based on the box type 
+        * @param aBox the box to find the formatter .
+        * @return TLMgr_BoxFormatter instance that can handle formatting of aBox
+        **/
+        TLMgr_BoxFormatter& GetBoxFormatter(NW_LMgr_Box_t* aBox);
+
+        /**
+          * The method returns the last box of the boxtree
+          * @return the last box of the boxtree
+          **/
+
+        NW_LMgr_Box_t* GetLastBox();
+
+        /**
+          * The method returns dimensions of aBox by the aBox childrens height and width
+          * @return NW_GDI_Dimension2D_t - dimensions of the aBox 
+          **/
+        NW_GDI_Dimension2D_t CalculateBoxTempBounds(NW_LMgr_Box_t* aBox );
+
+        /**
+          * The method normalizes the box on the box tree
+          * @param box - box to be normalized
+          * @return void
+          **/
+        void InitBoxL(NW_LMgr_Box_t *aBox);
+
+        /**
+          * The method refreshes the box after the box is post formatted 
+          * @return void
+          * @param box - box to be refresed
+          **/
+        void RefreshBoxL(NW_LMgr_Box_t *aBox );
+
+        /**
+          * This method adds the children boxes which are instances of active boxes
+          * to the tab list 
+          * @param box - box to be added
+          **/
+        void AddTabItemL( NW_LMgr_Box_t *aBox );
+
+        /**
+          * This method is called from AddTabItemL to add tabitems 
+          * containeed in container box subtree
+          **/
+        void AddSubTreeTabItemsL(NW_LMgr_Box_t *aBox);
+
+        /**
+          * This method is called from PartialFormatL to initialize the rootbox 
+          * It sets the body box and initializes the display bounds
+          **/
+        void InitRootBox();
+
+        /**
+          * This method appends the NW_LMgr_FormatContext_t* object to the array of pointers
+          * iFormatContextRef.
+          **/
+        void AppendFormatContextL(NW_LMgr_FormatContext_t* aLMgr_FormatContext_t);
+
+        /**
+          * This method updates the display bounds on a formatted subtree
+          **/
+        void UpdateDisplayBounds( NW_LMgr_Box_t* aBox );
+
+    private:
+      // friends
+      friend class CFormatStackContext;
+
+    private:
+        // members
+        // formatted flowboxes  are added to the stack(iFormatStack) to be postformatted after
+        // formatting the flowboxes children
+        CStack<CFormatStackContext, ETrue>* iFormatStack;
+        // default box formatter
+        TLMgr_BoxFormatter iTLMgr_BoxFormatter;
+        // marquee box formatter
+        TLMgr_Marquee_Box_Formatter iTLMgr_Marquee_Box_Formatter;
+        // Table cell  or table row box formatter
+        TLMgr_StaticCell_Box_Formatter iTLMgr_StaticCell_Box_Formatter;
+
+        // Last box to be formatted from the boxtree
+        NW_LMgr_Box_t *iLastBoxToFormat ;
+        // RootBox reference
+        NW_LMgr_Box_t *iRootBox;
+
+        // The current flowbox used to format iFormatBox
+        NW_LMgr_Box_t* iCurrentFlowBox ;
+        // The current format context used to format iFormatBox
+        NW_LMgr_FormatContext_t* iCurrentFormatContext;
+        // The box to be formatted
+        NW_LMgr_Box_t* iFormatBox;
+        // is ETrue if the box that is formatted is split
+        TBool iContainerSplit;
+        // is ETrue if part of the tree is to be formatted
+        TBool iSelectiveFormatting;
+        // is ETrue if PartialFormatL method is called for the last chunk
+        TBool iPageLoadCompleted;
+    	TBool iFormattingCompleted;
+        CArrayPtrFlat<NW_LMgr_FormatContext_t>* iFormatContextRef;
+        // the following 2 members are used to normalize the boxtree
+        TBool iFirstBr;
+        TBool iSecondBr;
+        TBool iBackgroundFormat;
+        CActive::TPriority iFormattingPriority;
+    };
+
+#endif