Пример #1
0
        /// <summary>
        /// Set logical dock
        /// </summary>
        /// <param name="hostContainerDock">host container dock</param>
        /// <param name="dock">dock</param>
        /// <param name="mode">mode</param>
        public void SetDock(DockStyle hostContainerDock, DockStyle dock, DockableMode mode)
        {
            if (_hostContainerDock != hostContainerDock)
            {
                if (AllowedDock != DockAllowed.Unknown)
                {
                    bool isAllowed = false;
                    switch (hostContainerDock)
                    {
                    case DockStyle.Left:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Left);
                        break;

                    case DockStyle.Right:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Right);
                        break;

                    case DockStyle.Top:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Top);
                        break;

                    case DockStyle.Bottom:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Bottom);
                        break;

                    case DockStyle.None:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.None);
                        break;

                    case DockStyle.Fill:
                        isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Fill);
                        break;

                    case Globals.DockAutoHide:
                        isAllowed = _hostContainerDock == DockStyle.Left ||
                                    _hostContainerDock == DockStyle.Right ||
                                    _hostContainerDock == DockStyle.Top ||
                                    _hostContainerDock == DockStyle.Bottom;
                        break;
                    }

                    if (isAllowed == false)
                    {
                        throw new NotSupportedException("Err");
                    }
                }

                _hostContainerDock = hostContainerDock;

                IsDocked = hostContainerDock != DockStyle.None && hostContainerDock != Globals.DockAutoHide;

                PagesPanel.ShowAutohideButton = (hostContainerDock != DockStyle.None && hostContainerDock != DockStyle.Fill);
            }

            _dock     = dock;
            _dockMode = mode;

            foreach (DockableFormInfo info in _cachedInfos)
            {
                info.HostContainerDock = _hostContainerDock;
                info.Dock     = _dock;
                info.DockMode = _dockMode;
            }
        }
Пример #2
0
        /// <summary>
        /// Set view dock
        /// </summary>
        /// <param name="view">view</param>
        /// <param name="hostContainerDock">host container dock</param>
        /// <param name="dock">dock</param>
        /// <param name="mode">mode</param>
        public void SetViewDock(FormsTabbedView view, DockStyle hostContainerDock, DockStyle dock, DockableMode mode)
        {
            UpdateViewButtons(view);

            if (CanMoveByMouseFilledForms == false && hostContainerDock == DockStyle.Fill)
            {
                view.CanMoveByMouse = false;
            }
            else
            {
                view.CanMoveByMouse = true;
            }

            if (view.HostContainerDock == dock)
            {
                view.SetDock(hostContainerDock, dock, mode);
                return;
            }

            view.SetDock(hostContainerDock, dock, mode);

            view.Positioner.BeginMoveByMouse -= OnPositionerBeginMoveByMouse;
            view.Positioner.MoveByMouse      -= OnPositionerMoveByMouse;
            view.Positioner.EndMoveByMouse   -= OnPositionerEndMoveByMouse;

            view.Positioner.Dispose();

            if (dock == DockStyle.None)
            {
                view.Positioner = new ControlPositioner(view.Parent);

                view.Positioner.MoveByMouse    += OnPositionerMoveByMouse;
                view.Positioner.EndMoveByMouse += OnPositionerEndMoveByMouse;
            }
            else if (dock == Globals.DockAutoHide)
            {
                view.Positioner = null;
                return;
            }
            else
            {
                view.Positioner = new ControlPositioner(view);
            }

            view.Positioner.BeginMoveByMouse += OnPositionerBeginMoveByMouse;
        }
Пример #3
0
        /// <summary>
        /// Dock the form in host
        /// </summary>
        /// <param name="containerToDock">container to dock</param>
        /// <param name="dock">dock</param>
        /// <param name="mode">mode</param>
        private void DockInHost(DockingContainer container, DockStyle dock, DockableMode mode)
        {
            Rectangle availableBounds = FormWrapper.GetFillScreenRectangle(_host);

            container.SingleChild.SaveFloatingSize();
            container.Splitter.Visible = false;

            if (_host.Contains(container.Splitter) == false && dock != DockStyle.Fill)
            {
                _host.AddLast(container.Splitter);
            }

            if (mode == DockableMode.Inner)
            {
                if (dock != DockStyle.Fill)
                {
                    _host.MoveFirst(container);
                    _host.MoveFirst(container.Splitter);
                }
            }
            else
            {
                if (dock != DockStyle.Fill)
                {
                    _host.MoveLast(container.Splitter);
                    _host.MoveLast(container);
                }
            }

            container.Dock = dock;

            if (dock != DockStyle.Fill)
            {
                container.Splitter.Dock    = dock;
                container.Splitter.Visible = true;
            }
            else
            {
                container.SingleChild.ButtonsRenderer = new TopUnitButtonDrawer();
            }

            // Must call this again after splitter is docked and made visible, to have proper splitter.
            // Must have this if/else block also before making the splitter visible to prevent flickering
            if (mode == DockableMode.Inner)
            {
                if (dock != DockStyle.Fill)
                {
                    _host.MoveFirst(container);
                    _host.MoveFirst(container.Splitter);

                    if (availableBounds.IsEmpty == false)
                    {
                        if (dock == DockStyle.Left || dock == DockStyle.Right)
                        {
                            if (container.Width >= availableBounds.Width - MinAvailableSize)
                            {
                                container.Width = availableBounds.Width - MinAvailableSize;
                            }
                        }
                        else if (dock == DockStyle.Top || dock == DockStyle.Bottom)
                        {
                            if (container.Height >= availableBounds.Height - MinAvailableSize)
                            {
                                container.Height = availableBounds.Height - MinAvailableSize;
                            }
                        }
                    }
                }
            }
            else
            {
                if (dock != DockStyle.Fill)
                {
                    _host.MoveLast(container.Splitter);
                    _host.MoveLast(container);
                }
            }

            SetViewDock(container.SingleChild, dock, dock, mode);
        }
Пример #4
0
        /// <summary>
        /// Dock a form previously added to guider
        /// </summary>
        /// <param name="containerToDock">container to dock</param>
        /// <param name="containerWhereToDock">container where to dock</param>
        /// <param name="mode">were to dock</param>
        public void DockControl(DockingContainer containerToDock, DockingContainer containerWhereToDock, DockStyle dock, DockableMode mode)
        {
            Debug.Assert(dock != DockStyle.None);

            if (ShouldDockInHost(containerToDock, containerWhereToDock))
            {
                DockInHost(containerToDock, dock, mode);
            }
            else if (ShouldDockInParentContainer(containerToDock, containerWhereToDock))
            {
                DockInParentContainer(containerToDock, containerWhereToDock, dock);
            }

            OnShowFloatingWindows();
        }
Пример #5
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, DockableMode mode)
        {
            DockingContainer containerToDock      = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);
            DockingContainer containerWhereToDock = null;

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

            _layout.DockControl(containerToDock, containerWhereToDock, dock, mode);
        }
Пример #6
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, DockableMode mode)
        {
            DockingContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm);

            _layout.DockControl(container, null, dock, mode);
        }
Пример #7
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 DockForm(DockableFormInfo info, DockableFormInfo infoOver, DockStyle dock, DockableMode mode)
 {
     _docker.DockOver(info, infoOver, dock, mode);
 }
Пример #8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="control">control</param>
 /// <param name="dock">dock</param>
 /// <param name="mode">dock mode</param>
 public DockControlEventArgs(Control control, DockStyle dock, DockableMode mode)
 {
     _control  = control;
     _dock     = dock;
     _dockMode = mode;
 }