/****************************************************************************
* 2019.4 GIDEONHE-HOMEPC
****************************************************************************/
using UniRx;
using UnityEngine;
using UnityEngine.UI;
namespace QFramework
{
public partial class UINodeListCtrl : UIElement
{
UITreeNodeGroup group;
private ToggleGroup m_ToggleGroup;
protected override void OnBeforeDestroy()
{
}
///
/// 设置Group信息
///
///
public void SetGroupInfo(ToggleGroup _group)
{
m_ToggleGroup = _group;
}
///
/// 格式化生成所有节点
///
/// 节点模板GO
/// 节点列表数据模型
/// 是否清空列表
public void GenerateTreeNodeList(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeList treeNodeListModel, string index = "", bool clearList = true)
{
if (clearList) this.DestroyAllChild();
SorTreeNode(treeNodeListModel.TreeNodeItems);
for (int i = 0; i < treeNodeListModel.TreeNodeItems.Count; i++)
{
TreeNodeItem item = treeNodeListModel.TreeNodeItems[i];
if (string.IsNullOrEmpty(index))
{
item.index = (i + 1).ToString();
}
else
{
item.index = index + "." + (i + 1).ToString();
}
if (i == 0)
{
AddNodeItem(itemPrefab1, itemPrefab2, item, true);
}
else
{
AddNodeItem(itemPrefab1, itemPrefab2, item);
}
//如果子节点列表大于0,递归
if (item.ChildTreeNodeList.TreeNodeItems.Count > 0)
{
GenerateTreeNodeList(itemPrefab1, itemPrefab2, item.ChildTreeNodeList, item.index,false);
}
}
treeNodeListModel.TreeNodeItems.ForEach(item =>
{
});
}
///
/// 重新排序
///
private void SorTreeNode(ReactiveCollection TreeNodeItems)
{
for (int i = 0; i < TreeNodeItems.Count; i++)
{
for (int j = 0; j < TreeNodeItems.Count - 1 - i; j++)
{
if (TreeNodeItems[j].id > TreeNodeItems[j + 1].id)
{
TreeNodeItem tmpItem = TreeNodeItems[j];
TreeNodeItems[j] = TreeNodeItems[j + 1];
TreeNodeItems[j + 1] = tmpItem;
}
}
}
}
///
/// 生成节点
///
/// 节点预设体(模板)
/// 节点数据模型
private void AddNodeItem(UITreeNode01 itemPrefab1, UITreeNode02 itemPrefab2, TreeNodeItem itemData, bool expand = false)
{
group = transform.GetComponent();
if (itemData.Layer.Value == 1)
{
UITreeNode01 tmpObj = itemPrefab1.Instantiate();
tmpObj.Parent(this)
.LocalIdentity()
.ApplySelfTo(self => self.Init(itemData, m_ToggleGroup)); //初始化节点
group.AddTreeNode(tmpObj);
if (expand)
{
// tmpObj.selectToggle.isOn = true;
}
}
else if (itemData.Layer.Value == 2)
{
// 初始化节点
UITreeNode02 tmpNode = itemPrefab2.Instantiate()
.Parent(this)
.LocalIdentity()
.ApplySelfTo(self => self.Init(itemData));
tmpNode.name = itemData.Content.Value;
// 添加
}
}
}
}