]> git.tdb.fi Git - poefilter.git/blob - source/category.h
Correctly merge icon and light beam appearances
[poefilter.git] / source / category.h
1 #ifndef CATEGORY_H_
2 #define CATEGORY_H_
3
4 #include <list>
5 #include <string>
6 #include <msp/datafile/objectloader.h>
7 #include "appearance.h"
8 #include "condition.h"
9 #include "rarity.h"
10
11 class FilterStatement;
12 class PoeFilter;
13 class Theme;
14
15 class Category
16 {
17 public:
18         class Loader: public Msp::DataFile::ObjectLoader<Category>
19         {
20         private:
21                 const PoeFilter &poe;
22                 CompoundCondition *compound;
23                 Appearance::Loader app_loader;
24
25         public:
26                 Loader(Category &, const PoeFilter &, CompoundCondition * = 0);
27
28         protected:
29                 template<typename T>
30                 void add_range(const std::string &);
31
32                 void add_condition(Condition *);
33
34         private:
35                 void and_();
36
37                 void category(const std::string &);
38
39                 template<typename T>
40                 void condition(typename T::Type);
41
42                 template<typename T>
43                 void condition_max(typename T::Type);
44
45                 template<typename T>
46                 void condition_min(typename T::Type);
47
48                 template<typename T>
49                 void condition_range(typename T::Type, typename T::Type);
50
51                 void linked_colors(const LinkedColorsCondition::Colors &);
52                 void or_();
53         };
54
55 private:
56         std::string name;
57         Condition *condition;
58         unsigned order;
59         Appearance appearance;
60
61 public:
62         Category();
63         Category(const std::string &, unsigned);
64         Category(const Category &);
65         Category &operator=(const Category &);
66         ~Category();
67
68         const std::string &get_name() const { return name; }
69         unsigned get_order() const { return order; }
70         const Appearance &get_appearance() const { return appearance; }
71         void create_statements(std::list<FilterStatement> &) const;
72 };
73
74 #endif