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; }
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; }
private static void OnPanelLayoutUpdated(object sender, RoutedEventArgs args) { DraggedTabInfo draggedTabInfo = DockManager.Instance.DraggedTabInfo; if (draggedTabInfo == null || draggedTabInfo.TabStrip != sender) { return; } draggedTabInfo.MeasureTabStrip(); }
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(); }
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); }
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); }
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; }
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); }