internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model) : base(model) { _model = model; }
/// <summary> /// Method is invoked to complete a drag & drop operation with a (new) docking position /// by docking of the LayoutDocument <paramref name="floatingWindow"/> into this drop target. /// </summary> /// <param name="floatingWindow"></param> protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane; LayoutDocument documentActive = floatingWindow.Descendents().OfType <LayoutDocument>().FirstOrDefault(); // ensure paneGroup var paneGroup = targetModel.Parent as LayoutDocumentPaneGroup; if (paneGroup == null) { var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; var layoutGroup = targetModel.Parent as ILayoutGroup; paneGroup = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; paneGroup.Children.Add(targetModel); layoutGroup.InsertChildAt(0, paneGroup); } var paneGroupOrientaion = paneGroup as ILayoutOrientableGroup; switch (Type) { case DropTargetType.DocumentPaneDockBottom: #region DropTargetType.DocumentPaneDockBottom { if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Vertical) { paneGroup.Orientation = System.Windows.Controls.Orientation.Vertical; } var insertToIndex = paneGroup.IndexOfChild(targetModel); if (insertToIndex == (paneGroup.Children.Count - 1)) { insertToIndex = paneGroup.Children.Count; } var documentsToMove = floatingWindow.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { var floatingChild = documentsToMove[i]; paneGroup.InsertChildAt(insertToIndex + i, floatingChild); } } break; #endregion DropTargetType.DocumentPaneDockBottom case DropTargetType.DocumentPaneDockTop: #region DropTargetType.DocumentPaneDockTop { if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Vertical) { paneGroup.Orientation = System.Windows.Controls.Orientation.Vertical; } var insertToIndex = paneGroup.IndexOfChild(targetModel); if (insertToIndex < 0) { insertToIndex = 0; } var documentsToMove = floatingWindow.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { var floatingChild = documentsToMove[i]; paneGroup.InsertChildAt(insertToIndex + i, floatingChild); } } break; #endregion DropTargetType.DocumentPaneDockTop case DropTargetType.DocumentPaneDockLeft: #region DropTargetType.DocumentPaneDockLeft { if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Horizontal) { paneGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; } var insertToIndex = paneGroup.IndexOfChild(targetModel); if (insertToIndex < 0) { insertToIndex = 0; } var documentsToMove = floatingWindow.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { var floatingChild = documentsToMove[i]; paneGroup.InsertChildAt(insertToIndex + i, floatingChild); } } break; #endregion DropTargetType.DocumentPaneDockLeft case DropTargetType.DocumentPaneDockRight: #region DropTargetType.DocumentPaneDockRight { if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Horizontal) { paneGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; } var insertToIndex = paneGroup.IndexOfChild(targetModel); if (insertToIndex == (paneGroup.Children.Count - 1)) { insertToIndex = paneGroup.Children.Count; } var documentsToMove = floatingWindow.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { var floatingChild = documentsToMove[i]; paneGroup.InsertChildAt(insertToIndex + i, floatingChild); } } break; #endregion DropTargetType.DocumentPaneDockRight case DropTargetType.DocumentPaneDockInside: #region DropTargetType.DocumentPaneDockInside { var paneModel = targetModel as LayoutDocumentPane; var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; // A LayoutFloatingDocumentWindow can contain multiple instances of both Anchorables or Documents // and we should drop these back into the DocumentPane if they are available var allowedDropTypes = new[] { typeof(LayoutDocument), typeof(LayoutAnchorable) }; int i = _tabIndex == -1 ? 0 : _tabIndex; foreach (var anchorableToImport in layoutDocumentPaneGroup.Descendents().OfType <LayoutContent>() .Where(item => allowedDropTypes.Any(dropType => dropType.IsInstanceOfType(item))).ToArray()) { paneModel.Children.Insert(i, anchorableToImport); i++; } } break; #endregion DropTargetType.DocumentPaneDockInside } if (documentActive != null) { documentActive.IsActive = true; } base.Drop(floatingWindow); }
internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model, bool isContentImmutable) : base(model, isContentImmutable) { _model = model; UpdateThemeResources(); }
internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model) : this(model, false) { }
protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane; switch (Type) { case DropTargetType.DocumentPaneDockBottom: #region DropTargetType.DocumentPaneDockBottom { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Vertical) { parentModel.Orientation = System.Windows.Controls.Orientation.Vertical; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockTop: #region DropTargetType.DocumentPaneDockTop { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Vertical) { parentModel.Orientation = System.Windows.Controls.Orientation.Vertical; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockLeft: #region DropTargetType.DocumentPaneDockLeft { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Horizontal) { parentModel.Orientation = System.Windows.Controls.Orientation.Horizontal; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockRight: #region DropTargetType.DocumentPaneDockRight { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Horizontal) { parentModel.Orientation = System.Windows.Controls.Orientation.Horizontal; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockInside: #region DropTargetType.DocumentPaneDockInside { var paneModel = targetModel as LayoutDocumentPane; var sourceModel = floatingWindow.RootDocument; int i = _tabIndex == -1 ? 0 : _tabIndex; sourceModel.IsActive = false; paneModel.Children.Insert(i, sourceModel); sourceModel.IsActive = true; } break; #endregion } base.Drop(floatingWindow); }
/// <summary> /// Method is invoked to complete a drag & drop operation with a (new) docking position /// by docking of the LayoutDocument <paramref name="floatingWindow"/> into this drop target. /// </summary> /// <param name="floatingWindow"></param> protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane; LayoutDocument documentActive = floatingWindow.Descendents().OfType <LayoutDocument>().FirstOrDefault(); switch (Type) { case DropTargetType.DocumentPaneDockBottom: #region DropTargetType.DocumentPaneDockBottom { var parentModel = targetModel.Parent as ILayoutGroup; var parentModelOrientable = targetModel.Parent as ILayoutOrientableGroup; int insertToIndex = parentModel.IndexOfChild(targetModel); if (parentModelOrientable.Orientation != System.Windows.Controls.Orientation.Vertical && parentModel.ChildrenCount == 1) { parentModelOrientable.Orientation = System.Windows.Controls.Orientation.Vertical; } if (parentModelOrientable.Orientation == System.Windows.Controls.Orientation.Vertical) { var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; if (layoutDocumentPaneGroup != null && (layoutDocumentPaneGroup.Children.Count == 1 || layoutDocumentPaneGroup.Orientation == System.Windows.Controls.Orientation.Vertical)) { var documentsToMove = layoutDocumentPaneGroup.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { parentModel.InsertChildAt(insertToIndex + 1 + i, documentsToMove[i]); } } else { parentModel.InsertChildAt(insertToIndex + 1, floatingWindow.RootPanel); } } else { var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; var newOrientedPanel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; parentModel.InsertChildAt(insertToIndex, newOrientedPanel); newOrientedPanel.Children.Add(targetModel); newOrientedPanel.Children.Add(floatingWindow.RootPanel); } } break; #endregion DropTargetType.DocumentPaneDockBottom case DropTargetType.DocumentPaneDockTop: #region DropTargetType.DocumentPaneDockTop { var parentModel = targetModel.Parent as ILayoutGroup; var parentModelOrientable = targetModel.Parent as ILayoutOrientableGroup; int insertToIndex = parentModel.IndexOfChild(targetModel); if (parentModelOrientable.Orientation != System.Windows.Controls.Orientation.Vertical && parentModel.ChildrenCount == 1) { parentModelOrientable.Orientation = System.Windows.Controls.Orientation.Vertical; } if (parentModelOrientable.Orientation == System.Windows.Controls.Orientation.Vertical) { var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; if (layoutDocumentPaneGroup != null && (layoutDocumentPaneGroup.Children.Count == 1 || layoutDocumentPaneGroup.Orientation == System.Windows.Controls.Orientation.Vertical)) { var documentsToMove = layoutDocumentPaneGroup.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { parentModel.InsertChildAt(insertToIndex + i, documentsToMove[i]); } } else { parentModel.InsertChildAt(insertToIndex, floatingWindow.RootPanel); } } else { var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; var newOrientedPanel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; parentModel.InsertChildAt(insertToIndex, newOrientedPanel); //the floating window must be added after the target modal as it could be raise a CollectGarbage call newOrientedPanel.Children.Add(targetModel); newOrientedPanel.Children.Insert(0, floatingWindow.RootPanel); } } break; #endregion DropTargetType.DocumentPaneDockTop case DropTargetType.DocumentPaneDockLeft: #region DropTargetType.DocumentPaneDockLeft { var parentModel = targetModel.Parent as ILayoutGroup; var parentModelOrientable = targetModel.Parent as ILayoutOrientableGroup; int insertToIndex = parentModel.IndexOfChild(targetModel); if (parentModelOrientable.Orientation != System.Windows.Controls.Orientation.Horizontal && parentModel.ChildrenCount == 1) { parentModelOrientable.Orientation = System.Windows.Controls.Orientation.Horizontal; } if (parentModelOrientable.Orientation == System.Windows.Controls.Orientation.Horizontal) { var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; if (layoutDocumentPaneGroup != null && (layoutDocumentPaneGroup.Children.Count == 1 || layoutDocumentPaneGroup.Orientation == System.Windows.Controls.Orientation.Horizontal)) { var documentsToMove = layoutDocumentPaneGroup.Children.ToArray(); for (int i = 0; i < documentsToMove.Length; i++) { parentModel.InsertChildAt(insertToIndex + i, documentsToMove[i]); } } else { parentModel.InsertChildAt(insertToIndex, floatingWindow.RootPanel); } } else { var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; var newOrientedPanel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; parentModel.InsertChildAt(insertToIndex, newOrientedPanel); //the floating window must be added after the target modal as it could be raise a CollectGarbage call newOrientedPanel.Children.Add(targetModel); newOrientedPanel.Children.Insert(0, floatingWindow.RootPanel); } } break; #endregion DropTargetType.DocumentPaneDockLeft case DropTargetType.DocumentPaneDockRight: #region DropTargetType.DocumentPaneDockRight { var parentModel = targetModel.Parent as ILayoutGroup; var parentModelOrientable = targetModel.Parent as ILayoutOrientableGroup; int insertToIndex = parentModel.IndexOfChild(targetModel); if (parentModelOrientable.Orientation != System.Windows.Controls.Orientation.Horizontal && parentModel.ChildrenCount == 1) { parentModelOrientable.Orientation = System.Windows.Controls.Orientation.Horizontal; } if (parentModelOrientable.Orientation == System.Windows.Controls.Orientation.Horizontal) { var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; if (layoutDocumentPaneGroup != null && (layoutDocumentPaneGroup.Children.Count == 1 || layoutDocumentPaneGroup.Orientation == System.Windows.Controls.Orientation.Horizontal)) { var documentToMove = layoutDocumentPaneGroup.Children.ToArray(); for (int i = 0; i < documentToMove.Length; i++) { parentModel.InsertChildAt(insertToIndex + 1 + i, documentToMove[i]); } } else { parentModel.InsertChildAt(insertToIndex + 1, floatingWindow.RootPanel); } } else { var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; var newOrientedPanel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; parentModel.InsertChildAt(insertToIndex, newOrientedPanel); newOrientedPanel.Children.Add(targetModel); newOrientedPanel.Children.Add(floatingWindow.RootPanel); } } break; #endregion DropTargetType.DocumentPaneDockRight case DropTargetType.DocumentPaneDockInside: #region DropTargetType.DocumentPaneDockInside { var paneModel = targetModel as LayoutDocumentPane; var layoutDocumentPaneGroup = floatingWindow.RootPanel as LayoutDocumentPaneGroup; int i = _tabIndex == -1 ? 0 : _tabIndex; foreach (var anchorableToImport in layoutDocumentPaneGroup.Descendents().OfType <LayoutDocument>().ToArray()) { paneModel.Children.Insert(i, anchorableToImport); i++; } } break; #endregion DropTargetType.DocumentPaneDockInside } documentActive.IsActive = true; base.Drop(floatingWindow); }
protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { var targetModel = _targetPane.Model as ILayoutDocumentPane; switch (Type) { case DropTargetType.DocumentPaneDockBottom: #region DropTargetType.DocumentPaneDockBottom { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel is null) { var parentContainer = targetModel.Parent; var newParentModel = new LayoutDocumentPaneGroup { Orientation = Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == Orientation.Vertical) { parentModel.Orientation = Orientation.Vertical; var targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { var newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockTop: #region DropTargetType.DocumentPaneDockTop { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel is null) { var parentContainer = targetModel.Parent; var newParentModel = new LayoutDocumentPaneGroup { Orientation = Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == Orientation.Vertical) { parentModel.Orientation = Orientation.Vertical; var targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { var newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockLeft: #region DropTargetType.DocumentPaneDockLeft { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel is null) { var parentContainer = targetModel.Parent; var newParentModel = new LayoutDocumentPaneGroup { Orientation = Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == Orientation.Horizontal) { parentModel.Orientation = Orientation.Horizontal; var targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { var newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockRight: #region DropTargetType.DocumentPaneDockRight { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel is null) { var parentContainer = targetModel.Parent; var newParentModel = new LayoutDocumentPaneGroup { Orientation = Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == Orientation.Horizontal) { parentModel.Orientation = Orientation.Horizontal; var targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { var newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockInside: #region DropTargetType.DocumentPaneDockInside { var paneModel = targetModel as LayoutDocumentPane; var sourceModel = floatingWindow.RootDocument; var i = 0; if (_tabIndex != -1) { i = _tabIndex; } else { var previousIndex = 0; var previousContainer = ((ILayoutPreviousContainer)sourceModel).PreviousContainer; if (ReferenceEquals(previousContainer, targetModel) && sourceModel.PreviousContainerIndex != -1) { previousIndex = sourceModel.PreviousContainerIndex; } i = previousIndex; } sourceModel.IsActive = false; paneModel.Children.Insert(i, sourceModel); sourceModel.IsActive = true; } break; #endregion } base.Drop(floatingWindow); }
protected virtual void Drop(LayoutDocumentFloatingWindow floatingWindow) { }
protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane; switch (Type) { case DropTargetType.DocumentPaneDockBottom: #region DropTargetType.DocumentPaneDockBottom { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var targetPane = targetModel as ILayoutPositionableElement; if (targetPane != null) { // Set the DockWidth of the targetPane and the newLayoutDocumentPane so they both use the same size. if (targetPane.DockHeight.IsStar) { targetPane.DockHeight = new GridLength(targetPane.DockHeight.Value / 2d, GridUnitType.Star); newLayoutDocumentPane.DockHeight = targetPane.DockHeight; } } var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Vertical) { parentModel.Orientation = System.Windows.Controls.Orientation.Vertical; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockTop: #region DropTargetType.DocumentPaneDockTop { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var targetPane = targetModel as ILayoutPositionableElement; if (targetPane != null) { // Set the DockWidth of the targetPane and the newLayoutDocumentPane so they both use the same size. if (targetPane.DockHeight.IsStar) { targetPane.DockHeight = new GridLength(targetPane.DockHeight.Value / 2d, GridUnitType.Star); newLayoutDocumentPane.DockHeight = targetPane.DockHeight; } } var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Vertical }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Vertical) { parentModel.Orientation = System.Windows.Controls.Orientation.Vertical; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Vertical; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockLeft: #region DropTargetType.DocumentPaneDockLeft { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var targetPane = targetModel as ILayoutPositionableElement; if (targetPane != null) { // Set the DockWidth of the targetPane and the newLayoutDocumentPane so they both use the same size. if (targetPane.DockWidth.IsStar) { targetPane.DockWidth = new GridLength(targetPane.DockWidth.Value / 2d, GridUnitType.Star); newLayoutDocumentPane.DockWidth = targetPane.DockWidth; } } var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel); newParentModel.Children.Insert(0, newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Horizontal) { parentModel.Orientation = System.Windows.Controls.Orientation.Horizontal; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(newLayoutDocumentPane); newChildGroup.Children.Add(targetModel); } } } break; #endregion case DropTargetType.DocumentPaneDockRight: #region DropTargetType.DocumentPaneDockRight { var newLayoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); var targetPane = targetModel as ILayoutPositionableElement; if (targetPane != null) { // Set the DockWidth of the targetPane and the newLayoutDocumentPane so they both use the same size. if (targetPane.DockWidth.IsStar) { targetPane.DockWidth = new GridLength(targetPane.DockWidth.Value / 2d, GridUnitType.Star); newLayoutDocumentPane.DockWidth = targetPane.DockWidth; } } var parentModel = targetModel.Parent as LayoutDocumentPaneGroup; if (parentModel == null) { var parentContainer = targetModel.Parent as ILayoutContainer; var newParentModel = new LayoutDocumentPaneGroup() { Orientation = System.Windows.Controls.Orientation.Horizontal }; parentContainer.ReplaceChild(targetModel, newParentModel); newParentModel.Children.Add(targetModel as LayoutDocumentPane); newParentModel.Children.Add(newLayoutDocumentPane); } else { var manager = parentModel.Root.Manager; if (!manager.AllowMixedOrientation || parentModel.Orientation == System.Windows.Controls.Orientation.Horizontal) { parentModel.Orientation = System.Windows.Controls.Orientation.Horizontal; int targetPaneIndex = parentModel.IndexOfChild(targetModel); parentModel.Children.Insert(targetPaneIndex + 1, newLayoutDocumentPane); } else { LayoutDocumentPaneGroup newChildGroup = new LayoutDocumentPaneGroup(); newChildGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; parentModel.ReplaceChild(targetModel, newChildGroup); newChildGroup.Children.Add(targetModel); newChildGroup.Children.Add(newLayoutDocumentPane); } } } break; #endregion case DropTargetType.DocumentPaneDockInside: #region DropTargetType.DocumentPaneDockInside { var paneModel = targetModel as LayoutDocumentPane; var sourceModel = floatingWindow.RootDocument; int i = 0; if (_tabIndex != -1) { i = _tabIndex; } else { var previousIndex = 0; var previousContainer = (( ILayoutPreviousContainer )sourceModel).PreviousContainer; if (object.ReferenceEquals(previousContainer, targetModel) && (sourceModel.PreviousContainerIndex != -1)) { previousIndex = sourceModel.PreviousContainerIndex; } i = previousIndex; } sourceModel.IsActive = false; paneModel.Children.Insert(Math.Min(i, paneModel.Children.Count), sourceModel); sourceModel.IsActive = true; } break; #endregion } base.Drop(floatingWindow); }
internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model) : base(model) { _model = model; UpdateThemeResources(); }
protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { ILayoutDocumentPane model = this._targetPane.Model as ILayoutDocumentPane; switch (base.Type) { case DropTargetType.DocumentPaneDockLeft: { LayoutDocumentPane layoutDocumentPane = new LayoutDocumentPane(floatingWindow.RootDocument); LayoutDocumentPaneGroup parent = model.Parent as LayoutDocumentPaneGroup; if (parent == null) { ILayoutContainer layoutContainer = model.Parent; LayoutDocumentPaneGroup layoutDocumentPaneGroup = new LayoutDocumentPaneGroup() { Orientation = Orientation.Horizontal }; layoutContainer.ReplaceChild(model, layoutDocumentPaneGroup); layoutDocumentPaneGroup.Children.Add(model); layoutDocumentPaneGroup.Children.Insert(0, layoutDocumentPane); break; } else if (!parent.Root.Manager.AllowMixedOrientation || parent.Orientation == Orientation.Horizontal) { parent.Orientation = Orientation.Horizontal; int num = parent.IndexOfChild(model); parent.Children.Insert(num, layoutDocumentPane); break; } else { LayoutDocumentPaneGroup layoutDocumentPaneGroup1 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Horizontal }; parent.ReplaceChild(model, layoutDocumentPaneGroup1); layoutDocumentPaneGroup1.Children.Add(layoutDocumentPane); layoutDocumentPaneGroup1.Children.Add(model); break; } } case DropTargetType.DocumentPaneDockTop: { LayoutDocumentPane layoutDocumentPane1 = new LayoutDocumentPane(floatingWindow.RootDocument); LayoutDocumentPaneGroup parent1 = model.Parent as LayoutDocumentPaneGroup; if (parent1 == null) { ILayoutContainer layoutContainer1 = model.Parent; LayoutDocumentPaneGroup layoutDocumentPaneGroup2 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Vertical }; layoutContainer1.ReplaceChild(model, layoutDocumentPaneGroup2); layoutDocumentPaneGroup2.Children.Add(model as LayoutDocumentPane); layoutDocumentPaneGroup2.Children.Insert(0, layoutDocumentPane1); break; } else if (!parent1.Root.Manager.AllowMixedOrientation || parent1.Orientation == Orientation.Vertical) { parent1.Orientation = Orientation.Vertical; int num1 = parent1.IndexOfChild(model); parent1.Children.Insert(num1, layoutDocumentPane1); break; } else { LayoutDocumentPaneGroup layoutDocumentPaneGroup3 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Vertical }; parent1.ReplaceChild(model, layoutDocumentPaneGroup3); layoutDocumentPaneGroup3.Children.Add(layoutDocumentPane1); layoutDocumentPaneGroup3.Children.Add(model); break; } } case DropTargetType.DocumentPaneDockRight: { LayoutDocumentPane layoutDocumentPane2 = new LayoutDocumentPane(floatingWindow.RootDocument); LayoutDocumentPaneGroup parent2 = model.Parent as LayoutDocumentPaneGroup; if (parent2 == null) { ILayoutContainer layoutContainer2 = model.Parent; LayoutDocumentPaneGroup layoutDocumentPaneGroup4 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Horizontal }; layoutContainer2.ReplaceChild(model, layoutDocumentPaneGroup4); layoutDocumentPaneGroup4.Children.Add(model as LayoutDocumentPane); layoutDocumentPaneGroup4.Children.Add(layoutDocumentPane2); break; } else if (!parent2.Root.Manager.AllowMixedOrientation || parent2.Orientation == Orientation.Horizontal) { parent2.Orientation = Orientation.Horizontal; int num2 = parent2.IndexOfChild(model); parent2.Children.Insert(num2 + 1, layoutDocumentPane2); break; } else { LayoutDocumentPaneGroup layoutDocumentPaneGroup5 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Horizontal }; parent2.ReplaceChild(model, layoutDocumentPaneGroup5); layoutDocumentPaneGroup5.Children.Add(model); layoutDocumentPaneGroup5.Children.Add(layoutDocumentPane2); break; } } case DropTargetType.DocumentPaneDockBottom: { LayoutDocumentPane layoutDocumentPane3 = new LayoutDocumentPane(floatingWindow.RootDocument); LayoutDocumentPaneGroup parent3 = model.Parent as LayoutDocumentPaneGroup; if (parent3 == null) { ILayoutContainer layoutContainer3 = model.Parent; LayoutDocumentPaneGroup layoutDocumentPaneGroup6 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Vertical }; layoutContainer3.ReplaceChild(model, layoutDocumentPaneGroup6); layoutDocumentPaneGroup6.Children.Add(model as LayoutDocumentPane); layoutDocumentPaneGroup6.Children.Add(layoutDocumentPane3); break; } else if (!parent3.Root.Manager.AllowMixedOrientation || parent3.Orientation == Orientation.Vertical) { parent3.Orientation = Orientation.Vertical; int num3 = parent3.IndexOfChild(model); parent3.Children.Insert(num3 + 1, layoutDocumentPane3); break; } else { LayoutDocumentPaneGroup layoutDocumentPaneGroup7 = new LayoutDocumentPaneGroup() { Orientation = Orientation.Vertical }; parent3.ReplaceChild(model, layoutDocumentPaneGroup7); layoutDocumentPaneGroup7.Children.Add(model); layoutDocumentPaneGroup7.Children.Add(layoutDocumentPane3); break; } } case DropTargetType.DocumentPaneDockInside: { LayoutDocumentPane layoutDocumentPane4 = model as LayoutDocumentPane; LayoutDocument rootDocument = floatingWindow.RootDocument; int previousContainerIndex = 0; if (this._tabIndex != -1) { previousContainerIndex = this._tabIndex; } else if (((ILayoutPreviousContainer)rootDocument).PreviousContainer == model && rootDocument.PreviousContainerIndex != -1) { previousContainerIndex = rootDocument.PreviousContainerIndex; } rootDocument.IsActive = false; layoutDocumentPane4.Children.Insert(previousContainerIndex, rootDocument); rootDocument.IsActive = true; break; } } base.Drop(floatingWindow); }