--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/lmgr/include/LMgrObjectBox.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,338 @@
+/*
+* 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: Provides a means for PluginInst's to communicate with thier owner
+*
+*/
+
+
+
+#ifndef CPLUGINBOX_H
+#define CPLUGINBOX_H
+
+// INCLUDES
+#include <e32def.h>
+#include <e32base.h>
+
+#include "nw_gdi_types.h"
+#include "nw_lmgr_propertylist.h"
+#include "GDIDeviceContext.h"
+
+// FORWARD DECLARATIONS
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct NW_LMgr_RootBox_s NW_LMgr_RootBox_t;
+typedef struct NW_LMgr_Box_s NW_LMgr_Box_t;
+typedef struct NW_LMgr_FormatContext_s NW_LMgr_FormatContext_t;
+typedef struct NW_LMgr_EventHandler_s NW_LMgr_EventHandler_t;
+typedef struct NW_Text_Abstract_s NW_Text_t;
+typedef struct NW_Image_AbstractImage_s NW_Image_AbstractImage_t;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+class CCoeControl;
+class MLMgrObjectBoxListener;
+class MLMgrBoxDestructionListener;
+
+// CLASS DECLARATION
+
+// TODO: This class should be derived from CMediaBox once the browser is
+// converted to c++.
+
+class CLMgrObjectBox : public CBase
+ {
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ *
+ * @param aBox the NW_LMgr_NpiBox it is managing.
+ */
+ static CLMgrObjectBox* NewL(NW_LMgr_Box_t* aBox);
+
+ /**
+ * Creates a NPI box-tree, an active container box with a single NPI box as a child.
+ *
+ * @param aEventHandler the active container box's event handler.
+ * @param aPluginContainerBox upon success, an active container box.
+ * @param aPluginBox upon success, the new NPI Box
+ * @return TBrowserStatusCode
+ */
+ static TBrowserStatusCode NewBox(NW_LMgr_EventHandler_t* aEventHandler,
+ NW_LMgr_Box_t** aPluginContainerBox, NW_LMgr_Box_t** aPluginBox);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CLMgrObjectBox();
+
+
+ public: // New Methods
+ /**
+ * Allows the box to be placed on the on a new line and grows
+ * the box to the width of "space" if the box doesn't have
+ * a width property.
+ *
+ * @param aSpace the amount of space available on the line.
+ * @param aSplitBox not used.
+ * @param aFlags LMgr split flags.
+ * @return KBrsrLmgrNoSplit, KBrsrSuccess
+ */
+ virtual TBrowserStatusCode Split(NW_GDI_Metric_t aSpace,
+ NW_LMgr_Box_t** aSplitBox, NW_Uint8 aFlags);
+
+ /**
+ * Calculates the minimum size needed for the box.
+ *
+ * @param aSize the size of the box.
+ * @return void
+ */
+ virtual void GetMinimumContentSize(NW_GDI_Dimension2D_t& aSize);
+
+ /**
+ * Draws the border, background and place holder (while the place
+ * holder is shown).
+ *
+ * @param aDeviceContext the device context used for drawing.
+ * @param aHasFocus whether the box has focus.
+ * @return TBrowserStatusCode
+ */
+ virtual TBrowserStatusCode Draw(const CGDIDeviceContext& aDeviceContext,
+ NW_Bool aHasFocus);
+
+ /**
+ * If necessary it positions the CPluginInst to match the box's
+ * bounds and renders the box.
+ *
+ * @param aDeviceContext the device context used for drawing.
+ * @param aClipRect the current clip rect.
+ * @param aCurrentBox the current box.
+ * @param aCurrentBox flags used during rendering.
+ * @param aHasFocus whether the box has focus.
+ * @param aSkipChildren whether the children should be skipped.
+ * @param aRootBox the root box.
+ * @return TBrowserStatusCode
+ */
+ virtual TBrowserStatusCode Render(const CGDIDeviceContext& aDeviceContext,
+ const NW_LMgr_RootBox_t& aRootBox, const NW_GDI_Rectangle_t& aClipRect,
+ const NW_LMgr_Box_t* aCurrentBox, NW_Uint8 aFlags, NW_Bool& aHasFocus,
+ NW_Bool& aSkipChildren);
+
+ /**
+ * Set the box's listener
+ *
+ * @param aListener the listener
+ * @return void
+ */
+ void SetBoxListener(MLMgrObjectBoxListener* aListener);
+
+ /**
+ * Adds a box destruction listener.
+ *
+ * @param aListener the listener
+ * @return void
+ */
+ void AddBoxDestructionListenerL(MLMgrBoxDestructionListener* aListener);
+
+ /**
+ * Removes a box destruction listener.
+ *
+ * @param aListener the listener
+ * @return void
+ */
+ void RemoveBoxDestructionListener(MLMgrBoxDestructionListener* aListener);
+
+ /**
+ * Sets the place holder text.
+ *
+ * @param aText
+ * @return void
+ */
+ void SetPlaceHolderTextL(const TDesC& aNewText);
+
+ /**
+ * Set the place-holder text to the given resource id.
+ *
+ * @param aResourceId the string's resource id.
+ *
+ * @return void
+ */
+ void SetPlaceHolderTextL(TInt aResourceId);
+
+ /**
+ * Removes the place holder's text and image.
+ *
+ * @return void
+ */
+ void RemovePlaceHolder(void);
+
+ /**
+ * Returns ETrue if the place holder is being shown.
+ *
+ * @return ETure or EFalse
+ */
+ TBool IsShowingPlaceHolder(void);
+
+ /**
+ * Returns if the plugin is active or not.
+ *
+ * @param .
+ * @return if the plugin is active or not.
+ */
+ TBool IsActive() const;
+
+ /**
+ * Each CLMgrObjectBox is contained in a container-box. In order to identify the
+ * plugin box associated with a given elementNode the NW_CSS_Prop_elementId
+ * CSS property is applied, where the property value equals the element-node.
+ * FindBoxTree returns the box that contains a NW_CSS_Prop_elementId with a
+ * value matching aBoxKey.
+ *
+ * @param aBoxTree the box-tree of the enclosing content handler.
+ * @param aBoxKey a pointer to the associated element-node.
+ * @return the CLMgrObjectBox's container-box.
+ */
+ static NW_LMgr_Box_t* FindBoxTree(const NW_LMgr_Box_t& aBoxTree,
+ void* aBoxKey);
+
+ /**
+ * Each CLMgrObjectBox is contained in a container-box. FindObjectBox finds
+ * and returns the first NW_LMgr_NpiBox found in aBoxTree.
+ *
+ * @param aBoxTree the CLMgrObjectBox's container-box.
+ * @return the NW_LMgr_NpiBox.
+ */
+ static NW_LMgr_Box_t* FindObjectBox(const NW_LMgr_Box_t& aBoxTree);
+
+ /**
+ * Returns the given property as a descriptor.
+ *
+ * @param aBoxTree the CLMgrObjectBox's container-box.
+ * @return the NW_LMgr_NpiBox.
+ */
+ static TDesC* GetTextProperty(const NW_LMgr_Box_t& aBox,
+ NW_LMgr_PropertyName_t aProperty);
+
+ /**
+ * Returns the view infrastructure's CCoeControl associated the given root-box.
+ *
+ * @param aRootBox a root-box.
+ * @return the CCoeControl associated the given root-box.
+ */
+ static CCoeControl* GetParentWindow(const NW_LMgr_RootBox_t& aRootBox);
+
+ /**
+ * Returns the OOC ObjectBox.
+ *
+ * @param .
+ * @return the OOC ObjectBox.
+ */
+ NW_LMgr_Box_t* Box(){return iBox;}
+
+
+ private: // Private Methods
+ /**
+ * C++ default constructor.
+ */
+ CLMgrObjectBox(NW_LMgr_Box_t* aBox);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(void);
+
+ /**
+ * Returns the view infrastructure's CCoeControl associated with this instance.
+ *
+ * @return the CCoeControl associated with this instance.
+ */
+ CCoeControl* GetParentWindow(void);
+
+ /**
+ * Shows, sizes, and locates the CPluginInst or place holder to correspond with
+ * the box.
+ *
+ * @param aLocation where the PluginInst should be placed
+ * @param aSize the size the PluginInst or place holder should be.
+ * @return void
+ */
+ void AttachPluginInst(const NW_GDI_Point2D_s& aLocation,
+ const NW_GDI_Dimension2D_t& aSize);
+
+ /**
+ * Detaches the CPluginInst from its parent.
+ *
+ * @param void
+ * @return void
+ */
+ void DetachPluginInst(void);
+
+ /**
+ * Adjusts the location and size of the PluginInst or place holder so it matches iBox's
+ * bounds.
+ *
+ * @param aDeviceContext the device context used for drawing.
+ * @return void
+ */
+ void SyncPluginInstBounds(const CGDIDeviceContext& aDeviceContext);
+
+ /**
+ * Implements the the NPI handling rules for vertical layout
+ * 1. Scale the box maintaining the aspect ratio if width is greater than display width
+ * 2. Scale the box maintaining the aspect ratio if height is greater than display height
+ * 3. If box is too small it doesn't participate in the layout.
+ *
+ * @param aOrigSize the original size of the box
+ * @param aNewSize the new size of the box
+ * @return void
+ */
+ void HandleVerticalLayout(const NW_GDI_Dimension2D_t& aOrigSize,
+ NW_GDI_Dimension2D_t& aNewSize);
+
+ /**
+ * Creates a copy of aText such that it width is <= aAvailableSpace -- truncating as necessary.
+ *
+ * @param aText the string to be copied.
+ * @param aDeviceContext the device context used for drawing.
+ * @param aAvailableSpace the amount of space available -- the size aText must fit in.
+ * @param aAddDots if true "..." will be appended if aText needs to be clipped.
+ * @return a copy of aText whos width is <= aAvailableSpace.
+ */
+ TDesC* ClipText(const TDesC& aText, const CGDIDeviceContext& aDeviceContext,
+ NW_GDI_Metric_t aAvailableSpace, TBool aAddDots);
+
+
+ private: // Data
+ NW_LMgr_Box_t* iBox;
+ CCoeControl* iPluginInst;
+ TBool iPluginAttached;
+ TBool iInHyperLink;
+
+ TBool iShowingPlaceHolder;
+ const NW_Image_AbstractImage_t* iPlaceHolderImage;
+ TDesC* iOrigPlaceHolderText;
+ TDesC* iPlaceHolderText;
+ TBool iCalculatePlaceHolderClip;
+
+ TBool iForceSyncPluginInst;
+ NW_GDI_Point2D_t iLocation;
+ NW_GDI_Dimension2D_t iSize;
+
+ MLMgrObjectBoxListener* iBoxListener;
+ RPointerArray<MLMgrBoxDestructionListener> iDestructionListeners;
+ };
+
+#endif // CPLUGINBOX_H