{ "build_module" : "builder", "gen_extended" : false, "items" : [ { "# Xcls_MainWindow? main_window" : "null", "$ xns" : "Gtk", "@ bool before_node_change" : "()", "@ void changed" : "()", "@ void node_selected" : "(JsRender.Node? node)", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "bool hexpand" : true, "bool vexpand" : true, "id" : "WindowLeftTree", "int last_error_counter" : "-1", "items" : [ { "$ xns" : "Gtk", "items" : [ { "$ xns" : "Gtk", "* prop" : "factory", "xtype" : "SignalListItemFactory" } ], "xtype" : "ListView" }, { "$ xns" : "Gtk", "Gtk.PolicyType hscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC", "Gtk.PolicyType vscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC", "bool has_frame" : true, "bool hexpand" : true, "bool vexpand" : true, "id" : "viewwin", "items" : [ { "# bool blockChanges" : false, "$ JsRender.Node? dragNode" : "null", "$ string lastEventSource" : "\"\"", "$ xns" : "Gtk", "* init" : [ "{", " ", " this.css = new Gtk.CssProvider();", "//\ttry {", "\t\tthis.css.load_from_string(\"", "#left-tree-view { font-size: 12px;}\t", ".drag-over { background-color:#88a3bc; }", ".drag-below { ", " border-bottom-width: 5px; ", " border-bottom-style: solid;", " border-bottom-color: #88a3bc;", "}", ".drag-above {", " border-top-width: 5px;", " border-top-style: solid;", " border-top-color: #88a3bc;", "}", ".node-err {", " border-top-width: 5px;", " border-top-style: solid;", " border-top-color: red;", " border-bottom-width: 5px; ", " border-bottom-style: solid;", " border-bottom-color: red;", "}", ".node-warn {", " border-top-width: 5px;", " border-top-style: solid;", " border-top-color: #ABF4EB;", " border-bottom-width: 5px; ", " border-bottom-style: solid;", " border-bottom-color: #ABF4EB;", "}", ".node-depr {", " border-top-width: 5px;", " border-top-style: solid;", " border-top-color: #EEA9FF;", " border-bottom-width: 5px; ", " border-bottom-style: solid;", " border-bottom-color: #EEA9FF;", "}", "", "#left-tree-view indent {", "-gtk-icon-size : 2px;", "}", "#left-tree-view indent:nth-last-child(2) {", "min-width: 24px;", "}", "\");", "", "\tGtk.StyleContext.add_provider_for_display(", "\t\tthis.el.get_display(),", "\t\tthis.css,", "\t\tGtk.STYLE_PROVIDER_PRIORITY_APPLICATION", "\t);", "\t", "\t ", "}", "" ], "* prop" : "child", "Boolean id" : "view", "Gtk.CssProvider css" : "", "bool button_is_pressed" : false, "bool headers_visible" : false, "bool hexpand" : false, "bool vexpand" : true, "items" : [ { "$ xns" : "Gtk", "listeners" : { "pressed" : [ "(n_press, x, y) => {", " ", " //console.log(\"button press?\");", " ", " //this.el.set_state(Gtk.EventSequenceState.CLAIMED);", "", "", " ", " _this.view.button_is_pressed = true;", " ", " _this.view.lastEventSource = \"tree\";", " if (! _this.before_node_change() ) {", " \tGLib.debug(\"before_node_change return false\");", " return ;", " }", " ", "\t // nothing there -show dialog", " if (_this.model.el.get_n_items() < 1) {", "\t _this.main_window.windowstate.showAddObject(_this.view.el, null);", " GLib.debug(\"no items\");", "\t return ;", " }", " string pos;", " var row = _this.view.getRowAt(x,y, out pos );", " if (row < 0) {", "\t GLib.debug(\"no row selected items\");", "\t return;", " }", " ", " var node = _this.selmodel.getNodeAt(row);", " if (node == null) {", " \tGLib.warning(\"No node found at row %d\", row);", " \treturn;", "\t}", "", " ", " ", " if (_this.view.getColAt(x,y) > 0 ) {", "\t GLib.debug(\"add colum clicked.\");", " var fqn = node.fqn();", " \tvar cn = _this.main_window.windowstate.project.palete.getChildList(fqn, false);", " \t\tif (cn.size < 1) {", " \t\t\treturn ;", "\t\t}", "", "\t\t_this.main_window.windowstate.leftTreeBeforeChange();", "\t\t//_this.view.el.get_selection().select_path(res);", "\t\tGLib.debug(\"Button Pressed - start show window\");", "\t\t_this.main_window.windowstate.showAddObject(_this.view.el, node);", "\t\tGLib.debug(\"Button Pressed - finsihed show window\");", " \treturn ;", "\t}", " ", "\t ", " ", "}", "" ], "released" : [ "(n_press, x, y) => {", " ", " _this.view.button_is_pressed = false;", "", "", "}", "" ] }, "xtype" : "GestureClick" }, { "$ xns" : "Gtk", "listeners" : { "pressed" : [ "(n_press, x, y) => {", "", "\t", "\t ", "\t ", " if (_this.model.el.get_n_items() < 1) {", " ", " GLib.debug(\"no items\");", "\t return ;", " }", " string pos;", " var row = _this.view.getRowAt(x,y, out pos );", " if (row < 0) {", "\t GLib.debug(\"no row selected items\");", "\t return;", " }", " ", " var node = _this.selmodel.getNodeAt(row);", " if (node == null) {", " \tGLib.warning(\"No node found at row %d\", row);", " \treturn;", "\t}", "\t", "\t", "\t_this.model.selectNode(node);", " ", " ", " ", "\tGLib.debug(\"Prssed %d\", (int) this.el.get_current_button());", "\t//_this.deletemenu.el.set_parent(_this.view.el);", "\t_this.LeftTreeMenu.el.set_parent(_this.view.el);", "\t", "\t", "\t//Gtk.Allocation rect;", "\t//_this.view.el.get_allocation(out rect);", " \t//_this.deletemenu.el.set_has_arrow(false);", "\t_this.LeftTreeMenu.el.set_position(Gtk.PositionType.BOTTOM); ", "\t", "\t\t", "\t_this.LeftTreeMenu.el.set_offset( ", "\t\t\t(int)x ,", "\t\t\t(int)y - (int)_this.view.el.get_height());", "", " _this.LeftTreeMenu.el.popup();", " ", "}", "" ] }, "uint button" : 3, "xtype" : "GestureClick" }, { "$ Gdk.DragAction[] actions" : "Gdk.DragAction.COPY | Gdk.DragAction.MOVE ", "$ xns" : "Gtk", "listeners" : { "drag_begin" : [ "( drag ) => {", "\tGLib.debug(\"SOURCE: drag-begin\");", "\t ", " // find what is selected in our tree...", " var data = _this.selmodel.getSelectedNode();", "\tif (data == null) {", "\t\treturn ;", "\t}", "\t_this.view.dragNode = data;", " var xname = data.fqn();", " GLib.debug (\"XNAME IS %s\", xname);", "", " \tvar widget = _this.view.getWidgetAtRow(_this.selmodel.el.selected);", " \t", " \t", " var paintable = new Gtk.WidgetPaintable(widget);", " this.el.set_icon(paintable, 0,0);", " ", " ", "}" ], "drag_cancel" : [ "(drag, reason) => {", "", "\t_this.view.dragNode = null;", "\treturn true;", "}", "" ], "drag_end" : [ "(drag, delete_data) => {", "", "_this.view.dragNode = null;", "}", "" ], "prepare" : [ "(x, y) => {", "", "\t", "\t", "///\t( drag_context, data, info, time) => {", " ", "", "\t//print(\"drag-data-get\");", " \tvar ndata = _this.selmodel.getSelectedNode();", "\tif (ndata == null) {", "\t \tGLib.debug(\"return empty string - no selection..\");", "\t\treturn null;", "\t ", "\t}", "", " ", "\t//data.set_text(tp,tp.length); ", "", "\tvar \tstr = ndata.toJsonString();", "\tGLib.debug(\"prepare store: %s\", str);", "\tGLib.Value ov = GLib.Value(typeof(string));", "\tov.set_string(str);", " \tvar cont = new Gdk.ContentProvider.for_value(ov);", " /*", "\tGLib.Value v = GLib.Value(typeof(string));", "\t//var str = drop.read_text( [ \"text/plain\" ] 0);", "\t ", "\t\tcont.get_value(ref v);", "\t ", "\t}", "\tGLib.debug(\"set %s\", v.get_string());", " */ ", " \treturn cont;", "\t ", "\t ", "}", "" ] }, "xtype" : "DragSource" }, { "$ xns" : "Gtk", "listeners" : { "key_pressed" : [ "(keyval, keycode, state) => {", "", " ", "", "\tif (keyval != Gdk.Key.Delete && keyval != Gdk.Key.BackSpace) {", "\t\treturn true;", "\t}", "", "\t_this.model.deleteSelected();", "\treturn true;", "", "}", "" ] }, "xtype" : "EventControllerKey" }, { "$ xns" : "Gtk", "id" : "keystate", "int is_shift" : 0, "listeners" : { "key_pressed" : [ "(keyval, keycode, state) => {", "", " \tif (keyval == Gdk.Key.Shift_L || keyval == Gdk.Key.Shift_R) {", " \t\tthis.is_shift = 1;", "\t}", "\treturn true;", "}", "" ], "key_released" : [ "(keyval, keycode, state) => {", "\tGLib.debug(\"key release %d, %d, %d\" , (int) keyval, (int) keycode, state);", " \tif (keyval == Gdk.Key.Shift_L || keyval == Gdk.Key.Shift_R) {", " \t\tthis.is_shift = 0;", "\t}", "\t//GLib.debug(\"set state %d , shift = %d\", (int)this.el.get_current_event_state(), Gdk.ModifierType.SHIFT_MASK);", "", "", " ", "}" ] }, "xtype" : "EventControllerKey" }, { "$ xns" : "Gtk", "* ctor" : [ "new Gtk.DropTarget ( typeof(string) ,", "\t\tGdk.DragAction.COPY | Gdk.DragAction.MOVE )" ], "Gtk.Widget? highlightWidget" : "null", "JsRender.Node? lastDragNode" : "null", "id" : "drop", "listeners" : { "accept" : [ "(drop) => {", "", "\tGLib.debug(\"got DropTarget:accept\");", " ", "// NOT REALLY NEEDED? = put stuff in drop?", "", "", "/* ( ctx, x, y, time) => {", " //Seed.print(\"TARGET: drag-drop\");", " ", " ", " var src = Gtk.drag_get_source_widget(ctx);", " ", " if (src != this.el) {", " ", " ", " ", " this.drag_in_motion = false; ", " // request data that will be recieved by the recieve... ", " Gtk.drag_get_data", " (", " this.el, // will receive 'drag-data-received' signal ", " ctx, // represents the current state of the DnD ", " Gdk.Atom.intern(\"application/json\",true), // the target type we want ", " time // time stamp ", " );", "", " ", " // No target offered by source => error", " ", "", " return false;", " }", " ", " // handle drop around self..", " ", " ", " ", " //print(\"GETTING POS\");", " var targetData = \"\";", " ", " Gtk.TreePath path;", " Gtk.TreeViewDropPosition pos;", " var isOver = _this.view.el.get_dest_row_at_pos(this.drag_x,this.drag_y, out path, out pos);", " ", " // if there are not items in the tree.. the we have to set isOver to true for anything..", " var isEmpty = false;", " if (_this.model.el.iter_n_children(null) < 1) {", " print(\"got NO children?\\n\");", " isOver = true; //??? ", " isEmpty = true;", " pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER;", " }", " ", " ", " ", " //var action = Gdk.DragAction.COPY;", " // unless we are copying!!! ctl button..", " ", " var action = (ctx.get_actions() & Gdk.DragAction.MOVE) > 0 ?", " Gdk.DragAction.COPY : Gdk.DragAction.MOVE ;", " // Gdk.DragAction.MOVE : Gdk.DragAction.COPY ;", "", " ", " if (_this.model.el.iter_n_children(null) < 1) {", " // no children.. -- asume it's ok..", " ", " targetData = \"|%d|\".printf((int)Gtk.TreeViewDropPosition.INTO_OR_AFTER);", " ", " // continue through to allow drop...", "", " } else {", " ", " ", " ", " ", " ", " //print(\"ISOVER? \" + isOver);", " if (!isOver) {", " ", " Gtk.drag_finish (ctx, false, false, time); // drop failed..", " return true; // not over apoint!?! - no action on drop or motion..", " }", " ", " // drag node is parent of child..", " //console.log(\"SRC TREEPATH: \" + src.treepath);", " //console.log(\"TARGET TREEPATH: \" + data.path.to_string());", " ", " // nned to check a few here..", " //Gtk.TreeViewDropPosition.INTO_OR_AFTER", " //Gtk.TreeViewDropPosition.INTO_OR_BEFORE", " //Gtk.TreeViewDropPosition.AFTER", " //Gtk.TreeViewDropPosition.BEFORE", " ", " // locally dragged items to not really use the ", " var selection_text = this.dragData;", " ", " ", " ", " if (selection_text == null || selection_text.length < 1) {", " //print(\"Error - drag selection text returned NULL\");", " ", " Gtk.drag_finish (ctx, false, false, time); // drop failed..", " return true; /// -- fixme -- this is not really correct..", " } ", " ", " // see if we are dragging into ourself?", " print (\"got selection text of \" + selection_text);", " ", " var target_path = path.to_string();", " //print(\"target_path=\"+target_path);", "", " // ", " if (selection_text == target_path) {", " print(\"self drag ?? == we should perhaps allow copy onto self..\\n\");", " ", " Gtk.drag_finish (ctx, false, false, time); // drop failed..", "", " return true; /// -- fixme -- this is not really correct..", "", " }", " ", " // check that ", " //print(\"DUMPING DATA\");", " //console.dump(data);", " // path, pos", " ", " //print(data.path.to_string() +' => '+ data.pos);", " ", " // dropList is a list of xtypes that this node could be dropped on.", " // it is set up when we start to drag..", " ", " ", " targetData = _this.model.findDropNodeByPath( path.to_string(), this.dropList, pos);", " ", " print(\"targetDAta: \" + targetData +\"\\n\");", " ", " if (targetData.length < 1) {", " //print(\"Can not find drop node path\");", " ", " Gtk.drag_finish (ctx, false, false, time); // drop failed..", " return true;", " }", " ", " ", " ", " // continue on to allow drop..", " }", " // at this point, drag is not in motion... -- as checked above... - so it's a real drop event..", "", "", " var delete_selection_data = false;", " ", " if (action == Gdk.DragAction.ASK) {", " // Ask the user to move or copy, then set the ctx action. ", " }", "", " if (action == Gdk.DragAction.MOVE) {", " delete_selection_data = true;", " }", " ", " // drag around.. - reorder..", " _this.model.moveNode(targetData, action);", " ", " ", " ", " ", " ", " // we can send stuff to souce here...", "", "", "// do we always say failure, so we handle the reall drop?", " Gtk.drag_finish (ctx, false, false,time); //delete_selection_data, time);", "", " return true;", " ", " ", " ", " ", " ", " ", "}", "*/", "\treturn true;", "}", "" ], "drop" : [ "(v, x, y) => {", "\t", "\tthis.addHighlight(null,\"\");", " ", " \tvar is_shift = _this.keystate.is_shift > 0;", " ", " \tvar pos = \"\";", " \t// -- get position..", " \tif (this.lastDragString != v.get_string() || this.lastDragNode == null) {", "\t\t// still dragging same node", " ", "\t\tthis.lastDragNode = new JsRender.Node(); ", "\t\tthis.lastDragNode.loadFromJsonString(v.get_string(), 1);", "\t}", " ", " \t ", " ", " var dropNode = new JsRender.Node(); ", "\tdropNode.loadFromJsonString(v.get_string(), 1);", "\tvar drop_on_to = _this.main_window.windowstate.file.palete().getDropList(dropNode.fqn());", " ", " // if there are not items in the tree.. the we have to set isOver to true for anything..", " ", " if (_this.model.el.n_items < 1) {", " \t// FIXME check valid drop types?", " \tif (!drop_on_to.contains(\"*top\")) {", "\t\t\tGLib.debug(\"drop on to list does not contain top?\");", "\t\t\treturn false;\t", "\t\t}", "\t\t// add new node to top..", "\t\t", "\t\t", "\t\t var m = (GLib.ListStore) _this.model.el.model;", " \t_this.main_window.windowstate.file.tree = dropNode; ", " \tdropNode.updated_count++;", " ", "\t\tm.append(dropNode);", "\t\t_this.model.selectNode(dropNode); \t", "\t\t_this.changed();", "\t\treturn true; // no need to highlight?", " ", " }", "", "", "", "\tvar row = _this.view.getRowAt(x,y, out pos);", "\tif (row < 0) {", "\t\treturn false; //Gdk.DragAction.COPY;", "\t}", "\tvar tr = (Gtk.TreeListRow)_this.view.el.model.get_object(row);", "\t", "\tvar node = (JsRender.Node)tr.get_item();", "", " \tif (pos == \"above\" || pos == \"below\") {", "\t\tif (node.parent == null) {", "\t\t\tpos = \"over\";", "\t\t} else {", "\t \t\tif (!drop_on_to.contains(node.parent.fqn())) {", "\t\t\t\tpos = \"over\";", " \t\t\t} else {", "\t\t\t\tGLib.debug(\"drop contains %s - using %s\" , node.parent.fqn(), pos);", "\t\t\t\tif (_this.view.dragNode != null && is_shift) {", "\t\t \t\t\tif (node.parent.oid == _this.view.dragNode.oid || node.parent.has_parent(_this.view.dragNode)) {", "\t\t\t \t\t\tGLib.debug(\"shift drop not self not allowed\");", " \t\t\t\t\t\treturn false;\t", "\t\t \t\t\t}", "\t\t \t\t\t", "\t\t \t\t}", "\t\t\t\t", "\t\t\t\t", "\t\t\t}", " \t\t}", " \t\t", " \t}", " \tif (pos == \"over\") {", "\t \tif (!drop_on_to.contains(node.fqn())) {", "\t\t\tGLib.debug(\"drop on does not contain %s - try center\" , node.fqn());", "\t\t\treturn false;", "", "\t\t}", "\t\tif (node.oid == _this.view.dragNode.oid || node.has_parent(_this.view.dragNode)) {", " \t\t\tGLib.debug(\"shift drop not self not allowed\");", "\t\t\treturn false;\t", "\t\t}", "\t}", " \t", " \tswitch(pos) {", " \t\tcase \"over\":", "\t \t\tnode.appendChild(dropNode);", "\t \t\tif (is_shift && _this.view.dragNode != null) {", "\t\t \t\t_this.model.selectNode(null); ", "\t\t \t\t_this.view.dragNode.remove();", "\t \t\t}", "\t \t\t\t", "\t \t\tdropNode.updated_count++;", " \t\t\t_this.model.selectNode(dropNode); ", " \t\t\t", " \t\t\t_this.changed();\t\t\t\t \t\t", "\t \t\treturn true;", "\t \t\t", " \t\tcase \"above\":", " \t\t\tGLib.debug(\"Above - insertBefore\");", " \t\t", "\t\t\tnode.parent.insertBefore(dropNode, node);", "\t \t\tif (is_shift && _this.view.dragNode != null) {", "\t\t \t\t_this.model.selectNode(null); \t \t\t", "\t\t \t\t_this.view.dragNode.remove();", "\t \t\t}", "\t\t\tdropNode.updated_count++;", " \t\t\t_this.model.selectNode(dropNode); \t\t\t", " \t\t\t_this.changed();", " \t\t\treturn true;", " \t\t\t", " \t\tcase \"below\":", " \t\t\tGLib.debug(\"Below - insertAfter\"); \t\t", "\t \t\tif (is_shift && _this.view.dragNode != null) {", "\t\t \t\t_this.model.selectNode(null); \t \t\t", "\t\t \t\t_this.view.dragNode.remove();", "\t \t\t}", "\t", " \t\t\t", " \t\t\tnode.parent.insertAfter(dropNode, node);", " \t\t\tdropNode.updated_count++;", " \t\t\t_this.model.selectNode(dropNode);\t", " \t\t\t_this.changed();", " \t\t\t// select it", " \t\t\treturn true;", " \t\t\t", " \t\tdefault:", " \t\t\t// should not happen", " \t\t\treturn false;", " \t}", " \t", "\t", " ", "\t\t", "\t\t", "", "}", " " ], "leave" : [ "( ) => {", "\tthis.addHighlight(null,\"\");", "", "}", "" ], "motion" : [ "( x, y) => {", " ", "\tvar is_shift = _this.keystate.is_shift > 0;", "\t", "\tGLib.debug(\"shift is %s\", _this.keystate.is_shift > 0 ? \"SHIFT\" : \"-\");", "\tstring pos; // over / before / after..", "", " //GLib.debug(\"got drag motion\");", "", " GLib.Value v = GLib.Value(typeof(string));", " \t//var str = drop.read_text( [ \"text/plain\" ] 0);", " \tvar cont = this.el.current_drop.get_drag().content ;", " \ttry {", " \t\tcont.get_value(ref v);", "\t} catch (GLib.Error e) {", "\t GLib.debug(\"failed to get drag value\");", "\t\treturn Gdk.DragAction.COPY;\t ", "\t", "\t}", " ", "\t//GLib.debug(\"got %s\", v.get_string());", "\t ", "\tif (this.lastDragString != v.get_string() || this.lastDragNode == null) {", "\t\t// still dragging same node", " ", "\t\tthis.lastDragNode = new JsRender.Node(); ", "\t\tthis.lastDragNode.loadFromJsonString(v.get_string(), 1);", "\t}", " ", "", "\tvar drop_on_to = _this.main_window.windowstate.file.palete().getDropList(", "\t\t\t\tthis.lastDragNode.fqn());", " ", " string[] str = {};", " foreach(var dp in drop_on_to) {", " \tstr += dp;", " \t}", " \tGLib.debug(\"droplist: %s\", string.joinv(\", \", str));", " ", " ", " // if there are not items in the tree.. the we have to set isOver to true for anything..", " ", " if (_this.model.el.n_items < 1) {", " \t// FIXME check valid drop types?", " \tif (drop_on_to.contains(\"*top\")) {", "\t\t\tthis.addHighlight(_this.view.el, \"over\");", "\t\t} else {", "\t\t\tthis.addHighlight(null, \"\");\t\t", "\t\t}", "", "\t\treturn Gdk.DragAction.COPY; // no need to highlight?", " ", " }", " ", " ", " \tGLib.debug(\"check is over\");", " \t ", " // if path of source and dest are inside each other..", " // need to add source info to drag?", " // the fail();", " \tvar row = _this.view.getRowAt(x,y, out pos);", " \t", " \tif (row < 0) {", "\t\tthis.addHighlight(null, \"\");\t", "\t \treturn Gdk.DragAction.COPY;", " \t}", "\tvar tr = (Gtk.TreeListRow)_this.view.el.model.get_object(row);", "\t", "\tvar node = (JsRender.Node)tr.get_item();", "\t", "\tGLib.debug(\"Drop over node: %s\", node.fqn());", "\t", "", " \tif (pos == \"above\" || pos == \"below\") {", "\t\tif (node.parent == null) {", "\t\t\tGLib.debug(\"no parent try center\");", "\t\t\tpos = \"over\";", "\t\t} else {", "\t \t\t ", "\t \t\tif (!drop_on_to.contains(node.parent.fqn())) {", "\t\t\t\tGLib.debug(\"drop on does not contain %s - try center\" , node.parent.fqn());", "\t \t\t\tpos = \"over\";", " \t\t\t} else {", "\t\t\t\tGLib.debug(\"drop contains %s - using %s\" , node.parent.fqn(), pos);", "\t\t\t\tif (_this.view.dragNode != null && is_shift) {", "\t\t \t\t\tif (node.parent.oid == _this.view.dragNode.oid || node.parent.has_parent(_this.view.dragNode)) {", "\t\t\t \t\t\tGLib.debug(\"shift drop not self not allowed\");", "\t\t \t\t\t\tthis.addHighlight(null, \"\");", "\t\t \t\t\t\treturn Gdk.DragAction.COPY;\t", "\t\t \t\t\t}", "\t\t \t\t\t", "\t\t \t\t}", "\t\t\t\t", "\t\t\t}", "\t\t\t", "\t\t\t", "\t\t\t", " \t\t}", " \t\t", " \t\t", " \t}", " \tif (pos == \"over\") {", "\t \tif (!drop_on_to.contains(node.fqn())) {", "\t\t\tGLib.debug(\"drop on does not contain %s - try center\" , node.fqn());", "\t\t\tthis.addHighlight(null, \"\"); ", "\t\t\treturn is_shift ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY;\t\t", "\t\t}", "\t\tif (_this.view.dragNode != null && is_shift) {", " \t\t\tif (node.oid == _this.view.dragNode.oid || node.has_parent(_this.view.dragNode)) {", "\t \t\t\tGLib.debug(\"shift drop not self not allowed\");", " \t\t\t\tthis.addHighlight(null, \"\");", " \t\t\t\treturn Gdk.DragAction.COPY;\t", " \t\t\t}", "\t\t}", " \t\t\t", "\t}", " \t", " \t", " \t // _this.view.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);", "\tvar w = _this.view.getWidgetAt(x,y);", "\tthis.addHighlight(w, pos); ", "\treturn is_shift ? Gdk.DragAction.MOVE : Gdk.DragAction.COPY;\t\t", "}" ] }, "string lastDragString" : "\"\"", "xtype" : "DropTarget", "| void addHighlight" : [ "(Gtk.Widget? w, string hl) {", "\tif (this.highlightWidget != null) {", "\t\tvar ww = this.highlightWidget;", "\t\tGLib.debug(\"clear drag from previous highlight\");", "\t\tif (ww.has_css_class(\"drag-below\")) {", "\t\t\t ww.remove_css_class(\"drag-below\");", "\t\t}", "\t\tif (ww.has_css_class(\"drag-above\")) {", "\t\t\t ww.remove_css_class(\"drag-above\");", "\t\t}", "\t\tif (ww.has_css_class(\"drag-over\")) {", "\t\t\t ww.remove_css_class(\"drag-over\");", "\t\t}", "\t}", "\tif (w != null) {", "\t\tGLib.debug(\"add drag=%s to widget\", hl);\t", "\t\tif (!w.has_css_class(\"drag-\" + hl)) {", "\t\t\tw.add_css_class(\"drag-\" + hl);", "\t\t}", "\t}", "\tthis.highlightWidget = w;", "}" ] }, { "$ xns" : "Gtk", "* prop" : "model", "id" : "selmodel", "items" : [ { "$ xns" : "Gtk", "* ctor" : "this.updateModel(null)", "* prop" : "model", "id" : "model", "xtype" : "TreeListModel", "| Gtk.TreeListModel updateModel" : [ "(GLib.ListStore? m) {", "\tthis.el = new Gtk.TreeListModel(", "\t\tm != null ? m : new GLib.ListStore(typeof(JsRender.Node)), //..... << that's our store..", "\t\tfalse, // passthru", "\t\ttrue, // autexpand", "\t\t(item) => {", "\t\t\treturn ((JsRender.Node)item).childstore;", "\t\t", "\t\t}", "\t);", "\tif (_this.selmodel.el == null) {", "\t\treturn this.el;", "\t}", "\t_this.selmodel.el.set_model(this.el);", "\treturn this.el;", "}" ], "| int nodeToRow" : [ "(JsRender.Node node) ", "{", "\tvar row = -1;", "\tvar s = _this.view.el.model as Gtk.SingleSelection;", "\tfor (var i = 0; i < s.n_items; i++) {", "\t\t//GLib.debug(\"check node %s\", s.get_item(i).get_type().name());", "\t\tvar lr = s.get_item(i) as Gtk.TreeListRow;", "\t\t//GLib.debug(\"check node %s\", lr.get_item().get_type().name());", "\t\tif ((lr.get_item() as JsRender.Node).oid == node.oid) {", "\t\t\treturn i;", "\t\t\t", "\t\t}", "\t}", "\treturn -1;\t\t\t", "\t", "", "}" ], "| void deleteSelected" : [ "() {", "", "", "\t", "\tvar node = _this.selmodel.getSelectedNode();", "\t", "", " if (node == null) {", " \tGLib.debug(\"delete Selected - no node slected?\");", "\t return;", " }", " _this.selmodel.el.unselect_all();", " ", " node.remove();", " \tGLib.debug(\"delete Selected - done\");", " _this.changed();", "/* ", " print(\"DELETE SELECTED?\");", " //_this.view.blockChanges = true;", " print(\"GET SELECTION?\");", "", " var s = _this.view.el.get_selection();", " ", " print(\"GET SELECTED?\");", " Gtk.TreeIter iter;", " Gtk.TreeModel mod;", "", " ", " if (!s.get_selected(out mod, out iter)) {", " return; // nothing seleted..", " }", " ", "", "", " this.activePath= \"\"; ", " print(\"GET vnode value?\");", "", " GLib.Value value;", " this.el.get_value(iter, 2, out value);", " var data = (JsRender.Node)(value.get_object());", " print(\"removing node from Render\\n\");", " if (data.parent == null) {", " _this.main_window.windowstate.file.tree = null;", " } else {", " data.remove();", " }", " print(\"removing node from Tree\\n\"); ", " s.unselect_all();", " this.el.remove(ref iter);", "", " ", " ", " ", " // ", " ", " ", "", "", " this.activePath= \"\"; // again!?!? ", " //this.changed(null,true);", " ", " _this.changed();", " ", " _this.view.blockChanges = false;", " */", "}", "" ], "| void loadFile" : [ "(JsRender.JsRender f) {", " //console.dump(f);", " ", " _this.drop.highlightWidget = null;", " ", " var m = (GLib.ListStore) this.el.model;", "\tm.remove_all();", " _this.main_window.windowstate.leftTreeNodeSelected(null);", " // needed???", " _this.main_window.windowstate.file = f;", " _this.last_error_counter = -1;", " ", " if (f.tree == null) {", "\t try {", "\t f.loadItems( );", " } catch (Error e) {", " \t\treturn;", " }", " }", " // if it's still null?", " if (f.tree == null) {", "\t\t_this.main_window.windowstate.showAddObject(_this.view.el, null);", " \t_this.updateErrors();", " return;", " }", " \tm.append(f.tree);", "\t_this.updateErrors();", " ", " _this.selmodel.el.set_selected(Gtk.INVALID_LIST_POSITION);", " ", " return;", " ", " ", "}", "" ], "| void selectNode" : [ "(JsRender.Node node) ", "{", "\tvar row = this.nodeToRow(node);", "\tvar s = _this.view.el.model as Gtk.SingleSelection;", "\t ", "\tif (row < 0) {", "\t\t// select none?", "\t\tGLib.debug(\"Could not find node\");", "\t\treturn;", "\t}", "\tGLib.debug(\"Select %d\", row);", "\ts.set_selected(row);", "\t_this.view.el.scroll_to(row, null, Gtk.ListScrollFlags.SELECT, null);", "\t//_this.node_selected(node);\t\t\t", "\t", "", "}" ] } ], "listeners" : { "selection_changed" : [ "(position, n_items) => {", "", "\t", "\t\t", "\t\t//if (!this.button_is_pressed && !this.key_is_pressed) {", "\t\t\t// then event was started by some other action", "\t\t\t// which should manually trigger all the events..", "\t\t//\tprint(\"SKIPPING select - no button or key pressed\\n\");", "\t\t//\treturn;", "\t\t//}", "", "", "\t\t if (_this.view.blockChanges) { // probably not needed.. ", "\t\t\tGLib.debug(\"SKIPPING select - blockchanges set..\"); ", "\t\t return ;", "\t\t }", "", "\t\t if (!_this.before_node_change( ) ) {", "\t\t\t _this.view.blockChanges = true;", "\t\t\t _this.selmodel.el.unselect_all();", "\t\t\t _this.view.blockChanges = false;", "\t\t\t ", "\t\t\t return;", "\t\t }", "\t\t if (_this.main_window.windowstate.file == null) {", "\t \t\tGLib.debug(\"SKIPPING select windowstate file is not set...\"); ", "\t\t\treturn;", "\t\t } ", "\t\t ", "\t\t //var render = this.get('/LeftTree').getRenderer(); ", "\t\tGLib.debug(\"LEFT TREE -> view -> selection changed called\");", "\t\t", "\t\t", "\t\t// -- it appears that the selection is not updated.", "\t\t // select the node...", "\t\t //_this.selmodel.el.set_selected(row);", " ", "\t\t GLib.debug(\"LEFT TREE -> view -> selection changed TIMEOUT CALLED\");", "", "\t var snode = _this.selmodel.getSelectedNode();", "\t if (snode == null) {", "", "\t GLib.debug(\"selected rows < 1\");", "\t //??this.model.load( false);", "\t _this.node_selected(null);", "\t ", "\t return ;", "\t }", "\t ", "\t // why dup_?", "\t ", "", "\t GLib.debug (\"calling left_tree.node_selected\");", "\t _this.node_selected(snode);", "\t ", "\t ", "\t ", "\t ", "\t // no need to scroll. it's in the view as we clicked on it.", "\t // _this.view.el.scroll_to_cell(new Gtk.TreePath.from_string(_this.model.activePath), null, true, 0.1f,0.0f);", "\t ", "\t return ;", "}", "" ] }, "xtype" : "SingleSelection", "| JsRender.Node getNodeAt" : [ "(uint row) {", "", " var tr = (Gtk.TreeListRow)this.el.get_item(row);", " ", " var a = tr.get_item();; ", " GLib.debug(\"get_item (2) = %s\", a.get_type().name());", " \t", " ", " return (JsRender.Node)tr.get_item();", "\t ", "}" ], "| JsRender.Node? getSelectedNode" : [ "() {", " if (this.el.selected_item == null) {", "\t\treturn null;", " }\t\t\t ", " var tr = (Gtk.TreeListRow)this.el.selected_item;", " return (JsRender.Node)tr.get_item();", "\t ", "}" ] }, { "$ xns" : "Gtk", "* pack" : "append_column", "bool expand" : true, "bool resizable" : true, "id" : "maincol", "items" : [ { "$ xns" : "Gtk", "* prop" : "factory", "listeners" : { "bind" : [ "(listitem) => {", "\t GLib.debug(\"listitme is is %s\", ((Gtk.ListItem)listitem).get_type().name());", "\t", "\t//var expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();", "\tvar expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();", "\t ", "\t ", "\tvar hbox = (Gtk.Box) expand.child;", " ", "\t", "\tvar img = (Gtk.Image) hbox.get_first_child();", "\tvar lbl = (Gtk.Label) img.get_next_sibling();", "\t", "\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();", "\tvar node = (JsRender.Node) lr.get_item();", "\t", " GLib.debug(\"node is %s\", node.get_type().name());", "// was item (1) in old layout", "", "\t", " ", " \t /* ", " \tvar ic = Gtk.IconTheme.get_for_display(_this.el.get_display());", " var clsname = node.fqn();", " ", " var clsb = clsname.split(\".\");", " var sub = clsb.length > 1 ? clsb[1].down() : \"\";", " ", " var fn = \"/usr/share/glade/pixmaps/hicolor/16x16/actions/widget-gtk-\" + sub + \".png\";", " try { ", " \t ", " \t\t ", "\t\tif (FileUtils.test (fn, FileTest.IS_REGULAR)) {", "\t\t img.set_from_file(fn);", "\t\t \t ", "\t \t} else {", "\t \t\timg.set_from_paintable(", "\t\t\t \tic.lookup_icon (", "\t\t\t \t\t\"media-playback-stop\", null, 16,1, ", "\t \t\t\t Gtk.TextDirection.NONE, 0", " \t\t\t)", "\t\t\t );", "\t \t}", " \t} catch (GLib.Error e) {}", " */", " expand.set_hide_expander( !node.hasChildren() );", " \texpand.set_list_row(lr);", " \t", " \tnode.bind_property(\"iconFilename\",", " img, \"file\",", " GLib.BindingFlags.SYNC_CREATE);", " \t", " \tnode.bind_property(\"nodeTitleProp\",", " lbl, \"label\",", " GLib.BindingFlags.SYNC_CREATE);", " \tnode.bind_property(\"nodeTipProp\",", " lbl, \"tooltip_markup\",", " GLib.BindingFlags.SYNC_CREATE);", " \t// bind image...", " \t", "}", "" ], "setup" : [ "(listitem) => {", "\t", "\tvar expand = new Gtk.TreeExpander();", "\t ", "\texpand.set_indent_for_depth(true);", "\texpand.set_indent_for_icon(true);", "\tvar hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL,0);", "\tvar icon = new Gtk.Image();", "\tvar lbl = new Gtk.Label(\"\");", "\tlbl.use_markup = true;", "\tlbl.ellipsize = Pango.EllipsizeMode.END;", "\t", "\ticon.margin_end = 4;", " \tlbl.justify = Gtk.Justification.LEFT;", " \tlbl.xalign = 0;", "", "//\tlistitem.activatable = true; ??", "\t", "\thbox.append(icon);", "\thbox.append(lbl);", "\texpand.set_child(hbox);", "\t((Gtk.ListItem)listitem).set_child(expand);", "\t", "}", "" ] }, "xtype" : "SignalListItemFactory" } ], "title" : "Property", "xtype" : "ColumnViewColumn" }, { "$ xns" : "Gtk", "* pack" : "append_column", "int fixed_width" : 25, "items" : [ { "$ xns" : "Gtk", "* prop" : "factory", "listeners" : { "bind" : [ "(listitem) => {", "", " \tvar img = (Gtk.Image) ((Gtk.ListItem)listitem).get_child(); ", " \tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();", "\tvar node = (JsRender.Node) lr.get_item();", "\t", " ", " var ic = Gtk.IconTheme.get_for_display(_this.el.get_display());", "\timg.set_from_paintable(", "\t \tic.lookup_icon (", "\t \t\t\"list-add\", null, 16,1, ", "\t\t\t Gtk.TextDirection.NONE, 0", "\t\t)", "\t );", "\t ", " \tvar fqn = node.fqn();", " var cn = _this.main_window.windowstate.project.palete.getChildList(fqn, false);", "", "\timg.set_visible(cn.size > 0 ? true : false);", " \t ", "}", "" ], "setup" : [ "(listitem) => {", "", "\t ", "\tvar icon = new Gtk.Image();", "\t ", "\t((Gtk.ListItem)listitem).set_child(icon);", "}", "" ] }, "xtype" : "SignalListItemFactory" } ], "string title" : "Add", "xtype" : "ColumnViewColumn" } ], "string name" : "left-tree-view", "xtype" : "ColumnView", "| Gtk.Widget? getWidgetAt" : [ "(double x, double in_y) {", "/*", " \t", "from \thttps://discourse.gnome.org/t/gtk4-finding-a-row-data-on-gtkcolumnview/8465", " \tvar colview = gesture.widget;", " \tvar line_no = check_list_widget(colview, x,y);", " if (line_no > -1) {", " \t\tvar item = colview.model.get_item(line_no);", " \t\t ", " \t}", " \t*/", " \tvar y = in_y + _this.viewwin.el.vadjustment.value; ", " var child = this.el.get_first_child(); ", " \t//Gtk.Allocation alloc = { 0, 0, 0, 0 };", " \tvar line_no = -1; ", " \tvar reading_header = true;", " \tvar curr_y = 0;", " \tvar header_height = 0;", " \tvar h = 0;", " \twhile (child != null) {", "\t\t\t//GLib.debug(\"Got %s\", child.get_type().name());", "\t if (reading_header) {", "\t\t\t\t", "", "\t\t\t\tif (child.get_type().name() != \"GtkColumnListView\") {", "\t\t\t h += child.get_height();", "\t\t\t\t\tchild = child.get_next_sibling();", "\t\t\t\t\tcontinue;", "\t\t\t\t}", "\t\t\t\t// should be columnlistview", "\t\t\t\tchild = child.get_first_child(); ", "\t\t\t GLib.debug(\"header height=%d\", h);", "\t\t\t\theader_height = h;", "\t\t\t\t", "\t\t\t\treading_header = false;", "\t\t\t\tcontinue;", "\t }", "\t\t line_no++;", "", "\t\t\tif (y < header_height) {", "\t\t \treturn null;", "\t \t}", "", "\t\t\tvar hh = child.get_height();", "\t\t\t//GLib.debug(\"got cell xy = %d,%d w,h= %d,%d\", alloc.x, alloc.y, alloc.width, alloc.height);", "\t\t\tif (child.has_css_class(\"node-err\") || ", "\t\t\t\tchild.has_css_class(\"node-warn\") || ", "\t\t\t\tchild.has_css_class(\"node-depr\")) {", "\t\t\t\thh += 10;", "\t\t\t", "\t\t\t}\t", "\t\t if (y > curr_y && y <= header_height + hh + curr_y ) {", "\t\t\t return (Gtk.Widget)child;", "\t\t }", "\t\t curr_y += hh ;", "", "\t\t if (curr_y > y) {", "\t\t return null;", "\t }", "\t child = child.get_next_sibling(); ", " \t}", " return null;", "", " }" ], "| Gtk.Widget? getWidgetAtRow" : [ "(uint row) {", "/*", " \t", "from \thttps://discourse.gnome.org/t/gtk4-finding-a-row-data-on-gtkcolumnview/8465", " \tvar colview = gesture.widget;", " \tvar line_no = check_list_widget(colview, x,y);", " if (line_no > -1) {", " \t\tvar item = colview.model.get_item(line_no);", " \t\t ", " \t}", " \t*/", "\t\t//GLib.debug(\"Get Widget At Row %d\", (int)row);", " var child = this.el.get_first_child(); ", " \tvar line_no = -1; ", " \tvar reading_header = true;", "\t ", " \twhile (child != null) {", "\t\t\t//GLib.debug(\"Got %s\", child.get_type().name());", " \t ", " \t if (reading_header) {", "\t\t\t\t", "", "\t\t\t\tif (child.get_type().name() != \"GtkColumnListView\") {", "\t\t\t\t ", "\t\t\t\t\tchild = child.get_next_sibling();", "\t\t\t\t\tcontinue;", "\t\t\t\t}", "\t\t\t\t// should be columnlistview", "\t\t\t\tchild = child.get_first_child(); ", "\t\t\t ", "\t\t\t ", "\t\t\t\t", "\t\t\t\treading_header = false;", "\t\t\t\tcontinue;", "\t\t }", "\t\t ", "\t\t ", " \t ", "\t\t line_no++;", "\t\t\tif (line_no == row) {", "\t\t\t\t//GLib.debug(\"Returning widget %s\", child.get_type().name());", "\t\t\t return (Gtk.Widget)child;", "\t\t }", "\t child = child.get_next_sibling(); ", " \t}", "\t\t//GLib.debug(\"Rturning null\");", " return null;", "", " }" ], "| int getColAt" : [ "(double x, double y) {", "\t/*", "\t\t\t", "\tfrom \thttps://discourse.gnome.org/t/gtk4-finding-a-row-data-on-gtkcolumnview/8465", " \t ", "\t*/", "\t//Gtk.Allocation alloc = { 0, 0, 0, 0 };", "\t//GLib.debug(\"Cehck %d, %d\", x,y);", " var child = this.el.get_first_child(); ", "\t ", "\tvar col = 0;", "\tvar offx = 0;", "\twhile (child != null) {", "\t\t", "\t\tif (child.get_type().name() == \"GtkColumnViewRowWidget\") {", "\t\t\tchild = child.get_first_child();", "\t\t\tcontinue;", "\t\t}", "\t\t", "\t\t//child.get_allocation(out alloc);", "\t\tif (x < (child.get_width() + offx)) {", "\t\t\treturn col;", "\t\t}", "\t\treturn 1;", "\t\t//offx += child.get_width();", "\t\t//col++;", "\t\t//child = child.get_next_sibling();", "\t}", "\t ", "\t\t ", " return -1;", "", " }" ], "| int getRowAt" : [ "(double x, double in_y, out string pos) {", "", "", "\t ", "", "/*", " \t", "from \thttps://discourse.gnome.org/t/gtk4-finding-a-row-data-on-gtkcolumnview/8465", " \tvar colview = gesture.widget;", " \tvar line_no = check_list_widget(colview, x,y);", " if (line_no > -1) {", " \t\tvar item = colview.model.get_item(line_no);", " \t\t ", " \t}", " \t*/", " \t\t ", " \t\t", " \t\tGLib.debug(\"get Widget At Row x = %d y = %d\", (int) x, (int) in_y);", " \tvar y = in_y + _this.viewwin.el.vadjustment.value; ", " var child = this.el.get_first_child(); ", " \t//Gtk.Allocation alloc = { 0, 0, 0, 0 };", " \tvar line_no = -1; ", " \tvar reading_header = true;", " \tvar real_y = 0;", " \tvar header_height = 0;", " \tpos = \"none\";", " \tvar h = 0;", " \twhile (child != null) {", "\t\t\t//GLib.debug(\"Got %s\", child.get_type().name());", " \t if (reading_header) {", "\t\t\t\t", "", "\t\t\t\tif (child.get_type().name() != \"GtkColumnListView\") {", "\t\t\t h += child.get_height();", "\t\t\t\t\tchild = child.get_next_sibling();", "\t\t\t\t\tcontinue;", "\t\t\t\t}", "\t\t\t\t// should be columnlistview", "\t\t\t\tchild = child.get_first_child(); ", "\t\t\t //GLib.debug(\"header height=%d\", h);", "\t\t\t\theader_height = h;", "\t\t\t\t", "\t\t\t\treading_header = false;", "\t\t\t\tcontinue;", "\t\t\t\t", "\t }", "\t ", "\t\t if (child.get_type().name() != \"GtkColumnViewRowWidget\") {", " \t\t child = child.get_next_sibling();", " \t\t continue;", "\t\t }", "\t\t ", "\t\t \tif (y < header_height) {", "\t\t \treturn -1;", "\t \t}", "\t\t ", "\t\t line_no++;", "\t\t\tvar hh = child.get_height();", "\t\t\t", "\t\t\tif (child.has_css_class(\"node-err\") || ", "\t\t\t\tchild.has_css_class(\"node-warn\") || ", "\t\t\t\tchild.has_css_class(\"node-depr\")) {", "\t\t\t\thh += 10;", "\t\t\t", "\t\t\t}", "\t\t\t//child.get_allocation(out alloc);", "\t\t\t//GLib.debug(\"got cell xy = %d,%d w,h= %d,%d\", alloc.x, alloc.y, alloc.width, alloc.height);", "\t\t\t//GLib.debug(\"row %d y= %d %s\", line_no, (int) (header_height + alloc.y),", "\t\t\t", "\t\t\t//\tchild.visible ? \"VIS\" : \"hidden\");", "", "\t\t if (y > (header_height + real_y) && y <= (header_height + real_y + hh) ) {", "\t\t \tif (y > ( header_height + real_y + (hh * 0.8))) {", "\t\t \t\tpos = \"below\";", "\t \t\t} else if (y > ( header_height + real_y + (hh * 0.2))) {", "\t \t\t\tpos = \"over\";", " \t\t\t} else {", " \t\t\t\tpos = \"above\";", "\t\t\t\t}", "\t\t \t GLib.debug(\"getRowAt return : %d, %s\", line_no, pos);", "\t\t\t return line_no;", "\t\t }", " ", "", "\t\t if (real_y + hh > y) {", "\t\t return -1;", "\t }", "\t real_y += hh;", "\t child = child.get_next_sibling(); ", " \t}", " return -1;", "", " }" ] }, { "$ xns" : "Gtk", "* pack" : false, "id" : "LeftTreeMenu", "items" : [ { "$ xns" : "Gtk", "* prop" : "child", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "int spacing" : 0, "items" : [ { "$ xns" : "Gtk", "label" : "Delete Element", "listeners" : { "clicked" : [ " ( ) => {", "_this.LeftTreeMenu.el.hide();", " _this.model.deleteSelected();", "_this.changed();", "}" ] }, "xtype" : "Button" }, { "$ xns" : "Gtk", "label" : "Save as Template", "listeners" : { "clicked" : [ " () => {", "_this.LeftTreeMenu.el.hide();", " DialogSaveTemplate.singleton().showIt(", " (Gtk.Window) _this.el.get_root (), ", " _this.main_window.windowstate.file.palete(), ", " _this.getActiveElement()", " );", " ", " ", "}" ] }, "xtype" : "Button" }, { "$ xns" : "Gtk", "label" : "Save as Module", "listeners" : { "clicked" : [ " () => {", " ", " _this.LeftTreeMenu.el.hide();", " var node = _this.getActiveElement();", " ", " ", " var sm = DialogSaveModule.singleton();", " ", " ", " sm.showIt(", " (Gtk.Window) _this.el.get_root (), ", " _this.main_window.windowstate.project, ", " node", " );", " /*", " gtk4 migration - disabled this part.. probably not used muchanyway", " ", " ", " if (name.length < 1) {", " return;", " ", " }", " node.set_prop( new JsRender.NodeProp.special(\"xinclude\", name));", " node.items.clear();", "", "", " var s = _this.view.el.get_selection();", " ", " print(\"GET SELECTED?\");", " Gtk.TreeIter iter;", " Gtk.TreeModel mod;", "", " ", " if (!s.get_selected(out mod, out iter)) {", " return; // nothing seleted..", " }", " Gtk.TreeIter citer;", " var n_cn = mod.iter_n_children(iter) -1;", " for (var i = n_cn; i > -1; i--) {", " mod.iter_nth_child(out citer, iter, i);", " ", "", " print(\"removing node from Tree\\n\"); ", " ", " _this.model.el.remove(ref citer);", " }", " _this.changed();", " _this.node_selected(node, \"tree\");", " */", " ", "}" ] }, "xtype" : "Button" } ], "xtype" : "Box" } ], "xtype" : "Popover" } ], "xtype" : "ScrolledWindow" } ], "xtype" : "Box", "| JsRender.JsRender getActiveFile" : [ "() {", " return this.main_window.windowstate.file;", "}", "" ], "| JsRender.Node? getActiveElement" : [ " () { // return path to actie node.", "", " ", "\treturn _this.selmodel.getSelectedNode();", " ", " ", "}", "" ], "| void onresize" : [ "() {", " ", "\t ", "\t//GLib.debug(\"Got allocation width of scrolled view %d\", allocation.width );", "//\t_this.maincol.el.set_max_width( _this.viewwin.el.get_width() - 32 );", "}", "", "" ], "| void removeErrors" : [ "() {", "\tvar child = this.view.el.get_first_child(); ", " ", "\tvar reading_header = true;", " ", "\twhile (child != null) {", "\t\t//GLib.debug(\"Got %s\", child.get_type().name());", "\t ", "\t if (reading_header) {", "\t\t\t", "", "\t\t\tif (child.get_type().name() != \"GtkColumnListView\") {", "\t\t\t ", "\t\t\t\tchild = child.get_next_sibling();", "\t\t\t\tcontinue;", "\t\t\t}", "\t\t\t// should be columnlistview", "\t\t\tchild = child.get_first_child(); ", "\t\t ", "\t\t ", "\t\t\t", "\t\t\treading_header = false;", "\t\t\t continue;", "\t }", "\t ", "\t \tif (child.has_css_class(\"node-err\")) {", "\t\t\tchild.remove_css_class(\"node-err\");", "\t\t}", "\t\tif (child.has_css_class(\"node-warn\")) {", "\t\t\tchild.remove_css_class(\"node-warn\");", "\t\t}", "\t\t", "\t\tif (child.has_css_class(\"node-depr\")) {", "\t\t\tchild.remove_css_class(\"node-depr\");", "\t\t}", "\t\t", " child = child.get_next_sibling(); ", "\t}", "\t//GLib.debug(\"Rturning null\");", " ", "}" ], "| void updateErrors" : [ "() {", "\tvar file = this.getActiveFile();", "\tif (file == null) {", "\t\treturn;", "\t}", "\t", "\tvar ar = file.getErrors();", "\tif (ar == null || ar.size < 1) {", "\t\tif (this.last_error_counter != file.error_counter) {", "\t\t\tthis.removeErrors();", "\t\t}", "\t", "\t\tthis.last_error_counter = file.error_counter ;", "", "\t\treturn;", "\t}", " \tif (this.last_error_counter == file.error_counter) {", "\t\treturn;", "\t}", "\tthis.removeErrors();", "\t", "\tforeach(var diag in ar) { ", "\t", "\t\t ", "// print(\"get inter\\n\");", "\t var node= file.lineToNode( (int)diag.range.start.line) ;", "\t if (node == null) {", "\t \tcontinue;", " \t}", " \tvar row = _this.model.nodeToRow(node);", " \tif (row < 0) {", " \t\tcontinue;", "\t\t}", " \tvar w = this.view.getWidgetAtRow(row);", " \tif (w == null) {", " \t\treturn;", "\t\t}", "\t\t// always show errors.", "\t\tvar ed = diag.category.down();", "\t\tif (ed != \"err\" && w.has_css_class(\"node-err\")) {", "\t\t\tcontinue;", "\t\t}", "\t\tif (ed == \"err\" && w.has_css_class(\"node-warn\")) {", "\t\t\tw.remove_css_class(\"node-warn\");", "\t\t}", "\t\tif (ed == \"err\" && w.has_css_class(\"node-depr\")) {", "\t\t\tw.remove_css_class(\"node-depr\");", "\t\t}", "\t\tif (!w.has_css_class(\"node-\"+ ed)) {", "\t\t\tw.add_css_class(\"node-\" + ed);", "\t\t}", "\t\t", "\t}", "\t", "}" ] } ], "name" : "WindowLeftTree" }