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