/**************************************************************************** * 2021.7 DESKTOP-CLH3E67 ****************************************************************************/ using UnityEngine; using UniRx; using UniRx.Triggers; namespace QFramework { public partial class UITreeNode02 : UIElement { /// /// 选中后的颜色 /// public Color m_SelectColor = Color.blue; /// /// 原始颜色 /// public Color m_PrimitiveColor = Color.white; protected override void OnBeforeDestroy() { } private TreeNodeItem _treeNodeItemModel; /// /// 初始化方法 /// /// 节点数据模型 public void Init(TreeNodeItem treeNodeItem) { _treeNodeItemModel = treeNodeItem; string conent = _treeNodeItemModel.Content.Value; conent = treeNodeItem.index + " " + _treeNodeItemModel.Content.Value; if (conent.Contains("%")) { conent = conent.Split('%')[0]; } else if (conent.Contains("@")) { conent = conent.Split('@')[0]; } //监测(监听)内容数据 _treeNodeItemModel.Content.Subscribe(content => contentText.text = conent); //根据数据模型的ShowHidden值监测,确定显示隐藏该Node _treeNodeItemModel.ShowHidden.Subscribe(value => { if (value) Show(); else Hide(); }); //根据数据模型的Layer值检测,改变Node位置 _treeNodeItemModel.Layer.Subscribe(layer => { var indentDistance = 15 * (layer - 1); }); //如果没有子节点,隐藏Toggle if (treeNodeItem.ChildTreeNodeList.TreeNodeItems.Count == 0) { //selectToggle.Hide(); for (int i = 0; i < selectToggle.transform.childCount; i++) selectToggle.transform.GetChild(i).gameObject.SetActive(false); } else { selectToggle.isOn = _treeNodeItemModel.ExPanded.Value; selectToggle.onValueChanged.AddListener(on => _treeNodeItemModel.ExPanded.Value = on); //监测节点展开状态数据 _treeNodeItemModel.ExPanded.Subscribe(on => { if (on) { ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems, true); ExpandImg.Show(); RecoverImg.Hide(); selectToggle.targetGraphic = ExpandImg; } else { ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems, false); ExpandImg.Hide(); RecoverImg.Show(); selectToggle.targetGraphic = RecoverImg; } }); } //节点点击事件添加 //以下为示例 clickButton.GetComponent().onLeftClick.AddListener(() => NodeButtonLeftClick(treeNodeItem)); } private void NodeButtonLeftClick(TreeNodeItem treeNodeItem) { //// 重置 contentText.color = m_SelectColor; } /// /// 切换节点状态 /// /// /// public void ChangeChilderNodeItemState(ReactiveCollection nodeList, bool hide = false) { nodeList.ForEach(item => { item.ShowHidden.Value = hide; if (hide == true && item.ExPanded.Value == false) return; if (item.ChildTreeNodeList.TreeNodeItems.Count != 0) { ChangeChilderNodeItemState(item.ChildTreeNodeList.TreeNodeItems, hide); } }); } /// /// 重置为原始状态 /// public void ResetToOriginalState() { // 颜色 contentText.color = m_PrimitiveColor; } } }