using System; using System.Collections.Generic; using UnityEditor; using UnityEngine.UIElements; namespace SubAssetsToolbox.Editor { internal static class SubAssetsToolboxSettingsProvider { private const string SettingsPath = "Project/SubAssets Toolbox"; private const string UxmlPath = "Packages/io.continis.subassets/UI/UIToolkit/ProjectSettings.uxml"; private static List _extensions; private static ListView _listView; private static EnumField _redirectionModeField; private static Button _resetFileTypesBtn; [SettingsProvider] private static SettingsProvider CreateSettingsProvider() { return new SettingsProvider(SettingsPath, SettingsScope.Project) { activateHandler = (_, rootElement) => CreateUI(rootElement), keywords = new[] { "subassets", "sub-assets", "redirect", "extensions" } }; } private static void SyncToSetting() { SubAssetsToolboxSettings.PatchExtensions.SetValue(_extensions.ToArray(), true); } private static void CreateUI(VisualElement root) { ReferencePatchingMode currentMode = SubAssetsToolboxSettings.PatchReferences.value; bool redirectionIsEnabled = currentMode != ReferencePatchingMode.Disabled; _extensions = new List(SubAssetsToolboxSettings.PatchExtensions.value); VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath(UxmlPath); VisualElement template = visualTree.Instantiate(); template.style.flexGrow = 1f; _redirectionModeField = template.Q("RedirectionModeField"); _redirectionModeField.Init(ReferencePatchingMode.Disabled); _redirectionModeField.SetValueWithoutNotify(currentMode); _redirectionModeField.RegisterValueChangedCallback(OnRedirectionModeChanged); _listView = template.Q("ExtensionsList"); _listView.itemsSource = _extensions; _listView.SetEnabled(redirectionIsEnabled); _listView.makeItem = MakeItem; _listView.bindItem = BindItem; _listView.unbindItem = UnbindItem; _listView.itemsAdded += indices => { foreach (int i in indices) _extensions[i] = "ext"; _listView.RefreshItems(); SyncToSetting(); }; _listView.itemsRemoved += _ => SyncToSetting(); _listView.itemIndexChanged += (_, _) => SyncToSetting(); _resetFileTypesBtn = template.Q