From 09ffeef4fd962c5635cafc89df88296e9c6bfd5f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 24 Feb 2008 09:10:35 +0000 Subject: [FIX] Macro fun with the repetitive class checking for determining class types with the tree [FIX] KDE classes used in PokeModr UI form now [FIX] Includes in the file, only commented for ease of adding [FIX] Simpler KMessageBox used in ObjectUI [ADD] PokemodTreeItem.cpp git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@80 6ecfd1a5-f3ed-3746-8530-beee90d26b22 --- pokemodr/PokeModrUI.cpp | 307 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 206 insertions(+), 101 deletions(-) (limited to 'pokemodr/PokeModrUI.cpp') diff --git a/pokemodr/PokeModrUI.cpp b/pokemodr/PokeModrUI.cpp index a8490551..4159d4e4 100644 --- a/pokemodr/PokeModrUI.cpp +++ b/pokemodr/PokeModrUI.cpp @@ -23,8 +23,11 @@ #include #include #include +#include +#include #include +#include #include #include @@ -33,19 +36,25 @@ #include "PokeModTreeItem.h" #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" @@ -69,50 +78,78 @@ PokeModrUI::PokeModrUI(KConfigGroup cfg, KConfigGroup history, QWidget* parent) recent.loadEntries(history); menuBar()->addMenu(customHelpMenu(false)); restoreWindowSize(cfg); - cfg.readEntry("splitterPos", 100); -// if (cfg.readEntry("reloadOnStart", false).toBool()) -// open(recent.urls().at(0)); - - // Testing - pokemod = new Pokemod(); - pokemod->newTile()->setName("foo"); - pokemod->newTile()->setName("bar"); - pokemod->newTile()->setName("baz"); -// formPanel->setWidget(new PokemodUI(pokemod, formPanel)); -// formPanel->setWidget(new AbilityUI(pokemod->newAbility(), formPanel)); -// formPanel->setWidget(new AuthorUI(pokemod->newAuthor(), formPanel)); -// formPanel->setWidget(new BadgeUI(pokemod->newBadge(), formPanel)); -// formPanel->setWidget(new CoinListUI(pokemod->newCoinList(), formPanel)); -// formPanel->setWidget(new CoinListObjectUI(pokemod->newCoinList()->newItem(), formPanel)); -// formPanel->setWidget(new EggGroupUI(pokemod->newEggGroup(), formPanel)); -// formPanel->setWidget(new ItemUI(pokemod->newItem(), formPanel)); -// formPanel->setWidget(new ItemTypeUI(pokemod->newItemType(), formPanel)); - formPanel->setWidget(new MapUI(pokemod->newMap(), formPanel)); -// formPanel->setWidget(new MapWarpUI(pokemod->newMap()->newWarp(), formPanel)); -// formPanel->setWidget(new MoveUI(pokemod->newMove(), formPanel)); -// formPanel->setWidget(new NatureUI(pokemod->newNature(), formPanel)); -// formPanel->setWidget(new SpeciesUI(pokemod->newSpecies(), formPanel)); -// formPanel->setWidget(new SpeciesAbilityUI(pokemod->newSpecies()->newAbility(), formPanel)); -// formPanel->setWidget(new SpeciesEvolutionUI(pokemod->newSpecies()->newEvolution(), formPanel)); -// formPanel->setWidget(new SpeciesItemUI(pokemod->newSpecies()->newItem(), formPanel)); -// formPanel->setWidget(new SpeciesMoveUI(pokemod->newSpecies()->newMove(), formPanel)); -// formPanel->setWidget(new StoreUI(pokemod->newStore(), formPanel)); -// formPanel->setWidget(new RulesUI(pokemod->getRules(), formPanel)); -// formPanel->setWidget(new TileUI(pokemod->newTile(), formPanel)); -// formPanel->setWidget(new TimeUI(pokemod->newTime(), formPanel)); -// formPanel->setWidget(new TypeUI(pokemod->newType(), formPanel)); + splitter->setSizes(QList() << cfg.readEntry("treeWidth", 100) << cfg.readEntry("panelWidth", 100)); + if (cfg.readEntry("reloadOnStart", false)) + { + for (int i = 0; i < cfg.readEntry("openedFiles", 0); ++i) + openPokeMod(recent.urls().at(i)); + } + rebuildTree(); } PokeModrUI::~PokeModrUI() { - delete pokemod; + on_actionQuit_triggered(); +} + +void PokeModrUI::rebuildTree() +{ +} + +void PokeModrUI::openPokeMod(const KUrl& path) +{ + if (path.isLocalFile()) + { + pokemods.append(new Pokemod(path.path())); + rebuildTree(); + } +} + +void PokeModrUI::savePokeMod() +{ + if (formPanel->widget()) + static_cast(formPanel->widget())->getOriginal()->getPokemod()->save(); } -void PokeModrUI::PokeModrUI::setChangedTitle(const bool c) +void PokeModrUI::closePokeMod() { + if (formPanel->widget()) + { + ObjectUI* o = static_cast(formPanel->widget()); + const Pokemod* p = o->getOriginal()->getPokemod(); + if (!o->close()) + return; + switch (KMessageBox::questionYesNoCancel(this, "You have unsaved changes, would you like to save them?", "Unsaved PokéMod")) + { + case KMessageBox::Yes: + on_actionSave_triggered(); + case KMessageBox::No: + break; + case KMessageBox::Cancel: + return; + } + for (QMutableListIterator i(pokemods); i.hasNext(); i.next()) + { + if (i.value() == p) + { + i.remove(); + break; + } + } + delete p; + rebuildTree(); + } } -void PokeModrUI::PokeModrUI::on_actionNew_triggered() +void PokeModrUI::setChangedTitle(const bool c) +{ + if (formPanel->widget()) + setWindowTitle(QString("%1%2 - PokéModr").arg(static_cast(formPanel->widget())->getOriginal()->getPokemod()->getTitle()).arg(c ? "" : "*")); + else + setWindowTitle("PokéModr"); +} + +void PokeModrUI::on_actionNew_triggered() { } @@ -123,6 +160,11 @@ void PokeModrUI::on_actionOpen_triggered() void PokeModrUI::on_actionSave_triggered() { + if (formPanel->widget()) + { + static_cast(formPanel->widget())->on_buttonApply_clicked(); + static_cast(formPanel->widget())->getOriginal()->getPokemod()->save(); + } } void PokeModrUI::on_actionSaveAs_triggered() @@ -131,101 +173,164 @@ void PokeModrUI::on_actionSaveAs_triggered() void PokeModrUI::on_actionSaveAll_triggered() { + if (formPanel->widget()) + static_cast(formPanel->widget())->on_buttonApply_clicked(); + for (QListIterator i(pokemods); i.hasNext(); ) + i.next()->save(); } void PokeModrUI::on_actionQuit_triggered() { + while (pokemods.size()) + closePokeMod(); + if (clipboard) + delete clipboard; } void PokeModrUI::on_actionCopy_triggered() { + if (!formPanel->widget()) + return; + if (clipboard) + delete clipboard; + Object* o = static_cast(formPanel->widget())->getOriginal(); + QString name(o->getClassName()); +#define IF_IS_CLASS(class) if (name == "class") clipboard = new class(o->getPokemod(), *static_cast(o), o->getId()) + IF_IS_CLASS(Ability); + else IF_IS_CLASS(AbilityEffect); + 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") clipboard = new Pokemod(*static_cast(o)); + else if (name == "Rules") clipboard = new Rules(o->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(Type); +#undef IF_IS_CLASS } void PokeModrUI::on_actionPaste_triggered() { + if (!clipboard || !formPanel->widget()) + return; + Object* o = static_cast(formPanel->widget())->getOriginal(); + if (clipboard->getClassName() != o->getClassName()) + return; + QString name(clipboard->getClassName()); +#define IF_IS_CLASS(class) if (name == "class") *static_cast(static_cast(formPanel->widget())->getOriginal()) = *static_cast(clipboard) + IF_IS_CLASS(Ability); + else IF_IS_CLASS(AbilityEffect); + 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(Type); +#undef IF_IS_CLASS + rebuildTree(); } void PokeModrUI::on_actionPreferences_triggered() { } -void PokeModrUI::on_splitter_splitterMoved(const int pos) +void PokeModrUI::on_splitter_splitterMoved() { + config.writeEntry("treeWidth", splitter->sizes()[0]); + config.writeEntry("panelWidth", splitter->sizes()[1]); } void PokeModrUI::on_treePokemod_itemSelectionChanged() { QTreeWidgetItem* cur = treePokemod->currentItem(); PokeModTreeItem* selected = static_cast(treePokemod->selectedItems()[0]); - if (selected->getObject() || static_cast(formPanel->widget())->close()) + if (selected->getObject()) { + if (formPanel->widget()) + { + if (!static_cast(formPanel->widget())->close()) + return; + } Object* o = selected->getObject(); QString name(o->getClassName()); ObjectUI* widget = NULL; - if (name == "Ability") - widget = new AbilityUI(static_cast(o), formPanel); -// else if (name == "AbilityEffect") -// widget = new AbilityEffectUI(static_cast(o), formPanel); - else if (name == "Author") - widget = new AuthorUI(static_cast(o), formPanel); - else if (name == "Badge") - widget = new BadgeUI(static_cast(o), formPanel); - else if (name == "CoinList") - widget = new CoinListUI(static_cast(o), formPanel); - else if (name == "CoinListObject") - widget = new CoinListObjectUI(static_cast(o), formPanel); -// else if (name == "Dialog") -// widget = new DialogUI(static_cast(o), formPanel); - else if (name == "EggGroup") - widget = new EggGroupUI(static_cast(o), formPanel); - else if (name == "Item") - widget = new ItemUI(static_cast(o), formPanel); -// else if (name == "ItemEffect") -// widget = new ItemEffectUI(static_cast(o), formPanel); - else if (name == "ItemType") - widget = new ItemTypeUI(static_cast(o), formPanel); - else if (name == "Map") - widget = new MapUI(static_cast(o), formPanel); -// else if (name == "MapEffect") -// widget = new MapEffectUI(static_cast(o), formPanel); -// else if (name == "MapTrainer") -// widget = new MapTrainerUI(static_cast(o), formPanel); - else if (name == "MapTrainerTeamMember") - widget = new MapTrainerTeamMemberUI(static_cast(o), formPanel); - else if (name == "MapWarp") - widget = new MapWarpUI(static_cast(o), formPanel); - else if (name == "MapWildList") - widget = new MapWildListUI(static_cast(o), formPanel); - else if (name == "MapWildListEncounter") - widget = new MapWildListEncounterUI(static_cast(o), formPanel); - else if (name == "Move") - widget = new MoveUI(static_cast(o), formPanel); -// else if (name == "MoveEffect") -// widget = new MoveEffectUI(static_cast(o), formPanel); - else if (name == "Nature") - widget = new NatureUI(static_cast(o), formPanel); - else if (name == "Pokemod") - widget = new PokemodUI(static_cast(o), formPanel); - else if (name == "Rules") - widget = new RulesUI(static_cast(o), formPanel); - else if (name == "Species") - widget = new SpeciesUI(static_cast(o), formPanel); - else if (name == "SpeciesAbility") - widget = new SpeciesAbilityUI(static_cast(o), formPanel); - else if (name == "SpeciesEvolution") - widget = new SpeciesEvolutionUI(static_cast(o), formPanel); - else if (name == "SpeciesItem") - widget = new SpeciesItemUI(static_cast(o), formPanel); - else if (name == "SpeciesMove") - widget = new SpeciesMoveUI(static_cast(o), formPanel); - else if (name == "Store") - widget = new StoreUI(static_cast(o), formPanel); - else if (name == "Tile") - widget = new TileUI(static_cast(o), formPanel); - else if (name == "Time") - widget = new TimeUI(static_cast(o), formPanel); - else if (name == "Type") - widget = new TypeUI(static_cast(o), formPanel); +#define IF_IS_CLASS(class) if (name == "class") widget = new class##UI(static_cast(o), formPanel) + IF_IS_CLASS(Ability); +// else IF_IS_CLASS(AbilityEffect); + 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(Type); +#undef IF_IS_CLASS formPanel->setWidget(widget); connect(widget, SIGNAL(changed(bool)), selected, SLOT(updateName())); formPanel->show(); -- cgit