123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /****************************************************************************
- * 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;
- /// <summary>
- /// 初始化方法
- /// </summary>
- /// <param name="treeNodeItem">节点数据模型</param>
- 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<ClickButton>().onLeftClick.AddListener(() => NodeButtonLeftClick(treeNodeItem));
- Button.GetComponent<ClickButton>().onMiddleClick.AddListener(() => Debug.Log(_treeNodeItemModel.Content.Value + ":中键点击"));
- Button.GetComponent<ClickButton>().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 + ":左键点击");
- }
- /// <summary>
- /// 切换节点状态
- /// </summary>
- /// <param name="nodeList"></param>
- /// <param name="hide"></param>
- public void ChangeChilderNodeItemState(ReactiveCollection<TreeNodeItem> 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);
- }
- });
- }
- }
- }
|