private void RemoveFilter(TreeNode f) { Log.Info(Log.LogSource.UI, "MainForm.RemoveFilter() called"); if (f == null) { return; } if (f.Parent == null) { SearchFilter = null; FilterTree.Nodes.Clear(); } else { if (f.Parent.Tag is Pox.Filters.AndFilter) { ((Pox.Filters.AndFilter)f.Parent.Tag).Filters.Remove((Pox.Filters.BaseFilter)f.Tag); } else if (f.Parent.Tag is Pox.Filters.OrFilter) { ((Pox.Filters.OrFilter)f.Parent.Tag).Filters.Remove((Pox.Filters.BaseFilter)f.Tag); } f.Parent.Nodes.Remove(f); } ShowFilterProperties(null); Log.Info(Log.LogSource.UI, "MainForm.RemoveFilter() called"); }
private void wrapIntoAllSubfiltersToolStripMenuItem_Click(object sender, EventArgs e) { if (FilterTree.Nodes.Count == 0) { return; } TreeNode selected_node = FilterTree.SelectedNode; if (selected_node == null) { return; } AndFilter fl = new AndFilter(); TreeNode and_node = new TreeNode() { Text = fl.ToString(), Tag = fl }; // check if the node is the root if (selected_node.Parent == null) { FilterTree.Nodes.Clear(); FilterTree.Nodes.Add(and_node); SearchFilter = fl; } else { TreeNode pt = selected_node.Parent; pt.Nodes.Insert(pt.Nodes.IndexOf(selected_node), and_node); pt.Nodes.Remove(selected_node); if (pt.Tag is OrFilter) { ((OrFilter)pt.Tag).Filters.Add(fl); ((OrFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } else if (pt.Tag is AndFilter) { ((AndFilter)pt.Tag).Filters.Add(fl); ((AndFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } } fl.Filters.Add((BaseFilter)selected_node.Tag); and_node.Nodes.Add(selected_node); FilterTree.SelectedNode = selected_node; ShowFilterProperties((BaseFilter)selected_node.Tag); }
private void popOutOfAnyAllSubfiltersToolStripMenuItem_Click(object sender, EventArgs e) { if (FilterTree.Nodes.Count == 0) { return; } TreeNode selected_node = FilterTree.SelectedNode; if (selected_node == null) { return; } TreeNode pt = selected_node.Parent; if (pt == null) { return; } TreeNode pt2 = pt.Parent; // if pt is top of hierarchy if (pt2 == null) { if ((pt.Tag is AndFilter) || (pt.Tag is OrFilter)) { if (pt.Nodes.Count == 1) { FilterTree.Nodes.Clear(); FilterTree.Nodes.Add(selected_node); SearchFilter = (BaseFilter)selected_node.Tag; } } } else { if ((pt.Tag is AndFilter) || (pt.Tag is OrFilter)) { pt.Nodes.Remove(selected_node); if (pt.Tag is AndFilter) { ((AndFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } else if (pt.Tag is OrFilter) { ((OrFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } pt2.Nodes.Insert(pt2.Nodes.IndexOf(pt), selected_node); if (pt2.Tag is AndFilter) { ((AndFilter)pt2.Tag).Filters.Insert(((AndFilter)pt2.Tag).Filters.IndexOf((BaseFilter)pt.Tag), (BaseFilter)selected_node.Tag); } else if (pt2.Tag is OrFilter) { ((OrFilter)pt2.Tag).Filters.Insert(((OrFilter)pt2.Tag).Filters.IndexOf((BaseFilter)pt.Tag), (BaseFilter)selected_node.Tag); } if (pt.Nodes.Count == 0) { pt2.Nodes.Remove(pt); if (pt2.Tag is AndFilter) { ((AndFilter)pt2.Tag).Filters.Remove((BaseFilter)pt.Tag); } else if (pt2.Tag is OrFilter) { ((OrFilter)pt2.Tag).Filters.Remove((BaseFilter)pt.Tag); } } } } ShowFilterProperties((BaseFilter)selected_node.Tag); }
private void AddFilter(string fname, FilterType ftype, DataPath dpath = DataPath.None) { Log.Info(Log.LogSource.UI, "MainForm.AddFilter() called"); Pox.Filters.BaseFilter bf; switch (ftype) { case FilterType.AND: bf = new Pox.Filters.AndFilter(); break; case FilterType.OR: bf = new Pox.Filters.OrFilter(); break; case FilterType.INT: bf = new Pox.Filters.IntFilter() { dpath = dpath, FilterType = Pox.Filters.IntFilterType.EQUAL, RefValue = 0 }; break; case FilterType.STRING: bf = new Pox.Filters.StringFilter() { dpath = dpath, IgnoreCase = true, FilterType = Pox.Filters.StringFilterType.CONTAINS, RefValue = "", RefValueLowerCase = "" }; break; case FilterType.BOOLEAN: bf = new Pox.Filters.BooleanFilter() { dpath = dpath, FilterType = Pox.Filters.BooleanFilterType.EQUAL, RefValue = true }; break; case FilterType.EXPANSION: bf = new Pox.Filters.EnumFilter() { dpath = DataPath.Expansion, Options_ref = Program.database.Expansions, FilterType = Pox.Filters.EnumFilterType.EQUAL, RefValue = "" }; break; case FilterType.RARITY: bf = new Pox.Filters.EnumFilter() { dpath = DataPath.Rarity, Options_ref = Program.database.Rarities, FilterType = Pox.Filters.EnumFilterType.EQUAL, RefValue = "" }; break; case FilterType.ABILITY_LIST: bf = new Pox.Filters.AbilityListFilter() { dpath = dpath, FilterType = Pox.Filters.AbilityListFilterType.CONTAINS, RefValue = 0 }; break; case FilterType.CLASS_LIST: bf = new Pox.Filters.EnumListFilter() { dpath = DataPath.Class, Options_ref = Program.database.Classes, FilterType = Pox.Filters.EnumListFilterType.CONTAINS, RefValue = "" }; break; case FilterType.FACTION_LIST: bf = new Pox.Filters.EnumListFilter() { dpath = DataPath.Faction, Options_ref = Program.database.Factions, FilterType = Pox.Filters.EnumListFilterType.CONTAINS, RefValue = "" }; break; case FilterType.RACE_LIST: bf = new Pox.Filters.EnumListFilter() { dpath = DataPath.Race, Options_ref = Program.database.Races, FilterType = Pox.Filters.EnumListFilterType.CONTAINS, RefValue = "" }; break; default: Log.Error(Log.LogSource.UI, "Form1.AddFilter(): Unknown filter type"); throw new Exception("Form1.AddFilter(): Error while adding filter"); } bf.Name = fname; // determine which filter is selected right now if (FilterTree.Nodes.Count == 0) { FilterTree.Nodes.Add(new TreeNode() { Text = bf.ToString(), Tag = bf }); SearchFilter = null; SearchFilter = bf; } else { TreeNode selected_node = FilterTree.SelectedNode; if (selected_node == null) { selected_node = FilterTree.Nodes[0]; } if (selected_node.Tag is Pox.Filters.AndFilter) { selected_node.Nodes.Add(new TreeNode() { Text = bf.ToString(), Tag = bf }); ((Pox.Filters.AndFilter)selected_node.Tag).Filters.Add(bf); } else if (selected_node.Tag is Pox.Filters.OrFilter) { selected_node.Nodes.Add(new TreeNode() { Text = bf.ToString(), Tag = bf }); ((Pox.Filters.OrFilter)selected_node.Tag).Filters.Add(bf); } else if (selected_node.Parent != null) { if (selected_node.Parent.Tag is Pox.Filters.AndFilter) { selected_node.Parent.Nodes.Add(new TreeNode() { Text = bf.ToString(), Tag = bf }); ((Pox.Filters.AndFilter)selected_node.Parent.Tag).Filters.Add(bf); } else if (selected_node.Parent.Tag is Pox.Filters.OrFilter) { selected_node.Parent.Nodes.Add(new TreeNode() { Text = bf.ToString(), Tag = bf }); ((Pox.Filters.OrFilter)selected_node.Parent.Tag).Filters.Add(bf); } } else { Log.Error(Log.LogSource.UI, "Form1.AddFilter(): Could not add new filter. Select a valid filter to add new filter to."); return; } } ShowFilterProperties(bf); Log.Info(Log.LogSource.UI, "MainForm.AddFilter() finished"); }