SITE.H

/* 
* SITE.H
* View Site for Document Objects.
*
* Copyright (c)1995-1997 Microsoft Corporation, All Rights Reserved
*/


#ifndef _SITE_H_
#define _SITE_H_


class CImpIOleClientSite : public IOleClientSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;

public:
CImpIOleClientSite(class CSite *, IUnknown *);
~CImpIOleClientSite(void);

STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

STDMETHODIMP SaveObject(void);
STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
STDMETHODIMP GetContainer(LPOLECONTAINER *);
STDMETHODIMP ShowObject(void);
STDMETHODIMP OnShowWindow(BOOL);
STDMETHODIMP RequestNewObjectLayout(void);
};

typedef CImpIOleClientSite *PCImpIOleClientSite;



class CImpIAdviseSink : public IAdviseSink
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;

public:
CImpIAdviseSink(class CSite *, IUnknown *);
~CImpIAdviseSink(void);

STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM);
STDMETHODIMP_(void) OnViewChange(DWORD, LONG);
STDMETHODIMP_(void) OnRename(LPMONIKER);
STDMETHODIMP_(void) OnSave(void);
STDMETHODIMP_(void) OnClose(void);
};


typedef CImpIAdviseSink *PCImpIAdviseSink;


class CImpIOleInPlaceSite : public IOleInPlaceSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;

public:
CImpIOleInPlaceSite(class CSite *, IUnknown *);
~CImpIOleInPlaceSite(void);

STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

STDMETHODIMP GetWindow(HWND *);
STDMETHODIMP ContextSensitiveHelp(BOOL);
STDMETHODIMP CanInPlaceActivate(void);
STDMETHODIMP OnInPlaceActivate(void);
STDMETHODIMP OnUIActivate(void);
STDMETHODIMP GetWindowContext(LPOLEINPLACEFRAME *
, LPOLEINPLACEUIWINDOW *, LPRECT, LPRECT
, LPOLEINPLACEFRAMEINFO);
STDMETHODIMP Scroll(SIZE);
STDMETHODIMP OnUIDeactivate(BOOL);
STDMETHODIMP OnInPlaceDeactivate(void);
STDMETHODIMP DiscardUndoState(void);
STDMETHODIMP DeactivateAndUndo(void);
STDMETHODIMP OnPosRectChange(LPCRECT);
};

typedef CImpIOleInPlaceSite *PCImpIOleInPlaceSite;


class CImpIOleDocumentSite : public IOleDocumentSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;

public:
CImpIOleDocumentSite(class CSite *, IUnknown *);
~CImpIOleDocumentSite(void);

STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

STDMETHODIMP ActivateMe(IOleDocumentView *);
};

typedef CImpIOleDocumentSite *PCImpIOleDocumentSite;



/*
* The CSite class, a COM object with the interfaces IOleClientSite,
* IAdviseSink, IOleInPlaceSite, and IOleDocumentSite.
*/


class CSite : public IUnknown
{
friend CImpIOleClientSite;
friend CImpIAdviseSink;
friend CImpIOleInPlaceSite;
friend CImpIOleDocumentSite;

private:
ULONG m_cRef;
DWORD m_dwID;
HWND m_hWnd; //Client area window of parent

class CFrame *m_pFR;

BOOL m_fInitialized; //Something here?
LPSTORAGE m_pIStorage; //Storage for object
LPSTREAMm_pIStream;//Info stream for object

//Object interfaces
IUnknown *m_pObj;
IOleObject *m_pIOleObject;
IOleInPlaceObject *m_pIOleIPObject;
IOleDocumentView *m_pIOleDocView;

BOOL m_fDocObj; //Document object here?

//Our interfaces
PCImpIOleClientSite m_pImpIOleClientSite;
PCImpIAdviseSink m_pImpIAdviseSink;
PCImpIOleInPlaceSite m_pImpIOleIPSite;
PCImpIOleDocumentSite m_pImpIOleDocumentSite;


protected:
BOOL ObjectInitialize(LPUNKNOWN);

public:
CSite(DWORD, HWND, CFrame *);
~CSite(void);

//Gotta have an IUnknown for delegation
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);

BOOL Create(LPTSTR, IStorage *);
BOOL CreateStorage(IStorage *);
void Close(BOOL);
void Update(void);
void Destroy(IStorage *);
void Activate(LONG);
void UpdateObjectRects(void);
};


typedef CSite *PCSite;

#endif //_SITE_H_