示例#1
0
        public void Initialize(ViewElement view)
        {
            this.sibling = DraggedTabInfo.FindFirstSibling(view);
            ViewGroup parent = view.Parent;

            this.nestedGroup         = (ViewElement)null;
            this.groupPosition       = -1;
            this.groupFloatingHeight = 0.0;
            this.groupFloatingWidth  = 0.0;
            this.groupContainer      = (DocumentGroupContainer)null;
            if (parent == null)
            {
                return;
            }
            if (parent.Parent != null)
            {
                this.groupPosition = parent.Parent.Children.IndexOf((ViewElement)parent);
                if (parent != null && parent.Children.Count == 1 && parent.Parent.Children.Count == 1)
                {
                    this.nestedGroup = (ViewElement)parent;
                }
            }
            this.groupDockedWidth    = parent.DockedWidth;
            this.groupDockedHeight   = parent.DockedHeight;
            this.groupFloatingWidth  = parent.FloatingWidth;
            this.groupFloatingHeight = parent.FloatingHeight;
            this.groupContainer      = parent.Parent as DocumentGroupContainer;
        }
示例#2
0
        private void HandleDragAbsoluteMoveTabInPlace(DragUndockHeader header, DragAbsoluteEventArgs args)
        {
            DraggedTabInfo draggedTabInfo = DockManager.Instance.DraggedTabInfo;
            bool           flag           = draggedTabInfo.GetTabIndexAt(args.ScreenPoint) == draggedTabInfo.DraggedTabPosition;

            if (flag)
            {
                draggedTabInfo.ClearVirtualTabRect();
            }
            if (header.ViewElement == null && draggedTabInfo.DraggedViewElement == null)
            {
                return;
            }
            ViewElement tab = header.ViewElement ?? draggedTabInfo.DraggedViewElement;

            if (!draggedTabInfo.TabStripRect.Contains(args.ScreenPoint) || flag || draggedTabInfo.VirtualTabRect.Contains(args.ScreenPoint))
            {
                return;
            }
            int tabIndexAt = draggedTabInfo.GetTabIndexAt(args.ScreenPoint);

            if (-1 == tabIndexAt)
            {
                return;
            }
            DockOperations.MoveTab(tab, tabIndexAt);
            draggedTabInfo.SetVirtualTabRect(tabIndexAt);
            draggedTabInfo.MoveTabRect(draggedTabInfo.DraggedTabPosition, tabIndexAt);
            draggedTabInfo.DraggedTabPosition = tabIndexAt;
        }
示例#3
0
        private static void OnPanelLayoutUpdated(object sender, RoutedEventArgs args)
        {
            DraggedTabInfo draggedTabInfo = DockManager.Instance.DraggedTabInfo;

            if (draggedTabInfo == null || draggedTabInfo.TabStrip != sender)
            {
                return;
            }
            draggedTabInfo.MeasureTabStrip();
        }
示例#4
0
        private void HandleDockIntoTabStrip(DraggedTabInfo tabInfo, DragUndockHeader header, DragAbsoluteEventArgs args)
        {
            int dockPosition = tabInfo.GetClosestTabIndexAt(args.ScreenPoint);

            if (-1 == dockPosition)
            {
                return;
            }
            ViewElement viewElement = tabInfo.TargetElement;

            if (viewElement == null && tabInfo.GroupContainer != null)
            {
                viewElement = (ViewElement)DockOperations.CreateDocumentGroupAt(tabInfo.GroupContainer, tabInfo.GroupPosition);
                viewElement.DockedHeight   = tabInfo.GroupDockedHeight;
                viewElement.DockedWidth    = tabInfo.GroupDockedWidth;
                viewElement.FloatingHeight = tabInfo.GroupFloatingHeight;
                viewElement.FloatingWidth  = tabInfo.GroupFloatingWidth;
            }
            if (!DockOperations.AreDockRestrictionsFulfilled(header.ViewElement, viewElement))
            {
                return;
            }
            bool      flag      = false;
            ViewGroup viewGroup = tabInfo.NestedGroup as ViewGroup;

            if (viewGroup != null)
            {
                flag = viewGroup.Children.Contains(header.ViewElement);
            }
            if (!flag && tabInfo.TabRects.Count > 0 && args.ScreenPoint.X > tabInfo.TabRects[tabInfo.TabRects.Count - 1].Right)
            {
                dockPosition = tabInfo.TabRects.Count;
            }
            if (tabInfo.TabRects.Count == 0)
            {
                dockPosition = 0;
            }
            if (DockManager.Instance.DraggedTabInfo != null && -1 != DockManager.Instance.DraggedTabInfo.DraggedTabPosition)
            {
                DockManager.Instance.DraggedTabInfo.RemoveTabRect(DockManager.Instance.DraggedTabInfo.DraggedTabPosition);
            }
            DockOperations.DockAt(viewElement, header.ViewElement, dockPosition);
            tabInfo.TabStrip.IsNotificationNeeded = true;
            tabInfo.DraggedTabPosition            = dockPosition;
            tabInfo.ClearVirtualTabRect();
            DockManager.Instance.ClearAdorners();
        }
示例#5
0
        public int GetClosestTabIndexAt(Point screenPoint)
        {
            int num1 = this.GetTabIndexAt(screenPoint);

            if (-1 == num1)
            {
                double num2 = double.MaxValue;
                for (int index = 0; index < this.tabRects.Count; ++index)
                {
                    double num3 = DraggedTabInfo.AverageDistance(this.tabRects[index], screenPoint);
                    if (num3 < num2)
                    {
                        num2 = num3;
                        num1 = index;
                    }
                }
            }
            return(num1);
        }
示例#6
0
        public Rect GetClosestTabRectAt(Point screenPoint)
        {
            Rect rect1 = this.GetTabRectAt(screenPoint);

            if (rect1.Width == 0.0)
            {
                double num1 = double.MaxValue;
                foreach (Rect rect2 in this.tabRects)
                {
                    double num2 = DraggedTabInfo.AverageDistance(rect2, screenPoint);
                    if (num2 < num1)
                    {
                        num1  = num2;
                        rect1 = rect2;
                    }
                }
            }
            return(rect1);
        }
示例#7
0
        private void HandleDragAbsoluteFloatingWindow(DragUndockHeader header, DragAbsoluteEventArgs args)
        {
            DockManager.Instance.UpdateTargets(args);
            DraggedTabInfo autodockTarget = DockManager.Instance.GetAutodockTarget(args);
            bool           flag           = true;
            ViewGroup      viewGroup      = header.ViewElement as ViewGroup;

            if (viewGroup != null)
            {
                flag = viewGroup.VisibleChildren.Count == 1;
            }
            if (autodockTarget == null || !flag || DockManager.Instance.IsFloatingOverDockAdorner)
            {
                return;
            }
            ViewElement viewElement = header.ViewElement;

            this.HandleDockIntoTabStrip(autodockTarget, header, args);
            DockManager.Instance.DraggedTabInfo = autodockTarget;
            DockManager.Instance.DraggedTabInfo.DraggedViewElement = viewElement;
        }
示例#8
0
 private static double AverageDistance(Rect rect, Point point)
 {
     return((DraggedTabInfo.DistanceSquare(rect.TopLeft, point) + DraggedTabInfo.DistanceSquare(rect.TopRight, point) + DraggedTabInfo.DistanceSquare(rect.BottomLeft, point) + DraggedTabInfo.DistanceSquare(rect.BottomRight, point)) / 4.0);
 }