Esempio n. 1
0
        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();
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }
        }