private void RemoveChildren(Node node, TreePath path) { if (node.Empty) { return; } TreePath children = path.Copy(); children.Down(); foreach (Node child in node) { RemoveChildren(child, children); children.Next(); } children.Up(); children.Down(); // Then empty the node for (int i = 0; i < node.Count; ++i) { //Console.WriteLine("Row deleted recurse: {0}, {1}", children, node[i]); d_adapter.EmitRowDeleted(children.Copy()); } }
private void AddNodeToModel(Node node, TreePath path) { // First reorder the child if necessary if (path == null && IsSorted) { Comparison <Node> sorter = Sorter; for (int i = 0; i < node.Parent.Count; ++i) { Node child = node.Parent[i]; if (node != child && sorter(node, child) < 0) { node.Parent.Move(node, i); break; } } } if (path == null) { path = node.Path; } //Console.WriteLine("Row inserted: {0}, {1}", path, node); d_adapter.EmitRowInserted(path.Copy(), node.Iter); TreePath children = path.Copy(); children.Down(); if (IsSorted) { node.Sort(Sorter); } // Then also its children foreach (Node child in node) { AddNodeToModel(child, children); children.Next(); } }
public Dialog(Image image, Drawable drawable, VariableSet variables) : base("Photoshop Actions", variables) { _image = image; _drawable = drawable; var vbox = new VBox(false, 12) { BorderWidth = 12 }; VBox.PackStart(vbox, true, true, 0); var store = CreateActionTree(); var sw = new ScrolledWindow() { HeightRequest = 400 }; vbox.PackStart(sw, true, true, 0); var view = new TreeView(store); sw.Add(view); var activeRenderer = new CellRendererToggle() { Activatable = true }; var columnOne = view.AppendColumn("Enabled", activeRenderer, new TreeCellDataFunc(RenderActive)); activeRenderer.Toggled += delegate(object o, ToggledArgs args) { TreeIter iter; var path = new TreePath(args.Path); if (store.GetIter(out iter, path)) { var executable = store.GetValue(iter, 1) as IExecutable; executable.IsEnabled = !executable.IsEnabled; path.Down(); while (store.GetIter(out iter, path)) { store.EmitRowChanged(path, iter); path.Next(); } } }; var textRenderer = new CellRendererText(); var column = view.AppendColumn("Set Name", textRenderer, new TreeCellDataFunc(RenderText)); var hbox = new HBox(); vbox.PackStart(hbox, false, true, 0); var play = new Button(Stock.Execute); play.Clicked += delegate { RenameToBackground(); var paths = view.Selection.GetSelectedRows(); var path = paths[0]; // Assume only 1 is selected var indices = path.Indices; var actions = _set[indices[0]]; if (indices.Length > 2) { actions.Execute(indices[1], indices[2]); path.Next(); view.Selection.SelectPath(path); } else { actions.Execute(indices[1]); } Gimp.DisplaysFlush(); }; hbox.PackStart(play, false, true, 0); view.Selection.Changed += delegate { var paths = view.Selection.GetSelectedRows(); var indices = paths[0].Indices; play.Sensitive = (indices.Length > 1); }; view.Selection.SetSelectFunction(delegate(TreeSelection selection, TreeModel model, TreePath path, bool path_currently_selected) { return(path.Indices.Length <= 3); }, IntPtr.Zero, null); ActionEvent.ActionSetCollection = _set; }