コード例 #1
0
 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));
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: ProjectTreeNode.cs プロジェクト: JOJOyh/ldd-modder
 internal void AssignParent(ProjectTreeNode node)
 {
     Parent  = node;
     Manager = node?.Manager;
 }
コード例 #5
0
ファイル: ProjectTreeNode.cs プロジェクト: JOJOyh/ldd-modder
 public virtual bool CanDropAfter(ProjectTreeNode node)
 {
     return(false);
 }
コード例 #6
0
ファイル: ProjectTreeNode.cs プロジェクト: JOJOyh/ldd-modder
 public virtual bool CanDropBefore(ProjectTreeNode node)
 {
     return(false);
 }
コード例 #7
0
ファイル: ProjectTreeNode.cs プロジェクト: JOJOyh/ldd-modder
        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));
                }
            }
        }