Example #1
0
        internal void AlignToTarget(TargetArgs args)
        {
            if (args.DockContainer != DockHost)
            {
                DockHost = args.DockContainer;
                if (DockHost == null)
                {
                    DockArea = Rect.Empty;
                }
                else
                {
                    DockArea = new Rect(
                        DockHost.ContentHost.TranslatePoint(new Point(), this),
                        DockHost.ContentHost.RenderSize
                        );
                }
            }

            var host = args.TabWell as FrameworkElement ?? args.DocumentContainer;

            if (host != TargetHost)
            {
                TargetHost = host;
                if (TargetHost == null)
                {
                    TargetArea = Rect.Empty;
                }
                else
                {
                    TargetArea = new Rect(
                        TargetHost.TranslatePoint(new Point(), this),
                        TargetHost.RenderSize
                        );
                }
            }

            var isAllTools = args.SourceItems.All(i => i.ItemType == TabItemType.Tool);

            CanDockOuter = isAllTools;

            if (TargetHost is DocumentWell)
            {
                CanDropCenter = true;
                CanDockTarget = isAllTools;

                var panel = TargetHost.FindVisualAncestor <DocumentContainer>();
                CanSplitHorizontal = panel?.Orientation == Orientation.Horizontal || panel?.Items.Count <= 1;
                CanSplitVertical   = panel?.Orientation == Orientation.Vertical || panel?.Items.Count <= 1;
            }
            else if (TargetHost is DocumentContainer)
            {
                CanDropCenter      = true;
                CanDockTarget      = isAllTools;
                CanSplitHorizontal = CanSplitVertical = false;
            }
            else if (TargetHost is ToolWell)
            {
                CanDockTarget      = false;
                CanSplitHorizontal = CanSplitVertical = CanDropCenter = isAllTools;
            }
            else
            {
                CanDockTarget = CanSplitHorizontal = CanSplitVertical = CanDropCenter = false;
            }

            DockTargetButton.UpdateCursor();
            UpdateHighlightPath(args.SourceItems, args.TabItem);
        }
Example #2
0
 public void SetTargetParams(TargetArgs args)
 {
     Panel.Visibility = Visibility.Visible;
     Panel.AlignToTarget(args);
 }