 const ShortStringHash SCENE_TYPE("Scene");
 const ShortStringHash NODE_TYPE("Node");
 const ShortStringHash STATICMODELGROUP_TYPE("StaticModelGroup");
+const ShortStringHash SPLINEPATH_TYPE("SplinePath");
 const ShortStringHash CONSTRAINT_TYPE("Constraint");
 const String NO_CHANGE(uint8(0));
 const ShortStringHash TYPE_VAR("Type");


        itemType = ITEM_COMPONENT;

        if (sourceNode !is null && targetComponent !is null && (targetComponent.type == STATICMODELGROUP_TYPE || targetComponent.type == CONSTRAINT_TYPE))
            return true;
        else
            return false;

                SaveEditAction(action);
                SetSceneModified();
            }

            // Drag node to SplinePath to make it a control point
            SplinePath@ spline = cast<SplinePath>(targetComponent);
            if (spline !is null)
            {
                // Save undo action
                EditAttributeAction action;
                uint attrIndex = GetAttributeIndex(spline, "Control Points");
                Variant oldIDs = spline.attributes[attrIndex];

                for (uint i = 0; i < sourceNodes.length; ++i)
                    spline.AddControlPoint(sourceNodes[i]);
                    
                action.Define(spline, attrIndex, oldIDs);
                SaveEditAction(action);
                SetSceneModified();
            }
            
            // Drag a node to Constraint to make it the remote end of the constraint
            Constraint@ constraint = cast<Constraint>(targetComponent);
