/**************************************************************************** * 2019.4 GIDEONHE-HOMEPC ****************************************************************************/ using UniRx; using UnityEngine; using UniRx.Triggers; namespace QFramework.ThermalPower { public partial class UITreeNode : UIElement { public Color pointEnterColor; public Color pointExitColor; protected override void OnBeforeDestroy() { } private TreeNodeItem _treeNodeItemModel; /// /// 初始化方法 /// /// 节点数据模型 public void Init(TreeNodeItem treeNodeItem) { _treeNodeItemModel = treeNodeItem; string conent = _treeNodeItemModel.Content.Value; if (conent.Contains("%")) { conent = conent.Split('%')[1]; } else if (conent.Contains("@")) { conent = conent.Split('@')[1]; } //监测(监听)内容数据 _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.LocalPosition(indentDistance, 0); ContentText.LocalPosition(ContentText.GetLocalPosition().x + indentDistance, 0); //Button.LocalPosition(ContentText.GetLocalPosition().x + indentDistance, 0); Button.LocalPosition(ContentText.GetLocalPosition()); }); //如果没有子节点,隐藏Toggle if (treeNodeItem.ChildTreeNodeList.TreeNodeItems.Count == 0) { Toggle.Hide(); } else { Toggle.isOn = _treeNodeItemModel.ExPanded.Value; Toggle.onValueChanged.AddListener(on => _treeNodeItemModel.ExPanded.Value = on); //监测节点展开状态数据 _treeNodeItemModel.ExPanded.Subscribe(on => { if (on) { ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems, true); ExpandImg.Show(); RecoverImg.Hide(); Toggle.targetGraphic = ExpandImg; } else { ChangeChilderNodeItemState(treeNodeItem.ChildTreeNodeList.TreeNodeItems,false); ExpandImg.Hide(); RecoverImg.Show(); Toggle.targetGraphic = RecoverImg; } }); } //节点点击事件添加 //以下为示例 Button.GetComponent().onLeftClick.AddListener(() => NodeButtonLeftClick(treeNodeItem)); Button.GetComponent().onMiddleClick.AddListener(() => Debug.Log(_treeNodeItemModel.Content.Value + ":中键点击")); Button.GetComponent().onRightClick.AddListener(() => { Debug.Log(_treeNodeItemModel.Content.Value + ":右键点击"); }); Button.OnPointerEnterAsObservable().Subscribe(_ => { ContentText.color = pointEnterColor; }); Button.OnPointerExitAsObservable().Subscribe(_ => { ContentText.color = pointExitColor; }); } private void NodeButtonLeftClick(TreeNodeItem treeNodeItem) { Debug.Log(_treeNodeItemModel.Content.Value + ":左键点击"); } /// /// 切换节点状态 /// /// /// 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); } }); } } }