/// <summary>
        /// Get form size info
        /// </summary>
        /// <param name="form">form </param>
        /// <param name="source">size infos</param>
        /// <returns>form size info</returns>
        private static ControlSizeInfo GetInfo(Form form, List <ControlSizeInfo> sizesInfo)
        {
            for (int index = 0; index < sizesInfo.Count; index++)
            {
                ControlSizeInfo info = sizesInfo[index];
                if (info.Control == form)
                {
                    return(info);
                }
            }

            return(null);
        }
        /// <summary>
        /// Move view size info
        /// </summary>
        /// <param name="view">view</param>
        /// <param name="source">source</param>
        /// <returns>view size</returns>
        private static Size RemoveViewSizeInfo(FormsTabbedView view, List <ControlSizeInfo> source)
        {
            Form            form      = view.GetPageAt(0);
            ControlSizeInfo firstInfo = GetInfo(form, source);

            for (int index = 0; index < view.Count; index++)
            {
                ControlSizeInfo info = GetInfo(view.GetPageAt(index), source);
                source.Remove(info);
            }

            return(new Size(firstInfo.Width, firstInfo.Height));
        }
        /// <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;
                }
            }
        }
        /// <summary>
        /// Extract containers size info
        /// </summary>
        /// <param name="container">container</param>
        /// <param name="source">source</param>
        /// <param name="destination">destination</param>
        /// <returns>computed container size</returns>
        private static ControlSizeInfo ExtractContainersSizeInfo(DockableContainer container, List <ControlSizeInfo> source, List <ControlSizeInfo> destination)
        {
            DockableContainer currentContainer = container;

            if (currentContainer.SingleChild != null)
            {
                Size            size   = RemoveViewSizeInfo(currentContainer.SingleChild, source);
                ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
                destination.Add(result);
                return(result);
            }

            if (currentContainer.TopPane != null)
            {
                ControlSizeInfo topSize    = ExtractContainersSizeInfo(container.TopPane, source, destination);
                ControlSizeInfo bottomSize = ExtractContainersSizeInfo(container.BottomPane, source, destination);

                Size            size   = new Size(Math.Max(topSize.Width, bottomSize.Width), topSize.Height + bottomSize.Height + container.TopPane.Splitter.Height);
                ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
                destination.Add(result);
                return(result);
            }

            if (currentContainer.LeftPane != null)
            {
                ControlSizeInfo leftSize  = ExtractContainersSizeInfo(container.LeftPane, source, destination);
                ControlSizeInfo rightSize = ExtractContainersSizeInfo(container.RightPane, source, destination);

                Size            size   = new Size(leftSize.Width + rightSize.Width + container.LeftPane.Splitter.Width, Math.Max(leftSize.Height, rightSize.Height));
                ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
                destination.Add(result);
                return(result);
            }


            throw new NotSupportedException();
        }
示例#5
0
        /// <summary>
        /// Extract containers size info
        /// </summary>
        /// <param name="container">container</param>
        /// <param name="source">source</param>
        /// <param name="destination">destination</param>
        /// <returns>computed container size</returns>
        private static ControlSizeInfo ExtractContainersSizeInfo(DockableContainer container, List<ControlSizeInfo> source, List<ControlSizeInfo> destination)
        {
            DockableContainer currentContainer = container;
             if (currentContainer.SingleChild != null)
             {
            Size size = RemoveViewSizeInfo(currentContainer.SingleChild, source);
            ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
            destination.Add(result);
            return result;
             }

             if (currentContainer.TopPane != null)
             {
            ControlSizeInfo topSize    = ExtractContainersSizeInfo(container.TopPane, source, destination);
            ControlSizeInfo bottomSize = ExtractContainersSizeInfo(container.BottomPane, source, destination);

            Size size = new Size(Math.Max(topSize.Width, bottomSize.Width), topSize.Height + bottomSize.Height + container.TopPane.Splitter.Height);
            ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
            destination.Add(result);
            return result;
             }

             if (currentContainer.LeftPane != null)
             {
            ControlSizeInfo leftSize   = ExtractContainersSizeInfo(container.LeftPane, source, destination);
            ControlSizeInfo rightSize  = ExtractContainersSizeInfo(container.RightPane, source, destination);

            Size size = new Size(leftSize.Width + rightSize.Width + container.LeftPane.Splitter.Width, Math.Max(leftSize.Height, rightSize.Height));
            ControlSizeInfo result = new ControlSizeInfo(container, size.Width, size.Height);
            destination.Add(result);
            return result;
             }

             throw new NotSupportedException();
        }