tsp_cpp/snippets/Group.cpp

84 lines
2.5 KiB
C++
Raw Normal View History

//
// Created by trotfunky on 15/05/19.
//
#include "Group.h"
namespace xmlParser
{
Group::Group(std::string label, float x, float y, const sf::Color& color) : DrawingElement(std::move(label),x,y,color), drawingElements({})
{}
Group::Group(const pugi::xml_node& node) : DrawingElement(node)
{
if(label == "Test DrawingElement")
{
label = "Test Group";
}
if(!strncmp(node.name(),"Drawing",7))
{
x = 0;
y = 0;
label = "Drawing";
color = sf::Color::Transparent;
}
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 != nullptr)
{
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(const auto& element : drawingElements)
{
element.second->draw(window,x,y);
}
}
const std::string Group::toString() const
{
std::stringstream string;
string << label << " at x:" << getX() << " y:" << getY();
string << " color:" << getStringColor() << std::endl;
for(const auto& element : drawingElements)
{
string << "\t" << *(element.second) << std::endl;
}
return(string.str());
}
}