/// <summary> /// Find a specific node with the node path. /// NodePath format: .Parent.Child.SubChild /// </summary> /// <param name="namePath">The name path.</param> /// <returns></returns> /// <exception cref="System.Exception">Invalid name path ' + namePath + '</exception> private TreeIter FindNode(string namePath) { if (!namePath.StartsWith(".", StringComparison.CurrentCulture)) { throw new Exception("Invalid name path '" + namePath + "'"); } namePath = namePath.Remove(0, 1); // Remove the leading '.' string[] namePathBits = namePath.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); TreeIter result = TreeIter.Zero; TreeIter iter; treemodel.GetIterFirst(out iter); foreach (string pathBit in namePathBits) { string nodeName = (string)treemodel.GetValue(iter, 0); while (nodeName != pathBit && treemodel.IterNext(ref iter)) { nodeName = (string)treemodel.GetValue(iter, 0); } if (nodeName == pathBit) { result = iter; TreePath path = treemodel.GetPath(iter); if (!treeview1.GetRowExpanded(path)) { treeview1.ExpandRow(path, false); } treemodel.IterChildren(out iter, iter); } else { return(TreeIter.Zero); } } return(result); }
void SaveStatus(ArrayList list, TreeIter iter) { Gtk.TreePath path = treeStore.GetPath(iter); if (treeView.GetRowExpanded(path)) { list.Add(path); } if (treeStore.IterChildren(out iter, iter)) { do { SaveStatus(list, iter); } while (treeStore.IterNext(ref iter)); } }
/// <summary> /// A row in the tree view has been activated /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnRowActivated(object sender, RowActivatedArgs e) { try { timer.Stop(); if (treeview1.GetRowExpanded(e.Path)) { treeview1.CollapseRow(e.Path); } else { treeview1.ExpandRow(e.Path, false); } e.RetVal = true; DoubleClicked?.Invoke(this, new EventArgs()); } catch (Exception err) { ShowError(err); } }