summaryrefslogtreecommitdiffstats
path: root/pokemodr/TileUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemodr/TileUI.cpp')
-rw-r--r--pokemodr/TileUI.cpp244
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();
+ }
+}