Пример #1
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];
            }
        }
Пример #2
0
        /// <summary>
        /// Begin button drag
        /// </summary>
        /// <param name="selected">selected button</param>
        /// <param name="mousePosition">mouse position</param>
        /// <param name="cursor">cursor</param>
        /// <returns>true if button drag is started</returns>
        protected override bool BeginButtonDrag(TabButton selected, Point mousePosition, ref Cursor cursor)
        {
            if (CanMoveByMouse == false)
            {
                return(true);
            }

            EventHandler <FormEventArgs> handler = UndockForm;

            if (handler != null)
            {
                _movedButton = selected;
                _movedForm   = (Form)_movedButton.Page;
                _movedIndex  = SelectedIndex;

                Point         mouseScreenPosition = Control.MousePosition;
                FormEventArgs args = new FormEventArgs(_movedForm, GetPageInfo(_movedForm).Id);
                handler(this, args);

                RemoveButton(_movedButton);

                _movedDecorator = HierarchyUtility.GetFormsDecorator(_movedForm);

                IsFocused = false;
                _movedDecorator.IsFocused = true;

                _movedDecorator.BeginMovementByMouse(mouseScreenPosition);

                cursor = Cursors.SizeAll;
            }

            return(true);
        }
Пример #3
0
        // MI 20100712
        public void SetCaption(DockableFormInfo dfi, string caption)
        {
            FormsDecorator fd = HierarchyUtility.GetFormsDecorator(dfi.DockableForm);

            fd.TitleBarRenderer.Text = caption;
            fd.Invalidate(true);
        }
Пример #4
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);
        }
Пример #5
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();
        }
Пример #6
0
        /// <summary>
        /// Start showing form
        /// </summary>
        /// <param name="form">form to show</param>
        /// <param name="width">width of the form</param>
        /// <param name="height">height of the form</param>
        private void StartShowForm(Form form, int width, int height)
        {
            _previewPane.Visible = false;

            FormsTabbedView view = HierarchyUtility.GetTabbedView(form);

            view.Size = new Size(width, height);
            view.SelectPage(form);
            StartAutoShowPane(view.Parent as AutoHidePanel);
        }
Пример #7
0
 /// <summary>
 /// Set auto-hide mode
 /// </summary>
 /// <param name="info">info of the form to set</param>
 /// <param name="autoHide">flag indicating if should set auto-hide (true) or unset it</param>
 public void SetAutoHide(DockableFormInfo info, bool autoHide)
 {
     if (autoHide && info.IsAutoHideMode == false)
     {
         _autohide.SetAutoHideMode(HierarchyUtility.GetTabbedView(info.DockableForm));
     }
     else if (autoHide == false && info.IsAutoHideMode)
     {
         _autohide.UnsetAutoHideMode(HierarchyUtility.GetTabbedView(info.DockableForm));
     }
 }
Пример #8
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>
        /// Checks if this panel contains give panel
        /// </summary>
        /// <param name="panel">panel to check</param>
        /// <returns>true if this panel contains given pane</returns>
        public bool ContainsPanel(AutoHidePanel panel)
        {
            for (int index = ButtonsCount - 1; index >= 0; index--)
            {
                TabButton button = GetButtonAt(index);

                FormsTabbedView view = HierarchyUtility.GetTabbedView((Form)button.Page);
                if (view.Parent == panel)
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #11
0
        /// <summary>
        /// Show auto form
        /// </summary>
        /// <param name="form">form to be shown</param>
        public void ShowAutoForm(Form form)
        {
            FormsTabbedView view  = HierarchyUtility.GetTabbedView(form);
            AutoHidePanel   panel = view.Parent as AutoHidePanel;

            if (panel == null)
            {
                return;
            }

            if (_leftAutoHideButtons != null)
            {
                if (_leftAutoHideButtons.ContainsPanel(panel))
                {
                    OnLeftPaneSelectButton(this, new ControlEventArgs(form));
                    return;
                }
            }

            if (_rightAutoHideButtons != null)
            {
                if (_rightAutoHideButtons.ContainsPanel(panel))
                {
                    OnRightPaneSelectButton(this, new ControlEventArgs(form));
                    return;
                }
            }

            if (_topAutoHideButtons != null)
            {
                if (_topAutoHideButtons.ContainsPanel(panel))
                {
                    OnTopPaneSelectButton(this, new ControlEventArgs(form));
                    return;
                }
            }

            if (_bottomAutoHideButtons != null)
            {
                if (_bottomAutoHideButtons.ContainsPanel(panel))
                {
                    OnBottomPaneSelectButton(this, new ControlEventArgs(form));
                    return;
                }
            }
        }
Пример #12
0
        /// <summary>
        /// Undock view
        /// </summary>
        /// <param name="view">view to undock</param>
        /// <param name="hintBounds">hint bounds</param>
        private void Undock(Form formToUndock, Rectangle hintBounds)
        {
            FormsTabbedView view = HierarchyUtility.GetTabbedView(formToUndock);

            if (view.Count == 1)
            {
                _layout.Undock(view, hintBounds);
            }
            else
            {
                DockableFormInfo info = GetFormInfo(formToUndock);

                FormsTabbedView newView = CreateFormsTabbedView(info.DockableForm.Size, null);
                newView.Add(info);

                _layout.CreateFloatingContainer(newView, hintBounds);
            }
        }
        /// <summary>
        /// Removes the panel if is contained here
        /// </summary>
        /// <param name="panel">panel to remove</param>
        /// <returns>true if is removed the panel</returns>
        public bool Remove(AutoHidePanel panel)
        {
            bool removed = false;

            for (int index = ButtonsCount - 1; index >= 0; index--)
            {
                TabButton button = GetButtonAt(index);

                FormsTabbedView view = HierarchyUtility.GetTabbedView((Form)button.Page);
                if (view.Parent == panel)
                {
                    RemoveButton(button);
                    removed = true;
                }
            }

            panel.View.FormAdded    -= OnFormAddedToPanel;
            panel.View.FormRemoved  -= OnFormRemovedFromPanel;
            panel.View.FormSelected -= OnFormSelectedIntoView;

            return(removed);
        }
Пример #14
0
        /// <summary>
        /// Occurs when IsSelected property of a form is changed
        /// </summary>
        /// <param name="sender">sender of the event</param>
        /// <param name="e">event argument</param>
        private void OnFormSelectedChanged(object sender, EventArgs e)
        {
            DockableFormInfo info = (DockableFormInfo)sender;

            if (info.IsSelected)
            {
                SelectedFormInfo = info;
            }

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

            if (view != null)
            {
                if (view.SelectedForm != null)
                {
                    DockableFormInfo topFormInfo = GetFormInfo(view.SelectedForm);

                    view.PagesPanel.ShowCloseButton       = topFormInfo.ShowCloseButton;
                    view.PagesPanel.ShowContextMenuButton = topFormInfo.ShowContextMenuButton;
                }
            }
        }
        /// <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;
                }
            }
        }
Пример #16
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);
        }
Пример #17
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);
        }