diff options
Diffstat (limited to 'pokemodr/TileUI.cpp')
| -rw-r--r-- | pokemodr/TileUI.cpp | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/pokemodr/TileUI.cpp b/pokemodr/TileUI.cpp new file mode 100644 index 00000000..2b13ca87 --- /dev/null +++ b/pokemodr/TileUI.cpp @@ -0,0 +1,244 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: pokegen/TileUI.cpp +// Purpose: Tile UI form handling +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Wed Feb 6 14:22:36 2008 +// Copyright: ©2007-2008 Ben Boeckel and Nerdy Productions +// Licence: +// 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/>. +///////////////////////////////////////////////////////////////////////////// + +#include <QList> +#include <QListIterator> +#include <QListWidgetItem> +#include <QMetaObject> +#include "../general/BugCatcher.h" +#include "../general/Exception.h" +#include "../general/ImageCache.h" +#include "../general/Ref.h" +#include "../pokemod/Pokemod.h" +#include "ImageDialog.h" +#include "TileUI.h" + +TileUI::TileUI(Tile* t, QWidget* parent) : + ObjectUI(parent), + tile(t), + tile_mod(new Tile(t->getPokemod(), *t, t->getId())) +{ + setupUi(this); + QMetaObject::connectSlotsByName(this); + setObjects(tile, tile_mod); + varAccessibility->addItems(DirectionStr.mid(0, 4)); + varHMType->addItems(HMStr); + for (int i = 0; i < tile->getPokemod().getTileCount(); ++i) + { + const Tile& tl = tile->getPokemod().getTile(i); + if (tl.getId() != t->getId()) + { + varHMUnder->addItem(ImageCache::open(tl.getPic()), tl.getName()); + varHMUnder->setItemData(i, tl.getId()); + } + } + varForce->addItems(Tile::ForceStr); + varDirection->addItems(DirectionStr.mid(0, 4)); + setGui(); +} + +// KToolbar getToolbar(QWidget* parent) +// { +// +// } + +void TileUI::setGui() +{ + varName->setText(tile_mod->getName()); + try + { + varImage->setIcon(ImageCache::open(tile_mod->getPic())); + } + catch (OpenException& e) + { + BugCatcher::report(e); + } + for (unsigned i = 0; i < D_End; ++i) + varAccessibility->item(i)->setSelected(tile_mod->getFrom(i)); + varWildNum->setValue(tile_mod->getWildChance().getNum()); + varWildDenom->setValue(tile_mod->getWildChance().getDenom()); + varWildNum->setMaximum(tile_mod->getWildChance().getDenom()); + varWild->setText(QString::number(tile_mod->getWildChance(), 'g', 15)); + boxHMs->setChecked((tile_mod->getHMType() == -1) ? Qt::Unchecked : Qt::Checked); + varHMType->setCurrentIndex(tile_mod->getHMType()); + varHMUnder->setCurrentIndex(tile_mod->getUnder()); + varHMUnder->setEnabled((tile_mod->getHMType() == HM_Whirlpool) || (tile_mod->getHMType() == HM_Cut) || (tile_mod->getHMType() == HM_RockSmash)); + boxForces->setChecked((tile_mod->getForceType() == -1) ? Qt::Unchecked : Qt::Checked); + varForce->setCurrentIndex(tile_mod->getForceType()); + varDirection->setCurrentIndex(tile_mod->getForceDirection()); + varDirection->setEnabled(tile_mod->getForceType() != Tile::Stop); +} + +void TileUI::on_buttonApply_clicked() +{ + *tile = *tile_mod; + emit(setChanged(false)); +} + +void TileUI::on_buttonDiscard_clicked() +{ + *tile_mod = *tile; + emit(setChanged(false)); + setGui(); +} + +void TileUI::on_varName_textChanged(const QString& n) +{ + tile_mod->setName(n); + emit(setChanged(true)); +} + +void TileUI::on_varImage_pressed() +{ + if (ImageDialog::exec()) + { + try + { + tile_mod->setPic(ImageDialog::selectedUrl()); + } + catch (SaveException& e) + { + BugCatcher::report(e); + } + setGui(); + } +} + +void TileUI::on_varWildNum_valueChanged(const int m) +{ + try + { + tile_mod->setWildChanceNum(m); + varWild->setText(QString::number(tile_mod->getWildChance(), 'g', 15)); + emit(setChanged(true)); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + setGui(); + } +} + +void TileUI::on_varWildDenom_valueChanged(const int m) +{ + try + { + tile_mod->setWildChanceDenom(m); + varWildNum->setMaximum(m); + varWild->setText(QString::number(tile_mod->getWildChance(), 'g', 15)); + emit(setChanged(true)); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + setGui(); + } +} + +void TileUI::on_varAccessibility_itemSelectionChanged() +{ + try + { + for (QListIterator<QListWidgetItem*> i(varAccessibility->selectedItems()); i.hasNext(); i.next()) + tile_mod->setFrom(i.peekNext()->data(QListWidgetItem::UserType).toInt(), i.peekNext()->isSelected()); + emit(setChanged(true)); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + setGui(); + } +} + +void TileUI::on_boxHMs_toggled(const bool h) +{ + if (!h) + { + varHMType->setCurrentIndex(-1); + varHMUnder->setCurrentIndex(-1); + setGui(); + emit(setChanged(true)); + } +} + +void TileUI::on_varHMType_currentIndexChanged(const int h) +{ + try + { + tile_mod->setHMType(h); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + } + setGui(); +} + +void TileUI::on_varHMUnder_currentIndexChanged(const int h) +{ + try + { + tile_mod->setUnder(varHMUnder->itemData(h, Qt::UserRole).toInt()); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + setGui(); + } +} + +void TileUI::on_boxForces_toggled(const bool f) +{ + if (!f) + { + varForce->setCurrentIndex(-1); + varDirection->setCurrentIndex(-1); + setGui(); + emit(setChanged(true)); + } +} + +void TileUI::on_varForce_currentIndexChanged(const int f) +{ + try + { + tile_mod->setForceType(f); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + } + setGui(); +} + +void TileUI::on_varDirection_currentIndexChanged(const int d) +{ + try + { + tile_mod->setForceDirection(d); + } + catch (BoundsException& e) + { + BugCatcher::report(e); + setGui(); + } +} |
