public System.Action <TreeNodeBase> OnSelectNodeItemChange; //当选择的树形节点改变时候 #region 根据给定的数据源创建树形链表结构 /// <summary> /// 创建树视图结构 /// </summary> /// <param name="items"></param> /// <param name="defaultSelectItem"> 默认选中哪一项</param> public virtual void CreateTreeView(List <TreeViewNodeInfor> items, int defaultSelectItem) { m_Index = 0; m_SelectItemIndex = -1; m_TempNode.Clear(); if (items == null || items.Count == 0) { m_Root = null; Debug.Log("CreateTreeView Fail, Node Data Source is Null "); return; } m_SelectItemIndex = defaultSelectItem; CreateRootNode(); RecordGroupNodeInfor(RootNodeName, m_Root); //记录根节点对应关系 for (int dex = 0; dex < items.Count; ++dex) { // Debug.Log("CreateTreeView dex=" + dex + ">>>" + items[dex]); CreateTreeNode(items[dex], ""); } SearchTreeToRecordTreeNode(); //搜索整棵树结构以便于记录相关数据 }
protected virtual void CreateRootNode() { m_Root = new TreeNodeBase(RootNodeName, null); //创建根节点 }
/// <summary> /// 记录节点 并设置正确的索引 /// </summary> /// <param name="node"></param> /// <param name="offset">每多一级分类则子类需要偏移一定距离</param> protected void RecordTreeNode(TreeNodeBase node, int offset) { m_AllNode.Add(node); node.SetIndex(m_Index, offset); ++m_Index; }
/// <summary> /// 创建本次遍历获取的叶子节点 /// </summary> /// <param name="parentPath"></param> /// <param name="item"></param> /// <param name="parentNode"></param> /// <param name="splitchar"></param> /// <returns></returns> protected virtual void CreateLeafNode(string parentPath, TreeViewNodeInfor item, TreeNodeBase parentNode, char splitchar) { //TreeViewNodeInfor_ActionNode nodeInfor = item as TreeViewNodeInfor_ActionNode; //parentPath = parentPath + nodeInfor.m_Arrangenment + splitchar; //当前需要创建的树节点的完整路径 //TreeNodeBase node = GetClassficationNodeByName(parentPath); //判断是否存在这个路径的节点 //if (node == null) //{ // node = new TreeNodeBase(nodeInfor.m_Arrangenment, parentNode); //创建当前节点 // RecordClassfication(parentPath, node); //记录当前创建的节点 //}//当前子目录不存在 }
/// <summary> /// 创建中间的一个组的父节点 后面会添加其他的叶子节点 /// </summary> /// <param name="parentPath">当前节点所属于的父节点路径</param> /// <param name="segmentStr">当前节点名称</param> /// <param name="parentNode">父节点</param> /// <param name="splitchar">分隔符</param> /// <returns></returns> protected virtual string CreateGroupNode(string parentPath, string segmentStr, TreeNodeBase parentNode, char splitchar) { parentPath = parentPath + segmentStr + splitchar; //当前需要创建的树节点的完整路径 TreeNodeBase node = GetGroupNodeByName(parentPath); //判断是否存在这个路径的节点 if (node == null) { node = new TreeNodeBase(segmentStr, parentNode); //创建当前节点 RecordGroupNodeInfor(parentPath, node); //记录当前创建的节点 }//当前子目录不存在 return(parentPath); }
public void AddChild(TreeNodeBase node) { node.m_ParentNode = this; m_ChildNodes.Add(node); }
public bool m_IsOpen = true; //是否是展开状态 #region 构造函数 protected TreeNodeBase() { m_NodeName = ""; m_ParentNode = null; m_ChildNodes = new List <TreeNodeBase>(); }