Ejemplo n.º 1
0
        /// <summary>
        /// Add sorted floating containers to the list
        /// </summary>
        /// <param name="containers">containers</param>
        private void AddSortedFloatingContainers(List <DockableContainer> containers)
        {
            List <DockableContainer> containersToBringInFront = new List <DockableContainer>();

            foreach (DockableFormInfo info in _dockableForms)
            {
                FormsTabbedView view = HierarchyUtility.GetTabbedView(info.DockableForm);
                if (view.IsDocked)
                {
                    continue;
                }

                DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);
                if (_host.Contains(container) == false)
                {
                    continue;
                }

                if (containersToBringInFront.Contains(container) == false)
                {
                    containersToBringInFront.Add(container);
                }
            }

            SortContainersBasedOnTheirZOrder(containersToBringInFront);

            containers.AddRange(containersToBringInFront);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Set the height of a form docked: top or bottom or fill
        /// </summary>
        /// <param name="info">info identifing the form</param>
        /// <param name="newHeight">new height value</param>
        public void SetHeight(DockableFormInfo info, int newHeight)
        {
            int delta = newHeight - info.DockableForm.Height;

            if (delta == 0)
            {
                return;
            }

            DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);

            List <DockableContainer> hierarchy = new List <DockableContainer>();
            List <int> modifiers = new List <int>();

            hierarchy.Add(container);
            modifiers.Add(delta);

            DockableContainer containerParent = container.Parent as DockableContainer;

            while (containerParent != null)
            {
                hierarchy.Add(containerParent);
                modifiers.Add(containerParent.Height - container.Height + delta);

                container       = containerParent;
                containerParent = containerParent.Parent as DockableContainer;
            }

            for (int index = hierarchy.Count - 1; index >= 0; index--)
            {
                hierarchy[index].Height += modifiers[index];
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Remove the form
        /// </summary>
        /// <param name="info">info about form to remove</param>
        public void Remove(DockableFormInfo info)
        {
            if (info == null)
            {
                return;
            }

            FormsTabbedView view = HierarchyUtility.GetTabbedView(info.DockableForm);

            if (view != null)
            {
                if (view.Count == 1 && view.IsDocked)
                {
                    _layout.Undock(view);
                }

                if (view.Count == 1)
                {
                    _host.Remove(view.Parent);

                    DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);
                    container.SetModeEmpty();

                    view.Remove(info);
                }
                else
                {
                    if (view.Remove(info) == false)
                    {
                        if (SelectedFormInfo == info)
                        {
                            SelectedFormInfo = null;
                        }

                        return;
                    }
                }
            }

            if (SelectedFormInfo == info)
            {
                SelectedFormInfo = null;
            }

            _dockableForms.Remove(info);
            info.SelectedChanged   -= OnFormSelectedChanged;
            info.ShowAutoPanel     -= OnShowFormAutoPanel;
            info.ExplicitDisposing -= OnInfoDisposing;

            if (info.IsAutoHideMode)
            {
                _autohide.ArrangeAutoButtonsPanels();
            }

            info.Dispose();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Dock a form previously added to guider over another form previously added to guider
        /// </summary>
        /// <param name="info">info about the form to dock</param>
        /// <param name="infoOver">info about form over which to dock</param>
        /// <param name="dock">how to dock</param>
        /// <param name="mode">were to dock</param>
        public void DockOver(DockableFormInfo info, DockableFormInfo infoOver, DockStyle dock, zDockMode mode)
        {
            DockableContainer containerToDock      = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);
            DockableContainer containerWhereToDock = null;

            if (infoOver != null)
            {
                containerWhereToDock = HierarchyUtility.GetClosestDockableContainer(infoOver.DockableForm);
            }

            _layout.DockControl(containerToDock, containerWhereToDock, dock, mode);
        }
        /// <summary>
        /// Save
        /// </summary>
        /// <param name="info">info</param>
        /// <param name="parentId">parent id identifier</param>
        /// <param name="xmlForms">forms</param>
        private void Save(DockableFormInfo info, Guid parentId, XmlNode xmlForms)
        {
            XmlDocument xmlDocument = xmlForms.OwnerDocument;

            XmlNode xmlForm = xmlForms.AppendChild(xmlDocument.CreateElement(XmlTags.TagForm));

            XmlNode xmlGuid        = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagGuid));
            XmlNode xmlAllowedDock = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagAllowedDock));
            XmlNode xmlCurrentDock = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagCurrentDock));
            XmlNode xmlCurrentMode = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagCurrentMode));
            XmlNode xmlIsSelected  = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagIsSelected));
            XmlNode xmlIsAutoHide  = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagIsAutoHide));
            XmlNode xmlWidth       = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagWidth));
            XmlNode xmlHeight      = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagHeight));

            if (parentId != Guid.Empty)
            {
                XmlNode xmlParentGuid = xmlForm.AppendChild(xmlDocument.CreateElement(XmlTags.TagParentGuid));
                xmlParentGuid.InnerText = parentId.ToString();
            }

            xmlGuid.InnerText        = info.Id.ToString();
            xmlAllowedDock.InnerText = info.AllowedDock.ToString();
            xmlCurrentMode.InnerText = info.DockMode.ToString();
            xmlIsSelected.InnerText  = info.IsSelected.ToString().ToLower();
            xmlIsAutoHide.InnerText  = info.IsAutoHideMode.ToString().ToLower();

            DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);

            xmlWidth.InnerText  = container.Width.ToString();
            xmlHeight.InnerText = container.Height.ToString();

            if (parentId == Guid.Empty)
            {
                if (info.IsAutoHideMode == false)
                {
                    xmlCurrentDock.InnerText = info.HostContainerDock.ToString();
                }
                else
                {
                    xmlCurrentDock.InnerText = info.AutoHideSavedDock.ToString();
                }
            }
            else
            {
                xmlCurrentDock.InnerText = info.Dock.ToString();
                //xmlCurrentDock.InnerText = "Bottom";
                //xmlCurrentMode.InnerText = "Inner";
            }
        }
        /// <summary>
        /// Restore sizes
        /// </summary>
        /// <param name="formsSize">form sizes</param>
        private void RestoreSizes(List <ControlSizeInfo> formsSize)
        {
            while (formsSize.Count > 0)
            {
                ControlSizeInfo sizeInfo = formsSize[0];

                DockableContainer container = HierarchyUtility.GetClosestDockableContainer((Form)sizeInfo.Control);
                while (container.Parent.Handle != _container.Handle)
                {
                    container = (DockableContainer)container.Parent;
                }

                List <ControlSizeInfo> containersSize = new List <ControlSizeInfo>();
                ExtractContainersSizeInfo(container, formsSize, containersSize);

                for (int index = containersSize.Count - 1; index >= 0; index--)
                {
                    ControlSizeInfo info = containersSize[index];
                    info.Control.Width  = info.Width;
                    info.Control.Height = info.Height;
                }
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Add sorted fill containers to the list
        /// </summary>
        /// <param name="containers">containers</param>
        private void AddSortedFillContainers(List <DockableContainer> containers)
        {
            List <DockableContainer> containersToBringInFront = new List <DockableContainer>();

            foreach (DockableFormInfo info in _dockableForms)
            {
                FormsTabbedView view = HierarchyUtility.GetTabbedView(info.DockableForm);
                if (view.HostContainerDock != DockStyle.Fill)
                {
                    continue;
                }

                DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);
                while (true)
                {
                    if (container.Parent as DockableContainer != null)
                    {
                        container = (DockableContainer)container.Parent;
                    }
                    else
                    {
                        break;
                    }
                }

                Debug.Assert(_host.Contains(container), "Floating form views must have their parent in form");

                if (containersToBringInFront.Contains(container) == false)
                {
                    containersToBringInFront.Add(container);
                }
            }

            SortContainersBasedOnTheirZOrder(containersToBringInFront);

            containers.AddRange(containersToBringInFront);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Dock a form previously added to guider
        /// </summary>
        /// <param name="info">info about the form to dock</param>
        /// <param name="dock">how to dock</param>
        /// <param name="mode">were to dock</param>
        public void Dock(DockableFormInfo info, DockStyle dock, zDockMode mode)
        {
            DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);

            _layout.DockControl(container, null, dock, mode);
        }