示例#1
0
        void Core.IBuild.Build()
        {
            if (Ctrl.Current.Entries.Count > 1)
            {
                // 複数選択の場合
                treeView.BeginUpdate();
                _selectedNodes.Clear();
                Core.IEntry[] entries = new Core.IEntry[Ctrl.Current.Entries.Count];
                Ctrl.Current.Entries.CopyTo(entries, 0);
                foreach (Core.IEntry entry in entries)
                {
                    TreeNode node = TreeNodeBuilder.Find(this.Root, entry.Path);
                    if (node != null)
                    {
                        _selectedNodes.Add(node);
                    }
                }
                treeView.EndUpdate();
            }
            else
            {
                // 単数選択または選択無しの場合
                TreeNode    selected1 = null;
                Core.IEntry selEntry  = Core.Document.Current.SelectedEntry;
                if (selEntry != null)
                {
                    selected1 = TreeNodeBuilder.Find(this.Root, selEntry.Path);
                }

                TreeNode selected2 = _selectedNodes.Value;
                while (selected2 != null)
                {
                    if (selected2.Tag is TreeNodeBuilder)
                    {
                        break;
                    }
                    selected2 = selected2.Parent;
                }

                if (selected1 != selected2)
                {
                    if (selected1 != null)
                    {
                        _selectedNodes.Value = selected1;
                        selected1.EnsureVisible();
                    }
                    else
                    {
                        _selectedNodes.Value = null;
                        SelectNode(null, false);
                    }
                }
            }
        }
        public static TreeNode Find(TreeNodeBuilder root, int[] path)
        {
            TreeNode        found = null;
            TreeNodeBuilder it    = root;

            foreach (int id in path)
            {
                found = it.Find(id);
                if (found == null)
                {
                    return(null);
                }
                it = (TreeNodeBuilder)found.Tag;
            }
            return(found);
        }