| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /*
- * eventsettings.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "eventsettings.h"
- #include "timedevent.h"
- #include "ui_eventsettings.h"
- #include "../mapcontroller.h"
- #include "../../lib/mapping/CMapDefines.h"
- #include "../../lib/constants/NumericConstants.h"
- #include "../../lib/constants/StringConstants.h"
- QString toQString(const PlayerColor & player)
- {
- return QString::fromStdString(player.toString());
- }
- QVariant toVariant(const std::set<PlayerColor> & players)
- {
- QVariantList result;
- for(auto const id : players)
- result.push_back(toQString(id));
- return result;
- }
- std::set<PlayerColor> playersFromVariant(const QVariant & v)
- {
- std::set<PlayerColor> result;
- for(auto const & id : v.toList())
- result.insert(PlayerColor(PlayerColor::decode(id.toString().toStdString())));
- return result;
- }
- QVariant toVariant(const TResources & resources)
- {
- QVariantMap result;
- for(int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
- result[QString::fromStdString(GameConstants::RESOURCE_NAMES[i])] = QVariant::fromValue(resources[i]);
- return result;
- }
- TResources resourcesFromVariant(const QVariant & v)
- {
- JsonNode vJson;
- for(auto r : v.toMap().keys())
- vJson[r.toStdString()].Integer() = v.toMap().value(r).toInt();
- return TResources(vJson);
- }
- QVariant toVariant(std::vector<int3> positions)
- {
- QVariantList result;
- for(int3 position : positions)
- {
- result.push_back(QVariant::fromValue<int3>(position));
- }
- return result;
- }
- std::vector<int3> deletedObjectsPositionsFromVariant(const QVariant & v)
- {
- std::vector<int3> result;
- for (auto positionAsVariant : v.toList())
- {
- int3 position = positionAsVariant.value<int3>();
- result.push_back(position);
- }
- return result;
- }
- QVariant toVariant(const CMapEvent & event)
- {
- QVariantMap result;
- result["name"] = QString::fromStdString(event.name);
- result["message"] = QString::fromStdString(event.message.toString());
- result["players"] = toVariant(event.players);
- result["humanAffected"] = QVariant::fromValue(event.humanAffected);
- result["computerAffected"] = QVariant::fromValue(event.computerAffected);
- result["firstOccurrence"] = QVariant::fromValue(event.firstOccurrence);
- result["nextOccurrence"] = QVariant::fromValue(event.nextOccurrence);
- result["resources"] = toVariant(event.resources);
- result["deletedObjectsPositions"] = toVariant(event.deletedObjectsCoordinates);
- return QVariant(result);
- }
- CMapEvent eventFromVariant(CMapHeader & mapHeader, const QVariant & variant)
- {
- CMapEvent result;
- auto v = variant.toMap();
- result.name = v.value("name").toString().toStdString();
- result.message.appendTextID(mapRegisterLocalizedString("map", mapHeader, TextIdentifier("header", "event", result.name, "message"), v.value("message").toString().toStdString()));
- result.players = playersFromVariant(v.value("players"));
- result.humanAffected = v.value("humanAffected").toInt();
- result.computerAffected = v.value("computerAffected").toInt();
- result.firstOccurrence = v.value("firstOccurrence").toInt();
- result.nextOccurrence = v.value("nextOccurrence").toInt();
- result.resources = resourcesFromVariant(v.value("resources"));
- result.deletedObjectsCoordinates = deletedObjectsPositionsFromVariant(v.value("deletedObjectsPositions"));
- return result;
- }
- EventSettings::EventSettings(QWidget *parent) :
- AbstractSettings(parent),
- ui(new Ui::EventSettings)
- {
- ui->setupUi(this);
- }
- EventSettings::~EventSettings()
- {
- delete ui;
- }
- void EventSettings::initialize(MapController & c)
- {
- AbstractSettings::initialize(c);
- for(const auto & event : controller->map()->events)
- {
- auto * item = new QListWidgetItem(QString::fromStdString(event.name));
- item->setData(Qt::UserRole, toVariant(event));
- ui->eventsList->addItem(item);
- }
- }
- void EventSettings::update()
- {
- controller->map()->events.clear();
- for(int i = 0; i < ui->eventsList->count(); ++i)
- {
- const auto * item = ui->eventsList->item(i);
- controller->map()->events.push_back(eventFromVariant(*controller->map(), item->data(Qt::UserRole)));
- }
- }
- void EventSettings::on_timedEventAdd_clicked()
- {
- CMapEvent event;
- event.name = tr("New event").toStdString();
- auto * item = new QListWidgetItem(QString::fromStdString(event.name));
- item->setData(Qt::UserRole, toVariant(event));
- ui->eventsList->addItem(item);
- on_eventsList_itemActivated(item);
- }
- void EventSettings::on_timedEventRemove_clicked()
- {
- if(auto * item = ui->eventsList->currentItem())
- ui->eventsList->takeItem(ui->eventsList->row(item));
- }
- void EventSettings::on_eventsList_itemActivated(QListWidgetItem *item)
- {
- new TimedEvent(item, parentWidget());
- }
|