/* * RichEdit GUIDs and OLE interface * * Copyright 2004 by Krzysztof Foltman * Copyright 2004 Aric Stewart * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #define NONAMELESSUNION #define NONAMELESSSTRUCT #define COBJMACROS #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "ole2.h" #include "richole.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(richedit); typedef struct IRichEditOleImpl { const IRichEditOleVtbl *lpVtbl; LONG ref; } IRichEditOleImpl; /* there is no way to be consistent across different sets of headers - mingw, Wine, Win32 SDK*/ /* FIXME: the next 6 lines should be in textserv.h */ #define TEXTSERV_GUID(name, l, w1, w2, b1, b2) \ GUID name = { l, w1, w2, {b1, b2, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}} TEXTSERV_GUID(IID_ITextServices, 0x8d33f740, 0xcf58, 0x11ce, 0xa8, 0x9d); TEXTSERV_GUID(IID_ITextHost, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e); TEXTSERV_GUID(IID_ITextHost2, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e); static HRESULT WINAPI IRichEditOle_fnQueryInterface(IRichEditOle *me, REFIID riid, LPVOID *ppvObj) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; TRACE("%p %s\n", This, debugstr_guid(riid) ); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IRichEditOle)) { IRichEditOle_AddRef(me); *ppvObj = (LPVOID) This; return S_OK; } FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid) ); return E_NOINTERFACE; } static ULONG WINAPI IRichEditOle_fnAddRef(IRichEditOle *me) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; ULONG ref = InterlockedIncrement( &This->ref ); TRACE("%p ref = %lu\n", This, ref); return ref; } static ULONG WINAPI IRichEditOle_fnRelease(IRichEditOle *me) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; ULONG ref = InterlockedDecrement(&This->ref); TRACE ("%p ref=%lu\n", This, ref); if (!ref) { TRACE ("Destroying %p\n", This); HeapFree(GetProcessHeap(),0,This); } return ref; } static HRESULT WINAPI IRichEditOle_fnActivateAs(IRichEditOle *me, REFCLSID rclsid, REFCLSID rclsidAs) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnContextSensitiveHelp(IRichEditOle *me, BOOL fEnterMode) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnConvertObject(IRichEditOle *me, LONG iob, REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnGetClientSite(IRichEditOle *me, LPOLECLIENTSITE *lplpolesite) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnGetClipboardData(IRichEditOle *me, CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static LONG WINAPI IRichEditOle_fnGetLinkCount(IRichEditOle *me) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, REOBJECT *lpreobject, DWORD dwFlags) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static LONG WINAPI IRichEditOle_fnGetObjectCount(IRichEditOle *me) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnHandsOffStorage(IRichEditOle *me, LONG iob) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnImportDataObject(IRichEditOle *me, LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnInPlaceDeactivate(IRichEditOle *me) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnInsertObject(IRichEditOle *me, REOBJECT *lpreobject) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnSaveCompleted(IRichEditOle *me, LONG iob, LPSTORAGE lpstg) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnSetDvaspect(IRichEditOle *me, LONG iob, DWORD dvaspect) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnSetHostNames(IRichEditOle *me, LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p %s %s\n",This, lpstrContainerApp, lpstrContainerObj); return E_NOTIMPL; } static HRESULT WINAPI IRichEditOle_fnSetLinkAvailable(IRichEditOle *me, LONG iob, BOOL fAvailable) { IRichEditOleImpl *This = (IRichEditOleImpl *)me; FIXME("stub %p\n",This); return E_NOTIMPL; } static const IRichEditOleVtbl revt = { IRichEditOle_fnQueryInterface, IRichEditOle_fnAddRef, IRichEditOle_fnRelease, IRichEditOle_fnGetClientSite, IRichEditOle_fnGetObjectCount, IRichEditOle_fnGetLinkCount, IRichEditOle_fnGetObject, IRichEditOle_fnInsertObject, IRichEditOle_fnConvertObject, IRichEditOle_fnActivateAs, IRichEditOle_fnSetHostNames, IRichEditOle_fnSetLinkAvailable, IRichEditOle_fnSetDvaspect, IRichEditOle_fnHandsOffStorage, IRichEditOle_fnSaveCompleted, IRichEditOle_fnInPlaceDeactivate, IRichEditOle_fnContextSensitiveHelp, IRichEditOle_fnGetClipboardData, IRichEditOle_fnImportDataObject }; LRESULT CreateIRichEditOle(LPVOID *ppObj) { IRichEditOleImpl *reo; reo = HeapAlloc(GetProcessHeap(), 0, sizeof(IRichEditOleImpl)); if (!reo) return 0; reo->lpVtbl = &revt; reo->ref = 1; TRACE("Created %p\n",reo); *ppObj = (LPVOID) reo; return 1; }