public void ToDockSide(DockSide side, bool isActive = false) { if (side != DockSide.Left && side != DockSide.Top && side != DockSide.Right && side != DockSide.Bottom) { return; } if (_container != null) { if (side != Side || Mode != DockMode.DockBar) { var dockManager = DockManager; _container.Detach(this); _container = null; Mode = DockMode.DockBar; Side = side; dockManager.Root.AddSideChild(this, Side); } if (isActive) { _dockControl.SetActive(); } } }
public void ToDock() { if (!CanDock) { _dockControl.SetActive(); return; } if (_container != null) { CanSelect = true; Mode = DockMode.Normal; var dockManager = DockManager; var group = _container as LayoutGroup; if (group?.AttachObj == null || !group.AttachObj.AttachTo()) { //默认向下停靠 if (Side == DockSide.None) { Side = DockSide.Bottom; } _container.Detach(this); _container = null; _ToRoot(dockManager); } _dockControl.SetActive(); } }
public void Dock() { if (this.PreviousContainer == null) { this.InternalDock(); } else { ILayoutContainer parent = base.Parent; int num = (parent is ILayoutGroup ? (parent as ILayoutGroup).IndexOfChild(this) : -1); ILayoutGroup previousContainer = this.PreviousContainer as ILayoutGroup; if (this.PreviousContainerIndex >= previousContainer.ChildrenCount) { previousContainer.InsertChildAt(previousContainer.ChildrenCount, this); } else { previousContainer.InsertChildAt(this.PreviousContainerIndex, this); } if (num <= -1) { this.PreviousContainer = null; this.PreviousContainerIndex = 0; } else { this.PreviousContainer = parent; this.PreviousContainerIndex = num; } this.IsSelected = true; this.IsActive = true; } base.Root.CollectGarbage(); }
public void ToDockAsDocument(int index, bool isActive = true) { if (!CanDockAsDocument && isActive) { _dockControl.SetActive(); return; } if (index < 0 || index >= DockManager.DocumentTabCount) { return; } if (_container != null) { CanSelect = true; var dockManager = DockManager; _container.Detach(this); _container = null; Side = DockSide.None; Mode = DockMode.Normal; dockManager.Root.DocumentModels[index].Attach(this, 0); if (isActive) { _dockControl.SetActive(); } } }
public void Float() { if (this.PreviousContainer == null || this.PreviousContainer.FindParent <LayoutFloatingWindow>() == null) { base.Root.Manager.StartDraggingFloatingWindowForContent(this, false); this.IsSelected = true; this.IsActive = true; return; } ILayoutPane parent = base.Parent as ILayoutPane; int num = (parent as ILayoutGroup).IndexOfChild(this); ILayoutGroup previousContainer = this.PreviousContainer as ILayoutGroup; if (this.PreviousContainerIndex >= previousContainer.ChildrenCount) { previousContainer.InsertChildAt(previousContainer.ChildrenCount, this); } else { previousContainer.InsertChildAt(this.PreviousContainerIndex, this); } this.PreviousContainer = parent; this.PreviousContainerIndex = num; this.IsSelected = true; this.IsActive = true; base.Root.CollectGarbage(); }
protected abstract IDiagramNode CreateInstance( IModelNode modelNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup);
public DiagramLayoutStructure([NotNull] IDiagram diagram) { _diagram = diagram; _nodeLayoutGroups = CreateLayoutGroupForAllNodes(); _crossLayoutGroupConnectors = GetCrossLayoutGroupConnectors(); RootLayoutGroup = CreateLayoutGroup(Maybe <ModelNodeId> .Nothing); }
public LayoutInfo Calculate(ILayoutGroup layoutGroup) { var nodeLayout = CalculateNodeRects(layoutGroup); var connectorLayout = CalculateConnectorRoutes(layoutGroup, nodeLayout); return(new LayoutInfo(nodeLayout, connectorLayout)); }
public GroupLayoutInfo Calculate(ILayoutGroup layoutGroup) { var nodeLayout = CalculateNodePositions(layoutGroup).ToList(); var connectorLayout = CalculateConnectorRoutes(layoutGroup, nodeLayout).ToList(); return(new GroupLayoutInfo(nodeLayout, connectorLayout)); }
public void Hide(bool cancelable = true) { if (!this.IsVisible) { base.IsSelected = true; base.IsActive = true; return; } if (cancelable) { CancelEventArgs cancelEventArg = new CancelEventArgs(); this.OnHiding(cancelEventArg); if (cancelEventArg.Cancel) { return; } } this.RaisePropertyChanging("IsHidden"); this.RaisePropertyChanging("IsVisible"); ILayoutGroup parent = base.Parent as ILayoutGroup; base.PreviousContainer = parent; base.PreviousContainerIndex = parent.IndexOfChild(this); base.Root.Hidden.Add(this); this.RaisePropertyChanged("IsVisible"); this.RaisePropertyChanged("IsHidden"); this.NotifyIsVisibleChanged(); }
private GroupLayoutInfo LayoutRecursive( [NotNull] DiagramLayoutStructure layoutStructure, [NotNull] ILayoutGroup layoutGroup, [NotNull] IGroupLayoutAlgorithm layoutAlgorithm) { var childLayoutByParentNodeId = new Dictionary <ModelNodeId, GroupLayoutInfo>(); foreach (var node in layoutGroup.Nodes) { var maybeLayoutGroup = layoutStructure.TryGetLayoutGroupByNodeId(node.Id); if (!maybeLayoutGroup.HasValue || maybeLayoutGroup.Value.IsEmpty) { continue; } var nodeLayoutAlgorithm = _layoutAlgorithmSelectionStrategy.GetForNode(node); var childrenAreaLayoutInfo = LayoutRecursive(layoutStructure, maybeLayoutGroup.Value, nodeLayoutAlgorithm); layoutGroup.SetChildrenAreaSize(node.Id, childrenAreaLayoutInfo.Rect.Size); childLayoutByParentNodeId.Add(node.Id, childrenAreaLayoutInfo); } var groupLayoutInfo = layoutAlgorithm.Calculate(layoutGroup); foreach (var nodeLayoutInfo in groupLayoutInfo.Nodes) { if (childLayoutByParentNodeId.TryGetValue(nodeLayoutInfo.Node.Id, out var childrenAreaLayoutInfo)) { nodeLayoutInfo.ChildrenArea = childrenAreaLayoutInfo; } } return(groupLayoutInfo); }
protected override IDiagramNode CreateInstance( IModelNode modelNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup) => new RoslynTypeDiagramNode((IRoslynTypeNode)modelNode, size, center, addedAt, parentNodeId, layoutGroup);
public void ToFloat(bool isActive = true) { if (!CanFloat && isActive) { _dockControl.SetActive(); return; } if (_container != null) { CanSelect = true; //注意切换模式 Mode = DockMode.Float; var dockManager = DockManager; _container.Detach(this); _container = null; BaseFloatWindow wnd; BaseGroupControl groupctrl; if (!IsDocument) { var group = new LayoutGroup(Side, Mode, dockManager); group.Attach(this); groupctrl = new AnchorSideGroupControl(group) { DesiredHeight = DesiredHeight, DesiredWidth = DesiredWidth }; wnd = new AnchorGroupWindow(dockManager) { Height = DesiredHeight, Width = DesiredWidth, Left = FloatLeft, Top = FloatTop }; } else { var group = new LayoutDocumentGroup(Mode, dockManager); group.Attach(this); groupctrl = new LayoutDocumentGroupControl(group) { DesiredHeight = DesiredHeight, DesiredWidth = DesiredWidth }; wnd = new DocumentGroupWindow(dockManager) { Height = DesiredHeight, Width = DesiredWidth, Left = FloatLeft, Top = FloatTop }; } wnd.AttachChild(groupctrl, AttachMode.None, 0); wnd.Show(); if (isActive) { _dockControl.SetActive(); } } }
private static Route GetRoute( [NotNull] ILayoutGroup layoutGroup, [NotNull] IList <NodeLayoutInfo> nodeLayout, [NotNull] IDiagramConnector connector) { return(new Route( GetNodeCenter(layoutGroup, nodeLayout, connector.Source), GetNodeCenter(layoutGroup, nodeLayout, connector.Target))); }
private static Route GetRoute( [NotNull] ILayoutGroup layoutGroup, [NotNull] IDictionary <ModelNodeId, Rect2D> nodeRects, [NotNull] IDiagramConnector connector) { return(new Route( GetNodeCenter(layoutGroup, nodeRects, connector.Source), GetNodeCenter(layoutGroup, nodeRects, connector.Target))); }
private TestDiagramNode( IModelNode modelNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup) : base(modelNode, size, center, addedAt, parentNodeId, layoutGroup) { }
protected override IDiagramNode CreateInstance( IModelNode modelNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup) { return(new TestDiagramNode(modelNode, size, center, addedAt, parentNodeId, layoutGroup)); }
private static Point2D GetNodeCenter( [NotNull] ILayoutGroup layoutGroup, [NotNull] IDictionary <ModelNodeId, Rect2D> nodeRects, ModelNodeId nodeId) { var originalNode = layoutGroup.GetNode(nodeId); var newTopLeftPosition = nodeRects[nodeId].TopLeft; return(FromTopLeftToCenter(newTopLeftPosition, originalNode.Size)); }
private static Point2D GetNodeCenter( [NotNull] ILayoutGroup layoutGroup, [NotNull] IList <NodeLayoutInfo> nodeLayout, ModelNodeId nodeId) { var originalNode = layoutGroup.GetNode(nodeId); var newTopLeftPosition = nodeLayout.Single(i => i.Node.Id == nodeId).Rect.TopLeft; return(FromTopLeftToCenter(newTopLeftPosition, originalNode.Size)); }
public RoslynTypeDiagramNode( IRoslynTypeNode roslynTypeNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup) : base(roslynTypeNode, size, center, addedAt, parentNodeId, layoutGroup) { }
protected ContainerDiagramNodeBase( IModelNode modelNode, Size2D size, Point2D center, DateTime addedAt, ModelNodeId?parentNodeId, ILayoutGroup layoutGroup) : base(modelNode, size, center, addedAt, parentNodeId) { LayoutGroup = layoutGroup; }
private Diagram( [NotNull] ILayoutGroup rootLayoutGroup, [NotNull] IImmutableDictionary <ModelRelationshipId, IDiagramConnector> crossLayoutGroupConnectors) { RootLayoutGroup = rootLayoutGroup; _crossLayoutGroupConnectors = crossLayoutGroupConnectors; Nodes = RootLayoutGroup.NodesRecursive; Connectors = RootLayoutGroup.ConnectorsRecursive.Union(CrossLayoutGroupConnectors); _allShapesGraph = DiagramGraph.Create(Nodes, Connectors); }
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); }
private IEnumerable <NodeLayoutInfo> CalculateNodePositions([NotNull] ILayoutGroup layoutGroup) { var orderedNodes = layoutGroup.Nodes.OrderBy(i => i.ModelNode.Name).ToList(); double yPos = 0; foreach (var node in orderedNodes) { yield return(new NodeLayoutInfo(node, new Point2D(0, yPos))); yPos += node.Size.Height + _gapBetweenNodes; } }
public void Dispose() { if (_isDisposed) { return; } _container?.Detach(this); _dockControl = null; if (_content is IDockSource) { (_content as IDockSource).DockControl = null; } _content = null; _container = null; _isDisposed = true; }
private IDictionary <ModelNodeId, Rect2D> CalculateNodeRects([NotNull] ILayoutGroup layoutGroup) { var result = new Dictionary <ModelNodeId, Rect2D>(); var orderedNodes = layoutGroup.Nodes.OrderBy(i => i.ModelNode.Name).ToList(); double yPos = 0; foreach (var node in orderedNodes) { result.Add(node.Id, new Rect2D(new Point2D(0, yPos), node.Size)); yPos += node.Size.Height + _gapBetweenNodes; } return(result); }
public virtual void UpdateLayout() { ILayoutGroup layoutGroup = pickerLayoutGroup; if (layoutGroup != null) { if (horizontal) { layoutGroup.SetLayoutHorizontal(); } if (vertical) { layoutGroup.SetLayoutVertical(); } } }
protected override void OnParentChanged(ILayoutContainer oldValue, ILayoutContainer newValue) { ILayoutGroup layoutGroup = oldValue as ILayoutGroup; if (layoutGroup != null) { layoutGroup.ChildrenCollectionChanged -= new EventHandler(this.OnParentChildrenCollectionChanged); } this.RaisePropertyChanged("IsDirectlyHostedInFloatingWindow"); ILayoutGroup layoutGroup1 = newValue as ILayoutGroup; if (layoutGroup1 != null) { layoutGroup1.ChildrenCollectionChanged += new EventHandler(this.OnParentChildrenCollectionChanged); } base.OnParentChanged(oldValue, newValue); }
internal BaseGroupControl(ILayoutGroup model, double desiredWidth = Constants.DockDefaultWidthLength, double desiredHeight = Constants.DockDefaultHeightLength) { Model = model; SetBinding(ItemsSourceProperty, new Binding("Model.Children_CanSelect") { Source = this }); if (model.Children.Count() > 0) { DesiredWidth = model.Children.First().DesiredWidth; DesiredHeight = model.Children.First().DesiredHeight; } else { DesiredWidth = desiredWidth; DesiredHeight = desiredHeight; } }
public LayoutInfo Calculate(ILayoutGroup layoutGroup) { var diagramNodeToLayoutVertexMap = new Map <ModelNodeId, DiagramNodeLayoutVertex>(); var diagramConnectorToLayoutPathMap = new Map <ModelRelationshipId, LayoutPath>(); var layoutVertices = layoutGroup.Nodes .Select(i => CreateLayoutVertex(i, diagramNodeToLayoutVertexMap)) .OrderBy(i => i.DiagramNode.AddedAt) .ThenBy(i => i.Name) .ToList(); var layoutPaths = layoutGroup.Connectors .Select(i => CreateLayoutPath(i, diagramNodeToLayoutVertexMap, diagramConnectorToLayoutPathMap)) .ToList(); var relativeLayout = RelativeLayoutCalculator.Calculate(layoutVertices, layoutPaths); return(new AbsolutePositionCalculator(relativeLayout, HorizontalGap, VerticalGap).CalculateLayout()); }