msdasql: Implement IColumnsRowset GetAvailableColumns.
[wine.git] / dlls / shell32 / dragdrophelper.c
blob8a41eee7b433ea585fc3fdaaa5f434c36a4241c2
1 /*
2 * file system folder
4 * Copyright 1997 Marcus Meissner
5 * Copyright 1998, 1999, 2002 Juergen Schmied
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.
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.
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
22 #include <stdarg.h>
23 #include <string.h>
25 #define COBJMACROS
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winreg.h"
30 #include "wingdi.h"
31 #include "winuser.h"
33 #include "objbase.h"
34 #include "ole2.h"
35 #include "shlguid.h"
36 #include "shlobj.h"
38 #include "wine/debug.h"
39 #include "debughlp.h"
41 WINE_DEFAULT_DEBUG_CHANNEL (shell);
43 /***********************************************************************
44 * IDropTargetHelper implementation
47 typedef struct
49 IDropTargetHelper IDropTargetHelper_iface;
50 IDragSourceHelper2 IDragSourceHelper2_iface;
51 LONG ref;
52 } dragdrophelper;
54 static inline dragdrophelper *impl_from_IDropTargetHelper(IDropTargetHelper *iface)
56 return CONTAINING_RECORD(iface, dragdrophelper, IDropTargetHelper_iface);
59 static inline dragdrophelper *impl_from_IDragSourceHelper2(IDragSourceHelper2 *iface)
61 return CONTAINING_RECORD(iface, dragdrophelper, IDragSourceHelper2_iface);
64 /**************************************************************************
65 * IDropTargetHelper_fnQueryInterface
67 static HRESULT WINAPI IDropTargetHelper_fnQueryInterface (IDropTargetHelper * iface, REFIID riid, LPVOID * ppvObj)
69 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
71 TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj);
73 *ppvObj = NULL;
75 if (IsEqualIID (riid, &IID_IUnknown) || IsEqualIID (riid, &IID_IDropTargetHelper))
77 *ppvObj = &This->IDropTargetHelper_iface;
79 else if (IsEqualIID (riid, &IID_IDragSourceHelper) || IsEqualIID (riid, &IID_IDragSourceHelper2))
81 *ppvObj = &This->IDragSourceHelper2_iface;
84 if (*ppvObj) {
85 IUnknown_AddRef ((IUnknown *) (*ppvObj));
86 TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj);
87 return S_OK;
89 FIXME ("%s: E_NOINTERFACE\n", shdebugstr_guid (riid));
90 return E_NOINTERFACE;
93 static ULONG WINAPI IDropTargetHelper_fnAddRef (IDropTargetHelper * iface)
95 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
96 ULONG refCount = InterlockedIncrement(&This->ref);
98 TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
100 return refCount;
103 static ULONG WINAPI IDropTargetHelper_fnRelease (IDropTargetHelper * iface)
105 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
106 ULONG refCount = InterlockedDecrement(&This->ref);
108 TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
110 if (!refCount) {
111 TRACE ("-- destroying (%p)\n", This);
112 LocalFree (This);
113 return 0;
115 return refCount;
118 static HRESULT WINAPI IDropTargetHelper_fnDragEnter (
119 IDropTargetHelper * iface,
120 HWND hwndTarget,
121 IDataObject* pDataObject,
122 POINT* ppt,
123 DWORD dwEffect)
125 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
126 FIXME ("(%p)->(%p %p %p 0x%08lx)\n", This,hwndTarget, pDataObject, ppt, dwEffect);
127 return E_NOTIMPL;
130 static HRESULT WINAPI IDropTargetHelper_fnDragLeave (IDropTargetHelper * iface)
132 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
133 FIXME ("(%p)->()\n", This);
134 return E_NOTIMPL;
137 static HRESULT WINAPI IDropTargetHelper_fnDragOver (IDropTargetHelper * iface, POINT* ppt, DWORD dwEffect)
139 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
140 FIXME ("(%p)->(%p 0x%08lx)\n", This, ppt, dwEffect);
141 return E_NOTIMPL;
144 static HRESULT WINAPI IDropTargetHelper_fnDrop (IDropTargetHelper * iface, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect)
146 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
147 FIXME ("(%p)->(%p %p 0x%08lx)\n", This, pDataObject, ppt, dwEffect);
148 return E_NOTIMPL;
151 static HRESULT WINAPI IDropTargetHelper_fnShow (IDropTargetHelper * iface, BOOL fShow)
153 dragdrophelper *This = impl_from_IDropTargetHelper(iface);
154 FIXME ("(%p)->(%u)\n", This, fShow);
155 return S_OK;
158 static const IDropTargetHelperVtbl DropTargetHelperVtbl =
160 IDropTargetHelper_fnQueryInterface,
161 IDropTargetHelper_fnAddRef,
162 IDropTargetHelper_fnRelease,
163 IDropTargetHelper_fnDragEnter,
164 IDropTargetHelper_fnDragLeave,
165 IDropTargetHelper_fnDragOver,
166 IDropTargetHelper_fnDrop,
167 IDropTargetHelper_fnShow
170 static HRESULT WINAPI DragSourceHelper2_QueryInterface (IDragSourceHelper2 * iface, REFIID riid, LPVOID * ppv)
172 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
173 return IDropTargetHelper_fnQueryInterface(&This->IDropTargetHelper_iface, riid, ppv);
176 static ULONG WINAPI DragSourceHelper2_AddRef (IDragSourceHelper2 * iface)
178 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
179 return IDropTargetHelper_fnAddRef(&This->IDropTargetHelper_iface);
182 static ULONG WINAPI DragSourceHelper2_Release (IDragSourceHelper2 * iface)
184 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
185 return IDropTargetHelper_fnRelease(&This->IDropTargetHelper_iface);
188 static HRESULT WINAPI DragSourceHelper2_InitializeFromBitmap(IDragSourceHelper2 *iface,
189 SHDRAGIMAGE *dragimage, IDataObject *object)
191 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
193 FIXME("(%p)->(%p, %p): stub\n", This, dragimage, object);
195 return E_NOTIMPL;
198 static HRESULT WINAPI DragSourceHelper2_InitializeFromWindow(IDragSourceHelper2 *iface, HWND hwnd,
199 POINT *pt, IDataObject *object)
201 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
203 FIXME("(%p)->(%p, %s, %p): stub\n", This, hwnd, wine_dbgstr_point(pt), object);
205 return E_NOTIMPL;
208 static HRESULT WINAPI DragSourceHelper2_SetFlags(IDragSourceHelper2 *iface, DWORD flags)
210 dragdrophelper *This = impl_from_IDragSourceHelper2(iface);
212 FIXME("(%p)->(%08lx): stub\n", This, flags);
214 return S_OK;
217 static const IDragSourceHelper2Vtbl DragSourceHelper2Vtbl =
219 DragSourceHelper2_QueryInterface,
220 DragSourceHelper2_AddRef,
221 DragSourceHelper2_Release,
222 DragSourceHelper2_InitializeFromBitmap,
223 DragSourceHelper2_InitializeFromWindow,
224 DragSourceHelper2_SetFlags
227 /**************************************************************************
228 * IDropTargetHelper_Constructor
230 HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
232 dragdrophelper *dth;
233 HRESULT hr;
235 TRACE ("outer=%p %s %p\n", pUnkOuter, shdebugstr_guid (riid), ppv);
237 if (!ppv)
238 return E_POINTER;
239 if (pUnkOuter)
240 return CLASS_E_NOAGGREGATION;
242 dth = LocalAlloc (LMEM_ZEROINIT, sizeof (dragdrophelper));
243 if (!dth) return E_OUTOFMEMORY;
245 dth->IDropTargetHelper_iface.lpVtbl = &DropTargetHelperVtbl;
246 dth->IDragSourceHelper2_iface.lpVtbl = &DragSourceHelper2Vtbl;
247 dth->ref = 1;
249 hr = IDropTargetHelper_QueryInterface (&dth->IDropTargetHelper_iface, riid, ppv);
250 IDropTargetHelper_Release (&dth->IDropTargetHelper_iface);
252 return hr;