Beispiel #1
0
        public void Drop(LayoutFloatingWindow floatingWindow)
        {
            var root = floatingWindow.Root;
            var currentActiveContent = floatingWindow.Root.ActiveContent;
            var fwAsAnchorable       = floatingWindow as LayoutAnchorableFloatingWindow;

            if (fwAsAnchorable != null)
            {
                this.Drop(fwAsAnchorable);
            }
            else
            {
                var fwAsDocument = floatingWindow as LayoutDocumentFloatingWindow;
                this.Drop(fwAsDocument);
            }

            if (currentActiveContent != null)
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    currentActiveContent.IsSelected = false;
                    currentActiveContent.IsActive   = false;
                    currentActiveContent.IsActive   = true;
                }), DispatcherPriority.Background);
            }
        }
Beispiel #2
0
        public void Drop(LayoutFloatingWindow floatingWindow)
        {
            var root = floatingWindow.Root;
            var currentActiveContent = floatingWindow.Root.ActiveContent;
            var fwAsAnchorable       = floatingWindow as LayoutAnchorableFloatingWindow;

            if (fwAsAnchorable != null)
            {
                this.Drop(fwAsAnchorable);
            }
            else
            {
                var fwAsDocument = floatingWindow as LayoutDocumentFloatingWindow;
                this.Drop(fwAsDocument);
            }

            // TODO figure out why currentActiveContent is sometimes null
            if (currentActiveContent == null)
            {
                string message = "There was an error docking the panel. Some functionality may not work until the program is restarted.";
                MessageBox.Show(message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            Dispatcher.BeginInvoke(new Action(() =>
            {
                currentActiveContent.IsSelected = false;
                currentActiveContent.IsActive   = false;
                currentActiveContent.IsActive   = true;
            }), DispatcherPriority.Background);
        }
        public void Drop(LayoutFloatingWindow floatingWindow)
        {
            var root = floatingWindow.Root;
            var currentActiveContent = floatingWindow.Root.ActiveContent;
            var fwAsAnchorable       = floatingWindow as LayoutAnchorableFloatingWindow;

            if (fwAsAnchorable != null)
            {
                this.Drop(fwAsAnchorable);
            }
            else
            {
                var fwAsDocument = floatingWindow as LayoutDocumentFloatingWindow;
                this.Drop(fwAsDocument);
            }

            if (currentActiveContent != null)
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    if ((currentActiveContent.Root != null) && (currentActiveContent.Root.Manager != null))
                    {
                        currentActiveContent.Root.Manager.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
                    }
                    currentActiveContent.IsSelected = false;
                    currentActiveContent.IsActive   = false;
                    currentActiveContent.IsActive   = true;
                }), DispatcherPriority.Background);
            }
        }
Beispiel #4
0
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            LayoutAnchorableFloatingWindow           layoutAnchorableFloatingWindow = floatingWindowModel as LayoutAnchorableFloatingWindow;
            ILayoutPositionableElement               rootPanel = layoutAnchorableFloatingWindow.RootPanel;
            ILayoutPositionableElementWithActualSize layoutPositionableElementWithActualSize = layoutAnchorableFloatingWindow.RootPanel;
            Rect screenArea = base.TargetElement.GetScreenArea();

            switch (base.Type)
            {
            case DropTargetType.DockingManagerDockLeft:
            {
                double num = (rootPanel.DockWidth.IsAbsolute ? rootPanel.DockWidth.Value : layoutPositionableElementWithActualSize.ActualWidth);
                return(new RectangleGeometry(new Rect(screenArea.Left - overlayWindow.Left, screenArea.Top - overlayWindow.Top, Math.Min(num, screenArea.Width / 2), screenArea.Height)));
            }

            case DropTargetType.DockingManagerDockTop:
            {
                double num1 = (rootPanel.DockHeight.IsAbsolute ? rootPanel.DockHeight.Value : layoutPositionableElementWithActualSize.ActualHeight);
                return(new RectangleGeometry(new Rect(screenArea.Left - overlayWindow.Left, screenArea.Top - overlayWindow.Top, screenArea.Width, Math.Min(num1, screenArea.Height / 2))));
            }

            case DropTargetType.DockingManagerDockRight:
            {
                double num2 = (rootPanel.DockWidth.IsAbsolute ? rootPanel.DockWidth.Value : layoutPositionableElementWithActualSize.ActualWidth);
                return(new RectangleGeometry(new Rect(screenArea.Right - overlayWindow.Left - Math.Min(num2, screenArea.Width / 2), screenArea.Top - overlayWindow.Top, Math.Min(num2, screenArea.Width / 2), screenArea.Height)));
            }

            case DropTargetType.DockingManagerDockBottom:
            {
                double num3 = (rootPanel.DockHeight.IsAbsolute ? rootPanel.DockHeight.Value : layoutPositionableElementWithActualSize.ActualHeight);
                return(new RectangleGeometry(new Rect(screenArea.Left - overlayWindow.Left, screenArea.Bottom - overlayWindow.Top - Math.Min(num3, screenArea.Height / 2), screenArea.Width, Math.Min(num3, screenArea.Height / 2))));
            }
            }
            throw new InvalidOperationException();
        }
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane;

            if (targetModel != null)
            {
                var manager = targetModel.Root.Manager;

                //ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane;
                LayoutDocumentPaneGroup parentGroup;
                LayoutPanel             parentGroupPanel;
                if (!FindParentLayoutDocumentPane(targetModel, out parentGroup, out parentGroupPanel))
                {
                    return(null);
                }
                var documentPaneControl =
                    manager.FindLogicalChildren <FrameworkElement>()
                    .OfType <ILayoutControl>()
                    .First(d => parentGroup != null ? Equals(d.Model, parentGroup) : Equals(d.Model, parentGroupPanel)) as
                    FrameworkElement;
                var targetScreenRect = documentPaneControl.GetScreenArea();

                switch (Type)
                {
                case DropTargetType.DocumentPaneDockAsAnchorableBottom:
                {
                    targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                    targetScreenRect.Offset(0.0, targetScreenRect.Height - targetScreenRect.Height / 3.0);
                    targetScreenRect.Height /= 3.0;
                    return(new RectangleGeometry(targetScreenRect));
                }

                case DropTargetType.DocumentPaneDockAsAnchorableTop:
                {
                    targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                    targetScreenRect.Height /= 3.0;
                    return(new RectangleGeometry(targetScreenRect));
                }

                case DropTargetType.DocumentPaneDockAsAnchorableRight:
                {
                    targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                    targetScreenRect.Offset(targetScreenRect.Width - targetScreenRect.Width / 3.0, 0.0);
                    targetScreenRect.Width /= 3.0;
                    return(new RectangleGeometry(targetScreenRect));
                }

                case DropTargetType.DocumentPaneDockAsAnchorableLeft:
                {
                    targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                    targetScreenRect.Width /= 3.0;
                    return(new RectangleGeometry(targetScreenRect));
                }
                }
            }

            return(null);
        }
Beispiel #6
0
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            if (base.Type != DropTargetType.DocumentPaneGroupDockInside)
            {
                return(null);
            }
            Rect screenArea = base.TargetElement.GetScreenArea();

            screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
            return(new RectangleGeometry(screenArea));
        }
Beispiel #7
0
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            LayoutDocumentPaneGroup layoutDocumentPaneGroup;
            LayoutPanel             layoutPanel;
            ILayoutDocumentPane     model   = this._targetPane.Model as ILayoutDocumentPane;
            DockingManager          manager = model.Root.Manager;

            if (!this.FindParentLayoutDocumentPane(model, out layoutDocumentPaneGroup, out layoutPanel))
            {
                return(null);
            }
            Rect screenArea = (manager.FindLogicalChildren <FrameworkElement>().OfType <ILayoutControl>().First <ILayoutControl>((ILayoutControl d) => {
                if (layoutDocumentPaneGroup == null)
                {
                    return(d.Model == layoutPanel);
                }
                return(d.Model == layoutDocumentPaneGroup);
            }) as FrameworkElement).GetScreenArea();

            switch (base.Type)
            {
            case DropTargetType.DocumentPaneDockAsAnchorableLeft:
            {
                screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
                screenArea.Width = screenArea.Width / 3;
                return(new RectangleGeometry(screenArea));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableTop:
            {
                screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
                screenArea.Height = screenArea.Height / 3;
                return(new RectangleGeometry(screenArea));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableRight:
            {
                screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
                screenArea.Offset(screenArea.Width - screenArea.Width / 3, 0);
                screenArea.Width = screenArea.Width / 3;
                return(new RectangleGeometry(screenArea));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableBottom:
            {
                screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
                screenArea.Offset(0, screenArea.Height - screenArea.Height / 3);
                screenArea.Height = screenArea.Height / 3;
                return(new RectangleGeometry(screenArea));
            }
            }
            return(null);
        }
Beispiel #8
0
        LayoutContent FindLayoutContentByID(ILayoutElement layoutElement,
                                            string contentID)
        {
            if (layoutElement == null)
            {
                return(null);
            }

            LayoutContent content = layoutElement as LayoutContent;

            if (content != null)
            {
                if (content.ContentId == contentID)
                {
                    return(content);
                }
            }

            IEnumerable <ILayoutElement> children = null;
            LayoutRoot           root             = layoutElement as LayoutRoot;
            LayoutFloatingWindow fw    = layoutElement as LayoutFloatingWindow;
            ILayoutGroup         group = layoutElement as ILayoutGroup;

            if (root != null)
            {
                children = root.Children;
            }
            if (fw != null)
            {
                children = fw.Children;
            }
            if (group != null)
            {
                children = group.Children;
            }

            if (children == null)
            {
                return(null);
            }

            foreach (ILayoutElement i in children)
            {
                content = FindLayoutContentByID(i, contentID);
                if (content != null)
                {
                    return(content);
                }
            }

            return(null);
        }
Beispiel #9
0
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            switch (Type)
            {
            case DropTargetType.DocumentPaneGroupDockInside:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);

                return(new RectangleGeometry(targetScreenRect));
            }
            }

            return(null);
        }
Beispiel #10
0
        /// <summary>
        /// Big hack to make this freaking windows appear
        /// </summary>
        /// <param name="window"></param>
        private void AttachToUI(LayoutFloatingWindow layoutFloatingWindow, LayoutAnchorable contentModel)
        {
            var ctor = typeof(LayoutAnchorableFloatingWindowControl).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).First();

            var fwc = (LayoutAnchorableFloatingWindowControl)ctor.Invoke(new object[] { layoutFloatingWindow });

            fwc.Width  = contentModel.FloatingWidth;
            fwc.Height = contentModel.FloatingHeight;
            fwc.Left   = this.Left + (this.Width / 2) - (fwc.Width / 2);
            fwc.Top    = this.Top + (this.Height / 2) - (fwc.Height / 2);

            var floatings = (List <LayoutFloatingWindowControl>)
                            typeof(DockingManager)
                            .GetField("_fwList", BindingFlags.Instance | BindingFlags.NonPublic)
                            .GetValue(dockManager);

            floatings.Add(fwc);
            fwc.Show();
        }
Beispiel #11
0
        public void Drop(LayoutFloatingWindow floatingWindow)
        {
            ILayoutRoot   root          = floatingWindow.Root;
            LayoutContent activeContent = floatingWindow.Root.ActiveContent;
            LayoutAnchorableFloatingWindow layoutAnchorableFloatingWindow = floatingWindow as LayoutAnchorableFloatingWindow;

            if (layoutAnchorableFloatingWindow == null)
            {
                this.Drop(floatingWindow as LayoutDocumentFloatingWindow);
            }
            else
            {
                this.Drop(layoutAnchorableFloatingWindow);
            }
            base.Dispatcher.BeginInvoke(new Action(() => {
                activeContent.IsSelected = false;
                activeContent.IsActive   = false;
                activeContent.IsActive   = true;
            }), DispatcherPriority.Background, new object[0]);
        }
        public override System.Windows.Media.Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            Rect targetScreenRect;
            ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane;
            var manager = targetModel.Root.Manager;

            //ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane;
            LayoutDocumentPaneGroup parentGroup;
            LayoutPanel             parentGroupPanel;

            if (!FindParentLayoutDocumentPane(targetModel, out parentGroup, out parentGroupPanel))
            {
                return(null);
            }

            //if (targetModel.Parent is LayoutDocumentPaneGroup)
            //{
            //    var parentGroup = targetModel.Parent as LayoutDocumentPaneGroup;
            //    var documentPaneGroupControl = manager.FindLogicalChildren<LayoutDocumentPaneGroupControl>().First(d => d.Model == parentGroup);
            //    targetScreenRect = documentPaneGroupControl.GetScreenArea();
            //}
            //else
            //{
            //    var documentPaneControl = manager.FindLogicalChildren<LayoutDocumentPaneControl>().First(d => d.Model == targetModel);
            //    targetScreenRect = documentPaneControl.GetScreenArea();
            //}

            //var parentPanel = targetModel.FindParent<LayoutPanel>();
            var documentPaneControl = manager.FindLogicalChildren <FrameworkElement>().OfType <ILayoutControl>().First(d => parentGroup != null ? d.Model == parentGroup : d.Model == parentGroupPanel) as FrameworkElement;

            targetScreenRect = documentPaneControl.GetScreenArea();

            switch (Type)
            {
            case DropTargetType.DocumentPaneDockAsAnchorableBottom:
            {
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Offset(0.0, targetScreenRect.Height - targetScreenRect.Height / 3.0);
                targetScreenRect.Height /= 3.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableTop:
            {
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Height /= 3.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableRight:
            {
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Offset(targetScreenRect.Width - targetScreenRect.Width / 3.0, 0.0);
                targetScreenRect.Width /= 3.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockAsAnchorableLeft:
            {
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Width /= 3.0;
                return(new RectangleGeometry(targetScreenRect));
            }
            }

            return(null);
        }
Beispiel #13
0
 public abstract Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindow);
Beispiel #14
0
        public override System.Windows.Media.Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            switch (Type)
            {
            case DropTargetType.DocumentPaneDockInside:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);

                if (_tabIndex == -1)
                {
                    return(new RectangleGeometry(targetScreenRect));
                }
                else
                {
                    var translatedDetectionRect = new Rect(DetectionRects[0].TopLeft, DetectionRects[0].BottomRight);
                    translatedDetectionRect.Offset(-overlayWindow.Left, -overlayWindow.Top);

                    var pathFigure = new PathFigure();
                    pathFigure.StartPoint = targetScreenRect.BottomRight;
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = new Point(targetScreenRect.Right, translatedDetectionRect.Bottom)
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = translatedDetectionRect.BottomRight
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = translatedDetectionRect.TopRight
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = translatedDetectionRect.TopLeft
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = translatedDetectionRect.BottomLeft
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = new Point(targetScreenRect.Left, translatedDetectionRect.Bottom)
                        });
                    pathFigure.Segments.Add(new LineSegment()
                        {
                            Point = targetScreenRect.BottomLeft
                        });
                    pathFigure.IsClosed = true;
                    pathFigure.IsFilled = true;
                    pathFigure.Freeze();
                    return(new PathGeometry(new PathFigure[] { pathFigure }));
                }
            }

            case DropTargetType.DocumentPaneDockBottom:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Offset(0.0, targetScreenRect.Height / 2.0);
                targetScreenRect.Height /= 2.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockTop:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Height /= 2.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockLeft:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Width /= 2.0;
                return(new RectangleGeometry(targetScreenRect));
            }

            case DropTargetType.DocumentPaneDockRight:
            {
                var targetScreenRect = TargetElement.GetScreenArea();
                targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                targetScreenRect.Offset(targetScreenRect.Width / 2.0, 0.0);
                targetScreenRect.Width /= 2.0;
                return(new RectangleGeometry(targetScreenRect));
            }
            }

            return(null);
        }
    public override System.Windows.Media.Geometry GetPreviewPath( OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel )
    {
      switch( Type )
      {
        case DropTargetType.DocumentPaneGroupDockInside:
          #region DropTargetType.DocumentPaneGroupDockInside
          {
            var targetScreenRect = TargetElement.GetScreenArea();
            targetScreenRect.Offset( -overlayWindow.Left, -overlayWindow.Top );

            return new RectangleGeometry( targetScreenRect );
          }
          #endregion
      }

      return null;
    }
Beispiel #16
0
        public override Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            LayoutAnchorableFloatingWindow layoutAnchorableFloatingWindow = floatingWindowModel as LayoutAnchorableFloatingWindow;
            LayoutAnchorablePaneGroup      rootPanel = layoutAnchorableFloatingWindow.RootPanel;
            LayoutAnchorablePaneGroup      layoutAnchorablePaneGroup = layoutAnchorableFloatingWindow.RootPanel;

            switch (base.Type)
            {
            case DropTargetType.AnchorablePaneDockLeft:
            {
                Rect screenArea = base.TargetElement.GetScreenArea();
                screenArea.Offset(-overlayWindow.Left, -overlayWindow.Top);
                screenArea.Width = screenArea.Width / 2;
                return(new RectangleGeometry(screenArea));
            }

            case DropTargetType.AnchorablePaneDockTop:
            {
                Rect height = base.TargetElement.GetScreenArea();
                height.Offset(-overlayWindow.Left, -overlayWindow.Top);
                height.Height = height.Height / 2;
                return(new RectangleGeometry(height));
            }

            case DropTargetType.AnchorablePaneDockRight:
            {
                Rect width = base.TargetElement.GetScreenArea();
                width.Offset(-overlayWindow.Left, -overlayWindow.Top);
                width.Offset(width.Width / 2, 0);
                width.Width = width.Width / 2;
                return(new RectangleGeometry(width));
            }

            case DropTargetType.AnchorablePaneDockBottom:
            {
                Rect rect = base.TargetElement.GetScreenArea();
                rect.Offset(-overlayWindow.Left, -overlayWindow.Top);
                rect.Offset(0, rect.Height / 2);
                rect.Height = rect.Height / 2;
                return(new RectangleGeometry(rect));
            }

            case DropTargetType.AnchorablePaneDockInside:
            {
                Rect screenArea1 = base.TargetElement.GetScreenArea();
                screenArea1.Offset(-overlayWindow.Left, -overlayWindow.Top);
                if (this._tabIndex == -1)
                {
                    return(new RectangleGeometry(screenArea1));
                }
                Rect rect1 = new Rect(base.DetectionRects[0].TopLeft, base.DetectionRects[0].BottomRight);
                rect1.Offset(-overlayWindow.Left, -overlayWindow.Top);
                PathFigure pathFigure = new PathFigure()
                {
                    StartPoint = screenArea1.TopLeft
                };
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = new Point(screenArea1.Left, rect1.Top)
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = rect1.TopLeft
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = rect1.BottomLeft
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = rect1.BottomRight
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = rect1.TopRight
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = new Point(screenArea1.Right, rect1.Top)
                    });
                pathFigure.Segments.Add(new LineSegment()
                    {
                        Point = screenArea1.TopRight
                    });
                pathFigure.IsClosed = true;
                pathFigure.IsFilled = true;
                pathFigure.Freeze();
                return(new PathGeometry(new PathFigure[] { pathFigure }));
            }
            }
            return(null);
        }
        public override System.Windows.Media.Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
        {
            var anchorableFloatingWindowModel      = floatingWindowModel as LayoutAnchorableFloatingWindow;
            var layoutAnchorablePane               = anchorableFloatingWindowModel.RootPanel as ILayoutPositionableElement;
            var layoutAnchorablePaneWithActualSize = anchorableFloatingWindowModel.RootPanel as ILayoutPositionableElementWithActualSize;

            var targetScreenRect = TargetElement.GetScreenArea();

            switch (Type)
            {
            case DropTargetType.DockingManagerDockLeft:
            {
                var desideredWidth = layoutAnchorablePane.DockWidth.IsAbsolute ? layoutAnchorablePane.DockWidth.Value : layoutAnchorablePaneWithActualSize.ActualWidth;
                var previewBoxRect = new Rect(
                    targetScreenRect.Left - overlayWindow.Left,
                    targetScreenRect.Top - overlayWindow.Top,
                    Math.Min(desideredWidth, targetScreenRect.Width / 2.0),
                    targetScreenRect.Height);

                return(new RectangleGeometry(previewBoxRect));
            }

            case DropTargetType.DockingManagerDockTop:
            {
                var desideredHeight = layoutAnchorablePane.DockHeight.IsAbsolute ? layoutAnchorablePane.DockHeight.Value : layoutAnchorablePaneWithActualSize.ActualHeight;
                var previewBoxRect  = new Rect(
                    targetScreenRect.Left - overlayWindow.Left,
                    targetScreenRect.Top - overlayWindow.Top,
                    targetScreenRect.Width,
                    Math.Min(desideredHeight, targetScreenRect.Height / 2.0));

                return(new RectangleGeometry(previewBoxRect));
            }

            case DropTargetType.DockingManagerDockRight:
            {
                var desideredWidth = layoutAnchorablePane.DockWidth.IsAbsolute ? layoutAnchorablePane.DockWidth.Value : layoutAnchorablePaneWithActualSize.ActualWidth;
                var previewBoxRect = new Rect(
                    targetScreenRect.Right - overlayWindow.Left - Math.Min(desideredWidth, targetScreenRect.Width / 2.0),
                    targetScreenRect.Top - overlayWindow.Top,
                    Math.Min(desideredWidth, targetScreenRect.Width / 2.0),
                    targetScreenRect.Height);

                return(new RectangleGeometry(previewBoxRect));
            }

            case DropTargetType.DockingManagerDockBottom:
            {
                var desideredHeight = layoutAnchorablePane.DockHeight.IsAbsolute ? layoutAnchorablePane.DockHeight.Value : layoutAnchorablePaneWithActualSize.ActualHeight;
                var previewBoxRect  = new Rect(
                    targetScreenRect.Left - overlayWindow.Left,
                    targetScreenRect.Bottom - overlayWindow.Top - Math.Min(desideredHeight, targetScreenRect.Height / 2.0),
                    targetScreenRect.Width,
                    Math.Min(desideredHeight, targetScreenRect.Height / 2.0));

                return(new RectangleGeometry(previewBoxRect));
            }
            }


            throw new InvalidOperationException();
        }