forked from extnet/Ext.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDropZone.cs
More file actions
267 lines (244 loc) · 13.6 KB
/
DropZone.cs
File metadata and controls
267 lines (244 loc) · 13.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
/********
* @version : 2.1.1 - Ext.NET Pro License
* @author : Ext.NET, Inc. http://www.ext.net/
* @date : 2012-12-10
* @copyright : Copyright (c) 2007-2012, Ext.NET, Inc. (http://www.ext.net/). All rights reserved.
* @license : See license.txt and http://www.ext.net/license/.
********/
using System.ComponentModel;
using System.Drawing;
using System.Web.UI;
namespace Ext.Net
{
/// <summary>
/// This class provides a container DD instance that allows dropping on multiple child target nodes.
/// By default, this class requires that child nodes accepting drop are registered with Ext.dd.Registry. However a simpler way to allow a DropZone to manage any number of target elements is to configure the DropZone with an implementation of getTargetFromEvent which interrogates the passed mouse event to see if it has taken place within an element, or class of elements. This is easily done by using the event's getTarget method to identify a node based on a Ext.DomQuery selector.
/// Once the DropZone has detected through calling getTargetFromEvent, that the mouse is over a drop target, that target is passed as the first parameter to onNodeEnter, onNodeOver, onNodeOut, onNodeDrop. You may configure the instance of DropZone with implementations of these methods to provide application-specific behaviour for these events to update both application state, and UI state.
/// </summary>
[ToolboxItem(true)]
[Designer(typeof(EmptyDesigner))]
[ToolboxData("<{0}:DropZone runat=\"server\"></{0}:DropZone>")]
[ToolboxBitmap(typeof(DropZone), "Build.ToolboxIcons.DragDrop.bmp")]
[Designer(typeof(EmptyDesigner))]
[Description("This class provides a container DD instance that allows dropping on multiple child target nodes.")]
public partial class DropZone : DropTarget
{
/// <summary>
///
/// </summary>
[Category("0. About")]
[Description("")]
public override string InstanceOf
{
get
{
return "Ext.dd.DropZone";
}
}
private JFunction getTargetFromEvent;
/// <summary>
/// Returns a custom data object associated with the DOM node that is the target of the event. By default this looks up the event target in the Ext.dd.Registry, although you can override this method to provide your own custom lookup.
/// Parameters:
/// e : The event
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Returns a custom data object associated with the DOM node that is the target of the event. By default this looks up the event target in the Ext.dd.Registry, although you can override this method to provide your own custom lookup.")]
public virtual JFunction GetTargetFromEvent
{
get
{
if (this.getTargetFromEvent == null)
{
this.getTargetFromEvent = new JFunction();
if (!this.DesignMode)
{
this.getTargetFromEvent.Args = new string[] {"e"};
}
}
return this.getTargetFromEvent;
}
}
private JFunction onContainerDrop;
/// <summary>
/// Called when the DropZone determines that a Ext.dd.DragSource has been dropped on it, but not on any of its registered drop nodes. The default implementation returns false, so it should be overridden to provide the appropriate processing of the drop event if you need the drop zone itself to be able to accept drops. It should return true when valid so that the drag source's repair action does not run.
/// Parameters:
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called when the DropZone determines that a Ext.dd.DragSource has been dropped on it, but not on any of its registered drop nodes. The default implementation returns false, so it should be overridden to provide the appropriate processing of the drop event if you need the drop zone itself to be able to accept drops. It should return true when valid so that the drag source's repair action does not run.")]
public virtual JFunction OnContainerDrop
{
get
{
if (this.onContainerDrop == null)
{
this.onContainerDrop = new JFunction();
if (!this.DesignMode)
{
this.onContainerDrop.Args = new string[] {"source", "e", "data"};
}
}
return this.onContainerDrop;
}
}
private JFunction onContainerOver;
/// <summary>
/// Called while the DropZone determines that a Ext.dd.DragSource is being dragged over it, but not over any of its registered drop nodes. The default implementation returns this.dropNotAllowed, so it should be overridden to provide the proper feedback if necessary.
/// Parameters:
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called while the DropZone determines that a Ext.dd.DragSource is being dragged over it, but not over any of its registered drop nodes. The default implementation returns this.dropNotAllowed, so it should be overridden to provide the proper feedback if necessary.")]
public virtual JFunction OnContainerOver
{
get
{
if (this.onContainerOver == null)
{
this.onContainerOver = new JFunction();
if (!this.DesignMode)
{
this.onContainerOver.Args = new string[] {"source", "e", "data"};
}
}
return this.onContainerOver;
}
}
private JFunction onNodeDrop;
/// <summary>
/// Called when the DropZone determines that a Ext.dd.DragSource has been dropped onto the drop node. The default implementation returns false, so it should be overridden to provide the appropriate processing of the drop event and return true so that the drag source's repair action does not run.
/// Parameters:
/// nodeData : The custom data associated with the drop node (this is the same value returned from getTargetFromEvent for this node)
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called when the DropZone determines that a Ext.dd.DragSource has been dropped onto the drop node. The default implementation returns false, so it should be overridden to provide the appropriate processing of the drop event and return true so that the drag source's repair action does not run.")]
public virtual JFunction OnNodeDrop
{
get
{
if (this.onNodeDrop == null)
{
this.onNodeDrop = new JFunction();
if (!this.DesignMode)
{
this.onNodeDrop.Args = new string[] {"nodeData", "source", "e", "data"};
}
}
return this.onNodeDrop;
}
}
private JFunction onNodeEnter;
/// <summary>
/// Called when the DropZone determines that a Ext.dd.DragSource has entered a drop node that has either been registered or detected by a configured implementation of getTargetFromEvent. This method has no default implementation and should be overridden to provide node-specific processing if necessary.
/// Parameters:
/// nodeData : The custom data associated with the drop node (this is the same value returned from getTargetFromEvent for this node)
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called when the DropZone determines that a Ext.dd.DragSource has entered a drop node that has either been registered or detected by a configured implementation of getTargetFromEvent. This method has no default implementation and should be overridden to provide node-specific processing if necessary.")]
public virtual JFunction OnNodeEnter
{
get
{
if (this.onNodeEnter == null)
{
this.onNodeEnter = new JFunction();
if (!this.DesignMode)
{
this.onNodeEnter.Args = new string[] {"nodeData", "source", "e", "data"};
}
}
return this.onNodeEnter;
}
}
private JFunction onNodeOut;
/// <summary>
/// Called when the DropZone determines that a Ext.dd.DragSource has been dragged out of the drop node without dropping. This method has no default implementation and should be overridden to provide node-specific processing if necessary.
/// Parameters:
/// nodeData : The custom data associated with the drop node (this is the same value returned from getTargetFromEvent for this node)
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called when the DropZone determines that a Ext.dd.DragSource has been dragged out of the drop node without dropping. This method has no default implementation and should be overridden to provide node-specific processing if necessary.")]
public virtual JFunction OnNodeOut
{
get
{
if (this.onNodeOut == null)
{
this.onNodeOut = new JFunction();
if (!this.DesignMode)
{
this.onNodeOut.Args = new string[] {"nodeData", "source", "e", "data"};
}
}
return this.onNodeOut;
}
}
private JFunction onNodeOver;
/// <summary>
/// Called while the DropZone determines that a Ext.dd.DragSource is over a drop node that has either been registered or detected by a configured implementation of getTargetFromEvent. The default implementation returns this.dropNotAllowed, so it should be overridden to provide the proper feedback.
/// Parameters:
/// nodeData : The custom data associated with the drop node (this is the same value returned from getTargetFromEvent for this node)
/// source : The drag source that was dragged over this drop zone
/// e : The event
/// data : An object containing arbitrary data supplied by the drag source
/// </summary>
[ConfigOption(JsonMode.Raw)]
[Category("6. DropZone")]
[Meta]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Description("Called while the DropZone determines that a Ext.dd.DragSource is over a drop node that has either been registered or detected by a configured implementation of getTargetFromEvent. The default implementation returns this.dropNotAllowed, so it should be overridden to provide the proper feedback.")]
public virtual JFunction OnNodeOver
{
get
{
if (this.onNodeOver == null)
{
this.onNodeOver = new JFunction();
if (!this.DesignMode)
{
this.onNodeOver.Args = new string[] {"nodeData", "source", "e", "data"};
}
}
return this.onNodeOver;
}
}
}
}