"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}",
"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<JsRender.Node> 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<JsRender.Node>();\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<JsRender.Node>();\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<JsRender.Node> 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"
}
]
},
{
"id" : "LeftTreeMenu",
- "* pack" : false,
"xtype" : "Menu",
+ "* pack" : false,
"$ xns" : "Gtk",
"items" : [
{
"activate" : " ( ) => {\n \n print(\"ACTIVATE?\");\n \n \n _this.model.deleteSelected();\n}"
},
"label" : "Delete Element",
- "* pack" : "add",
"xtype" : "MenuItem",
+ "* pack" : "add",
"$ xns" : "Gtk"
},
{
"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"
},
{
"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"
}
]
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;
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
}
},
- 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?");
// 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 : ( ) => {
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 = "";
},
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<JsRender.Node>();
+ 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 : () {
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<JsRender.Node> 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..
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<JsRender.Node>();
- o.add(f.tree);
- this.load(o,null);
-
- _this.view.el.expand_all();
-
- if (f.tree.items.size < 1) {
- // single item..
+ load : (Gee.ArrayList<JsRender.Node> 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 : () {
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;
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) {
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) {
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;
// 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( ( ) => {
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 = "";
}
// 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) {
}
}
+ 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
{
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<JsRender.Node>();
+ 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();
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<JsRender.Node> 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..
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<JsRender.Node>();
- 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<JsRender.Node> 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;
_this.view.blockChanges = false;
}
- public JsRender.Node pathToNode (string path) {
+ public JsRender.Node pathToNode (string path) {
Gtk.TreeIter iter;
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