private static bool TryAddChild(ResourceNode dragging, ResourceNode dropping)
        {
            bool good = false;

            Type dt = dragging.GetType();

            if (dropping.Children.Count != 0)
            {
                good = CompareTypes(dropping.Children[0].GetType(), dt);
            }
            else
            {
                foreach (Type t in dropping.AllowedChildTypes)
                {
                    if (good = CompareToType(dt, t))
                    {
                        break;
                    }
                }
            }

            if (good)
            {
                if (dragging.Parent != null)
                {
                    dragging.Parent.RemoveChild(dragging);
                }
                dropping.AddChild(dragging);

                dragging.OnMoved();
            }

            return(good);
        }
 private void DuplicateHelper(ResourceNode originalParent, ResourceNode duplicatedParent, string suffix)
 {
     foreach (ResourceNode n in originalParent.Children)
     {
         string tempPath = Path.GetTempFileName();
         _resource.Export(tempPath);
         // Initialize node in a way that will not cause crashes
         ResourceNode rNode2 = new MDL0BoneNode {
             _name = n.Name + suffix
         };
         rNode2.Replace(tempPath);
         duplicatedParent.AddChild(rNode2);
         DuplicateHelper(n, rNode2, suffix);
     }
 }