51 lines
No EOL
2.2 KiB
C#
51 lines
No EOL
2.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
using UnityEditor.UIElements;
|
|
using UnityEditorInternal;
|
|
|
|
namespace Module.ProjectValidator.Editor
|
|
{
|
|
internal sealed class ProjectValidatorSettings : ScriptableObject
|
|
{
|
|
public List<string> assemblies = new();
|
|
|
|
private const string AssetPath = "ProjectSettings/ProjectValidatorSettings.asset";
|
|
private const string StyleSheetName = "StyleSheetProjectValidatorSettings";
|
|
|
|
internal static ProjectValidatorSettings GetOrCreate()
|
|
{
|
|
var objects = InternalEditorUtility.LoadSerializedFileAndForget(AssetPath);
|
|
|
|
if (objects.Length != 0)
|
|
return (ProjectValidatorSettings)objects[0];
|
|
|
|
var settings = CreateInstance<ProjectValidatorSettings>();
|
|
InternalEditorUtility.SaveToSerializedFileAndForget(new Object[] { settings }, AssetPath, true);
|
|
return settings;
|
|
}
|
|
|
|
[SettingsProvider]
|
|
public static SettingsProvider CreateProvider()
|
|
{
|
|
return new SettingsProvider("Project/Project Validator", SettingsScope.Project)
|
|
{
|
|
label = "Project Validator",
|
|
activateHandler = (_, root) =>
|
|
{
|
|
var settings = GetOrCreate();
|
|
var serializedObject = new SerializedObject(settings);
|
|
var container = new VisualElement { style = { flexDirection = FlexDirection.Column } };
|
|
var propertyField = new PropertyField(serializedObject.FindProperty("assemblies"), "Assemblies");
|
|
propertyField.RegisterCallback<ChangeEvent<string>>(_ => InternalEditorUtility.SaveToSerializedFileAndForget(new[] { serializedObject.targetObject }, AssetPath, true));
|
|
container.Add(propertyField);
|
|
root.Add(container);
|
|
root.Bind(serializedObject);
|
|
root.styleSheets.Add(EditorAssetUtility.LoadFirstAsset<StyleSheet>(StyleSheetName));
|
|
},
|
|
keywords = new HashSet<string>(new[] { "Project", "Validator", "Assemblies" })
|
|
};
|
|
}
|
|
}
|
|
} |