webengine/osswebengine/WebKit/s60/webview/WebView.h
changeset 0 dd21522fd290
child 8 7c90e6132015
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,540 @@
+/*
+* Copyright (c) 2006 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:   Implemetation of CWebKitView
+*
+*/
+
+
+#ifndef WEBKITVIEW_H
+#define WEBKITVIEW_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <eikscrlb.h>
+#include "platform/Shared.h"
+#include "BrCtlDefs.h"
+#include "PageScaler.h"
+#include "Timer.h"
+#include "MemoryManager.h"
+
+namespace WebCore
+{
+    class String;
+    class Page;
+    class DOMDocument;
+    class FormState;
+    class Element;
+}
+
+class CPluginHandler;
+class WebPreferences;
+class WebBackForwardList;
+class WebScriptObject;
+class WebHistoryItem;
+class WebFrame;
+class CBrCtl;
+class WebCoreGraphicsContext;
+class CWebFepTextEditor;
+class CPeriodic;
+class CPageView;
+class WebFormFill;
+class WebFormFillPopup;
+class CToolBar;
+class WebToolBarInterface;
+class WebPageScrollHandler;
+class WebPopupDrawer;
+class TBrCtlImageCarrier;
+class PluginPlayer;
+class PluginWin;
+class CWidgetExtension;
+class MWidgetCallback;
+class WebTabbedNavigation;
+class WebPageZoomHandler;
+class WebPointerEventHandler;
+class WebPageFullScreenHandler;
+
+class WebView : public CEikBorderedControl, public WebCore::Shared<WebView>, private MPageScalerCallback, public MOOMStopper
+    {
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static WebView* NewL( CCoeControl& aParent, CBrCtl* brctl );
+
+        /**
+        * Destructor.
+        */
+        virtual ~WebView();
+
+        void MakeVisible(TBool visible);
+        void MakeViewVisible(TBool visible);
+
+        WebFrame* mainFrame();
+
+        WebFrame* selectedFrame();
+
+        void setMainFrameUrlL(TDesC& url);
+
+        TDesC& mainFrameUrl();
+
+        WebCore::DOMDocument* mainFrameDocument();
+
+        TDesC& mainFrameTitle();
+
+        WebCore::Page* page();
+
+        bool isMIMETypeRegisteredAsPlugin(const WebCore::String& MIMEType);
+
+        CPluginHandler* pluginForExtension(const WebCore::String& pluginExtension);
+
+        void loadBackForwardListFromOtherView(WebView* otherView);
+
+        void updateWebCoreSettingsFromPreferences(WebPreferences* preferences);
+
+        TBool defersCallbacks();
+
+        void setDefersCallbacks(TBool defer);
+
+        WebBackForwardList* backForwardList();
+
+        void setMaintainsBackForwardList(TBool flag);
+
+        TBool goBack();
+
+        TBool goForward();
+
+        TBool goToBackForwardItem(WebHistoryItem* item);
+
+        void setTextSizeMultiplier(TInt multiplier);
+
+        TInt textSizeMultiplier();
+
+        WebScriptObject* windowScriptObject();
+
+        void setGroupName(TDesC& groupName);
+
+        TDesC& groupName();
+
+        TInt estimatedProgress();
+
+        TBool shouldClose();
+
+        TBool isLoading();
+        TBool showCursor() const {return m_showCursor;}
+        void setShowCursor(TBool showCursor);
+
+        // repainting
+        void syncRepaint(const TRect& rect);
+        void scheduleRepaint(const TRect& rect);
+        void syncRepaint();
+        void doRepaint();
+        void pageLoadFinished();
+        void updatePageScaler();
+        void doLayout();
+
+
+        TSize maxBidiSize() const;
+        void clearOffScreenBitmap();
+        void scrollBuffer(TPoint aTo, TPoint aFrom, TBool aMayUseCopyScroll);
+        TRect offscreenRect() const {return m_offscreenrect;}
+        CPageScaler* pageScaler() const{ return m_pageScaler; }
+        //void updateScrollBarsL(CEikScrollBar::TOrientation aOrientation, const TInt aThumbPos, const int aScrollSpan);
+        int scalingFactor() const;
+        void openUrl(const TDesC& url);
+        CBrCtl* brCtl() const { return m_brctl; }
+        CWebFepTextEditor* fepTextEditor() { return m_webfeptexteditor; }
+        WebFormFillPopup* formFillPopup() { return m_webFormFillPopup; }
+        void setFormFillPopup(WebFormFillPopup* popup) { m_webFormFillPopup = popup; }
+        WebFormFill* formFill() { return m_webFormFill; }
+        void setEditable(TBool aEditable);
+        bool isEditable() const { return m_isEditable; }
+        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aEventCode );
+        void setFocusedElementType(TBrCtlDefs::TBrCtlElementType focusedElementType_) { m_focusedElementType = focusedElementType_; }
+        TBrCtlDefs::TBrCtlElementType focusedElementType() const { return m_focusedElementType; }
+        WebPageScrollHandler* pageScrollHandler() { return m_pageScrollHandler;}
+        WebPageFullScreenHandler* pageFullScreenHandler() { return m_pageFullScreenHandler;}
+        WebPointerEventHandler* pointerEventHandler() { return m_webpointerEventHandler; }
+        void updateScrollbars(int documentHeight, int displayPosY,
+            int documentWidth, int displayPosX);
+        void openPageViewL();
+        void closePageView();
+        void cancelPageView();
+        CPageView* pageView() const { return m_pageView; }
+        bool inPageViewMode() const { return m_pageView != NULL; }
+        int searchFor(const TPtrC& keyword);
+        int searchAgain(bool forward);
+        void exitFindState();
+        bool inFindState() const { return m_inFindState; }
+        bool pageScalerEnabled() const { return m_pageScalerEnabled; }
+        bool isSmallPage();
+        void willSubmitForm(WebCore::FormState* formState);
+
+        PluginPlayer* pluginPlayer() { return m_pluginplayer; }
+        void closePluginPlayer();
+        void openPluginPlayer(PluginWin* plugin);
+
+        void setAccessPointId(TUint32 apid) {m_apid = apid;}
+        TUint32 accessPointId() { return m_apid; }
+
+        CWidgetExtension* createWidgetExtension(MWidgetCallback &aWidgetCallback);
+        CWidgetExtension* widgetExtension() { return m_widgetextension; }
+
+        void activateVirtualKeyboard();
+        void setFocusNone();
+
+        /**
+        * Display a popup with the url of an anchor
+        */
+        void handleShowAnchorHrefL();
+
+        /**
+        * Return the image that is under the cursor
+        */
+        TBrCtlImageCarrier* focusedImageLC();
+
+        /**
+        * Load the image that is under the cursor
+        */
+        void loadFocusedImageL();
+
+        /**
+        * Get the popupDrawer
+        */
+        WebPopupDrawer* popupDrawer() { return m_popupDrawer; }
+
+        /**
+        * Delete the popupDrawer
+        */
+        void removePopup();
+
+        RArray<TUint>* zoomLevels();
+
+        /**
+        *
+        * Zooming new interface
+        * @since 5.0
+        * @param
+        * @return
+        */
+        void setZoomLevel( int );
+
+        int zoomLevel() const               { return m_currentZoomLevel; }
+        void restoreZoomLevel(int zoomLevel);
+
+        void setBitmapZoomLevel(int zoomLevel);
+
+        void showZoomSliderL();
+
+        void hideZoomSliderL();
+
+        void notifyZoomSliderModeChangeL(bool);
+
+        int maxZoomLevel();
+
+        int minZoomLevel();
+
+        void updateZoomLevel(TBrCtlDefs::TBrCtlSettings setting, unsigned int value);
+
+        void checkForZoomChange();
+
+        void updateMinZoomLevel( TSize size );
+
+        void resetZoomLevel();
+
+        bool historyLoad(){ return m_historyLoad;}
+
+        void setHistoryLoad(bool value);
+
+        bool redirectWithLockedHistory(){ return m_redirectWithLockedHistory;}
+
+        void setRedirectWithLockedHistory(bool value);
+
+
+        /**
+         *
+         * Fullscreen Escape Interface
+         *
+         */
+        void EnterFullscreenBrowsingL(void);
+        void LeaveFullscreenBrowsingL(void);
+        void notifyFullscreenModeChangeL(bool);
+
+
+        void setZoomLevelAdaptively();
+        void setZoomCursorPosition(TBool isZoomIn);
+        void resetLastZoomLevelIfNeeded();
+
+        /**
+        * Toolbar
+        **/
+
+        void launchToolBarL();
+
+        void closeToolBarL();
+
+        /**
+        * HandlePointerBufferReadyL
+        * From CCoeControl
+        *
+        */
+        void HandlePointerBufferReadyL();
+
+        /**
+        * HandlePointerEventL
+        * From CCoeControl
+        *
+        */
+        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+        /**
+        * Set flag if the user is currently scrolling
+        *
+        *
+        */
+        void setViewIsScrolling(bool scrolling) { m_viewIsScrolling = scrolling; };
+
+        /**
+        * Return if the user is currently scrolling
+        *
+        *
+        */
+        bool viewIsScrolling() { return m_viewIsScrolling; }
+
+
+        void setViewIsFastScrolling(bool fastScrolling) { m_viewIsFastScrolling = fastScrolling; };
+
+        void setFastScrollingMode(bool fastScrolling);
+
+        bool viewIsFastScrolling() { return m_viewIsFastScrolling; }
+
+        void toggleRepaintTimer(bool on);
+
+        WebTabbedNavigation* tabbedNavigation() { return m_tabbedNavigation; }
+        void notifyMetaData(WebCore::String& name, WebCore::String& value);
+        void forceLayoutAndResize(WebFrame* frame);
+        const TPtrC userAgent() { return *m_userAgent; }
+        void adjustOffscreenRect();
+
+        /**
+        * Handle to container Window
+        */
+        RWindow& GetContainerWindow() {return Window();}
+
+        // from OOMStopper
+        void Stop();
+        TOOMPriority Priority()     { return EOOM_PriorityHigh; }
+
+        /**
+        * Collects offscreen bitmap 
+        */ 
+        void  collectOffscreenbitmapL(CFbsBitmap& snapshot); 
+
+    public: // from MPageScalerCallback
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void DrawDocumentPart(CFbsBitGc& aGc, CFbsBitmap* aBitmap, const TRect& aDocumentAreaToDraw);
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        TRect DocumentViewport() ;
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void ScaledPageChanged(const TRect& aArea, TBool aFullScreen, TBool aScroll);
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        TSize DocumentSize();
+
+        /**
+        *
+        * @since 3.2
+        * @param
+        * @return
+        */
+        TBool TouchScrolling() ;
+
+        CCoeControl& PageControlView();
+        void notifyPlugins(TBool focus);
+
+     protected: // From CCoeControl
+
+        /**
+        * FocusChanged
+        * From CCoeControl
+        *
+        */
+        void FocusChanged(TDrawNow aDrawNow);
+
+        /**
+        * From CCoeControl
+        * Handle changes in size of the display.
+        */
+        void SizeChanged();
+
+        /**
+        * From CCoeControl
+        * Handle changes in size of the display.
+        */
+        void Draw(const TRect& aRect) const;
+
+        /**
+        * From CCoeControl
+        * Get the number of controls in the Browser Control
+        */
+        TInt CountComponentControls() const;
+
+        /**
+        * From CCoeControl
+        * Get a specified control with a given index
+        */
+        CCoeControl* ComponentControl(TInt aIndex) const;
+
+        /**
+        * From CCoeControl
+        * Fep integration for inline editing
+        */
+        TCoeInputCapabilities InputCapabilities() const;
+
+
+    private:
+        WebView( CBrCtl* brctl );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( CCoeControl& aParent );
+        void initializePageScalerL();
+
+        //
+        static TInt scrollTimerCb(TAny* aAny);
+        void autoScroll();
+        int millisecondsScrolled() const;
+        int search(TPtrC keyword, bool forward, bool wrapFlag);
+        void zoomLevelChanged(int newZoomLevel);
+        void UpdateZoomArray();
+        TInt FindCurrentZoomIndex(TInt aCurrentZoomLevel);
+
+    public:
+        void fepTimerFired(WebCore::Timer<WebView>*);
+        void fepVKBTimerFired(WebCore::Timer<WebView>*);
+        bool isClosing() const { return m_isClosing; }
+        void synchRequestPending(bool);
+        bool isSynchRequestPending() const { return m_synchRequestPending; }
+
+        void setPluginFullscreen(bool val) { m_pluginFullscreen = val; }
+        bool isPluginFullscreen() { return m_pluginFullscreen; }
+        void setPluginActivated(bool option) {m_pluginActivated = option;}
+        TInt getWidgetId();
+    private:
+        WebCore::Page* m_page;
+        CBrCtl* m_brctl;
+        RRegion                 m_repaints;
+        CPeriodic*              m_repainttimer;
+        WebCoreGraphicsContext* m_webcorecontext;   // owned
+        CFbsBitmapDevice*       m_bitmapdevice;     // onwed
+        TRect                   m_offscreenrect;
+
+        bool                    m_isEditable;
+        CWebFepTextEditor*      m_webfeptexteditor;
+        CToolBar*               m_toolbar;
+        WebToolBarInterface*    m_toolbarinterface;
+
+        WebFormFillPopup*       m_webFormFillPopup; // not owned
+        WebPageScrollHandler*   m_pageScrollHandler;  // owned
+        WebPopupDrawer*         m_popupDrawer;  // owned
+        PluginPlayer*           m_pluginplayer; //owned
+        WebPointerEventHandler* m_webpointerEventHandler; //owned
+
+        TTime m_scrollingStartTime;
+        TKeyEvent m_currentEventKey;
+        CPeriodic* m_fastScrollTimer;
+        int m_scrollingSpeed;
+        TBrCtlDefs::TBrCtlElementType m_focusedElementType;
+        CPageScaler* m_pageScaler;
+        bool m_pageScalerEnabled;
+        bool m_inFindState;
+        CPageView* m_pageView;
+        TPoint m_savedPosition; // contentPosition
+        TPoint m_savedCursorPosition;
+        HBufC* m_findKeyword;
+        WebTabbedNavigation* m_tabbedNavigation;
+        WebFormFill*            m_webFormFill;      // owned
+
+        // for fep editor
+        WebCore::Timer<WebView>* m_fepTimer;
+        TKeyEvent   m_keyevent;
+        TEventCode  m_eventcode;
+
+        RArray<TUint>   m_zoomLevelArray;
+        int            m_currentZoomLevelIndex;
+        TUint32         m_apid;
+
+        bool       m_isClosing;
+        CWidgetExtension* m_widgetextension;
+        HBufC* m_userAgent;
+        bool m_isdialogLaunched;
+
+
+        WebPageZoomHandler* m_pageZoomHandler;      // owned
+        int                 m_currentZoomLevel;
+        int                 m_lastZoomLevel;
+        int                 m_maxZoomLevel;
+        int                 m_minZoomLevel;
+        int                 m_defaultZoomLevel;
+
+        // dirty zooming specific
+        TRect               m_srcRectForZooming;
+        TRect               m_destRectForZooming;
+        int                 m_startZoomLevel;
+        bool                m_dirtyZoomMode;
+        bool                m_zoomLevelChangedByUser;
+        bool                m_isPluginsVisible;
+        bool                m_historyLoad;
+        bool                m_redirectWithLockedHistory;
+        // full screen mode
+        WebPageFullScreenHandler* m_pageFullScreenHandler;  // owned
+        bool m_viewIsScrolling;
+        bool m_viewIsFastScrolling;
+        TPoint* m_ptrbuffer;
+
+        // synchronous requests
+        bool                m_synchRequestPending;
+        bool                m_pluginFullscreen;
+        //Indicates any plugin is activated/deactivated
+        bool                m_pluginActivated;
+        bool                m_showCursor;
+        bool                m_allowRepaints;
+    };
+
+#endif
+
+
+