Exemplo n.º 1
0
        private void tvModel_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
#if false
            RcTreeNode rcnode = (RcTreeNode)e.Node;

            RcChipBase c;
            c = RcChipBase.Parse(datasource, e.Label);

            if (c is RcChipCowl && Array.Exists(rcnode.Chip.Child, x => !(x is RcChipCowl)))
            {
                if (
                    MessageBox.Show("派生チップにカウル以外のチップが存在します。すべてカウルに変更しますか?", "ツリービュー編集", MessageBoxButtons.YesNo)
                    == DialogResult.Yes)
                {
                    for (int i = 0; i < RcData.ChildCapasity; i++)
                    {
                        rcnode.Chip.Child[i] = rcnode.Chip.Child[i].ChangeType(RcChipType.Cowl);
                    }
                }
                else
                {
                }
            }
#else
            e.CancelEdit = true;
#endif
        }
Exemplo n.º 2
0
        public void GenerateTree()
        {
            Debug.WriteLine("GenerateTree");
            initializing = true;
            tvModel.SuspendLayout();
            tvModel.Nodes.Clear();
            //var p = new Queue<RcChipBase>();
            //var q = new Queue<RcChipBase>();
            //var r = new Queue<RcTreeNode>();
            //RcChipBase w;
            //RcTreeNode n;
            RcTreeNode top = new RcTreeNode(datasource.model.root);

            //// ルートチップをキューに入れる
            //p.Enqueue(datasource.model.root);
            //q.Enqueue(datasource.model.root);

            //// qに対して、チップのツリーを展開していく
            //while(p.Count > 0){
            //    w = p.Dequeue();
            //    foreach(RcChipBase c in w.Child){
            //        if(c == null)break;
            //        q.Enqueue(c);
            //        p.Enqueue(c);
            //    }
            //    q.Enqueue(null);
            //}

            //// 展開されたチップリストからツリーを再構築
            //r.Enqueue(top = new RcTreeNode(q.Dequeue()));
            //while(q.Count > 0){
            //    w = q.Dequeue();
            //    if(w == null){
            //        if((n = r.Dequeue()).ChipType != RcChipType.Cowl)
            //            n.Expand();
            //    }
            //    else{
            //        n = new RcTreeNode(w);
            //        r.Enqueue(n);
            //        r.Peek().Nodes.Add(n);
            //    }
            //}

            tvModel.Nodes.Add(top);
            top.Expand();
            tvModel.ResumeLayout(true);

            initializing = false;
        }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
        //	[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();
            }
        }