2 #include "choicecondition.h"
5 #include "rangecondition.h"
16 Category::Category(const string &n, unsigned o):
22 Category::Category(const Category &other):
24 condition(other.condition ? other.condition->clone() : 0),
26 appearance(other.appearance)
29 Category &Category::operator=(const Category &other)
33 condition = (other.condition ? other.condition->clone() : 0);
35 appearance = other.appearance;
44 void Category::create_statements(list<FilterStatement> &st) const
47 st.push_back(FilterStatement());
51 Condition *flat = condition->flatten();
58 Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
59 DataFile::ObjectLoader<Category>(c),
62 app_loader(c.appearance)
64 add("and", &Loader::and_);
65 add("base_type", &Loader::condition<BaseTypeCondition>);
66 add("category", &Loader::category);
67 add("class", &Loader::condition<ClassCondition>);
68 add_range<DropLevelCondition>("drop_level");
69 add_range<HeightCondition>("height");
70 add_range<ItemLevelCondition>("item_level");
71 add("linked_colors", &Loader::linked_colors);
72 add_range<LinkedSocketsCondition>("linked_sockets");
73 add_range<SocketsCondition>("sockets");
74 add("or", &Loader::or_);
75 add_range<QualityCondition>("quality");
76 add_range<RarityCondition>("rarity");
77 add_range<WidthCondition>("width");
79 add_auxiliary_loader(app_loader);
83 void Category::Loader::add_range(const string &keyword)
85 add(keyword, &Loader::condition<T>);
86 add(keyword, &Loader::condition_range<T>);
87 add("min_"+keyword, &Loader::condition_min<T>);
88 add("max_"+keyword, &Loader::condition_max<T>);
91 void Category::Loader::add_condition(Condition *cond)
95 else if(!obj.condition)
99 compound = new AndCondition;
100 compound->add(obj.condition);
102 obj.condition = compound;
106 void Category::Loader::and_()
108 RefPtr<AndCondition> cond = new AndCondition;
109 Loader sub_ldr(obj, poe, cond.get());
110 load_sub_with(sub_ldr);
111 add_condition(cond.release());
114 void Category::Loader::category(const string &name)
116 const Category &categ = poe.get_category(name);
117 add_condition(categ.condition->clone());
121 void Category::Loader::condition(typename T::Type value)
123 add_condition(new T(value));
127 void Category::Loader::condition_max(typename T::Type max)
129 add_condition(new T(T::Traits::get_min(), max));
133 void Category::Loader::condition_min(typename T::Type min)
135 add_condition(new T(min, T::Traits::get_max()));
139 void Category::Loader::condition_range(typename T::Type min, typename T::Type max)
141 add_condition(new T(min, max));
144 void Category::Loader::linked_colors(const LinkedColorsCondition::Colors &colors)
146 add_condition(new LinkedColorsCondition(colors));
149 void Category::Loader::or_()
151 RefPtr<OrCondition> cond = new OrCondition;
152 Loader sub_ldr(obj, poe, cond.get());
153 load_sub_with(sub_ldr);
154 add_condition(cond.release());