UINodeListCtrl.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /****************************************************************************
  2. * 2019.4 GIDEONHE-HOMEPC
  3. ****************************************************************************/
  4. using UniRx;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. namespace QFramework
  8. {
  9. public partial class UINodeListCtrl : UIElement
  10. {
  11. UITreeNodeGroup group;
  12. private ToggleGroup m_ToggleGroup;
  13. protected override void OnBeforeDestroy()
  14. {
  15. }
  16. /// <summary>
  17. /// 设置Group信息
  18. /// </summary>
  19. /// <param name="_group"></param>
  20. public void SetGroupInfo(ToggleGroup _group)
  21. {
  22. m_ToggleGroup = _group;
  23. }
  24. /// <summary>
  25. /// 格式化生成所有节点
  26. /// </summary>
  27. /// <param name="itemPrefab">节点模板GO</param>
  28. /// <param name="treeNodeListModel">节点列表数据模型</param>
  29. /// <param name="clearList">是否清空列表</param>
  30. public void GenerateTreeNodeList(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeList treeNodeListModel, string index = "", bool clearList = true)
  31. {
  32. if (clearList) this.DestroyAllChild();
  33. SorTreeNode(treeNodeListModel.TreeNodeItems);
  34. for (int i = 0; i < treeNodeListModel.TreeNodeItems.Count; i++)
  35. {
  36. TreeNodeItem item = treeNodeListModel.TreeNodeItems[i];
  37. if (string.IsNullOrEmpty(index))
  38. {
  39. item.index = (i + 1).ToString();
  40. }
  41. else
  42. {
  43. item.index = index + "." + (i + 1).ToString();
  44. }
  45. if (i == 0)
  46. {
  47. AddNodeItem(itemPrefab1, itemPrefab2, item, true);
  48. }
  49. else
  50. {
  51. AddNodeItem(itemPrefab1, itemPrefab2, item);
  52. }
  53. //如果子节点列表大于0,递归
  54. if (item.ChildTreeNodeList.TreeNodeItems.Count > 0)
  55. {
  56. GenerateTreeNodeList(itemPrefab1, itemPrefab2, item.ChildTreeNodeList, item.index,false);
  57. }
  58. }
  59. treeNodeListModel.TreeNodeItems.ForEach(item =>
  60. {
  61. });
  62. }
  63. /// <summary>
  64. /// 重新排序
  65. /// </summary>
  66. private void SorTreeNode(ReactiveCollection<TreeNodeItem> TreeNodeItems)
  67. {
  68. for (int i = 0; i < TreeNodeItems.Count; i++)
  69. {
  70. for (int j = 0; j < TreeNodeItems.Count - 1 - i; j++)
  71. {
  72. if (TreeNodeItems[j].id > TreeNodeItems[j + 1].id)
  73. {
  74. TreeNodeItem tmpItem = TreeNodeItems[j];
  75. TreeNodeItems[j] = TreeNodeItems[j + 1];
  76. TreeNodeItems[j + 1] = tmpItem;
  77. }
  78. }
  79. }
  80. }
  81. /// <summary>
  82. /// 生成节点
  83. /// </summary>
  84. /// <param name="itemPrefab">节点预设体(模板)</param>
  85. /// <param name="itemData">节点数据模型</param>
  86. private void AddNodeItem(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeItem itemData, bool expand = false)
  87. {
  88. group = transform.GetComponent<UITreeNodeGroup>();
  89. if (itemData.Layer.Value == 1)
  90. {
  91. UITreeNode01 tmpObj = itemPrefab1.Instantiate();
  92. tmpObj.Parent(this)
  93. .LocalIdentity()
  94. .ApplySelfTo(self => self.Init(itemData, m_ToggleGroup)); //初始化节点
  95. group.AddTreeNode(tmpObj);
  96. if (expand)
  97. {
  98. // tmpObj.selectToggle.isOn = true;
  99. }
  100. }
  101. else if (itemData.Layer.Value == 2)
  102. {
  103. // 初始化节点
  104. UITreeNode02 tmpNode = itemPrefab2.Instantiate()
  105. .Parent(this)
  106. .LocalIdentity()
  107. .ApplySelfTo(self => self.Init(itemData));
  108. tmpNode.name = itemData.Content.Value;
  109. // 添加
  110. }
  111. }
  112. }
  113. }