+
+void Filter::Loader::cancel(const string &name)
+{
+ vector<const Category *> categs;
+ if(name.find('*')!=string::npos)
+ {
+ poe.find_categories(glob_to_re(name), categs);
+
+ if(categs.empty())
+ throw key_error(name);
+ }
+ else
+ categs.push_back(&poe.get_category(name));
+
+ for(vector<const Category *>::const_iterator i=categs.begin(); i!=categs.end(); ++i)
+ for(list<Block>::iterator j=obj.blocks.begin(); j!=obj.blocks.end(); ++j)
+ if(j->category==*i)
+ {
+ obj.blocks.erase(j);
+ break;
+ }
+}
+
+void Filter::Loader::hide(const string &name)
+{
+ add_categories(name, false);
+}
+
+void Filter::Loader::include(const string &name)
+{
+ const Filter &base = poe.get_filter(name);
+ obj.blocks.insert(obj.blocks.end(), base.blocks.begin(), base.blocks.end());
+}
+
+void Filter::Loader::show(const string &name)
+{
+ add_categories(name, true);
+}