I'm trying to implement a sophisticated tree DD listener. When I was
using ExtJS I could do something like this:
myTree.addListener("nodedragover", function(dropEvent) {
if (someSophisticatedCondition == true) {
dropEvent.cancel = true;
}
});
What would be the equivalent in gwt-ext?
Attached is a patch that implements this behavior.
Pavel
--- main/src/com/gwtext/client/data/Node.java (revision 764)
+++ main/src/com/gwtext/client/data/Node.java (working copy)
@@ -20,14 +20,13 @@
package com.gwtext.client.data;
+import java.util.Comparator ;
+
import com.google.gwt.core.client.JavaScriptObject;
import com.gwtext.client.core.JsObject;
import com.gwtext.client.data.event.NodeListener;
import com.gwtext.client.util.JavaScriptObjectHelper;
-import com.gwtext.client.widgets.UserObject;
-import java.util.Comparator;
-
public class Node extends JsObject {
public Node(NodeConfig config) {
@@ -49,15 +48,22 @@
protected Node createNode(JavaScriptObject jsNode) {
return new Node(jsNode);
}
-
- public UserObject getUserObject() {
- Object o = getUserObject(getJsObj());
- if (o == null) {
+
+ public native Object getUserObject() /*-{
+ var node = this.@com.gwtext.client.core.JsObject::jsObj;
+
+ //need to convert javascript undefined to null before passing to java layer
+ if(node.attributes.data === undefined) {
return null;
} else {
- return new UserObject(o);
- }
- }
+ return node.attributes.data;
+ }
+ }-*/;
+
+ public native void setUserObject(Object o) /*-{
+ var node = this.@com.gwtext.client.core.JsObject::jsObj;
+ node.attributes.data = o;
+ }-*/;
public native void setAttribute(String name, String value) /*-{
var node = this.@com.gwtext.client.core.JsObject::jsObj;
@@ -75,15 +81,6 @@
return value === undefined ? null : value;
}-*/;
- private static native Object getUserObject(JavaScriptObject node) /*-{
- //need to convert javascript undefined to null before passing to java layer
- if(node.attributes.data === undefined) {
- return null;
- } else {
- return node.attributes.data ;
- }
- }-*/;
-
public Node[] getChildNodes() {
JavaScriptObject[] jsNodes = JavaScriptObjectHelper.getAttributeAsJavaScriptObjectArray(jsObj, "childNodes");
if(jsNodes == null) return null;
@@ -109,7 +106,7 @@
return node.id;
}-*/;
- public native void setId(String id) /*-{
+ public native String setId(String id) /*-{
var node = this.@com.gwtext.client.core.JsObject::jsObj;
node.id = id;
}-*/;
Index: main/src/com/gwtext/client/widgets/tree/event/TreeDragOverEvent.java
===================================================================
--- main/src/com/gwtext/client/widgets/tree/event/TreeDragOverEvent.java (revision 0)
+++ main/src/com/gwtext/client/widgets/tree/event/TreeDragOverEvent.java (revision 0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2007 ???
+ */
+package com.gwtext.client.widgets.tree.event;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.gwtext.client.dd.DragDrop;
+import com.gwtext.client.widgets.tree.TreeNode ;
+import com.gwtext.client.widgets.tree.TreePanel;
+
+public class TreeDragOverEvent {
+
+ private TreePanel treePanel;
+ private TreeNode target;
+ private String point;
+ private DragDrop source;
+ private TreeNode dropNode;
+
+ private JavaScriptObject jsObj;
+
+ public TreeDragOverEvent(JavaScriptObject dropEvent, TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode) {
+ this.jsObj = dropEvent;
+ this.treePanel = treePanel;
+ this.target = target;
+ this.point = point;
+ this.source = source;
+ this.dropNode = dropNode;
+ }
+
+ public static TreeDragOverEvent instance(JavaScriptObject dropEvent, TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode) {
+ return new TreeDragOverEvent(dropEvent, treePanel, target, point, source, dropNode);
+ }
+
+ public TreePanel getTreePanel() {
+ return treePanel;
+ }
+
+ public TreeNode getTarget() {
+ return target;
+ }
+
+ public String getPoint() {
+ return point;
+ }
+
+ public DragDrop getSource() {
+ return source;
+ }
+
+ public TreeNode getDropNode() {
+ return dropNode;
+ }
+
+ public JavaScriptObject getJsObj() {
+ return jsObj;
+ }
+
+ public native void cancel() /*-{
+ this.@com.gwtext.client.widgets.tree.event.TreeDragOverEvent::jsObj.cancel = true;
+ }-*/;
+}
Index: main/src/com/gwtext/client/widgets/tree/event/TreePanelListener.java
===================================================================
--- main/src/com/gwtext/client/widgets/tree/event/TreePanelListener.java (revision 764)
+++ main/src/com/gwtext/client/widgets/tree/event/TreePanelListener.java (working copy)
@@ -20,7 +20,6 @@
package com.gwtext.client.widgets.tree.event;
-import com.google.gwt.user.client.Event;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.dd.DD;
import com.gwtext.client.dd.DragDrop ;
@@ -63,7 +62,7 @@
void onLoad(TreeNode node);
- void onNodeDragOver(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode);
+ void onNodeDragOver(TreeDragOverEvent dropEvent);
void onNodeDrop(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode);
Index: main/src/com/gwtext/client/widgets/tree/event/TreePanelListenerAdapter.java
===================================================================
--- main/src/com/gwtext/client/widgets/tree/event/TreePanelListenerAdapter.java (revision 764)
+++ main/src/com/gwtext/client/widgets/tree/event/TreePanelListenerAdapter.java (working copy)
@@ -83,7 +83,7 @@
public void onLoad(TreeNode node) {
}
- public void onNodeDragOver(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode) {
+ public void onNodeDragOver(TreeDragOverEvent dropEvent) {
}
public void onNodeDrop(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode) {
Index: main/src/com/gwtext/client/widgets/tree/TreePanel.java
===================================================================
--- main/src/com/gwtext/client/widgets/tree/TreePanel.java (revision 764)
+++ main/src/com/gwtext/client/widgets/tree/TreePanel.java (working copy)
@@ -345,7 +345,10 @@
var targetNodeJ = @ com.gwtext.client.widgets.tree.TreeNode::instance(Lcom/google/gwt/core/client/JavaScriptObject;)(targetNode);
var sourceJ = @com.gwtext.client.dd.DragDrop::instance(Lcom/google/gwt/core/client/JavaScriptObject;)(source);
var dropNodeJ = @com.gwtext.client.widgets.tree.TreeNode::instance(Lcom/google/gwt/core/client/JavaScriptObject;)(dropNode);
- listener.@com.gwtext.client.widgets.tree.event.TreePanelListener ::onNodeDragOver(Lcom/gwtext/client/widgets/tree/TreePanel;Lcom/gwtext/client/widgets/tree/TreeNode;Ljava/lang/String;Lcom/gwtext/client/dd/DragDrop;Lcom/gwtext/client/widgets/tree/TreeNode;)(treePanelJ, targetNodeJ, point, sourceJ, dropNodeJ);
+
+ var dropEvent = @com.gwtext.client.widgets.tree.event.TreeDragOverEvent::instance(Lcom/google/gwt/core/client/JavaScriptObject;Lcom/gwtext/client/widgets/tree/TreePanel;Lcom/gwtext/client/widgets/tree/TreeNode;Ljava/lang/String;Lcom/gwtext/client/dd/DragDrop;Lcom/gwtext/client/widgets/tree/TreeNode;)(e, treePanelJ, targetNodeJ, point, sourceJ, dropNodeJ);
+
+ listener.@com.gwtext.client.widgets.tree.event.TreePanelListener::onNodeDragOver(Lcom/gwtext/client/widgets/tree/event/TreeDragOverEvent;)(dropEvent);
}
);