-#include <algorithm>
+#include <msp/core/algorithm.h>
#include <msp/core/maputils.h>
#include <msp/io/print.h>
#include "category.h"
void Filter::write(IO::Base &out) const
{
- for(list<const Category *>::const_iterator i=categories.begin(); i!=categories.end(); ++i)
+ for(list<Block>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
{
list<FilterStatement> st;
- //IO::print(out, "# %s\n", i->first);
- (*i)->create_statements(st);
+ st.push_back(FilterStatement());
+ i->appearance.add_lines(st.back());
+ i->category->create_statements(st);
+
+ IO::print(out, "# %s\n", i->category->get_name());
for(list<FilterStatement>::const_iterator j=st.begin(); j!=st.end(); ++j)
j->write(out);
}
categs.push_back(&poe.get_category(name));
for(list<const Category *>::const_iterator i=categs.begin(); i!=categs.end(); ++i)
- {
- list<const Category *>::iterator j = find(obj.categories.begin(), obj.categories.end(), *i);
- if(j!=obj.categories.end())
- obj.categories.erase(j);
- }
+ 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::include(const string &name)
{
const Filter &base = poe.get_filter(name);
- obj.categories.insert(obj.categories.end(), base.categories.begin(), base.categories.end());
+ obj.blocks.insert(obj.blocks.end(), base.blocks.begin(), base.blocks.end());
}
void Filter::Loader::show(const string &name)
categs.push_back(&poe.get_category(name));
for(list<const Category *>::const_iterator i=categs.begin(); i!=categs.end(); ++i)
- if(find(obj.categories.begin(), obj.categories.end(), *i)==obj.categories.end())
- obj.categories.push_back(*i);
+ {
+ bool found = false;
+ for(list<Block>::const_iterator j=obj.blocks.begin(); (!found && j!=obj.blocks.end()); ++j)
+ found = (j->category==*i);
+
+ if(!found)
+ {
+ Block blk;
+ blk.category = *i;
+ blk.appearance = (*i)->get_appearance();
+ if(const Appearance *app = poe.get_theme().find_appearance((*i)->get_name()))
+ blk.appearance.merge_from(*app);
+ obj.blocks.push_back(blk);
+ }
+ }
}