/* * Copyright 2008-2009 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 "MapTrainerTeamMemberUI.h" // Sigmod includes #include #include #include #include #include #include #include #include // KDE includes #include #include #include #include // Qt includes #include #include #include #include using namespace Sigmod; using namespace Sigmodr::Widgets; MapTrainerTeamMemberUI::MapTrainerTeamMemberUI(MapTrainerTeamMember* teamMember, QWidget* parent) : ObjectUI(parent) { setObjects(teamMember, new MapTrainerTeamMember(*teamMember)); } void MapTrainerTeamMemberUI::initGui() { QFile file(":/gui/maptrainerteammember.ui"); file.open(QFile::ReadOnly); QWidget *formWidget = QUiLoader().load(&file, this); file.close(); ui_species = formWidget->findChild("varSpecies"); ui_level = formWidget->findChild("varLevel"); ui_abilities = formWidget->findChild("varAbilities"); ui_boxItems = formWidget->findChild("boxItems"); ui_items = formWidget->findChild("varItems"); ui_itemCount = formWidget->findChild("varItemCount"); ui_moves = formWidget->findChild("varMoves"); ui_natures = formWidget->findChild("varNatures"); connect(ui_species, SIGNAL(currentIndexChanged(int)), this, SLOT(speciesChanged(int))); connect(ui_level, SIGNAL(valueChanged(int)), this, SLOT(levelChanged(int))); connect(ui_abilities, SIGNAL(added(QListWidgetItem*)), this, SLOT(abilityAdded(QListWidgetItem*))); connect(ui_abilities, SIGNAL(removed(QListWidgetItem*)), this, SLOT(abilityRemoved(QListWidgetItem*))); connect(ui_items, SIGNAL(added(QListWidgetItem*)), this, SLOT(itemAdded(QListWidgetItem*))); connect(ui_items, SIGNAL(removed(QListWidgetItem*)), this, SLOT(itemRemoved(QListWidgetItem*))); connect(ui_itemCount, SIGNAL(valueChanged(int)), this, SLOT(itemCountChanged(int))); connect(ui_moves, SIGNAL(added(QListWidgetItem*)), this, SLOT(moveAdded(QListWidgetItem*))); connect(ui_moves, SIGNAL(removed(QListWidgetItem*)), this, SLOT(moveRemoved(QListWidgetItem*))); connect(ui_natures, SIGNAL(added(QListWidgetItem*)), this, SLOT(natureAdded(QListWidgetItem*))); connect(ui_natures, SIGNAL(removed(QListWidgetItem*)), this, SLOT(natureRemoved(QListWidgetItem*))); connect(ui_items->selectedListWidget(), SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(selectedItemChanged(QListWidgetItem*))); } void MapTrainerTeamMemberUI::refreshGui() { const bool blockedSpecies = ui_species->blockSignals(true); ui_species->clear(); for (int i = 0; i < game()->speciesCount(); ++i) ui_species->addItem(game()->species(i)->name()); ui_species->blockSignals(blockedSpecies); ui_level->setMaximum(game()->rules()->maxLevel()); const bool blockedAbilities = ui_abilities->blockSignals(true); ui_abilities->availableListWidget()->clear(); ui_abilities->selectedListWidget()->clear(); for (int i = 0; i < game()->abilityCount(); ++i) { const Ability* ability = game()->ability(i); QListWidgetItem* widgetItem = new QListWidgetItem(ability->name(), ui_abilities->availableListWidget()); widgetItem->setData(Qt::UserRole, ability->id()); } ui_abilities->blockSignals(blockedAbilities); ui_abilities->setButtonsEnabled(); ui_abilities->setEnabled(game()->rules()->maxAbilities()); const bool blockedItems = ui_items->blockSignals(true); ui_items->availableListWidget()->clear(); ui_items->selectedListWidget()->clear(); for (int i = 0; i < game()->itemCount(); ++i) { const Item* item = game()->item(i); QListWidgetItem* widgetItem = new QListWidgetItem(item->name(), ui_items->availableListWidget()); widgetItem->setData(Qt::UserRole, item->id()); } ui_items->blockSignals(blockedItems); ui_items->setButtonsEnabled(); ui_boxItems->setEnabled(game()->rules()->maxHeldItems()); const bool blockedMoves = ui_moves->blockSignals(true); ui_moves->availableListWidget()->clear(); ui_moves->selectedListWidget()->clear(); for (int i = 0; i < game()->moveCount(); ++i) { const Move* move = game()->move(i); QListWidgetItem* widgetItem = new QListWidgetItem(move->name(), ui_moves->availableListWidget()); widgetItem->setData(Qt::UserRole, move->id()); } ui_moves->blockSignals(blockedMoves); ui_moves->setButtonsEnabled(); const bool blockedNatures = ui_natures->blockSignals(true); ui_natures->availableListWidget()->clear(); ui_natures->selectedListWidget()->clear(); for (int i = 0; i < game()->natureCount(); ++i) { const Nature* nature = game()->nature(i); QListWidgetItem* widgetItem = new QListWidgetItem(nature->name(), ui_natures->availableListWidget()); widgetItem->setData(Qt::UserRole, nature->id()); } ui_natures->blockSignals(blockedNatures); ui_natures->setButtonsEnabled(); ui_natures->setEnabled(game()->rules()->maxNatures()); } void MapTrainerTeamMemberUI::setGui() { ui_species->setCurrentIndex(game()->speciesIndex(qobject_cast(modified())->species())); ui_level->setValue(qobject_cast(modified())->level()); for (int i = 0; i < ui_abilities->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_abilities->availableListWidget()->item(i); if (qobject_cast(modified())->ability(widgetItem->data(Qt::UserRole).toInt())) ui_abilities->selectedListWidget()->addItem(ui_abilities->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_abilities->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_abilities->selectedListWidget()->item(i); if (!qobject_cast(modified())->ability(widgetItem->data(Qt::UserRole).toInt())) ui_abilities->availableListWidget()->addItem(ui_abilities->selectedListWidget()->takeItem(i--)); } ui_abilities->setButtonsEnabled(); for (int i = 0; i < ui_items->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_items->availableListWidget()->item(i); if (qobject_cast(modified())->item(widgetItem->data(Qt::UserRole).toInt())) ui_items->selectedListWidget()->addItem(ui_items->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_items->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_items->selectedListWidget()->item(i); if (!qobject_cast(modified())->item(widgetItem->data(Qt::UserRole).toInt())) ui_items->availableListWidget()->addItem(ui_items->selectedListWidget()->takeItem(i--)); } ui_items->setButtonsEnabled(); QListWidgetItem* selectedItem = ui_items->selectedListWidget()->currentItem(); if (selectedItem) ui_itemCount->setValue(qobject_cast(modified())->item(selectedItem->data(Qt::UserRole).toInt())); for (int i = 0; i < ui_moves->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_moves->availableListWidget()->item(i); if (qobject_cast(modified())->move(widgetItem->data(Qt::UserRole).toInt())) ui_moves->selectedListWidget()->addItem(ui_moves->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_moves->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_moves->selectedListWidget()->item(i); if (!qobject_cast(modified())->move(widgetItem->data(Qt::UserRole).toInt())) ui_moves->availableListWidget()->addItem(ui_moves->selectedListWidget()->takeItem(i--)); } ui_moves->setButtonsEnabled(); for (int i = 0; i < ui_natures->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_natures->availableListWidget()->item(i); if (qobject_cast(modified())->nature(widgetItem->data(Qt::UserRole).toInt())) ui_natures->selectedListWidget()->addItem(ui_natures->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_natures->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_natures->selectedListWidget()->item(i); if (!qobject_cast(modified())->nature(widgetItem->data(Qt::UserRole).toInt())) ui_natures->availableListWidget()->addItem(ui_natures->selectedListWidget()->takeItem(i--)); } ui_natures->setButtonsEnabled(); } void MapTrainerTeamMemberUI::apply() { *qobject_cast(original()) = *qobject_cast(modified()); emit(changed(false)); } void MapTrainerTeamMemberUI::discard() { *qobject_cast(modified()) = *qobject_cast(original()); setGui(); emit(changed(false)); } void MapTrainerTeamMemberUI::speciesChanged(const int species) { qobject_cast(modified())->setSpecies(game()->species(species)->id()); } void MapTrainerTeamMemberUI::levelChanged(const int level) { qobject_cast(modified())->setLevel(level); } void MapTrainerTeamMemberUI::abilityAdded(QListWidgetItem* item) { qobject_cast(modified())->setAbility(item->data(Qt::UserRole).toInt(), true); setGui(); } void MapTrainerTeamMemberUI::abilityRemoved(QListWidgetItem* item) { qobject_cast(modified())->setAbility(item->data(Qt::UserRole).toInt(), false); setGui(); } void MapTrainerTeamMemberUI::itemAdded(QListWidgetItem* item) { qobject_cast(modified())->setItem(item->data(Qt::UserRole).toInt(), 1); setGui(); } void MapTrainerTeamMemberUI::itemRemoved(QListWidgetItem* item) { qobject_cast(modified())->setItem(item->data(Qt::UserRole).toInt(), 0); setGui(); } void MapTrainerTeamMemberUI::itemChanged(QListWidgetItem* item) { if (item) ui_itemCount->setValue(qobject_cast(modified())->item(item->data(Qt::UserRole).toInt())); else ui_itemCount->setEnabled(false); } void MapTrainerTeamMemberUI::itemCountChanged(const int itemCount) { QListWidgetItem* item = ui_items->selectedListWidget()->currentItem(); qobject_cast(modified())->setItem(item->data(Qt::UserRole).toInt(), itemCount); setGui(); } void MapTrainerTeamMemberUI::moveAdded(QListWidgetItem* item) { qobject_cast(modified())->setMove(item->data(Qt::UserRole).toInt(), true); setGui(); } void MapTrainerTeamMemberUI::moveRemoved(QListWidgetItem* item) { qobject_cast(modified())->setMove(item->data(Qt::UserRole).toInt(), false); setGui(); } void MapTrainerTeamMemberUI::natureAdded(QListWidgetItem* item) { qobject_cast(modified())->setNature(item->data(Qt::UserRole).toInt(), true); setGui(); } void MapTrainerTeamMemberUI::natureRemoved(QListWidgetItem* item) { qobject_cast(modified())->setNature(item->data(Qt::UserRole).toInt(), false); setGui(); }