public void InsertAfterChild(VcProjectElement element,
                                     VcProjectElement reference)
        {
            ProjectExceptions.NotNull(element, "element");
            if (reference == null)
            {
                this.PrependChild(element);
                return;
            }

            if (element.Parent != this || reference.Parent != this)
            {
                throw new InvalidOperationException(
                          "The element is not created by this container.");
            }

            if (_children.Count != 0 && _children.Contains(element))
            {
                return;
            }

            int index = _children.IndexOf(reference);

            if (index < 0)
            {
                throw new InvalidOperationException(
                          "The referenced child is not found.");
            }

            _children.Insert(index + 1, element);
        }
Beispiel #2
0
        public override void ReadXml(XmlReader reader)
        {
            ProjectExceptions.NotNull(reader, "reader");

            Debug.Assert(reader.NodeType == XmlNodeType.Element);
            if (reader.NodeType != XmlNodeType.Element)
            {
                return;
            }

            if (!String.Equals(reader.Name, TagName,
                               StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            // Keep this, after reading the attributes, the reader will be
            // on the last attribute, and this property will return false...
            bool isEmptyElement = reader.IsEmptyElement;

            while (reader.MoveToNextAttribute())
            {
                _properties.Add(reader.Name, reader.Value);
            }

            if (isEmptyElement)
            {
                return;
            }

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (this.IsChildElement(reader.Name))
                    {
                        VcProjectElement element = this.CreateChildElement(reader.Name);
                        element.ReadXml(reader);

                        this.AppendChild(element);
                    }
                    else
                    {
                        throw new InvalidOperationException(String.Format(
                                                                "The element '{0}' is not a child element of {1}", reader.Name,
                                                                TagName));
                    }
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    if (String.Equals(reader.Name, TagName,
                                      StringComparison.OrdinalIgnoreCase))
                    {
                        break;
                    }
                }
            }
        }
        public int IndexOfChild(VcProjectElement element)
        {
            ProjectExceptions.NotNull(element, "element");

            if (_children.Count == 0)
            {
                return(-1);
            }

            return(_children.IndexOf(element));
        }
        public bool RemoveChild(VcProjectElement element)
        {
            ProjectExceptions.NotNull(element, "element");

            if (_children.Count == 0)
            {
                return(false);
            }

            return(_children.Remove(element));
        }
        public bool ContainsChild(VcProjectElement element)
        {
            ProjectExceptions.NotNull(element, "element");

            if (element.Parent == null || element.Parent != this ||
                _children.Count == 0)
            {
                return(false);
            }

            if (element.Parent == this)
            {
                return(true);
            }
            return(_children.Contains(element));
        }
        public void InsertChild(int index, VcProjectElement element)
        {
            ProjectExceptions.NotNull(element, "element");

            if (element.Parent != this)
            {
                throw new InvalidOperationException(
                          "The element is not created by this container.");
            }

            if (_children.Count != 0 && _children.Contains(element))
            {
                return;
            }
            _children.Insert(index, element);
        }
        public override void ReadXml(XmlReader reader)
        {
            ProjectExceptions.NotNull(reader, "reader");

            Debug.Assert(reader.NodeType == XmlNodeType.Element);
            if (reader.NodeType != XmlNodeType.Element)
            {
                return;
            }

            string tagName = this.XmlTagName;

            if (!String.Equals(reader.Name, tagName,
                               StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (this.IsChildElement(reader.Name))
                    {
                        VcProjectElement element = this.CreateChildElement(reader.Name);
                        element.ReadXml(reader);

                        this.AppendChild(element);
                    }
                    else
                    {
                        throw new InvalidOperationException(String.Format(
                                                                "The element '{0}' is not a child element of {1}", reader.Name,
                                                                tagName));
                    }
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    if (String.Equals(reader.Name, tagName,
                                      StringComparison.OrdinalIgnoreCase))
                    {
                        break;
                    }
                }
            }
        }