private void AddCategory(TagType tagType, Type tagTypeType, Func <TagInfo, bool> predicate) { string tagTypeName = Enum.GetName(tagTypeType, tagType); TreeNode categoryNode = treeView.Nodes.Add(tagTypeName); foreach (TagInfo tag in TagsModel.AllTags .Where(x => x.Type == tagType) .Where(x => predicate.Invoke(x))) { AddItem(categoryNode, tag); } categoryNode.Tag = tagType; categoryNode.Text = TagTextFormatter.Format(new TagInfo() { Type = tagType, Count = categoryNode.Nodes.Count, Name = "", Url = "" }, TagsListSettings.LabelFormats.Header); if (TagsListSettings.Collapsed.ContainsKey(tagType)) { if (TagsListSettings.Collapsed[tagType]) { categoryNode.Collapse(); } else { categoryNode.Expand(); } } }
private void AddItem(TreeNode categoryNode, TagInfo tag) { bool isInWhitelist = MetadataKeywordLists.Whitelist[tag.Type].Any(x => x.Equals(tag.Name, StringComparison.OrdinalIgnoreCase)); bool isInBlacklist = MetadataKeywordLists.Blacklist[tag.Type].Any(x => x.Equals(tag.Name, StringComparison.OrdinalIgnoreCase)); bool isInIgnorelist = MetadataKeywordLists.Ignorelist[tag.Type].Any(x => x.Equals(tag.Name, StringComparison.OrdinalIgnoreCase)); bool isInHidelist = MetadataKeywordLists.Hidelist[tag.Type].Any(x => x.Equals(tag.Name, StringComparison.OrdinalIgnoreCase)); string tagLabel = TagTextFormatter.Format(tag, TagsListSettings.LabelFormats.Tag); TreeNode contentNode = new TreeNode(tagLabel); if (isInIgnorelist) { if (strikethroughFont == null) { strikethroughFont = new Font(treeView.Font, FontStyle.Strikeout); } contentNode.NodeFont = strikethroughFont; } if (isInWhitelist) { contentNode.ForeColor = GetTreeNodeForeColor(TagsListSettings.Colors.Whitelist, isInHidelist); } else if (isInBlacklist) { contentNode.ForeColor = GetTreeNodeForeColor(TagsListSettings.Colors.Blacklist, isInHidelist); } else { contentNode.ForeColor = GetTreeNodeForeColor(TagsListSettings.Colors.Default, isInHidelist); } contentNode.Tag = tag; contentNode.ToolTipText = tag.Name; AddContextMenu(contentNode); categoryNode.Nodes.Add(contentNode); }
private void MetadataKeywordLists_ListChanged(object sender, MetadataKeywordListChangedEventArgs e, Action <TreeNode> onAdded, Action <TreeNode> onRemoved) { TreeNode contentNode = GetTagTreeNode(e.TagType, e.TagName, e.TagId); TreeNode categoryNode = GetCategoryTreeNode(e.TagType); if (contentNode != null) { TagInfo tagInfo = contentNode.Tag as TagInfo; if (e.EventType == MetadataKeywordsListsEventType.Add) { onAdded.Invoke(contentNode); } else if (e.EventType == MetadataKeywordsListsEventType.Remove) { onRemoved.Invoke(contentNode); } if (!TagsFilter.ShouldFilter(tagInfo)) { contentNode.Remove(); } } else { TagInfo tagInfo = new TagInfo() { Name = e.TagName, Id = e.TagId, Type = (TagType)Enum.Parse(typeof(TagType), e.TagType, true) }; if (TagsFilter.ShouldFilter(tagInfo)) { contentNode = new TreeNode(e.TagName) { Tag = TagsModel.AllTags.FirstOrDefault(x => x.Id == e.TagId) // should be First() but just in case... }; if (e.EventType == MetadataKeywordsListsEventType.Add) { AddContextMenu(contentNode); onAdded.Invoke(contentNode); if (categoryNode != null) { categoryNode.Nodes.Add(contentNode); } } else if (e.EventType == MetadataKeywordsListsEventType.Remove) { onRemoved.Invoke(contentNode); contentNode.Remove(); } } } // NOTE: there's no NodeAdded/NodeRemoved events. if (categoryNode != null) { TagType tagType = (TagType)categoryNode.Tag; categoryNode.Text = TagTextFormatter.Format(new TagInfo() { Type = tagType, Count = categoryNode.Nodes.Count, Name = "", Url = "" }, TagsListSettings.LabelFormats.Header); } }