// // Created by trotfunky on 15/05/19. // #include "Group.h" namespace xmlParser { Group::Group() : DrawingElement(), drawingElements({}) { label = "Test Group"; } Group::Group(const pugi::xml_node& node) : DrawingElement(node) { if(label == "Test DrawingElement") { label = "Test Group"; } pugi::xml_object_range circleChildren = node.children(); for(pugi::xml_node_iterator child : circleChildren) { pugi::xml_node& childNode = (*child); DrawingElement* newElement = !strncmp(childNode.name(),"Circle",6) ? dynamic_cast(new Circle(childNode)) : !strncmp(childNode.name(),"Group",5) ? dynamic_cast(new Group(childNode)) : nullptr; if(newElement) { drawingElements.insert(std::make_pair(newElement->label,newElement)); } } } Group::Group(const std::map& elements) : Group() { std::transform(elements.begin(),elements.end(),std::inserter(drawingElements,drawingElements.begin()), [](std::pair pair) { return(pair); }); } bool Group::addDrawingElement(DrawingElement* drawingElement) { return(drawingElements.insert(std::make_pair(drawingElement->label,drawingElement)).second); } bool Group::removeDrawingElement(const std::string& label) { return(drawingElements.erase(label)); } DrawingElement* Group::getDrawingElement(const std::string& label) { return(drawingElements.at(label)); } void Group::draw(sf::RenderWindow& window) { for(auto element : drawingElements) { element.second->draw(window); } } }