1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef _nsNativeDragSource_h_
6 #define _nsNativeDragSource_h_
7 
8 #include "nscore.h"
9 #include "nsIDOMDataTransfer.h"
10 #include "nsCOMPtr.h"
11 #include <ole2.h>
12 #include <oleidl.h>
13 #include "mozilla/Attributes.h"
14 
15 //class nsIDragSource;
16 
17 /*
18  * nsNativeDragSource implements the IDropSource interface and gets
19  * most of its behavior from the associated adapter (m_dragDrop).
20  */
21 class nsNativeDragSource final : public IDropSource
22 {
23 public:
24 
25   // construct an nsNativeDragSource referencing adapter
26   // nsNativeDragSource(nsIDragSource * adapter);
27   nsNativeDragSource(nsIDOMDataTransfer* aDataTransfer);
28   ~nsNativeDragSource();
29 
30   // IUnknown methods - see iunknown.h for documentation
31 
32   STDMETHODIMP QueryInterface(REFIID, void**);
33   STDMETHODIMP_(ULONG) AddRef();
34   STDMETHODIMP_(ULONG) Release();
35 
36   // IDropSource methods - see idropsrc.h for documentation
37 
38   // Return DRAGDROP_S_USEDEFAULTCURSORS if this object lets OLE provide
39   // default cursors, otherwise return NOERROR. This method gets called in
40   // response to changes that the target makes to dEffect (DragEnter,
41   // DragOver).
42   STDMETHODIMP GiveFeedback(DWORD dEffect);
43 
44   // This method gets called if there is any change in the mouse or key
45   // state.  Return DRAGDROP_S_CANCEL to stop the drag, DRAGDROP_S_DROP
46   // to execute the drop, otherwise NOERROR.
47   STDMETHODIMP QueryContinueDrag(BOOL fESC, DWORD grfKeyState);
48 
UserCancelled()49   bool UserCancelled() { return mUserCancelled; }
50 
51 protected:
52   // Reference count
53   ULONG m_cRef;
54 
55   // Data object, hold information about cursor state
56   nsCOMPtr<nsIDOMDataTransfer> mDataTransfer;
57 
58   // Custom drag cursor
59   HCURSOR m_hCursor;
60 
61   // true if the user cancelled the drag by pressing escape
62   bool mUserCancelled;
63 };
64 
65 #endif // _nsNativeDragSource_h_
66 
67