///////////////////////////////////////////////////////////////////////////// // Name: pokegen/PokeModTreeItem.cpp // Purpose: Subclass of QTreeWidgetItem that allows information to be // tacked on as well // Author: Ben Boeckel // Modified by: Ben Boeckel // Created: Sat Feb 23 18:44:25 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "AbilityUI.h" // #include "AbilityEffectUI.h" #include "AuthorUI.h" #include "BadgeUI.h" #include "CoinListUI.h" #include "CoinListObjectUI.h" // #include "DialogUI.h" #include "EggGroupUI.h" #include "ItemUI.h" // #include "ItemEffectUI.h" #include "ItemTypeUI.h" #include "MapUI.h" // #include "MapEffectUI.h" // #include "MapTrainerUI.h" #include "MapTrainerTeamMemberUI.h" #include "MapWarpUI.h" #include "MapWildListUI.h" #include "MapWildListEncounterUI.h" #include "MoveUI.h" // #include "MoveEffectUI.h" #include "NatureUI.h" #include "PokemodUI.h" #include "RulesUI.h" #include "SpeciesUI.h" #include "SpeciesAbilityUI.h" #include "SpeciesEvolutionUI.h" #include "SpeciesItemUI.h" #include "SpeciesMoveUI.h" #include "StoreUI.h" #include "TileUI.h" #include "TimeUI.h" #include "TrainerUI.h" #include "TypeUI.h" #include "PokeModTreeItem.h" void PokeModTreeItem::update() { if (text(0).isEmpty()) { QString name(obj->getClassName()); if (name == "Ability") new PokeModTreeItem(this, obj, "Effects"); else if (name == "CoinList") new PokeModTreeItem(this, obj, "Objects"); else if (name == "Item") new PokeModTreeItem(this, obj, "Effects"); else if (name == "Map") { new PokeModTreeItem(this, obj, "Effects"); new PokeModTreeItem(this, obj, "Trainers"); new PokeModTreeItem(this, obj, "Warps"); new PokeModTreeItem(this, obj, "Wild Lists"); } else if (name == "MapTrainer") new PokeModTreeItem(this, obj, "Team Members"); else if (name == "MapWildList") new PokeModTreeItem(this, obj, "Encounters"); else if (name == "Move") new PokeModTreeItem(this, obj, "Effects"); else if (name == "Pokemod") { new PokeModTreeItem(this, static_cast(obj)->getRules()); new PokeModTreeItem(this, obj, "Abilities"); new PokeModTreeItem(this, obj, "Authors"); new PokeModTreeItem(this, obj, "Badges"); new PokeModTreeItem(this, obj, "Coin Lists"); new PokeModTreeItem(this, obj, "Dialogs"); new PokeModTreeItem(this, obj, "Egg Groups"); new PokeModTreeItem(this, obj, "Items"); new PokeModTreeItem(this, obj, "Item Types"); new PokeModTreeItem(this, obj, "Maps"); new PokeModTreeItem(this, obj, "Moves"); new PokeModTreeItem(this, obj, "Natures"); new PokeModTreeItem(this, obj, "Species"); new PokeModTreeItem(this, obj, "Stores"); new PokeModTreeItem(this, obj, "Tiles"); new PokeModTreeItem(this, obj, "Times"); new PokeModTreeItem(this, obj, "Trainers"); new PokeModTreeItem(this, obj, "Types"); } else if (name == "Species") { new PokeModTreeItem(this, obj, "Abilities"); new PokeModTreeItem(this, obj, "Evolutions"); new PokeModTreeItem(this, obj, "Items"); new PokeModTreeItem(this, obj, "Moves"); } } else { QString name(obj->getClassName()); if (name == "Ability") { Ability* a = static_cast(obj); for (int i = 0; i < a->getEffectCount(); ++i) new PokeModTreeItem(this, a->getEffect(i)); } else if (name == "CoinList") { CoinList* c = static_cast(obj); for (int i = 0; i < c->getItemCount(); ++i) new PokeModTreeItem(this, c->getItem(i)); } else if (name == "Item") { Item* it = static_cast(obj); for (int i = 0; i < it->getEffectCount(); ++i) new PokeModTreeItem(this, it->getEffect(i)); } else if (name == "Map") { Map* m = static_cast(obj); if (text(0) == "Effects") { for (int i = 0; i < m->getEffectCount(); ++i) new PokeModTreeItem(this, m->getEffect(i)); } else if (text(0) == "Trainers") { for (int i = 0; i < m->getTrainerCount(); ++i) new PokeModTreeItem(this, m->getTrainer(i)); } else if (text(0) == "Warps") { for (int i = 0; i < m->getWarpCount(); ++i) new PokeModTreeItem(this, m->getWarp(i)); } else if (text(0) == "Wild Lists") { for (int i = 0; i < m->getWildListCount(); ++i) new PokeModTreeItem(this, m->getWildList(i)); } } else if (name == "MapTrainer") { MapTrainer* t = static_cast(obj); for (int i = 0; i < t->getTeamMemberCount(); ++i) new PokeModTreeItem(this, t->getTeamMember(i)); } else if (name == "MapWildList") { MapWildList* w = static_cast(obj); for (int i = 0; i < w->getEncounterCount(); ++i) new PokeModTreeItem(this, w->getEncounter(i)); } else if (name == "Move") { Move* m = static_cast(obj); for (int i = 0; i < m->getEffectCount(); ++i) new PokeModTreeItem(this, m->getEffect(i)); } else if (name == "Pokemod") { Pokemod* p = static_cast(obj); if (text(0) == "Abilities") { for (int i = 0; i < p->getAbilityCount(); ++i) new PokeModTreeItem(this, p->getAbility(i)); } else if (text(0) == "Authors") { for (int i = 0; i < p->getAuthorCount(); ++i) new PokeModTreeItem(this, p->getAuthor(i)); } else if (text(0) == "Badges") { for (int i = 0; i < p->getBadgeCount(); ++i) new PokeModTreeItem(this, p->getBadge(i)); } else if (text(0) == "Coin Lists") { for (int i = 0; i < p->getCoinListCount(); ++i) new PokeModTreeItem(this, p->getCoinList(i)); } else if (text(0) == "Dialogs") { for (int i = 0; i < p->getDialogCount(); ++i) new PokeModTreeItem(this, p->getDialog(i)); } else if (text(0) == "Egg Groups") { for (int i = 0; i < p->getEggGroupCount(); ++i) new PokeModTreeItem(this, p->getEggGroup(i)); } else if (text(0) == "Items") { for (int i = 0; i < p->getItemCount(); ++i) new PokeModTreeItem(this, p->getItem(i)); } else if (text(0) == "Item Types") { for (int i = 0; i < p->getItemTypeCount(); ++i) new PokeModTreeItem(this, p->getItemType(i)); } else if (text(0) == "Maps") { for (int i = 0; i < p->getMapCount(); ++i) new PokeModTreeItem(this, p->getMap(i)); } else if (text(0) == "Moves") { for (int i = 0; i < p->getMoveCount(); ++i) new PokeModTreeItem(this, p->getMove(i)); } else if (text(0) == "Natures") { for (int i = 0; i < p->getNatureCount(); ++i) new PokeModTreeItem(this, p->getNature(i)); } else if (text(0) == "Species") { for (int i = 0; i < p->getSpeciesCount(); ++i) new PokeModTreeItem(this, p->getSpecies(i)); } else if (text(0) == "Stores") { for (int i = 0; i < p->getStoreCount(); ++i) new PokeModTreeItem(this, p->getStore(i)); } else if (text(0) == "Tiles") { for (int i = 0; i < p->getTileCount(); ++i) new PokeModTreeItem(this, p->getTile(i)); } else if (text(0) == "Times") { for (int i = 0; i < p->getTimeCount(); ++i) new PokeModTreeItem(this, p->getTime(i)); } else if (text(0) == "Trainers") { for (int i = 0; i < p->getTrainerCount(); ++i) new PokeModTreeItem(this, p->getTrainer(i)); } else if (text(0) == "Types") { for (int i = 0; i < p->getTypeCount(); ++i) new PokeModTreeItem(this, p->getType(i)); } } else if (name == "Species") { Species* s = static_cast(obj); if (text(0) == "Abilities") { for (int i = 0; i < s->getAbilityCount(); ++i) new PokeModTreeItem(this, s->getAbility(i)); } else if (text(0) == "Evolutions") { for (int i = 0; i < s->getEvolutionCount(); ++i) new PokeModTreeItem(this, s->getEvolution(i)); } else if (text(0) == "Items") { for (int i = 0; i < s->getItemCount(); ++i) new PokeModTreeItem(this, s->getItem(i)); } else if (text(0) == "Moves") { for (int i = 0; i < s->getMoveCount(); ++i) new PokeModTreeItem(this, s->getMove(i)); } } obj = NULL; } } void PokeModTreeItem::init(QWidget* pnt) { update(); setExpanded(true); setChildIndicatorPolicy(QTreeWidgetItem::QTreeWidgetItem::DontShowIndicatorWhenChildless); if (obj) { QString name(obj->getClassName()); #define IF_IS_CLASS(class) if (name == #class) ui = new class##UI(static_cast< ::class* >(obj), pnt); IF_IS_CLASS(Ability) // else IF_IS_CLASS(AbilityEffect) else IF_IS_CLASS(Author) else IF_IS_CLASS(Badge) else IF_IS_CLASS(CoinList) else IF_IS_CLASS(CoinListObject) // else IF_IS_CLASS(Dialog) else IF_IS_CLASS(EggGroup) else IF_IS_CLASS(Item) // else IF_IS_CLASS(ItemEffect) else IF_IS_CLASS(ItemType) else IF_IS_CLASS(Map) // else IF_IS_CLASS(MapEffect) // else IF_IS_CLASS(MapTrainer) else IF_IS_CLASS(MapTrainerTeamMember) else IF_IS_CLASS(MapWarp) else IF_IS_CLASS(MapWildList) else IF_IS_CLASS(MapWildListEncounter) else IF_IS_CLASS(Move) // else IF_IS_CLASS(MoveEffect) else IF_IS_CLASS(Nature) else IF_IS_CLASS(Pokemod) else IF_IS_CLASS(Rules) else IF_IS_CLASS(Species) else IF_IS_CLASS(SpeciesAbility) else IF_IS_CLASS(SpeciesEvolution) else IF_IS_CLASS(SpeciesItem) else IF_IS_CLASS(SpeciesMove) else IF_IS_CLASS(Store) else IF_IS_CLASS(Tile) else IF_IS_CLASS(Time) // else IF_IS_CLASS(Trainer) else IF_IS_CLASS(Type) connect(ui, SIGNAL(changed(bool)), this, SLOT(changed(bool))); connect(ui, SIGNAL(changed(bool)), this, SLOT(updateName())); } #undef IF_IS_CLASS updateName(); } void PokeModTreeItem::updateName() { if (!obj) return; QString name(obj->getClassName()); QString text; if (name == "Ability") text = static_cast(obj)->getName(); else if (name == "AbilityEffect") text = AbilityEffect::EffectStr.at(static_cast(obj)->getEffect()); else if (name == "Author") text = static_cast(obj)->getName(); else if (name == "Badge") text = static_cast(obj)->getName(); else if (name == "CoinList") text = static_cast(obj)->getName(); else if (name == "CoinListObject") { const CoinListObject* o = static_cast(obj); if (o->getType() == CoinListObject::Item) text = obj->getPokemod()->getItem(o->getObject())->getName(); else text = obj->getPokemod()->getSpecies(o->getObject())->getName(); } else if (name == "Dialog") text = static_cast(obj)->getDialog().mid(0, 25); else if (name == "EggGroup") text = static_cast(obj)->getName(); else if (name == "Item") text = static_cast(obj)->getName(); else if (name == "ItemEffect") text = ItemEffect::EffectStr.at(static_cast(obj)->getEffect()); else if (name == "ItemType") text = static_cast< ::ItemType* >(obj)->getName(); else if (name == "Map") text = static_cast(obj)->getName(); else if (name == "MapEffect") text = static_cast(obj)->getName(); else if (name == "MapTrainer") text = static_cast(obj)->getName(); else if (name == "MapTrainerTeamMember") { const MapTrainerTeamMember* t = static_cast(obj); text = QString("Lv. %1 %2").arg(t->getLevel()).arg(obj->getPokemod()->getSpecies(t->getSpecies())->getName()); } else if (name == "MapWarp") text = static_cast(obj)->getName(); else if (name == "MapWildList") text = MapWildList::ControlStr.at(static_cast(obj)->getControl()); else if (name == "MapWildListEncounter") { const MapWildListEncounter* e = static_cast(obj); text = QString("Lv. %1 %2").arg(e->getLevel()).arg(obj->getPokemod()->getSpecies(e->getSpecies())->getName()); } else if (name == "Move") text = static_cast(obj)->getName(); else if (name == "MoveEffect") text = MoveEffect::EffectStr.at(static_cast(obj)->getEffect()); else if (name == "Nature") text = static_cast(obj)->getName(); else if (name == "Pokemod") text = static_cast(obj)->getTitle(); else if (name == "Rules") text = "Rules"; else if (name == "Species") text = static_cast(obj)->getName(); else if (name == "SpeciesAbility") text = obj->getPokemod()->getAbility(static_cast(obj)->getAbility())->getName(); else if (name == "SpeciesEvolution") text = obj->getPokemod()->getSpecies(static_cast(obj)->getSpecies())->getName(); else if (name == "SpeciesItem") text = obj->getPokemod()->getItem(static_cast(obj)->getItem())->getName(); else if (name == "SpeciesMove") text = obj->getPokemod()->getMove(static_cast(obj)->getMove())->getName(); else if (name == "Store") text = static_cast(obj)->getName(); else if (name == "Tile") text = static_cast(obj)->getName(); else if (name == "Time") text = static_cast(obj)->getName(); else if (name == "Trainer") text = static_cast(obj)->getName(); else if (name == "Type") text = static_cast< ::Type* >(obj)->getName(); setText(0, text); } void PokeModTreeItem::makeMenu(const QPoint& pos) { } Object* PokeModTreeItem::copy() { if (obj) { QString name(obj->getClassName()); #define IF_IS_CLASS(class) if (name == #class) return new ::class(obj->getPokemod(), *static_cast< ::class* >(obj), obj->getId()); IF_IS_CLASS(Ability) else IF_IS_CLASS(AbilityEffect) else IF_IS_CLASS(Author) else IF_IS_CLASS(Badge) else IF_IS_CLASS(CoinList) else IF_IS_CLASS(CoinListObject) else IF_IS_CLASS(Dialog) else IF_IS_CLASS(EggGroup) else IF_IS_CLASS(Item) else IF_IS_CLASS(ItemEffect) else IF_IS_CLASS(ItemType) else IF_IS_CLASS(Map) else IF_IS_CLASS(MapEffect) else IF_IS_CLASS(MapTrainer) else IF_IS_CLASS(MapTrainerTeamMember) else IF_IS_CLASS(MapWarp) else IF_IS_CLASS(MapWildList) else IF_IS_CLASS(MapWildListEncounter) else IF_IS_CLASS(Move) else IF_IS_CLASS(MoveEffect) else IF_IS_CLASS(Nature) else if (name == "Pokemod") return new Pokemod(*static_cast(obj)); else if (name == "Rules") return new Rules(obj->getPokemod()); else IF_IS_CLASS(Species) else IF_IS_CLASS(SpeciesAbility) else IF_IS_CLASS(SpeciesEvolution) else IF_IS_CLASS(SpeciesItem) else IF_IS_CLASS(SpeciesMove) else IF_IS_CLASS(Store) else IF_IS_CLASS(Tile) else IF_IS_CLASS(Time) else IF_IS_CLASS(Trainer) else IF_IS_CLASS(Type) #undef IF_IS_CLASS } return NULL; } Object* PokeModTreeItem::cut() { // TODO: actually cut the item if (obj) { QString name(obj->getClassName()); #define IF_IS_CLASS(class) if (name == #class) return new ::class(obj->getPokemod(), *static_cast< ::class* >(obj), obj->getId()); IF_IS_CLASS(Ability) else IF_IS_CLASS(AbilityEffect) else IF_IS_CLASS(Author) else IF_IS_CLASS(Badge) else IF_IS_CLASS(CoinList) else IF_IS_CLASS(CoinListObject) else IF_IS_CLASS(Dialog) else IF_IS_CLASS(EggGroup) else IF_IS_CLASS(Item) else IF_IS_CLASS(ItemEffect) else IF_IS_CLASS(ItemType) else IF_IS_CLASS(Map) else IF_IS_CLASS(MapEffect) else IF_IS_CLASS(MapTrainer) else IF_IS_CLASS(MapTrainerTeamMember) else IF_IS_CLASS(MapWarp) else IF_IS_CLASS(MapWildList) else IF_IS_CLASS(MapWildListEncounter) else IF_IS_CLASS(Move) else IF_IS_CLASS(MoveEffect) else IF_IS_CLASS(Nature) else if (name == "Pokemod") return new Pokemod(*static_cast(obj)); else if (name == "Rules") return new Rules(obj->getPokemod()); else IF_IS_CLASS(Species) else IF_IS_CLASS(SpeciesAbility) else IF_IS_CLASS(SpeciesEvolution) else IF_IS_CLASS(SpeciesItem) else IF_IS_CLASS(SpeciesMove) else IF_IS_CLASS(Store) else IF_IS_CLASS(Tile) else IF_IS_CLASS(Time) else IF_IS_CLASS(Trainer) else IF_IS_CLASS(Type) #undef IF_IS_CLASS } return NULL; }