using System; using UIWidgets; using UnityEngine; using UnityEngine.UI; namespace UIWidgetsSamples.ToDoList { public class ToDoListViewComponent : ListViewItem, IListViewItemHeight { [SerializeField] public Toggle Toggle; [SerializeField] public Text Task; [NonSerialized] public ToDoListItem Item; private LayoutGroup layoutGroup; public float Height { get { return CalculateHeight(); } } public LayoutGroup LayoutGroup { get { if (layoutGroup == null) { layoutGroup = GetComponent(); } return layoutGroup; } } protected override void Start() { base.Start(); Toggle.onValueChanged.AddListener(OnToggle); } private void OnToggle(bool toggle) { Item.Done = toggle; } public void SetData(ToDoListItem item) { Item = item; if (Item == null) { Toggle.isOn = false; Task.text = string.Empty; } else { Toggle.isOn = Item.Done; Task.text = Item.Task.Replace("\\n", "\n"); } } private float CalculateHeight() { base.gameObject.SetActive(true); LayoutGroup.CalculateLayoutInputHorizontal(); LayoutGroup.SetLayoutHorizontal(); LayoutGroup.CalculateLayoutInputVertical(); LayoutGroup.SetLayoutVertical(); float preferredHeight = LayoutUtility.GetPreferredHeight(base.transform as RectTransform); base.gameObject.SetActive(false); return preferredHeight; } protected override void OnDestroy() { base.OnDestroy(); if (Toggle != null) { Toggle.onValueChanged.RemoveListener(OnToggle); } } } }