/* * Copyright 2008 Ben Boeckel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "MapWarpUI.h" // Pokemod includes #include "../pokemod/Dialog.h" #include "../pokemod/Map.h" #include "../pokemod/MapWarp.h" #include "../pokemod/Pokemod.h" MapWarpUI::MapWarpUI(MapWarp* warp, QWidget* parent) : ObjectUI(parent), m_lastMap(-1) { setupUi(this); QMetaObject::connectSlotsByName(this); setObjects(warp, new MapWarp(*warp)); connect(this, SIGNAL(changed(bool)), boxButtons, SLOT(setEnabled(bool))); connect(modified(), SIGNAL(error(const QString&)), this, SLOT(setGui())); connect(modified(), SIGNAL(error(const QString&)), this, SLOT(errorMessage(const QString&))); connect(modified(), SIGNAL(warning(const QString&)), this, SLOT(warningMessage(const QString&))); connect(modified(), SIGNAL(changed()), this, SLOT(setChanged())); init(); } MapWarpUI::~MapWarpUI() { } void MapWarpUI::initGui() { varActivation->addItems(Pokemod::DirectionStr.mid(0, Pokemod::D_End)); varType->addItems(MapWarp::TypeStr); } void MapWarpUI::refreshGui() { varToMap->clear(); for (int i = 0; i < static_cast(static_cast(original())->pokemod())->mapCount(); ++i) { const Map* map = static_cast(static_cast(original())->pokemod())->map(i); varToMap->addItem(map->name()); varToMap->setItemData(i, map->id()); } varDialog->clear(); for (int i = 0; i < static_cast(static_cast(original())->pokemod())->dialogCount(); ++i) { const Dialog* dialog = static_cast(static_cast(original())->pokemod())->dialog(i); varDialog->addItem(dialog->dialog().mid(0, 25)); varDialog->setItemData(i, dialog->id()); } } void MapWarpUI::setGui() { const bool resetWarps = (static_cast(modified())->toMap() == m_lastMap); varName->setText(static_cast(modified())->name()); varCoordinate->setValue(static_cast(modified())->coordinate()); for (int i = 0; i < varActivation->count(); ++i) varActivation->item(i)->setSelected(static_cast(modified())->from(i)); varDirectionOut->setCurrentIndex(static_cast(modified())->directionOut()); varType->setCurrentIndex(static_cast(modified())->type()); varBiking->setCheckState((static_cast(modified())->isBiking() == Flag::On) ? Qt::Checked : ((static_cast(modified())->isBiking() == Flag::Off) ? Qt::Unchecked : Qt::PartiallyChecked)); varFlash->setCheckState((static_cast(modified())->isFlash() == Flag::On) ? Qt::Checked : ((static_cast(modified())->isFlash() == Flag::Off) ? Qt::Unchecked : Qt::PartiallyChecked)); varFog->setCheckState((static_cast(modified())->isFoggy() == Flag::On) ? Qt::Checked : ((static_cast(modified())->isFoggy() == Flag::Off) ? Qt::Unchecked : Qt::PartiallyChecked)); varToMap->setCurrentIndex(varToMap->findData(static_cast(modified())->toMap())); m_lastMap = static_cast(modified())->toMap(); if (resetWarps) { varToWarp->clear(); int index = static_cast(static_cast(original())->pokemod())->mapIndex(static_cast(modified())->toMap()); if (index != INT_MAX) { const Map* map = static_cast(static_cast(original())->pokemod())->map(index); if (map) { for (int i = 0; i < map->warpCount(); ++i) { const MapWarp* warp = map->warp(i); varToWarp->addItem(warp->name()); varToWarp->setItemData(i, warp->id()); } } } } varToWarp->setCurrentIndex(varToMap->findData(static_cast(modified())->toWarp())); boxFlag->setChecked((static_cast(modified())->workingFlag().status() == Flag::Ignore) ? Qt::Unchecked : Qt::Checked); if (boxFlag->isChecked()) { varFlag->setValue(static_cast(modified())->workingFlag().flag()); varState->setCheckState((static_cast(modified())->workingFlag().status() == Flag::On) ? Qt::Checked : Qt::Unchecked); } varDialog->setCurrentIndex(varDialog->findData(static_cast(modified())->dialog())); } void MapWarpUI::on_buttonApply_clicked() { *static_cast(original()) = *static_cast(modified()); emit(changed(false)); } void MapWarpUI::on_buttonDiscard_clicked() { *static_cast(modified()) = *static_cast(original()); setGui(); emit(changed(false)); } void MapWarpUI::on_varName_textChanged(const QString& name) { static_cast(modified())->setName(name); } void MapWarpUI::on_varCoordinate_valueChanged(const Point& coordinate) { static_cast(modified())->setCoordinate(coordinate); } void MapWarpUI::on_varActivation_itemSelectionChanged() { for (int i = 0; i < varActivation->count(); ++i) static_cast(modified())->setFrom(i, varActivation->item(i)->isSelected()); } void MapWarpUI::on_varDirectionOut_currentIndexChanged(const int directionOut) { static_cast(modified())->setDirectionOut(directionOut); } void MapWarpUI::on_varType_currentIndexChanged(const int type) { static_cast(modified())->setType(type); } void MapWarpUI::on_varBiking_stateChanged(const int biking) { static_cast(modified())->setIsBiking(biking); } void MapWarpUI::on_varFlash_stateChanged(const int flash) { static_cast(modified())->setIsFlash(flash); } void MapWarpUI::on_varFog_stateChanged(const int fog) { static_cast(modified())->setIsFoggy(fog); } void MapWarpUI::on_varToMap_currentIndexChanged(const int toMap) { static_cast(modified())->setToMap(toMap); } void MapWarpUI::on_varToWarp_currentIndexChanged(const int toWarp) { static_cast(modified())->setToWarp(toWarp); } void MapWarpUI::on_boxFlag_toggled(const bool flagUsed) { if (!flagUsed) static_cast(modified())->setWorkingFlag(Flag(varFlag->value(), Flag::Ignore)); } void MapWarpUI::on_varFlag_valueChanged(const int flag) { static_cast(modified())->setWorkingFlag(Flag(flag, boxFlag->isChecked() ? Flag::Ignore : (varState->isChecked() ? Flag::On : Flag::Off))); } void MapWarpUI::on_varState_toggled(const bool status) { static_cast(modified())->setWorkingFlag(Flag(varFlag->value(), status ? Flag::On : Flag::Off)); } void MapWarpUI::on_varDialog_currentIndexChanged(const int dialog) { static_cast(modified())->setDialog(dialog); }