wined3d: Cleanup device_map_fixed_function_samplers().
[wine/gsoc_dplay.git] / dlls / mshtml / txtrange.c
blob5b5445191929dcbe26bd20c1db0868a7939b8250
1 /*
2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "config.h"
21 #include <stdarg.h>
22 #include <stdio.h>
24 #define COBJMACROS
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "winnls.h"
30 #include "ole2.h"
32 #include "wine/debug.h"
33 #include "wine/unicode.h"
35 #include "mshtml_private.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
39 typedef struct {
40 const IHTMLTxtRangeVtbl *lpHTMLTxtRangeVtbl;
42 LONG ref;
44 nsIDOMRange *nsrange;
45 } HTMLTxtRange;
47 #define HTMLTXTRANGE(x) ((IHTMLTxtRange*) &(x)->lpHTMLTxtRangeVtbl)
49 #define HTMLTXTRANGE_THIS(iface) DEFINE_THIS(HTMLTxtRange, HTMLTxtRange, iface)
51 static HRESULT WINAPI HTMLTxtRange_QueryInterface(IHTMLTxtRange *iface, REFIID riid, void **ppv)
53 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
55 *ppv = NULL;
57 if(IsEqualGUID(&IID_IUnknown, riid)) {
58 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
59 *ppv = HTMLTXTRANGE(This);
60 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
61 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
62 *ppv = HTMLTXTRANGE(This);
63 }else if(IsEqualGUID(&IID_IHTMLTxtRange, riid)) {
64 TRACE("(%p)->(IID_IHTMLTxtRange %p)\n", This, ppv);
65 *ppv = HTMLTXTRANGE(This);
68 if(*ppv) {
69 IUnknown_AddRef((IUnknown*)*ppv);
70 return S_OK;
73 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
74 return E_NOINTERFACE;
77 static ULONG WINAPI HTMLTxtRange_AddRef(IHTMLTxtRange *iface)
79 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
80 LONG ref = InterlockedIncrement(&This->ref);
82 TRACE("(%p) ref=%d\n", This, ref);
84 return ref;
87 static ULONG WINAPI HTMLTxtRange_Release(IHTMLTxtRange *iface)
89 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
90 LONG ref = InterlockedDecrement(&This->ref);
92 TRACE("(%p) ref=%d\n", This, ref);
94 if(!ref) {
95 if(This->nsrange)
96 nsISelection_Release(This->nsrange);
97 mshtml_free(This);
100 return ref;
103 static HRESULT WINAPI HTMLTxtRange_GetTypeInfoCount(IHTMLTxtRange *iface, UINT *pctinfo)
105 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
106 FIXME("(%p)->(%p)\n", This, pctinfo);
107 return E_NOTIMPL;
110 static HRESULT WINAPI HTMLTxtRange_GetTypeInfo(IHTMLTxtRange *iface, UINT iTInfo,
111 LCID lcid, ITypeInfo **ppTInfo)
113 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
114 FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
115 return E_NOTIMPL;
118 static HRESULT WINAPI HTMLTxtRange_GetIDsOfNames(IHTMLTxtRange *iface, REFIID riid,
119 LPOLESTR *rgszNames, UINT cNames,
120 LCID lcid, DISPID *rgDispId)
122 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
123 FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
124 lcid, rgDispId);
125 return E_NOTIMPL;
128 static HRESULT WINAPI HTMLTxtRange_Invoke(IHTMLTxtRange *iface, DISPID dispIdMember,
129 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
130 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
132 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
133 FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
134 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
135 return E_NOTIMPL;
138 static HRESULT WINAPI HTMLTxtRange_get_htmlText(IHTMLTxtRange *iface, BSTR *p)
140 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
142 TRACE("(%p)->(%p)\n", This, p);
144 *p = NULL;
146 if(This->nsrange) {
147 nsIDOMDocumentFragment *fragment;
148 nsresult nsres;
150 nsres = nsIDOMRange_CloneContents(This->nsrange, &fragment);
151 if(NS_SUCCEEDED(nsres)) {
152 const PRUnichar *nstext;
153 nsAString nsstr;
155 nsAString_Init(&nsstr, NULL);
156 nsnode_to_nsstring((nsIDOMNode*)fragment, &nsstr);
157 nsIDOMDocumentFragment_Release(fragment);
159 nsAString_GetData(&nsstr, &nstext, NULL);
160 *p = SysAllocString(nstext);
162 nsAString_Finish(&nsstr);
166 if(!*p) {
167 const WCHAR emptyW[] = {0};
168 *p = SysAllocString(emptyW);
171 TRACE("return %s\n", debugstr_w(*p));
172 return S_OK;
175 static HRESULT WINAPI HTMLTxtRange_put_text(IHTMLTxtRange *iface, BSTR v)
177 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
178 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
179 return E_NOTIMPL;
182 static HRESULT WINAPI HTMLTxtRange_get_text(IHTMLTxtRange *iface, BSTR *p)
184 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
186 TRACE("(%p)->(%p)\n", This, p);
188 *p = NULL;
190 if(This->nsrange) {
191 nsAString text_str;
192 nsresult nsres;
194 nsAString_Init(&text_str, NULL);
196 nsres = nsIDOMRange_ToString(This->nsrange, &text_str);
197 if(NS_SUCCEEDED(nsres)) {
198 const PRUnichar *nstext;
200 nsAString_GetData(&text_str, &nstext, NULL);
201 *p = SysAllocString(nstext);
202 }else {
203 ERR("ToString failed: %08x\n", nsres);
206 nsAString_Finish(&text_str);
209 if(!*p) {
210 static const WCHAR empty[] = {0};
211 *p = SysAllocString(empty);
214 return S_OK;
217 static HRESULT WINAPI HTMLTxtRange_parentElement(IHTMLTxtRange *iface, IHTMLElement **parent)
219 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
220 FIXME("(%p)->(%p)\n", This, parent);
221 return E_NOTIMPL;
224 static HRESULT WINAPI HTMLTxtRange_duplicate(IHTMLTxtRange *iface, IHTMLTxtRange **Duplicate)
226 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
227 FIXME("(%p)->(%p)\n", This, Duplicate);
228 return E_NOTIMPL;
231 static HRESULT WINAPI HTMLTxtRange_inRange(IHTMLTxtRange *iface, IHTMLTxtRange *Range,
232 VARIANT_BOOL *InRange)
234 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
235 FIXME("(%p)->(%p %p)\n", This, Range, InRange);
236 return E_NOTIMPL;
239 static HRESULT WINAPI HTMLTxtRange_isEqual(IHTMLTxtRange *iface, IHTMLTxtRange *Range,
240 VARIANT_BOOL *IsEqual)
242 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
243 FIXME("(%p)->()\n", This);
244 return E_NOTIMPL;
247 static HRESULT WINAPI HTMLTxtRange_scrollIntoView(IHTMLTxtRange *iface, VARIANT_BOOL fStart)
249 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
250 FIXME("(%p)->(%x)\n", This, fStart);
251 return E_NOTIMPL;
254 static HRESULT WINAPI HTMLTxtRange_collapse(IHTMLTxtRange *iface, VARIANT_BOOL Start)
256 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
257 FIXME("(%p)->(%x)\n", This, Start);
258 return E_NOTIMPL;
261 static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIANT_BOOL *Success)
263 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
264 FIXME("(%p)->(%s %p)\n", This, debugstr_w(Unit), Success);
265 return E_NOTIMPL;
268 static HRESULT WINAPI HTMLTxtRange_move(IHTMLTxtRange *iface, BSTR Unit,
269 long Count, long *ActualCount)
271 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
272 FIXME("(%p)->(%s %ld %p)\n", This, debugstr_w(Unit), Count, ActualCount);
273 return E_NOTIMPL;
276 static HRESULT WINAPI HTMLTxtRange_moveStart(IHTMLTxtRange *iface, BSTR Unit,
277 long Count, long *ActualCount)
279 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
280 FIXME("(%p)->(%s %ld %p)\n", This, debugstr_w(Unit), Count, ActualCount);
281 return E_NOTIMPL;
284 static HRESULT WINAPI HTMLTxtRange_moveEnd(IHTMLTxtRange *iface, BSTR Unit,
285 long Count, long *ActualCount)
287 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
288 FIXME("(%p)->(%s %ld %p)\n", This, debugstr_w(Unit), Count, ActualCount);
289 return E_NOTIMPL;
292 static HRESULT WINAPI HTMLTxtRange_select(IHTMLTxtRange *iface)
294 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
295 FIXME("(%p)->()\n", This);
296 return E_NOTIMPL;
299 static HRESULT WINAPI HTMLTxtRange_pasteHTML(IHTMLTxtRange *iface, BSTR html)
301 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
302 FIXME("(%p)->(%s)\n", This, debugstr_w(html));
303 return E_NOTIMPL;
306 static HRESULT WINAPI HTMLTxtRange_moveToElementText(IHTMLTxtRange *iface, IHTMLElement *element)
308 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
309 FIXME("(%p)->(%p)\n", This, element);
310 return E_NOTIMPL;
313 static HRESULT WINAPI HTMLTxtRange_setEndPoint(IHTMLTxtRange *iface, BSTR how,
314 IHTMLTxtRange *SourceRange)
316 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
317 FIXME("(%p)->(%s %p)\n", This, debugstr_w(how), SourceRange);
318 return E_NOTIMPL;
321 static HRESULT WINAPI HTMLTxtRange_compareEndPoints(IHTMLTxtRange *iface, BSTR how,
322 IHTMLTxtRange *SourceRange, long *ret)
324 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
325 FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(how), SourceRange, ret);
326 return E_NOTIMPL;
329 static HRESULT WINAPI HTMLTxtRange_findText(IHTMLTxtRange *iface, BSTR String,
330 long count, long Flags, VARIANT_BOOL *Success)
332 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
333 FIXME("(%p)->(%s %ld %08lx %p)\n", This, debugstr_w(String), count, Flags, Success);
334 return E_NOTIMPL;
337 static HRESULT WINAPI HTMLTxtRange_moveToPoint(IHTMLTxtRange *iface, long x, long y)
339 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
340 FIXME("(%p)->(%ld %ld)\n", This, x, y);
341 return E_NOTIMPL;
344 static HRESULT WINAPI HTMLTxtRange_getBookmark(IHTMLTxtRange *iface, BSTR *Bookmark)
346 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
347 FIXME("(%p)->(%p)\n", This, Bookmark);
348 return E_NOTIMPL;
351 static HRESULT WINAPI HTMLTxtRange_moveToBookmark(IHTMLTxtRange *iface, BSTR Bookmark,
352 VARIANT_BOOL *Success)
354 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
355 FIXME("(%p)->(%s %p)\n", This, debugstr_w(Bookmark), Success);
356 return E_NOTIMPL;
359 static HRESULT WINAPI HTMLTxtRange_queryCommandSupported(IHTMLTxtRange *iface, BSTR cmdID,
360 VARIANT_BOOL *pfRet)
362 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
363 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet);
364 return E_NOTIMPL;
367 static HRESULT WINAPI HTMLTxtRange_queryCommandEnabled(IHTMLTxtRange *iface, BSTR cmdID,
368 VARIANT_BOOL *pfRet)
370 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
371 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet);
372 return E_NOTIMPL;
375 static HRESULT WINAPI HTMLTxtRange_queryCommandState(IHTMLTxtRange *iface, BSTR cmdID,
376 VARIANT_BOOL *pfRet)
378 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
379 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet);
380 return E_NOTIMPL;
383 static HRESULT WINAPI HTMLTxtRange_queryCommandIndeterm(IHTMLTxtRange *iface, BSTR cmdID,
384 VARIANT_BOOL *pfRet)
386 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
387 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet);
388 return E_NOTIMPL;
391 static HRESULT WINAPI HTMLTxtRange_queryCommandText(IHTMLTxtRange *iface, BSTR cmdID,
392 BSTR *pcmdText)
394 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
395 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pcmdText);
396 return E_NOTIMPL;
399 static HRESULT WINAPI HTMLTxtRange_queryCommandValue(IHTMLTxtRange *iface, BSTR cmdID,
400 VARIANT *pcmdValue)
402 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
403 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pcmdValue);
404 return E_NOTIMPL;
407 static HRESULT WINAPI HTMLTxtRange_execCommand(IHTMLTxtRange *iface, BSTR cmdID,
408 VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet)
410 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
411 FIXME("(%p)->(%s %x v %p)\n", This, debugstr_w(cmdID), showUI, pfRet);
412 return E_NOTIMPL;
415 static HRESULT WINAPI HTMLTxtRange_execCommandShowHelp(IHTMLTxtRange *iface, BSTR cmdID,
416 VARIANT_BOOL *pfRet)
418 HTMLTxtRange *This = HTMLTXTRANGE_THIS(iface);
419 FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet);
420 return E_NOTIMPL;
423 #undef HTMLTXTRANGE_THIS
425 static const IHTMLTxtRangeVtbl HTMLTxtRangeVtbl = {
426 HTMLTxtRange_QueryInterface,
427 HTMLTxtRange_AddRef,
428 HTMLTxtRange_Release,
429 HTMLTxtRange_GetTypeInfoCount,
430 HTMLTxtRange_GetTypeInfo,
431 HTMLTxtRange_GetIDsOfNames,
432 HTMLTxtRange_Invoke,
433 HTMLTxtRange_get_htmlText,
434 HTMLTxtRange_put_text,
435 HTMLTxtRange_get_text,
436 HTMLTxtRange_parentElement,
437 HTMLTxtRange_duplicate,
438 HTMLTxtRange_inRange,
439 HTMLTxtRange_isEqual,
440 HTMLTxtRange_scrollIntoView,
441 HTMLTxtRange_collapse,
442 HTMLTxtRange_expand,
443 HTMLTxtRange_move,
444 HTMLTxtRange_moveStart,
445 HTMLTxtRange_moveEnd,
446 HTMLTxtRange_select,
447 HTMLTxtRange_pasteHTML,
448 HTMLTxtRange_moveToElementText,
449 HTMLTxtRange_setEndPoint,
450 HTMLTxtRange_compareEndPoints,
451 HTMLTxtRange_findText,
452 HTMLTxtRange_moveToPoint,
453 HTMLTxtRange_getBookmark,
454 HTMLTxtRange_moveToBookmark,
455 HTMLTxtRange_queryCommandSupported,
456 HTMLTxtRange_queryCommandEnabled,
457 HTMLTxtRange_queryCommandState,
458 HTMLTxtRange_queryCommandIndeterm,
459 HTMLTxtRange_queryCommandText,
460 HTMLTxtRange_queryCommandValue,
461 HTMLTxtRange_execCommand,
462 HTMLTxtRange_execCommandShowHelp
465 IHTMLTxtRange *HTMLTxtRange_Create(nsIDOMRange *nsrange)
467 HTMLTxtRange *ret = mshtml_alloc(sizeof(HTMLTxtRange));
469 ret->lpHTMLTxtRangeVtbl = &HTMLTxtRangeVtbl;
470 ret->ref = 1;
472 if(nsrange)
473 nsIDOMRange_AddRef(nsrange);
474 ret->nsrange = nsrange;
476 return HTMLTXTRANGE(ret);