2 #include "choicecondition.h"
5 #include "rangecondition.h"
11 Category::Category(const string &n):
17 Category::Category(const Category &other):
19 condition(other.condition ? other.condition->clone() : 0),
21 appearance(other.appearance)
24 Category &Category::operator=(const Category &other)
28 condition = (other.condition ? other.condition->clone() : 0);
30 appearance = other.appearance;
39 void Category::create_statements(list<FilterStatement> &st) const
42 st.push_back(FilterStatement());
45 condition->add_lines(st);
49 Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
50 DataFile::ObjectLoader<Category>(c),
53 app_loader(c.appearance)
55 add("and", &Loader::and_);
56 add("base_type", &Loader::condition<BaseTypeCondition>);
57 add("class", &Loader::condition<ClassCondition>);
58 add_range<DropLevelCondition>("drop_level");
59 add_range<HeightCondition>("height");
60 add_range<ItemLevelCondition>("item_level");
61 add("linked_colors", &Loader::linked_colors);
62 add_range<LinkedSocketsCondition>("linked_sockets");
63 add_range<SocketsCondition>("sockets");
64 add("or", &Loader::or_);
65 add("order", &Category::order);
66 add_range<QualityCondition>("quality");
67 add_range<RarityCondition>("rarity");
68 add_range<WidthCondition>("width");
70 add_auxiliary_loader(app_loader);
74 void Category::Loader::add_range(const string &keyword)
76 add(keyword, &Loader::condition<T>);
77 add(keyword, &Loader::condition_range<T>);
78 add("min_"+keyword, &Loader::condition_min<T>);
79 add("max_"+keyword, &Loader::condition_max<T>);
82 void Category::Loader::add_condition(Condition *cond)
86 else if(!obj.condition)
90 compound = new AndCondition;
91 compound->add(obj.condition);
93 obj.condition = compound;
97 void Category::Loader::and_()
99 RefPtr<AndCondition> cond = new AndCondition;
100 Loader sub_ldr(obj, poe, cond.get());
101 load_sub_with(sub_ldr);
102 add_condition(cond.release());
106 void Category::Loader::condition(typename T::Type value)
108 add_condition(new T(value));
112 void Category::Loader::condition_max(typename T::Type max)
114 add_condition(new T(T::Traits::get_min(), max));
118 void Category::Loader::condition_min(typename T::Type min)
120 add_condition(new T(min, T::Traits::get_max()));
124 void Category::Loader::condition_range(typename T::Type min, typename T::Type max)
126 add_condition(new T(min, max));
129 void Category::Loader::linked_colors(const LinkedColorsCondition::Colors &colors)
131 add_condition(new LinkedColorsCondition(colors));
134 void Category::Loader::or_()
136 RefPtr<OrCondition> cond = new OrCondition;
137 Loader sub_ldr(obj, poe, cond.get());
138 load_sub_with(sub_ldr);
139 add_condition(cond.release());