wined3d: Trivial cleanups
[wine] / dlls / riched20 / richole.c
1 /*
2  * RichEdit GUIDs and OLE interface
3  *
4  * Copyright 2004 by Krzysztof Foltman
5  * Copyright 2004 Aric Stewart
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 #include <stdarg.h>
23
24 #define NONAMELESSUNION
25 #define NONAMELESSSTRUCT
26 #define COBJMACROS
27
28 #include "windef.h"
29 #include "winbase.h"
30 #include "wingdi.h"
31 #include "winuser.h"
32 #include "ole2.h"
33 #include "richole.h"
34 #include "editor.h"
35 #include "wine/debug.h"
36
37 WINE_DEFAULT_DEBUG_CHANNEL(richedit);
38
39 /* there is no way to be consistent across different sets of headers - mingw, Wine, Win32 SDK*/
40
41 /* FIXME: the next 6 lines should be in textserv.h */
42 #include "initguid.h"
43 #define TEXTSERV_GUID(name, l, w1, w2, b1, b2) \
44     DEFINE_GUID(name, l, w1, w2, b1, b2, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5)
45
46 TEXTSERV_GUID(IID_ITextServices, 0x8d33f740, 0xcf58, 0x11ce, 0xa8, 0x9d);
47 TEXTSERV_GUID(IID_ITextHost, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e);
48 TEXTSERV_GUID(IID_ITextHost2, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e);
49
50 typedef struct IRichEditOleImpl {
51     const IRichEditOleVtbl *lpVtbl;
52     LONG ref;
53
54     ME_TextEditor *editor;
55 } IRichEditOleImpl;
56
57 static HRESULT WINAPI
58 IRichEditOle_fnQueryInterface(IRichEditOle *me, REFIID riid, LPVOID *ppvObj)
59 {
60     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
61
62     TRACE("%p %s\n", This, debugstr_guid(riid) );
63
64     if (IsEqualGUID(riid, &IID_IUnknown) ||
65         IsEqualGUID(riid, &IID_IRichEditOle))
66     {
67         IRichEditOle_AddRef(me);
68         *ppvObj = (LPVOID) This;
69         return S_OK;
70     }
71     FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid) );
72  
73     return E_NOINTERFACE;   
74 }
75
76 static ULONG WINAPI
77 IRichEditOle_fnAddRef(IRichEditOle *me)
78 {
79     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
80     ULONG ref = InterlockedIncrement( &This->ref );
81
82     TRACE("%p ref = %lu\n", This, ref);
83
84     return ref;
85 }
86
87 static ULONG WINAPI
88 IRichEditOle_fnRelease(IRichEditOle *me)
89 {
90     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
91     ULONG ref = InterlockedDecrement(&This->ref);
92
93     TRACE ("%p ref=%lu\n", This, ref);
94
95     if (!ref)
96     {
97         TRACE ("Destroying %p\n", This);
98         HeapFree(GetProcessHeap(),0,This);
99     }
100     return ref;
101 }
102
103 static HRESULT WINAPI
104 IRichEditOle_fnActivateAs(IRichEditOle *me, REFCLSID rclsid, REFCLSID rclsidAs)
105 {
106     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
107     FIXME("stub %p\n",This);
108     return E_NOTIMPL;
109 }
110
111 static HRESULT WINAPI
112 IRichEditOle_fnContextSensitiveHelp(IRichEditOle *me, BOOL fEnterMode)
113 {
114     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
115     FIXME("stub %p\n",This);
116     return E_NOTIMPL;
117 }
118
119 static HRESULT WINAPI
120 IRichEditOle_fnConvertObject(IRichEditOle *me, LONG iob,
121                REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew)
122 {
123     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
124     FIXME("stub %p\n",This);
125     return E_NOTIMPL;
126 }
127
128 static HRESULT WINAPI
129 IRichEditOle_fnGetClientSite(IRichEditOle *me,
130                LPOLECLIENTSITE *lplpolesite)
131 {
132     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
133     FIXME("stub %p\n",This);
134     return E_NOTIMPL;
135 }
136
137 static HRESULT WINAPI
138 IRichEditOle_fnGetClipboardData(IRichEditOle *me, CHARRANGE *lpchrg,
139                DWORD reco, LPDATAOBJECT *lplpdataobj)
140 {
141     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
142     CHARRANGE tmpchrg;
143
144     TRACE("(%p,%p,%ld)\n",This, lpchrg, reco);
145     if(!lplpdataobj)
146         return E_INVALIDARG;
147     if(!lpchrg) {
148         ME_GetSelection(This->editor, (int*)&tmpchrg.cpMin, (int*)&tmpchrg.cpMax);
149         lpchrg = &tmpchrg;
150     }
151     return ME_GetDataObject(This->editor, lpchrg, lplpdataobj);
152 }
153
154 static LONG WINAPI IRichEditOle_fnGetLinkCount(IRichEditOle *me)
155 {
156     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
157     FIXME("stub %p\n",This);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI
162 IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob,
163                REOBJECT *lpreobject, DWORD dwFlags)
164 {
165     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
166     FIXME("stub %p\n",This);
167     return E_NOTIMPL;
168 }
169
170 static LONG WINAPI
171 IRichEditOle_fnGetObjectCount(IRichEditOle *me)
172 {
173     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
174     FIXME("stub %p\n",This);
175     return E_NOTIMPL;
176 }
177
178 static HRESULT WINAPI
179 IRichEditOle_fnHandsOffStorage(IRichEditOle *me, LONG iob)
180 {
181     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
182     FIXME("stub %p\n",This);
183     return E_NOTIMPL;
184 }
185
186 static HRESULT WINAPI
187 IRichEditOle_fnImportDataObject(IRichEditOle *me, LPDATAOBJECT lpdataobj,
188                CLIPFORMAT cf, HGLOBAL hMetaPict)
189 {
190     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
191     FIXME("stub %p\n",This);
192     return E_NOTIMPL;
193 }
194
195 static HRESULT WINAPI
196 IRichEditOle_fnInPlaceDeactivate(IRichEditOle *me)
197 {
198     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
199     FIXME("stub %p\n",This);
200     return E_NOTIMPL;
201 }
202
203 static HRESULT WINAPI
204 IRichEditOle_fnInsertObject(IRichEditOle *me, REOBJECT *lpreobject)
205 {
206     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
207     FIXME("stub %p\n",This);
208     return E_NOTIMPL;
209 }
210
211 static HRESULT WINAPI IRichEditOle_fnSaveCompleted(IRichEditOle *me, LONG iob,
212                LPSTORAGE lpstg)
213 {
214     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
215     FIXME("stub %p\n",This);
216     return E_NOTIMPL;
217 }
218
219 static HRESULT WINAPI
220 IRichEditOle_fnSetDvaspect(IRichEditOle *me, LONG iob, DWORD dvaspect)
221 {
222     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
223     FIXME("stub %p\n",This);
224     return E_NOTIMPL;
225 }
226
227 static HRESULT WINAPI IRichEditOle_fnSetHostNames(IRichEditOle *me,
228                LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj)
229 {
230     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
231     FIXME("stub %p %s %s\n",This, lpstrContainerApp, lpstrContainerObj);
232     return E_NOTIMPL;
233 }
234
235 static HRESULT WINAPI
236 IRichEditOle_fnSetLinkAvailable(IRichEditOle *me, LONG iob, BOOL fAvailable)
237 {
238     IRichEditOleImpl *This = (IRichEditOleImpl *)me;
239     FIXME("stub %p\n",This);
240     return E_NOTIMPL;
241 }
242
243 static const IRichEditOleVtbl revt = {
244     IRichEditOle_fnQueryInterface,
245     IRichEditOle_fnAddRef,
246     IRichEditOle_fnRelease,
247     IRichEditOle_fnGetClientSite,
248     IRichEditOle_fnGetObjectCount,
249     IRichEditOle_fnGetLinkCount,
250     IRichEditOle_fnGetObject,
251     IRichEditOle_fnInsertObject,
252     IRichEditOle_fnConvertObject,
253     IRichEditOle_fnActivateAs,
254     IRichEditOle_fnSetHostNames,
255     IRichEditOle_fnSetLinkAvailable,
256     IRichEditOle_fnSetDvaspect,
257     IRichEditOle_fnHandsOffStorage,
258     IRichEditOle_fnSaveCompleted,
259     IRichEditOle_fnInPlaceDeactivate,
260     IRichEditOle_fnContextSensitiveHelp,
261     IRichEditOle_fnGetClipboardData,
262     IRichEditOle_fnImportDataObject
263 };
264
265 LRESULT CreateIRichEditOle(ME_TextEditor *editor, LPVOID *ppObj)
266 {
267     IRichEditOleImpl *reo;
268
269     reo = HeapAlloc(GetProcessHeap(), 0, sizeof(IRichEditOleImpl));
270     if (!reo)
271         return 0;
272
273     reo->lpVtbl = &revt;
274     reo->ref = 1;
275     reo->editor = editor;
276     TRACE("Created %p\n",reo);
277     *ppObj = (LPVOID) reo;
278
279     return 1;
280 }