Пример #1
0
        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");
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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");
        }