private void SettingsNodeRemoved(SettingsNode sender, SettingsNodeChangeEventArgs e) { string[] nodeNames = e.Node.FullPath.Split(e.Node.PathSeparator); if (nodeNames.Length < 1) { return; } TreeNodeCollection nodes = treeView.Nodes; for (int i = 0; i < nodeNames.Length - 1; i++) { TreeNode node = nodes[nodeNames[i]]; if (node == null) { return; } nodes = node.Nodes; } UIUtility.Invoke(this, () => { if (nodes.ContainsKey(e.Node.Name)) { nodes.RemoveByKey(e.Node.Name); } }); }
private void SettingsNodeChanged(SettingsNode sender, SettingsNodeChangeEventArgs e) { string[] nodeNames = e.Node.FullPath.Split(e.Node.PathSeparator); if (nodeNames.Length < 1) { return; } TreeNode changedNode = treeView.Nodes[nodeNames[0]]; for (int i = 1; i < nodeNames.Length; i++) { if (changedNode == null) { return; } changedNode = changedNode.Nodes[nodeNames[i]]; } UIUtility.Invoke(this, () => { TreeNode valueNode = changedNode.FirstNode; valueNode.Text = e.Node.Value.ToString(); valueNode.Name = valueNode.Text; }); }
/// <summary> /// Notifies the parent node that a child node has been removed. /// </summary> /// <param name="src">The node source of the event.</param> /// <param name="e">The <see cref="XyratexOSC.Settings.SettingsNodeChangeEventArgs"/> instance containing the event data.</param> protected void RaiseRemoved(SettingsNode src, SettingsNodeChangeEventArgs e) { if (_parent != null) { _parent.RaiseRemoved(src, e); } }
private void SettingsNodeInserted(SettingsNode sender, SettingsNodeChangeEventArgs e) { string[] nodeNames = e.Node.FullPath.Split(e.Node.PathSeparator); if (nodeNames.Length < 1) { return; } TreeNodeCollection nodes = treeView.Nodes; for (int i = 0; i < nodeNames.Length - 1; i++) { TreeNode node = nodes[nodeNames[i]]; if (node == null) { return; } nodes = node.Nodes; } UIUtility.Invoke(this, () => { TreeNode newNode = new TreeNode(e.Node.Name); newNode.Name = newNode.Text; newNode.Tag = e.Node; nodes.Add(newNode); }); }
/// <summary> /// Removes the old node from the collection and inserts the new node at the old node's index. /// </summary> /// <param name="oldNode">The old node.</param> /// <param name="newNode">The new node.</param> /// <exception cref="ArgumentException">The node-to-be-replaced does not exist in this list.</exception> public void Replace(SettingsNode oldNode, SettingsNode newNode) { int index = IndexOf(oldNode); if (index == -1) { throw new ArgumentException("SettingsNode '" + oldNode.Name + "' was not found in the collection."); } SettingsNodeChangeEventArgs eRemove = new SettingsNodeChangeEventArgs(oldNode, oldNode.Parent, null, oldNode.Value, oldNode.Value, SettingsNodeChangeAction.Remove); SettingsNodeChangeEventArgs eInsert = new SettingsNodeChangeEventArgs(newNode, newNode.Parent, _parent, newNode.Value, newNode.Value, SettingsNodeChangeAction.Insert); RaiseRemoving(oldNode, eRemove); RaiseInserting(newNode, eInsert); _nodeIndices[index] = newNode; if (_nodeDict.ContainsKey(oldNode.Name)) { _nodeDict.Remove(oldNode.Name); } if (_parent == null || !_parent.IsList) { _nodeDict.Add(newNode.Name, newNode); } newNode.Parent = _parent; oldNode.Parent = null; RaiseRemoved(oldNode, eRemove); RaiseInserted(newNode, eInsert); }
/// <summary> /// Notifies the parent node that a child node is inserting. /// </summary> /// <param name="src">The node source of the event.</param> /// <param name="e">The <see cref="XyratexOSC.Settings.SettingsNodeChangeEventArgs"/> instance containing the event data.</param> protected void RaiseInserting(SettingsNode src, SettingsNodeChangeEventArgs e) { if (_parent != null) { _parent.RaiseInserting(src, e); } }
/// <summary> /// Used internally to invoke a node removing event. /// </summary> /// <param name="src">The node that raised this event.</param> /// <param name="e">The <see cref="XyratexOSC.Settings.SettingsNodeChangeEventArgs"/> instance containing the event data.</param> sealed internal override void RaiseRemoving(SettingsNode src, SettingsNodeChangeEventArgs e) { if (NodeRemoving != null) { NodeRemoving(src, e); } }
/// <summary> /// Used internally to invoke a node removed event. /// </summary> /// <param name="src">The node that raised this event.</param> /// <param name="e">The <see cref="XyratexOSC.Settings.SettingsNodeChangeEventArgs"/> instance containing the event data.</param> sealed internal override void RaiseRemoved(SettingsNode src, SettingsNodeChangeEventArgs e) { if (NodeRemoved != null) { NodeRemoved(src, e); } if (_persistToFile) { Save(LoadedFile); } }
/// <summary> /// Adds the specified node to this collection. /// </summary> /// <param name="node">The node.</param> public void Add(SettingsNode node) { SettingsNode oldParent = null; object value = null; if (node != null) { oldParent = node.Parent; value = node.Value; } SettingsNodeChangeEventArgs e = new SettingsNodeChangeEventArgs(node, oldParent, _parent, value, value, SettingsNodeChangeAction.Insert); RaiseInserting(node, e); if (node != null) { // Add node to dictionary (for key retrieval) if (_parent == null || !_parent.IsList) { if (_nodeDict.ContainsKey(node.Name)) { string exMessage; if (_parent != null) { exMessage = String.Format("Cannot add node '{0}' to '{1}' because a node with the same name already exists at that level.", node.Name, _parent.FullPath); } else { exMessage = String.Format("Cannot add node '{0}' because a node with the same name already exists.", node.Name); } throw new ArgumentException(exMessage); } _nodeDict.Add(node.Name, node); } // Add node to list (for index retrieval) _nodeIndices.Add(node); node.Parent = _parent; } RaiseInserted(node, e); }
/// <summary> /// Removes the specified node. /// </summary> /// <param name="node">The node.</param> /// <exception cref="ArgumentNullException"><c>node</c> is null.</exception> public void Remove(SettingsNode node) { if (node == null) { throw new ArgumentNullException("Cannot remove a null SettingsNode object from the collection."); } SettingsNodeChangeEventArgs e = new SettingsNodeChangeEventArgs(node, node.Parent, null, node.Value, node.Value, SettingsNodeChangeAction.Remove); RaiseRemoving(node, e); _nodeIndices.RemoveAt(IndexOf(node)); if (_nodeDict.ContainsKey(node.Name)) { _nodeDict.Remove(node.Name); } node.Parent = null; RaiseRemoved(node, e); }
/// <summary> /// Inserts the specified node at the specified index. /// </summary> /// <param name="index">The node index.</param> /// <param name="node">The node.</param> public void Insert(int index, SettingsNode node) { if (node == null) { return; } SettingsNodeChangeEventArgs e = new SettingsNodeChangeEventArgs(node, node.Parent, _parent, node.Value, node.Value, SettingsNodeChangeAction.Insert); RaiseInserting(node, e); if (_parent == null || !_parent.IsList) { _nodeDict.Add(node.Name, node); } _nodeIndices.Insert(index, node); node.Parent = _parent; RaiseInserted(node, e); }