Builder4/WindowLeftTree.bjs
authorAlan Knowles <alan@roojs.com>
Wed, 24 Sep 2014 05:49:52 +0000 (13:49 +0800)
committerAlan Knowles <alan@roojs.com>
Wed, 24 Sep 2014 05:49:52 +0000 (13:49 +0800)
Builder4/WindowLeftTree.vala

Builder4/WindowLeftTree.bjs
Builder4/WindowLeftTree.vala

index 7c1408e..fb4a14d 100644 (file)
@@ -29,8 +29,8 @@
                         "drag_end" : "  (drag_context) => {\n\t//Seed.print('LEFT-TREE: drag-end');\n        this.dragData = \"\";\n        this.dropList = null;\n//        this.targetData = \"\";\n        this.highlightDropPath(\"\",0);\n//        return true;\n}",
                         "drag_motion" : " ( ctx, x, y, time)  => {\n \n    // the point of this is to detect where an item could be dropped..\n        print(\"got drag motion\");\n       this.drag_in_motion = true;\n       this.drag_x = x;\n       this.drag_y = y;\n       \n            // request data that will be recieved by the recieve...              \n        Gtk.drag_get_data\n        (\n                this.el,         // will receive 'drag-data-received' signal \n                ctx,        // represents the current state of the DnD \n                Gdk.Atom.intern(\"STRING\",true),    // the target type we want \n                time            // time stamp \n        );\n    return true;\n       \n}",
                         "drag_data_get" : " ( drag_context, data, info, time) => {\n\n\n     //print(\"drag-data-get\");\n     var s = this.el.get_selection();\n     if (s.count_selected_rows() < 1) {\n            data.set_text(\"\",0);     \n             print(\"return empty string - no selection..\");\n            return;\n        }\n     \n     Gtk.TreeIter iter;\n     Gtk.TreeModel mod;\n     \n     s.get_selected(out mod, out iter);\n     \n    \n    \n     GLib.Value value;\n     _this.model.el.get_value(iter, 2, out value);\n     var ndata = (JsRender.Node)(value.dup_object());\n     var xname = ndata.fqn();\n    \n    \n    var tp = mod.get_path(iter).to_string();\n    // by default returns the path..\n    \n   if ( info != Gdk.Atom.intern(\"STRING\",true) ) {\n        tp = node.toJsonString();\n   }   \n   \n   data.set_text(tp,tp.length);   \n    \n    \n\n    \n   //  print(\"return \" + tp);\n}",
-                        "drag_data_received" : "  (ctx, x, y, sel, info, time)  => {\n      //print(\"Tree: drag-data-received\");\n\n\n        var is_drag = info == Gdk.Atom.intern(\"STRING\",true)\n    \n\n        //print(\"GETTING POS\");\n        var  targetData = \"\";\n        \n        Gtk.TreePath path;\n        Gtk.TreeViewDropPosition pos;\n        var isOver = _this.view.el.get_dest_row_at_pos(this.drag_x,this.drag_y, out path, out pos);\n        \n        // if there are not items in the tree.. the we have to set isOver to true for anything..\n        var isEmpty = false;\n        if (_this.model.el.iter_n_children(null) < 1) {\n            print(\"got NO children?\\n\");\n            isOver = true; //??? \n            isEmpty = true;\n            pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER;\n        }\n        \n     \n        //console.log(\"LEFT-TREE: drag-motion\");\n        var src = Gtk.drag_get_source_widget(ctx);\n        \n        // a drag from  elsewhere...- prevent drop..\n        if (src != this.el) {\n            //print(\"drag_data_recieved from another element\");\n            \n             \n            var selection_text = sel.get_text();\n            \n            \n            if (selection_text == null || selection_text.length < 1 || !isOver) {\n                // nothing valid foudn to drop...\n                if (is_drag) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                // no drop action...\n                return;            \n            \n            }\n            JsRender.Node dropNode = new JsRender.Node(); \n            \n            var dropNodeType  = selection_text;\n            var show_templates = true;\n            // for drop\n            if (!is_drag && dropNodeType[0] == '{') {\n                var pa = new Json.Parser();\n                pa.load_from_data(dropNodeType);\n                dropNode = new JsRender.Node();\n                dropNode.loadFromJson( pa.get_root(), 2);\n                dropNodeType = dropNode.fqn();\n                show_templates = false;\n            } else {\n\n                dropNode.setFqn(selection_text);\n            }\n\n             \n            // dropList --- need to gather this ... \n            //print(\"get dropList for : %s\\n\",selection_text);            \n            var dropList = _this.model.file.palete().getDropList(dropNodeType);\n            \n            print(\"dropList: %s\\n\", string.joinv(\" , \", dropList));\n            \n            targetData = _this.model.findDropNodeByPath( isEmpty ? \"\" : path.to_string(), dropList, pos);\n                \n            print(\"targetDAta: \" + targetData +\"\\n\");\n            \n            if (targetData.length < 1) {\n             \n                // invalid drop path..\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                // no drop action...\n                return;\n            }\n            // valid drop path..\n            \n              var td_ar = targetData.split(\"|\");\n              \n            \n            if (this.drag_in_motion) { \n                Gdk.drag_status(ctx, Gdk.DragAction.COPY ,time);\n\n                this.highlightDropPath(  td_ar[0]  , (Gtk.TreeViewDropPosition)int.parse(td_ar[1]));\n                return;\n            }\n            // continue on to allow drop..\n            \n\n            // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n            \n\n            _this.model.dropNode(targetData, dropNode, show_templates);\n            print(\"ADD new node!!!\\n\");\n                \n            ///Xcls_DialogTemplateSelect.singleton().show( _this.model.file.palete(), node);\n            \n            Gtk.drag_finish (ctx, false, false,time);\n            \n            \n            \n            \n            \n            return;\n            \n        }\n            \n       // ------------- a drag from self..\n       \n       \n        //var action = Gdk.DragAction.COPY;\n            // unless we are copying!!! ctl button..\n        var action = (ctx.get_actions() & Gdk.DragAction.MOVE) > 0 ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY ;\n        \n        \n        if (_this.model.el.iter_n_children(null) < 1) {\n            // no children.. -- asume it's ok..\n            \n            targetData = \"|%d|\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n            if (this.drag_in_motion) {    \n                this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);        \n                Gdk.drag_status(ctx, action ,time);\n                return;\n            }\n            // continue through to allow drop...\n\n        } else {\n            \n            \n\n            \n            \n            //print(\"ISOVER? \" + isOver);\n            if (!isOver) {\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0 ,time);\n                     this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);                    \n                     return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                return; // not over apoint!?! - no action on drop or motion..\n            }\n            \n            // drag node is parent of child..\n            //console.log(\"SRC TREEPATH: \" + src.treepath);\n            //console.log(\"TARGET TREEPATH: \" + data.path.to_string());\n            \n            // nned to check a  few here..\n            //Gtk.TreeViewDropPosition.INTO_OR_AFTER\n            //Gtk.TreeViewDropPosition.INTO_OR_BEFORE\n            //Gtk.TreeViewDropPosition.AFTER\n            //Gtk.TreeViewDropPosition.BEFORE\n            \n            // locally dragged items to not really use the \n            var selection_text = this.dragData;\n            \n            \n            \n            if (selection_text == null || selection_text.length < 1) {\n                //print(\"Error  - drag selection text returned NULL\");\n                if (this.drag_in_motion) {\n                     Gdk.drag_status(ctx, 0 ,time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                     return;\n                 }\n                 Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                 return; /// -- fixme -- this is not really correct..\n            }                \n            \n            // see if we are dragging into ourself?\n            print (\"got selection text of  \" + selection_text);\n            \n            var target_path = path.to_string();\n            //print(\"target_path=\"+target_path);\n\n            // \n            if (selection_text  == target_path) {\n                print(\"self drag ?? == we should perhaps allow copy onto self..\\n\");\n                if (this.drag_in_motion) {\n                     Gdk.drag_status(ctx, 0 ,time);\n                      this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                      return;\n                 }\n                 Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n\n                 return; /// -- fixme -- this is not really correct..\n\n            }\n            \n            // check that \n            //print(\"DUMPING DATA\");\n            //console.dump(data);\n            // path, pos\n            \n            //print(data.path.to_string() +' => '+  data.pos);\n            \n            // dropList is a list of xtypes that this node could be dropped on.\n            // it is set up when we start to drag..\n            \n            \n            targetData = _this.model.findDropNodeByPath( path.to_string(), this.dropList, pos);\n                \n            print(\"targetDAta: \" + targetData +\"\\n\");\n            \n            if (targetData.length < 1) {\n                //print(\"Can not find drop node path\");\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                return;\n            }\n            \n            var td_ar = targetData.split(\"|\");\n              \n            \n            if (this.drag_in_motion) { \n                Gdk.drag_status(ctx, action ,time);\n                this.highlightDropPath(td_ar[0], (Gtk.TreeViewDropPosition)int.parse(td_ar[1]));\n                return;\n            }\n            // continue on to allow drop..\n        }\n\n        // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n\n\n         var delete_selection_data = false;\n            \n        if (ctx.get_actions() == Gdk.DragAction.ASK)  {\n            /* Ask the user to move or copy, then set the ctx action. */\n        }\n\n        if (ctx.get_actions() == Gdk.DragAction.MOVE) {\n            delete_selection_data = true;\n        }\n        \n            \n                    // drag around.. - reorder..\n        _this.model.moveNode(targetData, ctx.get_actions());\n            \n           \n            \n            \n            \n            // we can send stuff to souce here...\n\n\n    // do we always say failure, so we handle the reall drop?\n        Gtk.drag_finish (ctx, false, false,time); //delete_selection_data, time);\n       \n}",
-                        "drag_drop" : " (  ctx, x, y, time)  => {\n      //Seed.print(\"TARGET: drag-drop\");\n   \n   \n    var src = Gtk.drag_get_source_widget(ctx);\n     \n   if (src != this.el) {\n   \n    \n       \n       this.drag_in_motion = false;   \n            // request data that will be recieved by the recieve...              \n        Gtk.drag_get_data\n        (\n                this.el,         // will receive 'drag-data-received' signal \n                ctx,        // represents the current state of the DnD \n                Gdk.Atom.intern(\"application/json\",true),    // the target type we want \n                time            // time stamp \n        );\n\n         \n        // No target offered by source => error\n   \n\n         return  false;\n     }\n     \n     // handle drop around self..\n     \n      var is_drag = info == Gdk.Atom.intern(\"STRING\",true)\n                \n            \n    //print(\"GETTING POS\");\n    var  targetData = \"\";\n    \n    Gtk.TreePath path;\n    Gtk.TreeViewDropPosition pos;\n    var isOver = _this.view.el.get_dest_row_at_pos(this.drag_x,this.drag_y, out path, out pos);\n    \n    // if there are not items in the tree.. the we have to set isOver to true for anything..\n    var isEmpty = false;\n    if (_this.model.el.iter_n_children(null) < 1) {\n        print(\"got NO children?\\n\");\n        isOver = true; //??? \n        isEmpty = true;\n        pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER;\n    }\n    \n     \n     \n    //var action = Gdk.DragAction.COPY;\n        // unless we are copying!!! ctl button..\n    var action = (ctx.get_actions() & Gdk.DragAction.MOVE) > 0 ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY ;\n    \n            \n    if (_this.model.el.iter_n_children(null) < 1) {\n        // no children.. -- asume it's ok..\n        \n        targetData = \"|%d|\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n         \n        // continue through to allow drop...\n\n    } else {\n                \n                \n    \n                \n                \n                //print(\"ISOVER? \" + isOver);\n        if (!isOver) {\n            \n            Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n            return true; // not over apoint!?! - no action on drop or motion..\n        }\n                \n        // drag node is parent of child..\n        //console.log(\"SRC TREEPATH: \" + src.treepath);\n        //console.log(\"TARGET TREEPATH: \" + data.path.to_string());\n        \n        // nned to check a  few here..\n        //Gtk.TreeViewDropPosition.INTO_OR_AFTER\n        //Gtk.TreeViewDropPosition.INTO_OR_BEFORE\n        //Gtk.TreeViewDropPosition.AFTER\n        //Gtk.TreeViewDropPosition.BEFORE\n        \n        // locally dragged items to not really use the \n        var selection_text = this.dragData;\n        \n        \n        \n        if (selection_text == null || selection_text.length < 1) {\n            //print(\"Error  - drag selection text returned NULL\");\n          \n             Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n             return true; /// -- fixme -- this is not really correct..\n        }                \n                \n                // see if we are dragging into ourself?\n                print (\"got selection text of  \" + selection_text);\n        \n        var target_path = path.to_string();\n        //print(\"target_path=\"+target_path);\n\n        // \n        if (selection_text  == target_path) {\n            print(\"self drag ?? == we should perhaps allow copy onto self..\\n\");\n            \n             Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n\n             return true; /// -- fixme -- this is not really correct..\n\n        }\n                \n        // check that \n        //print(\"DUMPING DATA\");\n        //console.dump(data);\n        // path, pos\n        \n        //print(data.path.to_string() +' => '+  data.pos);\n        \n        // dropList is a list of xtypes that this node could be dropped on.\n        // it is set up when we start to drag..\n        \n        \n        targetData = _this.model.findDropNodeByPath( path.to_string(), this.dropList, pos);\n            \n        print(\"targetDAta: \" + targetData +\"\\n\");\n        \n        if (targetData.length < 1) {\n            //print(\"Can not find drop node path\");\n             \n            Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n            return true;\n        }\n        \n        var td_ar = targetData.split(\"|\");\n                  \n                \n                \n                // continue on to allow drop..\n      \n        // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n\n\n         var delete_selection_data = false;\n            \n        if (ctx.get_actions() == Gdk.DragAction.ASK)  {\n            /* Ask the user to move or copy, then set the ctx action. */\n        }\n\n        if (ctx.get_actions() == Gdk.DragAction.MOVE) {\n            delete_selection_data = true;\n        }\n        \n            \n                    // drag around.. - reorder..\n        _this.model.moveNode(targetData, ctx.get_actions());\n            \n           \n            \n            \n            \n            // we can send stuff to souce here...\n\n\n    // do we always say failure, so we handle the reall drop?\n        Gtk.drag_finish (ctx, false, false,time); //delete_selection_data, time);\n \n        return true;\n     \n     \n     \n     \n     \n     \n}"
+                        "drag_data_received" : "  (ctx, x, y, sel, info, time)  => {\n      //print(\"Tree: drag-data-received\");\n\n\n        var is_drag = info == Gdk.Atom.intern(\"STRING\",true);\n    \n\n        //print(\"GETTING POS\");\n        var  targetData = \"\";\n        \n        Gtk.TreePath path;\n        Gtk.TreeViewDropPosition pos;\n        var isOver = _this.view.el.get_dest_row_at_pos(this.drag_x,this.drag_y, out path, out pos);\n        \n        // if there are not items in the tree.. the we have to set isOver to true for anything..\n        var isEmpty = false;\n        if (_this.model.el.iter_n_children(null) < 1) {\n            print(\"got NO children?\\n\");\n            isOver = true; //??? \n            isEmpty = true;\n            pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER;\n        }\n        \n     \n        //console.log(\"LEFT-TREE: drag-motion\");\n        var src = Gtk.drag_get_source_widget(ctx);\n        \n        // a drag from  elsewhere...- prevent drop..\n        if (src != this.el) {\n            //print(\"drag_data_recieved from another element\");\n            \n             \n            var selection_text = sel.get_text();\n            \n            \n            if (selection_text == null || selection_text.length < 1 || !isOver) {\n                // nothing valid foudn to drop...\n                if (is_drag) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                // no drop action...\n                return;            \n            \n            }\n            JsRender.Node dropNode = new JsRender.Node(); \n            \n            var dropNodeType  = selection_text;\n            var show_templates = true;\n            // for drop\n            if (!is_drag && dropNodeType[0] == '{') {\n                var pa = new Json.Parser();\n                pa.load_from_data(dropNodeType);\n                dropNode = new JsRender.Node();\n                dropNode.loadFromJson( pa.get_root(), 2);\n                dropNodeType = dropNode.fqn();\n                show_templates = false;\n            } else {\n\n                dropNode.setFqn(selection_text);\n            }\n\n             \n            // dropList --- need to gather this ... \n            //print(\"get dropList for : %s\\n\",selection_text);            \n            var dropList = _this.model.file.palete().getDropList(dropNodeType);\n            \n            print(\"dropList: %s\\n\", string.joinv(\" , \", dropList));\n            \n            targetData = _this.model.findDropNodeByPath( isEmpty ? \"\" : path.to_string(), dropList, pos);\n                \n            print(\"targetDAta: \" + targetData +\"\\n\");\n            \n            if (targetData.length < 1) {\n             \n                // invalid drop path..\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                // no drop action...\n                return;\n            }\n            // valid drop path..\n            \n              var td_ar = targetData.split(\"|\");\n              \n            \n            if (this.drag_in_motion) { \n                Gdk.drag_status(ctx, Gdk.DragAction.COPY ,time);\n\n                this.highlightDropPath(  td_ar[0]  , (Gtk.TreeViewDropPosition)int.parse(td_ar[1]));\n                return;\n            }\n            // continue on to allow drop..\n            \n\n            // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n            \n\n            _this.model.dropNode(targetData, dropNode, show_templates);\n            print(\"ADD new node!!!\\n\");\n                \n            ///Xcls_DialogTemplateSelect.singleton().show( _this.model.file.palete(), node);\n            \n            Gtk.drag_finish (ctx, false, false,time);\n            \n            \n            \n            \n            \n            return;\n            \n        }\n            \n       // ------------- a drag from self..\n       \n       \n        //var action = Gdk.DragAction.COPY;\n            // unless we are copying!!! ctl button..\n        var action = (ctx.get_actions() & Gdk.DragAction.MOVE) > 0 ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY ;\n        \n        \n        if (_this.model.el.iter_n_children(null) < 1) {\n            // no children.. -- asume it's ok..\n            \n            targetData = \"|%d|\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n            if (this.drag_in_motion) {    \n                this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);        \n                Gdk.drag_status(ctx, action ,time);\n                return;\n            }\n            // continue through to allow drop...\n\n        } else {\n            \n            \n\n            \n            \n            //print(\"ISOVER? \" + isOver);\n            if (!isOver) {\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0 ,time);\n                     this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);                    \n                     return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                return; // not over apoint!?! - no action on drop or motion..\n            }\n            \n            // drag node is parent of child..\n            //console.log(\"SRC TREEPATH: \" + src.treepath);\n            //console.log(\"TARGET TREEPATH: \" + data.path.to_string());\n            \n            // nned to check a  few here..\n            //Gtk.TreeViewDropPosition.INTO_OR_AFTER\n            //Gtk.TreeViewDropPosition.INTO_OR_BEFORE\n            //Gtk.TreeViewDropPosition.AFTER\n            //Gtk.TreeViewDropPosition.BEFORE\n            \n            // locally dragged items to not really use the \n            var selection_text = this.dragData;\n            \n            \n            \n            if (selection_text == null || selection_text.length < 1) {\n                //print(\"Error  - drag selection text returned NULL\");\n                if (this.drag_in_motion) {\n                     Gdk.drag_status(ctx, 0 ,time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                     return;\n                 }\n                 Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                 return; /// -- fixme -- this is not really correct..\n            }                \n            \n            // see if we are dragging into ourself?\n            print (\"got selection text of  \" + selection_text);\n            \n            var target_path = path.to_string();\n            //print(\"target_path=\"+target_path);\n\n            // \n            if (selection_text  == target_path) {\n                print(\"self drag ?? == we should perhaps allow copy onto self..\\n\");\n                if (this.drag_in_motion) {\n                     Gdk.drag_status(ctx, 0 ,time);\n                      this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                      return;\n                 }\n                 Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n\n                 return; /// -- fixme -- this is not really correct..\n\n            }\n            \n            // check that \n            //print(\"DUMPING DATA\");\n            //console.dump(data);\n            // path, pos\n            \n            //print(data.path.to_string() +' => '+  data.pos);\n            \n            // dropList is a list of xtypes that this node could be dropped on.\n            // it is set up when we start to drag..\n            \n            \n            targetData = _this.model.findDropNodeByPath( path.to_string(), this.dropList, pos);\n                \n            print(\"targetDAta: \" + targetData +\"\\n\");\n            \n            if (targetData.length < 1) {\n                //print(\"Can not find drop node path\");\n                if (this.drag_in_motion) {\n                    Gdk.drag_status(ctx, 0, time);\n                    this.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);\n                    return;\n                }\n                Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n                return;\n            }\n            \n            var td_ar = targetData.split(\"|\");\n              \n            \n            if (this.drag_in_motion) { \n                Gdk.drag_status(ctx, action ,time);\n                this.highlightDropPath(td_ar[0], (Gtk.TreeViewDropPosition)int.parse(td_ar[1]));\n                return;\n            }\n            // continue on to allow drop..\n        }\n\n        // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n\n\n         var delete_selection_data = false;\n            \n        if (ctx.get_actions() == Gdk.DragAction.ASK)  {\n            /* Ask the user to move or copy, then set the ctx action. */\n        }\n\n        if (ctx.get_actions() == Gdk.DragAction.MOVE) {\n            delete_selection_data = true;\n        }\n        \n            \n                    // drag around.. - reorder..\n        _this.model.moveNode(targetData, ctx.get_actions());\n            \n           \n            \n            \n            \n            // we can send stuff to souce here...\n\n\n    // do we always say failure, so we handle the reall drop?\n        Gtk.drag_finish (ctx, false, false,time); //delete_selection_data, time);\n       \n}",
+                        "drag_drop" : " (  ctx, x, y, time)  => {\n      //Seed.print(\"TARGET: drag-drop\");\n   \n   \n    var src = Gtk.drag_get_source_widget(ctx);\n     \n   if (src != this.el) {\n   \n    \n       \n       this.drag_in_motion = false;   \n            // request data that will be recieved by the recieve...              \n        Gtk.drag_get_data\n        (\n                this.el,         // will receive 'drag-data-received' signal \n                ctx,        // represents the current state of the DnD \n                Gdk.Atom.intern(\"application/json\",true),    // the target type we want \n                time            // time stamp \n        );\n\n         \n        // No target offered by source => error\n   \n\n         return  false;\n     }\n     \n     // handle drop around self..\n     \n      var is_drag = info == Gdk.Atom.intern(\"STRING\",true);\n                \n            \n    //print(\"GETTING POS\");\n    var  targetData = \"\";\n    \n    Gtk.TreePath path;\n    Gtk.TreeViewDropPosition pos;\n    var isOver = _this.view.el.get_dest_row_at_pos(this.drag_x,this.drag_y, out path, out pos);\n    \n    // if there are not items in the tree.. the we have to set isOver to true for anything..\n    var isEmpty = false;\n    if (_this.model.el.iter_n_children(null) < 1) {\n        print(\"got NO children?\\n\");\n        isOver = true; //??? \n        isEmpty = true;\n        pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER;\n    }\n    \n     \n     \n    //var action = Gdk.DragAction.COPY;\n        // unless we are copying!!! ctl button..\n    var action = (ctx.get_actions() & Gdk.DragAction.MOVE) > 0 ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY ;\n    \n            \n    if (_this.model.el.iter_n_children(null) < 1) {\n        // no children.. -- asume it's ok..\n        \n        targetData = \"|%d|\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n         \n        // continue through to allow drop...\n\n    } else {\n                \n                \n    \n                \n                \n                //print(\"ISOVER? \" + isOver);\n        if (!isOver) {\n            \n            Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n            return true; // not over apoint!?! - no action on drop or motion..\n        }\n                \n        // drag node is parent of child..\n        //console.log(\"SRC TREEPATH: \" + src.treepath);\n        //console.log(\"TARGET TREEPATH: \" + data.path.to_string());\n        \n        // nned to check a  few here..\n        //Gtk.TreeViewDropPosition.INTO_OR_AFTER\n        //Gtk.TreeViewDropPosition.INTO_OR_BEFORE\n        //Gtk.TreeViewDropPosition.AFTER\n        //Gtk.TreeViewDropPosition.BEFORE\n        \n        // locally dragged items to not really use the \n        var selection_text = this.dragData;\n        \n        \n        \n        if (selection_text == null || selection_text.length < 1) {\n            //print(\"Error  - drag selection text returned NULL\");\n          \n             Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n             return true; /// -- fixme -- this is not really correct..\n        }                \n                \n                // see if we are dragging into ourself?\n                print (\"got selection text of  \" + selection_text);\n        \n        var target_path = path.to_string();\n        //print(\"target_path=\"+target_path);\n\n        // \n        if (selection_text  == target_path) {\n            print(\"self drag ?? == we should perhaps allow copy onto self..\\n\");\n            \n             Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n\n             return true; /// -- fixme -- this is not really correct..\n\n        }\n                \n        // check that \n        //print(\"DUMPING DATA\");\n        //console.dump(data);\n        // path, pos\n        \n        //print(data.path.to_string() +' => '+  data.pos);\n        \n        // dropList is a list of xtypes that this node could be dropped on.\n        // it is set up when we start to drag..\n        \n        \n        targetData = _this.model.findDropNodeByPath( path.to_string(), this.dropList, pos);\n            \n        print(\"targetDAta: \" + targetData +\"\\n\");\n        \n        if (targetData.length < 1) {\n            //print(\"Can not find drop node path\");\n             \n            Gtk.drag_finish (ctx, false, false, time);        // drop failed..\n            return true;\n        }\n        \n        var td_ar = targetData.split(\"|\");\n                  \n                \n                \n                // continue on to allow drop..\n      \n        // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..\n\n\n         var delete_selection_data = false;\n            \n        if (ctx.get_actions() == Gdk.DragAction.ASK)  {\n            /* Ask the user to move or copy, then set the ctx action. */\n        }\n\n        if (ctx.get_actions() == Gdk.DragAction.MOVE) {\n            delete_selection_data = true;\n        }\n        \n            \n                    // drag around.. - reorder..\n        _this.model.moveNode(targetData, ctx.get_actions());\n            \n           \n            \n            \n            \n            // we can send stuff to souce here...\n\n\n    // do we always say failure, so we handle the reall drop?\n        Gtk.drag_finish (ctx, false, false,time); //delete_selection_data, time);\n \n        return true;\n     \n     \n     \n     \n     \n     \n}"
                     },
                     "# string dragData" : "",
                     "# string[] dropList" : "",
index 253c065..c5afa9a 100644 (file)
@@ -342,7 +342,7 @@ public class Xcls_WindowLeftTree : Object
                   //print("Tree: drag-data-received");
             
             
-                    var is_drag = info == Gdk.Atom.intern("STRING",true)
+                    var is_drag = info == Gdk.Atom.intern("STRING",true);
                 
             
                     //print("GETTING POS");
@@ -633,7 +633,7 @@ public class Xcls_WindowLeftTree : Object
                  
                  // handle drop around self..
                  
-                  var is_drag = info == Gdk.Atom.intern("STRING",true)
+                  var is_drag = info == Gdk.Atom.intern("STRING",true);
                             
                         
                 //print("GETTING POS");