///////////////////////////////////////////////////////////////////////////// // Name: pokegen/BadgeUI.cpp // Purpose: Badge UI form handling // Author: Ben Boeckel // Modified by: Ben Boeckel // Created: Sun Jan 27 13:10:47 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 . ///////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include "FileDialog.h" #include "BadgeUI.h" BadgeUI::BadgeUI(Badge* b, QWidget* parent) : ObjectUI(parent), badge(b), badge_mod(new Badge(b->getPokemod(), *b, b->getId())) { setupUi(this); QMetaObject::connectSlotsByName(this); setObjects(badge, badge_mod); connect(this, SIGNAL(changed(bool)), boxButtons, SLOT(setEnabled(bool))); init(); } void BadgeUI::initGui() { varHMs->addItems(Pokemod::HMStr); } void BadgeUI::refreshGui() { varStat->clear(); const bool isSplit = badge->getPokemod()->getRules()->getSpecialSplit(); varStat->addItems((isSplit ? Pokemod::StatGSCStr : Pokemod::StatRBYStr).mid(0, isSplit ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY));} void BadgeUI::setGui() { varName->setText(badge_mod->getName()); varObey->setMaximum(badge->getPokemod()->getRules()->getMaxLevel()); varObey->setValue(badge_mod->getObey()); try { varFace->setIcon(ImageCache::open(badge_mod->getFace())); } catch (OpenException& e) { } try { varBadge->setIcon(ImageCache::open(badge_mod->getBadge())); } catch (OpenException& e) { } varMultiplierNum->setValue(badge_mod->getStat(varStat->currentIndex()).getNum()); varMultiplierDenom->setValue(badge_mod->getStat(varStat->currentIndex()).getDenom()); varMultiplierNum->setMaximum(badge_mod->getStat(varStat->currentIndex()).getDenom()); varMultiplier->setText(QString::number(badge_mod->getStat(varStat->currentIndex()), 'g', DBL_PREC)); for (int i = 0; i < varHMs->count(); ++i) varHMs->item(i)->setSelected(badge_mod->getHm(i)); } void BadgeUI::on_buttonApply_clicked() { *badge = *badge_mod; emit(changed(false)); } void BadgeUI::on_buttonDiscard_clicked() { *badge_mod = *badge; setGui(); emit(changed(false)); } void BadgeUI::on_varName_textChanged(const QString& n) { badge_mod->setName(n); emit(changed(true)); } void BadgeUI::on_varObey_valueChanged(const int o) { try { badge_mod->setObey(o); emit(changed(true)); } catch (BoundsException& e) { BugCatcher::report(e); setGui(); } } void BadgeUI::on_varFace_pressed() { FileDialog dlg("*.png", QSize(64, 64)); if (dlg.show()) { try { badge_mod->setFace(dlg.selectedUrl()); } catch (SaveException& e) { BugCatcher::report(e); } setGui(); } } void BadgeUI::on_varBadge_pressed() { FileDialog dlg("*.png", QSize(64, 64)); if (dlg.show()) { try { badge_mod->setBadge(dlg.selectedUrl()); } catch (SaveException& e) { BugCatcher::report(e); } setGui(); } } void BadgeUI::on_varStat_currentIndexChanged() { emit(changed(true)); setGui(); } void BadgeUI::on_varMultiplierNum_valueChanged(const int m) { try { badge_mod->setStatNum(varStat->currentIndex(), m); emit(changed(true)); } catch (Exception& e) { BugCatcher::report(e); } setGui(); } void BadgeUI::on_varMultiplierDenom_valueChanged(const int m) { try { badge_mod->setStatDenom(varStat->currentIndex(), m); emit(changed(true)); } catch (Exception& e) { BugCatcher::report(e); } setGui(); } void BadgeUI::on_varHMs_itemSelectionChanged() { try { for (int i = 0; i < varHMs->count(); ++i) badge_mod->setHm(i, varHMs->item(i)->isSelected()); emit(changed(true)); } catch (BoundsException& e) { BugCatcher::report(e); setGui(); } }