1 /*
2     Copyright (c) 2009 NetAllied Systems GmbH
3 
4 	  This file is part of G3DWarehouseBrowser.
5 
6     Licensed under the MIT Open Source License,
7     for details please see LICENSE file or the website
8     http://www.opensource.org/licenses/mit-license.php
9 */
10 
11 #ifndef __G3D_DOC_HOST_UI_HANDLER_H__
12 #define __G3D_DOC_HOST_UI_HANDLER_H__
13 
14 #include "G3DPrerequisites.h"
15 #include <mshtml.h>
16 #include <mshtmhst.h>
17 #include <oaidl.h>
18 #include <string>
19 
20 namespace G3D
21 {
22 	static const wchar_t* URL_START_STRING = L"skp:getSkp@";
23 	static const wchar_t* URL_START_STRING2 = L"skp:getKmz@";
24 
25 	class DocHostUiHandler : public IDocHostUIHandler {
26 
27 	private:
28 		IOleClientSite*  mClientSite;
29 		HWND mHwndProgress;
30 		WideString& mFilePath;
31 
32 	public:
DocHostUiHandler(HWND hwndProgress,WideString & filePath)33 		DocHostUiHandler(HWND hwndProgress, WideString& filePath)
34 			: mHwndProgress(hwndProgress)
35 			, mFilePath(filePath)
36 			, mClientSite(0) {};
~DocHostUiHandler()37 		virtual ~DocHostUiHandler() { mClientSite->Release(); }
38 		void setClientSite(IOleClientSite*);
39 		HRESULT cancelNavigation(OLECHAR __RPC_FAR* __RPC_FAR* ppchURLOut);
40 
41 	public:	// IDocHostUIHandler interface
QueryInterface(REFIID riid,LPVOID FAR * ppvObj)42 	  HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID FAR* ppvObj) {
43 		if (mClientSite) {
44 		  return mClientSite->QueryInterface(riid, ppvObj);
45 		}
46 		return E_NOINTERFACE;
47 	  }
48 
AddRef()49 	  ULONG STDMETHODCALLTYPE AddRef() { return 1; }
50 
Release()51 	  ULONG STDMETHODCALLTYPE Release() { return 1; }
52 
ShowContextMenu(DWORD dwID,POINT __RPC_FAR * ppt,IUnknown __RPC_FAR * pcmdtReserved,IDispatch __RPC_FAR * pdispReserved)53 	  HRESULT STDMETHODCALLTYPE ShowContextMenu(
54 		  DWORD                dwID,
55 		  POINT     __RPC_FAR *ppt,
56 		  IUnknown  __RPC_FAR *pcmdtReserved,
57 		  IDispatch __RPC_FAR *pdispReserved){ return S_OK; }
58 
ShowUI(DWORD dwID,IOleInPlaceActiveObject __RPC_FAR * pActiveObject,IOleCommandTarget __RPC_FAR * pCommandTarget,IOleInPlaceFrame __RPC_FAR * pFrame,IOleInPlaceUIWindow __RPC_FAR * pDoc)59 	  HRESULT STDMETHODCALLTYPE ShowUI(
60 		  DWORD                              dwID,
61 		  IOleInPlaceActiveObject __RPC_FAR *pActiveObject,
62 		  IOleCommandTarget       __RPC_FAR *pCommandTarget,
63 		  IOleInPlaceFrame        __RPC_FAR *pFrame,
64 		  IOleInPlaceUIWindow     __RPC_FAR *pDoc) { return S_OK; }
65 
66 	  HRESULT STDMETHODCALLTYPE GetHostInfo(DOCHOSTUIINFO __RPC_FAR *pInfo);
67 
HideUI()68 	  HRESULT STDMETHODCALLTYPE HideUI() { return S_OK; }
69 
UpdateUI()70 	  HRESULT STDMETHODCALLTYPE UpdateUI() { return S_OK; }
71 
EnableModeless(BOOL fEnable)72 	  HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) { return S_FALSE; }
73 
OnDocWindowActivate(BOOL fActivate)74 	  HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate) { return S_OK; }
75 
OnFrameWindowActivate(BOOL fActivate)76 	  HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate) { return S_OK; }
77 
ResizeBorder(LPCRECT prcBorder,IOleInPlaceUIWindow __RPC_FAR * pUIWindow,BOOL fRameWindow)78 	  HRESULT STDMETHODCALLTYPE ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow __RPC_FAR *pUIWindow, BOOL fRameWindow) { return S_OK; }
79 
TranslateAccelerator(LPMSG lpMsg,const GUID __RPC_FAR * pguidCmdGroup,DWORD nCmdID)80 	  HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg, const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID)
81 	  {
82 		pguidCmdGroup = 0;
83 		return S_FALSE;
84 	  }
85 
GetOptionKeyPath(LPOLESTR __RPC_FAR * pchKey,DWORD dw)86 	  HRESULT STDMETHODCALLTYPE GetOptionKeyPath(LPOLESTR __RPC_FAR *pchKey, DWORD dw) { return S_FALSE; }
87 
GetDropTarget(IDropTarget __RPC_FAR * pDropTarget,IDropTarget __RPC_FAR * __RPC_FAR * ppDropTarget)88 	  HRESULT STDMETHODCALLTYPE GetDropTarget(IDropTarget __RPC_FAR *pDropTarget, IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget)
89 	  { return S_FALSE; }
90 
GetExternal(IDispatch __RPC_FAR * __RPC_FAR * ppDispatch)91 	  HRESULT STDMETHODCALLTYPE GetExternal(IDispatch __RPC_FAR *__RPC_FAR *ppDispatch){
92 		  *ppDispatch = 0;
93 		  return S_FALSE;
94 	  }
95 
96 	  HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate, OLECHAR __RPC_FAR *pchURLIn, OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut);
97 
FilterDataObject(IDataObject __RPC_FAR * pDO,IDataObject __RPC_FAR * __RPC_FAR * ppDORet)98 	  HRESULT STDMETHODCALLTYPE FilterDataObject(IDataObject __RPC_FAR *pDO, IDataObject __RPC_FAR *__RPC_FAR *ppDORet) {
99 
100 		  NOTIMPLEMENTED;
101 		  //*ppDORet = 0;
102   		//return S_FALSE;
103 	  }
104 	};
105 }
106 #endif // __G3D_DOC_HOST_UI_HANDLER_H__