diff -r 79859ed3eea9 -r 919f36ff910f webengine/wmlengine/src/lmgr/include/BoxFormatHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/lmgr/include/BoxFormatHandler.h Wed Sep 01 12:28:30 2010 +0100 @@ -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* 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* iFormatContextRef; + // the following 2 members are used to normalize the boxtree + TBool iFirstBr; + TBool iSecondBr; + TBool iBackgroundFormat; + CActive::TPriority iFormattingPriority; + }; + +#endif