diff --git a/UiToolkit.meta b/UiToolkit.meta new file mode 100644 index 0000000..e6b2986 --- /dev/null +++ b/UiToolkit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c452ac88625d6c46a12fb35375d8019 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UiToolkit/MultiSelectChips.meta b/UiToolkit/MultiSelectChips.meta new file mode 100644 index 0000000..21b9cbc --- /dev/null +++ b/UiToolkit/MultiSelectChips.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1091fdb6a84af3488e7772b53a5f875 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UiToolkit/MultiSelectChips/MultiSelectChips.cs b/UiToolkit/MultiSelectChips/MultiSelectChips.cs new file mode 100644 index 0000000..eb22989 --- /dev/null +++ b/UiToolkit/MultiSelectChips/MultiSelectChips.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; +using System; +using System.Collections; +using System.ComponentModel; + +public class MultiSelectChips : VisualElement +{ + public string LabelText + { + get => label.text; + set + { + if (!string.IsNullOrEmpty(value)) + { + if (label == null) + { + InitLabel(); + } + + label.text = value; + } + else if (label != null) + { + label.RemoveFromHierarchy(); + label = null; + } + } + } + + public IList ItemsSource + { + get => itemsSource; + + set + { + itemsSource = value; + UpdateItems(); + } + } + + private Label label; + private AsyncOperationHandle uxmlHandle, itemUxmlHandle; + + private VisualTreeAsset itemPrefab; + + private IList itemsSource; + + public new class UxmlFactory : UxmlFactory + { + + } + + public new class UxmlTraits : VisualElement.UxmlTraits + { + private readonly UxmlStringAttributeDescription label; + + public UxmlTraits() + { + label = new() + { + name = "label" + }; + } + + public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) + { + base.Init(ve, bag, cc); + ((MultiSelectChips)ve).LabelText = label.GetValueFromBag(bag, cc); + } + } + + public MultiSelectChips() : base() + { + uxmlHandle = Addressables.LoadAssetAsync("NegUiToolkits/MultiSelectChips.uxml"); + itemUxmlHandle = Addressables.LoadAssetAsync("NegUiToolkits/MultiSelectChipsItem.uxml"); + uxmlHandle.Completed += OnUxmlLoaded; + itemUxmlHandle.Completed += OnItemUxmlLoaded; + } + + public void UpdateItems() + { + if (itemPrefab == null) + return; + } + + private void InitLabel() + { + label = new Label() + { + pickingMode = PickingMode.Ignore + }; + Add(label); + } + + private void OnUxmlLoaded(AsyncOperationHandle operation) + { + if (operation.Status == AsyncOperationStatus.Succeeded) + { + Add(operation.Result.Instantiate()); + Addressables.Release(uxmlHandle); + } + else + { + Debug.LogError($"Asset failed to load."); + } + } + + private void OnItemUxmlLoaded(AsyncOperationHandle operation) + { + + if (operation.Status == AsyncOperationStatus.Succeeded) + { + itemPrefab = operation.Result; + Addressables.Release(itemUxmlHandle); + UpdateItems(); + } + else + { + Debug.LogError($"Asset failed to load."); + } + } + + private void + +} \ No newline at end of file diff --git a/UiToolkit/MultiSelectChips/MultiSelectChips.cs.meta b/UiToolkit/MultiSelectChips/MultiSelectChips.cs.meta new file mode 100644 index 0000000..b4a9aa7 --- /dev/null +++ b/UiToolkit/MultiSelectChips/MultiSelectChips.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bbcd96ba00647146aac6667496c426d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UiToolkit/MultiSelectChips/MultiSelectChips.uxml b/UiToolkit/MultiSelectChips/MultiSelectChips.uxml new file mode 100644 index 0000000..1a24e53 --- /dev/null +++ b/UiToolkit/MultiSelectChips/MultiSelectChips.uxml @@ -0,0 +1,6 @@ + + + + + + diff --git a/UiToolkit/MultiSelectChips/MultiSelectChips.uxml.meta b/UiToolkit/MultiSelectChips/MultiSelectChips.uxml.meta new file mode 100644 index 0000000..41a759e --- /dev/null +++ b/UiToolkit/MultiSelectChips/MultiSelectChips.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 28ecbe3f92afaca4faeec3e9fb3af6a2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}