コード例 #1
0
ファイル: frmTree.cs プロジェクト: totoki-kei/rcm
 public RcTreeNode Find(RcChipBase chip)
 {
     if (this.Chip == chip)
     {
         return(this);
     }
     else
     {
         foreach (TreeNode tn in this.Nodes)
         {
             RcTreeNode rctn = (RcTreeNode)tn;
             RcTreeNode ret  = rctn.Find(chip);
             if (ret != null)
             {
                 return(ret);
             }
         }
     }
     return(null);
 }
コード例 #2
0
ファイル: frmTree.cs プロジェクト: totoki-kei/rcm
        //	[Obsolete("未完成です。ずっと日の目を見ないかも。")]
        public void UpdateTree(RcChipBase updateRoot)
        {
            RcTreeNode root = ((RcTreeNode)tvModel.Nodes[0]).Find(updateRoot);

            if (root == null)
            {
                // まだないチップ -> 親をアップデート
                if (updateRoot.Parent == null)
                {
                    GenerateTree();
                    return;
                }
                Debug.WriteLine(updateRoot.Parent, "Parent Update");
                UpdateTree(updateRoot.Parent);
                root = ((RcTreeNode)tvModel.Nodes[0]).Find(updateRoot);
                if (root == null)
                {
                    throw new ArgumentException("ツリービューの更新に失敗しました。");
                }
            }

            int childCount = 0;

            for (int i = 0; i < RcData.ChildCapasity; i++)
            {
                if (updateRoot.Child[i] == null)
                {
                    continue;
                }
                childCount++;
                var childChip = updateRoot.Child[i];
                var childNode = root.Find(childChip);
                int nodeIndex = root.Nodes.IndexOf(childNode);

                if (childNode == null)
                {
                    // 追加
                    RcTreeNode n;
                    root.Nodes.Insert(i, n = new RcTreeNode(childChip));
                    Debug.WriteLine(n, "New node");
                }
                else if (nodeIndex != i)
                {
                    // 間にあるノードを削除
                    List <TreeNode> nodesToDelete = new List <TreeNode>();
                    for (int j = i; j < nodeIndex; j++)
                    {
                        nodesToDelete.Add(root.Nodes[j]);
                    }
                    foreach (var n in nodesToDelete)
                    {
                        root.Nodes.Remove(n);
                        Debug.WriteLine(n, "Delete node");
                    }
                }
            }

            Debug.WriteLine(root, "Update text");
            root.UpdateText();
            if (updateRoot is RcChipCowl)
            {
                root.Collapse();
            }
            else
            {
                root.Expand();
            }
        }