Example #1
0
        public override void ReadXml(XmlReader reader)
        {
            reader.MoveToContent();
            if (reader.IsEmptyElement)
            {
                reader.Read();
                ComputeVisibility();
                return;
            }

            var localName = reader.LocalName;

            reader.Read();

            while (true)
            {
                if (reader.LocalName.Equals(localName) && (reader.NodeType == XmlNodeType.EndElement))
                {
                    break;
                }

                if (reader.NodeType == XmlNodeType.Whitespace)
                {
                    reader.Read();
                    continue;
                }

                XmlSerializer serializer;
                if (reader.LocalName.Equals("LayoutAnchorablePaneGroup"))
                {
                    serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup));
                }
                else
                {
                    var type = LayoutRoot.FindType(reader.LocalName);
                    if (type == null)
                    {
                        throw new ArgumentException("AvalonDock.LayoutAnchorableFloatingWindow doesn't know how to deserialize " + reader.LocalName);
                    }
                    serializer = new XmlSerializer(type);
                }

                RootPanel = ( LayoutAnchorablePaneGroup )serializer.Deserialize(reader);
            }

            reader.ReadEndElement();
        }
Example #2
0
        private object ReadElement(XmlReader reader)
        {
            while (reader.NodeType == XmlNodeType.Whitespace)
            {
                reader.Read();
            }

            if (reader.NodeType == XmlNodeType.EndElement)
            {
                return(null);
            }

            XmlSerializer serializer;

            switch (reader.LocalName)
            {
            case "LayoutAnchorablePaneGroup":
                serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup));
                break;

            case "LayoutAnchorablePane":
                serializer = new XmlSerializer(typeof(LayoutAnchorablePane));
                break;

            case "LayoutAnchorable":
                serializer = new XmlSerializer(typeof(LayoutAnchorable));
                break;

            case "LayoutDocumentPaneGroup":
                serializer = new XmlSerializer(typeof(LayoutDocumentPaneGroup));
                break;

            case "LayoutDocumentPane":
                serializer = new XmlSerializer(typeof(LayoutDocumentPane));
                break;

            case "LayoutDocument":
                serializer = new XmlSerializer(typeof(LayoutDocument));
                break;

            case "LayoutAnchorGroup":
                serializer = new XmlSerializer(typeof(LayoutAnchorGroup));
                break;

            case "LayoutPanel":
                serializer = new XmlSerializer(typeof(LayoutPanel));
                break;

            case "LayoutDocumentFloatingWindow":
                serializer = new XmlSerializer(typeof(LayoutDocumentFloatingWindow));
                break;

            case "LayoutAnchorableFloatingWindow":
                serializer = new XmlSerializer(typeof(LayoutAnchorableFloatingWindow));
                break;

            case "LeftSide":
            case "RightSide":
            case "TopSide":
            case "BottomSide":
                if (reader.IsEmptyElement)
                {
                    reader.Read();
                    return(null);
                }
                return(reader.Read());

            default:
                var type = LayoutRoot.FindType(reader.LocalName);
                if (type == null)
                {
                    throw new ArgumentException("AvalonDock.LayoutRoot doesn't know how to deserialize " + reader.LocalName);
                }
                serializer = new XmlSerializer(type);
                break;
            }

            return(serializer.Deserialize(reader));
        }