Example #1
0
        /// <summary>
        /// Create floating container for the view
        /// </summary>
        /// <param name="view">view for which to create floating container</param>
        /// <param name="bounds">bounds of the floating container</param>
        /// <returns>floating container</returns>
        public DockableContainer CreateFloatingContainer(FormsTabbedView view, Rectangle bounds)
        {
            DockableContainer container = new DockableContainer();

            _host.AddFirst(container);

            container.Bounds = bounds;

            container.SetModeSingleChild(view);

            if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.None))
            {
                SetViewDock(view, DockStyle.None, DockStyle.None, zDockMode.None);
            }
            else if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.Left))
            {
                DockControl(container, null, DockStyle.Left, zDockMode.Outer);
            }
            else if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.Right))
            {
                DockControl(container, null, DockStyle.Right, zDockMode.Outer);
            }
            else if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.Top))
            {
                DockControl(container, null, DockStyle.Top, zDockMode.Outer);
            }
            else if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.Bottom))
            {
                DockControl(container, null, DockStyle.Bottom, zDockMode.Outer);
            }
            else if (EnumUtility.Contains(view.AllowedDock, zAllowedDock.Fill))
            {
                DockControl(container, null, DockStyle.Fill, zDockMode.Inner);
            }
            else
            {
                _host.Remove(container);
                throw new NotSupportedException("Err"); // invalid allowed dock
            }

            return(container);
        }
        /// <summary>
        /// Gets the dock result for given screen location
        /// </summary>
        /// <param name="allowedDockMode">allowed dock mode</param>
        /// <param name="screenLocation">screen location</param>
        /// <returns>dock result</returns>
        public GuidedDockResult GetDockResult(zAllowedDock allowedDockMode, Point screenLocation)
        {
            ValidateNotDisposed();

            _dockResult.Dock     = DockStyle.None;
            _dockResult.DockMode = zDockMode.Outer;

            Point clientLocation = _host.PointToClient(screenLocation);

            if (_marginGuiders.LeftButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Left))
            {
                _dockResult.Dock = DockStyle.Left;
            }
            else if (_marginGuiders.RightButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Right))
            {
                _dockResult.Dock = DockStyle.Right;
            }
            else if (_marginGuiders.TopButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Top))
            {
                _dockResult.Dock = DockStyle.Top;
            }
            else if (_marginGuiders.BottomButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Bottom))
            {
                _dockResult.Dock = DockStyle.Bottom;
            }
            else if (_centerGuider.IsVisible)
            {
                _dockResult.DockMode = zDockMode.Inner;

                if (_centerGuider.LeftButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Left))
                {
                    _dockResult.Dock = DockStyle.Left;
                }
                else if (_centerGuider.TopButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Top))
                {
                    _dockResult.Dock = DockStyle.Top;
                }
                else if (_centerGuider.RightButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Right))
                {
                    _dockResult.Dock = DockStyle.Right;
                }
                else if (_centerGuider.BottomButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Bottom))
                {
                    _dockResult.Dock = DockStyle.Bottom;
                }
                else if (_centerGuider.FillButtonBounds.Contains(clientLocation) && EnumUtility.Contains(allowedDockMode, zAllowedDock.Fill))
                {
                    _dockResult.Dock = DockStyle.Fill;
                }
            }

            return(_dockResult);
        }
        /// <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, zDockMode mode)
        {
            if (_hostContainerDock != hostContainerDock)
            {
                if (AllowedDock != zAllowedDock.Unknown)
                {
                    bool isAllowed = false;
                    switch (hostContainerDock)
                    {
                    case DockStyle.Left:
                        isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.Left);
                        break;

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

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

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

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

                    case DockStyle.Fill:
                        isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.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;
            }
        }
Example #4
0
        /// <summary>
        /// Update the bounds of the buttons
        /// </summary>
        /// <param name="allowedDockMode">allowed dock mode</param>
        /// <param name="viewScreenRectangle">view rectanlge in the center of which the buttons to dock will be shown (in screen coordinates)</param>
        public void UpdateGuiderBounds(zAllowedDock allowedDockMode, Rectangle viewScreenRectangle)
        {
            ValidateNotDisposed();

            Rectangle viewRectangle = _host.RectangleToClient(viewScreenRectangle);

            if (_lastAllowedDockMode == allowedDockMode && _lastViewRectangle == viewRectangle)
            {
                return;
            }

            _lastViewRectangle   = viewRectangle;
            _lastAllowedDockMode = allowedDockMode;

            int   width  = viewRectangle.Width;
            int   height = viewRectangle.Height;
            Point center = new Point(width / 2, height / 2);
            Point offset = viewRectangle.Location;

            Point fillPosition = new Point(center.X - _dockFillGuider.Width / 2, center.Y - _dockFillGuider.Height / 2);

            Point leftPosition   = new Point(fillPosition.X - _dockLeftGuider.Width + 7, center.Y - _dockLeftGuider.Height / 2);
            Point topPosition    = new Point(center.X - _dockTopGuider.Width / 2 - 1, fillPosition.Y - _dockTopGuider.Height + 7);
            Point rightPosition  = new Point(fillPosition.X + _dockFillGuider.Width - 7, center.Y - _dockRightGuider.Height / 2);
            Point bottomPosition = new Point(center.X - _dockBottomGuider.Width / 2, fillPosition.Y + _dockBottomGuider.Height + 7);

            fillPosition.Offset(offset);
            leftPosition.Offset(offset);
            rightPosition.Offset(offset);
            topPosition.Offset(offset);
            bottomPosition.Offset(offset);

            _dockLeftGuider.Location   = leftPosition;
            _dockRightGuider.Location  = rightPosition;
            _dockTopGuider.Location    = topPosition;
            _dockBottomGuider.Location = bottomPosition;
            _dockFillGuider.Location   = fillPosition;

            bool dockLeftGuiderVisible         = EnumUtility.Contains(allowedDockMode, zAllowedDock.Left);
            bool dockRightGuiderVisible        = EnumUtility.Contains(allowedDockMode, zAllowedDock.Right);
            bool dockTopGuiderVisible          = EnumUtility.Contains(allowedDockMode, zAllowedDock.Top);
            bool dockBottomGuiderVisible       = EnumUtility.Contains(allowedDockMode, zAllowedDock.Bottom);
            bool dockFillGuiderShowFillPreview = EnumUtility.Contains(allowedDockMode, zAllowedDock.Fill);


            _guiderBounds.X = _dockFillGuider.Left;
            if (dockLeftGuiderVisible)
            {
                _guiderBounds.X = _dockLeftGuider.Left;
            }

            _guiderBounds.Y = _dockFillGuider.Top;
            if (dockTopGuiderVisible)
            {
                _guiderBounds.Y = _dockTopGuider.Top;
            }

            int right = _dockFillGuider.Right;

            if (dockRightGuiderVisible)
            {
                right = _dockRightGuider.Right;
            }
            _guiderBounds.Width = right - _guiderBounds.Left;

            int bottom = _dockFillGuider.Bottom;

            if (dockBottomGuiderVisible)
            {
                bottom = _dockBottomGuider.Bottom;
            }
            _guiderBounds.Height = bottom - _guiderBounds.Top;


            _leftButtonBounds.Location   = leftPosition;
            _rightButtonBounds.Location  = rightPosition;
            _topButtonBounds.Location    = topPosition;
            _bottomButtonBounds.Location = bottomPosition;

            _fillButtonBounds    = _dockFillGuider.FillBounds;
            _fillButtonBounds.X += _dockFillGuider.Left;
            _fillButtonBounds.Y += _dockFillGuider.Top;
        }