gdiplus: Implement transform matrix for line gradient brushes.
[wine.git] / dlls / oledb32 / dslocator.c
blob5c4bdad09715fcc88abc5e92f40353d955a802a3
1 /* Data Links
3 * Copyright 2013 Alistair Leslie-Hughes
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include <stdarg.h>
20 #include <string.h>
22 #define COBJMACROS
24 #include "windef.h"
25 #include "winbase.h"
26 #include "objbase.h"
27 #include "oleauto.h"
28 #include "winerror.h"
29 #include "oledb.h"
30 #include "oledberr.h"
31 #include "msdasc.h"
33 #include "oledb_private.h"
35 #include "wine/debug.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(oledb);
40 typedef struct DSLocatorImpl
42 IDataSourceLocator IDataSourceLocator_iface;
43 IDataInitialize IDataInitialize_iface;
44 LONG ref;
46 HWND hwnd;
47 } DSLocatorImpl;
49 static inline DSLocatorImpl *impl_from_IDataSourceLocator( IDataSourceLocator *iface )
51 return CONTAINING_RECORD(iface, DSLocatorImpl, IDataSourceLocator_iface);
54 static inline DSLocatorImpl *impl_from_IDataInitialize(IDataInitialize *iface)
56 return CONTAINING_RECORD(iface, DSLocatorImpl, IDataInitialize_iface);
59 static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID riid, void **ppvoid)
61 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
62 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid),ppvoid);
64 *ppvoid = NULL;
66 if (IsEqualIID(riid, &IID_IUnknown) ||
67 IsEqualIID(riid, &IID_IDispatch) ||
68 IsEqualIID(riid, &IID_IDataSourceLocator))
70 *ppvoid = &This->IDataSourceLocator_iface;
72 else if (IsEqualIID(riid, &IID_IDataInitialize))
74 *ppvoid = &This->IDataInitialize_iface;
76 else if (IsEqualIID(riid, &IID_IRunnableObject))
78 TRACE("IID_IRunnableObject returning NULL\n");
79 return E_NOINTERFACE;
82 if(*ppvoid)
84 IUnknown_AddRef( (IUnknown*)*ppvoid );
85 return S_OK;
88 FIXME("interface %s not implemented\n", debugstr_guid(riid));
89 return E_NOINTERFACE;
92 static ULONG WINAPI dslocator_AddRef(IDataSourceLocator *iface)
94 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
95 TRACE("(%p)->%u\n",This,This->ref);
96 return InterlockedIncrement(&This->ref);
99 static ULONG WINAPI dslocator_Release(IDataSourceLocator *iface)
101 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
102 ULONG ref = InterlockedDecrement(&This->ref);
104 TRACE("(%p)->%u\n",This,ref+1);
106 if (!ref)
108 heap_free(This);
111 return ref;
114 static HRESULT WINAPI dslocator_GetTypeInfoCount(IDataSourceLocator *iface, UINT *pctinfo)
116 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
118 FIXME("(%p)->()\n", This);
120 return E_NOTIMPL;
123 static HRESULT WINAPI dslocator_GetTypeInfo(IDataSourceLocator *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
125 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
127 FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
129 return E_NOTIMPL;
132 static HRESULT WINAPI dslocator_GetIDsOfNames(IDataSourceLocator *iface, REFIID riid, LPOLESTR *rgszNames,
133 UINT cNames, LCID lcid, DISPID *rgDispId)
135 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
137 FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
139 return E_NOTIMPL;
142 static HRESULT WINAPI dslocator_Invoke(IDataSourceLocator *iface, DISPID dispIdMember, REFIID riid,
143 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
145 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
147 FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
148 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
150 return E_NOTIMPL;
153 static HRESULT WINAPI dslocator_get_hWnd(IDataSourceLocator *iface, COMPATIBLE_LONG *phwndParent)
155 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
157 TRACE("(%p)->(%p)\n",This, phwndParent);
159 *phwndParent = (COMPATIBLE_LONG)This->hwnd;
161 return S_OK;
164 static HRESULT WINAPI dslocator_put_hWnd(IDataSourceLocator *iface, COMPATIBLE_LONG hwndParent)
166 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
168 TRACE("(%p)->(%p)\n",This, (HWND)hwndParent);
170 This->hwnd = (HWND)hwndParent;
172 return S_OK;
175 static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch **ppADOConnection)
177 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
179 FIXME("(%p)->(%p)\n",This, ppADOConnection);
181 return E_NOTIMPL;
184 static HRESULT WINAPI dslocator_PromptEdit(IDataSourceLocator *iface, IDispatch **ppADOConnection, VARIANT_BOOL *success)
186 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
188 FIXME("(%p)->(%p %p)\n",This, ppADOConnection, success);
190 return E_NOTIMPL;
193 static const IDataSourceLocatorVtbl DSLocatorVtbl =
195 dslocator_QueryInterface,
196 dslocator_AddRef,
197 dslocator_Release,
198 dslocator_GetTypeInfoCount,
199 dslocator_GetTypeInfo,
200 dslocator_GetIDsOfNames,
201 dslocator_Invoke,
202 dslocator_get_hWnd,
203 dslocator_put_hWnd,
204 dslocator_PromptNew,
205 dslocator_PromptEdit
208 static HRESULT WINAPI datainitialize_QueryInterface(IDataInitialize *iface, REFIID riid, void **obj)
210 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
211 return IDataSourceLocator_QueryInterface(&This->IDataSourceLocator_iface, riid, obj);
214 static ULONG WINAPI datainitialize_AddRef(IDataInitialize *iface)
216 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
217 return IDataSourceLocator_AddRef(&This->IDataSourceLocator_iface);
220 static ULONG WINAPI datainitialize_Release(IDataInitialize *iface)
222 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
223 return IDataSourceLocator_Release(&This->IDataSourceLocator_iface);
226 static HRESULT WINAPI datainitialize_GetDataSource(IDataInitialize *iface,
227 IUnknown *outer, DWORD context, LPWSTR initstring, REFIID riid, IUnknown **datasource)
229 TRACE("(%p)->(%p %#x %s %s %p)\n", iface, outer, context, debugstr_w(initstring), debugstr_guid(riid),
230 datasource);
232 return get_data_source(outer, context, initstring, riid, datasource);
235 static HRESULT WINAPI datainitialize_GetInitializationString(IDataInitialize *iface, IUnknown *datasource,
236 boolean include_password, LPWSTR *initstring)
238 FIXME("(%p)->(%d %p): stub\n", iface, include_password, initstring);
239 return E_NOTIMPL;
242 static HRESULT WINAPI datainitialize_CreateDBInstance(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
243 DWORD clsctx, LPWSTR reserved, REFIID riid, IUnknown **datasource)
245 FIXME("(%p)->(%s %p %#x %p %s %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
246 debugstr_guid(riid), datasource);
247 return E_NOTIMPL;
250 static HRESULT WINAPI datainitialize_CreateDBInstanceEx(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
251 DWORD clsctx, LPWSTR reserved, COSERVERINFO *server_info, DWORD cmq, MULTI_QI *results)
253 FIXME("(%p)->(%s %p %#x %p %p %u %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
254 server_info, cmq, results);
255 return E_NOTIMPL;
258 static HRESULT WINAPI datainitialize_LoadStringFromStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR *initstring)
260 FIXME("(%p)->(%s %p): stub\n", iface, debugstr_w(filename), initstring);
261 return E_NOTIMPL;
264 static HRESULT WINAPI datainitialize_WriteStringToStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR initstring,
265 DWORD disposition)
267 FIXME("(%p)->(%s %s %#x): stub\n", iface, debugstr_w(filename), debugstr_w(initstring), disposition);
268 return E_NOTIMPL;
271 static const IDataInitializeVtbl ds_datainitialize_vtbl =
273 datainitialize_QueryInterface,
274 datainitialize_AddRef,
275 datainitialize_Release,
276 datainitialize_GetDataSource,
277 datainitialize_GetInitializationString,
278 datainitialize_CreateDBInstance,
279 datainitialize_CreateDBInstanceEx,
280 datainitialize_LoadStringFromStorage,
281 datainitialize_WriteStringToStorage,
284 HRESULT create_dslocator(IUnknown *outer, void **obj)
286 DSLocatorImpl *This;
288 TRACE("(%p, %p)\n", outer, obj);
290 *obj = NULL;
292 if(outer) return CLASS_E_NOAGGREGATION;
294 This = heap_alloc(sizeof(*This));
295 if(!This) return E_OUTOFMEMORY;
297 This->IDataSourceLocator_iface.lpVtbl = &DSLocatorVtbl;
298 This->IDataInitialize_iface.lpVtbl = &ds_datainitialize_vtbl;
299 This->ref = 1;
300 This->hwnd = 0;
302 *obj = &This->IDataSourceLocator_iface;
304 return S_OK;