Tree DD

8 views
Skip to first unread message

Pavel

unread,
Oct 4, 2007, 7:10:22 PM10/4/07
to gwt...@googlegroups.com
Hi,

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

gwt-ext-treedd.patch

Sanjiv Jivan

unread,
Oct 4, 2007, 7:52:23 PM10/4/07
to gwt...@googlegroups.com
I think it might be simpler if TreePanenListener's onNodeDragOver signature changed from

void onNodeDragOver(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode);

to

boolean onNodeDragOver(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode);

And a user returns false to to signal that drop not allowed. Adding a new TreeDragOverEvent class that wraps these arguments seems unnecessary and I feel that the current API of onNodeDragOver with the arguments listed out adds clarity.

Does that make sense?

Sanjiv


--- 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);
             }
         );



Pavel J

unread,
Oct 4, 2007, 9:55:18 PM10/4/07
to gwt...@googlegroups.com
I agree, I'll just make sure we haven't missed anything else from that event object. AFAIK, it's not very well documented.

Also, if you take a look at the Node class, I added setUserObject(Object) and changed getUserObject methods. Would you agree with those changes?

Thanks,

Pavel
--
Pavel

Sanjiv Jivan

unread,
Oct 7, 2007, 3:08:17 PM10/7/07
to gwt...@googlegroups.com
Pavel,
I've made the change so that the onNodeDragOver API returns boolean. Your suggestions on get/setUserObject look good and I've incorporated them.

Thanks,
Sanjiv

Pavel J

unread,
Oct 7, 2007, 10:10:40 PM10/7/07
to gwt...@googlegroups.com
Thanks Sanjiv, the change works great.
I also noticed that "move" TreePanel event is missing from the TreePanelListener. Attached is a patch adding "move" event handler.

(Sorry in advance if the patch doesn't work -- I'm not using my regular TortoiseSVN.)

Pavel
--
Pavel
onmove.patch

Sanjiv Jivan

unread,
Oct 8, 2007, 7:41:15 PM10/8/07
to gwt...@googlegroups.com
I've added the onMove() event handler.

Sanjiv

Pavel J

unread,
Oct 8, 2007, 10:16:54 PM10/8/07
to gwt...@googlegroups.com
Thanks Sanjiv.

Pavel
--
Pavel
Reply all
Reply to author
Forward
0 new messages