aboutsummaryrefslogtreecommitdiff
path: root/Src/nu/HTMLContainer2.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nu/HTMLContainer2.h')
-rw-r--r--Src/nu/HTMLContainer2.h292
1 files changed, 292 insertions, 0 deletions
diff --git a/Src/nu/HTMLContainer2.h b/Src/nu/HTMLContainer2.h
new file mode 100644
index 00000000..2866b780
--- /dev/null
+++ b/Src/nu/HTMLContainer2.h
@@ -0,0 +1,292 @@
+#ifndef NULLSOFT_HTMLCONTAINERH
+#define NULLSOFT_HTMLCONTAINERH
+
+#include <ocidl.h>
+#include <mshtmhst.h>
+#include <mshtmdid.h>
+#include <shlobj.h>
+#include <urlmon.h>
+/**************************************************************************
+ class definitions
+**************************************************************************/
+
+
+#ifndef DOCHOSTUIFLAG_HOST_NAVIGATES
+#define DOCHOSTUIFLAG_HOST_NAVIGATES 0x02000000
+#endif
+#ifndef DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION
+#define DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION 0x04000000
+#endif
+#ifndef DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL
+#define DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL 0x08000000
+#endif
+#ifndef DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL
+#define DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL 0x10000000
+#endif
+#ifndef DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE
+#define DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE 0x20000000
+#endif
+
+class HTMLContainer2;
+
+typedef BOOL( CALLBACK *BROWSERCB )( HTMLContainer2 *pContiner, DISPID dispId, DISPPARAMS FAR *pDispParams, LPVOID pUser ); // return TRUE to block normal processing
+
+typedef enum tagCONTAINERSTYLE
+{
+ CSTYLE_NORMAL = 0x00, // nothing
+ CSTYLE_NAVIGATE2_NOCLICKSOUND = 0x01, // prevents click sound in Nvigate2 calls
+ CSTYLE_NOCLICKSOUND = 0x02, // prevents all click sounds ( requires testing )
+
+} CONTAINERSTYLE;
+
+
+BOOL HTMLContainer2_Initialize();
+BOOL HTMLContainer2_Uninitialize();
+
+class HTMLContainer2 : public IOleClientSite,
+ public IOleInPlaceSite,
+ public IOleInPlaceFrame,
+ public IOleControlSite,
+ public IDocHostUIHandler2,
+ public IDocHostShowUI,
+ public IOleCommandTarget,
+ public IServiceProvider,
+ public IDispatch
+{
+
+ public:
+ typedef enum
+ {
+ uiToolbar = 1,
+ uiStatusbar = 2,
+ uiMenubar = 3,
+ uiAddressbar = 4,
+ } uiElement;
+
+ typedef enum
+ {
+ wndLeft = 0x0001,
+ wndTop = 0x0002,
+ wndWidth = 0x0004,
+ wndHeight = 0x0008,
+ wndRelative = 0x0010,
+ } windowPosFlags;
+
+ typedef enum
+ {
+ msgNavigate2 = 0,
+ msgNavigateToName = 1,
+ } redirectedMessage;
+
+ protected:
+ HTMLContainer2( HWND waWindow, HWND hwndParent );
+ virtual ~HTMLContainer2( void );
+
+ public:
+ // *** IUnknown Methods ***
+ STDMETHOD( QueryInterface )( REFIID riid, PVOID *ppvObject );
+ STDMETHOD_( ULONG, AddRef )( void );
+ STDMETHOD_( ULONG, Release )( void );
+
+ protected:
+ // *** IOleInPlaceUIWindow Methods ***
+ STDMETHOD( GetBorder )( LPRECT lprectBorder );
+ STDMETHOD( RequestBorderSpace )( LPCBORDERWIDTHS lpborderwidths );
+ STDMETHOD( SetBorderSpace )( LPCBORDERWIDTHS lpborderwidths );
+ STDMETHOD( SetActiveObject )( IOleInPlaceActiveObject *pActiveObject,
+ LPCOLESTR lpszObjName );
+ // *** IOleClientSite Methods ***
+ STDMETHOD( SaveObject )( );
+ STDMETHOD( GetMoniker )( DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER *ppMk );
+ STDMETHOD( GetContainer )( LPOLECONTAINER *ppContainer );
+ STDMETHOD( ShowObject )( );
+ STDMETHOD( OnShowWindow )( BOOL fShow );
+ STDMETHOD( RequestNewObjectLayout )( );
+
+ // *** IOleWindow Methods ***
+ STDMETHOD( GetWindow ) ( HWND *phwnd );
+ STDMETHOD( ContextSensitiveHelp ) ( BOOL fEnterMode );
+
+ // *** IOleInPlaceSite Methods ***
+ STDMETHOD( CanInPlaceActivate ) ( void );
+ STDMETHOD( OnInPlaceActivate ) ( void );
+ STDMETHOD( OnUIActivate ) ( void );
+ STDMETHOD( GetWindowContext ) ( IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo );
+ STDMETHOD( Scroll ) ( SIZE scrollExtent );
+ STDMETHOD( OnUIDeactivate ) ( BOOL fUndoable );
+ STDMETHOD( OnInPlaceDeactivate ) ( void );
+ STDMETHOD( DiscardUndoState ) ( void );
+ STDMETHOD( DeactivateAndUndo ) ( void );
+ STDMETHOD( OnPosRectChange ) ( LPCRECT lprcPosRect );
+
+ // *** IOleInPlaceFrame Methods ***
+ STDMETHOD( InsertMenus )( HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths );
+ STDMETHOD( SetMenu )( HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject );
+ STDMETHOD( RemoveMenus )( HMENU hmenuShared );
+ STDMETHOD( SetStatusText )( LPCOLESTR pszStatusText );
+ STDMETHOD( EnableModeless )( BOOL fEnable );
+ STDMETHOD( TranslateAccelerator )( LPMSG lpmsg, WORD wID );
+
+ // *** IOleControlSite Methods ***
+ STDMETHOD( OnControlInfoChanged )( void );
+ STDMETHOD( LockInPlaceActive )( BOOL fLock );
+ STDMETHOD( GetExtendedControl )( IDispatch **ppDisp );
+ STDMETHOD( TransformCoords )( POINTL *pptlHimetric, POINTF *pptfContainer, DWORD dwFlags );
+ STDMETHOD( TranslateAccelerator )( LPMSG pMsg, DWORD grfModifiers );
+ STDMETHOD( OnFocus )( BOOL fGotFocus );
+ STDMETHOD( ShowPropertyFrame )( void );
+
+ // *** IDispatch Methods ***
+ STDMETHOD( GetIDsOfNames )( REFIID riid, OLECHAR FAR *FAR *rgszNames, unsigned int cNames, LCID lcid, DISPID FAR *rgdispid );
+ STDMETHOD( GetTypeInfo )( unsigned int itinfo, LCID lcid, ITypeInfo FAR *FAR *pptinfo );
+ STDMETHOD( GetTypeInfoCount )( unsigned int FAR *pctinfo );
+ STDMETHOD( Invoke )( DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, EXCEPINFO FAR *pexecinfo, unsigned int FAR *puArgErr );
+
+ // *** IDocHostUIHandler Methods ***
+ STDMETHOD( ShowContextMenu )( DWORD dwID, POINT __RPC_FAR *ppt, IUnknown __RPC_FAR *pcmdtReserved, IDispatch __RPC_FAR *pdispReserved );
+ STDMETHOD( GetHostInfo )( DOCHOSTUIINFO __RPC_FAR *pInfo );
+ STDMETHOD( ShowUI )( DWORD dwID, IOleInPlaceActiveObject __RPC_FAR *pActiveObject, IOleCommandTarget __RPC_FAR *pCommandTarget, IOleInPlaceFrame __RPC_FAR *pFrame, IOleInPlaceUIWindow __RPC_FAR *pDoc );
+ STDMETHOD( HideUI )( void );
+ STDMETHOD( UpdateUI )( void );
+ STDMETHOD( OnDocWindowActivate )( BOOL fActivate );
+ STDMETHOD( OnFrameWindowActivate )( BOOL fActivate );
+ STDMETHOD( ResizeBorder )( LPCRECT prcBorder, IOleInPlaceUIWindow __RPC_FAR *pUIWindow, BOOL fRameWindow );
+ STDMETHOD( TranslateAccelerator )( LPMSG lpMsg, const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID );
+ STDMETHOD( GetOptionKeyPath )( LPOLESTR __RPC_FAR *pchKey, DWORD dw );
+ STDMETHOD( GetDropTarget )( IDropTarget __RPC_FAR *pDropTarget, IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget );
+ STDMETHOD( GetExternal )( IDispatch __RPC_FAR *__RPC_FAR *ppDispatch );
+ STDMETHOD( TranslateUrl )( DWORD dwTranslate, OLECHAR __RPC_FAR *pchURLIn, OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut );
+ STDMETHOD( FilterDataObject )( IDataObject __RPC_FAR *pDO, IDataObject __RPC_FAR *__RPC_FAR *ppDORet );
+ // STDMETHOD (EnableModeless)(BOOL fEnable);
+
+ // *** IDocHostUIHandler2 Methods ***
+ STDMETHOD( GetOverrideKeyPath )( LPOLESTR __RPC_FAR *pchKey, DWORD dw );
+
+ // *** IDocHostShowUI ***
+ STDMETHOD( ShowHelp )( HWND hwnd, LPOLESTR pszHelpFile, UINT uCommand, DWORD dwData, POINT ptMouse, IDispatch *pDispatchObjectHit );
+ STDMETHOD( ShowMessage )( HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT *plResult );
+
+ /*** IOleCommandTarget ***/
+ STDMETHOD( QueryStatus )( const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText );
+ STDMETHOD( Exec )( const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut );
+
+ /*** IServiceProvider ***/
+ STDMETHOD( QueryService )( REFGUID guidService, REFIID riid, void **ppv );
+
+ public:
+ STDMETHOD( Initialize )( void );
+ STDMETHOD( Finish )( void );
+
+ STDMETHOD( UnadviseBrowserEvents )( void );
+
+ STDMETHOD( SetLocation )( int x, int y, int width, int height );
+ STDMETHOD( SetFocus )( BOOL fFocused );
+ virtual BOOL TranslateKey( LPMSG pMsg );
+
+ HWND GetHostHWND( void );
+ HWND GetParentHWND( void );
+
+ HRESULT NavigateEx( IWebBrowser2 *pWeb2, VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers );
+ HRESULT Navigate2( VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers );
+
+ HRESULT PostNavigate2( VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers ); // navigate using postmessage API
+ HRESULT NavigateToName( LPCWSTR pszUrl, UINT fFlags );
+ HRESULT NavigateToNameEx( IWebBrowser2 *pWeb2, LPCWSTR pszUrl, UINT fFlags );
+ HRESULT PostNavigateToName( LPCWSTR pszUrl, UINT fFlags );
+ HRESULT WriteHTML( LPCWSTR pszHTML );
+ HRESULT WriteDocument( BSTR data ); // if succeeded will free bstr
+ HRESULT InvokeScriptFunction( LPCWSTR pszFuncName, LCID lcid, DISPPARAMS FAR *pDispParams, VARIANT FAR *pVarResult, EXCEPINFO FAR *pExcepInfo, UINT FAR *puArgErr );
+
+ HRESULT GetIDispatch( IDispatch **pDisp );
+ HRESULT GetIUnknown( IUnknown **pUnk );
+ HRESULT GetIWebBrowser2( IWebBrowser2 **pWeb2 );
+
+ // Registers cursors to use with browser// set hCurToUse = NULL to remove
+ // hCurToUse will be destryoed using DestroyCursor, make sure that this is not shared resource (use CopyCursor)
+ STDMETHOD( RegisterBrowserCursor )( INT nSysCurID, HCURSOR hCurToUse );
+
+ // used by MTBrowser
+ BROWSERCB RegisterBrowserEventCB( BROWSERCB fnBrowserCB, LPVOID pUserData );
+
+ static HRESULT InternetSetFeatureEnabled( INTERNETFEATURELIST FeatureEntry, DWORD dwFlags, BOOL fEnable );
+ static HRESULT InternetIsFeatureEnabled( INTERNETFEATURELIST FeatureEntry, DWORD dwFlags );
+
+ protected:
+ virtual void OnBeforeNavigate( IDispatch *pDispatch, VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers, VARIANT_BOOL *Cancel );
+
+ virtual void OnNavigateError( IDispatch *pDispatch, VARIANT *URL, VARIANT *TargetFrameName, VARIANT *StatusCode, VARIANT_BOOL *Cancel ){}
+ virtual void OnNavigateComplete( IDispatch *pDispatch, VARIANT *URL ) {}
+ virtual void OnDocumentComplete( IDispatch *pDispatch, VARIANT *URL ) {}
+ virtual void OnDocumentReady( IDispatch *pDispatch, VARIANT *URL ) {} // top frame OnDocumentComplete
+ virtual void OnDownloadBegin( void ) {}
+ virtual void OnDownloadComplete( void ) {}
+ virtual void OnFileDownload( VARIANT_BOOL *ActiveDocument, VARIANT_BOOL *Cancel ) {}
+ virtual void OnNewWindow2( IDispatch **ppDisp, VARIANT_BOOL *Cancel ) {}
+ virtual void OnNewWindow3( IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl ) {}
+ virtual void OnProgressChange( long Progress, long ProgressMax ) {}
+ virtual void OnStatusTextChange( LPCWSTR pszText ) {}
+ virtual void OnCommandStateChange( LONG commandId, VARIANT_BOOL Enable ) {}
+ virtual void OnSetSecureLockIcon( UINT secureLockIcon ) {}
+ virtual void OnNavigateCancelled( LPCWSTR pszUrl, VARIANT_BOOL *Cancel ) {}
+ virtual void OnTitleChange( BSTR pszText ) {}
+ virtual void OnVisibleChange( VARIANT_BOOL fVisible ) {}
+ virtual void OnWindowClosing( VARIANT_BOOL IsChildWindow, VARIANT_BOOL *Cancel ) {}
+ virtual void OnShowUiElement( UINT elementId, VARIANT_BOOL fSHow ) {}
+ virtual void OnWindowSetResizable( VARIANT_BOOL Enable ) {}
+ virtual void OnClientToHostWindow( LONG *CX, LONG *CY ) {}
+ virtual void OnSetWindowPos( UINT flags, LONG x, LONG y, LONG cx, LONG cy ) {}
+ virtual void OnEnableFullscreen( VARIANT_BOOL Enable ) {}
+
+ virtual COLORREF OnGetHostBkColor( void );
+ virtual DWORD OnGetHostInfoFlags( void );
+ virtual OLECHAR *OnGetHostCSS( void ); // use CoTaskMemAlloc to allocate string
+ virtual OLECHAR *OnGetHostNamespace( void ); // use CoTaskMemAlloc to allocate string
+ virtual DWORD OnGetDownlodFlags( void );
+ virtual LPCWSTR OnGetUserAgent( void );
+
+ virtual DWORD GetContainerStyle( void );
+
+ BOOL ValidateURLHost( LPCWSTR pszUrl );
+
+ HRESULT IsFrameset( IWebBrowser2 *pWeb2 );
+ HRESULT GetFramesCount( IWebBrowser2 *pWeb2, INT *frameCount );
+
+ HRESULT GetAppVersion( BSTR *p );
+ HRESULT GetUserAgent( BSTR *p );
+
+ virtual HANDLE InitializePopupHook( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { return NULL; }
+ virtual void DeletePopupHook( HANDLE hHoook ) {}
+ virtual void InitializeMenuPopup( HWND hwnd, HMENU hMenu, INT iPos, BOOL fWindowMenu ) {}
+
+ virtual void ProcessRedirectedMessage( HWND hwnd, UINT messageId, LPARAM param );
+ HRESULT PostRedirectMessage( UINT messageId, LPARAM param );
+
+ virtual BOOL InputLangChangeRequest( HWND hwnd, UINT flags, HKL hkl ) { return FALSE; }
+ virtual void InputLangChange( UINT charset, HKL hkl ) {}
+ virtual void OnClosePopupInternal() {}
+
+ private:
+ /// helpers
+ friend static HRESULT HTMLContainer2_OnShowUiElementHelper( HTMLContainer2 *instance, UINT elementId, DISPPARAMS *pDispParams );
+
+ protected:
+ LONG ref; // ref count
+ IUnknown *pUnk; // IUnknown of contained object
+ RECT rect; //
+ HWND hParent; // window handle of the container
+
+ private:
+ DWORD dwCookie;
+ DWORD dwFlags;
+ BROWSERCB fnBrwoserCB;
+ LPVOID userData;
+ BOOL bNavigating;
+ VOID *hCursors;
+ INT nCursors;
+ BOOL ensureChakraLoaded;
+ HWND winampWindow;
+
+ friend static LRESULT SubclassControl_WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+};
+
+#endif \ No newline at end of file