Пример #1
0
        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);
                }
            });
        }
Пример #2
0
        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;
            });
        }
Пример #3
0
 /// <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);
     }
 }
Пример #4
0
        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);
            });
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
 /// <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);
     }
 }
Пример #7
0
 /// <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);
     }
 }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
        /// <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);
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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);
        }