/// <summary>
        /// Raises the MouseDown event.
        /// </summary>
        /// <param name="e">A MouseEventArgs that contains the event data.</param>
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && ShowPlusMinus)
            {
                CTreeNode <T> toggleNode = null;
                this.Nodes.TraverseNodes(node => node.Visible && node.Nodes.Count > 0, node =>
                {
                    Point cursorLocation = e.Location;
                    cursorLocation.Offset(-AutoScrollPosition.X, -AutoScrollPosition.Y);
                    if (node.PlusMinus != null && node.PlusMinus.IsUnderMouse(cursorLocation))
                    {
                        toggleNode = node;
                    }
                });
                ClearSelection();
                if (toggleNode != null)
                {
                    toggleNode.Toggle();
                    if (SelectionMode != CTreeViewSelectionMode.None)
                    {
                        toggleNode.IsSelected = true;
                    }
                }
            }
            this.Focus();

            base.OnMouseDown(e);
        }
示例#2
0
    // 返回目标账号为dstAcc的层级串
    public string getCurLevelStr(string dstAcc)
    {
        if (!m_map.ContainsKey(dstAcc))
        {
            return("");
        }

        m_textBuilder.Remove(0, m_textBuilder.Length);

        CTreeNode      node = m_map[dstAcc];
        Stack <string> sk   = new Stack <string>();

        while (node != null)
        {
            if (node.Tag != null && sk.Count > 0)
            {
                URLParam param = (URLParam)node.Tag;
                sk.Push(Tool.genHyperlink(param));
            }
            else
            {
                sk.Push(node.Value);
            }

            node = node.Parent;
        }

        while (sk.Count > 0)
        {
            m_textBuilder.Append(sk.Pop());
            m_textBuilder.Append("&gt;");
        }
        return(m_textBuilder.ToString());
    }
示例#3
0
 private void AddNode(DataTable dtAll, int ParentId, CTreeNode treeNodeParent)
 {
     DataRow[] drs = dtAll.Select("ParentID=" + ParentId + "");
     if (drs.Length > 0)
     {
         foreach (DataRow item in drs)
         {
             if (item["TableNameRel"].ToString() == "Key")
             {
                 CTreeNode treeNode = new CTreeNode(new Label());
                 ((Label)treeNode.Control).Text      = item["TableName"].ToString();
                 ((Label)treeNode.Control).Width     = 100;
                 ((Label)treeNode.Control).AutoSize  = true;
                 ((Label)treeNode.Control).TextAlign = ContentAlignment.MiddleCenter;
                 treeNodeParent.Nodes.Add(treeNode);
                 AddNode(dtAll, int.Parse(item["Id"].ToString()), treeNode);
             }
             else
             {
                 CTreeNode treeNode = new CTreeNode(new DataGridView());
                 ((DataGridView)treeNode.Control).Columns.Add("1", "1");
                 ((DataGridView)treeNode.Control).Columns.Add("2", "2");
                 ((DataGridView)treeNode.Control).Rows.Add(new string[] { "a", "b" });
                 treeNodeParent.Nodes.Add(treeNode);
                 AddNode(dtAll, int.Parse(item["Id"].ToString()), treeNode);
             }
         }
     }
 }
示例#4
0
 public List <CTreeNode> GetUsedChildeList(CTreeNode node)
 {
     if (_branchUsedChildeList.ContainsKey(node) == false)
     {
         _branchUsedChildeList[node] = new List <CTreeNode>();
     }
     return(_branchUsedChildeList[node]);
 }
示例#5
0
        private void FrmTableRelationView_Load(object sender, EventArgs e)
        {
            IDBHelper helper = DataBaseManager.GetDbHelper(SqlType.SqlServer, GlobalHelp.ConfigConn);

            helper.CreateCommand("Select * from TableView order by ParentID");
            DataTable dt = helper.ExecuteQuery();

            dataGridView1.DataSource = dt;
            if (dt.Rows.Count == null || dt.Rows.Count == 0)
            {
                return;
            }
            cTreeView1.DrawStyle     = CTreeViewDrawStyle.VerticalDiagram;
            cTreeView1.ShowRootLines = false;

            DataTable dtParent = dt.Select("ParentId=0").CopyToDataTable();

            for (int i = 0; i < dtParent.Rows.Count; i++)
            {
                CTreeNode treeNode = new CTreeNode(new Label());
                ((Label)treeNode.Control).Text      = dtParent.Rows[i]["TableName"].ToString();
                ((Label)treeNode.Control).Width     = 100;
                ((Label)treeNode.Control).AutoSize  = true;
                ((Label)treeNode.Control).TextAlign = ContentAlignment.MiddleCenter;
                cTreeView1.Nodes.Add(treeNode);
                AddNode(dt, int.Parse(dtParent.Rows[i]["Id"].ToString()), treeNode);
            }

            //cTreeView1.Nodes.Add(new CTreeNode(new Label()));
            //((Label)cTreeView1.Nodes[0].Control).Text = "附属设施关系";
            //((Label)cTreeView1.Nodes[0].Control).Width = 100;
            //((Label)cTreeView1.Nodes[0].Control).AutoSize = true;
            //((Label)cTreeView1.Nodes[0].Control).TextAlign = ContentAlignment.MiddleCenter;

            //cTreeView1.Nodes[0].Nodes.Add(new CTreeNode(new Label()));
            //((Label)cTreeView1.Nodes[0].Nodes[0].Control).Text = "RuleId_DetailId";
            //((Label)cTreeView1.Nodes[0].Nodes[0].Control).Width = 100;
            //((Label)cTreeView1.Nodes[0].Nodes[0].Control).AutoSize = true;
            //((Label)cTreeView1.Nodes[0].Nodes[0].Control).TextAlign = ContentAlignment.MiddleCenter;

            ////下面添加两个GridView
            //cTreeView1.Nodes[0].Nodes[0].Nodes.Add(new CTreeNode(new DataGridView()));
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[0].Control).Columns.Add("1", "1");
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[0].Control).Columns.Add("2", "2");
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[0].Control).Rows.Add(new string[] { "a", "b" });

            //cTreeView1.Nodes[0].Nodes[0].Nodes.Add(new CTreeNode(new DataGridView()));
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Control).Columns.Add("1", "1");
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Control).Columns.Add("2", "2");
            //((DataGridView)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Control).Rows.Add(new string[] { "a", "b" });

            //cTreeView1.Nodes[0].Nodes[0].Nodes[1].Nodes.Add(new CTreeNode(new Label()));
            //((Label)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[0].Control).Text = "RuleId_DetailId";
            //((Label)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[0].Control).Width = 100;
            //((Label)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[0].Control).AutoSize = true;
            //((Label)cTreeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[0].Control).TextAlign = ContentAlignment.MiddleCenter;
        }
示例#6
0
        private void Form1_Load(object sender, EventArgs e)
        {
            cTreeView2.BeginUpdate();
            cTreeView2.Nodes.Add(new CTreeNode(new Class4("root")));
            for (int i = 0; i < 2; i++)
            {
                cTreeView2.Nodes[0].Nodes.Add(new CTreeNode(new Class4("child " + i)));
                for (int j = 0; j < 3; j++)
                {
                    cTreeView2.Nodes[0].Nodes[i].Nodes.Add(new CTreeNode(new Class4("child " + i + "-" + j)));
                    for (int k = 0; k < 3; k++)
                    {
                        cTreeView2.Nodes[0].Nodes[i].Nodes[j].Nodes.Add(new CTreeNode(new Class4("child " + i + "-" + j + "-" + k)));
                    }
                }
            }
            cTreeView2.EndUpdate();

            cTreeView3.BeginUpdate();
            cTreeView3.Nodes.Add(new CTreeNode("", new Class1("")));
            cTreeView3.Nodes.Add(new CTreeNode("", new Class3()));
            cTreeView3.Nodes[1].Nodes.Add(new CTreeNode("", new Class1("")));
            CTreeNode n1 = new CTreeNode("", new Class1(""));

            n1.Nodes.Add(new CTreeNode("", new Class1("")));
            n1.Nodes.Add(new CTreeNode("", new Class2("")));
            cTreeView3.Nodes[0].Nodes.Add(n1);
            cTreeView3.Nodes[0].Nodes.Add(new CTreeNode("", new Class2("")));
            cTreeView3.Nodes[0].Nodes[1].Nodes.Add(new CTreeNode("", new Class1("")));
            cTreeView3.Nodes[0].Nodes[1].Nodes.Add(new CTreeNode("", new Class1("")));
            cTreeView3.Nodes[0].Nodes[1].Nodes.Add(new CTreeNode("", new Class1("")));
            cTreeView3.EndUpdate();

            cTreeView1.BeginUpdate();
            cTreeView1.Nodes.Add(new CTreeNode(new Button()));
            ((Button)cTreeView1.Nodes[0].Control).Text        = "button";
            ((Button)cTreeView1.Nodes[0].Control).MouseClick += new MouseEventHandler((sender1, e1) => { MessageBox.Show("MouseClick!"); });
            cTreeView1.Nodes.Add(new CTreeNode(new CheckBox()));
            ((CheckBox)cTreeView1.Nodes[1].Control).Checked = true;
            ((CheckBox)cTreeView1.Nodes[1].Control).Width   = 15;
            cTreeView1.Nodes[0].Nodes.Add(new CTreeNode(new ComboBox()));
            ((ComboBox)cTreeView1.Nodes[0].Nodes[0].Control).Items.AddRange(new string[] { "1", "2", "3" });
            cTreeView1.Nodes[0].Nodes.Add(new CTreeNode(new RadioButton()));
            ((RadioButton)cTreeView1.Nodes[0].Nodes[1].Control).Width   = 15;
            ((RadioButton)cTreeView1.Nodes[0].Nodes[1].Control).Checked = true;
            cTreeView1.Nodes[0].Nodes[1].Nodes.Add(new CTreeNode(new ProgressBar()));
            ((ProgressBar)cTreeView1.Nodes[0].Nodes[1].Nodes[0].Control).Value = 20;
            cTreeView1.Nodes[1].Nodes.Add(new CTreeNode(new TextBox()));
            ((TextBox)cTreeView1.Nodes[1].Nodes[0].Control).Text = "text box";
            cTreeView1.Nodes[1].Nodes.Add(new CTreeNode(new ListBox()));
            ((ListBox)cTreeView1.Nodes[1].Nodes[1].Control).Items.AddRange(new string[] { "1", "2", "3", "4", "5", "6", "7", "8" });
            cTreeView1.Nodes[1].Nodes[1].Nodes.Add(new CTreeNode(new DataGridView()));
            ((DataGridView)cTreeView1.Nodes[1].Nodes[1].Nodes[0].Control).Columns.Add("1", "1");
            ((DataGridView)cTreeView1.Nodes[1].Nodes[1].Nodes[0].Control).Columns.Add("2", "2");
            ((DataGridView)cTreeView1.Nodes[1].Nodes[1].Nodes[0].Control).Rows.Add(new string[] { "a", "b" });
            cTreeView1.EndUpdate();
        }
示例#7
0
 private void SetSelSp(CTreeNode node)
 {
     if (node.type == CTreeNode.NodeType.Branch)
     {
         spSelected.transform.localPosition = new Vector3(PaddingLeft, spSelected.height + 100, 0);
     }
     else
     {
         spSelected.transform.localPosition = node.tran.localPosition;
     }
 }
        private void WriteNodeLink(TreeView treeView, TreeNode item, HtmlTextWriter writer)
        {
            writer.WriteBeginTag("a");

            if (!String.IsNullOrEmpty(item.NavigateUrl))
            {
                writer.WriteAttribute("href", Extender.ResolveUrl(item.NavigateUrl));
                if (item is CTreeNode)
                {
                    CTreeNode node = (CTreeNode)item;
                    if (node.OnClientClick.Length > 0)
                    {
                        writer.WriteAttribute("onclick", node.OnClientClick);
                    }
                }
            }
            else
            {
                string codePrefix = "";
                if (item.SelectAction == TreeNodeSelectAction.Select)
                {
                    codePrefix = "s";
                }
                else if (item.SelectAction == TreeNodeSelectAction.SelectExpand)
                {
                    codePrefix = "e";
                }
                else if (item.PopulateOnDemand)
                {
                    codePrefix = "p";
                }
                writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(treeView, codePrefix + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true));
            }

            WebControlAdapterExtender.WriteTargetAttribute(writer, item.Target);

            if (!String.IsNullOrEmpty(item.ToolTip))
            {
                writer.WriteAttribute("title", item.ToolTip);
            }
            else if (!String.IsNullOrEmpty(treeView.ToolTip))
            {
                writer.WriteAttribute("title", treeView.ToolTip);
            }
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.Indent++;
            writer.WriteLine();

            WriteNodeImage(treeView, item, writer);
            writer.Write(item.Text);

            writer.Indent--;
            writer.WriteEndTag("a");
        }
示例#9
0
        public void RollTo(CTreeNode node)
        {
            float y = -node.y;

            if (TotalHeight > this.height && y > TotalHeight - this.height)
            {
                y = TotalHeight - this.height;
            }
            //contentPos.y = y;
            //maskOffset.y = -y;
            Bar.value = y / (TotalHeight - this.height);
        }
示例#10
0
 protected void OnItemPress(GameObject go, bool isPressed, bool needEvent)
 {
     if (isPressed)
     {
         CTreeNode c = go.GetDisplayObj() as CTreeNode;
         SelectedItem = c;
         if (OnItemSelect != null && needEvent)
         {
             OnItemSelect(c);
             SetSelSp(c);
         }
     }
 }
示例#11
0
 /// <summary>
 ///     数型目录的装配
 /// </summary>
 /// <param name="CRoot"></param>
 /// <param name="RootTreeNode"></param>
 private void FillTreeView(CTreeNode CRoot, TreeNode RootTreeNode)
 {
     foreach (var child in CRoot.Children)
     {
         TreeNode ChildTreeNode = new TreeNode(child.Text);
         if (child.Children.Count == 0)
         {
             ChildTreeNode.Tag = child.Path;
         }
         FillTreeView(child, ChildTreeNode);
         RootTreeNode.Nodes.Add(ChildTreeNode);
     }
 }
示例#12
0
 /// <summary>
 ///     数型目录的装配
 /// </summary>
 /// <param name="cRoot"></param>
 /// <param name="rootTreeNode"></param>
 private void FillTreeView(CTreeNode cRoot, TreeNode rootTreeNode)
 {
     foreach (var child in cRoot.Children)
     {
         var childTreeNode = new TreeNode(child.Text);
         if (child.Children.Count == 0)
         {
             childTreeNode.Tag = child.Path;
         }
         FillTreeView(child, childTreeNode);
         rootTreeNode.Nodes.Add(childTreeNode);
     }
 }
        /// <summary>
        /// Retrieves the tree node that is at the specified point.
        /// </summary>
        /// <param name="pt">The Point to evaluate and retrieve the node from.</param>
        /// <returns>The CTreeNode<T> at the specified point, in client coordinates, or null if there is no node at that location.</returns>
        public CTreeNode <T> GetNodeAt(Point pt)
        {
            bool          success     = false;
            CTreeNode <T> nodeAtPoint = null;

            Nodes.TraverseNodes(node => node.Visible && !success, node =>
            {
                if (node.Bounds.Contains(pt))
                {
                    nodeAtPoint = node;
                    success     = true;
                }
            });
            return(nodeAtPoint);
        }
示例#14
0
 /// <summary>
 ///     从外部文件中获取Options列表
 /// </summary>
 public static CTreeNode LoadDefines()
 {
     var definelist = new List<ConfigurationFileOption.Define>();
     definelist = Utility.LoadObjFromXml<List<ConfigurationFileOption.Define>>(DefineFilename);
     definelist.Sort((x, y) => { return x.Path.CompareTo(y.Path); });
     //Root Node
     var root = new CTreeNode(string.Empty);
     foreach (var item in definelist)
     {
         Debug.WriteLine(item.Path);
         CTreeNode.AddToRootNode(root, item.Path);
         ConfigurationItemDictionary.Add(item.Path, item);
     }
     return root;
 }
示例#15
0
 private void RecycleBranchItem(CTreeNode node)
 {
     if (_branchUsedList.Contains(node))
     {
         _branchUsedList.Remove(node);
     }
     if (_branchPool.Contains(node) == false)
     {
         _branchPool.Add(node);
     }
     node.data.isOpen = false;
     node.SetParent(Recycle);
     node.tran.localPosition = Vector3.zero;
     node.SetActive(false);
     CheckOpenAndResetChilde(node);
 }
        private bool IsExpandable(TreeNode item)
        {
            if (!Page.IsPostBack)
            {
                if ((item != null) && (item is CTreeNode))
                {
                    CTreeNode node = item as CTreeNode;
                    if (!node.HasVisibleChildren)
                    {
                        return(false);
                    }
                }
            }

            return(HasChildren(item) || ((item != null) && item.PopulateOnDemand));
        }
示例#17
0
        int MaxDepth()
        {
            int       iDepth, iMax = 1;
            CTreeNode pChild = FirstChild();

            while (pChild != null)
            {
                iDepth = pChild.MaxDepth() + 1;

                if (iDepth > iMax)
                {
                    iMax = iDepth;
                }
            }

            return(iMax);
        }
示例#18
0
 protected void OnItemHover(object go, bool isOver)
 {
     if (isOver)
     {
         CTreeNode node = ((GameObject)go).GetDisplayObj() as CTreeNode;
         //if (node.type == CTreeNode.NodeType.Branch) {
         Overlay.SetDimensions(branchWidth, branchHeight);
         //} else {
         //    Overlay.SetDimensions(leafWidth, leafHeight);
         //}
         Overlay.transform.localPosition = ((GameObject)go).transform.localPosition;
     }
     else
     {
         Overlay.transform.localPosition = new Vector3(PaddingLeft, Overlay.height + 100, 0);
     }
 }
示例#19
0
 protected void OnItemPress(object go, bool isPressed)
 {
     if (isPressed)
     {
         CTreeNode c = ((GameObject)go).GetDisplayObj() as CTreeNode;
         SetSelectedItem(c);
         if (c.type == CTreeNode.NodeType.Branch)
         {
             RollTo(c);
         }
         if (OnItemSelect != null)
         {
             OnItemSelect(c);
             SetSelSp(c);
         }
     }
 }
示例#20
0
    // 添加根账号
    public void addRootAcc(string rootAcc, URLParam param = null)
    {
        reset();
        if (m_tree.Nodes.Count > 0)
        {
            LOGW.Info("addRootAcc错误........");
            return;
        }

        CTreeNode node = new CTreeNode();

        node.Value = rootAcc;
        node.Tag   = param;
        if (param != null)
        {
            param.m_text      = node.Value;
            param.m_className = "cAgentLevelStr";
        }
        m_tree.Nodes.Add(node);
        m_map.Add(rootAcc, node);
    }
示例#21
0
    // 添加某个指定账号的下级账号
    // owner指定账号 subAcc下级账号
    public void addSub(string owner, string subAcc, URLParam param = null)
    {
        if (!m_map.ContainsKey(owner))
        {
            return;
        }

        if (m_map.ContainsKey(subAcc))
        {
            return;
        }

        bool      exist = false;
        CTreeNode node  = m_map[owner];

        foreach (CTreeNode child in node.ChildNodes.Values)
        {
            if (child.Value == subAcc)
            {
                exist = true;
                break;
            }
        }

        if (!exist)
        {
            CTreeNode n = new CTreeNode();
            n.Value = subAcc;
            n.Tag   = param;
            if (param != null)
            {
                param.m_text      = n.Value;
                param.m_className = "cAgentLevelStr";
            }
            node.ChildNodes.Add(n);
            m_map.Add(subAcc, n);
        }
    }
示例#22
0
        public CTreeNode(CTreeNode pNode, ENodeCreate eFlag)
        {
            CTreeNode pPrev, pPost;

            m_pChild = null;

            switch (eFlag)
            {
            case ENodeCreate.ENODE_FIRST_CHILD:
                m_pParent = pNode;

                if (pNode.m_pChild != null)
                {
                    pPost = pNode.m_pChild;
                    pPrev = pNode.m_pChild.m_pLeftBrother;
                    pPrev.m_pRightBrother = this;
                    pPost.m_pLeftBrother  = this;
                    m_pRightBrother       = pPost;
                    m_pLeftBrother        = pPrev;
                    pNode.m_pChild        = this;
                }
                else
                {
                    m_pLeftBrother  = this;
                    m_pRightBrother = this;
                    pNode.m_pChild  = this;
                }

                break;

            case ENodeCreate.ENODE_LAST_CHILD:
                m_pParent = pNode;

                if (pNode.m_pChild != null)
                {
                    pPost = pNode.m_pChild;
                    pPrev = pNode.m_pChild.m_pLeftBrother;
                    pPrev.m_pRightBrother = this;
                    pPost.m_pLeftBrother  = this;
                    m_pRightBrother       = pPost;
                    m_pLeftBrother        = pPrev;
                }
                else
                {
                    m_pLeftBrother  = this;
                    m_pRightBrother = this;
                    pNode.m_pChild  = this;
                }

                break;

            case ENodeCreate.ENODE_RIGHT_BROTHER:
                m_pParent       = pNode.m_pParent;
                m_pRightBrother = pNode.m_pRightBrother;
                m_pLeftBrother  = pNode;
                pNode.m_pRightBrother.m_pLeftBrother = this;
                pNode.m_pRightBrother = this;

                break;

            case ENodeCreate.ENODE_LEFT_BROTHER:
                m_pParent       = pNode.m_pParent;
                m_pLeftBrother  = pNode.m_pLeftBrother;
                m_pRightBrother = pNode;
                pNode.m_pLeftBrother.m_pRightBrother = this;
                pNode.m_pLeftBrother = this;

                if (m_pParent != null && m_pParent.m_pChild == pNode)
                {
                    m_pParent.m_pChild = this;
                }

                break;
            }
        }
示例#23
0
 public void Add(CTreeNode node)
 {
     node.Parent = m_owner;
     m_nodes.Add(node.Value, node);
 }
示例#24
0
 public CTreeNodeCollection(CTreeNode owner)
 {
     m_owner = owner;
 }
示例#25
0
        private void CheckOpenAndResetChilde(CTreeNode branchItem)
        {
            int           offX       = 10;
            CTreeNodeData parentData = branchItem.data.parent;;

            while (parentData != null)
            {
                offX      += 10;
                parentData = parentData.parent;
            }
            int chlidLen = 0;

            if (branchItem.data.isOpen)
            {
                int startIndex = chlidLen;
                if (branchItem.data.child != null)
                {
                    chlidLen += branchItem.data.child.Count;
                }
                for (int n = 0; (n + startIndex) < chlidLen; n++)
                {
                    CTreeNode child;
                    var       childeList = GetUsedChildeList(branchItem);
                    if ((n + startIndex) < childeList.Count)
                    {
                        child = childeList[n + startIndex];
                    }
                    else
                    {
                        child = GetBranchItem();
                        childeList.Add(child);
                    }
                    if (_branchUsedList.Contains(child) == false)
                    {
                        _branchUsedList.Add(child);
                    }
                    child.name = "Item" + n;
                    child.SetParent(Content.transform);
                    child.SetActive(true);
                    child.data = branchItem.data.child[n];
                    float childY;
                    childY = -TotalHeight;
                    child.tran.localPosition = new Vector3(offX, childY, 0);

                    UIEventListener childListener = UIEventListener.Get(child.go);
                    childListener.onHover = OnItemHover;
                    childListener.onPress = OnItemPress;
                    TotalHeight          += _branchHeight + branchGapU;
                    CheckOpenAndResetChilde(child);
                }
            }
            else
            {
                var childeList = GetUsedChildeList(branchItem);
                for (int n = 0, len = childeList.Count; n < len; n++)
                {
                    RecycleBranchItem(childeList[n]);
                }
                childeList.Clear();
            }
        }
示例#26
0
 public void SetSelectedItem(CTreeNode node)
 {
     node.data.isOpen = !node.data.isOpen;
     ResetItems();
 }