/* * 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 "PokemodUI.h" // PokeModr includes #include "FileDialog.h" #include "TypechartWidgetItem.h" // Pokemod includes #include "../pokemod/Map.h" #include "../pokemod/MapWarp.h" #include "../pokemod/Pokemod.h" #include "../pokemod/Type.h" PokemodUI::PokemodUI(Pokemod* pokemod, QWidget* parent) : ObjectUI(parent), m_lastMap(-1) { setupUi(this); setObjects(pokemod, new Pokemod(*pokemod)); } PokemodUI::~PokemodUI() { } void PokemodUI::refreshGui() { varMap->clear(); for (int i = 0; i < static_cast(original())->mapCount(); ++i) { const Map* map = static_cast(original())->map(i); varMap->addItem(map->name(), map->id()); } varTypechart->setRowCount(static_cast(original())->typeCount()); varTypechart->setColumnCount(static_cast(original())->typeCount()); QStringList types; Matrix* typeChart = static_cast(original())->typeChart(); for (int i = 0; i < static_cast(original())->typeCount(); ++i) { types << static_cast(original())->type(i)->name(); // TODO: set the typechart correctly // for (int j = 0; j < static_cast(original())->typeCount(); ++j) // varTypechart->item(i, j)->setData(Qt::EditRole, QVariant::fromValue(typeChart->at(i, j))); } varTypechart->setVerticalHeaderLabels(types); varTypechart->setHorizontalHeaderLabels(types); } void PokemodUI::setGui() { const bool resetWarps = (static_cast(modified())->startMap() != m_lastMap); varTitle->setText(static_cast(modified())->title()); varVersion->setText(static_cast(modified())->version()); varDescription->setPlainText(static_cast(modified())->description()); varMap->setCurrentIndex(varMap->findData(static_cast(modified())->startMap())); m_lastMap = static_cast(modified())->startMap(); if (resetWarps) { varWarp->clear(); const Map* map = static_cast(original())->mapById(static_cast(modified())->startMap()); if (map) { for (int i = 0; i < map->warpCount(); ++i) { const MapWarp* warp = map->warp(i); varWarp->addItem(warp->name(), warp->id()); } } } varWarp->setCurrentIndex(varWarp->findData(static_cast(modified())->startWarp())); varWalkSkin->setIcon(static_cast(original())->walkSkin()); varBikeSkin->setIcon(static_cast(original())->bikeSkin()); varFlySkin->setIcon(static_cast(original())->flySkin()); varSurfSkin->setIcon(static_cast(original())->surfSkin()); varFishSkin->setIcon(static_cast(original())->fishSkin()); varSurfFishSkin->setIcon(static_cast(original())->surfFishSkin()); } void PokemodUI::apply() { *static_cast(original()) = *static_cast(modified()); emit(changed(false)); } void PokemodUI::discard() { *static_cast(modified()) = *static_cast(original()); setGui(); emit(changed(false)); } void PokemodUI::on_varTitle_textChanged(const QString& title) { static_cast(modified())->setTitle(title); } void PokemodUI::on_varVersion_textChanged(const QString& version) { static_cast(modified())->setVersion(version); } void PokemodUI::on_varDescription_textChanged() { QTextCursor cursor = varDescription->textCursor(); static_cast(modified())->setDescription(varDescription->toPlainText()); varDescription->setTextCursor(cursor); } void PokemodUI::on_varMap_activated(const int map) { static_cast(modified())->setStartMap(map); } void PokemodUI::on_varWarp_activated(const int warp) { static_cast(modified())->setStartWarp(warp); } void PokemodUI::on_varWalkSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setWalkSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varBikeSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setBikeSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varFlySkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setFlySkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varSurfSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setSurfSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varFishSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setFishSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varSurfFishSkin_pressed() { FileDialog* dialog = new FileDialog(QSize(192, 168)); if (dialog->exec() == QDialog::Accepted) { static_cast(original())->setSurfFishSkin(QPixmap(dialog->selectedFile())); setGui(); } delete dialog; } void PokemodUI::on_varTypechart_currentItemChanged(QTableWidgetItem* current, QTableWidgetItem* previous) { disconnect(varEffectiveness, SIGNAL(valueChanged(Fraction)), static_cast(previous), SLOT(setValue(Fraction))); TypechartWidgetItem* widgetItem = static_cast(current); // varEffectiveness->setValue(widgetItem->data(Qt::EditRole).value()); connect(varEffectiveness, SIGNAL(valueChanged(Fraction)), widgetItem, SLOT(setValue(Fraction))); }