diff options
Diffstat (limited to 'pokemodr/MapEffectUI.cpp')
| -rw-r--r-- | pokemodr/MapEffectUI.cpp | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/pokemodr/MapEffectUI.cpp b/pokemodr/MapEffectUI.cpp new file mode 100644 index 00000000..5aefb6fd --- /dev/null +++ b/pokemodr/MapEffectUI.cpp @@ -0,0 +1,186 @@ +/* + * Copyright 2008 Ben Boeckel <MathStuf@gmail.com> + * + * 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 <http://www.gnu.org/licenses/>. + */ + +// Header include +#include "MapEffectUI.h" + +// PokeModr includes +#include "FileDialog.h" + +// Pokemod includes +#include "../pokemod/Dialog.h" +#include "../pokemod/Item.h" +#include "../pokemod/Map.h" +#include "../pokemod/MapEffect.h" +#include "../pokemod/Pokemod.h" + +MapEffectUI::MapEffectUI(MapEffect* effect, QWidget* parent) : + ObjectUI(parent) +{ + setupUi(this); + QMetaObject::connectSlotsByName(this); + setObjects(effect, new MapEffect(*effect)); + 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(); +} + +MapEffectUI::~MapEffectUI() +{ +} + +void MapEffectUI::initGui() +{ + varEffect->addItems(MapEffect::EffectStr); + varDirection->addItems(Pokemod::DirectionStr.mid(0, Pokemod::D_End)); +} + +void MapEffectUI::refreshGui() +{ + varCoordinate->setMaximum(static_cast<const Map*>(original()->parent())->size()); + varDialog->clear(); + for (int i = 0; i < static_cast<const Pokemod*>(original()->pokemod())->dialogCount(); ++i) + { + const Dialog* dialog = static_cast<const Pokemod*>(original()->pokemod())->dialog(i); + varDialog->addItem(dialog->dialog().mid(0, 25)); + varDialog->setItemData(i, dialog->id()); + } +} + +void MapEffectUI::setGui() +{ + varName->setText(static_cast<MapEffect*>(modified())->name()); + varCoordinate->setValue(static_cast<MapEffect*>(modified())->coordinate()); + varExistFlag->setValue(static_cast<MapEffect*>(modified())->existFlag()); + varSkin->setIcon(static_cast<MapEffect*>(modified())->skin()); + varEffect->setCurrentIndex(static_cast<MapEffect*>(modified())->effect()); + const int effect = static_cast<MapEffect*>(modified())->effect(); + if ((effect == MapEffect::E_Button) || (effect == MapEffect::E_StrengthBlock)) + { + varValue1->setEnabled(true); + varValue1->setValue(static_cast<MapEffect*>(modified())->value1()); + } + else + varValue1->setEnabled(false); + varValue2->clear(); + switch (effect) + { + case MapEffect::E_Item: + for (int i = 0; i < static_cast<const Pokemod*>(original()->pokemod())->itemCount(); ++i) + { + const Item* item = static_cast<const Pokemod*>(original()->pokemod())->item(i); + varValue2->addItem(item->name()); + varValue2->setItemData(i, item->id()); + } + varValue2->setCurrentIndex(varValue2->findData(static_cast<MapEffect*>(modified())->value2())); + break; + case MapEffect::E_PC: + varValue2->addItems(MapEffect::PCTypeStr); + for (int i = 0; i < MapEffect::PC_End; ++i) + varValue2->setItemData(i, i); + varValue2->setCurrentIndex(static_cast<MapEffect*>(modified())->value2()); + break; + case MapEffect::E_StrengthBlock: + case MapEffect::E_Button: + varValue2->addItems(Flag::ValueStr); + for (int i = 0; i < Flag::End; ++i) + varValue2->setItemData(i, i); + varValue2->setCurrentIndex(static_cast<MapEffect*>(modified())->value2()); + break; + } + varDirection->setCurrentIndex(static_cast<MapEffect*>(modified())->direction()); + varIsGhost->setChecked(static_cast<MapEffect*>(modified())->isGhost() ? Qt::Checked : Qt::Unchecked); + varCanMove->setChecked(static_cast<MapEffect*>(modified())->canMove() ? Qt::Checked : Qt::Unchecked); + varDialog->setCurrentIndex(varDialog->findData(static_cast<MapEffect*>(modified())->dialog())); +} + +void MapEffectUI::on_buttonApply_clicked() +{ + *static_cast<MapEffect*>(original()) = *static_cast<MapEffect*>(modified()); + emit(changed(false)); +} + +void MapEffectUI::on_buttonDiscard_clicked() +{ + *static_cast<MapEffect*>(modified()) = *static_cast<MapEffect*>(original()); + setGui(); + emit(changed(false)); +} + +void MapEffectUI::on_varName_textChanged(const QString& name) +{ + static_cast<MapEffect*>(modified())->setName(name); +} + +void MapEffectUI::on_varCoordinate_valueChanged(const Point& coordinate) +{ + static_cast<MapEffect*>(modified())->setCoordinate(coordinate); +} + +void MapEffectUI::on_varExistFlag_valueChanged(const Flag& existFlag) +{ + static_cast<MapEffect*>(modified())->setExistFlag(existFlag); +} + +void MapEffectUI::on_varSkin_pressed() +{ + FileDialog* dialog = new FileDialog(QSize(192, 128)); + if (dialog->exec() == QDialog::Accepted) + { + static_cast<MapEffect*>(modified())->setSkin(QPixmap(dialog->selectedFile())); + setGui(); + } + delete dialog; +} + +void MapEffectUI::on_varEffect_indexChanged(const int effect) +{ + static_cast<MapEffect*>(modified())->setEffect(effect); +} + +void MapEffectUI::on_varValue1_valueChanged(const int value1) +{ + static_cast<MapEffect*>(modified())->setValue1(value1); +} + +void MapEffectUI::on_varValue2_currentIndexChanged(const int value2) +{ + static_cast<MapEffect*>(modified())->setValue1(varValue2->itemData(value2).toInt()); +} + +void MapEffectUI::on_varDirection_currentIndexChanged(const int direction) +{ + static_cast<MapEffect*>(modified())->setDirection(direction); +} + +void MapEffectUI::on_varIsGhost_clicked(const bool isGhost) +{ + static_cast<MapEffect*>(modified())->setIsGhost(isGhost); +} + +void MapEffectUI::on_varCanMove_clicked(const bool canMove) +{ + static_cast<MapEffect*>(modified())->setCanMove(canMove); +} + +void MapEffectUI::on_varDialog_currentIndexChanged(const int dialog) +{ + static_cast<MapEffect*>(modified())->setDialog(varDialog->itemData(dialog).toInt()); +} |
