65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
|
//
|
||
|
// 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<DrawingElement*>(new Circle(childNode)) :
|
||
|
!strncmp(childNode.name(),"Group",5) ? dynamic_cast<DrawingElement*>(new Group(childNode)) : nullptr;
|
||
|
if(newElement)
|
||
|
{
|
||
|
drawingElements.insert(std::make_pair(newElement->label,newElement));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Group::Group(const std::map<std::string, DrawingElement*>& elements) : Group()
|
||
|
{
|
||
|
std::transform(elements.begin(),elements.end(),std::inserter(drawingElements,drawingElements.begin()),
|
||
|
[](std::pair<std::string,DrawingElement*> 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);
|
||
|
}
|
||
|
}
|
||
|
}
|