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_OLE_IN_PLACE_SITE_H__
12 #define __G3D_OLE_IN_PLACE_SITE_H__
13 
14 #include "G3DPrerequisites.h"
15 #include "G3DOleClientSite.h"
16 #include "G3DOleInPlaceFrame.h"
17 
18 #include <windows.h>
19 
20 namespace G3D
21 {
22 	class OleInPlaceSite : public IOleInPlaceSite {
23 	private:
24 		OleClientSite*   mClientSite;
25 		OleInPlaceFrame* mInPlaceFrame;
26 		IOleObject*	   mBrowserObject;
27 		HWND              mHwnd;
28 
29 	public:
30 		OleInPlaceSite(IOleObject* browserObject, OleInPlaceFrame* inPlaceFrame, HWND h);
~OleInPlaceSite()31 		virtual ~OleInPlaceSite(){
32 			mClientSite -> Release();
33 //			mInPlaceFrame -> Release();
34 			mBrowserObject -> Release();
35 			mHwnd = 0;
36 		 }
37 		void setBrowserObject(IOleObject* o);
38 
setClientSite(OleClientSite * o)39 		void setClientSite(OleClientSite* o) {mClientSite=o;}
40 
41 	public:	// IOleInPlaceSite interface
42 	  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID FAR* ppvObj);
43 
AddRef()44 	  ULONG STDMETHODCALLTYPE AddRef() {
45   		return(1);
46 	  }
47 
Release()48 	  ULONG STDMETHODCALLTYPE Release() {
49   		return(1);
50 	  }
51 
GetWindow(HWND FAR * lphwnd)52 	  HRESULT STDMETHODCALLTYPE GetWindow( HWND FAR* lphwnd) {
53 		*lphwnd = mHwnd;
54   		return(S_OK);
55 	  }
56 
ContextSensitiveHelp(BOOL fEnterMode)57 	  HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) {
58   		NOTIMPLEMENTED;
59 	  }
60 
CanInPlaceActivate()61 	  HRESULT STDMETHODCALLTYPE CanInPlaceActivate() {
62   		return S_OK;
63 	  }
64 
OnInPlaceActivate()65 	  HRESULT STDMETHODCALLTYPE OnInPlaceActivate() {
66   		return S_OK;
67 	  }
68 
OnUIActivate()69 	  HRESULT STDMETHODCALLTYPE OnUIActivate() { return(S_OK); }
70 
GetWindowContext(LPOLEINPLACEFRAME FAR * lplpFrame,LPOLEINPLACEUIWINDOW FAR * lplpDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo)71 	  HRESULT STDMETHODCALLTYPE GetWindowContext( LPOLEINPLACEFRAME FAR* lplpFrame, LPOLEINPLACEUIWINDOW FAR* lplpDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) {
72 		*lplpFrame = mInPlaceFrame;
73   		*lplpDoc = 0;
74 
75   		lpFrameInfo->fMDIApp = FALSE;
76   		lpFrameInfo->hwndFrame = mHwnd;
77   		lpFrameInfo->haccel = 0;
78   		lpFrameInfo->cAccelEntries = 0;
79 
80   		return S_OK;
81 	  }
82 
Scroll(SIZE scrollExtent)83 	  HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtent) { NOTIMPLEMENTED; }
84 
OnUIDeactivate(BOOL fUndoable)85 	  HRESULT STDMETHODCALLTYPE OnUIDeactivate( BOOL fUndoable) { return S_OK; }
86 
OnInPlaceDeactivate()87 	  HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate() { return S_OK; }
88 
DiscardUndoState()89 	  HRESULT STDMETHODCALLTYPE DiscardUndoState() { NOTIMPLEMENTED; }
90 
DeactivateAndUndo()91 	  HRESULT STDMETHODCALLTYPE DeactivateAndUndo() { NOTIMPLEMENTED; }
92 
OnPosRectChange(LPCRECT lprcPosRect)93 	  HRESULT STDMETHODCALLTYPE OnPosRectChange( LPCRECT lprcPosRect) {
94   		IOleInPlaceObject	*inplace;
95   		if (!mBrowserObject->QueryInterface(IID_IOleInPlaceObject, (void**)&inplace)) {
96   			inplace->SetObjectRects(lprcPosRect, lprcPosRect);
97   		}
98   		return(S_OK);
99 	  }
100 	};
101 }
102 #endif // __G3D_OLE_IN_PLACE_SITE_H__
103