private void AddTagsButtons_Click(object sender, EventArgs e) { var o = OriginTreeView; if (o.SelectedNode == null) { return; } CatAndTagsList 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; CatAndTags?match = null; for (int i = 0; i < filteredTags.Count; i++) { if (filteredTags[i].Category == cat) { match = filteredTags[i]; } } if (match == null) { filteredTags.Add(new CatAndTags { Category = cat }); if (!isCategory) { CatAndTags last = filteredTags[filteredTags.Count - 1]; last.Tags.Add(o.SelectedNode.Text); } } else { if (isCategory) { match.Tags.Clear(); } else { string tag = o.SelectedNode.Text; if (!match.Tags.ContainsI(tag)) { match.Tags.Add(tag); } } } FillTreeView(filteredTags); }
public void UpdateFMTagsString_Test() { var fm = new FanMission(); var cat1 = new CatAndTags { Category = "author" }; cat1.Tags.Add("Tannar"); cat1.Tags.Add("Random_Taffer"); fm.Tags.Add(cat1); var cat2 = new CatAndTags { Category = "contest" }; cat2.Tags.Add("10 rooms"); fm.Tags.Add(cat2); var cat3 = new CatAndTags { Category = "length" }; cat3.Tags.Add("short"); fm.Tags.Add(cat3); var cat4 = new CatAndTags { Category = "series" }; fm.Tags.Add(cat4); var cat5 = new CatAndTags { Category = "misc" }; cat5.Tags.Add("campaign"); cat5.Tags.Add("atmospheric"); cat5.Tags.Add("other protagonist"); cat5.Tags.Add("water"); cat5.Tags.Add("thing_shaped"); fm.Tags.Add(cat5); FMTags.UpdateFMTagsString(fm); Assert.Equal( "author:Tannar,author:Random_Taffer,contest:10 rooms,length:short,series,misc:campaign,misc:atmospheric,misc:other protagonist,misc:water,misc:thing_shaped", fm.TagsString); }