using UnityEngine.UIElements; namespace RosettaUI.UIToolkit { /// /// 複数のField要素からなる複合Field /// Rowとは異なり最初のラベルがプレフィックスレベルになり子供のFieldのサイズが固定される /// public class CompositeField : VisualElement { private static class UssClassName { public static readonly string UnityBaseField = BaseField.ussClassName; public static readonly string UnityBaseFieldLabel = BaseField.labelUssClassName; public static readonly string UnityBaseFieldNoLabelVariant = BaseField.noLabelVariantUssClassName; public static readonly string RosettaUI = "rosettaui"; public static readonly string CompositeField = RosettaUI + "-composite-field"; public static readonly string CompositeFieldContentContainer = CompositeField + "__content-container"; } #region Label ref: BaseField // ReSharper disable once InconsistentNaming public Label labelElement { get; private set; } // ReSharper disable once InconsistentNaming public string label { get => labelElement.text; set { if (labelElement.text != value) { labelElement.text = value; if (string.IsNullOrEmpty(labelElement.text)) { AddToClassList(UssClassName.UnityBaseFieldNoLabelVariant); labelElement.RemoveFromHierarchy(); } else { if (!Contains(labelElement)) { // Insert(0, labelElement); hierarchy.Insert(0, labelElement); RemoveFromClassList(UssClassName.UnityBaseFieldNoLabelVariant); } } } } } private void InitLabelElement() { labelElement = new Label(); // { focusable = true, tabIndex = -1 }; labelElement.AddToClassList(UssClassName.UnityBaseFieldLabel); } #endregion private readonly VisualElement _contentContainer; public override VisualElement contentContainer => _contentContainer; public CompositeField() { AddToClassList(UssClassName.UnityBaseField); AddToClassList(UssClassName.CompositeField); InitLabelElement(); _contentContainer = new VisualElement(); _contentContainer.AddToClassList(UssClassName.CompositeFieldContentContainer); hierarchy.Add(_contentContainer); } } }