using System; using System.Collections.Generic; namespace XericUI.ReflectionUIGenerator { /// /// 单个成员的元数据数据结构 /// 纯数据描述 — 不持有反射信息(MemberInfo)和实例引用(TargetInstance) /// /// 数据的实际读写通过 IAvrgValueAccessorFactory 在 BuildMDVM 阶段创建的 IAvrgValueAccessor 完成。 /// 这使得同一个元数据模板可复用于 C# 反射对象、Material Shader 属性等不同数据源。 /// public class AvrgMemberMetaData { // ============ 基本标识 ============ /// 字段/属性名(或 Shader 属性名如 "_MainTex") public string MemberName { get; set; } /// UI 显示标签 public string LabelName { get; set; } /// 单位文本(如 "m/s") public string UnitLabelName { get; set; } /// 格式化字符串(如 "{0:F2}") public string FormatText { get; set; } /// 值类型 public Type ValueType { get; set; } /// /// 样式表命名空间(用于 SuperStyleSheet 样式查询) /// 默认 "default"。可由类级或字段级 [XuiavrgStyleNamespace] 覆写 /// public string StyleNamespace { get; set; } = "default"; // ============ UI 映射 ============ /// 功能标记 public XuiavrgFieldTag Tag { get; set; } = XuiavrgFieldTag.None; /// 标记索引 (同 Tag 多实例时区分) public int TagIndex { get; set; } /// 排序值 (越小越靠前) public int FieldOrder { get; set; } /// 编组路径 (以 "/" 分割层级) public string GroupPath { get; set; } /// 是否在 UI 中隐藏 public bool Hide { get; set; } // ============ 默认值与验证 ============ /// 默认值(用于 UI 初始化和回退参考) public object DefaultValue { get; set; } /// 属性检查依据标识(默认使用 ValueType.FullName) public string PropertyCheckKey { get; set; } /// 是否必填 public bool Required { get; set; } /// 是否不可为空 public bool NotEmpty { get; set; } /// 是否启用合理值范围检查 public bool ValidateReasonable { get; set; } /// 是否启用警告状态检查 public bool ValidateWarning { get; set; } /// 是否启用无效值状态检查 public bool ValidateInvalid { get; set; } /// Shader Range 属性下限(null 表示非 Range 属性) public float? RangeMin { get; set; } /// Shader Range 属性上限(null 表示非 Range 属性) public float? RangeMax { get; set; } // ============ 拆分属性支持 ============ /// /// 子属性路径(仅拆分属性有效) /// 用于从父值中访问子字段/属性,如 "x"、"y"、"width" /// public string PropertyPath { get; set; } /// /// 拆分子元数据列表 /// 由 [XuiavrgSplit] 特性填充 /// public List SubMetaDataList { get; set; } // ============ 预设选项 (Dropdown/ToggleGroup) ============ /// 预设选项列表 public IReadOnlyList PresetOptions { get; set; } /// 预设选项合并模式 public PresetOptionsMergeMode OptionsMergeMode { get; set; } // ============ 扩展 ============ /// 收集到的所有 IXuiavrgAttribute 列表 public List Attributes { get; set; } = new List(); // ============ ★ 核心变更 — 值访问器工厂 ============ /// /// 值访问器工厂 /// 在元数据提取阶段设置(持有 MemberInfo 或 Shader 属性信息) /// 在 BuildMDVM 阶段调用 CreateAccessor(targetInstance) 创建真正的读写通道 /// public IAvrgValueAccessorFactory AccessorFactory { get; set; } } }