From afb4947147cde81e1a291d5abeb9c27c3c5a63c6 Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Fri, 12 Sep 2014 12:10:26 +0800 Subject: [PATCH] Builder4/WindowLeftTree.bjs.XNT4LX Builder4/WindowLeftTree.bjs Builder4/WindowLeftTree.js.9QQ4LX Builder4/WindowLeftTree.js Builder4/WindowLeftTree.vala.UGJ4LX Builder4/WindowLeftTree.vala --- Builder4/WindowLeftTree.bjs | 44 +- Builder4/WindowLeftTree.js | 750 ++++++++++++++++++----------------- Builder4/WindowLeftTree.vala | 734 +++++++++++++++++----------------- 3 files changed, 766 insertions(+), 762 deletions(-) diff --git a/Builder4/WindowLeftTree.bjs b/Builder4/WindowLeftTree.bjs index 824d6b91a..a3ed7875a 100644 --- a/Builder4/WindowLeftTree.bjs +++ b/Builder4/WindowLeftTree.bjs @@ -7,25 +7,25 @@ "modOrder" : "", "items" : [ { - "| JsRender.Node? getActiveElement" : " () { // return path to actie node.\n\n var path = this.getActivePath();\n if (path.length < 1) {\n return null;\n }\n return _this.model.pathToNode(path);\n \n}\n", - "@ bool before_node_change" : "(JsRender.Node? node)", + "| JsRender.Node? getActiveElement" : " () { // return path to actie node.\n\n var path = this.getActivePath();\n if (path.length < 1) {\n return null;\n }\n return _this.model.pathToNode(path);\n \n}\n", "id" : "WindowLeftTree", + "@ bool before_node_change" : "(JsRender.Node? node)", "$ shadow_type" : "Gtk.ShadowType.IN", "* init" : " this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);\n \n", - "| string getActivePath" : " () {\n var model = this.model;\n var view = this.view.el;\n if (view.get_selection().count_selected_rows() < 1) {\n return \"\";\n }\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n view.get_selection().get_selected(out mod, out iter);\n return mod.get_path(iter).to_string();\n}\n", + "| JsRender.JsRender getActiveFile" : "() {\n return this.model.file;\n}\n", "* pack" : "add", "xtype" : "ScrolledWindow", "@ void changed" : "()", "$ xns" : "Gtk", "@ void node_selected" : "(JsRender.Node? node)", - "| JsRender.JsRender getActiveFile" : "() {\n return this.model.file;\n}\n", "# Xcls_MainWindow main_window" : "null", + "| string getActivePath" : " () {\n var model = this.model;\n var view = this.view.el;\n if (view.get_selection().count_selected_rows() < 1) {\n return \"\";\n }\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n view.get_selection().get_selected(out mod, out iter);\n return mod.get_path(iter).to_string();\n}\n", "items" : [ { "listeners" : { "button_press_event" : " ( ev) => {\n //console.log(\"button press?\");\n if (! _this.before_node_change(null) ) {\n return true;\n }\n\n \n if (ev.type != Gdk.EventType.BUTTON_PRESS || ev.button != 3) {\n //print(\"click\" + ev.type);\n return false;\n }\n Gtk.TreePath res;\n if (!_this.view.el.get_path_at_pos((int)ev.x,(int)ev.y, out res, null, null, null) ) {\n return true;\n }\n \n this.el.get_selection().select_path(res);\n \n //if (!this.get('/LeftTreeMenu').el) { \n // this.get('/LeftTreeMenu').init(); \n // }\n \n _this.LeftTreeMenu.el.set_screen(Gdk.Screen.get_default());\n _this.LeftTreeMenu.el.show_all();\n _this.LeftTreeMenu.el.popup(null, null, null, 3, ev.time);\n // print(\"click:\" + res.path.to_string());\n return true;\n}", - "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_begin" : "( ctx) => {\n\t//print('SOURCE: drag-begin');\n \n \n //this.targetData = \"\";\n \n // find what is selected in our tree...\n \n var s = _this.view.el.get_selection();\n if (s.count_selected_rows() < 1) {\n return;\n }\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n s.get_selected(out mod, out iter);\n\n \n\n // set some properties of the tree for use by the dropped element.\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 print (\"XNAME IS \" + xname+ \"\\n\");\n this.dragData = xname;\n this.dropList = _this.model.file.palete().getDropList(xname);\n \n print (\"DROP LIST IS \" + string.joinv(\", \", this.dropList) + \"\\n\");\n \n\n // make the drag icon a picture of the node that was selected\n var path = _this.model.el.get_path(iter);\n\n //this.treepath = path.to_string();\n \n var pix = this.el.create_row_drag_icon ( path);\n \n Gtk.drag_set_icon_surface (ctx, pix) ;\n \n return;\n}", + "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 data.set_text(tp,tp.length);\n print(\"return \" + tp);\n}", @@ -33,55 +33,55 @@ "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}" }, "# string dragData" : "", - "| void selectNode" : "(string treepath_str) {\n //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str));\n var tp = new Gtk.TreePath.from_string(treepath_str);\n \n this.el.set_cursor(tp, null, false); \n this.el.scroll_to_cell(tp, null, false, 0,0);\n}\n", "# int drag_x" : "", "# string[] dropList" : "", "id" : "view", "# int drag_y" : "", "* init" : "{\n var description = new Pango.FontDescription();\n description.set_size(8000);\n this.el.modify_font(description);\n\n var selection = this.el.get_selection();\n selection.set_mode( Gtk.SelectionMode.SINGLE);\n\n\n // is this really needed??\n /*\n this.selection.signal['changed'].connect(function() {\n\t _this.get('/LeftTree.view').listeners.cursor_changed.apply(\n\t _this.get('/LeftTree.view'), [ _this.get('/LeftTree.view'), '']\n\t );\n });\n */\n Gtk.drag_source_set (\n\t this.el, /* widget will be drag-able */\n\t Gdk.ModifierType.BUTTON1_MASK, /* modifier that will start a drag */\n\t Builder4.Application.targetList, /* lists of target to support */\n\t Gdk.DragAction.COPY | Gdk.DragAction.MOVE /* what to do with data after dropped */\n );\n\n // ?? needed??\n //Gtk.drag_source_add_text_targets(this.el); \n\n Gtk.drag_dest_set\n (\n this.el, /* widget that will accept a drop */\n Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT,\n Builder4.Application.targetList, /* lists of target to support */\n Gdk.DragAction.COPY | Gdk.DragAction.MOVE /* what to do with data after dropped */\n );\n\n //Gtk.drag_dest_set_target_list(this.el, Builder.Application.targetList);\n //Gtk.drag_dest_add_text_targets(this.el);\n}\n", - "| void highlightDropPath" : " ( string treepath, Gtk.TreeViewDropPosition pos) {\n\n // highlighting for drag/drop\n if (treepath.length > 0) {\n this.el.set_drag_dest_row( new Gtk.TreePath.from_string( treepath ), pos);\n } else {\n this.el.set_drag_dest_row(null, Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n }\n \n}", "tooltip_column" : 1, "* pack" : "add", "xtype" : "TreeView", "$ enable_tree_lines" : true, "$ headers_visible" : false, + "| void highlightDropPath" : " ( string treepath, Gtk.TreeViewDropPosition pos) {\n\n // highlighting for drag/drop\n if (treepath.length > 0) {\n this.el.set_drag_dest_row( new Gtk.TreePath.from_string( treepath ), pos);\n } else {\n this.el.set_drag_dest_row(null, Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n }\n \n}", "# bool drag_in_motion" : "", "# bool blockChanges" : false, "$ xns" : "Gtk", + "| void selectNode" : "(string treepath_str) {\n //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str));\n var tp = new Gtk.TreePath.from_string(treepath_str);\n \n this.el.set_cursor(tp, null, false); \n this.el.scroll_to_cell(tp, null, false, 0,0);\n}\n", "items" : [ { - "| void dropNode" : "(string target_data_str, JsRender.Node node, bool show_templates) {\n// print(\"drop Node\");\n // console.dump(node);\n // console.dump(target_data);\n \n \n // 0 = before , 1=after 2/3 onto\n \n \n var target_data= target_data_str.split(\"|\");\n \n var parent_str = target_data[0].length > 0 ? target_data[0] : \"\";\n var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop..\n \n \n Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null;\n \n \n \n //print(\"add \" + tp + \"@\" + target_data[1] );\n \n JsRender.Node parentNode = null;\n \n Gtk.TreeIter iter_after;\n Gtk.TreeIter iter_par ;\n \n \n if (target_data.length == 3 && target_data[2].length > 0) {\n node.props.set(\"* prop\", target_data[2]);\n }\n\n Gtk.TreePath expand_parent = null;\n \n // we only need to show the template if it's come from else where?\n if (show_templates) {\n var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node);\n node = new_node;\n } \n \n //print(\"pos is %d \\n\".printf(pos));\n \n Gtk.TreeIter n_iter; \n \n if ( parent_str.length < 1) {\n this.el.append(out n_iter, null); // drop at top level..\n node.parent = null;\n this.file.tree = node;\n \n \n } else if (pos < 2) {\n //print(target_data[1] > 0 ? 'insert_after' : 'insert_before');\n \n this.el.get_iter(out iter_after, tree_path ); \n this.el.iter_parent(out iter_par, iter_after);\n expand_parent = this.el.get_path(iter_par);\n \n GLib.Value value;\n this.el.get_value( iter_par, 2, out value);\n parentNode = (JsRender.Node)value.dup_object();\n \n \n this.el.get_value( iter_after, 2, out value);\n var relNode = (JsRender.Node)value.dup_object();\n \n if ( pos > 0 ) {\n \n this.el.insert_after(out n_iter, iter_par , iter_after);\n var ix = parentNode.items.index_of(relNode);\n parentNode.items.insert(ix+1, node);\n \n } else {\n this.el.insert_before(out n_iter, iter_par , iter_after);\n var ix = parentNode.items.index_of(relNode);\n parentNode.items.insert(ix, node);\n \n }\n node.parent = parentNode;\n \n \n \n } else {\n // print(\"appending to \" + parent_str);\n this.el.get_iter(out iter_par, tree_path);\n this.el.append(out n_iter, iter_par );\n expand_parent = this.el.get_path(iter_par);\n \n GLib.Value value;\n this.el.get_value( iter_par, 2, out value);\n parentNode = (JsRender.Node)value.dup_object();\n node.parent = parentNode;\n parentNode.items.add(node);\n }\n \n // reparent node in tree...\n \n \n // why only on no parent???\n \n //if (node.parent = null) {\n \n \n \n //}\n \n \n // work out what kind of packing to use.. -- should be in \n if (!node.has(\"pack\") && parent_str.length > 1) {\n \n this.file.palete().fillPack(node,parentNode);\n \n \n }\n \n // add the node...\n \n this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 );\n var o = new GLib.Value(typeof(Object));\n o.set_object((Object)node);\n \n this.el.set_value(n_iter, 2, o);\n \n \n \n \n// load children - if it has any..\n \n if (node.items.size > 0) {\n this.load(node.items, n_iter);\n _this.view.el.expand_row(this.el.get_path(n_iter), true);\n } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) {\n _this.view.el.expand_row(expand_parent,true);\n }\n\n //if (tp != null && (node.items.length() > 0 || pos > 1)) {\n // _this.view.el.expand_row(this.el.get_path(iter_par), true);\n // }\n // wee need to get the empty proptypes from somewhere..\n \n //var olditer = this.activeIter;\n this.activePath = this.el.get_path(n_iter).to_string();\n\n\n \n \n _this.view.el.set_cursor(this.el.get_path(n_iter), null, false);\n _this.changed();\n \n \n \n}\n", - "| void updateSelected" : "() {\n \n \n var s = _this.view.el.get_selection();\n \n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n \n \n \n if (!s.get_selected(out mod, out iter)) {\n return; // nothing seleted..\n }\n \n GLib.Value value;\n this.el.get_value(iter, 2, out value);\n var node = (JsRender.Node)(value.get_object());\n \n this.el.set(iter, 0, node.nodeTitle(),\n 1, node.nodeTip(), -1\n );\n}\n", - "| void moveNode" : "(string target_data, Gdk.DragAction action) \n{\n \n /// target_data = \"path|pos\");\n \n \n //print(\"MOVE NODE\");\n // console.dump(target_data);\n Gtk.TreeIter old_iter;\n Gtk.TreeModel mod;\n \n var s = _this.view.el.get_selection();\n s.get_selected(out mod , out old_iter);\n mod.get_path(old_iter);\n \n var node = this.pathToNode(mod.get_path(old_iter).to_string());\n //console.dump(node);\n if (node == null) {\n print(\"moveNode: ERROR - node is null?\");\n }\n \n \n\n // needs to drop first, otherwise the target_data \n // treepath will be invalid.\n\n \n if ((action & Gdk.DragAction.MOVE) > 0) {\n print(\"REMOVING OLD NODE : \" + target_data + \"\\n\");\n node.remove();\n this.dropNode(target_data, node, false);\n this.el.remove(ref old_iter);\n \n \n \n } else {\n print(\"DROPPING NODE // copy: \" + target_data + \"\\n\");\n node = node.deepClone();\n this.dropNode(target_data, node, false);\n }\n _this.changed();\n this.activePath= \"\";\n //this.updateNode(false,true);\n}\n", + "| string findDropNode" : " (string treepath_str, string[] targets) {\n\n // this is used by the dragdrop code in the roo version AFAIR..\n\n //var path = treepath_str.replace(/^builder-/, '');\n // treemap is depreciated... - should really check if model has any entries..\n\n if (this.el.iter_n_children(null) < 1) {\n //print(\"NO KEYS\");\n return \"|%d\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n }\n //print(\"FIND treepath: \" + path);\n //console.dump(this.treemap);\n \n //if (!treepath_str.match(/^builder-/)) {\n // return []; // nothing!\n //}\n if (targets.length > 0 && targets[0] == \"*\") {\n return treepath_str;\n }\n return this.findDropNodeByPath(treepath_str,targets, -1);\n}\n", "currentTree" : false, - "| void load" : "(Gee.ArrayList tr, Gtk.TreeIter? iter) \n{\n Gtk.TreeIter citer;\n //this.insert(citer,iter,0);\n for(var i =0 ; i < tr.size; i++) {\n if (iter != null) {\n this.el.insert(out citer,iter,-1); // why not append?\n } else {\n this.el.append(out citer,null);\n }\n \n this.el.set(citer, 0, tr.get(i).nodeTitle(),\n 1, tr.get(i).nodeTip(), -1\n );\n var o = new GLib.Value(typeof(Object));\n o.set_object((Object)tr.get(i));\n \n this.el.set_value(citer, 2, o);\n \n if (tr.get(i).items.size > 0) {\n this.load(tr.get(i).items, citer);\n }\n \n }\n\n \n}", "id" : "model", - "| string findDropNodeByPath" : " (string treepath_str, string[] targets, int in_pref = -1) {\n\n var path = treepath_str; // dupe it..\n \n int pref = in_pref < 0 ? Gtk.TreeViewDropPosition.INTO_OR_AFTER : in_pref;\n \n var last = \"\";\n \n //console.dump(this.treemap);\n \n print(\"findDropNodeByPath : got path length %d / %s\\n\", path.length, path);\n \n if (path.length == 0) {\n // top drop. // just return empty..\n return \"|%d\".printf((int)pref) ;\n \n }\n \n \n while (path.length > 0) {\n //print(\"LOOKING FOR PATH: \" + path);\n var node_data = this.pathToNode(path);\n \n if (node_data == null) {\n print(\"node not found\");\n return null;\n }\n \n var xname = node_data.fqn();\n var match = \"\";\n var prop = \"\";\n \n for (var i =0; i < targets.length; i++) {\n var tg = targets[i];\n if ((tg == xname) ) {\n match = tg;\n break;\n }\n // if target is \"xxxx:name\"\n if (tg.contains(xname +\":\")) {\n match = tg;\n var ar = tg.split(\":\");\n prop = ar[1];\n break;\n }\n }\n \n if (match.length > 0) {\n if (last.length > 0) { // pref is after/before..\n // then it's after last\n if (pref > 1) {\n return \"\";\n }\n return last + \"|%d\".printf((int)pref) + \"|\" + prop;\n\n \n }\n return path + \"|%d\".printf( (int) Gtk.TreeViewDropPosition.INTO_OR_AFTER) + \"|\" + prop;\n }\n last = \"\" + path;\n var par = path.split(\":\");\n string [] ppar = {};\n for (var i = 0; i < par.length-1; i++) {\n ppar += par[i];\n }\n \n path = string.joinv(\":\", ppar);\n\n\n }\n \n return \"\";\n \n}\n", "* init" : "print(\"model initialized\");\n\n", + "| void loadFile" : "(JsRender.JsRender f) {\n //console.dump(f);\n this.el.clear();\n this.file = f;\n \n \n// if (!f) {\n// console.log('missing file');\n// return;\n// }\n \n // load the file if not loaded..\n if (f.tree == null) {\n f.loadItems( );\n }\n // if it's still null?\n if (f.tree == null) {\n return;\n }\n \n /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name);\n \n //if (f.items.length && typeof(f.items[0]) == 'string') {\n \n //this.get('/RightEditor').el.show();\n //this.get('/RightEditor.view').load( f.items[0]);\n // return;\n //}\n //print(\"LOAD\");\n //print(JSON.stringify(f.items, null,4));\n //console.dump(f.items);\n var o = new Gee.ArrayList();\n o.add(f.tree);\n this.load(o,null);\n \n _this.view.el.expand_all();\n\n if (f.tree.items.size < 1) {\n // single item..\n \n //this.get('/Window.leftvpaned').el.set_position(80);\n // select first...\n _this.view.el.set_cursor( \n new Gtk.TreePath.from_string(\"0\"), null, false);\n \n \n } else {\n //this.get('/Window.leftvpaned').el.set_position(200);\n }\n \n return;\n /* \n \n //print(\"hide right editior\");\n //this.get('/RightEditor').el.hide();\n //this.get('/Editor').el.hide();\n //print(\"set current tree\");\n //this.currentTree = this.toJS(false, false)[0];\n //console.dump(this.currentTree);\n //this.currentTree = this.currentTree || { items: [] };\n //_this.renderView();\n //console.dump(this.map);\n //var RightPalete = imports.Builder.RightPalete.RightPalete;\n \n \n var pm = this.get('/RightPalete.model');\n // set up provider..\n \n this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider();\n \n if (!this.get('/RightPalete').provider) {\n print (\"********* PALETE PROVIDER MISSING?!!\");\n }\n this.get('/LeftTree').renderView();\n \n pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes()));\n \n \n \n this.get('/Window.view-notebook').el.set_current_page(\n this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1);\n */\n \n}\n", "# JsRender.JsRender? file" : "null", + "| void updateSelected" : "() {\n \n \n var s = _this.view.el.get_selection();\n \n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n \n \n \n if (!s.get_selected(out mod, out iter)) {\n return; // nothing seleted..\n }\n \n GLib.Value value;\n this.el.get_value(iter, 2, out value);\n var node = (JsRender.Node)(value.get_object());\n \n this.el.set(iter, 0, node.nodeTitle(),\n 1, node.nodeTip(), -1\n );\n}\n", "* pack" : "set_model", "xtype" : "TreeStore", - "| string findDropNode" : " (string treepath_str, string[] targets) {\n\n // this is used by the dragdrop code in the roo version AFAIR..\n\n //var path = treepath_str.replace(/^builder-/, '');\n // treemap is depreciated... - should really check if model has any entries..\n\n if (this.el.iter_n_children(null) < 1) {\n //print(\"NO KEYS\");\n return \"|%d\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);\n }\n //print(\"FIND treepath: \" + path);\n //console.dump(this.treemap);\n \n //if (!treepath_str.match(/^builder-/)) {\n // return []; // nothing!\n //}\n if (targets.length > 0 && targets[0] == \"*\") {\n return treepath_str;\n }\n return this.findDropNodeByPath(treepath_str,targets, -1);\n}\n", + "| string findDropNodeByPath" : " (string treepath_str, string[] targets, int in_pref = -1) {\n\n var path = treepath_str; // dupe it..\n \n int pref = in_pref < 0 ? Gtk.TreeViewDropPosition.INTO_OR_AFTER : in_pref;\n \n var last = \"\";\n \n //console.dump(this.treemap);\n \n print(\"findDropNodeByPath : got path length %d / %s\\n\", path.length, path);\n \n if (path.length == 0) {\n // top drop. // just return empty..\n return \"|%d\".printf((int)pref) ;\n \n }\n \n \n while (path.length > 0) {\n //print(\"LOOKING FOR PATH: \" + path);\n var node_data = this.pathToNode(path);\n \n if (node_data == null) {\n print(\"node not found\");\n return null;\n }\n \n var xname = node_data.fqn();\n var match = \"\";\n var prop = \"\";\n \n for (var i =0; i < targets.length; i++) {\n var tg = targets[i];\n if ((tg == xname) ) {\n match = tg;\n break;\n }\n // if target is \"xxxx:name\"\n if (tg.contains(xname +\":\")) {\n match = tg;\n var ar = tg.split(\":\");\n prop = ar[1];\n break;\n }\n }\n \n if (match.length > 0) {\n if (last.length > 0) { // pref is after/before..\n // then it's after last\n if (pref > 1) {\n return \"\";\n }\n return last + \"|%d\".printf((int)pref) + \"|\" + prop;\n\n \n }\n return path + \"|%d\".printf( (int) Gtk.TreeViewDropPosition.INTO_OR_AFTER) + \"|\" + prop;\n }\n last = \"\" + path;\n var par = path.split(\":\");\n string [] ppar = {};\n for (var i = 0; i < par.length-1; i++) {\n ppar += par[i];\n }\n \n path = string.joinv(\":\", ppar);\n\n\n }\n \n return \"\";\n \n}\n", + "| void moveNode" : "(string target_data, Gdk.DragAction action) \n{\n \n /// target_data = \"path|pos\");\n \n \n //print(\"MOVE NODE\");\n // console.dump(target_data);\n Gtk.TreeIter old_iter;\n Gtk.TreeModel mod;\n \n var s = _this.view.el.get_selection();\n s.get_selected(out mod , out old_iter);\n mod.get_path(old_iter);\n \n var node = this.pathToNode(mod.get_path(old_iter).to_string());\n //console.dump(node);\n if (node == null) {\n print(\"moveNode: ERROR - node is null?\");\n }\n \n \n\n // needs to drop first, otherwise the target_data \n // treepath will be invalid.\n\n \n if ((action & Gdk.DragAction.MOVE) > 0) {\n print(\"REMOVING OLD NODE : \" + target_data + \"\\n\");\n node.remove();\n this.dropNode(target_data, node, false);\n this.el.remove(ref old_iter);\n \n \n \n } else {\n print(\"DROPPING NODE // copy: \" + target_data + \"\\n\");\n node = node.deepClone();\n this.dropNode(target_data, node, false);\n }\n _this.changed();\n this.activePath= \"\";\n //this.updateNode(false,true);\n}\n", "# string activePath" : "\"\"", "$ columns" : "typeof(string),typeof(string),typeof(Object)", - "| void loadFile" : "(JsRender.JsRender f) {\n //console.dump(f);\n this.el.clear();\n this.file = f;\n \n \n// if (!f) {\n// console.log('missing file');\n// return;\n// }\n \n // load the file if not loaded..\n if (f.tree == null) {\n f.loadItems( );\n }\n // if it's still null?\n if (f.tree == null) {\n return;\n }\n \n /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name);\n \n //if (f.items.length && typeof(f.items[0]) == 'string') {\n \n //this.get('/RightEditor').el.show();\n //this.get('/RightEditor.view').load( f.items[0]);\n // return;\n //}\n //print(\"LOAD\");\n //print(JSON.stringify(f.items, null,4));\n //console.dump(f.items);\n var o = new Gee.ArrayList();\n o.add(f.tree);\n this.load(o,null);\n \n _this.view.el.expand_all();\n\n if (f.tree.items.size < 1) {\n // single item..\n \n //this.get('/Window.leftvpaned').el.set_position(80);\n // select first...\n _this.view.el.set_cursor( \n new Gtk.TreePath.from_string(\"0\"), null, false);\n \n \n } else {\n //this.get('/Window.leftvpaned').el.set_position(200);\n }\n \n return;\n /* \n \n //print(\"hide right editior\");\n //this.get('/RightEditor').el.hide();\n //this.get('/Editor').el.hide();\n //print(\"set current tree\");\n //this.currentTree = this.toJS(false, false)[0];\n //console.dump(this.currentTree);\n //this.currentTree = this.currentTree || { items: [] };\n //_this.renderView();\n //console.dump(this.map);\n //var RightPalete = imports.Builder.RightPalete.RightPalete;\n \n \n var pm = this.get('/RightPalete.model');\n // set up provider..\n \n this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider();\n \n if (!this.get('/RightPalete').provider) {\n print (\"********* PALETE PROVIDER MISSING?!!\");\n }\n this.get('/LeftTree').renderView();\n \n pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes()));\n \n \n \n this.get('/Window.view-notebook').el.set_current_page(\n this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1);\n */\n \n}\n", - "| void deleteSelected" : "() {\n \n print(\"DELETE SELECTED?\");\n //_this.view.blockChanges = true;\n print(\"GET SELECTION?\");\n\n var s = _this.view.el.get_selection();\n \n print(\"GET SELECTED?\");\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n\n \n if (!s.get_selected(out mod, out iter)) {\n return; // nothing seleted..\n }\n \n\n\n this.activePath= \"\"; \n print(\"GET vnode value?\");\n\n GLib.Value value;\n this.el.get_value(iter, 2, out value);\n var data = (JsRender.Node)(value.get_object());\n print(\"removing node from Render\\n\");\n if (data.parent == null) {\n this.file.tree = null;\n } else {\n data.remove();\n }\n print(\"removing node from Tree\\n\"); \n s.unselect_all();\n this.el.remove(ref iter);\n\n \n \n \n // \n \n \n\n\n this.activePath= \"\"; // again!?!? \n //this.changed(null,true);\n \n _this.changed();\n \n _this.view.blockChanges = false;\n}\n", + "| void load" : "(Gee.ArrayList tr, Gtk.TreeIter? iter) \n{\n Gtk.TreeIter citer;\n //this.insert(citer,iter,0);\n for(var i =0 ; i < tr.size; i++) {\n if (iter != null) {\n this.el.insert(out citer,iter,-1); // why not append?\n } else {\n this.el.append(out citer,null);\n }\n \n this.el.set(citer, 0, tr.get(i).nodeTitle(),\n 1, tr.get(i).nodeTip(), -1\n );\n var o = new GLib.Value(typeof(Object));\n o.set_object((Object)tr.get(i));\n \n this.el.set_value(citer, 2, o);\n \n if (tr.get(i).items.size > 0) {\n this.load(tr.get(i).items, citer);\n }\n \n }\n\n \n}", + "| void deleteSelected" : "() {\n \n print(\"DELETE SELECTED?\");\n //_this.view.blockChanges = true;\n print(\"GET SELECTION?\");\n\n var s = _this.view.el.get_selection();\n \n print(\"GET SELECTED?\");\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n\n \n if (!s.get_selected(out mod, out iter)) {\n return; // nothing seleted..\n }\n \n\n\n this.activePath= \"\"; \n print(\"GET vnode value?\");\n\n GLib.Value value;\n this.el.get_value(iter, 2, out value);\n var data = (JsRender.Node)(value.get_object());\n print(\"removing node from Render\\n\");\n if (data.parent == null) {\n this.file.tree = null;\n } else {\n data.remove();\n }\n print(\"removing node from Tree\\n\"); \n s.unselect_all();\n this.el.remove(ref iter);\n\n \n \n \n // \n \n \n\n\n this.activePath= \"\"; // again!?!? \n //this.changed(null,true);\n \n _this.changed();\n \n _this.view.blockChanges = false;\n}\n", "# Project.Project? project" : "null", "n_columns" : 3, "$ xns" : "Gtk", - "| JsRender.Node pathToNode" : "(string path) {\n \n \n Gtk.TreeIter iter;\n _this.model.el.get_iter_from_string(out iter, path);\n \n GLib.Value value;\n _this.model.el.get_value(iter, 2, out value);\n \n return (JsRender.Node)value.dup_object();\n\n}", + "| JsRender.Node pathToNode" : "(string path) {\n \n \n Gtk.TreeIter iter;\n _this.model.el.get_iter_from_string(out iter, path);\n \n GLib.Value value;\n _this.model.el.get_value(iter, 2, out value);\n \n return (JsRender.Node)value.dup_object();\n\n}", + "| void dropNode" : "(string target_data_str, JsRender.Node node, bool show_templates) {\n// print(\"drop Node\");\n // console.dump(node);\n // console.dump(target_data);\n \n \n // 0 = before , 1=after 2/3 onto\n \n \n var target_data= target_data_str.split(\"|\");\n \n var parent_str = target_data[0].length > 0 ? target_data[0] : \"\";\n var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop..\n \n \n Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null;\n \n \n \n //print(\"add \" + tp + \"@\" + target_data[1] );\n \n JsRender.Node parentNode = null;\n \n Gtk.TreeIter iter_after;\n Gtk.TreeIter iter_par ;\n \n \n if (target_data.length == 3 && target_data[2].length > 0) {\n node.props.set(\"* prop\", target_data[2]);\n }\n\n Gtk.TreePath expand_parent = null;\n \n // we only need to show the template if it's come from else where?\n if (show_templates) {\n var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node);\n if (new_node != null) {\n node = new_node;\n }\n } \n \n //print(\"pos is %d \\n\".printf(pos));\n \n Gtk.TreeIter n_iter; \n \n if ( parent_str.length < 1) {\n this.el.append(out n_iter, null); // drop at top level..\n node.parent = null;\n this.file.tree = node;\n \n \n } else if (pos < 2) {\n //print(target_data[1] > 0 ? 'insert_after' : 'insert_before');\n \n this.el.get_iter(out iter_after, tree_path ); \n this.el.iter_parent(out iter_par, iter_after);\n expand_parent = this.el.get_path(iter_par);\n \n GLib.Value value;\n this.el.get_value( iter_par, 2, out value);\n parentNode = (JsRender.Node)value.dup_object();\n \n \n this.el.get_value( iter_after, 2, out value);\n var relNode = (JsRender.Node)value.dup_object();\n \n if ( pos > 0 ) {\n \n this.el.insert_after(out n_iter, iter_par , iter_after);\n var ix = parentNode.items.index_of(relNode);\n parentNode.items.insert(ix+1, node);\n \n } else {\n this.el.insert_before(out n_iter, iter_par , iter_after);\n var ix = parentNode.items.index_of(relNode);\n parentNode.items.insert(ix, node);\n \n }\n node.parent = parentNode;\n \n \n \n } else {\n // print(\"appending to \" + parent_str);\n this.el.get_iter(out iter_par, tree_path);\n this.el.append(out n_iter, iter_par );\n expand_parent = this.el.get_path(iter_par);\n \n GLib.Value value;\n this.el.get_value( iter_par, 2, out value);\n parentNode = (JsRender.Node)value.dup_object();\n node.parent = parentNode;\n parentNode.items.add(node);\n }\n \n // reparent node in tree...\n \n \n // why only on no parent???\n \n //if (node.parent = null) {\n \n \n \n //}\n \n \n // work out what kind of packing to use.. -- should be in \n if (!node.has(\"pack\") && parent_str.length > 1) {\n \n this.file.palete().fillPack(node,parentNode);\n \n \n }\n \n // add the node...\n \n this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 );\n var o = new GLib.Value(typeof(Object));\n o.set_object((Object)node);\n \n this.el.set_value(n_iter, 2, o);\n \n \n \n \n// load children - if it has any..\n \n if (node.items.size > 0) {\n this.load(node.items, n_iter);\n _this.view.el.expand_row(this.el.get_path(n_iter), true);\n } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) {\n _this.view.el.expand_row(expand_parent,true);\n }\n\n //if (tp != null && (node.items.length() > 0 || pos > 1)) {\n // _this.view.el.expand_row(this.el.get_path(iter_par), true);\n // }\n // wee need to get the empty proptypes from somewhere..\n \n //var olditer = this.activeIter;\n this.activePath = this.el.get_path(n_iter).to_string();\n\n\n \n \n _this.view.el.set_cursor(this.el.get_path(n_iter), null, false);\n _this.changed();\n \n \n \n}\n", "$ listAllTypes" : "function() {\n var s = this.get('/LeftTree.view').selection;\n print (\"LIST ALL TYPES: \" + s.count_selected_rows() );\n \n if (s.count_selected_rows() > 0) {\n var iter = new Gtk.TreeIter(); \n s.get_selected(this.el, iter);\n\n // set some properties of the tree for use by the dropped element.\n var value = new GObject.Value('');\n this.el.get_value(iter, 2, value);\n var data = JSON.parse(value.value);\n \n \n var xname = this.get('/LeftTree.model').file.guessName(data);\n console.log('selected:' + xname);\n if (xname.length) {\n return [ xname ];\n }\n return []; // could not find it..\n }\n \n var ret = [ ];\n \n var _this = this;\n function addall(li)\n {\n li.forEach(function(el) {\n // this is specific to roo!!!?\n if (!el) { // skip empty?\n return;\n }\n var fullpath = _this.file.guessName(el);\n if (fullpath.length && ret.indexOf(fullpath) < 0) {\n ret.push(fullpath);\n }\n \n \n if (el.items && el.items.length) {\n addall(el.items);\n }\n \n });\n \n \n }\n \n addall([this.currentTree]);\n \n // only if we have nothing, should we add '*top'\n if (!ret.length) {\n ret = [ '*top' ];\n }\n //console.log('all types in tree');\n //console.dump(ret);\n \n return ret;\n \n}\n" }, { "* init" : " this.el.add_attribute(_this.renderer.el , \"markup\", 0 );\n ", - "xtype" : "TreeViewColumn", "* pack" : "append_column", + "xtype" : "TreeViewColumn", "$ xns" : "Gtk", "items" : [ { "id" : "renderer", - "* pack" : "pack_start,true", "xtype" : "CellRendererText", + "* pack" : "pack_start,true", "$ xns" : "Gtk" } ] @@ -90,8 +90,8 @@ }, { "id" : "LeftTreeMenu", - "* pack" : false, "xtype" : "Menu", + "* pack" : false, "$ xns" : "Gtk", "items" : [ { @@ -99,8 +99,8 @@ "activate" : " ( ) => {\n \n print(\"ACTIVATE?\");\n \n \n _this.model.deleteSelected();\n}" }, "label" : "Delete Element", - "* pack" : "add", "xtype" : "MenuItem", + "* pack" : "add", "$ xns" : "Gtk" }, { @@ -108,8 +108,8 @@ "activate" : " () => {\n\n DialogSaveTemplate.singleton().show(\n (Gtk.Window) _this.el.get_toplevel (), \n _this.model.file.palete(), \n _this.getActiveElement()\n );\n \n \n}" }, "label" : "Save as Template", - "* pack" : "add", "xtype" : "MenuItem", + "* pack" : "add", "$ xns" : "Gtk" }, { @@ -117,8 +117,8 @@ "activate" : " () => {\n var node = _this.getActiveElement();\n var name = DialogSaveModule.singleton().show(\n (Gtk.Window) _this.el.get_toplevel (), \n _this.model.file.project, \n node\n );\n if (name.length < 1) {\n return;\n \n }\n node.props.set(\"* xinclude\", name);\n node.items.clear();\n\n\n var s = _this.view.el.get_selection();\n \n print(\"GET SELECTED?\");\n Gtk.TreeIter iter;\n Gtk.TreeModel mod;\n\n \n if (!s.get_selected(out mod, out iter)) {\n return; // nothing seleted..\n }\n Gtk.TreeIter citer;\n var n_cn = mod.iter_n_children(iter) -1;\n for (var i = n_cn; i > -1; i--) {\n mod.iter_nth_child(out citer, iter, i);\n \n\n print(\"removing node from Tree\\n\"); \n \n _this.model.el.remove(ref citer);\n }\n _this.changed();\n _this.node_selected(node);\n \n \n}" }, "label" : "Save as Module", - "* pack" : "add", "xtype" : "MenuItem", + "* pack" : "add", "$ xns" : "Gtk" } ] diff --git a/Builder4/WindowLeftTree.js b/Builder4/WindowLeftTree.js index c644ab72f..d91b4835f 100644 --- a/Builder4/WindowLeftTree.js +++ b/Builder4/WindowLeftTree.js @@ -19,9 +19,17 @@ WindowLeftTree=new XObject({ return _this.model.pathToNode(path); }, - before_node_change : "(JsRender.Node? node)", id : "WindowLeftTree", + before_node_change : "(JsRender.Node? node)", shadow_type : Gtk.ShadowType.IN, + getActiveFile : () { + return this.model.file; + }, + xtype : "ScrolledWindow", + changed : "()", + xns : Gtk, + node_selected : "(JsRender.Node? node)", + main_window : "null", getActivePath : () { var model = this.model; var view = this.view.el; @@ -33,28 +41,17 @@ WindowLeftTree=new XObject({ view.get_selection().get_selected(out mod, out iter); return mod.get_path(iter).to_string(); }, - xtype : "ScrolledWindow", - changed : "()", - xns : Gtk, - node_selected : "(JsRender.Node? node)", - getActiveFile : () { - return this.model.file; - }, - main_window : "null", items : [ { dragData : "", - selectNode : (string treepath_str) { - //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str)); - var tp = new Gtk.TreePath.from_string(treepath_str); - - this.el.set_cursor(tp, null, false); - this.el.scroll_to_cell(tp, null, false, 0,0); - }, drag_x : "", dropList : "", id : "view", drag_y : "", + tooltip_column : 1, + xtype : "TreeView", + enable_tree_lines : TRUE, + headers_visible : FALSE, highlightDropPath : ( string treepath, Gtk.TreeViewDropPosition pos) { // highlighting for drag/drop @@ -65,13 +62,16 @@ WindowLeftTree=new XObject({ } }, - tooltip_column : 1, - xtype : "TreeView", - enable_tree_lines : TRUE, - headers_visible : FALSE, drag_in_motion : "", blockChanges : false, xns : Gtk, + selectNode : (string treepath_str) { + //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str)); + var tp = new Gtk.TreePath.from_string(treepath_str); + + this.el.set_cursor(tp, null, false); + this.el.scroll_to_cell(tp, null, false, 0,0); + }, listeners : { button_press_event : ( ev) => { //console.log("button press?"); @@ -101,6 +101,47 @@ WindowLeftTree=new XObject({ // print("click:" + res.path.to_string()); return true; }, + drag_begin : ( ctx) => { + //print('SOURCE: drag-begin'); + + + //this.targetData = ""; + + // find what is selected in our tree... + + var s = _this.view.el.get_selection(); + if (s.count_selected_rows() < 1) { + return; + } + Gtk.TreeIter iter; + Gtk.TreeModel mod; + s.get_selected(out mod, out iter); + + + + // set some properties of the tree for use by the dropped element. + GLib.Value value; + _this.model.el.get_value(iter, 2, out value); + var data = (JsRender.Node)(value.dup_object()); + var xname = data.fqn(); + print ("XNAME IS " + xname+ "\n"); + this.dragData = xname; + this.dropList = _this.model.file.palete().getDropList(xname); + + print ("DROP LIST IS " + string.joinv(", ", this.dropList) + "\n"); + + + // make the drag icon a picture of the node that was selected + var path = _this.model.el.get_path(iter); + + //this.treepath = path.to_string(); + + var pix = this.el.create_row_drag_icon ( path); + + Gtk.drag_set_icon_surface (ctx, pix) ; + + return; + }, cursor_changed : ( ) => { @@ -159,47 +200,6 @@ WindowLeftTree=new XObject({ return ; }, - drag_begin : ( ctx) => { - //print('SOURCE: drag-begin'); - - - //this.targetData = ""; - - // find what is selected in our tree... - - var s = _this.view.el.get_selection(); - if (s.count_selected_rows() < 1) { - return; - } - Gtk.TreeIter iter; - Gtk.TreeModel mod; - s.get_selected(out mod, out iter); - - - - // set some properties of the tree for use by the dropped element. - GLib.Value value; - _this.model.el.get_value(iter, 2, out value); - var data = (JsRender.Node)(value.dup_object()); - var xname = data.fqn(); - print ("XNAME IS " + xname+ "\n"); - this.dragData = xname; - this.dropList = _this.model.file.palete().getDropList(xname); - - print ("DROP LIST IS " + string.joinv(", ", this.dropList) + "\n"); - - - // make the drag icon a picture of the node that was selected - var path = _this.model.el.get_path(iter); - - //this.treepath = path.to_string(); - - var pix = this.el.create_row_drag_icon ( path); - - Gtk.drag_set_icon_surface (ctx, pix) ; - - return; - }, drag_end : (drag_context) => { //Seed.print('LEFT-TREE: drag-end'); this.dragData = ""; @@ -512,156 +512,115 @@ WindowLeftTree=new XObject({ }, items : [ { - dropNode : (string target_data_str, JsRender.Node node, bool show_templates) { - // print("drop Node"); - // console.dump(node); - // console.dump(target_data); - - - // 0 = before , 1=after 2/3 onto - - - var target_data= target_data_str.split("|"); - - var parent_str = target_data[0].length > 0 ? target_data[0] : ""; - var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop.. - - - Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null; - - - - //print("add " + tp + "@" + target_data[1] ); - - JsRender.Node parentNode = null; - - Gtk.TreeIter iter_after; - Gtk.TreeIter iter_par ; - - - if (target_data.length == 3 && target_data[2].length > 0) { - node.props.set("* prop", target_data[2]); - } + findDropNode : (string treepath_str, string[] targets) { - Gtk.TreePath expand_parent = null; + // this is used by the dragdrop code in the roo version AFAIR.. + + //var path = treepath_str.replace(/^builder-/, ''); + // treemap is depreciated... - should really check if model has any entries.. + + if (this.el.iter_n_children(null) < 1) { + //print("NO KEYS"); + return "|%d".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER); + } + //print("FIND treepath: " + path); + //console.dump(this.treemap); + + //if (!treepath_str.match(/^builder-/)) { + // return []; // nothing! + //} + if (targets.length > 0 && targets[0] == "*") { + return treepath_str; + } + return this.findDropNodeByPath(treepath_str,targets, -1); + }, + currentTree : false, + id : "model", + loadFile : (JsRender.JsRender f) { + //console.dump(f); + this.el.clear(); + this.file = f; + + + // if (!f) { + // console.log('missing file'); + // return; + // } + + // load the file if not loaded.. + if (f.tree == null) { + f.loadItems( ); + } + // if it's still null? + if (f.tree == null) { + return; + } + + /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name); + + //if (f.items.length && typeof(f.items[0]) == 'string') { + + //this.get('/RightEditor').el.show(); + //this.get('/RightEditor.view').load( f.items[0]); + // return; + //} + //print("LOAD"); + //print(JSON.stringify(f.items, null,4)); + //console.dump(f.items); + var o = new Gee.ArrayList(); + o.add(f.tree); + this.load(o,null); + + _this.view.el.expand_all(); + + if (f.tree.items.size < 1) { + // single item.. - // we only need to show the template if it's come from else where? - if (show_templates) { - var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node); - node = new_node; - } + //this.get('/Window.leftvpaned').el.set_position(80); + // select first... + _this.view.el.set_cursor( + new Gtk.TreePath.from_string("0"), null, false); - //print("pos is %d \n".printf(pos)); - Gtk.TreeIter n_iter; - - if ( parent_str.length < 1) { - this.el.append(out n_iter, null); // drop at top level.. - node.parent = null; - this.file.tree = node; - - - } else if (pos < 2) { - //print(target_data[1] > 0 ? 'insert_after' : 'insert_before'); - - this.el.get_iter(out iter_after, tree_path ); - this.el.iter_parent(out iter_par, iter_after); - expand_parent = this.el.get_path(iter_par); - - GLib.Value value; - this.el.get_value( iter_par, 2, out value); - parentNode = (JsRender.Node)value.dup_object(); - - - this.el.get_value( iter_after, 2, out value); - var relNode = (JsRender.Node)value.dup_object(); - - if ( pos > 0 ) { - - this.el.insert_after(out n_iter, iter_par , iter_after); - var ix = parentNode.items.index_of(relNode); - parentNode.items.insert(ix+1, node); - - } else { - this.el.insert_before(out n_iter, iter_par , iter_after); - var ix = parentNode.items.index_of(relNode); - parentNode.items.insert(ix, node); - - } - node.parent = parentNode; - - - - } else { - // print("appending to " + parent_str); - this.el.get_iter(out iter_par, tree_path); - this.el.append(out n_iter, iter_par ); - expand_parent = this.el.get_path(iter_par); - - GLib.Value value; - this.el.get_value( iter_par, 2, out value); - parentNode = (JsRender.Node)value.dup_object(); - node.parent = parentNode; - parentNode.items.add(node); - } - - // reparent node in tree... - - - // why only on no parent??? - - //if (node.parent = null) { - - - - //} - - - // work out what kind of packing to use.. -- should be in - if (!node.has("pack") && parent_str.length > 1) { - - this.file.palete().fillPack(node,parentNode); - + } else { + //this.get('/Window.leftvpaned').el.set_position(200); + } + + return; + /* + + //print("hide right editior"); + //this.get('/RightEditor').el.hide(); + //this.get('/Editor').el.hide(); + //print("set current tree"); + //this.currentTree = this.toJS(false, false)[0]; + //console.dump(this.currentTree); + //this.currentTree = this.currentTree || { items: [] }; + //_this.renderView(); + //console.dump(this.map); + //var RightPalete = imports.Builder.RightPalete.RightPalete; + + + var pm = this.get('/RightPalete.model'); + // set up provider.. + + this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider(); + + if (!this.get('/RightPalete').provider) { + print ("********* PALETE PROVIDER MISSING?!!"); + } + this.get('/LeftTree').renderView(); + + pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes())); + + - } - - // add the node... - - this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 ); - var o = new GLib.Value(typeof(Object)); - o.set_object((Object)node); - - this.el.set_value(n_iter, 2, o); - - - - - // load children - if it has any.. - - if (node.items.size > 0) { - this.load(node.items, n_iter); - _this.view.el.expand_row(this.el.get_path(n_iter), true); - } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) { - _this.view.el.expand_row(expand_parent,true); - } - - //if (tp != null && (node.items.length() > 0 || pos > 1)) { - // _this.view.el.expand_row(this.el.get_path(iter_par), true); - // } - // wee need to get the empty proptypes from somewhere.. - - //var olditer = this.activeIter; - this.activePath = this.el.get_path(n_iter).to_string(); - - - - - _this.view.el.set_cursor(this.el.get_path(n_iter), null, false); - _this.changed(); - - + this.get('/Window.view-notebook').el.set_current_page( + this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1); + */ }, + file : "null", updateSelected : () { @@ -684,79 +643,7 @@ WindowLeftTree=new XObject({ 1, node.nodeTip(), -1 ); }, - moveNode : (string target_data, Gdk.DragAction action) - { - - /// target_data = "path|pos"); - - - //print("MOVE NODE"); - // console.dump(target_data); - Gtk.TreeIter old_iter; - Gtk.TreeModel mod; - - var s = _this.view.el.get_selection(); - s.get_selected(out mod , out old_iter); - mod.get_path(old_iter); - - var node = this.pathToNode(mod.get_path(old_iter).to_string()); - //console.dump(node); - if (node == null) { - print("moveNode: ERROR - node is null?"); - } - - - - // needs to drop first, otherwise the target_data - // treepath will be invalid. - - - if ((action & Gdk.DragAction.MOVE) > 0) { - print("REMOVING OLD NODE : " + target_data + "\n"); - node.remove(); - this.dropNode(target_data, node, false); - this.el.remove(ref old_iter); - - - - } else { - print("DROPPING NODE // copy: " + target_data + "\n"); - node = node.deepClone(); - this.dropNode(target_data, node, false); - } - _this.changed(); - this.activePath= ""; - //this.updateNode(false,true); - }, - currentTree : false, - load : (Gee.ArrayList tr, Gtk.TreeIter? iter) - { - Gtk.TreeIter citer; - //this.insert(citer,iter,0); - for(var i =0 ; i < tr.size; i++) { - if (iter != null) { - this.el.insert(out citer,iter,-1); // why not append? - } else { - this.el.append(out citer,null); - } - - this.el.set(citer, 0, tr.get(i).nodeTitle(), - 1, tr.get(i).nodeTip(), -1 - ); - var o = new GLib.Value(typeof(Object)); - o.set_object((Object)tr.get(i)); - - this.el.set_value(citer, 2, o); - - if (tr.get(i).items.size > 0) { - this.load(tr.get(i).items, citer); - } - - } - - - }, - id : "model", + xtype : "TreeStore", findDropNodeByPath : (string treepath_str, string[] targets, int in_pref = -1) { var path = treepath_str; // dupe it.. @@ -831,115 +718,78 @@ WindowLeftTree=new XObject({ return ""; }, - file : "null", - xtype : "TreeStore", - findDropNode : (string treepath_str, string[] targets) { - - // this is used by the dragdrop code in the roo version AFAIR.. + moveNode : (string target_data, Gdk.DragAction action) + { + + /// target_data = "path|pos"); + + + //print("MOVE NODE"); + // console.dump(target_data); + Gtk.TreeIter old_iter; + Gtk.TreeModel mod; + + var s = _this.view.el.get_selection(); + s.get_selected(out mod , out old_iter); + mod.get_path(old_iter); + + var node = this.pathToNode(mod.get_path(old_iter).to_string()); + //console.dump(node); + if (node == null) { + print("moveNode: ERROR - node is null?"); + } + + - //var path = treepath_str.replace(/^builder-/, ''); - // treemap is depreciated... - should really check if model has any entries.. + // needs to drop first, otherwise the target_data + // treepath will be invalid. - if (this.el.iter_n_children(null) < 1) { - //print("NO KEYS"); - return "|%d".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER); - } - //print("FIND treepath: " + path); - //console.dump(this.treemap); - //if (!treepath_str.match(/^builder-/)) { - // return []; // nothing! - //} - if (targets.length > 0 && targets[0] == "*") { - return treepath_str; + if ((action & Gdk.DragAction.MOVE) > 0) { + print("REMOVING OLD NODE : " + target_data + "\n"); + node.remove(); + this.dropNode(target_data, node, false); + this.el.remove(ref old_iter); + + + + } else { + print("DROPPING NODE // copy: " + target_data + "\n"); + node = node.deepClone(); + this.dropNode(target_data, node, false); } - return this.findDropNodeByPath(treepath_str,targets, -1); + _this.changed(); + this.activePath= ""; + //this.updateNode(false,true); }, activePath : "\"\"", columns : typeof(string),typeof(string),typeof(Object), - loadFile : (JsRender.JsRender f) { - //console.dump(f); - this.el.clear(); - this.file = f; - - - // if (!f) { - // console.log('missing file'); - // return; - // } - - // load the file if not loaded.. - if (f.tree == null) { - f.loadItems( ); - } - // if it's still null? - if (f.tree == null) { - return; - } - - /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name); - - //if (f.items.length && typeof(f.items[0]) == 'string') { - - //this.get('/RightEditor').el.show(); - //this.get('/RightEditor.view').load( f.items[0]); - // return; - //} - //print("LOAD"); - //print(JSON.stringify(f.items, null,4)); - //console.dump(f.items); - var o = new Gee.ArrayList(); - o.add(f.tree); - this.load(o,null); - - _this.view.el.expand_all(); - - if (f.tree.items.size < 1) { - // single item.. + load : (Gee.ArrayList tr, Gtk.TreeIter? iter) + { + Gtk.TreeIter citer; + //this.insert(citer,iter,0); + for(var i =0 ; i < tr.size; i++) { + if (iter != null) { + this.el.insert(out citer,iter,-1); // why not append? + } else { + this.el.append(out citer,null); + } - //this.get('/Window.leftvpaned').el.set_position(80); - // select first... - _this.view.el.set_cursor( - new Gtk.TreePath.from_string("0"), null, false); + this.el.set(citer, 0, tr.get(i).nodeTitle(), + 1, tr.get(i).nodeTip(), -1 + ); + var o = new GLib.Value(typeof(Object)); + o.set_object((Object)tr.get(i)); + this.el.set_value(citer, 2, o); - } else { - //this.get('/Window.leftvpaned').el.set_position(200); - } - - return; - /* - - //print("hide right editior"); - //this.get('/RightEditor').el.hide(); - //this.get('/Editor').el.hide(); - //print("set current tree"); - //this.currentTree = this.toJS(false, false)[0]; - //console.dump(this.currentTree); - //this.currentTree = this.currentTree || { items: [] }; - //_this.renderView(); - //console.dump(this.map); - //var RightPalete = imports.Builder.RightPalete.RightPalete; - - - var pm = this.get('/RightPalete.model'); - // set up provider.. - - this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider(); - - if (!this.get('/RightPalete').provider) { - print ("********* PALETE PROVIDER MISSING?!!"); + if (tr.get(i).items.size > 0) { + this.load(tr.get(i).items, citer); + } + } - this.get('/LeftTree').renderView(); - - pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes())); - + - - this.get('/Window.view-notebook').el.set_current_page( - this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1); - */ - }, deleteSelected : () { @@ -1005,6 +855,158 @@ WindowLeftTree=new XObject({ return (JsRender.Node)value.dup_object(); + }, + dropNode : (string target_data_str, JsRender.Node node, bool show_templates) { + // print("drop Node"); + // console.dump(node); + // console.dump(target_data); + + + // 0 = before , 1=after 2/3 onto + + + var target_data= target_data_str.split("|"); + + var parent_str = target_data[0].length > 0 ? target_data[0] : ""; + var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop.. + + + Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null; + + + + //print("add " + tp + "@" + target_data[1] ); + + JsRender.Node parentNode = null; + + Gtk.TreeIter iter_after; + Gtk.TreeIter iter_par ; + + + if (target_data.length == 3 && target_data[2].length > 0) { + node.props.set("* prop", target_data[2]); + } + + Gtk.TreePath expand_parent = null; + + // we only need to show the template if it's come from else where? + if (show_templates) { + var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node); + if (new_node != null) { + node = new_node; + } + } + + //print("pos is %d \n".printf(pos)); + + Gtk.TreeIter n_iter; + + if ( parent_str.length < 1) { + this.el.append(out n_iter, null); // drop at top level.. + node.parent = null; + this.file.tree = node; + + + } else if (pos < 2) { + //print(target_data[1] > 0 ? 'insert_after' : 'insert_before'); + + this.el.get_iter(out iter_after, tree_path ); + this.el.iter_parent(out iter_par, iter_after); + expand_parent = this.el.get_path(iter_par); + + GLib.Value value; + this.el.get_value( iter_par, 2, out value); + parentNode = (JsRender.Node)value.dup_object(); + + + this.el.get_value( iter_after, 2, out value); + var relNode = (JsRender.Node)value.dup_object(); + + if ( pos > 0 ) { + + this.el.insert_after(out n_iter, iter_par , iter_after); + var ix = parentNode.items.index_of(relNode); + parentNode.items.insert(ix+1, node); + + } else { + this.el.insert_before(out n_iter, iter_par , iter_after); + var ix = parentNode.items.index_of(relNode); + parentNode.items.insert(ix, node); + + } + node.parent = parentNode; + + + + } else { + // print("appending to " + parent_str); + this.el.get_iter(out iter_par, tree_path); + this.el.append(out n_iter, iter_par ); + expand_parent = this.el.get_path(iter_par); + + GLib.Value value; + this.el.get_value( iter_par, 2, out value); + parentNode = (JsRender.Node)value.dup_object(); + node.parent = parentNode; + parentNode.items.add(node); + } + + // reparent node in tree... + + + // why only on no parent??? + + //if (node.parent = null) { + + + + //} + + + // work out what kind of packing to use.. -- should be in + if (!node.has("pack") && parent_str.length > 1) { + + this.file.palete().fillPack(node,parentNode); + + + } + + // add the node... + + this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 ); + var o = new GLib.Value(typeof(Object)); + o.set_object((Object)node); + + this.el.set_value(n_iter, 2, o); + + + + + // load children - if it has any.. + + if (node.items.size > 0) { + this.load(node.items, n_iter); + _this.view.el.expand_row(this.el.get_path(n_iter), true); + } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) { + _this.view.el.expand_row(expand_parent,true); + } + + //if (tp != null && (node.items.length() > 0 || pos > 1)) { + // _this.view.el.expand_row(this.el.get_path(iter_par), true); + // } + // wee need to get the empty proptypes from somewhere.. + + //var olditer = this.activeIter; + this.activePath = this.el.get_path(n_iter).to_string(); + + + + + _this.view.el.set_cursor(this.el.get_path(n_iter), null, false); + _this.changed(); + + + }, listAllTypes : function() { var s = this.get('/LeftTree.view').selection; diff --git a/Builder4/WindowLeftTree.vala b/Builder4/WindowLeftTree.vala index b3b6b6c62..a0481cae5 100644 --- a/Builder4/WindowLeftTree.vala +++ b/Builder4/WindowLeftTree.vala @@ -45,7 +45,7 @@ public class Xcls_WindowLeftTree : Object this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); } // user defined functions - public JsRender.Node? getActiveElement () { // return path to actie node. + public JsRender.Node? getActiveElement () { // return path to actie node. var path = this.getActivePath(); if (path.length < 1) { @@ -54,7 +54,10 @@ public class Xcls_WindowLeftTree : Object return _this.model.pathToNode(path); } - public string getActivePath () { + public JsRender.JsRender getActiveFile () { + return this.model.file; + } + public string getActivePath () { var model = this.model; var view = this.view.el; if (view.get_selection().count_selected_rows() < 1) { @@ -65,9 +68,6 @@ public class Xcls_WindowLeftTree : Object view.get_selection().get_selected(out mod, out iter); return mod.get_path(iter).to_string(); } - public JsRender.JsRender getActiveFile () { - return this.model.file; - } public class Xcls_view : Object { public Gtk.TreeView el; @@ -172,6 +172,47 @@ public class Xcls_WindowLeftTree : Object // print("click:" + res.path.to_string()); return true; }); + this.el.drag_begin.connect( ( ctx) => { + //print('SOURCE: drag-begin'); + + + //this.targetData = ""; + + // find what is selected in our tree... + + var s = _this.view.el.get_selection(); + if (s.count_selected_rows() < 1) { + return; + } + Gtk.TreeIter iter; + Gtk.TreeModel mod; + s.get_selected(out mod, out iter); + + + + // set some properties of the tree for use by the dropped element. + GLib.Value value; + _this.model.el.get_value(iter, 2, out value); + var data = (JsRender.Node)(value.dup_object()); + var xname = data.fqn(); + print ("XNAME IS " + xname+ "\n"); + this.dragData = xname; + this.dropList = _this.model.file.palete().getDropList(xname); + + print ("DROP LIST IS " + string.joinv(", ", this.dropList) + "\n"); + + + // make the drag icon a picture of the node that was selected + var path = _this.model.el.get_path(iter); + + //this.treepath = path.to_string(); + + var pix = this.el.create_row_drag_icon ( path); + + Gtk.drag_set_icon_surface (ctx, pix) ; + + return; + }); this.el.cursor_changed.connect( ( ) => { @@ -230,47 +271,6 @@ public class Xcls_WindowLeftTree : Object return ; }); - this.el.drag_begin.connect( ( ctx) => { - //print('SOURCE: drag-begin'); - - - //this.targetData = ""; - - // find what is selected in our tree... - - var s = _this.view.el.get_selection(); - if (s.count_selected_rows() < 1) { - return; - } - Gtk.TreeIter iter; - Gtk.TreeModel mod; - s.get_selected(out mod, out iter); - - - - // set some properties of the tree for use by the dropped element. - GLib.Value value; - _this.model.el.get_value(iter, 2, out value); - var data = (JsRender.Node)(value.dup_object()); - var xname = data.fqn(); - print ("XNAME IS " + xname+ "\n"); - this.dragData = xname; - this.dropList = _this.model.file.palete().getDropList(xname); - - print ("DROP LIST IS " + string.joinv(", ", this.dropList) + "\n"); - - - // make the drag icon a picture of the node that was selected - var path = _this.model.el.get_path(iter); - - //this.treepath = path.to_string(); - - var pix = this.el.create_row_drag_icon ( path); - - Gtk.drag_set_icon_surface (ctx, pix) ; - - return; - }); this.el.drag_end.connect( (drag_context) => { //Seed.print('LEFT-TREE: drag-end'); this.dragData = ""; @@ -583,14 +583,7 @@ public class Xcls_WindowLeftTree : Object } // user defined functions - public void selectNode (string treepath_str) { - //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str)); - var tp = new Gtk.TreePath.from_string(treepath_str); - - this.el.set_cursor(tp, null, false); - this.el.scroll_to_cell(tp, null, false, 0,0); - } - public void highlightDropPath ( string treepath, Gtk.TreeViewDropPosition pos) { + public void highlightDropPath ( string treepath, Gtk.TreeViewDropPosition pos) { // highlighting for drag/drop if (treepath.length > 0) { @@ -600,6 +593,13 @@ public class Xcls_WindowLeftTree : Object } } + public void selectNode (string treepath_str) { + //this.selection.select_path(new Gtk.TreePath.from_string( treepath_str)); + var tp = new Gtk.TreePath.from_string(treepath_str); + + this.el.set_cursor(tp, null, false); + this.el.scroll_to_cell(tp, null, false, 0,0); + } } public class Xcls_model : Object { @@ -631,157 +631,113 @@ public class Xcls_WindowLeftTree : Object print("model initialized"); } // user defined functions - public void dropNode (string target_data_str, JsRender.Node node, bool show_templates) { - // print("drop Node"); - // console.dump(node); - // console.dump(target_data); - - - // 0 = before , 1=after 2/3 onto - - - var target_data= target_data_str.split("|"); - - var parent_str = target_data[0].length > 0 ? target_data[0] : ""; - var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop.. - - - Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null; - - - - //print("add " + tp + "@" + target_data[1] ); - - JsRender.Node parentNode = null; - - Gtk.TreeIter iter_after; - Gtk.TreeIter iter_par ; - - - if (target_data.length == 3 && target_data[2].length > 0) { - node.props.set("* prop", target_data[2]); - } + public string findDropNode (string treepath_str, string[] targets) { - Gtk.TreePath expand_parent = null; + // this is used by the dragdrop code in the roo version AFAIR.. + + //var path = treepath_str.replace(/^builder-/, ''); + // treemap is depreciated... - should really check if model has any entries.. + + if (this.el.iter_n_children(null) < 1) { + //print("NO KEYS"); + return "|%d".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER); + } + //print("FIND treepath: " + path); + //console.dump(this.treemap); + + //if (!treepath_str.match(/^builder-/)) { + // return []; // nothing! + //} + if (targets.length > 0 && targets[0] == "*") { + return treepath_str; + } + return this.findDropNodeByPath(treepath_str,targets, -1); + } + public void loadFile (JsRender.JsRender f) { + //console.dump(f); + this.el.clear(); + this.file = f; + + + // if (!f) { + // console.log('missing file'); + // return; + // } + + // load the file if not loaded.. + if (f.tree == null) { + f.loadItems( ); + } + // if it's still null? + if (f.tree == null) { + return; + } + + /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name); + + //if (f.items.length && typeof(f.items[0]) == 'string') { + + //this.get('/RightEditor').el.show(); + //this.get('/RightEditor.view').load( f.items[0]); + // return; + //} + //print("LOAD"); + //print(JSON.stringify(f.items, null,4)); + //console.dump(f.items); + var o = new Gee.ArrayList(); + o.add(f.tree); + this.load(o,null); + + _this.view.el.expand_all(); + + if (f.tree.items.size < 1) { + // single item.. - // we only need to show the template if it's come from else where? - if (show_templates) { - var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node); - node = new_node; - } + //this.get('/Window.leftvpaned').el.set_position(80); + // select first... + _this.view.el.set_cursor( + new Gtk.TreePath.from_string("0"), null, false); - //print("pos is %d \n".printf(pos)); - Gtk.TreeIter n_iter; - - if ( parent_str.length < 1) { - this.el.append(out n_iter, null); // drop at top level.. - node.parent = null; - this.file.tree = node; - - - } else if (pos < 2) { - //print(target_data[1] > 0 ? 'insert_after' : 'insert_before'); - - this.el.get_iter(out iter_after, tree_path ); - this.el.iter_parent(out iter_par, iter_after); - expand_parent = this.el.get_path(iter_par); - - GLib.Value value; - this.el.get_value( iter_par, 2, out value); - parentNode = (JsRender.Node)value.dup_object(); - + } else { + //this.get('/Window.leftvpaned').el.set_position(200); + } + + return; + /* + + //print("hide right editior"); + //this.get('/RightEditor').el.hide(); + //this.get('/Editor').el.hide(); + //print("set current tree"); + //this.currentTree = this.toJS(false, false)[0]; + //console.dump(this.currentTree); + //this.currentTree = this.currentTree || { items: [] }; + //_this.renderView(); + //console.dump(this.map); + //var RightPalete = imports.Builder.RightPalete.RightPalete; + + + var pm = this.get('/RightPalete.model'); + // set up provider.. + + this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider(); + + if (!this.get('/RightPalete').provider) { + print ("********* PALETE PROVIDER MISSING?!!"); + } + this.get('/LeftTree').renderView(); + + pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes())); + + - this.el.get_value( iter_after, 2, out value); - var relNode = (JsRender.Node)value.dup_object(); - - if ( pos > 0 ) { - - this.el.insert_after(out n_iter, iter_par , iter_after); - var ix = parentNode.items.index_of(relNode); - parentNode.items.insert(ix+1, node); - - } else { - this.el.insert_before(out n_iter, iter_par , iter_after); - var ix = parentNode.items.index_of(relNode); - parentNode.items.insert(ix, node); - - } - node.parent = parentNode; - - - - } else { - // print("appending to " + parent_str); - this.el.get_iter(out iter_par, tree_path); - this.el.append(out n_iter, iter_par ); - expand_parent = this.el.get_path(iter_par); - - GLib.Value value; - this.el.get_value( iter_par, 2, out value); - parentNode = (JsRender.Node)value.dup_object(); - node.parent = parentNode; - parentNode.items.add(node); - } - - // reparent node in tree... - - - // why only on no parent??? - - //if (node.parent = null) { - - - - //} - - - // work out what kind of packing to use.. -- should be in - if (!node.has("pack") && parent_str.length > 1) { - - this.file.palete().fillPack(node,parentNode); - - - } - - // add the node... - - this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 ); - var o = new GLib.Value(typeof(Object)); - o.set_object((Object)node); - - this.el.set_value(n_iter, 2, o); - - - - - // load children - if it has any.. - - if (node.items.size > 0) { - this.load(node.items, n_iter); - _this.view.el.expand_row(this.el.get_path(n_iter), true); - } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) { - _this.view.el.expand_row(expand_parent,true); - } - - //if (tp != null && (node.items.length() > 0 || pos > 1)) { - // _this.view.el.expand_row(this.el.get_path(iter_par), true); - // } - // wee need to get the empty proptypes from somewhere.. - - //var olditer = this.activeIter; - this.activePath = this.el.get_path(n_iter).to_string(); - - - - - _this.view.el.set_cursor(this.el.get_path(n_iter), null, false); - _this.changed(); - - + this.get('/Window.view-notebook').el.set_current_page( + this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1); + */ } - public void updateSelected () { + public void updateSelected () { var s = _this.view.el.get_selection(); @@ -803,78 +759,7 @@ public class Xcls_WindowLeftTree : Object 1, node.nodeTip(), -1 ); } - public void moveNode (string target_data, Gdk.DragAction action) - { - - /// target_data = "path|pos"); - - - //print("MOVE NODE"); - // console.dump(target_data); - Gtk.TreeIter old_iter; - Gtk.TreeModel mod; - - var s = _this.view.el.get_selection(); - s.get_selected(out mod , out old_iter); - mod.get_path(old_iter); - - var node = this.pathToNode(mod.get_path(old_iter).to_string()); - //console.dump(node); - if (node == null) { - print("moveNode: ERROR - node is null?"); - } - - - - // needs to drop first, otherwise the target_data - // treepath will be invalid. - - - if ((action & Gdk.DragAction.MOVE) > 0) { - print("REMOVING OLD NODE : " + target_data + "\n"); - node.remove(); - this.dropNode(target_data, node, false); - this.el.remove(ref old_iter); - - - - } else { - print("DROPPING NODE // copy: " + target_data + "\n"); - node = node.deepClone(); - this.dropNode(target_data, node, false); - } - _this.changed(); - this.activePath= ""; - //this.updateNode(false,true); - } - public void load (Gee.ArrayList tr, Gtk.TreeIter? iter) - { - Gtk.TreeIter citer; - //this.insert(citer,iter,0); - for(var i =0 ; i < tr.size; i++) { - if (iter != null) { - this.el.insert(out citer,iter,-1); // why not append? - } else { - this.el.append(out citer,null); - } - - this.el.set(citer, 0, tr.get(i).nodeTitle(), - 1, tr.get(i).nodeTip(), -1 - ); - var o = new GLib.Value(typeof(Object)); - o.set_object((Object)tr.get(i)); - - this.el.set_value(citer, 2, o); - - if (tr.get(i).items.size > 0) { - this.load(tr.get(i).items, citer); - } - - } - - - } - public string findDropNodeByPath (string treepath_str, string[] targets, int in_pref = -1) { + public string findDropNodeByPath (string treepath_str, string[] targets, int in_pref = -1) { var path = treepath_str; // dupe it.. @@ -948,113 +833,78 @@ public class Xcls_WindowLeftTree : Object return ""; } - public string findDropNode (string treepath_str, string[] targets) { - - // this is used by the dragdrop code in the roo version AFAIR.. - - //var path = treepath_str.replace(/^builder-/, ''); - // treemap is depreciated... - should really check if model has any entries.. - - if (this.el.iter_n_children(null) < 1) { - //print("NO KEYS"); - return "|%d".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER); - } - //print("FIND treepath: " + path); - //console.dump(this.treemap); - - //if (!treepath_str.match(/^builder-/)) { - // return []; // nothing! - //} - if (targets.length > 0 && targets[0] == "*") { - return treepath_str; - } - return this.findDropNodeByPath(treepath_str,targets, -1); - } - public void loadFile (JsRender.JsRender f) { - //console.dump(f); - this.el.clear(); - this.file = f; - + public void moveNode (string target_data, Gdk.DragAction action) + { + + /// target_data = "path|pos"); + + + //print("MOVE NODE"); + // console.dump(target_data); + Gtk.TreeIter old_iter; + Gtk.TreeModel mod; - // if (!f) { - // console.log('missing file'); - // return; - // } + var s = _this.view.el.get_selection(); + s.get_selected(out mod , out old_iter); + mod.get_path(old_iter); - // load the file if not loaded.. - if (f.tree == null) { - f.loadItems( ); - } - // if it's still null? - if (f.tree == null) { - return; + var node = this.pathToNode(mod.get_path(old_iter).to_string()); + //console.dump(node); + if (node == null) { + print("moveNode: ERROR - node is null?"); } - /// this.get('/Window').setTitle(f.project.getName() + ' - ' + f.name); - - //if (f.items.length && typeof(f.items[0]) == 'string') { - //this.get('/RightEditor').el.show(); - //this.get('/RightEditor.view').load( f.items[0]); - // return; - //} - //print("LOAD"); - //print(JSON.stringify(f.items, null,4)); - //console.dump(f.items); - var o = new Gee.ArrayList(); - o.add(f.tree); - this.load(o,null); - - _this.view.el.expand_all(); - if (f.tree.items.size < 1) { - // single item.. + // needs to drop first, otherwise the target_data + // treepath will be invalid. + + + if ((action & Gdk.DragAction.MOVE) > 0) { + print("REMOVING OLD NODE : " + target_data + "\n"); + node.remove(); + this.dropNode(target_data, node, false); + this.el.remove(ref old_iter); + + + + } else { + print("DROPPING NODE // copy: " + target_data + "\n"); + node = node.deepClone(); + this.dropNode(target_data, node, false); + } + _this.changed(); + this.activePath= ""; + //this.updateNode(false,true); + } + public void load (Gee.ArrayList tr, Gtk.TreeIter? iter) + { + Gtk.TreeIter citer; + //this.insert(citer,iter,0); + for(var i =0 ; i < tr.size; i++) { + if (iter != null) { + this.el.insert(out citer,iter,-1); // why not append? + } else { + this.el.append(out citer,null); + } - //this.get('/Window.leftvpaned').el.set_position(80); - // select first... - _this.view.el.set_cursor( - new Gtk.TreePath.from_string("0"), null, false); + this.el.set(citer, 0, tr.get(i).nodeTitle(), + 1, tr.get(i).nodeTip(), -1 + ); + var o = new GLib.Value(typeof(Object)); + o.set_object((Object)tr.get(i)); + this.el.set_value(citer, 2, o); - } else { - //this.get('/Window.leftvpaned').el.set_position(200); - } - - return; - /* - - //print("hide right editior"); - //this.get('/RightEditor').el.hide(); - //this.get('/Editor').el.hide(); - //print("set current tree"); - //this.currentTree = this.toJS(false, false)[0]; - //console.dump(this.currentTree); - //this.currentTree = this.currentTree || { items: [] }; - //_this.renderView(); - //console.dump(this.map); - //var RightPalete = imports.Builder.RightPalete.RightPalete; - - - var pm = this.get('/RightPalete.model'); - // set up provider.. - - this.get('/RightPalete').provider = this.get('/LeftTree').getPaleteProvider(); - - if (!this.get('/RightPalete').provider) { - print ("********* PALETE PROVIDER MISSING?!!"); + if (tr.get(i).items.size > 0) { + this.load(tr.get(i).items, citer); + } + } - this.get('/LeftTree').renderView(); - - pm.load( this.get('/LeftTree').getPaleteProvider().gatherList(this.listAllTypes())); - + - - this.get('/Window.view-notebook').el.set_current_page( - this.get('/LeftTree.model').file.getType()== 'Roo' ? 0 : -1); - */ - } - public void deleteSelected () { + public void deleteSelected () { print("DELETE SELECTED?"); //_this.view.blockChanges = true; @@ -1104,7 +954,7 @@ public class Xcls_WindowLeftTree : Object _this.view.blockChanges = false; } - public JsRender.Node pathToNode (string path) { + public JsRender.Node pathToNode (string path) { Gtk.TreeIter iter; @@ -1115,6 +965,158 @@ public class Xcls_WindowLeftTree : Object return (JsRender.Node)value.dup_object(); + } + public void dropNode (string target_data_str, JsRender.Node node, bool show_templates) { + // print("drop Node"); + // console.dump(node); + // console.dump(target_data); + + + // 0 = before , 1=after 2/3 onto + + + var target_data= target_data_str.split("|"); + + var parent_str = target_data[0].length > 0 ? target_data[0] : ""; + var pos = target_data.length > 1 ? int.parse(target_data[1]) : 2; // ontop.. + + + Gtk.TreePath tree_path = parent_str.length > 0 ? new Gtk.TreePath.from_string( parent_str ) : null; + + + + //print("add " + tp + "@" + target_data[1] ); + + JsRender.Node parentNode = null; + + Gtk.TreeIter iter_after; + Gtk.TreeIter iter_par ; + + + if (target_data.length == 3 && target_data[2].length > 0) { + node.props.set("* prop", target_data[2]); + } + + Gtk.TreePath expand_parent = null; + + // we only need to show the template if it's come from else where? + if (show_templates) { + var new_node = Xcls_DialogTemplateSelect.singleton().show( this.file.palete(), node); + if (new_node != null) { + node = new_node; + } + } + + //print("pos is %d \n".printf(pos)); + + Gtk.TreeIter n_iter; + + if ( parent_str.length < 1) { + this.el.append(out n_iter, null); // drop at top level.. + node.parent = null; + this.file.tree = node; + + + } else if (pos < 2) { + //print(target_data[1] > 0 ? 'insert_after' : 'insert_before'); + + this.el.get_iter(out iter_after, tree_path ); + this.el.iter_parent(out iter_par, iter_after); + expand_parent = this.el.get_path(iter_par); + + GLib.Value value; + this.el.get_value( iter_par, 2, out value); + parentNode = (JsRender.Node)value.dup_object(); + + + this.el.get_value( iter_after, 2, out value); + var relNode = (JsRender.Node)value.dup_object(); + + if ( pos > 0 ) { + + this.el.insert_after(out n_iter, iter_par , iter_after); + var ix = parentNode.items.index_of(relNode); + parentNode.items.insert(ix+1, node); + + } else { + this.el.insert_before(out n_iter, iter_par , iter_after); + var ix = parentNode.items.index_of(relNode); + parentNode.items.insert(ix, node); + + } + node.parent = parentNode; + + + + } else { + // print("appending to " + parent_str); + this.el.get_iter(out iter_par, tree_path); + this.el.append(out n_iter, iter_par ); + expand_parent = this.el.get_path(iter_par); + + GLib.Value value; + this.el.get_value( iter_par, 2, out value); + parentNode = (JsRender.Node)value.dup_object(); + node.parent = parentNode; + parentNode.items.add(node); + } + + // reparent node in tree... + + + // why only on no parent??? + + //if (node.parent = null) { + + + + //} + + + // work out what kind of packing to use.. -- should be in + if (!node.has("pack") && parent_str.length > 1) { + + this.file.palete().fillPack(node,parentNode); + + + } + + // add the node... + + this.el.set(n_iter, 0, node.nodeTitle(), 1, node.nodeTip(), -1 ); + var o = new GLib.Value(typeof(Object)); + o.set_object((Object)node); + + this.el.set_value(n_iter, 2, o); + + + + + // load children - if it has any.. + + if (node.items.size > 0) { + this.load(node.items, n_iter); + _this.view.el.expand_row(this.el.get_path(n_iter), true); + } else if (expand_parent != null && !_this.view.el.is_row_expanded(expand_parent)) { + _this.view.el.expand_row(expand_parent,true); + } + + //if (tp != null && (node.items.length() > 0 || pos > 1)) { + // _this.view.el.expand_row(this.el.get_path(iter_par), true); + // } + // wee need to get the empty proptypes from somewhere.. + + //var olditer = this.activeIter; + this.activePath = this.el.get_path(n_iter).to_string(); + + + + + _this.view.el.set_cursor(this.el.get_path(n_iter), null, false); + _this.changed(); + + + } } public class Xcls_TreeViewColumn4 : Object -- 2.39.2