summaryrefslogtreecommitdiff
path: root/iup/srcole/tOleInPlaceSite.cpp
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2009-11-04 11:56:41 -0800
committerPixel <pixel@nobis-crew.org>2009-11-04 11:59:33 -0800
commitd577d991b97ae2b5ee1af23641bcffc3f83af5b2 (patch)
tree590639d50205d1bcfaff2a7d2dc6ebf3f373c7ed /iup/srcole/tOleInPlaceSite.cpp
Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux.
Diffstat (limited to 'iup/srcole/tOleInPlaceSite.cpp')
-rwxr-xr-xiup/srcole/tOleInPlaceSite.cpp485
1 files changed, 485 insertions, 0 deletions
diff --git a/iup/srcole/tOleInPlaceSite.cpp b/iup/srcole/tOleInPlaceSite.cpp
new file mode 100755
index 0000000..977777c
--- /dev/null
+++ b/iup/srcole/tOleInPlaceSite.cpp
@@ -0,0 +1,485 @@
+// tOleInPlaceSite.cpp: implementation of the tOleInPlaceSite class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "tOleInPlaceSite.h"
+#include "tOleHandler.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+BOOL g_fSwitchingActive=FALSE;
+
+/*
+ * tOleInPlaceSite::tOleInPlaceSite
+ * tOleInPlaceSite::~tOleInPlaceSite
+ *
+ * Parameters (Constructor):
+ * pTen PCTenant of the tenant we're in.
+ * pUnkOuter LPUNKNOWN to which we delegate.
+ */
+
+tOleInPlaceSite::tOleInPlaceSite(class tOleHandler *pTen
+ , LPUNKNOWN pUnkOuter)
+ {
+ m_cRef=0;
+ m_pTen=pTen;
+ m_pUnkOuter=pUnkOuter;
+ m_oleinplaceframe = new tOleInPlaceFrame(m_pTen->m_hWnd);
+ return;
+ }
+
+tOleInPlaceSite::~tOleInPlaceSite(void)
+ {
+ return;
+ }
+
+
+
+/*
+ * tOleInPlaceSite::QueryInterface
+ * tOleInPlaceSite::AddRef
+ * tOleInPlaceSite::Release
+ *
+ * Purpose:
+ * IUnknown members for tOleInPlaceSite object.
+ */
+
+STDMETHODIMP tOleInPlaceSite::QueryInterface(REFIID riid
+ , LPVOID *ppv)
+ {
+ return m_pUnkOuter->QueryInterface(riid, ppv);
+ }
+
+
+STDMETHODIMP_(ULONG) tOleInPlaceSite::AddRef(void)
+ {
+ ++m_cRef;
+ return m_pUnkOuter->AddRef();
+ }
+
+STDMETHODIMP_(ULONG) tOleInPlaceSite::Release(void)
+ {
+ --m_cRef;
+ return m_pUnkOuter->Release();
+ }
+
+
+
+
+/*
+ * tOleInPlaceActiveObject::GetWindow
+ *
+ * Purpose:
+ * Retrieves the handle of the window associated with the object
+ * on which this interface is implemented.
+ *
+ * Parameters:
+ * phWnd HWND * in which to store the window handle.
+ *
+ * Return Value:
+ * HRESULT NOERROR if successful, E_FAIL if there is no
+ * window.
+ */
+
+STDMETHODIMP tOleInPlaceSite::GetWindow(HWND *phWnd)
+ {
+ *phWnd=m_pTen->m_hWnd;
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceActiveObject::ContextSensitiveHelp
+ *
+ * Purpose:
+ * Instructs the object on which this interface is implemented to
+ * enter or leave a context-sensitive help mode.
+ *
+ * Parameters:
+ * fEnterMode BOOL TRUE to enter the mode, FALSE otherwise.
+ *
+ * Return Value:
+ * HRESULT NOERROR
+ */
+
+STDMETHODIMP tOleInPlaceSite::ContextSensitiveHelp
+ (BOOL fEnterMode)
+ {
+ return E_NOTIMPL;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::CanInPlaceActivate
+ *
+ * Purpose:
+ * Answers the server whether or not we can currently in-place
+ * activate its object. By implementing this interface we say
+ * that we support in-place activation, but through this function
+ * we indicate whether the object can currently be activated
+ * in-place. Iconic aspects, for example, cannot, meaning we
+ * return S_FALSE.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR if we can in-place activate the object
+ * in this site, S_FALSE if not.
+ */
+
+STDMETHODIMP tOleInPlaceSite::CanInPlaceActivate(void)
+ {
+ if (DVASPECT_CONTENT!=m_pTen->m_fe.dwAspect)
+ return ResultFromScode(S_FALSE);
+
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::OnInPlaceActivate
+ *
+ * Purpose:
+ * Informs the container that an object is being activated in-place
+ * such that the container can prepare appropriately. The
+ * container does not, however, make any user interface changes at
+ * this point. See OnUIActivate.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::OnInPlaceActivate(void)
+ {
+ //CHAPTER24MOD
+ m_pTen->m_fPendingDeactivate=FALSE;
+ //End CHAPTER24MOD
+
+ //m_pIOleIPObject is our in-place flag.
+ m_pTen->m_pObj->QueryInterface(IID_IOleInPlaceObject
+ , (PPVOID)&m_pTen->m_pIOleIPObject);
+
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::OnInPlaceDeactivate
+ *
+ * Purpose:
+ * Notifies the container that the object has deactivated itself
+ * from an in-place state. Opposite of OnInPlaceActivate. The
+ * container does not change any UI at this point.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::OnInPlaceDeactivate(void)
+ {
+ /*
+ * Since we don't have an Undo command, we can tell the object
+ * right away to discard its Undo state.
+ */
+ m_pTen->Activate(OLEIVERB_DISCARDUNDOSTATE, NULL);
+ ReleaseInterface(m_pTen->m_pIOleIPObject);
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::OnUIActivate
+ *
+ * Purpose:
+ * Informs the container that the object is going to start munging
+ * around with user interface, like replacing the menu. The
+ * container should remove any relevant UI in preparation.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::OnUIActivate(void)
+ {
+ //CHAPTER24MOD
+ m_pTen->m_fPendingDeactivate=FALSE;
+ //End CHAPTER24MOD
+
+ /*
+ * Change the currently selected tenant in the page. This
+ * will UIDeactivate the currently UI Active tenant.
+ */
+ g_fSwitchingActive=TRUE;
+ //m_pTen->m_pPG->m_pPageCur->SwitchActiveTenant(m_pTen);
+ g_fSwitchingActive=FALSE;
+
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::OnUIDeactivate
+ *
+ * Purpose:
+ * Informs the container that the object is deactivating its
+ * in-place user interface at which time the container may
+ * reinstate its own. Opposite of OnUIActivate.
+ *
+ * Parameters:
+ * fUndoable BOOL indicating if the object will actually
+ * perform an Undo if the container calls
+ * ReactivateAndUndo.
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::OnUIDeactivate(BOOL fUndoable)
+ {
+ MSG msg;
+
+ /*
+ * Ignore this notification if we're switching between
+ * multiple active objects.
+ */
+ if (g_fSwitchingActive)
+ return NOERROR;
+
+ //If in shutdown (NULL storage), don't check messages.
+/* if (NULL==m_pTen->m_pIStorage)
+ {
+ g_pFR->ReinstateUI();
+ return NOERROR;
+ }*/
+
+ //If there's a pending double-click, delay showing our UI
+/* if (!PeekMessage(&msg, pDoc->Window(), WM_LBUTTONDBLCLK
+ , WM_LBUTTONDBLCLK, PM_NOREMOVE | PM_NOYIELD))
+ {
+ //Turn everything back on.
+ g_pFR->ReinstateUI();
+ }
+ else*/
+
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::DeactivateAndUndo
+ *
+ * Purpose:
+ * If immediately after activation the object does an Undo, the
+ * action being undone is the activation itself, and this call
+ * informs the container that this is, in fact, what happened.
+ * The container should call IOleInPlaceObject::UIDeactivate.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::DeactivateAndUndo(void)
+ {
+ //CHAPTER24MOD
+ /*
+ * Note that we don't pay attention to the locking
+ * from IOleControlSite::LockInPlaceActive since only
+ * the object calls this function and should know
+ * that it's going to be deactivated.
+ */
+ //End CHAPTER24MOD
+
+ m_pTen->m_pIOleIPObject->InPlaceDeactivate();
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::DiscardUndoState
+ *
+ * Purpose:
+ * Informs the container that something happened in the object
+ * that means the container should discard any undo information
+ * it currently maintains for the object.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT NOERROR or an appropriate error code.
+ */
+
+STDMETHODIMP tOleInPlaceSite::DiscardUndoState(void)
+ {
+ return ResultFromScode(E_NOTIMPL);
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::GetWindowContext
+ *
+ * Purpose:
+ * Provides an in-place object with pointers to the frame and
+ * document level in-place interfaces (IOleInPlaceFrame and
+ * IOleInPlaceUIWindow) such that the object can do border
+ * negotiation and so forth. Also requests the position and
+ * clipping rectangles of the object in the container and a
+ * pointer to an OLEINPLACEFRAME info structure which contains
+ * accelerator information.
+ *
+ * Note that the two interfaces this call returns are not
+ * available through QueryInterface on IOleInPlaceSite since they
+ * live with the frame and document, but not the site.
+ *
+ * Parameters:
+ * ppIIPFrame LPOLEINPLACEFRAME * in which to return the
+ * AddRef'd pointer to the container's
+ * IOleInPlaceFrame.
+ * ppIIPUIWindow LPOLEINPLACEUIWINDOW * in which to return
+ * the AddRef'd pointer to the container document's
+ * IOleInPlaceUIWindow.
+ * prcPos LPRECT in which to store the object's position.
+ * prcClip LPRECT in which to store the object's visible
+ * region.
+ * pFI LPOLEINPLACEFRAMEINFO to fill with accelerator
+ * stuff.
+ *
+ * Return Value:
+ * HRESULT NOERROR
+ */
+
+STDMETHODIMP tOleInPlaceSite::GetWindowContext
+ (LPOLEINPLACEFRAME *ppIIPFrame, LPOLEINPLACEUIWINDOW
+ *ppIIPUIWindow, LPRECT prcPos, LPRECT prcClip
+ , LPOLEINPLACEFRAMEINFO pFI)
+ {
+ RECTL rcl;
+
+ *ppIIPUIWindow=NULL;
+ *ppIIPFrame=m_oleinplaceframe;
+ m_oleinplaceframe->AddRef();
+
+ GetClientRect(m_pTen->m_hWnd, prcPos);
+ GetClientRect(m_pTen->m_hWnd, prcClip);
+
+/* *ppIIPFrame=(LPOLEINPLACEFRAME)g_pFR;
+ g_pFR->AddRef();*/
+
+/* if (NULL!=pDoc)
+ {
+ pDoc->QueryInterface(IID_IOleInPlaceUIWindow
+ , (PPVOID)ppIIPUIWindow);
+ }*/
+
+ //Now get the rectangles and frame information.
+ /*m_pTen->RectGet(&rcl, TRUE);
+ RECTFROMRECTL(*prcPos, rcl);
+ 0
+ //Include scroll position here.
+ OffsetRect(prcPos, -(int)m_pTen->m_pPG->m_xPos
+ , -(int)m_pTen->m_pPG->m_yPos);
+
+ SetRect(prcClip, 0, 0, 32767, 32767);
+*/
+ pFI->cb=sizeof(OLEINPLACEFRAMEINFO);
+ pFI->fMDIApp=FALSE;
+
+ pFI->hwndFrame=m_pTen->m_hWnd;
+
+ pFI->haccel=NULL;
+ pFI->cAccelEntries=0;
+
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::Scroll
+ *
+ * Purpose:
+ * Asks the container to scroll the document, and thus the object,
+ * by the given amounts in the sz parameter.
+ *
+ * Parameters:
+ * sz SIZE containing signed horizontal and vertical
+ * extents by which the container should scroll.
+ * These are in device units.
+ *
+ * Return Value:
+ * HRESULT NOERROR
+ */
+
+STDMETHODIMP tOleInPlaceSite::Scroll(SIZE sz)
+ {
+ /*int x, y;
+
+ x=m_pTen->m_pPG->m_xPos+sz.cx;
+ y=m_pTen->m_pPG->m_yPos+sz.cy;
+
+ SendScrollPosition(m_pTen->m_hWnd, WM_HSCROLL, x);
+ SendScrollPosition(m_pTen->m_hWnd, WM_VSCROLL, y);*/
+ return NOERROR;
+ }
+
+
+
+
+/*
+ * tOleInPlaceSite::OnPosRectChange
+ *
+ * Purpose:
+ * Informs the container that the in-place object was resized.
+ * The container must call IOleInPlaceObject::SetObjectRects.
+ * This does not change the site's rectangle in any case.
+ *
+ * Parameters:
+ * prcPos LPCRECT containing the new size of the object.
+ *
+ * Return Value:
+ * HRESULT NOERROR
+ */
+
+STDMETHODIMP tOleInPlaceSite::OnPosRectChange(LPCRECT prcPos)
+ {
+ if (NULL!=prcPos)
+ m_pTen->m_rcPos=*prcPos;
+
+ m_pTen->UpdateInPlaceObjectRects(prcPos, FALSE);
+ return NOERROR;
+ }
+