127 lines
4.3 KiB
C#
127 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Aisu.SIM1.Face.Models;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
|
|
{
|
|
/// <summary>
|
|
/// MVP 用户列表窗口。
|
|
/// </summary>
|
|
public sealed class FaceDetectionDemoUserList : MonoBehaviour
|
|
{
|
|
[SerializeField] private Transform m_content; // 列表容器。
|
|
[SerializeField] private Font m_font; // UI 字体。
|
|
|
|
private Action<int> m_deleteHandler; // 删除回调。
|
|
|
|
/// <summary>
|
|
/// 绑定 UI。
|
|
/// </summary>
|
|
public void Bind(Transform content, Font font, Action<int> deleteHandler)
|
|
{
|
|
m_content = content;
|
|
m_font = font;
|
|
m_deleteHandler = deleteHandler;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新用户列表。
|
|
/// </summary>
|
|
public void SetUsers(IList<FaceUserInfo> users)
|
|
{
|
|
Clear();
|
|
if (users == null || users.Count == 0)
|
|
{
|
|
AddText("暂无用户数据");
|
|
return;
|
|
}
|
|
|
|
for (var i = 0; i < users.Count; i++)
|
|
{
|
|
AddRow(users[i]);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清空列表。
|
|
/// </summary>
|
|
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<Image>().color = new Color(0.94f, 0.96f, 0.98f);
|
|
var layout = row.GetComponent<HorizontalLayoutGroup>();
|
|
layout.padding = new RectOffset(8, 8, 6, 6);
|
|
layout.spacing = 8;
|
|
layout.childControlWidth = true;
|
|
layout.childForceExpandWidth = false;
|
|
row.AddComponent<LayoutElement>().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<Text>();
|
|
label.font = m_font;
|
|
label.fontSize = 22;
|
|
label.color = Color.black;
|
|
label.alignment = TextAnchor.MiddleLeft;
|
|
label.text = text;
|
|
go.AddComponent<LayoutElement>().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<Image>().color = new Color(0.82f, 0.88f, 0.95f);
|
|
var button = go.GetComponent<Button>();
|
|
button.onClick.AddListener(action);
|
|
var layout = go.AddComponent<LayoutElement>();
|
|
layout.preferredWidth = 92;
|
|
layout.preferredHeight = 34;
|
|
|
|
var labelGo = new GameObject("Text", typeof(RectTransform), typeof(Text));
|
|
labelGo.transform.SetParent(go.transform, false);
|
|
var rect = labelGo.GetComponent<RectTransform>();
|
|
rect.anchorMin = Vector2.zero;
|
|
rect.anchorMax = Vector2.one;
|
|
rect.offsetMin = Vector2.zero;
|
|
rect.offsetMax = Vector2.zero;
|
|
var label = labelGo.GetComponent<Text>();
|
|
label.font = m_font;
|
|
label.fontSize = 20;
|
|
label.color = Color.black;
|
|
label.alignment = TextAnchor.MiddleCenter;
|
|
label.text = text;
|
|
}
|
|
}
|
|
}
|
|
|
|
|