2 #include "choicecondition.h"
5 #include "rangecondition.h"
16 Category::Category(const Category &other):
17 condition(other.condition ? other.condition->clone() : 0),
19 appearance(other.appearance)
22 Category &Category::operator=(const Category &other)
25 condition = (other.condition ? other.condition->clone() : 0);
27 appearance = other.appearance;
36 void Category::create_statements(list<FilterStatement> &st) const
39 st.push_back(FilterStatement());
40 st.back().add_line(format("SetFontSize %d", appearance.get_font_size()));
42 const Color &bg_color = appearance.get_background_color();
44 st.back().add_line(format("SetBackgroundColor %d %d %d", bg_color.r, bg_color.g, bg_color.b));
46 const Color &brd_color = appearance.get_border_color();
48 st.back().add_line(format("SetBorderColor %d %d %d", brd_color.r, brd_color.g, brd_color.b));
50 const Color &txt_color = appearance.get_text_color();
52 st.back().add_line(format("SetTextColor %d %d %d", txt_color.r, txt_color.g, txt_color.b));
54 if(appearance.get_sound_type())
55 st.back().add_line(format("PlayAlertSound %d %d", appearance.get_sound_type(), appearance.get_sound_volume()));
58 condition->add_lines(st);
62 Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
63 DataFile::ObjectLoader<Category>(c),
66 app_loader(c.appearance, p.get_theme())
68 add("and", &Loader::and_);
69 add("appearance", &Loader::appearance);
70 add("base_type", &Loader::condition<BaseTypeCondition>);
71 add("class", &Loader::condition<ClassCondition>);
72 add_range<DropLevelCondition>("drop_level");
73 add_range<HeightCondition>("height");
74 add_range<ItemLevelCondition>("item_level");
75 add("linked_colors", &Loader::linked_colors);
76 add_range<LinkedSocketsCondition>("linked_sockets");
77 add_range<SocketsCondition>("sockets");
78 add("or", &Loader::or_);
79 add("order", &Category::order);
80 add_range<QualityCondition>("quality");
81 add_range<RarityCondition>("rarity");
82 add_range<WidthCondition>("width");
84 add_auxiliary_loader(app_loader);
88 void Category::Loader::add_range(const string &keyword)
90 add(keyword, &Loader::condition<T>);
91 add(keyword, &Loader::condition_range<T>);
92 add("min_"+keyword, &Loader::condition_min<T>);
93 add("max_"+keyword, &Loader::condition_max<T>);
96 void Category::Loader::add_condition(Condition *cond)
100 else if(!obj.condition)
101 obj.condition = cond;
104 compound = new AndCondition;
105 compound->add(obj.condition);
107 obj.condition = compound;
111 void Category::Loader::and_()
113 RefPtr<AndCondition> cond = new AndCondition;
114 Loader sub_ldr(obj, poe, cond.get());
115 load_sub_with(sub_ldr);
116 add_condition(cond.release());
119 void Category::Loader::appearance(const std::string &name)
121 obj.appearance = poe.get_theme().get_appearance(name);
125 void Category::Loader::condition(typename T::Type value)
127 add_condition(new T(value));
131 void Category::Loader::condition_max(typename T::Type max)
133 add_condition(new T(T::Traits::get_min(), max));
137 void Category::Loader::condition_min(typename T::Type min)
139 add_condition(new T(min, T::Traits::get_max()));
143 void Category::Loader::condition_range(typename T::Type min, typename T::Type max)
145 add_condition(new T(min, max));
148 void Category::Loader::linked_colors(const LinkedColorsCondition::Colors &colors)
150 add_condition(new LinkedColorsCondition(colors));
153 void Category::Loader::or_()
155 RefPtr<OrCondition> cond = new OrCondition;
156 Loader sub_ldr(obj, poe, cond.get());
157 load_sub_with(sub_ldr);
158 add_condition(cond.release());