private void UpdateCheckboxState(TreeNodeCollection InTreeNodesList) { foreach (TreeNode TreeNode in InTreeNodesList) { var InternalNode = TreeNode.Tag as FilterTagsTreeNode; if (InternalNode != null) { if (InternalNode.AllocTagNode.GetTag().HasValue) { TreeNode.Checked = ActiveTags.Contains(InternalNode.AllocTagNode.GetTag().Value); } else { // Hide the checkbox on non-tag nodes FilterTagsTreeView.SetCheckBoxImageState(TreeNode, 0); } } UpdateCheckboxState(TreeNode.Nodes); } }
private void PopulateTagFilterHierarchy(string[] InFilterTerms) { UseWaitCursor = true; // Build the internal tree { InternalTreeRoot = new FilterTagsTreeNode(null); var RootNode = FStreamInfo.GlobalInstance.TagHierarchy.GetRootNode(); BuildInternalTree(InFilterTerms, RootNode, InternalTreeRoot); } // Build the WinForm tree if (FilterTagsTreeView.Handle != null) // This if statement exists to force the native tree view handle to be created { bool bIsFiltering = InFilterTerms != null && InFilterTerms.Length > 0; FilterTagsTreeView.BeginUpdate(); FilterTagsTreeView.AfterCheck -= FilterTagsTreeView_AfterCheck; FilterTagsTreeView.BeforeExpand -= FilterTagsTreeView_BeforeExpand; FilterTagsTreeView.Nodes.Clear(); BuildFilterTagsTree(InternalTreeRoot, FilterTagsTreeView.Nodes, bIsFiltering); UpdateCheckboxState(FilterTagsTreeView.Nodes); if (bIsFiltering) { FilterTagsTreeView.ExpandAll(); } FilterTagsTreeView.AfterCheck += FilterTagsTreeView_AfterCheck; FilterTagsTreeView.BeforeExpand += FilterTagsTreeView_BeforeExpand; FilterTagsTreeView.EndUpdate(); } UseWaitCursor = false; }