UITreeNode02.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /****************************************************************************
  2. * 2021.7 DESKTOP-CLH3E67
  3. ****************************************************************************/
  4. using UnityEngine;
  5. using UniRx;
  6. using UniRx.Triggers;
  7. namespace QFramework
  8. {
  9. public partial class UITreeNode02 : UIElement
  10. {
  11. /// <summary>
  12. /// 选中后的颜色
  13. /// </summary>
  14. public Color m_SelectColor = Color.blue;
  15. /// <summary>
  16. /// 原始颜色
  17. /// </summary>
  18. public Color m_PrimitiveColor = Color.white;
  19. protected override void OnBeforeDestroy()
  20. {
  21. }
  22. private TreeNodeItem _treeNodeItemModel;
  23. /// <summary>
  24. /// 初始化方法
  25. /// </summary>
  26. /// <param name="treeNodeItem">节点数据模型</param>
  27. public void Init(TreeNodeItem treeNodeItem)
  28. {
  29. _treeNodeItemModel = treeNodeItem;
  30. string conent = _treeNodeItemModel.Content.Value;
  31. conent = treeNodeItem.index + " " + _treeNodeItemModel.Content.Value;
  32. if (conent.Contains("%"))
  33. {
  34. conent = conent.Split('%')[0];
  35. }
  36. else if (conent.Contains("@"))
  37. {
  38. conent = conent.Split('@')[0];
  39. }
  40. //监测(监听)内容数据
  41. _treeNodeItemModel.Content.Subscribe(content => contentText.text = conent);
  42. //根据数据模型的ShowHidden值监测,确定显示隐藏该Node
  43. _treeNodeItemModel.ShowHidden.Subscribe(value =>
  44. {
  45. if (value)
  46. Show();
  47. else
  48. Hide();
  49. });
  50. //根据数据模型的Layer值检测,改变Node位置
  51. _treeNodeItemModel.Layer.Subscribe(layer =>
  52. {
  53. var indentDistance = 15 * (layer - 1);
  54. });
  55. //如果没有子节点,隐藏Toggle
  56. if (treeNodeItem.ChildTreeNodeList.TreeNodeItems.Count == 0)
  57. {
  58. //selectToggle.Hide();
  59. for (int i = 0; i < selectToggle.transform.childCount; i++) selectToggle.transform.GetChild(i).gameObject.SetActive(false);
  60. }
  61. else
  62. {
  63. selectToggle.isOn = _treeNodeItemModel.ExPanded.Value;
  64. selectToggle.onValueChanged.AddListener(on => _treeNodeItemModel.ExPanded.Value = on);
  65. //监测节点展开状态数据
  66. _treeNodeItemModel.ExPanded.Subscribe(on =>
  67. {
  68. if (on)
  69. {
  70. ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems, true);
  71. ExpandImg.Show();
  72. RecoverImg.Hide();
  73. selectToggle.targetGraphic = ExpandImg;
  74. }
  75. else
  76. {
  77. ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems, false);
  78. ExpandImg.Hide();
  79. RecoverImg.Show();
  80. selectToggle.targetGraphic = RecoverImg;
  81. }
  82. });
  83. }
  84. //节点点击事件添加
  85. //以下为示例
  86. clickButton.GetComponent<ClickButton>().onLeftClick.AddListener(() => NodeButtonLeftClick(treeNodeItem));
  87. }
  88. private void NodeButtonLeftClick(TreeNodeItem treeNodeItem)
  89. {
  90. //// 重置
  91. contentText.color = m_SelectColor;
  92. }
  93. /// <summary>
  94. /// 切换节点状态
  95. /// </summary>
  96. /// <param name="nodeList"></param>
  97. /// <param name="hide"></param>
  98. public void ChangeChilderNodeItemState(ReactiveCollection<TreeNodeItem> nodeList, bool hide = false)
  99. {
  100. nodeList.ForEach(item =>
  101. {
  102. item.ShowHidden.Value = hide;
  103. if (hide == true && item.ExPanded.Value == false) return;
  104. if (item.ChildTreeNodeList.TreeNodeItems.Count != 0)
  105. {
  106. ChangeChilderNodeItemState(item.ChildTreeNodeList.TreeNodeItems, hide);
  107. }
  108. });
  109. }
  110. /// <summary>
  111. /// 重置为原始状态
  112. /// </summary>
  113. public void ResetToOriginalState()
  114. {
  115. // 颜色
  116. contentText.color = m_PrimitiveColor;
  117. }
  118. }
  119. }