using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
///
/// UI项容器
///
public class ModuleUIItems : ModuleUIPanel where TItem : ModuleUIItem {
/// 模板资源
public readonly VisualTreeAsset templateAsset;
/// 生成UI项的函数
public readonly Func generate;
/// UI项列表
public List Items = new List();
/// 索引器
public TItem this[int index] { get => Items[index]; }
/// 计数
public int Count { get => Items != null ? Items.Count : 0; }
/// UI容器
public ModuleUIItems(VisualElement element, VisualTreeAsset templateAsset, Func generate) : base(element) {
this.templateAsset = templateAsset;
this.generate = generate;
}
/// 释放资源
public void Release() {
element.Clear();
Items.ForEach(obj => obj.Dispose());
Items = new List();
}
/// 创建UI项
public void Create(List datas, bool isClear = true) {
if (isClear) { Release(); }
datas.ForEach(Create);
}
/// 创建UI项
public void Create(TData data, bool isClear = false) {
if (isClear) { Release(); }
Create(data);
}
/// 创建UI项
public void Create(TData data) {
VisualElement element = templateAsset.Instantiate();
TItem item = generate(data, element);
this.element.Add(item.element);
Items.Add(item);
}
/// 遍历
public void ForEach(Action action) {
Items.ForEach(action);
}
/// 选择第一个
public void SelectFirst() {
if (Items.Count > 0) { Items[0].Select(); }
}
/// 选择最后一个
public void SelectFinally() {
if (Items.Count > 0) { Items[Count - 1].Select(); }
}
}
}