]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/dnd.h
Changed two conflicting defines in defs.h
[wxWidgets.git] / include / wx / gtk / dnd.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: dnd.h
3 // Purpose: declaration of the wxDropTarget class
4 // Author: Robert Roebling
5 // RCS-ID: $Id$
6 // Copyright: (c) 1998 Vadim Zeitlin, Robert Roebling
7 // Licence: wxWindows license
8 ///////////////////////////////////////////////////////////////////////////////
9
10
11 #ifndef __GTKDNDH__
12 #define __GTKDNDH__
13
14 #ifdef __GNUG__
15 #pragma interface
16 #endif
17
18 #include "wx/defs.h"
19
20 #if wxUSE_DRAG_AND_DROP
21
22 #include "wx/object.h"
23 #include "wx/string.h"
24 #include "wx/dataobj.h"
25 #include "wx/cursor.h"
26 #include "wx/icon.h"
27 #include "wx/gdicmn.h"
28
29 //-------------------------------------------------------------------------
30 // classes
31 //-------------------------------------------------------------------------
32
33 class wxWindow;
34
35 class wxDropTarget;
36 class wxTextDropTarget;
37 class wxFileDropTarget;
38 class wxPrivateDropTarget;
39
40 class wxDropSource;
41
42 //-------------------------------------------------------------------------
43 // wxDropTarget
44 //-------------------------------------------------------------------------
45
46 class wxDropTarget: public wxObject
47 {
48 public:
49
50 wxDropTarget();
51 ~wxDropTarget();
52
53 /* may be overridden to react to events */
54 virtual void OnEnter();
55 virtual void OnLeave();
56
57 /* may be overridden to reject certain formats or drops
58 on certain areas. always returns TRUE by default
59 indicating that you'd accept the data from the drag. */
60 virtual bool OnMove( long x, long y );
61
62 /* has to be overridden to accept a drop event. call
63 IsSupported() to ask which formats are available
64 and then call RequestData() to indicate the format
65 you request. */
66 virtual bool OnDrop( long x, long y );
67
68 /* this gets called once the data has actually arrived. get
69 it with GetData(). this has to be overridden. */
70 virtual bool OnData( long x, long y );
71
72 /* called from within OnDrop() to request a certain format
73 from the drop event. */
74 bool RequestData( wxDataFormat format );
75
76 /* called to query what formats are available */
77 bool IsSupported( wxDataFormat format );
78
79 /* fill data with data from the dragging source */
80 bool GetData( wxDataObject *data );
81
82 virtual size_t GetFormatCount() const = 0;
83 virtual wxDataFormat GetFormat(size_t n) const = 0;
84
85 // implementation
86
87 void RegisterWidget( GtkWidget *widget );
88 void UnregisterWidget( GtkWidget *widget );
89
90 GdkDragContext *m_dragContext;
91 GtkWidget *m_dragWidget;
92 GtkSelectionData *m_dragData;
93 guint m_dragTime;
94 bool m_firstMotion; /* gdk has no "gdk_drag_enter" event */
95
96 void SetDragContext( GdkDragContext *dc ) { m_dragContext = dc; }
97 void SetDragWidget( GtkWidget *w ) { m_dragWidget = w; }
98 void SetDragData( GtkSelectionData *sd ) { m_dragData = sd; }
99 void SetDragTime( guint time ) { m_dragTime = time; }
100 };
101
102 //-------------------------------------------------------------------------
103 // wxTextDropTarget
104 //-------------------------------------------------------------------------
105
106 class wxTextDropTarget: public wxDropTarget
107 {
108 public:
109
110 wxTextDropTarget() {}
111
112 virtual bool OnData( long x, long y );
113
114 /* you have to override OnDropData to get at the text */
115 virtual bool OnDropText( long x, long y, const wxChar *text ) = 0;
116
117 virtual size_t GetFormatCount() const
118 { return 1; }
119 virtual wxDataFormat GetFormat(size_t n) const
120 { return wxDF_TEXT; }
121 };
122
123 //-------------------------------------------------------------------------
124 // wxPrivateDropTarget
125 //-------------------------------------------------------------------------
126
127 /*
128 class wxPrivateDropTarget: public wxDropTarget
129 {
130 public:
131
132 wxPrivateDropTarget();
133 wxPrivateDropTarget( const wxString &id );
134
135 virtual bool OnMove( long x, long y );
136 virtual bool OnDrop( long x, long y );
137 virtual bool OnData( long x, long y );
138
139 virtual bool OnDropData( long x, long y, void *data, size_t size ) = 0;
140
141 void SetId( const wxString& id ) { m_id = id; }
142 wxString GetId() { return m_id; }
143
144 private:
145
146 wxString m_id;
147 };
148 */
149
150 //----------------------------------------------------------------------------
151 // A drop target which accepts files (dragged from File Manager or Explorer)
152 //----------------------------------------------------------------------------
153
154 class wxFileDropTarget: public wxDropTarget
155 {
156 public:
157
158 wxFileDropTarget() {}
159
160 virtual bool OnData( long x, long y );
161
162 virtual bool OnDropFiles( long x, long y, size_t nFiles, const wxChar * const aszFiles[] ) = 0;
163
164 virtual size_t GetFormatCount() const
165 { return 1; }
166 virtual wxDataFormat GetFormat(size_t n) const
167 { return wxDF_FILENAME; }
168 };
169
170 //-------------------------------------------------------------------------
171 // wxDropSource
172 //-------------------------------------------------------------------------
173
174 enum wxDragResult
175 {
176 wxDragError, // error prevented the d&d operation from completing
177 wxDragNone, // drag target didn't accept the data
178 wxDragCopy, // the data was successfully copied
179 wxDragMove, // the data was successfully moved (MSW only)
180 wxDragCancel // the operation was cancelled by user (not an error)
181 };
182
183 class wxDropSource: public wxObject
184 {
185 public:
186
187 /* constructor. set data later with SetData() */
188 wxDropSource( wxWindow *win, const wxIcon &go = wxNullIcon, const wxIcon &stop = wxNullIcon );
189
190 wxDropSource( wxDataObject& data, wxWindow *win, const wxIcon &go = wxNullIcon, const wxIcon &stop = wxNullIcon );
191 ~wxDropSource();
192
193 void SetData( wxDataObject& data );
194
195 /* start drag action */
196 wxDragResult DoDragDrop( bool bAllowMove = FALSE );
197
198 /* override to give feedback */
199 virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; }
200
201 /* GTK implementation */
202
203 void RegisterWindow();
204 void UnregisterWindow();
205
206 GtkWidget *m_widget;
207 wxWindow *m_window;
208 wxDragResult m_retValue;
209 wxDataObject *m_data;
210
211 wxCursor m_defaultCursor;
212 wxCursor m_goaheadCursor;
213
214 wxIcon m_goIcon;
215 wxIcon m_stopIcon;
216
217 bool m_waiting;
218 };
219
220 #endif
221
222 // wxUSE_DRAG_AND_DROP
223
224 #endif
225 //__GTKDNDH__
226