Builder4/WindowLeftTree.bjs
authorAlan Knowles <alan@roojs.com>
Tue, 23 Sep 2014 12:38:47 +0000 (20:38 +0800)
committerAlan Knowles <alan@roojs.com>
Tue, 23 Sep 2014 12:38:47 +0000 (20:38 +0800)
Builder4/WindowLeftTree.vala

Builder4/WindowLeftTree.bjs
Builder4/WindowLeftTree.vala

index 21c2d4b..cb98cfd 100644 (file)
@@ -28,7 +28,7 @@
                         "cursor_changed" : " ( ) => {\n\n\n     if (this.blockChanges) { // probably not needed.. \n       return  ;\n     }\n      if (!_this.before_node_change(null) ) {\n\t     this.blockChanges = true;\n\t     this.el.get_selection().unselect_all();\n\t     this.blockChanges = false;\n\t     return;\n     }\n     if (_this.model.file == null) {\n         return;\n     } \n     \n     //var render = this.get('/LeftTree').getRenderer();                \n    print(\"LEFT TREE -> view -> selection changed called\\n\");\n    \n    \n    // -- it appears that the selection is not updated.\n    \n    GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {\n         \n\n            if (this.el.get_selection().count_selected_rows() < 1) {\n\n                print(\"selected rows < 1\\n\");\n                //??this.model.load( false);\n                _this.node_selected(null);\n                \n                return false ;\n            }\n                \n                //console.log('changed');\n            var s = this.el.get_selection();\n             Gtk.TreeIter iter;\n             Gtk.TreeModel mod;\n            s.get_selected(out mod, out iter);\n            \n            \n            // var val = \"\";\n            GLib.Value value;\n            _this.model.el.get_value(iter, 2, out value);\n            _this.model.activePath = mod.get_path(iter).to_string();\n            \n            var node = (JsRender.Node)value.dup_object();\n            _this.node_selected(node);\n            return false;\n      });  \n    //_this.after_node_change(node);\n\n//        _this.model.file.changed(node, \"tree\");\n   \n    //Seed.print( value.get_string());\n    return  ;\n                \n}",
                         "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    var tp = mod.get_path(iter).to_string();\n    // by default returns the path..\n    \n    data.set_text(tp,tp.length);\n    \n     print(\"return \" + tp);\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 data = (JsRender.Node)(value.dup_object());\n     var xname = data.fqn();\n    \n    \n    var tp = mod.get_path(iter).to_string();\n    // by default returns the path..\n    \n    data.set_text(xname + \":\" + tp,tp.length);\n    \n     print(\"return \" + tp);\n}",
                         "drag_data_received" : "  (ctx, x, y, sel, info, time)  => {\n      //print(\"Tree: drag-data-received\");\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            if (selection_text == null || selection_text.length < 1 || !isOver) {\n                // nothing valid foudn to drop...\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            }\n             \n            // dropList --- need to gather this ... \n            //print(\"get dropList for : %s\\n\",selection_text);            \n            var dropList = _this.model.file.palete().getDropList(selection_text);\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            var node = new JsRender.Node();\n            node.setFqn(selection_text);\n\n            _this.model.dropNode(targetData, node, true);\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            // what's in the selected data....\n            var selection_text = sel.get_text();\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       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(\"STRING\",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}"
                     },
index 4f4557b..ebaec94 100644 (file)
@@ -315,10 +315,17 @@ public class Xcls_WindowLeftTree : Object
                  s.get_selected(out mod, out iter);
                  
                 
+                
+                 GLib.Value value;
+                 _this.model.el.get_value(iter, 2, out value);
+                 var data = (JsRender.Node)(value.dup_object());
+                 var xname = data.fqn();
+                
+                
                 var tp = mod.get_path(iter).to_string();
                 // by default returns the path..
                 
-                data.set_text(tp,tp.length);
+                data.set_text(xname + ":" + tp,tp.length);
                 
                  print("return " + tp);
             });