/**************************************************************************** * 2019.4 GIDEONHE-HOMEPC ****************************************************************************/ using UniRx; using UnityEngine; using UnityEngine.UI; namespace QFramework { public partial class UINodeListCtrl : UIElement { UITreeNodeGroup group; private ToggleGroup m_ToggleGroup; protected override void OnBeforeDestroy() { } /// /// 设置Group信息 /// /// public void SetGroupInfo(ToggleGroup _group) { m_ToggleGroup = _group; } /// /// 格式化生成所有节点 /// /// 节点模板GO /// 节点列表数据模型 /// 是否清空列表 public void GenerateTreeNodeList(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeList treeNodeListModel, string index = "", bool clearList = true) { if (clearList) this.DestroyAllChild(); SorTreeNode(treeNodeListModel.TreeNodeItems); for (int i = 0; i < treeNodeListModel.TreeNodeItems.Count; i++) { TreeNodeItem item = treeNodeListModel.TreeNodeItems[i]; if (string.IsNullOrEmpty(index)) { item.index = (i + 1).ToString(); } else { item.index = index + "." + (i + 1).ToString(); } if (i == 0) { AddNodeItem(itemPrefab1, itemPrefab2, item, true); } else { AddNodeItem(itemPrefab1, itemPrefab2, item); } //如果子节点列表大于0,递归 if (item.ChildTreeNodeList.TreeNodeItems.Count > 0) { GenerateTreeNodeList(itemPrefab1, itemPrefab2, item.ChildTreeNodeList, item.index,false); } } treeNodeListModel.TreeNodeItems.ForEach(item => { }); } /// /// 重新排序 /// private void SorTreeNode(ReactiveCollection TreeNodeItems) { for (int i = 0; i < TreeNodeItems.Count; i++) { for (int j = 0; j < TreeNodeItems.Count - 1 - i; j++) { if (TreeNodeItems[j].id > TreeNodeItems[j + 1].id) { TreeNodeItem tmpItem = TreeNodeItems[j]; TreeNodeItems[j] = TreeNodeItems[j + 1]; TreeNodeItems[j + 1] = tmpItem; } } } } /// /// 生成节点 /// /// 节点预设体(模板) /// 节点数据模型 private void AddNodeItem(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeItem itemData, bool expand = false) { group = transform.GetComponent(); if (itemData.Layer.Value == 1) { UITreeNode01 tmpObj = itemPrefab1.Instantiate(); tmpObj.Parent(this) .LocalIdentity() .ApplySelfTo(self => self.Init(itemData, m_ToggleGroup)); //初始化节点 group.AddTreeNode(tmpObj); if (expand) { // tmpObj.selectToggle.isOn = true; } } else if (itemData.Layer.Value == 2) { // 初始化节点 UITreeNode02 tmpNode = itemPrefab2.Instantiate() .Parent(this) .LocalIdentity() .ApplySelfTo(self => self.Init(itemData)); tmpNode.name = itemData.Content.Value; // 添加 } } } }