/// <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); }
/// <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; } } }