using System;
using UnityEngine.UIElements;
namespace RosettaUI.UIToolkit.Builder
{
public partial class UIToolkitBuilder
{
VisualElement Build_Label(Element element)
{
var ve = new Label();
Bind_Label(element, ve);
return ve;
}
private bool Bind_Label(Element element, VisualElement visualElement)
{
if (visualElement is not Label label || element is not LabelElement labelElement) return false;
labelElement.SubscribeValueOnUpdateCallOnce(label);
return true;
}
///
/// Fieldがもともと内包しているLabelとLabelElementをBindする
///
private void Bind_FieldLabel(ReadOnlyFieldElement fieldBaseElement, BaseField field)
{
Bind_ExistingLabel(fieldBaseElement.Label, field.labelElement, (str) => field.label = str);
}
///
/// 一部のVisualElementがもともと内包しているLabelとLabelElementをBindする
/// LabelはアクセスできないがBaseBoolField.textなどのように値を渡せる場合もある
///
private void Bind_ExistingLabel(LabelElement labelElement, Label label, Action setValueToView)
{
if (labelElement == null)
{
setValueToView(null);
}
else
{
labelElement.GetViewBridge().SubscribeValueOnUpdateCallOnce(setValueToView);
if (label != null)
{
SetupUIObj(labelElement, label);
}
}
}
}
}