public SignatureTreeViewModel(TreeViewModelBase parent, SignatureTreeItem value)
            : base(parent)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            _children         = new ObservableCollectionEx <TreeViewModelBase>();
            _readonlyChildren = new ReadOnlyObservableCollection <TreeViewModelBase>(_children);

            this.Value = value;
        }
示例#2
0
        private SignatureTreeItem GetSignatureTreeViewItem(string leaderSignature)
        {
            var signatureTreeItems     = new List <SignatureTreeItem>();
            var workSignatureTreeItems = new List <SignatureTreeItem>();

            var checkedSignatures     = new HashSet <string>();
            var workCheckedSignatures = new HashSet <string>();

            {
                LinkItem leaderLinkItem;
                if (!_cache_LinkItems.TryGetValue(leaderSignature, out leaderLinkItem))
                {
                    return(null);
                }

                signatureTreeItems.Add(new SignatureTreeItem(leaderLinkItem));
                checkedSignatures.Add(leaderSignature);
            }

            {
                int index = 0;

                for (;;)
                {
                    for (; index < signatureTreeItems.Count && index < 32 * 1024; index++)
                    {
                        var sortedList = signatureTreeItems[index].LinkItem.TrustSignatures.ToList();
                        sortedList.Sort();

                        foreach (var trustSignature in sortedList)
                        {
                            if (checkedSignatures.Contains(trustSignature))
                            {
                                continue;
                            }

                            LinkItem tempLinkItem;
                            if (!_cache_LinkItems.TryGetValue(trustSignature, out tempLinkItem))
                            {
                                continue;
                            }

                            var tempTreeItem = new SignatureTreeItem(tempLinkItem);
                            signatureTreeItems[index].Children.Add(tempTreeItem);

                            workSignatureTreeItems.Add(tempTreeItem);
                            workCheckedSignatures.Add(trustSignature);
                        }
                    }

                    if (workSignatureTreeItems.Count == 0)
                    {
                        break;
                    }

                    signatureTreeItems.AddRange(workSignatureTreeItems);
                    workSignatureTreeItems.Clear();

                    checkedSignatures.UnionWith(workCheckedSignatures);
                    workCheckedSignatures.Clear();
                }
            }

            return(signatureTreeItems[0]);
        }