#include "Compound.h" #include using namespace std; using namespace terminal_star85; extern terminal term; Ptr Compound::create(int x1, int y1, int x2, int y2){ return Ptr(new Compound(x1, y1, x2, y2)); } Compound::Compound(int x1, int y1, int x2, int y2): Component(x1, y1, x2, y2){ } void Compound::show(){ term.box(getUprl().first, getUprl().second, getLowr().first, getLowr().second); for_each(vec.begin(), vec.end(), mem_fun(&Component::show)); } bool Compound::handle_event(Event eve){ pair evepos; evepos.first = eve.whereX; evepos.second = eve.whereY; if (contains(evepos)){ vector >::iterator pos; pos = find_if(vec.begin(), vec.end(), bind2nd(mem_fun(&Component::handle_event),eve)); if (pos == vec.end()) if (com.count(eve.what)){ com[eve.what]->perform(); eve.what = terminal::CTRLs; for_each(vec.begin(), vec.end(), bind2nd(mem_fun(&Component::handle_event),eve)); //pos = vec.begin(); } return (pos == vec.end()?false:true); } else return false; } void Compound::add(Ptr ptr){ vec.push_back(ptr); } void Compound::remove(Ptr comp){ vector >::iterator pos; pos = find(vec.begin(), vec.end(), comp); vec.erase(pos); } void Compound::remove_all(){ vec.clear(); } void Compound::add_com(terminal::Keycodes key, Ptr act){ com.insert(make_pair(key, act)); }