diff -r 000000000000 -r dd21522fd290 webengine/wmlengine/src/MVC/include/MVCView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/MVC/include/MVCView.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,514 @@ +/* +* Copyright (c) 2002-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: The CView class is responsible for displaying the box tree, +* handling user input events such as scrolling and navigating links. +* +*/ + + +#ifndef __MVCVIEW_H +#define __MVCVIEW_H + +// INCLUDES +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include "BrsrStatusCodes.h" +#include "ImageUtils.h" +#include "LMgrBoxTreeListener.h" +#include "BrsrTypes.h" +#include "nw_gdi_types.h" +#include "nw_evt_scrollevent.h" +#include "CBrowserSettings.h" + +#include "BrCtl.h" +#include "MemoryManager.h" +#include "pagescaler.h" + + +#include "wmlcontrol.h" +template class CArrayPtrFlat; + +// CONSTANTS +const TInt KPanicKmViewPanicBase = -9000; +const TInt KPanicKmViewTlsNotInitialized = KPanicKmViewPanicBase - 1; +const TInt KPanicKmViewSingletonAlreadyCreated = KPanicKmViewPanicBase - 2; +const TInt KPanicKmViewTlsViewPointerIsNull = KPanicKmViewPanicBase - 3; + + +// MACROS + +// DATA TYPES + +typedef enum +{ + EKmEvAddToPhoneBook, + EKmEvMakeCall, + EKmEvRemoveFileName, + EKmEvOpenToExternalApp, + EKmEvDownloadObject +} TKimonoEventType; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CEikScrollBarFrame; +class CAknNavigationDecorator; +class CPtrC8Array; +class CViewAsyncInit; +class MViewListener; +class CShell; +//class CBrCtl; +class TBrCtlImageCarrier; +class MViewFocusObserver; + +// CLASS DECLARATIONS +class MBrCtlStateChangeObserver; + + +/** +* CView +* The CView class is responsible for displaying the box tree, and +* handling user input events such as scrolling and navigating links. +* +* @lib browserengine.dll +* @since 2.x +*/ + + +NONSHARABLE_CLASS(CView) : public CEikBorderedControl, public MCenRepNotifyHandlerCallback, + public MAknPictographAnimatorCallBack, public MBoxTreeListener, private MPageScalerCallback +{ +public: + static CView* NewL(CCoeControl* aParent, CBrCtl* aBrCtl, TRect& aRect, CWmlControl* aWmlControl ); + + ~CView(); + + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + + TBrCtlDefs::TBrCtlElementType GetFocusedElementType(); + + NW_Bool InputElementEditComplete(TBool aInputConfirmed); + + void HandleActivationEvent(); + + void GenerateAndProcessEvent(const TKimonoEventType& aEvent); + + /** + * SetBrowserSettingL + * Set the setting's value. + * @since 2.x + * @param TUint setting - the number of the setting you wish to set. + * This corresponds to a value in the TBrowserSettings enum + * @param TUint value - the value you wish to set for the setting + * If the value is true/false use 1/0 otherwise the value must correspond + * to a value in either one of the following enumerated types: + * TBrowserFontSizeLevel or TBrowserFullScreenValue + * @return void + */ + void SetBrowserSettingL(TUint aSetting, TUint aValue); + + /** + * GetBrowserSettingL + * Get the setting's value. + * @since 2.x + * @param TUint setting - the setting whose value you wish to retrieve + * @return TUint - value of the setting (as an integer). For true/false + * 1/0 will be returned. For other settings, the return value will correspond + * with one of the following enumerated types: TBrowserFontSizeLevel or + * TBrowserFullScreenValue + */ + TUint GetBrowserSettingL(TUint aSetting) const; + + CArrayFixFlat* GetPageImagesL(); + + void SwitchVerticalLayout (); + + + void DrawPictographsInText(CBitmapContext& aGc, const CFont& aFont, const TDesC& aText, const TPoint& aPosition); + + /** + * Check to see if we are in image map view + * + * @param None + * @return TBool ETrue if we are in image map view, EFalse otherwise + */ + inline TBool IsImageMapView() { return iIsImageMapView; }; + + /** + * This method is called if we are in image map view to create an image list + * that just contains the one image shown in the image map view. + * + * @param None + * @return TBool ETrue if we are in image map view, EFalse otherwise + */ + void GetViewImageList(void* aDynamicVector); + + // Return the number of active elements in the page + TUint GetActiveElements(); + + /** + * + * @param box + * @return NW_Bool NW_TRUE, if vox is just placeholder (0,0;0x0) + * NW_FALSE otherwise; + */ + NW_Bool + IsZeroBox (const NW_LMgr_Box_t* box) const; + // Redraw the positioned box on top every time that something was redrawn + TBrowserStatusCode DrawPositionedBoxes(); + + // Any slow browser initialization can happen here + void AsyncInit(); + + TBrowserStatusCode Draw (const NW_Bool); + +public: // from MBrowserSettingsObserver + void BrowserSettingChanged( enum TBrowserSetting aBrowserSetting ); + +protected: // From CCoeControl + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + void FocusChanged(TDrawNow aDrawNow); + + void SizeChanged(); + + void Draw(const TRect& aRect) const; + + TInt CountComponentControls() const; + + CCoeControl* ComponentControl(TInt aIndex) const; + +protected: + void HandleResourceChange(TInt aType); + +private: // from MSharedDataNotifyHandler + + void HandleNotifyString(TUint32 aKeyId, const TDesC16& aValue); + +private: // from MAknPictographDrawerCallBack + void DrawPictographArea(); + +protected: + TKeyResponse DoHandleControlKeysL(const TKeyEvent& aKeyEvent); + +private: // from MPageScalerCallback + + void DrawDocumentPart( CFbsBitGc& aGc, CFbsBitmap* /*aBitmap*/, const TRect& aDocumentAreaToDraw ); + + TRect DocumentViewport() ; + + void ScaledPageChanged( const TRect& aRect, TBool aFullScreen, TBool aScroll ); + + TSize DocumentSize(); + + TBool TouchScrolling() { return EFalse; } + + CCoeControl& PageControlView() { return *(iBrCtl->CCoeControlParent());} + + +private: + CView(CBrCtl* aBrCtl); + + void ConstructL(CCoeControl* aParent, TRect& aRect, CWmlControl* aWmlControl ); + + TBrowserStatusCode Cancel (); + + void CreateOffscreenBitmapL( const TRect& aRect ); + + // Any slow browser initialization can happen here + void AsyncInitL(); + + // Delete entries in a given directory + void DeleteDirectoryEntriesL(RFs& aRfs, TPtrC16& aFilePath); + + NW_Bool DispatchEvent (const NW_Evt_Event_t* event); + + TBrowserStatusCode FormatPartial (); + + NW_LMgr_Box_t* GetNextSiblingBox (const NW_LMgr_Box_t* box); + + TBrowserStatusCode InitializeTree (NW_LMgr_RootBox_t *rootBox, TBool isFormatingBoxTree); + + // + void InitializePageScalerL(); + +public: // but not exported. For Kimono internal use ("C" side) + + void SetFormattingPriority( CActive::TPriority aPriority ); + + TInt AppendFocusObserver(MViewFocusObserver* aViewFocusObserver); + + TInt AddStateChangeObserver(MBrCtlStateChangeObserver* aBrCtlStateChangeObserver); + + void BoxTreeDestroyed (); + + TBool ValidateAddedIndex(NW_LMgr_Box_t* aBox, NW_LMgr_Box_t* aMasterBox); + + TBrowserStatusCode BoxTreeListenerAppendTabItem (NW_LMgr_Box_t* box); + + TBrowserStatusCode BoxTreeListenerRelayout (NW_Bool createTabList); + + TBrowserStatusCode Collapse (NW_LMgr_FlowBox_t* containingFlow, NW_Bool collapseAnonymous); + + TBrowserStatusCode CreateTabIndexList (); + + void DoScrollL(const TInt16 aScrollDirection, const TUint32 aScrollDelta); + + void EnableSuppressDupReformats (NW_Int16 state); + + void EpocDrawNow (NW_Bool drawNow); + + NW_Bool EpocProcessEvent (const NW_Evt_Event_t* event); + + void ExternalLayoutSwitch (); + + TBrowserStatusCode ForceCurrentBox (NW_LMgr_Box_t* newbox, NW_Bool isNewPage, NW_Bool isRefreshNeeded); + + TBrowserStatusCode FormatBoxTree (NW_Bool createTabList); + + void FormattingComplete (); + + NW_ADT_Vector_Metric_t GetActiveBoxId (); + + NW_LMgr_Box_t* GetInFocusBox () const; + + NW_LMgr_Box_t* GetLastVisibleBox () const; + + NW_LMgr_Box_t* GetNextEventListener (NW_LMgr_BoxVisitor_t* boxVisitor); + + const NW_GDI_Point2D_t* GetOrigin (); + + void* GetScroll () const; + + TBrowserStatusCode GetScrollRange (NW_GDI_Point2D_t* scrollRange); + + NW_LMgr_Box_t* GetVisibleBox () const; + + NW_LMgr_Box_t* GetVisibleBoxReverse () const; + + NW_Bool GetXScrollAmt (const NW_LMgr_Box_t* box, NW_Int32* scrollDelta, NW_Evt_ScrollEvent_Direction_t* scrollDir, NW_Bool scrollMaxAmt) const; + + NW_Bool GetYScrollAmt (const NW_LMgr_Box_t* box, NW_Int32* scrollDelta, NW_Evt_ScrollEvent_Direction_t* scrollDir, NW_Bool scrollMaxAmt) const; + + TBrowserStatusCode GotoActiveBox (NW_ADT_Vector_Metric_t activeBoxId); + + TBrowserStatusCode GotoBox (NW_LMgr_Box_t* box); + + void HandleError (TBrowserStatusCode status); + + NW_Bool HandleGNavigation (NW_Uint32 tabIndex); + + static TBrowserStatusCode InputInvalid(void* aCEpoc32View, TInt aMin); + + static TBrowserStatusCode InputInvalidL(void* aCEpoc32View, TInt aMin); + + NW_Bool IsBoxVisible (const NW_LMgr_Box_t* box, NW_GDI_Rectangle_t *bounds) const; + + TBrowserStatusCode JumpToLink (const NW_LMgr_Box_t* box, NW_Bool scrollMaxAmt); + + NW_Bool ProcessAccessKey (const NW_Evt_KeyEvent_t* event); + + NW_Bool ProcessEvent (const NW_Evt_Event_t* event); + + TBrowserStatusCode RedrawDisplay (NW_Bool drawNow); + + TBrowserStatusCode ReformatBox (NW_LMgr_Box_t* box); + + TBrowserStatusCode Refresh (NW_LMgr_Box_t* box); + + TBrowserStatusCode Relayout (NW_Bool createTabList); + + void RemoveFocusObserver(MViewFocusObserver* aViewFocusObserver); + + void RemoveStateChangeObserver(MBrCtlStateChangeObserver* aBrCtlStateChangeObserver); + + NW_Bool ScrollAfterCurrentBox (const NW_LMgr_Box_t* box, NW_Bool scrollMaxAmt); + + void SetAppServices(void *appServices); // appservices are of type NW_HED_AppServices + + TInt SetBoxTree(const NW_LMgr_Box_t* boxTree); // return value is TBrowserStatusCode + + TBrowserStatusCode SetCurrentMasterBox (); + + TBrowserStatusCode SetDeviceContext (CGDIDeviceContext* deviceContext); + + TBrowserStatusCode SetDisplayExtents (NW_GDI_Rectangle_t* displayExtents); + + void SetShell(CShell* shell); + + TBrowserStatusCode SetListener (MViewListener* viewListener); + + TBrowserStatusCode SetOrigin (NW_GDI_Point2D_t* origin); + + void StartCSSApply (); + + void DisableAnimation(); + + void EnableAnimation(); + + TBrowserStatusCode SwitchFromImageMapView (); + + TBrowserStatusCode SwitchToImageMapView (); + + TBrowserStatusCode SwitchVerticalLayout (NW_Bool aFormatBoxTree, NW_Bool aSwitchBox); + + void UpdateCBAs () const; + + void UpdateScrollBarsL(CEikScrollBar::TOrientation aOrientation,const TInt aThumbPos ,const TInt aScrollSpan); + + TBrowserStatusCode UpdateHScrollBar () const; + + TBrowserStatusCode UpdateVScrollBar () const; + + inline NW_LMgr_Box_t* GetCurrentBox () { return iCurrentBox; }; + + inline CGDIDeviceContext* GetDeviceContext () { return iDeviceContext; }; + + inline void* GetParentWindow () { return this; }; + + inline NW_GDI_Dimension2D_t GetScrollAmt () {return iScrollAmt;}; + + inline NW_ADT_DynamicVector_t* GetTabList () {return iTabList;}; + + inline NW_LMgr_RootBox_t* GetRootBox () { return iRootBox; }; + + inline NW_GDI_Dimension2D_t GetVisibleAmt () {return iVisibleAmt;} ; + + inline NW_Bool IsForcedReformatNeeded () { return iForceReformatNeeded; }; + + inline void ForcedReformatNeeded () { iForceReformatNeeded = NW_TRUE; }; + + inline void SetCurrentBox (NW_LMgr_Box_t* aCurrentBox) { iCurrentBox = aCurrentBox; }; + + inline void SetInitialActiveBoxId (NW_ADT_Vector_Metric_t aInitialActiveBoxId) {iInitialActiveBoxId = aInitialActiveBoxId; }; + + inline void SetInitialDocPosition (NW_GDI_Metric_t aX, NW_GDI_Metric_t aY) { iInitialDocPosition.x = aX; iInitialDocPosition.y = aY; }; + + inline CPageScaler* PageScaler() { return iPageScaler; } + + TBrowserStatusCode SetAnchorName (NW_Text_t *anchorName); + + void ContentSize(TSize& aContentSize) ; + NW_Bool FormatPositionedBoxes (); + void ScrollTo(TPoint aPoint); + +public: + CBrCtl* BrCtl() {return iBrCtl;} + void DrawHistory( CFbsBitGc& aGc, const TRect& aDocumentAreaToDraw ) const; + +private: + TBrowserStatusCode AppendTabItem (NW_LMgr_Box_t* box); + + void DeleteOptionItems (); + + NW_GDI_Rectangle_t GetBoxDisplayBounds (NW_LMgr_Box_t* aBox); + + TBrowserStatusCode GetBoxTabIndex (NW_LMgr_Box_t* box, NW_ADT_Vector_Metric_t* index); + + TBrowserStatusCode HandleFormattingComplete (); + + NW_Bool ProcessFontSizeChangeEvent (); + + NW_Bool ProcessScrollEvent (const NW_Evt_ScrollEvent_t* scrollEvent); + + NW_Bool ProcessTabEvent (const NW_Evt_TabEvent_t* tabEvent); + + void SetBoxFormatBounds (NW_LMgr_Box_t* aBox, NW_GDI_Rectangle_t aBoxBounds); + + TBrowserStatusCode SetupTableFormat (NW_Bool /*relayoutEvent*/); + + TBrowserStatusCode UpdateScrollBars () const; + + void GetParentBox(NW_LMgr_Box_t* parentBox, NW_LMgr_Box_t** pReturnedParentBox); +private: + CBitmapContext* iBitmapContext; + CBitmapDevice* iBitmapDevice; + TInt iLastRepeats; // To signify long keypresses + RPointerArray iListeners; + CFbsBitmap* iOffscreenBitmap; + CShell* iShell; + CBrCtl* iBrCtl; + CAknPictographInterface* iPictographInterface; + + CPageScaler* iPageScaler; + + + + CRepository* iRepository; + CCenRepNotifyHandler* iNotifyHandler; + + RPointerArray iViewFocusObserver; + RPointerArray iStateChangeObserver; + CViewAsyncInit* iViewAsyncInit; + TInt iVScrollPosition; + + /* The layout manager context */ + CArrayPtrFlat* iRootBoxArray; + + void* iBoxFormatHandler; + NW_Bool iCreateTabList; + NW_LMgr_Box_t* iCurrentBox; + CGDIDeviceContext* iDeviceContext; + NW_Bool iExternalLayoutSwitch; + NW_Bool iIsImageMapView; + NW_ADT_DynamicVector_t* iOptionItemList; /* for clean up purpose */ + NW_ADT_DynamicVector_t* iTabList; + NW_LMgr_RootBox_t* iRootBox; + + /* Scroll data */ + void* iScroll; + NW_GDI_Dimension2D_t iMaxScrollAmt; + NW_GDI_Dimension2D_t iScrollAmt; + NW_GDI_Dimension2D_t iVisibleAmt; + TPoint iLastPosition; + + NW_Bool iDrawNow; + + TBool iDocumentFinished; + + + /*the initial box id and initial docposition , is used after + the formatting is complete */ + NW_ADT_Vector_Metric_t iInitialActiveBoxId; + NW_GDI_Point2D_t iInitialDocPosition; + + /* + ** Used to suppress duplicate reformats when a single image is repeated + ** several times within the same page. + */ + NW_Int16 iSuppressDupReformats; + NW_LMgr_Box_t* iPendingReformatBox; + NW_Bool iForceReformatNeeded; + NW_Text_t *iAnchorName; + CActive::TPriority iFormatPriority; + CWmlControl* iWmlControl; + TBool iShouldActivate; +}; + +#endif // EPOC32VIEW_H + +// End of File + +