private void AddTagsButtons_Click(object sender, EventArgs e)
        {
            var o = OriginTreeView;

            if (o.SelectedNode == null)
            {
                return;
            }

            FMCategoriesCollection filteredTags =
                sender == AndButton ? TagsFilter.AndTags :
                sender == OrButton ? TagsFilter.OrTags :
                TagsFilter.NotTags;

            // Parent node = category, child node = tag
            bool   isCategory = o.SelectedNode.Parent == null;
            string cat        = isCategory ? o.SelectedNode.Text : o.SelectedNode.Parent !.Text;

            if (filteredTags.TryGetValue(cat, out FMTagsCollection tags))
            {
                if (isCategory)
                {
                    tags.Clear();
                }
                else
                {
                    tags.Add(o.SelectedNode.Text);
                }
            }
            else
            {
                var item = new FMTagsCollection();
                filteredTags.Add(cat, item);
                if (!isCategory)
                {
                    item.Add(o.SelectedNode.Text);
                }
            }

            FillTreeView(filteredTags);
        }
Beispiel #2
0
        private static void ReadFilterTags(string tagsToAdd, FMCategoriesCollection existingTags)
        {
            if (tagsToAdd.IsWhiteSpace())
            {
                return;
            }

            // We need slightly different logic for this vs. the FM tag adder, to wit, we support tags of the
            // form "category:" (with no tags list). This is because we allow filtering by entire category,
            // whereas we don't allow FMs to have categories with no tags in them.

            string[] tagsArray = tagsToAdd.Split(CA_CommaSemicolon, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < tagsArray.Length; i++)
            {
                if (!FMTags.TryGetCatAndTag(tagsArray[i], out string cat, out string tag) ||
                    cat.IsEmpty())
                {
                    continue;
                }

                if (existingTags.TryGetValue(cat, out FMTagsCollection tagsList))
                {
                    if (!tag.IsEmpty())
                    {
                        tagsList.Add(tag);
                    }
                }
                else
                {
                    var newTagsList = new FMTagsCollection();
                    if (!tag.IsEmpty())
                    {
                        newTagsList.Add(tag);
                    }
                    existingTags.Add(cat, newTagsList);
                }
            }
        }