public static PowerSpriteImport CreateImporter(string path)
        {
            PowerSpriteImport asset = ScriptableObject.CreateInstance <PowerSpriteImport>();

            AssetDatabase.CreateAsset(asset, path);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            return(asset);
        }
        public static void CreateImporter()
        {
            PowerSpriteImport asset = ScriptableObject.CreateInstance <PowerSpriteImport> ();

            string path = AssetDatabase.GetAssetPath(Selection.activeObject);

            if (path == "")
            {
                path = "Assets";
            }
            else if (Path.GetExtension(path) != "")
            {
                path = path.Replace(Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject)), "");
            }

            string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + "/SpriteImporter.asset");

            AssetDatabase.CreateAsset(asset, assetPathAndName);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            EditorUtility.FocusProjectWindow();
            Selection.activeObject = asset;
        }
        void OnEnable()
        {
            m_component = (PowerSpriteImport)target;
            m_items     = m_component.m_animations;

            if (Directory.Exists(m_component.m_sourceDirectory) == false)
            {
                m_component.m_sourceDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
            }

            RecalcLengths();

            m_list = new ReorderableList(serializedObject, serializedObject.FindProperty(LIST_PROPERTY_NAME), true, true, true, true);
            m_list.drawHeaderCallback = (Rect rect) => {
                EditorGUI.LabelField(new Rect(rect)
                {
                    width = rect.width
                }, "Animation Name");
                EditorGUI.LabelField(new Rect(rect)
                {
                    x = rect.width - 47, width = 100
                }, "First Frame");
            };

            m_list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                SerializedProperty listItem = m_list.serializedProperty.GetArrayElementAtIndex(index);
                rect.y += 2;
                EditorGUI.BeginChangeCheck();
                EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width - 45, EditorGUIUtility.singleLineHeight),
                                        listItem.FindPropertyRelative("m_name"), GUIContent.none);
                if (EditorGUI.EndChangeCheck())
                {
                    m_list.index = index;
                }
                //EditorGUI.LabelField(new Rect(rect.x + rect.width-90, rect.y, 90, EditorGUIUtility.singleLineHeight), "1st frame:");
                EditorGUI.BeginChangeCheck();
                m_items[index].m_firstFrame = EditorGUI.DelayedIntField(new Rect(rect.x + rect.width - 40, rect.y, 40, EditorGUIUtility.singleLineHeight), m_items[index].m_firstFrame);
                if (EditorGUI.EndChangeCheck())
                {
                    // Recalc previous length since it will have changed
                    if (index > 0)
                    {
                        m_items[index - 1].m_length = Mathf.Max(1, m_items[index].m_firstFrame - m_items[index - 1].m_firstFrame);
                    }
                    // Recalc first frames
                    RecalcFirstFrames();
                }
            };
            m_list.onAddCallback += (list) =>
            {
                if (m_list.index < 0 || m_list.index >= m_list.count - 1)
                {
                    m_items.Add(new PowerSpriteImport.AnimImportData());
                    m_list.index = m_list.index + 1;
                }
                else
                {
                    m_items.Insert(m_list.index + 1, new PowerSpriteImport.AnimImportData());
                    m_list.index = m_list.index + 1;
                }
                RecalcFirstFrames();
            };
            m_list.onRemoveCallback += (list) =>
            {
                int index = m_list.index;
                m_items.RemoveAt(m_list.index);
                RecalcFirstFrames();
                index--;
                if (index >= 0)
                {
                    m_list.index = index;
                }
            };
            m_list.onReorderCallback += (list) =>
            {
                RecalcFirstFrames();
            };
        }