summaryrefslogtreecommitdiffstats
path: root/pokemodr/PokeModrUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemodr/PokeModrUI.cpp')
-rw-r--r--pokemodr/PokeModrUI.cpp307
1 files changed, 206 insertions, 101 deletions
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 <klocalizedstring.h>
#include <kmenu.h>
#include <kmenubar.h>
+#include <kmessagebox.h>
+#include <QListIterator>
#include <QMetaObject>
+#include <QMutableListIterator>
#include <BugCatcher.h>
#include <Exception.h>
@@ -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<int>() << 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<ObjectUI*>(formPanel->widget())->getOriginal()->getPokemod()->save();
}
-void PokeModrUI::PokeModrUI::setChangedTitle(const bool c)
+void PokeModrUI::closePokeMod()
{
+ if (formPanel->widget())
+ {
+ ObjectUI* o = static_cast<ObjectUI*>(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<Pokemod*> 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<ObjectUI*>(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<ObjectUI*>(formPanel->widget())->on_buttonApply_clicked();
+ static_cast<ObjectUI*>(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<ObjectUI*>(formPanel->widget())->on_buttonApply_clicked();
+ for (QListIterator<Pokemod*> 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<ObjectUI*>(formPanel->widget())->getOriginal();
+ QString name(o->getClassName());
+#define IF_IS_CLASS(class) if (name == "class") clipboard = new class(o->getPokemod(), *static_cast<class*>(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<Pokemod*>(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<ObjectUI*>(formPanel->widget())->getOriginal();
+ if (clipboard->getClassName() != o->getClassName())
+ return;
+ QString name(clipboard->getClassName());
+#define IF_IS_CLASS(class) if (name == "class") *static_cast<class*>(static_cast<ObjectUI*>(formPanel->widget())->getOriginal()) = *static_cast<class*>(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<PokeModTreeItem*>(treePokemod->selectedItems()[0]);
- if (selected->getObject() || static_cast<ObjectUI*>(formPanel->widget())->close())
+ if (selected->getObject())
{
+ if (formPanel->widget())
+ {
+ if (!static_cast<ObjectUI*>(formPanel->widget())->close())
+ return;
+ }
Object* o = selected->getObject();
QString name(o->getClassName());
ObjectUI* widget = NULL;
- if (name == "Ability")
- widget = new AbilityUI(static_cast<Ability*>(o), formPanel);
-// else if (name == "AbilityEffect")
-// widget = new AbilityEffectUI(static_cast<AbilityEffect*>(o), formPanel);
- else if (name == "Author")
- widget = new AuthorUI(static_cast<Author*>(o), formPanel);
- else if (name == "Badge")
- widget = new BadgeUI(static_cast<Badge*>(o), formPanel);
- else if (name == "CoinList")
- widget = new CoinListUI(static_cast<CoinList*>(o), formPanel);
- else if (name == "CoinListObject")
- widget = new CoinListObjectUI(static_cast<CoinListObject*>(o), formPanel);
-// else if (name == "Dialog")
-// widget = new DialogUI(static_cast<Dialog*>(o), formPanel);
- else if (name == "EggGroup")
- widget = new EggGroupUI(static_cast<EggGroup*>(o), formPanel);
- else if (name == "Item")
- widget = new ItemUI(static_cast<Item*>(o), formPanel);
-// else if (name == "ItemEffect")
-// widget = new ItemEffectUI(static_cast<ItemEffect*>(o), formPanel);
- else if (name == "ItemType")
- widget = new ItemTypeUI(static_cast<ItemType*>(o), formPanel);
- else if (name == "Map")
- widget = new MapUI(static_cast<Map*>(o), formPanel);
-// else if (name == "MapEffect")
-// widget = new MapEffectUI(static_cast<MapEffect*>(o), formPanel);
-// else if (name == "MapTrainer")
-// widget = new MapTrainerUI(static_cast<MapTrainer*>(o), formPanel);
- else if (name == "MapTrainerTeamMember")
- widget = new MapTrainerTeamMemberUI(static_cast<MapTrainerTeamMember*>(o), formPanel);
- else if (name == "MapWarp")
- widget = new MapWarpUI(static_cast<MapWarp*>(o), formPanel);
- else if (name == "MapWildList")
- widget = new MapWildListUI(static_cast<MapWildList*>(o), formPanel);
- else if (name == "MapWildListEncounter")
- widget = new MapWildListEncounterUI(static_cast<MapWildListEncounter*>(o), formPanel);
- else if (name == "Move")
- widget = new MoveUI(static_cast<Move*>(o), formPanel);
-// else if (name == "MoveEffect")
-// widget = new MoveEffectUI(static_cast<MoveEffect*>(o), formPanel);
- else if (name == "Nature")
- widget = new NatureUI(static_cast<Nature*>(o), formPanel);
- else if (name == "Pokemod")
- widget = new PokemodUI(static_cast<Pokemod*>(o), formPanel);
- else if (name == "Rules")
- widget = new RulesUI(static_cast<Rules*>(o), formPanel);
- else if (name == "Species")
- widget = new SpeciesUI(static_cast<Species*>(o), formPanel);
- else if (name == "SpeciesAbility")
- widget = new SpeciesAbilityUI(static_cast<SpeciesAbility*>(o), formPanel);
- else if (name == "SpeciesEvolution")
- widget = new SpeciesEvolutionUI(static_cast<SpeciesEvolution*>(o), formPanel);
- else if (name == "SpeciesItem")
- widget = new SpeciesItemUI(static_cast<SpeciesItem*>(o), formPanel);
- else if (name == "SpeciesMove")
- widget = new SpeciesMoveUI(static_cast<SpeciesMove*>(o), formPanel);
- else if (name == "Store")
- widget = new StoreUI(static_cast<Store*>(o), formPanel);
- else if (name == "Tile")
- widget = new TileUI(static_cast<Tile*>(o), formPanel);
- else if (name == "Time")
- widget = new TimeUI(static_cast<Time*>(o), formPanel);
- else if (name == "Type")
- widget = new TypeUI(static_cast<Type*>(o), formPanel);
+#define IF_IS_CLASS(class) if (name == "class") widget = new class##UI(static_cast<class*>(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();