public override bool CanDropAfter(ProjectTreeNode node) { if (ElementType == typeof(ModelMeshReference)) { if (node is ProjectElementNode elementNode) { if (elementNode.Element is ModelMeshReference) { return(true); } } } return(base.CanDropAfter(node)); }
public override bool CanDropBefore(ProjectTreeNode node) { var targetElement = (node as ProjectElementNode)?.Element; if (ElementType == typeof(ModelMeshReference)) { return(targetElement is ModelMeshReference); } else if (ElementType == typeof(PartCollision)) { return(targetElement is PartCollision); } else if (ElementType == typeof(PartConnection)) { return(targetElement is PartConnection); } return(base.CanDropBefore(node)); }
public override bool CanDropOn(ProjectTreeNode node) { if (ElementType == typeof(ModelMeshReference)) { if (node is ProjectElementNode elementNode) { if (elementNode.Element is SurfaceComponent) { return(true); } } else if (node is ElementCollectionNode collectionNode) { if (collectionNode.CollectionType == typeof(ModelMeshReference)) { return(true); } } } else if (ElementType == typeof(PartCollision) || ElementType == typeof(PartConnection)) { if (node is ProjectElementNode elementNode) { if (elementNode.Element is PartBone) { return(true); } } else if (node is ElementCollectionNode collectionNode) { if (collectionNode.CollectionType == ElementType) { return(true); } } } return(base.CanDropOn(node)); }
internal void AssignParent(ProjectTreeNode node) { Parent = node; Manager = node?.Manager; }
public virtual bool CanDropAfter(ProjectTreeNode node) { return(false); }
public virtual bool CanDropBefore(ProjectTreeNode node) { return(false); }
protected void AutoGroupElements(IEnumerable <PartElement> elements, string groupTitle, int groupWhen, int maxGroupSize, bool groupOnSameLevel = false) { int totalElements = elements.Count(); if (totalElements > groupWhen) { ProjectTreeNode groupNode = this; if (!groupOnSameLevel) { groupNode = new ProjectTreeNode(groupTitle) { nodesDirty = false, NodeID = $"{NodeID}_{groupTitle}" }; Nodes.Add(groupNode); } //var parentNode = groupNode.Parent; if (totalElements > maxGroupSize) { int remaining = totalElements; int currIdx = 0; while (remaining > 0) { int takeCount = Math.Min(remaining, maxGroupSize); string rangeText = string.Empty; if (takeCount / (double)maxGroupSize < 0.5) { rangeText = string.Format(ModelLocalizations.NodeRangeFormat2, currIdx + 1); } else { rangeText = string.Format(ModelLocalizations.NodeRangeFormat1, currIdx + 1, currIdx + takeCount); } var rangeNode = new ElementGroupNode(rangeText); rangeNode.NodeID = $"{NodeID}_{groupTitle}_{currIdx + 1}"; if (groupOnSameLevel) { rangeNode.Text = groupTitle + " " + rangeNode.Text; } rangeNode.Elements.AddRange(elements.Skip(currIdx).Take(maxGroupSize)); groupNode.Nodes.Add(rangeNode); currIdx += takeCount; remaining -= takeCount; } } else { foreach (var elem in elements) { groupNode.Nodes.Add(ProjectElementNode.CreateDefault(elem)); } } } else { foreach (var elem in elements) { Nodes.Add(ProjectElementNode.CreateDefault(elem)); } } }