using System;
using System.Collections.Generic;
using Aisu.SIM1.Face.Models;
using UnityEngine;
using UnityEngine.UI;
namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
{
///
/// MVP 用户列表窗口。
///
public sealed class FaceDetectionDemoUserList : MonoBehaviour
{
[SerializeField] private Transform m_content; // 列表容器。
[SerializeField] private Font m_font; // UI 字体。
private Action m_deleteHandler; // 删除回调。
///
/// 绑定 UI。
///
public void Bind(Transform content, Font font, Action deleteHandler)
{
m_content = content;
m_font = font;
m_deleteHandler = deleteHandler;
}
///
/// 刷新用户列表。
///
public void SetUsers(IList users)
{
Clear();
if (users == null || users.Count == 0)
{
AddText("暂无用户数据");
return;
}
for (var i = 0; i < users.Count; i++)
{
AddRow(users[i]);
}
}
///
/// 清空列表。
///
public void Clear()
{
if (m_content == null)
{
return;
}
for (var i = m_content.childCount - 1; i >= 0; i--)
{
Destroy(m_content.GetChild(i).gameObject);
}
}
private void AddRow(FaceUserInfo user)
{
var row = new GameObject("User_" + user.UserId, typeof(RectTransform), typeof(HorizontalLayoutGroup), typeof(Image));
row.transform.SetParent(m_content, false);
row.GetComponent().color = new Color(0.94f, 0.96f, 0.98f);
var layout = row.GetComponent();
layout.padding = new RectOffset(8, 8, 6, 6);
layout.spacing = 8;
layout.childControlWidth = true;
layout.childForceExpandWidth = false;
row.AddComponent().preferredHeight = 44;
AddText(row.transform, $"ID: {user.UserId} 姓名: {user.UserName} 管理员: {user.IsAdmin}", 1f);
AddButton(row.transform, "删除", () => m_deleteHandler?.Invoke(user.UserId));
}
private void AddText(string text)
{
AddText(m_content, text, 1f);
}
private Text AddText(Transform parent, string text, float flexibleWidth)
{
var go = new GameObject("Text", typeof(RectTransform), typeof(Text));
go.transform.SetParent(parent, false);
var label = go.GetComponent();
label.font = m_font;
label.fontSize = 22;
label.color = Color.black;
label.alignment = TextAnchor.MiddleLeft;
label.text = text;
go.AddComponent().flexibleWidth = flexibleWidth;
return label;
}
private void AddButton(Transform parent, string text, UnityEngine.Events.UnityAction action)
{
var go = new GameObject(text, typeof(RectTransform), typeof(Image), typeof(Button));
go.transform.SetParent(parent, false);
go.GetComponent().color = new Color(0.82f, 0.88f, 0.95f);
var button = go.GetComponent