/****************************************************************************
* 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);
}
});
}
}
}