public static void Backup(Func <MonoScript, ScriptableObject> onCreateScript)
 {
     if (_instance == null)
     {
         _instance = ScriptableObject.CreateInstance <AddScriptWindow>();
     }
     _instance.CreateScriptDelegate = onCreateScript;
     if (AddScriptWindowBackup.Instance.addAsset)
     {
         var script   = AssetDatabase.LoadAssetAtPath <MonoScript>(AddScriptWindowBackup.Instance.scriptPath);
         var instance = _instance.CreateScriptDelegate(script);
         if (instance)
         {
             EditScript(instance);
             AddScriptWindowBackup.Instance.Reset();
         }
     }
 }
        public static void Show(Rect position, Type elementType, Func <MonoScript, ScriptableObject> onCreateScript, Func <MonoScript, bool> onFilerScript, string template)
        {
            if (_instance == null)
            {
                _instance = CreateInstance <AddScriptWindow>();
            }

            var hasAssetToAdd = HasAssetToAdd();

            EditorGUI.BeginDisabledGroup(hasAssetToAdd);
            if (GUI.Button(position, $"Add {ObjectNames.NicifyVariableName(elementType.Name)}", Styles.addButtonStyle))
            {
                _instance.elementType = elementType;
                _instance.Init(position, onCreateScript, onFilerScript, template);
                _instance.Repaint();
            }
            EditorGUI.EndDisabledGroup();

            if (hasAssetToAdd)
            {
                Backup(onCreateScript);
            }
        }