]> git.tdb.fi Git - poefilter.git/blobdiff - source/filter.cpp
Associate categories and appearances at filter level
[poefilter.git] / source / filter.cpp
index 70a126b5c8eeaf5464c1b8540915fcea5c8054d5..80ca1932facfa455cc6ee2d0bd631958cf9513d4 100644 (file)
@@ -1,4 +1,4 @@
-#include <algorithm>
+#include <msp/core/algorithm.h>
 #include <msp/core/maputils.h>
 #include <msp/io/print.h>
 #include "category.h"
@@ -46,11 +46,14 @@ Filter::Filter():
 
 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);
        }
@@ -104,17 +107,18 @@ void Filter::Loader::hide(const string &name)
                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)
@@ -133,6 +137,19 @@ 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);
+               }
+       }
 }