webengine/osswebengine/WebKit/s60/webview/webview_api_test/tsrc/inc/WebView.h
changeset 0 dd21522fd290
child 25 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/webview/webview_api_test/tsrc/inc/WebView.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,551 @@
+/*
+* ==============================================================================
+*  Name        : WebKitView.h
+*  Part of     : WEBKIT / Browser View
+*  Interface   : Implemetation of CWebKitView
+*  Description :
+*  Version     : 3.1
+*
+*    Copyright (c) 2006, Nokia Corporation
+*    All rights reserved.
+*
+*   Redistribution and use in source and binary forms, with or without
+*   modification, are permitted provided that the following conditions
+*   are met:
+*
+*      * Redistributions of source code must retain the above copyright
+*        notice, this list of conditions and the following disclaimer.
+*      * Redistributions in binary form must reproduce the above copyright
+*        notice, this list of conditions and the following disclaimer in
+*        the documentation and/or other materials provided with the
+*        distribution.
+*      * Neither the name of the Nokia Corporation nor the names of its
+*        contributors may be used to endorse or promote products derived
+*        from this software without specific prior written permission.
+*
+*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+*   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+*   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+*   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+*   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+*   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+*   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+*   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+*   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+*   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+*   USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+*   DAMAGE.
+*
+*    Please see file patentlicense.txt for further grants.
+* ==============================================================================
+*/
+
+#ifndef WEBKITVIEW_H
+#define WEBKITVIEW_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <eikscrlb.h>
+#include "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 Frame;
+}
+
+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();
+
+        // 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();
+        
+        /**
+        * 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();
+        
+        /**
+        *  Zooming
+        */
+        void setZoomLevelIndex(int idx);
+
+        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 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; }
+        
+        
+                
+        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; }
+
+    
+    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();
+
+     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);
+
+    public:
+        void fepTimerFired(WebCore::Timer<WebView>*);
+        void fepVKBTimerFired(WebCore::Timer<WebView>*);
+        bool isClosing() const { return m_isClosing; }
+        
+        void synchRequestPending(bool, WebCore::Frame*);
+        bool isSynchRequestPending() const { return m_synchRequestPending; }
+        WebCore::Frame* synchFrame() const { return m_synchFrame; }
+
+        void setPluginFullscreen(bool val) { m_pluginFullscreen = val; }
+        bool isPluginFullscreen() { return m_pluginFullscreen; }
+    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;
+        TPoint* m_ptrbuffer;
+
+        // synchronous requests 
+        WebCore::Frame*              m_synchFrame;
+        bool                m_synchRequestPending;
+        bool                m_pluginFullscreen;
+    };
+
+#endif
+
+
+
+
+
+