#include "GNEChangeGroup.h"
FXIMPLEMENT(GNEChangeGroup, GNEChange, nullptr, 0)
GNEChangeGroup::GNEChangeGroup(Supermode groupSupermode, GUIIcon icon, const std::string& description) :
myDescription(description),
myGroupSupermode(groupSupermode),
myIcon(icon),
undoList(nullptr),
redoList(nullptr),
group(nullptr) {
const auto time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
const auto local_time = *localtime(&time);
myTimeStamp = toString(local_time.tm_hour) + ":" +
((local_time.tm_min <= 9) ? "0" : "") + toString(local_time.tm_min) + ":" +
((local_time.tm_sec <= 9) ? "0" : "") + toString(local_time.tm_sec);
}
GNEChangeGroup::~GNEChangeGroup() {
GNEChange* change = nullptr;
while (redoList) {
change = redoList;
redoList = redoList->next;
delete change;
}
while (undoList) {
change = undoList;
undoList = undoList->next;
delete change;
}
delete group;
}
const std::string&
GNEChangeGroup::getDescription() {
return myDescription;
}
const std::string&
GNEChangeGroup::getTimeStamp() {
return myTimeStamp;
}
Supermode
GNEChangeGroup::getGroupSupermode() const {
return myGroupSupermode;
}
GUIIcon
GNEChangeGroup::getGroupIcon() const {
return myIcon;
}
std::string
GNEChangeGroup::undoName() const {
return (TL("Undo") + std::string(" ") + myDescription);
}
std::string
GNEChangeGroup::redoName() const {
return (TL("Redo") + std::string(" ") + myDescription);
}
bool
GNEChangeGroup::empty() const {
return (undoList == nullptr);
}
void
GNEChangeGroup::undo() {
GNEChange* change = nullptr;
while (undoList) {
change = undoList;
undoList = undoList->next;
change->undo();
change->next = redoList;
redoList = change;
}
}
void
GNEChangeGroup::redo() {
GNEChange* change = nullptr;
while (redoList) {
change = redoList;
redoList = redoList->next;
change->redo();
change->next = undoList;
undoList = change;
}
}
int
GNEChangeGroup::size() const {
FXuint result = sizeof(GNEChangeGroup);
GNEChange* change;
for (change = undoList; change; change = change->next) {
result += change->size();
}
for (change = redoList; change; change = change->next) {
result += change->size();
}
return result;
}
GNEChangeGroup::GNEChangeGroup() :
myGroupSupermode(Supermode::NETWORK),
myIcon(GUIIcon::UNDO),
undoList(nullptr),
redoList(nullptr),
group(nullptr)
{ }