Exemplo n.º 1
0
        /// <summary>
        /// Deserialize layout
        /// </summary>
        /// <param name="manager">Dock manager for initing objects</param>
        /// <param name="node">Node to parse</param>
        /// <param name="handlerObject">Delegate used to get user defined dockable contents</param>
        public void Deserialize(DockManager manager, XmlNode node, GetContentFromTypeString handlerObject)
        {
            _type        = (CompositionType)Enum.Parse(typeof(CompositionType), node.Attributes[ATTRIBUTE_NAME_TYPE].Value);
            _spaceFactor = double.Parse(node.Attributes[ATTRIBUTE_NAME_SFACTOR].Value, CultureInfo.GetCultureInfo(STORAGE_CULTURE));

            if (_type == CompositionType.Terminal)
            {
                Debug.Assert(node.ChildNodes[0].Name == ELEMENT_NAME_DOCKPANE);

                DockablePane pane = new DockablePane();
                pane.Deserialize(manager, node.ChildNodes[0], handlerObject);
                _attachedPane = pane;

                if (pane.IsDragSupported)
                {
                    manager.DragPaneServices.Register(pane);
                }
            }
            else
            {
                Debug.Assert(node.ChildNodes[0].Name == ELEMENT_NAME_CHILDGROUPS);

                foreach (XmlNode nodeChild in node.ChildNodes[0].ChildNodes)
                {
                    Composition composition = new Composition();
                    composition.Deserialize(manager, nodeChild, handlerObject);
                    _children.Add(composition);
                }
            }

            _isInited = true;
        }
        /// <summary>
        /// Restore docking layout reading a xml string which is previously generated by a call
        /// to GetLayoutState.
        /// </summary>
        /// <param name="xml">Xml containing layout state.</param>
        /// <param name="getContentHandler">Delegate used by serializer to get user defined
        /// dockable contents.</param>
        public void RestoreLayoutFromXml(string xml, GetContentFromTypeString getContentHandler)
        {
            var doc = new XmlDocument();

            doc.LoadXml(xml);

            _ResetInternalState();

            foreach (XmlNode nodeChild in doc.ChildNodes[0])
            {
                if (ELEMENT_NAME_ROOT == nodeChild.Name)
                {
                    gridDocking.Deserialize(this, nodeChild, getContentHandler);
                }
                else if (ELEMENT_NAME_FLTWNDS == nodeChild.Name)
                {
                    foreach (XmlNode node in nodeChild.ChildNodes)
                    {
                        var pane = new DockablePane();
                        pane.Deserialize(this, node, getContentHandler);
                    }
                }
            }
        }
        /// <summary>
        /// Deserialize layout
        /// </summary>
        /// <param name="manager">Dock manager for initing objects</param>
        /// <param name="node">Node to parse</param>
        /// <param name="handlerObject">Delegate used to get user defined dockable contents</param>
        public void Deserialize(DockManager manager, XmlNode node, GetContentFromTypeString handlerObject)
        {
            _type = (CompositionType)Enum.Parse(typeof(CompositionType), node.Attributes[ATTRIBUTE_NAME_TYPE].Value);
            _spaceFactor = double.Parse(node.Attributes[ATTRIBUTE_NAME_SFACTOR].Value, CultureInfo.GetCultureInfo(STORAGE_CULTURE));

            if (_type == CompositionType.Terminal)
            {
                Debug.Assert(node.ChildNodes[0].Name == ELEMENT_NAME_DOCKPANE);

                DockablePane pane = new DockablePane();
                pane.Deserialize(manager, node.ChildNodes[0], handlerObject);
                _attachedPane = pane;

                if (pane.IsDragSupported)
                    manager.DragPaneServices.Register(pane);
            }
            else
            {
                Debug.Assert(node.ChildNodes[0].Name == ELEMENT_NAME_CHILDGROUPS);

                foreach (XmlNode nodeChild in node.ChildNodes[0].ChildNodes)
                {
                    Composition composition = new Composition();
                    composition.Deserialize(manager, nodeChild, handlerObject);
                    _children.Add(composition);
                }
            }

            _isInited = true;
        }
        /// <summary>
        /// Restore docking layout reading a xml string which is previously generated by a call
        /// to GetLayoutState.
        /// </summary>
        /// <param name="xml">Xml containing layout state.</param>
        /// <param name="getContentHandler">Delegate used by serializer to get user defined
        /// dockable contents.</param>
        public void RestoreLayoutFromXml(string xml, GetContentFromTypeString getContentHandler)
        {
            var doc = new XmlDocument();
            doc.LoadXml(xml);

            _ResetInternalState();

            foreach (XmlNode nodeChild in doc.ChildNodes[0])
            {
                if (ELEMENT_NAME_ROOT == nodeChild.Name)
                    gridDocking.Deserialize(this, nodeChild, getContentHandler);
                else if (ELEMENT_NAME_FLTWNDS == nodeChild.Name)
                {
                    foreach (XmlNode node in nodeChild.ChildNodes)
                    {
                        var pane = new DockablePane();
                        pane.Deserialize(this, node, getContentHandler);
                    }
                }
            }
        }