]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/gtk/dnd.h
Added demonstration of busy cursor bug.
[wxWidgets.git] / include / wx / gtk / dnd.h
... / ...
CommitLineData
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
33class wxWindow;
34
35class wxDropTarget;
36class wxTextDropTarget;
37class wxFileDropTarget;
38class wxPrivateDropTarget;
39
40class wxDropSource;
41
42//-------------------------------------------------------------------------
43// wxDropTarget
44//-------------------------------------------------------------------------
45
46class wxDropTarget: public wxObject
47{
48public:
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( int x, int 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( int x, int 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( int x, int 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// implementation
83
84 void RegisterWidget( GtkWidget *widget );
85 void UnregisterWidget( GtkWidget *widget );
86
87 GdkDragContext *m_dragContext;
88 GtkWidget *m_dragWidget;
89 GtkSelectionData *m_dragData;
90 guint m_dragTime;
91 bool m_firstMotion; /* gdk has no "gdk_drag_enter" event */
92
93 void SetDragContext( GdkDragContext *dc ) { m_dragContext = dc; }
94 void SetDragWidget( GtkWidget *w ) { m_dragWidget = w; }
95 void SetDragData( GtkSelectionData *sd ) { m_dragData = sd; }
96 void SetDragTime( guint time ) { m_dragTime = time; }
97};
98
99//-------------------------------------------------------------------------
100// wxTextDropTarget
101//-------------------------------------------------------------------------
102
103class wxTextDropTarget: public wxDropTarget
104{
105public:
106
107 wxTextDropTarget() {}
108
109 virtual bool OnMove( int x, int y );
110 virtual bool OnDrop( int x, int y );
111 virtual bool OnData( int x, int y );
112
113 /* you have to override OnDropData to get at the text */
114 virtual bool OnDropText( int x, int y, const wxChar *text ) = 0;
115
116};
117
118//-------------------------------------------------------------------------
119// wxPrivateDropTarget
120//-------------------------------------------------------------------------
121
122class wxPrivateDropTarget: public wxDropTarget
123{
124public:
125
126 /* sets id to "application/myprogram" where "myprogram" is the
127 same as wxApp->GetAppName() */
128 wxPrivateDropTarget();
129 /* see SetId() below for explanation */
130 wxPrivateDropTarget( const wxString &id );
131
132 virtual bool OnMove( int x, int y );
133 virtual bool OnDrop( int x, int y );
134 virtual bool OnData( int x, int y );
135
136 /* you have to override OnDropData to get at the data */
137 virtual bool OnDropData( int x, int y, void *data, size_t size ) = 0;
138
139 /* the string ID identifies the format of clipboard or DnD data. a word
140 processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
141 to the clipboard - the latter with the Id "application/wxword" or
142 "image/png". */
143 void SetId( const wxString& id ) { m_id = id; }
144 wxString GetId() { return m_id; }
145
146private:
147
148 wxString m_id;
149};
150
151//----------------------------------------------------------------------------
152// A drop target which accepts files (dragged from File Manager or Explorer)
153//----------------------------------------------------------------------------
154
155class wxFileDropTarget: public wxDropTarget
156{
157public:
158
159 wxFileDropTarget() {}
160
161 virtual bool OnMove( int x, int y );
162 virtual bool OnDrop( int x, int y );
163 virtual bool OnData( int x, int y );
164
165 /* you have to override OnDropFiles to get at the file names */
166 virtual bool OnDropFiles( int x, int y, size_t nFiles, const wxChar * const aszFiles[] ) = 0;
167
168};
169
170//-------------------------------------------------------------------------
171// wxDropSource
172//-------------------------------------------------------------------------
173
174enum 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
183class wxDropSource: public wxObject
184{
185public:
186
187 /* constructor. set data later with SetData() */
188 wxDropSource( wxWindow *win, const wxIcon &go = wxNullIcon, const wxIcon &stop = wxNullIcon );
189
190 /* constructor for setting one data object */
191 wxDropSource( wxDataObject *data, wxWindow *win, const wxIcon &go = wxNullIcon, const wxIcon &stop = wxNullIcon );
192
193 /* constructor for setting several data objects via wxDataBroker */
194 wxDropSource( wxDataBroker *data, wxWindow *win );
195
196 ~wxDropSource();
197
198 /* set several dataobjects via wxDataBroker */
199 void SetData( wxDataBroker *data );
200
201 /* set one dataobject */
202 void SetData( wxDataObject *data );
203
204 /* start drag action */
205 wxDragResult DoDragDrop( bool bAllowMove = FALSE );
206
207 /* override to give feedback */
208 virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; }
209
210 /* GTK implementation */
211
212 void RegisterWindow();
213 void UnregisterWindow();
214
215 GtkWidget *m_widget;
216 wxWindow *m_window;
217 wxDragResult m_retValue;
218 wxDataBroker *m_data;
219
220 wxCursor m_defaultCursor;
221 wxCursor m_goaheadCursor;
222
223 wxIcon m_goIcon;
224 wxIcon m_stopIcon;
225
226 bool m_waiting;
227};
228
229#endif
230
231 // wxUSE_DRAG_AND_DROP
232
233#endif
234 //__GTKDNDH__
235