X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ffilter.cpp;h=80ca1932facfa455cc6ee2d0bd631958cf9513d4;hb=0388bdcffe5c2c3e720afa9aa911268eac9c32de;hp=c694ca67eb09814f38dcc563207beb940ad2d14a;hpb=fc27eb63c05d915d606e17992ecd5b7f68478101;p=poefilter.git diff --git a/source/filter.cpp b/source/filter.cpp index c694ca6..80ca193 100644 --- a/source/filter.cpp +++ b/source/filter.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include "category.h" @@ -44,13 +44,16 @@ Filter::Filter(): abstract(false) { } -void Filter::write(IO::Base &out, const Theme &theme) const +void Filter::write(IO::Base &out) const { - for(list::const_iterator i=categories.begin(); i!=categories.end(); ++i) + for(list::const_iterator i=blocks.begin(); i!=blocks.end(); ++i) { list st; - //IO::print(out, "# %s\n", i->first); - (*i)->create_statements(st, theme); + 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::const_iterator j=st.begin(); j!=st.end(); ++j) j->write(out); } @@ -104,17 +107,18 @@ void Filter::Loader::hide(const string &name) categs.push_back(&poe.get_category(name)); for(list::const_iterator i=categs.begin(); i!=categs.end(); ++i) - { - list::iterator j = find(obj.categories.begin(), obj.categories.end(), *i); - if(j!=obj.categories.end()) - obj.categories.erase(j); - } + for(list::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) @@ -133,6 +137,19 @@ void Filter::Loader::show(const string &name) categs.push_back(&poe.get_category(name)); for(list::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::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); + } + } }