Ejemplo n.º 1
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(DockableContainer container, DockStyle dock, zDockMode 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 == zDockMode.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 TopTabButtonRenderer();
         }

         // 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 == zDockMode.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);
      }
Ejemplo n.º 2
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);
 }
Ejemplo n.º 3
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(DockableContainer containerToDock, DockableContainer containerWhereToDock, DockStyle dock, zDockMode mode)
      {
         Debug.Assert(dock != DockStyle.None);

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

         OnShowFloatingWindows();
      }
Ejemplo n.º 4
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, zDockMode 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;
      }
Ejemplo n.º 5
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, zDockMode mode)
 {
     _control  = control;
     _dock     = dock;
     _dockMode = mode;
 }
Ejemplo n.º 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 DockForm(DockableFormInfo info, DockStyle dock, zDockMode mode)
 {
     _docker.Dock(info, dock, mode);
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Actualizeaza dimensiunile panourilor
        /// </summary>
        /// <returns>modurile actualizate</returns>
        public zDockMode UpdatePanelsLayout()
        {
            zDockMode modActualizat = zDockMode.None;

            if (_layout.UpdateLeftPanelLayout(_container.ClientSize))
            {
                modActualizat |= zDockMode.Left;
            }

            if (_layout.UpdateRightPanelLayout(_container.ClientSize))
            {
                modActualizat |= zDockMode.Right;
            }

            if (_layout.UpdateTopPanelLayout(_container.ClientSize))
            {
                modActualizat |= zDockMode.Top;
            }

            if (_layout.UpdateBottomPanelLayout(_container.ClientSize))
            {
                modActualizat |= zDockMode.Bottom;
            }

            if (_layout.UpdateCenterPanelLayout(_container.ClientSize))
            {
                modActualizat |= zDockMode.Fill;
            }


            int minimumWidth =
                // Fit left panel
                DockPanelsLayout.ButtonsPanelDimension + _layout.LeftPanel.NotHiddenDimension + SplitterDimension +
                // Fit right panel
                DockPanelsLayout.ButtonsPanelDimension + _layout.RightPanel.NotHiddenDimension + SplitterDimension +
                // Fit center panel
                DockPanelsLayout.MinPanelDimension;

            int minimumHeight =
                // Fit top panel
                DockPanelsLayout.ButtonsPanelDimension + _layout.TopPanel.NotHiddenDimension + SplitterDimension +
                // Fit bottom panel
                DockPanelsLayout.ButtonsPanelDimension + _layout.BottomPanel.NotHiddenDimension + SplitterDimension +
                // Fit center panel
                DockPanelsLayout.ButtonsPanelDimension + DockPanelsLayout.MinPanelDimension;

            minimumWidth  = Math.Min(_container.Width, minimumWidth);
            minimumHeight = Math.Min(_container.Height, minimumHeight);

            if (minimumWidth != _minViewWidth || minimumHeight != _minViewHeight)
            {
                _minViewWidth          = minimumWidth;
                _minViewHeight         = minimumHeight;
                _container.MinimumSize = new Size(_minViewWidth, _minViewHeight);

                if (MinimumSizeChanged != null)
                {
                    MinimumSizeChanged(this, EventArgs.Empty);
                }
            }

            _container.Invalidate();

            return(modActualizat);
        }
Ejemplo n.º 8
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, 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;
             }
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="dockMode">dock mode of this panel</param>
 /// <param name="toolWindowsBorder">border of the tool windows from this panel</param>
 public DockPanel(zDockMode dockMode, FormBorderStyle toolWindowsBorder)
 {
     _dockMode = dockMode;
     _toolWindowsBorderStyle = toolWindowsBorder;
 }
Ejemplo n.º 11
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);
        }
Ejemplo n.º 12
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(DockableContainer container, DockStyle dock, zDockMode mode)
        {
            container.SingleChild.SaveFloatingSize();
             container.Splitter.Visible = false;

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

             if (mode == zDockMode.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 TopTabButtonRenderer();
             }

             // 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 == zDockMode.Inner)
             {
            if (dock != DockStyle.Fill)
            {
               _host.MoveFirst(container);
               _host.MoveFirst(container.Splitter);
            }
             }
             else
             {
            if (dock != DockStyle.Fill)
            {
               _host.MoveLast(container.Splitter);
               _host.MoveLast(container);
            }
             }

             SetViewDock(container.SingleChild, dock, dock, mode);
        }
        /// <summary>
        /// Show the dock guiders buttons
        /// </summary>
        /// <param name="allowedDockMode">allowed dock mode. Guiders will be shown depending on this mode.</param>
        /// <param name="screenClientBounds">screen client bounds of the container</param>
        public void ShowDockGuiders(zDockMode allowedDockMode, Rectangle screenClientBounds)
        {
            if (allowedDockMode == zDockMode.None)
            {
                HideDockGuiders();
                return;
            }

            if (_lastAllowedDock == allowedDockMode && _lastScreenClientBounds == screenClientBounds)
            {
                return;
            }

            _lastAllowedDock        = allowedDockMode;
            _lastScreenClientBounds = screenClientBounds;

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

            Point leftPosition1   = new Point(12, center.Y - _dockLeftGuider1.Height / 2);
            Point topPosition1    = new Point(center.X - _dockTopGuider1.Width / 2, 12);
            Point rightPosition1  = new Point(width - _dockRightGuider1.Width - 12, center.Y - _dockRightGuider1.Height / 2);
            Point bottomPosition1 = new Point(center.X - _dockBottomGuider1.Width / 2, height - _dockBottomGuider1.Height - 12);

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

            Point leftPosition2   = new Point(fillPosition.X - _dockLeftGuider2.Width + 7, center.Y - _dockLeftGuider2.Height / 2);
            Point topPosition2    = new Point(center.X - _dockTopGuider2.Width / 2 - 1, fillPosition.Y - _dockTopGuider2.Height + 7);
            Point rightPosition2  = new Point(fillPosition.X + _dockFillGuider.Width - 7, center.Y - _dockRightGuider2.Height / 2);
            Point bottomPosition2 = new Point(center.X - _dockBottomGuider2.Width / 2, fillPosition.Y + _dockBottomGuider2.Height + 7);

            leftPosition1.Offset(offset);
            rightPosition1.Offset(offset);
            topPosition1.Offset(offset);
            bottomPosition1.Offset(offset);
            fillPosition.Offset(offset);
            leftPosition2.Offset(offset);
            rightPosition2.Offset(offset);
            topPosition2.Offset(offset);
            bottomPosition2.Offset(offset);

            _dockLeftGuider1.Location   = leftPosition1;
            _dockRightGuider1.Location  = rightPosition1;
            _dockTopGuider1.Location    = topPosition1;
            _dockBottomGuider1.Location = bottomPosition1;
            _dockFillGuider.Location    = fillPosition;
            _dockLeftGuider2.Location   = leftPosition2;
            _dockRightGuider2.Location  = rightPosition2;
            _dockTopGuider2.Location    = topPosition2;
            _dockBottomGuider2.Location = bottomPosition2;

            _dockFillGuider.Show();

            bool showLeft = EnumUtility.Contains(allowedDockMode, zDockMode.Left);

            _dockLeftGuider1.Visible = showLeft;
            _dockLeftGuider2.Visible = showLeft;

            bool showRight = EnumUtility.Contains(allowedDockMode, zDockMode.Right);

            _dockRightGuider1.Visible = showRight;
            _dockRightGuider2.Visible = showRight;

            bool showTop = EnumUtility.Contains(allowedDockMode, zDockMode.Top);

            _dockTopGuider1.Visible = showTop;
            _dockTopGuider2.Visible = showTop;

            bool showBottom = EnumUtility.Contains(allowedDockMode, zDockMode.Bottom);

            _dockBottomGuider1.Visible = showBottom;
            _dockBottomGuider2.Visible = showBottom;

            _dockFillGuider.ShowFillPreview = EnumUtility.Contains(allowedDockMode, zDockMode.Fill);

            if (VisibleChanged != null)
            {
                VisibleChanged(this, EventArgs.Empty);
            }
        }
Ejemplo n.º 14
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>
 /// Create a new instance of <see cref="ContextMenuEventArg"/>
 /// </summary>
 /// <param name="selection">dock mode of the selected panel</param>
 public AutoHideEventArgs(zDockMode selection)
 {
     _selection = selection;
 }
Ejemplo n.º 16
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, zDockMode mode)
 {
     _control  = control;
      _dock     = dock;
      _dockMode = mode;
 }
Ejemplo n.º 17
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, 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;
            }
        }
Ejemplo n.º 18
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, zDockMode mode)
 {
     _docker.DockOver(info, infoOver, dock, mode);
 }
Ejemplo n.º 19
0
        /// <summary>
        /// Lock the form. This lock should be called when dock begins
        /// </summary>
        /// <param name="lockedBounds">locked bounds</param>
        /// <param name="lockedBorder">locked border</param>
        /// <param name="dockMode">dock mode of the tool window</param>
        internal void LockFormSizeAndDock(Rectangle lockedBounds, FormBorderStyle lockedBorder, zDockMode dockMode)
        {
            if (_dockMode == zDockMode.None)
            {
                _dockMode         = dockMode;
                _boundsBeforeLock = Bounds;
                _borderBeforeLock = FormBorderStyle;
            }

            _resizeIsLocked = true;
            _lockedBounds   = lockedBounds;
            FormBorderStyle = lockedBorder;
            Bounds          = lockedBounds;
        }