123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.U2D.Animation;
- using UnityEngine.UIElements;
-
- namespace UnityEditor.U2D.Animation.SceneOverlays
- {
- internal class SpriteSwapVisualElement : VisualElement
- {
- static class Styles
- {
- public const string selectorList = SpriteSwapOverlay.rootStyle + "__selector-list";
- public static string infoLabelHolder = SpriteSwapOverlay.rootStyle + "__info-label-holder";
- public static string infoLabelIcon = SpriteSwapOverlay.rootStyle + "__info-label-icon";
- public static string infoLabel = SpriteSwapOverlay.rootStyle + "__info-label";
- }
-
- VisualElement m_InfoLabelHolder;
- Image m_InfoIcon;
- Label m_InfoLabel;
- ListView m_ListView;
-
- public SpriteSwapVisualElement()
- {
- AddToClassList(SpriteSwapOverlay.rootStyle);
-
- m_InfoLabelHolder = new VisualElement();
- m_InfoLabelHolder.AddToClassList(Styles.infoLabelHolder);
- m_InfoIcon = new Image { image = EditorGUIUtility.IconContent("console.infoicon").image };
- m_InfoIcon.AddToClassList(Styles.infoLabelIcon);
- m_InfoLabel = new Label { text = TextContent.spriteSwapSelectSpriteResolver };
- m_InfoLabel.AddToClassList(Styles.infoLabel);
- m_InfoLabelHolder.Add(m_InfoIcon);
- m_InfoLabelHolder.Add(m_InfoLabel);
- Add(m_InfoLabelHolder);
-
- m_ListView = new ListView { virtualizationMethod = CollectionVirtualizationMethod.DynamicHeight };
- m_ListView.makeItem += MakeItem;
- m_ListView.bindItem += BindItem;
- m_ListView.unbindItem += UnbindItem;
- m_ListView.selectionChanged += OnSelectionChanged;
- m_ListView.AddToClassList(Styles.selectorList);
- Add(m_ListView);
-
- Add(new OverlayToolbar());
- }
-
- static VisualElement MakeItem() => new SpriteResolverSelector(new CategoryContainer(), new LabelContainer());
-
- void BindItem(VisualElement visualElement, int i)
- {
- if (m_ListView.itemsSource == null || m_ListView.itemsSource.Count <= i)
- return;
-
- var resolverSelector = (SpriteResolverSelector)visualElement;
- resolverSelector.SetSpriteResolver((SpriteResolver)m_ListView.itemsSource[i]);
- }
-
- void UnbindItem(VisualElement visualElement, int i)
- {
- if (m_ListView.itemsSource == null || m_ListView.itemsSource.Count <= i)
- return;
-
- var resolverSelector = (SpriteResolverSelector)visualElement;
- resolverSelector.SetSpriteResolver(null);
- }
-
- void OnSelectionChanged(IEnumerable<object> obj)
- {
- var index = m_ListView.selectedIndex;
- if (index == -1)
- return;
-
- var selector = (SpriteResolverSelector)m_ListView.GetRootElementForIndex(index);
- selector?.Select();
- }
-
- public void SetSpriteResolvers(SpriteResolver[] selection)
- {
- var isListVisible = selection is { Length: > 0 };
-
- m_InfoLabelHolder.style.display = isListVisible ? DisplayStyle.None : DisplayStyle.Flex;
- m_ListView.style.display = isListVisible ? DisplayStyle.Flex : DisplayStyle.None;
-
- if (isListVisible)
- {
- m_ListView.selectedIndex = -1;
- m_ListView.itemsSource = selection;
- m_ListView.Rebuild();
- }
- }
-
- public void OnSceneGUI()
- {
- if (m_ListView?.itemsSource == null)
- return;
-
- for (var i = 0; i < m_ListView.itemsSource.Count; i++)
- {
- var id = m_ListView.viewController.GetIdForIndex(i);
- var spriteResolverSelector = (SpriteResolverSelector)m_ListView.GetRootElementForId(id);
- spriteResolverSelector?.SceneUpdate();
- }
- }
-
- public void SetFiltered(bool isFiltered)
- {
- m_InfoLabel.text = isFiltered ? TextContent.spriteSwapFilteredContent : TextContent.spriteSwapSelectSpriteResolver;
- m_InfoIcon.style.display = isFiltered ? DisplayStyle.Flex : DisplayStyle.None;
- }
- }
- }
|