webengine/osswebengine/WebKit/s60/plugins/PluginWin.h
changeset 0 dd21522fd290
child 8 7c90e6132015
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,519 @@
+/*
+* 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:  Acts as a container of Netscape compatible plugins.
+*                It provides an adaptor interface between the S60 Browser and
+*                Netscape compatible plugins.
+*
+*/
+
+#ifndef PLUGINWIN_H
+#define PlUGINWIN_H
+
+//  INCLUDES
+#include <e32def.h>
+#include <coecntrl.h>
+#include <PluginAdapterInterface.h>
+#include <npapi.h>
+
+// FORWARD DECLARATIONS
+class PluginSkin;
+class PluginHandler;
+class PluginStream;
+class WebView;
+class MPluginNotifier;
+class MOptionMenuHandler;
+struct NPObject;
+
+// CLASS DECLARATION
+
+// LOCAL CONSTANTS AND MACROS
+// These are used to designate the handling of incoming content and loading Plugins
+// during intial construction of the plugin. We could add ELoadModeConstruct.
+// They are also used when a plugin requests to download additional content, and
+// the mapping of target (windowType) to content/plugin handling. Currently, the
+// loadMode is simplistic, and these are sufficent. If we start to support window
+// target=_Self or others, we can add ELoadModeSelf, etc.
+enum TPluginEventType
+    {
+    EEventActivate,
+    EEventDeactivate,
+    EEventLoseFocus,
+    EEventGainFocus,
+    };
+
+/**
+* PluginWin
+* Acts as a container of Netscape compatible plugins. It provides an
+* adaptor interface between the S60 Browser and Netscape compatible plugins.
+*
+* @lib plugin.dll
+* @since 3.1
+*/
+class PluginWin :  public CCoeControl,
+                   public MCoeControlObserver,                    
+                   public MCoeForegroundObserver,
+                   public MPluginAdapter,
+                   public MCoeControlHitTest
+    {
+
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        *
+        * @since 3.1
+        * @param aHandle A unique id that if identifies the corresponding plugin.
+        * @param aPluginSkin The PluginInst's listener.
+        * @param aWebKitView The WebKitView.
+        * @return A pointer to the newly created PluginWin object
+        */
+        static PluginWin* NewL(PluginSkin* pluginskin,
+                               const WebView& view);
+
+        /**
+        * Destructor.
+        */
+        virtual ~PluginWin();
+
+        /**
+        * ConstructL
+        * A part of the two phase construction method
+        * @since 3.1
+        * @return void.
+        */
+        void ConstructL(const WebView& view);
+
+
+    public: // New functions
+
+        /**
+        * Refresh the plugin.
+        *
+        * @since 3.1
+        * @return The error code from the plugin
+        */
+        TInt refreshPlugin(CFbsBitGc& bitmapContext);
+
+        /**
+        * ViewFocusChanged - invoked when WebKitView gains or loses focus
+        *
+        * @since 3.1
+        * @return void
+        */
+        void viewFocusChanged(TBool focused);
+
+        /**
+        * ResizePluginRect
+        * Resize the plugin rect.
+        *
+        * @since 3.1
+        * @param aRect the new rect
+        * @return void
+        */
+        void resizePluginRect(TRect& rect);
+
+ 
+        /**
+        * pluginSkin
+        * 
+        *
+        * @since 3.1        
+        * @return 
+        */
+        PluginSkin* pluginSkin() { return m_pluginskin; }
+        
+        
+        /**
+        * addPluginOptionsL
+        * 
+        *
+        * @since 3.1        
+        * @return 
+        */
+        void addPluginOptionsL(CEikMenuPane& menuPane, TInt commandBase, TInt after);
+        
+        /**
+        * addPluginOptionsL
+        * 
+        *
+        * @since 3.1        
+        * @return 
+        */
+        void handlePluginCommandL(TInt id);
+        
+        /**
+        * SetPluginFocusL
+        * Give or take focus from the plugin .
+        *
+        * @since 3.1
+        * @param aPluginFocus if true the PluginInst instance takes focus,
+        *                     otherwise it releases it.
+        */
+        void setPluginFocusL(TBool focus);
+
+        /**
+        * isPluginInFullscreen
+        * returns if plugin in fullscreen
+        *
+        */        
+        bool isPluginInFullscreen() { return m_fullscreen; }
+
+        /**
+        * isForceScroll
+        * returns true if plugin in forceScroll mode
+        */        
+        bool isForceScroll() { return m_forceScroll; }
+        
+        /**
+        * NotifyPluginVisible
+        * Notify Plugins of their visibility.
+        *
+        */
+        void NotifyPluginVisible(TBool visible);
+ public: // Functions from CCoeControl
+
+        /**
+        * Returns the number of child controls.
+        *
+        * @since 3.1
+        * @param aIndex index of child control
+        * @return child control
+        */
+        CCoeControl* ComponentControl( TInt index )  const;
+
+        /**
+        * Returns the number of child controls.
+        *
+        * @since 3.1
+        * @return Always returns 0
+        */
+        TInt CountComponentControls() const;
+
+        /**
+        * Hides or shows the PluginInst.
+        *
+        * @since 3.1
+        * @param aVisible if true it makes the PluginInst visible otherwise invisible.
+        * @return void.
+        */
+        void makeVisible(TBool visible);
+
+        /**
+        * Handles an event from an observed control.
+        *
+        * @since 3.1
+        * @param aControl The control that sent the event.
+        * @param aEventType The event type.
+        * @return void.
+        */
+        void HandleControlEventL(CCoeControl *control, TCoeEvent eventType);
+
+        /**
+        * Updates the size of the control.
+        *
+        * @since 3.1
+        * @return void
+        */
+        void SizeChanged();
+
+        /**
+        * Updates the size of the control.
+        *
+        * @since 3.1
+        * @return void
+        */
+        void PositionChanged();
+
+        /**
+        * Updates the size or position of the control.
+        *
+        * @since 5.0
+        * @return void
+        */
+        void windowChanged();
+
+        /**
+        * Updates the size or position of the control.
+        *
+        * @since 5.0
+        * @return void
+        */
+        void windowChangedL();
+
+        /**
+        * Hands a key event to the control.
+        *
+        * @since 3.1
+        * @param aKeyEvent The key event.
+        * @param aKeyEvent The type of the key event.
+        * @return EKeyWasNotConsumed.
+        */
+        TKeyResponse OfferKeyEventL(const TKeyEvent& keyevent,TEventCode type);
+        
+        /**
+        * 
+        *
+        * @since 3.1
+        * @param 
+        * @param 
+        * @return 
+        */
+        void processEventL( TPluginEventType eventType, TBool& consumed );
+        TBool HitRegionContains(const TPoint &aPoint, const CCoeControl &/*aControl*/) const;
+
+        /**
+        * HandlePointerEventL
+        * From CCoeControl
+        *
+        */
+        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ 
+        /**
+        * Draw
+        * From CCoeControl
+        *
+        */        
+        void Draw(const TRect& rect) const;
+ 
+        /**
+        * FocusChanged
+        * From CCoeControl
+        *
+        */        
+        void FocusChanged(TDrawNow aDrawNow);
+
+  public: //From MCoeForegroundObserver
+
+    /**
+        * HandleGainingForeground 
+        * @since 3.1
+        * @return none
+        */
+    void HandleGainingForeground();
+    
+    
+    /**
+        * HandleLosingForeground 
+        * @since 3.1
+        * @return none
+        */
+    void HandleLosingForeground();
+
+
+        /**
+        * Return window object usable from scriptable plugins
+        * @since 3.1
+        * @return none
+        */
+        NPObject* windowScriptNPObject();
+
+        /**
+        * Sets the plugin's behaviour as windowed or windowless
+        * @since 3.2
+        * @return
+        */
+        void setWindowedPlugin(bool windowedPlugin) { m_windowedPlugin = windowedPlugin; }
+
+        /**
+        * Sets the plugin's behaviour as windowed or windowless
+        * @since 3.2
+        * @return
+        */
+        void setTransparentPlugin(bool transparentPlugin) { m_transparentPlugin = transparentPlugin; }
+
+        /**
+        * Forces a redraw of the screen
+        * @since 3.2
+        * @return
+        */
+        void forceRedraw(bool drawNow);
+        
+        /**
+        * Move/scroll window by aOffset
+        * Sets the cursor poistion
+        * @since 3.1
+        * @return
+        */
+        void moveWindow(const TPoint& aOffset);
+
+        /**
+        * Deactivate plugin on plugin request
+        * @since 3.1
+        * @return
+        */
+        void pluginDeactivate();        
+        
+
+public: // Functions from MPluginAdapter
+
+    /**
+    * Gets the pointer to the minor version number of the plug-in version
+    * number of the Browser Plug-in API.
+    * @since 3.1
+    * @return Series 60 returns 1. Series 80 and the Nokia 7710 smartphone return 101.
+    */
+    TUint16 GetVersion() {return 1;};
+
+    /**
+    * Called when the plug-in has completed its creation.
+    * This function is called from the constructL function of the plug-in.
+    * @since 3.1
+    * @param aPluginControl A pointer to the plug-in control window
+    * @return void
+    */
+    void PluginConstructedL(CCoeControl* aControl);
+
+    /**
+    * Called after the plug-in has been deleted.
+    * This function is called from the destructor of the plug-in.
+    * @since 3.1
+    * @return void
+    */
+    void PluginFinishedL() {m_control = NULL;}
+
+    /**
+    * Called by the plug-in to open a URL in the parent frame.
+    * This function is not implemented in Series 60. It is supported in Series 80 and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @param aUrl Name of the URL to open
+    * @return void
+    */
+    void OpenUrlL(const TDesC& /*aUrl*/) {}
+
+    /**
+    * Called by the plug-in to open a URL in a named window or frame.
+    * This function is not implemented in Series 60. It is supported in
+    * Series 80 and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @param aUrl Name of the URL to open
+    * @param aNewTargetWindowName The name of the target window or frame
+    * @return void
+    */
+    void OpenUrlInTargetWindowL(const TDesC& /*aUrl*/,
+                                const TDesC& /*aNewTargetWindowName*/) {}
+
+    /**
+    * Specifies whether or not the frame has a previous navigation history item.
+    * This function is not implemented in Series 60. It is supported in Series 80
+    * and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @return ETrue if the frame has a previous navigation history item false otherwise
+    */
+    TBool HasNavigationHistoryPrevious() const{return EFalse;}
+
+    /**
+    * Informs the browser to load the next navigation history URL in its parent frame.
+    * This function is not implemented in Series 60. It is supported in Series 80
+    * and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @return void
+    */
+    void LoadNavigationHistoryPreviousL(){}
+
+    /**
+    * Returns whether the frame has a next navigation history item.
+    * This function is not implemented in Series 60. It is supported
+    * in Series 80 and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @return Returns whether the frame has a next navigation history item.
+    */
+    TBool HasNavigationHistoryNext() const{return EFalse;}
+
+    /**
+    * Informs the browser to load the next navigation history URL in its
+    * parent frame. This function is not implemented in Series 60. It is
+    * supported in Series 80 and in the Nokia 7710 smartphone.
+    * @since 3.1
+    * @return void
+    */
+    void LoadNavigationHistoryNextL(){}
+
+    /**
+    * Returns the window system level control object for the plug-in.
+    * @since 3.1
+    * @return A pointer to the parent control window.
+    */
+    CCoeControl* GetParentControl(){return this;};
+
+    /**
+    * Returns the observer for the plug-in control.
+    * @since 3.1
+    * @return Observer that the plug-in can use to send events to the browser.
+    */
+    MCoeControlObserver* GetParentControlObserver(){return this;};
+
+    /**
+    * Sets the plug-in notifier allowing the plug-in to control portions of the browser.
+    * @since 3.1
+    * @param aNotifier Pointer to an interface that the browser can use to send events to the plug-in.
+    * @return void
+    */
+    void SetPluginNotifier(MPluginNotifier* notifier) { m_notifier = notifier; }
+
+    /**
+    * Sets the plug-in option menu handler, allowing the plug-in to handle the custom
+    * menu commands from the browser.
+    * @since 3.1
+    * @param aOptionMenuHandler Pointer to an interface that the browser can use to send
+    * option menu commands to the plug-in.
+    * @return void
+    */
+    void SetOptionMenuHandler(MOptionMenuHandler* optionmenuhandler){ m_optionmenuhandler = optionmenuhandler; }
+
+
+    /**
+    * PluginDataUrl  
+    * @since 3.1
+    * @param       
+    * @return void
+    */
+    HBufC8* PluginDataUrl();
+    
+    
+    void TogleScreenMode(bool aFullScreen);
+    protected: // New functions
+
+        /**
+        * C++ default constructor.
+        *
+        * @since 3.1
+        * @param 
+        * @param 
+        */
+        PluginWin(PluginSkin* pluginskin);
+                               
+    private:    // Data
+        
+        CCoeControl*                        m_control;
+        MPluginNotifier*                    m_notifier;
+        MOptionMenuHandler*                 m_optionmenuhandler;
+                        
+        PluginSkin*                         m_pluginskin;      //not owned               
+        TBool                               m_pluginfocus;
+        bool                                m_windowedPlugin;
+        bool                                m_transparentPlugin;
+        CFbsBitmap*                         m_bitmap;       //The bitmap for windowless plugin
+        CFbsBitmap*                         m_mask;         //The mask for transparent windowless plugin
+        CFbsBitmapDevice*                   m_bitmapDeviceMask;
+        CFbsBitGc*                          m_bitmapContextMask; 
+        bool                                m_fullscreen;
+        bool                                m_windowCreated;
+        bool                                m_forceScroll;
+    };
+
+
+#endif      // PluginWin_H
+
+// End of File