/* * 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 "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(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(original()->parent())->size()); varDialog->clear(); for (int i = 0; i < static_cast(original()->pokemod())->dialogCount(); ++i) { const Dialog* dialog = static_cast(original()->pokemod())->dialog(i); varDialog->addItem(dialog->dialog().mid(0, 25)); varDialog->setItemData(i, dialog->id()); } } void MapEffectUI::setGui() { varName->setText(static_cast(modified())->name()); varCoordinate->setValue(static_cast(modified())->coordinate()); varExistFlag->setValue(static_cast(modified())->existFlag()); varSkin->setIcon(static_cast(modified())->skin()); varEffect->setCurrentIndex(static_cast(modified())->effect()); const int effect = static_cast(modified())->effect(); if ((effect == MapEffect::E_Button) || (effect == MapEffect::E_StrengthBlock)) { varValue1->setEnabled(true); varValue1->setValue(static_cast(modified())->value1()); } else varValue1->setEnabled(false); varValue2->clear(); switch (effect) { case MapEffect::E_Item: for (int i = 0; i < static_cast(original()->pokemod())->itemCount(); ++i) { const Item* item = static_cast(original()->pokemod())->item(i); varValue2->addItem(item->name()); varValue2->setItemData(i, item->id()); } varValue2->setCurrentIndex(varValue2->findData(static_cast(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(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(modified())->value2()); break; } varDirection->setCurrentIndex(static_cast(modified())->direction()); varIsGhost->setChecked(static_cast(modified())->isGhost() ? Qt::Checked : Qt::Unchecked); varCanMove->setChecked(static_cast(modified())->canMove() ? Qt::Checked : Qt::Unchecked); varDialog->setCurrentIndex(varDialog->findData(static_cast(modified())->dialog())); } void MapEffectUI::apply() { *static_cast(original()) = *static_cast(modified()); emit(changed(false)); } void MapEffectUI::discard() { *static_cast(modified()) = *static_cast(original()); setGui(); emit(changed(false)); } void MapEffectUI::on_varName_textChanged(const QString& name) { static_cast(modified())->setName(name); } void MapEffectUI::on_varCoordinate_valueChanged(const Point& coordinate) { static_cast(modified())->setCoordinate(coordinate); } void MapEffectUI::on_varExistFlag_valueChanged(const Flag& existFlag) { static_cast(modified())->setExistFlag(existFlag); } void MapEffectUI::on_varSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 128)); if (dialog->exec() == QDialog::Accepted) { static_cast(modified())->setSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void MapEffectUI::on_varEffect_indexChanged(const int effect) { static_cast(modified())->setEffect(effect); } void MapEffectUI::on_varValue1_valueChanged(const int value1) { static_cast(modified())->setValue1(value1); } void MapEffectUI::on_varValue2_currentIndexChanged(const int value2) { static_cast(modified())->setValue1(varValue2->itemData(value2).toInt()); } void MapEffectUI::on_varDirection_currentIndexChanged(const int direction) { static_cast(modified())->setDirection(direction); } void MapEffectUI::on_varIsGhost_clicked(const bool isGhost) { static_cast(modified())->setIsGhost(isGhost); } void MapEffectUI::on_varCanMove_clicked(const bool canMove) { static_cast(modified())->setCanMove(canMove); } void MapEffectUI::on_varDialog_currentIndexChanged(const int dialog) { static_cast(modified())->setDialog(varDialog->itemData(dialog).toInt()); }