コード例 #1
0
 internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model)
     : base(model)
 {
     _model = model;
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model, bool isContentImmutable)
     : base(model, isContentImmutable)
 {
     _model = model;
     UpdateThemeResources();
 }
コード例 #4
0
 internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model)
     : this(model, false)
 {
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: DropTarget.cs プロジェクト: ru-petrovi4/Ssz.Utils
 protected virtual void Drop(LayoutDocumentFloatingWindow floatingWindow)
 {
 }
コード例 #9
0
        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);
        }
コード例 #10
0
 internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model)
     : base(model)
 {
     _model = model;
     UpdateThemeResources();
 }
コード例 #11
0
        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);
        }