Пример #1
0
        /// <summary>
        /// Creates dock window from view.
        /// </summary>
        /// <param name="target">The target dock.</param>
        /// <param name="source">The source dock.</param>
        /// <param name="sourceIndex">The source view index.</param>
        /// <param name="context">The context object.</param>
        /// <returns>The new instance of the <see cref="IDockWindow"/> class.</returns>
        public static IDockWindow CreateWindow(this IDock target, IDock source, int sourceIndex, object context)
        {
            var view = source.Views[sourceIndex];

            source.RemoveView(sourceIndex);

            var dockStrip = new DockStrip
            {
                Id          = nameof(DockStrip),
                CurrentView = view,
                Views       = new ObservableCollection <IDock> {
                    view
                }
            };

            var dockLayout = new DockLayout
            {
                Id          = nameof(DockLayout),
                CurrentView = dockStrip,
                Views       = new ObservableCollection <IDock> {
                    dockStrip
                }
            };

            var window = new DockWindow()
            {
                Id     = nameof(DockWindow),
                Layout = dockLayout
            };

            target.AddWindow(window);
            target.Factory?.Update(window, context);

            return(window);
        }
Пример #2
0
        /// <summary>
        /// WIP: Creates a new split layout.
        /// </summary>
        /// <param name="target">The target dock.</param>
        /// <param name="context">The context object.</param>
        /// <param name="direction">The split direction.</param>
        /// <returns>The new instance of the <see cref="IDock"/> class.</returns>
        public static IDock SplitLayout(this IDock target, object context, SplitDirection direction)
        {
            IDock  layout1 = null;
            IDock  layout2 = null;
            double width   = double.NaN;
            double height  = double.NaN;
            string dock    = "";

            switch (direction)
            {
            case SplitDirection.Left:
            case SplitDirection.Right:
                width  = target.Width == double.NaN ? double.NaN : target.Width / 2.0;
                height = target.Height == double.NaN ? double.NaN : target.Height;
                break;

            case SplitDirection.Top:
            case SplitDirection.Bottom:
                width  = target.Width == double.NaN ? double.NaN : target.Width;
                height = target.Height == double.NaN ? double.NaN : target.Height / 2.0;
                dock   = "Top";
                break;
            }

            IDock emptyStrip = new DockStrip
            {
                Id          = nameof(DockStrip),
                Width       = width,
                Height      = height,
                CurrentView = null,
                Views       = new ObservableCollection <IDock>()
            };

            IDock targetStrip = new DockStrip
            {
                Id          = target.Id,
                Width       = width,
                Height      = height,
                CurrentView = target.CurrentView,
                Views       = target.Views
            };

            switch (direction)
            {
            case SplitDirection.Left:
            case SplitDirection.Top:
            {
                layout1 = new DockLayout
                {
                    Id          = nameof(DockLayout),
                    CurrentView = null,
                    Views       = new ObservableCollection <IDock> {
                        targetStrip
                    }
                };

                layout2 = new DockLayout
                {
                    Id          = nameof(DockLayout),
                    CurrentView = null,
                    Views       = new ObservableCollection <IDock> {
                        emptyStrip
                    }
                };
            }
            break;

            case SplitDirection.Right:
            case SplitDirection.Bottom:
            {
                layout1 = new DockLayout
                {
                    Id          = nameof(DockLayout),
                    CurrentView = null,
                    Views       = new ObservableCollection <IDock> {
                        emptyStrip
                    }
                };

                layout2 = new DockLayout
                {
                    Id          = nameof(DockLayout),
                    CurrentView = null,
                    Views       = new ObservableCollection <IDock> {
                        targetStrip
                    }
                };
            }
            break;
            }

            switch (direction)
            {
            case SplitDirection.Left:
            case SplitDirection.Right:
                layout1.Dock = "Left";
                layout2.Dock = "Right";
                dock         = "Left";
                break;

            case SplitDirection.Top:
            case SplitDirection.Bottom:
                layout1.Dock = "Top";
                layout2.Dock = "Bottom";
                dock         = "Top";
                break;
            }

            var splitLayout = new DockLayout
            {
                Id          = nameof(DockLayout),
                Dock        = "",
                Width       = double.NaN,
                Height      = double.NaN,
                Title       = target.Title,
                CurrentView = null,
                Views       = new ObservableCollection <IDock>
                {
                    layout1,
                    new DockSplitter()
                    {
                        Id   = nameof(DockSplitter),
                        Dock = dock
                    },
                    layout2
                }
            };

            target.Factory?.Update(splitLayout, context);

            return(splitLayout);
        }
        //==================================== Mouse Events ====================================

        void CollapsibleGroup_MouseUp(object sender, MouseEventArgs e)
        {
            if (STATUSextending != 0)
            {
                if (CollapsingVertically)
                {
                    OpenedBaseWidth = Width;
                }
                else
                {
                    OpenedBaseHeight = Height;
                }

                STATUSextending  = 0;
                STATUSMouseLoc.X = STATUSMouseLoc.Y = -1000;
            }
            else
            {
                switch (e.Button)
                {
                case MouseButtons.Right:     //ContextMenu
                    if (DockingChanges != DockingPossibilities.None)
                    {
                        DockStrip.Items.Clear();

                        DockStrip.Items.Add("Default (" + defaultDock.ToString() + ")", null, new EventHandler(CollapsibleGroup_ChangeDock));
                        DockStrip.Items.Add("-");

                        if (DockingChanges != DockingPossibilities.LeftRight && Dock != DockStyle.Top && defaultDock != DockStyle.Top)
                        {
                            DockStrip.Items.Add("Top", null, new EventHandler(CollapsibleGroup_ChangeDock));
                        }

                        if (DockingChanges != DockingPossibilities.TopBottom && Dock != DockStyle.Right && defaultDock != DockStyle.Right)
                        {
                            DockStrip.Items.Add("Right", null, new EventHandler(CollapsibleGroup_ChangeDock));
                        }

                        if (DockingChanges != DockingPossibilities.LeftRight && Dock != DockStyle.Bottom && defaultDock != DockStyle.Bottom)
                        {
                            DockStrip.Items.Add("Bottom", null, new EventHandler(CollapsibleGroup_ChangeDock));
                        }

                        if (DockingChanges != DockingPossibilities.TopBottom && Dock != DockStyle.Left && defaultDock != DockStyle.Left)
                        {
                            DockStrip.Items.Add("Left", null, new EventHandler(CollapsibleGroup_ChangeDock));
                        }

                        DockStrip.Show(PointToScreen(e.Location));
                    }
                    break;

                case MouseButtons.Left:     //Collapsing
                    if (CollapseOnClick)
                    {
                        Collapsed = !Collapsed;
                    }
                    break;
                }
            }
        }