summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-05-26 01:32:07 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-05-26 01:32:07 +0000
commitff8c440c3a2aeb0e1abc6f93e9dd7775533382ff (patch)
tree302ac68425cecc61d429c64cf8676ad37d1d4f12
parent7e3bf1853184f96eb5be47dd78ebe21fdc170a01 (diff)
downloadsigen-ff8c440c3a2aeb0e1abc6f93e9dd7775533382ff.tar.gz
sigen-ff8c440c3a2aeb0e1abc6f93e9dd7775533382ff.tar.xz
sigen-ff8c440c3a2aeb0e1abc6f93e9dd7775533382ff.zip
[FIX] Context menus added
[FIX] No more copy/cut/paste for objects; only available from context menus [FIX] Can now add objects during runtime git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@174 6ecfd1a5-f3ed-3746-8530-beee90d26b22
-rw-r--r--Changelog9
-rw-r--r--pokemod/pokemod.pro1
-rw-r--r--pokemodr/PokeModrUI.cpp38
-rw-r--r--pokemodr/PokeModrUI.h1
-rw-r--r--pokemodr/PokemodTree.cpp6
-rw-r--r--pokemodr/PokemodTree.h1
-rw-r--r--pokemodr/TODO9
-rw-r--r--pokemodr/gui/pokemodr.ui5
-rw-r--r--pokemodr/models/AbilityGroupModel.cpp38
-rw-r--r--pokemodr/models/AbilityGroupModel.h9
-rw-r--r--pokemodr/models/AbilityModel.cpp17
-rw-r--r--pokemodr/models/AbilityModel.h4
-rw-r--r--pokemodr/models/AuthorGroupModel.cpp38
-rw-r--r--pokemodr/models/AuthorGroupModel.h9
-rw-r--r--pokemodr/models/AuthorModel.cpp17
-rw-r--r--pokemodr/models/AuthorModel.h4
-rw-r--r--pokemodr/models/BadgeGroupModel.cpp38
-rw-r--r--pokemodr/models/BadgeGroupModel.h9
-rw-r--r--pokemodr/models/BadgeModel.cpp17
-rw-r--r--pokemodr/models/BadgeModel.h4
-rw-r--r--pokemodr/models/BaseModel.h4
-rw-r--r--pokemodr/models/BaseObjectModel.h2
-rw-r--r--pokemodr/models/CoinListGroupModel.cpp38
-rw-r--r--pokemodr/models/CoinListGroupModel.h9
-rw-r--r--pokemodr/models/CoinListModel.cpp36
-rw-r--r--pokemodr/models/CoinListModel.h7
-rw-r--r--pokemodr/models/CoinListObjectModel.cpp17
-rw-r--r--pokemodr/models/CoinListObjectModel.h4
-rw-r--r--pokemodr/models/EggGroupGroupModel.cpp38
-rw-r--r--pokemodr/models/EggGroupGroupModel.h9
-rw-r--r--pokemodr/models/EggGroupModel.cpp17
-rw-r--r--pokemodr/models/EggGroupModel.h4
-rw-r--r--pokemodr/models/GlobalScriptGroupModel.cpp38
-rw-r--r--pokemodr/models/GlobalScriptGroupModel.h9
-rw-r--r--pokemodr/models/GlobalScriptModel.cpp17
-rw-r--r--pokemodr/models/GlobalScriptModel.h4
-rw-r--r--pokemodr/models/GroupModel.h8
-rw-r--r--pokemodr/models/GroupObjectModel.h9
-rw-r--r--pokemodr/models/ItemGroupModel.cpp38
-rw-r--r--pokemodr/models/ItemGroupModel.h9
-rw-r--r--pokemodr/models/ItemModel.cpp17
-rw-r--r--pokemodr/models/ItemModel.h4
-rw-r--r--pokemodr/models/ItemTypeGroupModel.cpp38
-rw-r--r--pokemodr/models/ItemTypeGroupModel.h9
-rw-r--r--pokemodr/models/ItemTypeModel.cpp17
-rw-r--r--pokemodr/models/ItemTypeModel.h4
-rw-r--r--pokemodr/models/MapEffectGroupModel.cpp38
-rw-r--r--pokemodr/models/MapEffectGroupModel.h9
-rw-r--r--pokemodr/models/MapEffectModel.cpp17
-rw-r--r--pokemodr/models/MapEffectModel.h4
-rw-r--r--pokemodr/models/MapGroupModel.cpp38
-rw-r--r--pokemodr/models/MapGroupModel.h9
-rw-r--r--pokemodr/models/MapModel.cpp32
-rw-r--r--pokemodr/models/MapModel.h7
-rw-r--r--pokemodr/models/MapTrainerGroupModel.cpp38
-rw-r--r--pokemodr/models/MapTrainerGroupModel.h9
-rw-r--r--pokemodr/models/MapTrainerModel.cpp36
-rw-r--r--pokemodr/models/MapTrainerModel.h7
-rw-r--r--pokemodr/models/MapTrainerTeamMemberModel.cpp17
-rw-r--r--pokemodr/models/MapTrainerTeamMemberModel.h4
-rw-r--r--pokemodr/models/MapWarpGroupModel.cpp38
-rw-r--r--pokemodr/models/MapWarpGroupModel.h9
-rw-r--r--pokemodr/models/MapWarpModel.cpp17
-rw-r--r--pokemodr/models/MapWarpModel.h4
-rw-r--r--pokemodr/models/MapWildListEncounterModel.cpp17
-rw-r--r--pokemodr/models/MapWildListEncounterModel.h4
-rw-r--r--pokemodr/models/MapWildListGroupModel.cpp38
-rw-r--r--pokemodr/models/MapWildListGroupModel.h9
-rw-r--r--pokemodr/models/MapWildListModel.cpp36
-rw-r--r--pokemodr/models/MapWildListModel.h7
-rw-r--r--pokemodr/models/MoveGroupModel.cpp38
-rw-r--r--pokemodr/models/MoveGroupModel.h9
-rw-r--r--pokemodr/models/MoveModel.cpp17
-rw-r--r--pokemodr/models/MoveModel.h4
-rw-r--r--pokemodr/models/NatureGroupModel.cpp38
-rw-r--r--pokemodr/models/NatureGroupModel.h9
-rw-r--r--pokemodr/models/NatureModel.cpp17
-rw-r--r--pokemodr/models/NatureModel.h4
-rw-r--r--pokemodr/models/ObjectModel.h4
-rw-r--r--pokemodr/models/PokemodModel.cpp51
-rw-r--r--pokemodr/models/PokemodModel.h7
-rw-r--r--pokemodr/models/RootModel.cpp6
-rw-r--r--pokemodr/models/RootModel.h7
-rw-r--r--pokemodr/models/RulesModel.cpp4
-rw-r--r--pokemodr/models/RulesModel.h4
-rw-r--r--pokemodr/models/SoundGroupModel.cpp38
-rw-r--r--pokemodr/models/SoundGroupModel.h9
-rw-r--r--pokemodr/models/SoundModel.cpp17
-rw-r--r--pokemodr/models/SoundModel.h4
-rw-r--r--pokemodr/models/SpeciesAbilityGroupModel.cpp38
-rw-r--r--pokemodr/models/SpeciesAbilityGroupModel.h9
-rw-r--r--pokemodr/models/SpeciesAbilityModel.cpp17
-rw-r--r--pokemodr/models/SpeciesAbilityModel.h4
-rw-r--r--pokemodr/models/SpeciesGroupModel.cpp38
-rw-r--r--pokemodr/models/SpeciesGroupModel.h9
-rw-r--r--pokemodr/models/SpeciesItemGroupModel.cpp38
-rw-r--r--pokemodr/models/SpeciesItemGroupModel.h9
-rw-r--r--pokemodr/models/SpeciesItemModel.cpp17
-rw-r--r--pokemodr/models/SpeciesItemModel.h4
-rw-r--r--pokemodr/models/SpeciesModel.cpp34
-rw-r--r--pokemodr/models/SpeciesModel.h7
-rw-r--r--pokemodr/models/SpeciesMoveGroupModel.cpp38
-rw-r--r--pokemodr/models/SpeciesMoveGroupModel.h9
-rw-r--r--pokemodr/models/SpeciesMoveModel.cpp17
-rw-r--r--pokemodr/models/SpeciesMoveModel.h4
-rw-r--r--pokemodr/models/StoreGroupModel.cpp38
-rw-r--r--pokemodr/models/StoreGroupModel.h9
-rw-r--r--pokemodr/models/StoreModel.cpp17
-rw-r--r--pokemodr/models/StoreModel.h4
-rw-r--r--pokemodr/models/TileGroupModel.cpp38
-rw-r--r--pokemodr/models/TileGroupModel.h9
-rw-r--r--pokemodr/models/TileModel.cpp17
-rw-r--r--pokemodr/models/TileModel.h4
-rw-r--r--pokemodr/models/TimeGroupModel.cpp38
-rw-r--r--pokemodr/models/TimeGroupModel.h9
-rw-r--r--pokemodr/models/TimeModel.cpp17
-rw-r--r--pokemodr/models/TimeModel.h4
-rw-r--r--pokemodr/models/TrainerGroupModel.cpp39
-rw-r--r--pokemodr/models/TrainerGroupModel.h9
-rw-r--r--pokemodr/models/TrainerModel.cpp17
-rw-r--r--pokemodr/models/TrainerModel.h4
-rw-r--r--pokemodr/models/TypeGroupModel.cpp38
-rw-r--r--pokemodr/models/TypeGroupModel.h9
-rw-r--r--pokemodr/models/TypeModel.cpp17
-rw-r--r--pokemodr/models/TypeModel.h4
-rw-r--r--pokemodr/pokemodr.pro1
-rw-r--r--version.inc2
127 files changed, 1788 insertions, 259 deletions
diff --git a/Changelog b/Changelog
index e4a1d529..537e4815 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,13 @@
-----------------
+Rev: 174
+Date: 25 May 2008
+User: MathStuf
+-----------------
+[FIX] Context menus added
+[FIX] No more copy/cut/paste for objects; only available from context menus
+[FIX] Can now add objects during runtime
+
+-----------------
Rev: 173
Date: 25 May 2008
User: MathStuf
diff --git a/pokemod/pokemod.pro b/pokemod/pokemod.pro
index f366afe7..56e54ce7 100644
--- a/pokemod/pokemod.pro
+++ b/pokemod/pokemod.pro
@@ -8,6 +8,7 @@ CONFIG += qt \
warn_on \
dll
QT += xml
+
!win32 {
CONFIG += debug
}
diff --git a/pokemodr/PokeModrUI.cpp b/pokemodr/PokeModrUI.cpp
index 7ea15841..7dff096d 100644
--- a/pokemodr/PokeModrUI.cpp
+++ b/pokemodr/PokeModrUI.cpp
@@ -64,26 +64,13 @@ PokeModrUI::PokeModrUI(KConfigGroup config, KConfigGroup history, QWidget* paren
menuFile->addAction(KStandardAction::save(this, SLOT(savePokemod()), menuFile));
menuFile->addAction(KStandardAction::saveAs(this, SLOT(saveAsPokemod()), menuFile));
menuFile->addSeparator();
- menuFile->addAction(KStandardAction::quit(this, SLOT(quit()), menuFile));
+ menuFile->addAction(KStandardAction::quit(this, SLOT(closeAllPokemods()), menuFile));
menubar->addMenu(menuFile);
KMenu* menuEdit = new KMenu("&Edit", menubar);
menuEdit->addAction(KStandardAction::cut(menuEdit));
menuEdit->addAction(KStandardAction::copy(menuEdit));
menuEdit->addAction(KStandardAction::paste(menuEdit));
menuEdit->addSeparator();
- KAction* menuCut = new KAction(KIcon("edit-cut"), "Cu&t Object", menuEdit);
- menuCut->setShortcut(KShortcut("Alt+X"));
- menuEdit->addAction(menuCut);
- connect(menuCut, SIGNAL(triggered()), this, SLOT(cutObject()));
- KAction* menuCopy = new KAction(KIcon("edit-copy"), "Cop&y Object", menuEdit);
- menuCopy->setShortcut(KShortcut("Alt+C"));
- menuEdit->addAction(menuCopy);
- connect(menuCopy, SIGNAL(triggered()), this, SLOT(copyObject()));
- KAction* menuPaste = new KAction(KIcon("edit-paste"), "Past&e Object", menuEdit);
- menuPaste->setShortcut(KShortcut("Alt+V"));
- menuEdit->addAction(menuPaste);
- connect(menuPaste, SIGNAL(triggered()), this, SLOT(pasteObject()));
- menuEdit->addSeparator();
menuEdit->addAction(KStandardAction::preferences(this, SLOT(preferences()), menuEdit));
menubar->addMenu(menuEdit);
menubar->addMenu(customHelpMenu(false));
@@ -101,19 +88,9 @@ PokeModrUI::PokeModrUI(KConfigGroup config, KConfigGroup history, QWidget* paren
toolbar->addAction(KStandardAction::copy(toolbar));
toolbar->addAction(KStandardAction::paste(toolbar));
toolbar->addSeparator();
- KAction* toolbarCut = new KAction(KIcon("edit-cut"), "Cu&t Object", toolbar);
- toolbar->addAction(toolbarCut);
- connect(toolbarCut, SIGNAL(triggered()), this, SLOT(cutObject()));
- KAction* toolbarCopy = new KAction(KIcon("edit-copy"), "Cop&y Object", toolbar);
- toolbar->addAction(toolbarCopy);
- connect(toolbarCopy, SIGNAL(triggered()), this, SLOT(copyObject()));
- KAction* toolbarPaste = new KAction(KIcon("edit-paste"), "Past&e Object", toolbar);
- toolbar->addAction(toolbarPaste);
- connect(toolbarPaste, SIGNAL(triggered()), this, SLOT(pasteObject()));
- toolbar->addSeparator();
toolbar->addAction(KStandardAction::preferences(this, SLOT(preferences()), toolbar));
toolbar->addSeparator();
- toolbar->addAction(KStandardAction::quit(this, SLOT(quit()), toolbar));
+ toolbar->addAction(KStandardAction::quit(this, SLOT(closeAllPokemods()), toolbar));
addToolBar(toolbar);
splitter->setSizes(QList<int>() << config.readEntry("treeWidth", 100) << config.readEntry("panelWidth", 100));
connect(buttonApply, SIGNAL(clicked()), this, SLOT(update()));
@@ -333,14 +310,11 @@ bool PokeModrUI::closeAllPokemods(const bool force)
else
++i;
}
+ if (!pokemods.size() || force)
+ close();
return !pokemods.size();
}
-void PokeModrUI::cutObject()
-{
- m_clipboard = treePokemod->cut(treePokemod->currentIndex());
-}
-
void PokeModrUI::copyObject()
{
m_clipboard = treePokemod->copy(treePokemod->currentIndex());
@@ -364,6 +338,8 @@ void PokeModrUI::on_splitter_splitterMoved()
void PokeModrUI::on_treePokemod_clicked(const QModelIndex& index)
{
+ if (!(treePokemod->model()->flags(index) & Qt::ItemIsSelectable))
+ return;
ObjectUI* widget = treePokemod->editorWidget(index);
if (widget)
{
@@ -396,5 +372,5 @@ void PokeModrUI::on_treePokemod_customContextMenuRequested(const QPoint& positio
{
KMenu* menu = treePokemod->contextMenu(treePokemod->indexAt(position));
if (menu)
- menu->popup(mapToGlobal(position));
+ menu->popup(treePokemod->mapToGlobal(position));
}
diff --git a/pokemodr/PokeModrUI.h b/pokemodr/PokeModrUI.h
index 72100974..2b35a612 100644
--- a/pokemodr/PokeModrUI.h
+++ b/pokemodr/PokeModrUI.h
@@ -62,7 +62,6 @@ class PokeModrUI : public KMainWindow, private Ui::formPokeModr
void closePokemod();
bool closePokemod(const Pokemod* pokemod, const bool force = false);
bool closeAllPokemods(const bool force = false);
- void cutObject();
void copyObject();
void pasteObject();
void preferences();
diff --git a/pokemodr/PokemodTree.cpp b/pokemodr/PokemodTree.cpp
index 35b41017..661b5c85 100644
--- a/pokemodr/PokemodTree.cpp
+++ b/pokemodr/PokemodTree.cpp
@@ -69,12 +69,6 @@ const Pokemod* PokemodTree::currentPokemod() const
return NULL;
}
-QDomDocument PokemodTree::cut(const QModelIndex& index)
-{
- // TODO: actually cut out the item
- return copy(index);
-}
-
QDomDocument PokemodTree::copy(const QModelIndex& index)
{
QDomDocument xml;
diff --git a/pokemodr/PokemodTree.h b/pokemodr/PokemodTree.h
index 41b8b283..07a312b1 100644
--- a/pokemodr/PokemodTree.h
+++ b/pokemodr/PokemodTree.h
@@ -44,7 +44,6 @@ class PokemodTree : public QTreeView
const Pokemod* currentPokemod() const;
- QDomDocument cut(const QModelIndex& index);
QDomDocument copy(const QModelIndex& index);
void paste(const QModelIndex& index, const QDomDocument& data);
diff --git a/pokemodr/TODO b/pokemodr/TODO
index bc1ccbe4..7ed3a9c2 100644
--- a/pokemodr/TODO
+++ b/pokemodr/TODO
@@ -1,12 +1,7 @@
-MoveEffect
-
-Dialog command widgets
-
-Safeguard against closing with unsaved changes
-
Set sub class stuff by passing it on to subclasses via setData
TilemapModel is (probably) wrong
Models:
- ContextMenuRole
+ ContextMenu - Copy/Paste entries
+ Fix up deleting
diff --git a/pokemodr/gui/pokemodr.ui b/pokemodr/gui/pokemodr.ui
index fe77d64c..ae794664 100644
--- a/pokemodr/gui/pokemodr.ui
+++ b/pokemodr/gui/pokemodr.ui
@@ -12,6 +12,9 @@
<bool>false</bool>
</property>
<widget class="PokemodTree" name="treePokemod" >
+ <property name="contextMenuPolicy" >
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
<property name="acceptDrops" >
<bool>true</bool>
</property>
@@ -62,7 +65,7 @@
<item>
<widget class="QScrollArea" name="formPanel" >
<property name="alignment" >
- <enum>Qt::AlignHCenter</enum>
+ <set>Qt::AlignHCenter</set>
</property>
</widget>
</item>
diff --git a/pokemodr/models/AbilityGroupModel.cpp b/pokemodr/models/AbilityGroupModel.cpp
index 76c06764..482576cf 100644
--- a/pokemodr/models/AbilityGroupModel.cpp
+++ b/pokemodr/models/AbilityGroupModel.cpp
@@ -22,21 +22,49 @@
#include "AbilityModel.h"
// Pokemod includes
+#include "../../pokemod/Ability.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
AbilityGroupModel::AbilityGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Abilities")
{
- setupData();
+ for (int i = 0; i < pokemod->abilityCount(); ++i)
+ addObject(pokemod->ability(i));
}
AbilityGroupModel::~AbilityGroupModel()
{
}
-void AbilityGroupModel::setupData()
+QVariant AbilityGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->abilityCount(); ++i)
- m_objects.append(new AbilityModel(this, pokemod->ability(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Ability", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void AbilityGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newAbility();
+ if (object->className() == "Ability")
+ m_objects.append(new AbilityModel(this, static_cast<Ability*>(object)));
+}
+
+void AbilityGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteAbility(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/AbilityGroupModel.h b/pokemodr/models/AbilityGroupModel.h
index 29eba507..e7fb8160 100644
--- a/pokemodr/models/AbilityGroupModel.h
+++ b/pokemodr/models/AbilityGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class AbilityGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
AbilityGroupModel(BaseModel* parent, Pokemod* pokemod);
~AbilityGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/AbilityModel.cpp b/pokemodr/models/AbilityModel.cpp
index a76a6c87..687fdd2d 100644
--- a/pokemodr/models/AbilityModel.cpp
+++ b/pokemodr/models/AbilityModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "AbilityModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../AbilityUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
AbilityModel::AbilityModel(BaseModel* parent, Ability* ability) :
ObjectModel(parent, ability)
{
@@ -51,6 +57,12 @@ QVariant AbilityModel::data(int role) const
QWidget* widget = new AbilityUI(static_cast<Ability*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Ability", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool AbilityModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void AbilityModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/AbilityModel.h b/pokemodr/models/AbilityModel.h
index 005b1066..b2a8f14d 100644
--- a/pokemodr/models/AbilityModel.h
+++ b/pokemodr/models/AbilityModel.h
@@ -26,6 +26,8 @@ class Ability;
class AbilityModel : public ObjectModel
{
+ Q_OBJECT
+
public:
AbilityModel(BaseModel* parent, Ability* ability);
~AbilityModel();
@@ -33,6 +35,8 @@ class AbilityModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/AuthorGroupModel.cpp b/pokemodr/models/AuthorGroupModel.cpp
index 270a0c0d..88ae74f7 100644
--- a/pokemodr/models/AuthorGroupModel.cpp
+++ b/pokemodr/models/AuthorGroupModel.cpp
@@ -22,21 +22,49 @@
#include "AuthorModel.h"
// Pokemod includes
+#include "../../pokemod/Author.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
AuthorGroupModel::AuthorGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Authors")
{
- setupData();
+ for (int i = 0; i < pokemod->authorCount(); ++i)
+ addObject(pokemod->author(i));
}
AuthorGroupModel::~AuthorGroupModel()
{
}
-void AuthorGroupModel::setupData()
+QVariant AuthorGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->authorCount(); ++i)
- m_objects.append(new AuthorModel(this, pokemod->author(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Author", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void AuthorGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newAuthor();
+ if (object->className() == "Author")
+ m_objects.append(new AuthorModel(this, static_cast<Author*>(object)));
+}
+
+void AuthorGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteAuthor(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/AuthorGroupModel.h b/pokemodr/models/AuthorGroupModel.h
index 7381ca8b..d5c0f858 100644
--- a/pokemodr/models/AuthorGroupModel.h
+++ b/pokemodr/models/AuthorGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class AuthorGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
AuthorGroupModel(BaseModel* parent, Pokemod* pokemod);
~AuthorGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/AuthorModel.cpp b/pokemodr/models/AuthorModel.cpp
index c2597098..ef71d814 100644
--- a/pokemodr/models/AuthorModel.cpp
+++ b/pokemodr/models/AuthorModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "AuthorModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../AuthorUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
AuthorModel::AuthorModel(BaseModel* parent, Author* author) :
ObjectModel(parent, author)
{
@@ -51,6 +57,12 @@ QVariant AuthorModel::data(int role) const
QWidget* widget = new AuthorUI(static_cast<Author*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Author", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool AuthorModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void AuthorModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/AuthorModel.h b/pokemodr/models/AuthorModel.h
index b924d12d..e6bbceda 100644
--- a/pokemodr/models/AuthorModel.h
+++ b/pokemodr/models/AuthorModel.h
@@ -26,6 +26,8 @@ class Author;
class AuthorModel : public ObjectModel
{
+ Q_OBJECT
+
public:
AuthorModel(BaseModel* parent, Author* author);
~AuthorModel();
@@ -33,6 +35,8 @@ class AuthorModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/BadgeGroupModel.cpp b/pokemodr/models/BadgeGroupModel.cpp
index 733abe11..22b55626 100644
--- a/pokemodr/models/BadgeGroupModel.cpp
+++ b/pokemodr/models/BadgeGroupModel.cpp
@@ -22,21 +22,49 @@
#include "BadgeModel.h"
// Pokemod includes
+#include "../../pokemod/Badge.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
BadgeGroupModel::BadgeGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Badges")
{
- setupData();
+ for (int i = 0; i < pokemod->badgeCount(); ++i)
+ addObject(pokemod->badge(i));
}
BadgeGroupModel::~BadgeGroupModel()
{
}
-void BadgeGroupModel::setupData()
+QVariant BadgeGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->badgeCount(); ++i)
- m_objects.append(new BadgeModel(this, pokemod->badge(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Badge", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void BadgeGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newBadge();
+ if (object->className() == "Badge")
+ m_objects.append(new BadgeModel(this, static_cast<Badge*>(object)));
+}
+
+void BadgeGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteBadge(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/BadgeGroupModel.h b/pokemodr/models/BadgeGroupModel.h
index e7f6aa1a..dcd7e8e9 100644
--- a/pokemodr/models/BadgeGroupModel.h
+++ b/pokemodr/models/BadgeGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class BadgeGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
BadgeGroupModel(BaseModel* parent, Pokemod* pokemod);
~BadgeGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/BadgeModel.cpp b/pokemodr/models/BadgeModel.cpp
index f750255e..a373efef 100644
--- a/pokemodr/models/BadgeModel.cpp
+++ b/pokemodr/models/BadgeModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "BadgeModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../BadgeUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
BadgeModel::BadgeModel(BaseModel* parent, Badge* badge) :
ObjectModel(parent, badge)
{
@@ -51,6 +57,12 @@ QVariant BadgeModel::data(int role) const
QWidget* widget = new BadgeUI(static_cast<Badge*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Badge", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool BadgeModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void BadgeModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/BadgeModel.h b/pokemodr/models/BadgeModel.h
index 0a06821f..4c67796c 100644
--- a/pokemodr/models/BadgeModel.h
+++ b/pokemodr/models/BadgeModel.h
@@ -26,6 +26,8 @@ class Badge;
class BadgeModel : public ObjectModel
{
+ Q_OBJECT
+
public:
BadgeModel(BaseModel* parent, Badge* badge);
~BadgeModel();
@@ -33,6 +35,8 @@ class BadgeModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/BaseModel.h b/pokemodr/models/BaseModel.h
index d2a5b5e6..2c0eb648 100644
--- a/pokemodr/models/BaseModel.h
+++ b/pokemodr/models/BaseModel.h
@@ -25,8 +25,10 @@
// Forward declarations
class Object;
-class BaseModel
+class BaseModel : public QObject
{
+ Q_OBJECT
+
public:
BaseModel(BaseModel* parent, Object* object, const QString& name = "");
virtual ~BaseModel();
diff --git a/pokemodr/models/BaseObjectModel.h b/pokemodr/models/BaseObjectModel.h
index f18ce8a4..309ff8d9 100644
--- a/pokemodr/models/BaseObjectModel.h
+++ b/pokemodr/models/BaseObjectModel.h
@@ -23,6 +23,8 @@
class BaseObjectModel : public BaseModel
{
+ Q_OBJECT
+
public:
BaseObjectModel(BaseModel* parent, Object* object);
virtual ~BaseObjectModel();
diff --git a/pokemodr/models/CoinListGroupModel.cpp b/pokemodr/models/CoinListGroupModel.cpp
index 56eeaae3..74f6d3c0 100644
--- a/pokemodr/models/CoinListGroupModel.cpp
+++ b/pokemodr/models/CoinListGroupModel.cpp
@@ -22,21 +22,49 @@
#include "CoinListModel.h"
// Pokemod includes
+#include "../../pokemod/CoinList.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
CoinListGroupModel::CoinListGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Coin Lists")
{
- setupData();
+ for (int i = 0; i < pokemod->coinListCount(); ++i)
+ addObject(pokemod->coinList(i));
}
CoinListGroupModel::~CoinListGroupModel()
{
}
-void CoinListGroupModel::setupData()
+QVariant CoinListGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->coinListCount(); ++i)
- m_objects.append(new CoinListModel(this, pokemod->coinList(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Coin List", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void CoinListGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newCoinList();
+ if (object->className() == "CoinList")
+ m_objects.append(new CoinListModel(this, static_cast<CoinList*>(object)));
+}
+
+void CoinListGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteCoinList(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/CoinListGroupModel.h b/pokemodr/models/CoinListGroupModel.h
index 6cde6483..f0a37623 100644
--- a/pokemodr/models/CoinListGroupModel.h
+++ b/pokemodr/models/CoinListGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class CoinListGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
CoinListGroupModel(BaseModel* parent, Pokemod* pokemod);
~CoinListGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/CoinListModel.cpp b/pokemodr/models/CoinListModel.cpp
index e12a3908..ab05058e 100644
--- a/pokemodr/models/CoinListModel.cpp
+++ b/pokemodr/models/CoinListModel.cpp
@@ -26,10 +26,14 @@
// Pokemod includes
#include "../../pokemod/CoinList.h"
+#include "../../pokemod/CoinListObject.h"
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
CoinListModel::CoinListModel(BaseModel* parent, CoinList* coinList) :
GroupObjectModel(parent, coinList)
{
@@ -56,6 +60,14 @@ QVariant CoinListModel::data(int role) const
QWidget* widget = new CoinListUI(static_cast<CoinList*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Object", this, SLOT(addObject()));
+ menu->addSeparator();
+ menu->addAction("Delete Coin List", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return GroupObjectModel::data(role);
}
@@ -83,6 +95,30 @@ bool CoinListModel::setData(const QVariant& value, int role)
return false;
}
+void CoinListModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<CoinList*>(m_object)->newObject();
+ if (object->className() == "CoinListObject")
+ m_objects.append(new CoinListObjectModel(this, static_cast<CoinListObject*>(object)));
+}
+
+void CoinListModel::deleteObject(BaseModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<CoinList*>(m_object)->deleteObject(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
+}
+
+void CoinListModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
+
void CoinListModel::setupData()
{
CoinList* coinList = static_cast<CoinList*>(m_object);
diff --git a/pokemodr/models/CoinListModel.h b/pokemodr/models/CoinListModel.h
index 72039a66..a0615a82 100644
--- a/pokemodr/models/CoinListModel.h
+++ b/pokemodr/models/CoinListModel.h
@@ -26,6 +26,8 @@ class CoinList;
class CoinListModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
CoinListModel(BaseModel* parent, CoinList* coinList);
~CoinListModel();
@@ -33,6 +35,11 @@ class CoinListModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseModel* model);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/CoinListObjectModel.cpp b/pokemodr/models/CoinListObjectModel.cpp
index 0bf7152f..996378a5 100644
--- a/pokemodr/models/CoinListObjectModel.cpp
+++ b/pokemodr/models/CoinListObjectModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "CoinListObjectModel.h"
+// Model includes
+#include "GroupObjectModel.h"
+
// PokeModr includes
#include "../CoinListObjectUI.h"
@@ -30,6 +33,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
CoinListObjectModel::CoinListObjectModel(BaseModel* parent, CoinListObject* object) :
ObjectModel(parent, object)
{
@@ -69,6 +75,12 @@ QVariant CoinListObjectModel::data(int role) const
QWidget* widget = new CoinListObjectUI(static_cast<CoinListObject*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Object", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -93,3 +105,8 @@ bool CoinListObjectModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void CoinListObjectModel::deleteSelf()
+{
+// static_cast<GroupObjectModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/CoinListObjectModel.h b/pokemodr/models/CoinListObjectModel.h
index 585ae4fd..2bfc170c 100644
--- a/pokemodr/models/CoinListObjectModel.h
+++ b/pokemodr/models/CoinListObjectModel.h
@@ -26,6 +26,8 @@ class CoinListObject;
class CoinListObjectModel : public ObjectModel
{
+ Q_OBJECT
+
public:
CoinListObjectModel(BaseModel* parent, CoinListObject* object);
~CoinListObjectModel();
@@ -33,6 +35,8 @@ class CoinListObjectModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/EggGroupGroupModel.cpp b/pokemodr/models/EggGroupGroupModel.cpp
index 669b512e..e293c826 100644
--- a/pokemodr/models/EggGroupGroupModel.cpp
+++ b/pokemodr/models/EggGroupGroupModel.cpp
@@ -22,21 +22,49 @@
#include "EggGroupModel.h"
// Pokemod includes
+#include "../../pokemod/EggGroup.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
EggGroupGroupModel::EggGroupGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Egg Groups")
{
- setupData();
+ for (int i = 0; i < pokemod->eggGroupCount(); ++i)
+ addObject(pokemod->eggGroup(i));
}
EggGroupGroupModel::~EggGroupGroupModel()
{
}
-void EggGroupGroupModel::setupData()
+QVariant EggGroupGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->eggGroupCount(); ++i)
- m_objects.append(new EggGroupModel(this, pokemod->eggGroup(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add EggGroup", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void EggGroupGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newEggGroup();
+ if (object->className() == "EggGroup")
+ m_objects.append(new EggGroupModel(this, static_cast<EggGroup*>(object)));
+}
+
+void EggGroupGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteEggGroup(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/EggGroupGroupModel.h b/pokemodr/models/EggGroupGroupModel.h
index 81a9f78f..af05675a 100644
--- a/pokemodr/models/EggGroupGroupModel.h
+++ b/pokemodr/models/EggGroupGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class EggGroupGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
EggGroupGroupModel(BaseModel* parent, Pokemod* pokemod);
~EggGroupGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/EggGroupModel.cpp b/pokemodr/models/EggGroupModel.cpp
index 78adf60b..27e39e02 100644
--- a/pokemodr/models/EggGroupModel.cpp
+++ b/pokemodr/models/EggGroupModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "EggGroupModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../EggGroupUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
EggGroupModel::EggGroupModel(BaseModel* parent, EggGroup* eggGroup) :
ObjectModel(parent, eggGroup)
{
@@ -51,6 +57,12 @@ QVariant EggGroupModel::data(int role) const
QWidget* widget = new EggGroupUI(static_cast<EggGroup*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Egg Group", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool EggGroupModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void EggGroupModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/EggGroupModel.h b/pokemodr/models/EggGroupModel.h
index 87a9b637..97835c93 100644
--- a/pokemodr/models/EggGroupModel.h
+++ b/pokemodr/models/EggGroupModel.h
@@ -26,6 +26,8 @@ class EggGroup;
class EggGroupModel : public ObjectModel
{
+ Q_OBJECT
+
public:
EggGroupModel(BaseModel* parent, EggGroup* eggGroup);
~EggGroupModel();
@@ -33,6 +35,8 @@ class EggGroupModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/GlobalScriptGroupModel.cpp b/pokemodr/models/GlobalScriptGroupModel.cpp
index e951327a..c2ad6258 100644
--- a/pokemodr/models/GlobalScriptGroupModel.cpp
+++ b/pokemodr/models/GlobalScriptGroupModel.cpp
@@ -22,21 +22,49 @@
#include "GlobalScriptModel.h"
// Pokemod includes
+#include "../../pokemod/GlobalScript.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
GlobalScriptGroupModel::GlobalScriptGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Global Scripts")
{
- setupData();
+ for (int i = 0; i < pokemod->globalScriptCount(); ++i)
+ addObject(pokemod->globalScript(i));
}
GlobalScriptGroupModel::~GlobalScriptGroupModel()
{
}
-void GlobalScriptGroupModel::setupData()
+QVariant GlobalScriptGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->globalScriptCount(); ++i)
- m_objects.append(new GlobalScriptModel(this, pokemod->globalScript(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add GlobalScript", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void GlobalScriptGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newGlobalScript();
+ if (object->className() == "GlobalScript")
+ m_objects.append(new GlobalScriptModel(this, static_cast<GlobalScript*>(object)));
+}
+
+void GlobalScriptGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteGlobalScript(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/GlobalScriptGroupModel.h b/pokemodr/models/GlobalScriptGroupModel.h
index 89546115..bd191449 100644
--- a/pokemodr/models/GlobalScriptGroupModel.h
+++ b/pokemodr/models/GlobalScriptGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class GlobalScriptGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
GlobalScriptGroupModel(BaseModel* parent, Pokemod* pokemod);
~GlobalScriptGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/GlobalScriptModel.cpp b/pokemodr/models/GlobalScriptModel.cpp
index 25db22b6..ae3f4e47 100644
--- a/pokemodr/models/GlobalScriptModel.cpp
+++ b/pokemodr/models/GlobalScriptModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "GlobalScriptModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../GlobalScriptUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
GlobalScriptModel::GlobalScriptModel(BaseModel* parent, GlobalScript* globalScript) :
ObjectModel(parent, globalScript)
{
@@ -51,6 +57,12 @@ QVariant GlobalScriptModel::data(int role) const
QWidget* widget = new GlobalScriptUI(static_cast<GlobalScript*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Global Script", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool GlobalScriptModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void GlobalScriptModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/GlobalScriptModel.h b/pokemodr/models/GlobalScriptModel.h
index 29a0028d..83d59194 100644
--- a/pokemodr/models/GlobalScriptModel.h
+++ b/pokemodr/models/GlobalScriptModel.h
@@ -26,6 +26,8 @@ class GlobalScript;
class GlobalScriptModel : public ObjectModel
{
+ Q_OBJECT
+
public:
GlobalScriptModel(BaseModel* parent, GlobalScript* globalScript);
~GlobalScriptModel();
@@ -33,6 +35,8 @@ class GlobalScriptModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/GroupModel.h b/pokemodr/models/GroupModel.h
index 0f27a3f0..0a45dde0 100644
--- a/pokemodr/models/GroupModel.h
+++ b/pokemodr/models/GroupModel.h
@@ -25,10 +25,13 @@
#include <QList>
// Forward declarations
+class Object;
class BaseObjectModel;
class GroupModel : public BaseModel
{
+ Q_OBJECT
+
public:
GroupModel(BaseModel* parent, Object* object, const QString& name = "");
virtual ~GroupModel();
@@ -43,11 +46,12 @@ class GroupModel : public BaseModel
Qt::DropActions supportedDragActions();
Qt::DropActions supportedDropActions();
+ public slots:
+ virtual void addObject(Object* object = NULL) = 0;
+ virtual void deleteObject(BaseObjectModel* model) = 0;
protected:
int findChild(const BaseModel* model) const;
- virtual void setupData() = 0;
-
QList<BaseObjectModel*> m_objects;
private:
void clearData();
diff --git a/pokemodr/models/GroupObjectModel.h b/pokemodr/models/GroupObjectModel.h
index 1a062516..26029a49 100644
--- a/pokemodr/models/GroupObjectModel.h
+++ b/pokemodr/models/GroupObjectModel.h
@@ -24,6 +24,8 @@
class GroupObjectModel : public BaseObjectModel
{
+ Q_OBJECT
+
public:
GroupObjectModel(BaseModel* parent, Object* object);
virtual ~GroupObjectModel();
@@ -34,11 +36,16 @@ class GroupObjectModel : public BaseObjectModel
virtual bool setData(const QVariant& value, int role = Qt::EditRole) = 0;
BaseModel* childItem(const int row);
+ public slots:
+ virtual void addObject(Object* object = NULL) = 0;
+ virtual void deleteObject(BaseModel* model) = 0;
+
+ virtual void deleteSelf() = 0;
protected:
int findChild(const BaseModel* model) const;
- virtual void setupData() = 0;
void clearData();
+ virtual void setupData() = 0;
QList<BaseModel*> m_objects;
};
diff --git a/pokemodr/models/ItemGroupModel.cpp b/pokemodr/models/ItemGroupModel.cpp
index 62478e10..ab62db56 100644
--- a/pokemodr/models/ItemGroupModel.cpp
+++ b/pokemodr/models/ItemGroupModel.cpp
@@ -22,21 +22,49 @@
#include "ItemModel.h"
// Pokemod includes
+#include "../../pokemod/Item.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
ItemGroupModel::ItemGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Items")
{
- setupData();
+ for (int i = 0; i < pokemod->itemCount(); ++i)
+ addObject(pokemod->item(i));
}
ItemGroupModel::~ItemGroupModel()
{
}
-void ItemGroupModel::setupData()
+QVariant ItemGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->itemCount(); ++i)
- m_objects.append(new ItemModel(this, pokemod->item(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Item", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void ItemGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newItem();
+ if (object->className() == "Item")
+ m_objects.append(new ItemModel(this, static_cast<Item*>(object)));
+}
+
+void ItemGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteItem(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/ItemGroupModel.h b/pokemodr/models/ItemGroupModel.h
index 98027f60..40f5ec06 100644
--- a/pokemodr/models/ItemGroupModel.h
+++ b/pokemodr/models/ItemGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class ItemGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
ItemGroupModel(BaseModel* parent, Pokemod* pokemod);
~ItemGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/ItemModel.cpp b/pokemodr/models/ItemModel.cpp
index 66968cf7..7d30bfbc 100644
--- a/pokemodr/models/ItemModel.cpp
+++ b/pokemodr/models/ItemModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "ItemModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../ItemUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
ItemModel::ItemModel(BaseModel* parent, Item* item) :
ObjectModel(parent, item)
{
@@ -51,6 +57,12 @@ QVariant ItemModel::data(int role) const
QWidget* widget = new ItemUI(static_cast<Item*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Item", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool ItemModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void ItemModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/ItemModel.h b/pokemodr/models/ItemModel.h
index ad126f20..63f7047e 100644
--- a/pokemodr/models/ItemModel.h
+++ b/pokemodr/models/ItemModel.h
@@ -26,6 +26,8 @@ class Item;
class ItemModel : public ObjectModel
{
+ Q_OBJECT
+
public:
ItemModel(BaseModel* parent, Item* item);
~ItemModel();
@@ -33,6 +35,8 @@ class ItemModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/ItemTypeGroupModel.cpp b/pokemodr/models/ItemTypeGroupModel.cpp
index 0e7214c5..083ccafd 100644
--- a/pokemodr/models/ItemTypeGroupModel.cpp
+++ b/pokemodr/models/ItemTypeGroupModel.cpp
@@ -22,21 +22,49 @@
#include "ItemTypeModel.h"
// Pokemod includes
+#include "../../pokemod/ItemType.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
ItemTypeGroupModel::ItemTypeGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Item Types")
{
- setupData();
+ for (int i = 0; i < pokemod->itemTypeCount(); ++i)
+ addObject(pokemod->itemType(i));
}
ItemTypeGroupModel::~ItemTypeGroupModel()
{
}
-void ItemTypeGroupModel::setupData()
+QVariant ItemTypeGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->itemTypeCount(); ++i)
- m_objects.append(new ItemTypeModel(this, pokemod->itemType(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Item Type", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void ItemTypeGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newItemType();
+ if (object->className() == "ItemType")
+ m_objects.append(new ItemTypeModel(this, static_cast<ItemType*>(object)));
+}
+
+void ItemTypeGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteItemType(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/ItemTypeGroupModel.h b/pokemodr/models/ItemTypeGroupModel.h
index 995ec70e..0748eef7 100644
--- a/pokemodr/models/ItemTypeGroupModel.h
+++ b/pokemodr/models/ItemTypeGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class ItemTypeGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
ItemTypeGroupModel(BaseModel* parent, Pokemod* pokemod);
~ItemTypeGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/ItemTypeModel.cpp b/pokemodr/models/ItemTypeModel.cpp
index 5ed25951..8b92bd99 100644
--- a/pokemodr/models/ItemTypeModel.cpp
+++ b/pokemodr/models/ItemTypeModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "ItemTypeModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../ItemTypeUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
ItemTypeModel::ItemTypeModel(BaseModel* parent, ItemType* itemType) :
ObjectModel(parent, itemType)
{
@@ -51,6 +57,12 @@ QVariant ItemTypeModel::data(int role) const
QWidget* widget = new ItemTypeUI(static_cast<ItemType*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Item Type", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool ItemTypeModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void ItemTypeModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/ItemTypeModel.h b/pokemodr/models/ItemTypeModel.h
index b52a3b4b..53dde9fe 100644
--- a/pokemodr/models/ItemTypeModel.h
+++ b/pokemodr/models/ItemTypeModel.h
@@ -26,6 +26,8 @@ class ItemType;
class ItemTypeModel : public ObjectModel
{
+ Q_OBJECT
+
public:
ItemTypeModel(BaseModel* parent, ItemType* itemType);
~ItemTypeModel();
@@ -33,6 +35,8 @@ class ItemTypeModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/MapEffectGroupModel.cpp b/pokemodr/models/MapEffectGroupModel.cpp
index e4a02be4..c3299eb9 100644
--- a/pokemodr/models/MapEffectGroupModel.cpp
+++ b/pokemodr/models/MapEffectGroupModel.cpp
@@ -23,20 +23,48 @@
// Map includes
#include "../../pokemod/Map.h"
+#include "../../pokemod/MapEffect.h"
+
+// KDE includes
+#include <KMenu>
MapEffectGroupModel::MapEffectGroupModel(BaseModel* parent, Map* map) :
GroupModel(parent, map, "Effects")
{
- setupData();
+ for (int i = 0; i < map->effectCount(); ++i)
+ addObject(map->effect(i));
}
MapEffectGroupModel::~MapEffectGroupModel()
{
}
-void MapEffectGroupModel::setupData()
+QVariant MapEffectGroupModel::data(const int role) const
{
- Map* map = static_cast<Map*>(m_object);
- for (int i = 0; i < map->effectCount(); ++i)
- m_objects.append(new MapEffectModel(this, map->effect(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Effect", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MapEffectGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Map*>(m_object)->newEffect();
+ if (object->className() == "MapEffect")
+ m_objects.append(new MapEffectModel(this, static_cast<MapEffect*>(object)));
+}
+
+void MapEffectGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Map*>(m_object)->deleteEffect(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MapEffectGroupModel.h b/pokemodr/models/MapEffectGroupModel.h
index bed4d2e8..41435c93 100644
--- a/pokemodr/models/MapEffectGroupModel.h
+++ b/pokemodr/models/MapEffectGroupModel.h
@@ -26,11 +26,16 @@ class Map;
class MapEffectGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MapEffectGroupModel(BaseModel* parent, Map* map);
~MapEffectGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MapEffectModel.cpp b/pokemodr/models/MapEffectModel.cpp
index 208a5c62..a43d2e53 100644
--- a/pokemodr/models/MapEffectModel.cpp
+++ b/pokemodr/models/MapEffectModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "MapEffectModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../MapEffectUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapEffectModel::MapEffectModel(BaseModel* parent, MapEffect* effect) :
ObjectModel(parent, effect)
{
@@ -52,6 +58,12 @@ QVariant MapEffectModel::data(int role) const
QWidget* widget = new MapEffectUI(static_cast<MapEffect*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Effect", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool MapEffectModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void MapEffectModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/MapEffectModel.h b/pokemodr/models/MapEffectModel.h
index 00b9deaf..848a92db 100644
--- a/pokemodr/models/MapEffectModel.h
+++ b/pokemodr/models/MapEffectModel.h
@@ -26,6 +26,8 @@ class MapEffect;
class MapEffectModel : public ObjectModel
{
+ Q_OBJECT
+
public:
MapEffectModel(BaseModel* parent, MapEffect* effect);
~MapEffectModel();
@@ -33,6 +35,8 @@ class MapEffectModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/MapGroupModel.cpp b/pokemodr/models/MapGroupModel.cpp
index ad122579..cd65b202 100644
--- a/pokemodr/models/MapGroupModel.cpp
+++ b/pokemodr/models/MapGroupModel.cpp
@@ -22,21 +22,49 @@
#include "MapModel.h"
// Pokemod includes
+#include "../../pokemod/Map.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
MapGroupModel::MapGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Maps")
{
- setupData();
+ for (int i = 0; i < pokemod->mapCount(); ++i)
+ addObject(pokemod->map(i));
}
MapGroupModel::~MapGroupModel()
{
}
-void MapGroupModel::setupData()
+QVariant MapGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->mapCount(); ++i)
- m_objects.append(new MapModel(this, pokemod->map(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Map", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MapGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newMap();
+ if (object->className() == "Map")
+ m_objects.append(new MapModel(this, static_cast<Map*>(object)));
+}
+
+void MapGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteMap(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MapGroupModel.h b/pokemodr/models/MapGroupModel.h
index cb1e6c6a..3e216783 100644
--- a/pokemodr/models/MapGroupModel.h
+++ b/pokemodr/models/MapGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class MapGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MapGroupModel(BaseModel* parent, Pokemod* pokemod);
~MapGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MapModel.cpp b/pokemodr/models/MapModel.cpp
index 5a0e76a0..609c9a90 100644
--- a/pokemodr/models/MapModel.cpp
+++ b/pokemodr/models/MapModel.cpp
@@ -33,10 +33,12 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapModel::MapModel(BaseModel* parent, Map* map) :
GroupObjectModel(parent, map)
{
- setupData();
}
MapModel::~MapModel()
@@ -58,6 +60,12 @@ QVariant MapModel::data(int role) const
QWidget* widget = new MapUI(static_cast<Map*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Map", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return GroupObjectModel::data(role);
}
@@ -85,10 +93,24 @@ bool MapModel::setData(const QVariant& value, int role)
return false;
}
+void MapModel::addObject(Object* /*object*/)
+{
+}
+
+void MapModel::deleteObject(BaseModel* /*model*/)
+{
+}
+
+void MapModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
+
void MapModel::setupData()
{
- m_objects.append(new MapEffectGroupModel(this, static_cast<Map*>(m_object)));
- m_objects.append(new MapTrainerGroupModel(this, static_cast<Map*>(m_object)));
- m_objects.append(new MapWarpGroupModel(this, static_cast<Map*>(m_object)));
- m_objects.append(new MapWildListGroupModel(this, static_cast<Map*>(m_object)));
+ Map* map = static_cast<Map*>(m_object);
+ m_objects.append(new MapEffectGroupModel(this, map));
+ m_objects.append(new MapTrainerGroupModel(this, map));
+ m_objects.append(new MapWarpGroupModel(this, map));
+ m_objects.append(new MapWildListGroupModel(this, map));
}
diff --git a/pokemodr/models/MapModel.h b/pokemodr/models/MapModel.h
index 4d4e97d0..332e6a35 100644
--- a/pokemodr/models/MapModel.h
+++ b/pokemodr/models/MapModel.h
@@ -26,6 +26,8 @@ class Map;
class MapModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
MapModel(BaseModel* parent, Map* map);
~MapModel();
@@ -33,6 +35,11 @@ class MapModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* /*object = NULL*/);
+ void deleteObject(BaseModel* /*model*/);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/MapTrainerGroupModel.cpp b/pokemodr/models/MapTrainerGroupModel.cpp
index 71d0ab1c..14be5b15 100644
--- a/pokemodr/models/MapTrainerGroupModel.cpp
+++ b/pokemodr/models/MapTrainerGroupModel.cpp
@@ -23,20 +23,48 @@
// Map includes
#include "../../pokemod/Map.h"
+#include "../../pokemod/MapTrainer.h"
+
+// KDE includes
+#include <KMenu>
MapTrainerGroupModel::MapTrainerGroupModel(BaseModel* parent, Map* map) :
GroupModel(parent, map, "Trainers")
{
- setupData();
+ for (int i = 0; i < map->trainerCount(); ++i)
+ addObject(map->trainer(i));
}
MapTrainerGroupModel::~MapTrainerGroupModel()
{
}
-void MapTrainerGroupModel::setupData()
+QVariant MapTrainerGroupModel::data(const int role) const
{
- Map* map = static_cast<Map*>(m_object);
- for (int i = 0; i < map->trainerCount(); ++i)
- m_objects.append(new MapTrainerModel(this, map->trainer(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Trainer", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MapTrainerGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Map*>(m_object)->newTrainer();
+ if (object->className() == "MapTrainer")
+ m_objects.append(new MapTrainerModel(this, static_cast<MapTrainer*>(object)));
+}
+
+void MapTrainerGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Map*>(m_object)->deleteTrainer(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MapTrainerGroupModel.h b/pokemodr/models/MapTrainerGroupModel.h
index 99c769d5..a383e607 100644
--- a/pokemodr/models/MapTrainerGroupModel.h
+++ b/pokemodr/models/MapTrainerGroupModel.h
@@ -26,11 +26,16 @@ class Map;
class MapTrainerGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MapTrainerGroupModel(BaseModel* parent, Map* map);
~MapTrainerGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MapTrainerModel.cpp b/pokemodr/models/MapTrainerModel.cpp
index f5db2f24..8698bfe4 100644
--- a/pokemodr/models/MapTrainerModel.cpp
+++ b/pokemodr/models/MapTrainerModel.cpp
@@ -27,10 +27,14 @@
// Pokemod includes
#include "../../pokemod/Map.h"
#include "../../pokemod/MapTrainer.h"
+#include "../../pokemod/MapTrainerTeamMember.h"
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapTrainerModel::MapTrainerModel(BaseModel* parent, MapTrainer* trainer) :
GroupObjectModel(parent, trainer)
{
@@ -57,9 +61,41 @@ QVariant MapTrainerModel::data(int role) const
QWidget* widget = new MapTrainerUI(static_cast<MapTrainer*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Team Member", this, SLOT(addObject()));
+ menu->addSeparator();
+ menu->addAction("Delete Trainer", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return GroupObjectModel::data(role);
}
+void MapTrainerModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<MapTrainer*>(m_object)->newTeamMember();
+ if (object->className() == "MapTrainerTeamMember")
+ m_objects.append(new MapTrainerTeamMemberModel(this, static_cast<MapTrainerTeamMember*>(object)));
+}
+
+void MapTrainerModel::deleteObject(BaseModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<MapTrainer*>(m_object)->deleteTeamMember(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
+}
+
+void MapTrainerModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
+
bool MapTrainerModel::setData(const QVariant& value, int role)
{
if (role == BaseModel::XmlRole)
diff --git a/pokemodr/models/MapTrainerModel.h b/pokemodr/models/MapTrainerModel.h
index 19f6b670..81426311 100644
--- a/pokemodr/models/MapTrainerModel.h
+++ b/pokemodr/models/MapTrainerModel.h
@@ -26,6 +26,8 @@ class MapTrainer;
class MapTrainerModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
MapTrainerModel(BaseModel* parent, MapTrainer* trainer);
~MapTrainerModel();
@@ -33,6 +35,11 @@ class MapTrainerModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseModel* model);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/MapTrainerTeamMemberModel.cpp b/pokemodr/models/MapTrainerTeamMemberModel.cpp
index 045fde58..fa6844d9 100644
--- a/pokemodr/models/MapTrainerTeamMemberModel.cpp
+++ b/pokemodr/models/MapTrainerTeamMemberModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "MapTrainerTeamMemberModel.h"
+// Model includes
+#include "GroupObjectModel.h"
+
// PokeModr includes
#include "../MapTrainerTeamMemberUI.h"
@@ -29,6 +32,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapTrainerTeamMemberModel::MapTrainerTeamMemberModel(BaseModel* parent, MapTrainerTeamMember* teamMember) :
ObjectModel(parent, teamMember)
{
@@ -58,6 +64,12 @@ QVariant MapTrainerTeamMemberModel::data(int role) const
QWidget* widget = new MapTrainerTeamMemberUI(static_cast<MapTrainerTeamMember*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Team Member", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -82,3 +94,8 @@ bool MapTrainerTeamMemberModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void MapTrainerTeamMemberModel::deleteSelf()
+{
+// static_cast<GroupObjectModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/MapTrainerTeamMemberModel.h b/pokemodr/models/MapTrainerTeamMemberModel.h
index e1bbfd77..7ca6fc5e 100644
--- a/pokemodr/models/MapTrainerTeamMemberModel.h
+++ b/pokemodr/models/MapTrainerTeamMemberModel.h
@@ -26,6 +26,8 @@ class MapTrainerTeamMember;
class MapTrainerTeamMemberModel : public ObjectModel
{
+ Q_OBJECT
+
public:
MapTrainerTeamMemberModel(BaseModel* parent, MapTrainerTeamMember* teamMember);
~MapTrainerTeamMemberModel();
@@ -33,6 +35,8 @@ class MapTrainerTeamMemberModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/MapWarpGroupModel.cpp b/pokemodr/models/MapWarpGroupModel.cpp
index fd8bb785..a042cdc5 100644
--- a/pokemodr/models/MapWarpGroupModel.cpp
+++ b/pokemodr/models/MapWarpGroupModel.cpp
@@ -23,20 +23,48 @@
// Map includes
#include "../../pokemod/Map.h"
+#include "../../pokemod/MapWarp.h"
+
+// KDE includes
+#include <KMenu>
MapWarpGroupModel::MapWarpGroupModel(BaseModel* parent, Map* map) :
GroupModel(parent, map, "Warps")
{
- setupData();
+ for (int i = 0; i < map->warpCount(); ++i)
+ addObject(map->warp(i));
}
MapWarpGroupModel::~MapWarpGroupModel()
{
}
-void MapWarpGroupModel::setupData()
+QVariant MapWarpGroupModel::data(const int role) const
{
- Map* map = static_cast<Map*>(m_object);
- for (int i = 0; i < map->warpCount(); ++i)
- m_objects.append(new MapWarpModel(this, map->warp(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Warp", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MapWarpGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Map*>(m_object)->newWarp();
+ if (object->className() == "MapWarp")
+ m_objects.append(new MapWarpModel(this, static_cast<MapWarp*>(object)));
+}
+
+void MapWarpGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Map*>(m_object)->deleteWarp(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MapWarpGroupModel.h b/pokemodr/models/MapWarpGroupModel.h
index 97681e5b..90fa7fba 100644
--- a/pokemodr/models/MapWarpGroupModel.h
+++ b/pokemodr/models/MapWarpGroupModel.h
@@ -26,11 +26,16 @@ class Map;
class MapWarpGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MapWarpGroupModel(BaseModel* parent, Map* map);
~MapWarpGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MapWarpModel.cpp b/pokemodr/models/MapWarpModel.cpp
index ba3a55a0..2a3c7825 100644
--- a/pokemodr/models/MapWarpModel.cpp
+++ b/pokemodr/models/MapWarpModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "MapWarpModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../MapWarpUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapWarpModel::MapWarpModel(BaseModel* parent, MapWarp* warp) :
ObjectModel(parent, warp)
{
@@ -52,6 +58,12 @@ QVariant MapWarpModel::data(int role) const
QWidget* widget = new MapWarpUI(static_cast<MapWarp*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Warp", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool MapWarpModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void MapWarpModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/MapWarpModel.h b/pokemodr/models/MapWarpModel.h
index 602d0565..da4808ba 100644
--- a/pokemodr/models/MapWarpModel.h
+++ b/pokemodr/models/MapWarpModel.h
@@ -26,6 +26,8 @@ class MapWarp;
class MapWarpModel : public ObjectModel
{
+ Q_OBJECT
+
public:
MapWarpModel(BaseModel* parent, MapWarp* warp);
~MapWarpModel();
@@ -33,6 +35,8 @@ class MapWarpModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/MapWildListEncounterModel.cpp b/pokemodr/models/MapWildListEncounterModel.cpp
index 94f38818..ea21fe90 100644
--- a/pokemodr/models/MapWildListEncounterModel.cpp
+++ b/pokemodr/models/MapWildListEncounterModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "MapWildListEncounterModel.h"
+// Model includes
+#include "GroupObjectModel.h"
+
// PokeModr includes
#include "../MapWildListEncounterUI.h"
@@ -29,6 +32,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapWildListEncounterModel::MapWildListEncounterModel(BaseModel* parent, MapWildListEncounter* encounter) :
ObjectModel(parent, encounter)
{
@@ -58,6 +64,12 @@ QVariant MapWildListEncounterModel::data(int role) const
QWidget* widget = new MapWildListEncounterUI(static_cast<MapWildListEncounter*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Encounter", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -82,3 +94,8 @@ bool MapWildListEncounterModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void MapWildListEncounterModel::deleteSelf()
+{
+// static_cast<GroupObjectModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/MapWildListEncounterModel.h b/pokemodr/models/MapWildListEncounterModel.h
index bf0d2d9a..b09cc177 100644
--- a/pokemodr/models/MapWildListEncounterModel.h
+++ b/pokemodr/models/MapWildListEncounterModel.h
@@ -26,6 +26,8 @@ class MapWildListEncounter;
class MapWildListEncounterModel : public ObjectModel
{
+ Q_OBJECT
+
public:
MapWildListEncounterModel(BaseModel* parent, MapWildListEncounter* encounter);
~MapWildListEncounterModel();
@@ -33,6 +35,8 @@ class MapWildListEncounterModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/MapWildListGroupModel.cpp b/pokemodr/models/MapWildListGroupModel.cpp
index da865777..d4789481 100644
--- a/pokemodr/models/MapWildListGroupModel.cpp
+++ b/pokemodr/models/MapWildListGroupModel.cpp
@@ -23,20 +23,48 @@
// Map includes
#include "../../pokemod/Map.h"
+#include "../../pokemod/MapWildList.h"
+
+// KDE includes
+#include <KMenu>
MapWildListGroupModel::MapWildListGroupModel(BaseModel* parent, Map* map) :
GroupModel(parent, map, "Wild Lists")
{
- setupData();
+ for (int i = 0; i < map->wildListCount(); ++i)
+ addObject(map->wildList(i));
}
MapWildListGroupModel::~MapWildListGroupModel()
{
}
-void MapWildListGroupModel::setupData()
+QVariant MapWildListGroupModel::data(const int role) const
{
- Map* map = static_cast<Map*>(m_object);
- for (int i = 0; i < map->wildListCount(); ++i)
- m_objects.append(new MapWildListModel(this, map->wildList(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Wild List", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MapWildListGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Map*>(m_object)->newWildList();
+ if (object->className() == "MapWildList")
+ m_objects.append(new MapWildListModel(this, static_cast<MapWildList*>(object)));
+}
+
+void MapWildListGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Map*>(m_object)->deleteWildList(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MapWildListGroupModel.h b/pokemodr/models/MapWildListGroupModel.h
index fb1d7c74..18df65c0 100644
--- a/pokemodr/models/MapWildListGroupModel.h
+++ b/pokemodr/models/MapWildListGroupModel.h
@@ -26,11 +26,16 @@ class Map;
class MapWildListGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MapWildListGroupModel(BaseModel* parent, Map* map);
~MapWildListGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MapWildListModel.cpp b/pokemodr/models/MapWildListModel.cpp
index 181d0ccd..a2154def 100644
--- a/pokemodr/models/MapWildListModel.cpp
+++ b/pokemodr/models/MapWildListModel.cpp
@@ -27,10 +27,14 @@
// Pokemod includes
#include "../../pokemod/Map.h"
#include "../../pokemod/MapWildList.h"
+#include "../../pokemod/MapWildListEncounter.h"
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MapWildListModel::MapWildListModel(BaseModel* parent, MapWildList* wildList) :
GroupObjectModel(parent, wildList)
{
@@ -61,9 +65,41 @@ QVariant MapWildListModel::data(int role) const
QWidget* widget = new MapWildListUI(static_cast<MapWildList*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Encounter", this, SLOT(addObject()));
+ menu->addSeparator();
+ menu->addAction("Delete Wild List", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return GroupObjectModel::data(role);
}
+void MapWildListModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<MapWildList*>(m_object)->newEncounter();
+ if (object->className() == "MapWildListEncounter")
+ m_objects.append(new MapWildListEncounterModel(this, static_cast<MapWildListEncounter*>(object)));
+}
+
+void MapWildListModel::deleteObject(BaseModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<MapWildList*>(m_object)->deleteEncounter(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
+}
+
+void MapWildListModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
+
bool MapWildListModel::setData(const QVariant& value, int role)
{
if (role == BaseModel::XmlRole)
diff --git a/pokemodr/models/MapWildListModel.h b/pokemodr/models/MapWildListModel.h
index f6f059f3..e9bf2174 100644
--- a/pokemodr/models/MapWildListModel.h
+++ b/pokemodr/models/MapWildListModel.h
@@ -26,6 +26,8 @@ class MapWildList;
class MapWildListModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
MapWildListModel(BaseModel* parent, MapWildList* wildList);
~MapWildListModel();
@@ -33,6 +35,11 @@ class MapWildListModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseModel* model);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/MoveGroupModel.cpp b/pokemodr/models/MoveGroupModel.cpp
index ff51cbf8..4ab86867 100644
--- a/pokemodr/models/MoveGroupModel.cpp
+++ b/pokemodr/models/MoveGroupModel.cpp
@@ -22,21 +22,49 @@
#include "MoveModel.h"
// Pokemod includes
+#include "../../pokemod/Move.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
MoveGroupModel::MoveGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Moves")
{
- setupData();
+ for (int i = 0; i < pokemod->moveCount(); ++i)
+ addObject(pokemod->move(i));
}
MoveGroupModel::~MoveGroupModel()
{
}
-void MoveGroupModel::setupData()
+QVariant MoveGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->moveCount(); ++i)
- m_objects.append(new MoveModel(this, pokemod->move(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Move", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void MoveGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newMove();
+ if (object->className() == "Move")
+ m_objects.append(new MoveModel(this, static_cast<Move*>(object)));
+}
+
+void MoveGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteMove(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/MoveGroupModel.h b/pokemodr/models/MoveGroupModel.h
index 72ca104b..4859ef67 100644
--- a/pokemodr/models/MoveGroupModel.h
+++ b/pokemodr/models/MoveGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class MoveGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
MoveGroupModel(BaseModel* parent, Pokemod* pokemod);
~MoveGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/MoveModel.cpp b/pokemodr/models/MoveModel.cpp
index 5799e374..b5052232 100644
--- a/pokemodr/models/MoveModel.cpp
+++ b/pokemodr/models/MoveModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "MoveModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../MoveUI.h"
@@ -27,6 +30,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
MoveModel::MoveModel(BaseModel* parent, Move* move) :
ObjectModel(parent, move)
{
@@ -51,6 +57,12 @@ QVariant MoveModel::data(int role) const
QWidget* widget = new MoveUI(static_cast<Move*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Move", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -75,3 +87,8 @@ bool MoveModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void MoveModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/MoveModel.h b/pokemodr/models/MoveModel.h
index cc8df8ac..2acebb5a 100644
--- a/pokemodr/models/MoveModel.h
+++ b/pokemodr/models/MoveModel.h
@@ -26,6 +26,8 @@ class Move;
class MoveModel : public ObjectModel
{
+ Q_OBJECT
+
public:
MoveModel(BaseModel* parent, Move* move);
~MoveModel();
@@ -33,6 +35,8 @@ class MoveModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/NatureGroupModel.cpp b/pokemodr/models/NatureGroupModel.cpp
index d2160e0b..b303bac3 100644
--- a/pokemodr/models/NatureGroupModel.cpp
+++ b/pokemodr/models/NatureGroupModel.cpp
@@ -22,21 +22,49 @@
#include "NatureModel.h"
// Pokemod includes
+#include "../../pokemod/Nature.h"
#include "../../pokemod/Pokemod.h"
+// KDE includes
+#include <KMenu>
+
NatureGroupModel::NatureGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Natures")
{
- setupData();
+ for (int i = 0; i < pokemod->natureCount(); ++i)
+ addObject(pokemod->nature(i));
}
NatureGroupModel::~NatureGroupModel()
{
}
-void NatureGroupModel::setupData()
+QVariant NatureGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->natureCount(); ++i)
- m_objects.append(new NatureModel(this, pokemod->nature(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Nature", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void NatureGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newNature();
+ if (object->className() == "Nature")
+ m_objects.append(new NatureModel(this, static_cast<Nature*>(object)));
+}
+
+void NatureGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteNature(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/NatureGroupModel.h b/pokemodr/models/NatureGroupModel.h
index 4601bc56..35ad5458 100644
--- a/pokemodr/models/NatureGroupModel.h
+++ b/pokemodr/models/NatureGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class NatureGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
NatureGroupModel(BaseModel* parent, Pokemod* pokemod);
~NatureGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/NatureModel.cpp b/pokemodr/models/NatureModel.cpp
index 801ca8ae..1fe0227b 100644
--- a/pokemodr/models/NatureModel.cpp
+++ b/pokemodr/models/NatureModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "NatureModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../NatureUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
NatureModel::NatureModel(BaseModel* parent, Nature* nature) :
ObjectModel(parent, nature)
{
@@ -52,6 +58,12 @@ QVariant NatureModel::data(int role) const
QWidget* widget = new NatureUI(static_cast<Nature*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Nature", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool NatureModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void NatureModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/NatureModel.h b/pokemodr/models/NatureModel.h
index c954917d..5083a87f 100644
--- a/pokemodr/models/NatureModel.h
+++ b/pokemodr/models/NatureModel.h
@@ -26,6 +26,8 @@ class Nature;
class NatureModel : public ObjectModel
{
+ Q_OBJECT
+
public:
NatureModel(BaseModel* parent, Nature* nature);
~NatureModel();
@@ -33,6 +35,8 @@ class NatureModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/ObjectModel.h b/pokemodr/models/ObjectModel.h
index e8477c4f..bfb01252 100644
--- a/pokemodr/models/ObjectModel.h
+++ b/pokemodr/models/ObjectModel.h
@@ -23,6 +23,8 @@
class ObjectModel : public BaseObjectModel
{
+ Q_OBJECT
+
public:
ObjectModel(BaseModel* parent, Object* object);
virtual ~ObjectModel();
@@ -33,6 +35,8 @@ class ObjectModel : public BaseObjectModel
virtual bool setData(const QVariant& value, int role = Qt::EditRole) = 0;
BaseModel* childItem(const int /*row*/);
+ public slots:
+ virtual void deleteSelf() = 0;
};
#endif
diff --git a/pokemodr/models/PokemodModel.cpp b/pokemodr/models/PokemodModel.cpp
index 6daa6c6b..1280bc7a 100644
--- a/pokemodr/models/PokemodModel.cpp
+++ b/pokemodr/models/PokemodModel.cpp
@@ -101,25 +101,38 @@ bool PokemodModel::setData(const QVariant& value, int role)
return false;
}
+void PokemodModel::addObject(Object* /*object*/)
+{
+}
+
+void PokemodModel::deleteObject(BaseModel* /*model*/)
+{
+}
+
+void PokemodModel::deleteSelf()
+{
+}
+
void PokemodModel::setupData()
{
- m_objects.append(new RulesModel(this, static_cast<Pokemod*>(m_object)->rules()));
- m_objects.append(new AbilityGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new AuthorGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new BadgeGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new CoinListGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new EggGroupGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new GlobalScriptGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new ItemGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new ItemTypeGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new MapGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new MoveGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new NatureGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new SoundGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new SpeciesGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new StoreGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new TileGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new TimeGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new TrainerGroupModel(this, static_cast<Pokemod*>(m_object)));
- m_objects.append(new TypeGroupModel(this, static_cast<Pokemod*>(m_object)));
+ Pokemod* pokemod = static_cast<Pokemod*>(m_object);
+ m_objects.append(new RulesModel(this, pokemod->rules()));
+ m_objects.append(new AbilityGroupModel(this, pokemod));
+ m_objects.append(new AuthorGroupModel(this, pokemod));
+ m_objects.append(new BadgeGroupModel(this, pokemod));
+ m_objects.append(new CoinListGroupModel(this, pokemod));
+ m_objects.append(new EggGroupGroupModel(this, pokemod));
+ m_objects.append(new GlobalScriptGroupModel(this, pokemod));
+ m_objects.append(new ItemGroupModel(this, pokemod));
+ m_objects.append(new ItemTypeGroupModel(this, pokemod));
+ m_objects.append(new MapGroupModel(this, pokemod));
+ m_objects.append(new MoveGroupModel(this, pokemod));
+ m_objects.append(new NatureGroupModel(this, pokemod));
+ m_objects.append(new SoundGroupModel(this, pokemod));
+ m_objects.append(new SpeciesGroupModel(this, pokemod));
+ m_objects.append(new StoreGroupModel(this, pokemod));
+ m_objects.append(new TileGroupModel(this, pokemod));
+ m_objects.append(new TimeGroupModel(this, pokemod));
+ m_objects.append(new TrainerGroupModel(this, pokemod));
+ m_objects.append(new TypeGroupModel(this, pokemod));
}
diff --git a/pokemodr/models/PokemodModel.h b/pokemodr/models/PokemodModel.h
index 8592e556..cd4a2653 100644
--- a/pokemodr/models/PokemodModel.h
+++ b/pokemodr/models/PokemodModel.h
@@ -26,6 +26,8 @@ class Pokemod;
class PokemodModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
PokemodModel(BaseModel* parent, Pokemod* pokemod);
~PokemodModel();
@@ -33,6 +35,11 @@ class PokemodModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* /*object = NULL*/);
+ void deleteObject(BaseModel* /*model*/);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/RootModel.cpp b/pokemodr/models/RootModel.cpp
index 1c0691f7..edfc8e69 100644
--- a/pokemodr/models/RootModel.cpp
+++ b/pokemodr/models/RootModel.cpp
@@ -54,6 +54,10 @@ void RootModel::deletePokemod(const Pokemod* pokemod)
}
}
-void RootModel::setupData()
+void RootModel::addObject(Object* /*object*/)
+{
+}
+
+void RootModel::deleteObject(BaseObjectModel* /*model*/)
{
}
diff --git a/pokemodr/models/RootModel.h b/pokemodr/models/RootModel.h
index f0a7599f..530dac4d 100644
--- a/pokemodr/models/RootModel.h
+++ b/pokemodr/models/RootModel.h
@@ -26,14 +26,17 @@ class PokemodModel;
class RootModel : public GroupModel
{
+ Q_OBJECT
+
public:
RootModel();
~RootModel();
void addPokemod(Pokemod* pokemod);
void deletePokemod(const Pokemod* pokemod);
- protected:
- void setupData();
+ public slots:
+ void addObject(Object* /*object = NULL*/);
+ void deleteObject(BaseObjectModel* /*model*/);
};
#endif
diff --git a/pokemodr/models/RulesModel.cpp b/pokemodr/models/RulesModel.cpp
index 777fa6e7..537af62c 100644
--- a/pokemodr/models/RulesModel.cpp
+++ b/pokemodr/models/RulesModel.cpp
@@ -75,3 +75,7 @@ bool RulesModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void RulesModel::deleteSelf()
+{
+}
diff --git a/pokemodr/models/RulesModel.h b/pokemodr/models/RulesModel.h
index 8b94cb05..e223e83b 100644
--- a/pokemodr/models/RulesModel.h
+++ b/pokemodr/models/RulesModel.h
@@ -26,6 +26,8 @@ class Rules;
class RulesModel : public ObjectModel
{
+ Q_OBJECT
+
public:
RulesModel(BaseModel* parent, Rules* rules);
~RulesModel();
@@ -33,6 +35,8 @@ class RulesModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/SoundGroupModel.cpp b/pokemodr/models/SoundGroupModel.cpp
index 226e2a95..15b47379 100644
--- a/pokemodr/models/SoundGroupModel.cpp
+++ b/pokemodr/models/SoundGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Sound.h"
+
+// KDE includes
+#include <KMenu>
SoundGroupModel::SoundGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Sounds")
{
- setupData();
+ for (int i = 0; i < pokemod->soundCount(); ++i)
+ addObject(pokemod->sound(i));
}
SoundGroupModel::~SoundGroupModel()
{
}
-void SoundGroupModel::setupData()
+QVariant SoundGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->soundCount(); ++i)
- m_objects.append(new SoundModel(this, pokemod->sound(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Sound", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void SoundGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newSound();
+ if (object->className() == "Sound")
+ m_objects.append(new SoundModel(this, static_cast<Sound*>(object)));
+}
+
+void SoundGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteSound(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/SoundGroupModel.h b/pokemodr/models/SoundGroupModel.h
index 000cb50d..cf5e1f5e 100644
--- a/pokemodr/models/SoundGroupModel.h
+++ b/pokemodr/models/SoundGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class SoundGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
SoundGroupModel(BaseModel* parent, Pokemod* pokemod);
~SoundGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/SoundModel.cpp b/pokemodr/models/SoundModel.cpp
index 739ac34c..e0647526 100644
--- a/pokemodr/models/SoundModel.cpp
+++ b/pokemodr/models/SoundModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "SoundModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../SoundUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
SoundModel::SoundModel(BaseModel* parent, Sound* sound) :
ObjectModel(parent, sound)
{
@@ -52,6 +58,12 @@ QVariant SoundModel::data(int role) const
QWidget* widget = new SoundUI(static_cast<Sound*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Sound", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool SoundModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void SoundModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/SoundModel.h b/pokemodr/models/SoundModel.h
index 690cc1c1..f336bd33 100644
--- a/pokemodr/models/SoundModel.h
+++ b/pokemodr/models/SoundModel.h
@@ -26,6 +26,8 @@ class Sound;
class SoundModel : public ObjectModel
{
+ Q_OBJECT
+
public:
SoundModel(BaseModel* parent, Sound* nature);
~SoundModel();
@@ -33,6 +35,8 @@ class SoundModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/SpeciesAbilityGroupModel.cpp b/pokemodr/models/SpeciesAbilityGroupModel.cpp
index 043ca754..9a447f32 100644
--- a/pokemodr/models/SpeciesAbilityGroupModel.cpp
+++ b/pokemodr/models/SpeciesAbilityGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Species.h"
+#include "../../pokemod/SpeciesAbility.h"
+
+// KDE includes
+#include <KMenu>
SpeciesAbilityGroupModel::SpeciesAbilityGroupModel(BaseModel* parent, Species* species) :
GroupModel(parent, species, "Abilities")
{
- setupData();
+ for (int i = 0; i < species->abilityCount(); ++i)
+ addObject(species->ability(i));
}
SpeciesAbilityGroupModel::~SpeciesAbilityGroupModel()
{
}
-void SpeciesAbilityGroupModel::setupData()
+QVariant SpeciesAbilityGroupModel::data(const int role) const
{
- Species* species = static_cast<Species*>(m_object);
- for (int i = 0; i < species->abilityCount(); ++i)
- m_objects.append(new SpeciesAbilityModel(this, species->ability(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Ability", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void SpeciesAbilityGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Species*>(m_object)->newAbility();
+ if (object->className() == "SpeciesAbility")
+ m_objects.append(new SpeciesAbilityModel(this, static_cast<SpeciesAbility*>(object)));
+}
+
+void SpeciesAbilityGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Species*>(m_object)->deleteAbility(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/SpeciesAbilityGroupModel.h b/pokemodr/models/SpeciesAbilityGroupModel.h
index 244e3e30..c0a0ea5c 100644
--- a/pokemodr/models/SpeciesAbilityGroupModel.h
+++ b/pokemodr/models/SpeciesAbilityGroupModel.h
@@ -26,11 +26,16 @@ class Species;
class SpeciesAbilityGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
SpeciesAbilityGroupModel(BaseModel* parent, Species* species);
~SpeciesAbilityGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/SpeciesAbilityModel.cpp b/pokemodr/models/SpeciesAbilityModel.cpp
index 5ecd2212..9c015f2f 100644
--- a/pokemodr/models/SpeciesAbilityModel.cpp
+++ b/pokemodr/models/SpeciesAbilityModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "SpeciesAbilityModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../SpeciesAbilityUI.h"
@@ -29,6 +32,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
SpeciesAbilityModel::SpeciesAbilityModel(BaseModel* parent, SpeciesAbility* ability) :
ObjectModel(parent, ability)
{
@@ -58,6 +64,12 @@ QVariant SpeciesAbilityModel::data(int role) const
QWidget* widget = new SpeciesAbilityUI(static_cast<SpeciesAbility*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Ability", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -82,3 +94,8 @@ bool SpeciesAbilityModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void SpeciesAbilityModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/SpeciesAbilityModel.h b/pokemodr/models/SpeciesAbilityModel.h
index 8974e2f8..440c1202 100644
--- a/pokemodr/models/SpeciesAbilityModel.h
+++ b/pokemodr/models/SpeciesAbilityModel.h
@@ -26,6 +26,8 @@ class SpeciesAbility;
class SpeciesAbilityModel : public ObjectModel
{
+ Q_OBJECT
+
public:
SpeciesAbilityModel(BaseModel* parent, SpeciesAbility* ability);
~SpeciesAbilityModel();
@@ -33,6 +35,8 @@ class SpeciesAbilityModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/SpeciesGroupModel.cpp b/pokemodr/models/SpeciesGroupModel.cpp
index 5fd85bf7..c641c818 100644
--- a/pokemodr/models/SpeciesGroupModel.cpp
+++ b/pokemodr/models/SpeciesGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Species.h"
+
+// KDE includes
+#include <KMenu>
SpeciesGroupModel::SpeciesGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Species")
{
- setupData();
+ for (int i = 0; i < pokemod->speciesCount(); ++i)
+ addObject(pokemod->species(i));
}
SpeciesGroupModel::~SpeciesGroupModel()
{
}
-void SpeciesGroupModel::setupData()
+QVariant SpeciesGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->speciesCount(); ++i)
- m_objects.append(new SpeciesModel(this, pokemod->species(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Species", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void SpeciesGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newSpecies();
+ if (object->className() == "Species")
+ m_objects.append(new SpeciesModel(this, static_cast<Species*>(object)));
+}
+
+void SpeciesGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteSpecies(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/SpeciesGroupModel.h b/pokemodr/models/SpeciesGroupModel.h
index ddd7ccdb..200a8a92 100644
--- a/pokemodr/models/SpeciesGroupModel.h
+++ b/pokemodr/models/SpeciesGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class SpeciesGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
SpeciesGroupModel(BaseModel* parent, Pokemod* pokemod);
~SpeciesGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/SpeciesItemGroupModel.cpp b/pokemodr/models/SpeciesItemGroupModel.cpp
index dc95f4d5..591e8757 100644
--- a/pokemodr/models/SpeciesItemGroupModel.cpp
+++ b/pokemodr/models/SpeciesItemGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Species.h"
+#include "../../pokemod/SpeciesItem.h"
+
+// KDE includes
+#include <KMenu>
SpeciesItemGroupModel::SpeciesItemGroupModel(BaseModel* parent, Species* species) :
GroupModel(parent, species, "Items")
{
- setupData();
+ for (int i = 0; i < species->itemCount(); ++i)
+ addObject(species->item(i));
}
SpeciesItemGroupModel::~SpeciesItemGroupModel()
{
}
-void SpeciesItemGroupModel::setupData()
+QVariant SpeciesItemGroupModel::data(const int role) const
{
- Species* species = static_cast<Species*>(m_object);
- for (int i = 0; i < species->itemCount(); ++i)
- m_objects.append(new SpeciesItemModel(this, species->item(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Item", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void SpeciesItemGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Species*>(m_object)->newItem();
+ if (object->className() == "SpeciesItem")
+ m_objects.append(new SpeciesItemModel(this, static_cast<SpeciesItem*>(object)));
+}
+
+void SpeciesItemGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Species*>(m_object)->deleteItem(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/SpeciesItemGroupModel.h b/pokemodr/models/SpeciesItemGroupModel.h
index 0c3257b4..1db37cf2 100644
--- a/pokemodr/models/SpeciesItemGroupModel.h
+++ b/pokemodr/models/SpeciesItemGroupModel.h
@@ -26,11 +26,16 @@ class Species;
class SpeciesItemGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
SpeciesItemGroupModel(BaseModel* parent, Species* species);
~SpeciesItemGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/SpeciesItemModel.cpp b/pokemodr/models/SpeciesItemModel.cpp
index 2303d408..74f874f7 100644
--- a/pokemodr/models/SpeciesItemModel.cpp
+++ b/pokemodr/models/SpeciesItemModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "SpeciesItemModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../SpeciesItemUI.h"
@@ -29,6 +32,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
SpeciesItemModel::SpeciesItemModel(BaseModel* parent, SpeciesItem* item) :
ObjectModel(parent, item)
{
@@ -58,6 +64,12 @@ QVariant SpeciesItemModel::data(int role) const
QWidget* widget = new SpeciesItemUI(static_cast<SpeciesItem*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Item", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -82,3 +94,8 @@ bool SpeciesItemModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void SpeciesItemModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/SpeciesItemModel.h b/pokemodr/models/SpeciesItemModel.h
index f7968f4b..626d0db9 100644
--- a/pokemodr/models/SpeciesItemModel.h
+++ b/pokemodr/models/SpeciesItemModel.h
@@ -26,6 +26,8 @@ class SpeciesItem;
class SpeciesItemModel : public ObjectModel
{
+ Q_OBJECT
+
public:
SpeciesItemModel(BaseModel* parent, SpeciesItem* item);
~SpeciesItemModel();
@@ -33,6 +35,8 @@ class SpeciesItemModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/SpeciesModel.cpp b/pokemodr/models/SpeciesModel.cpp
index c9093218..14f4f785 100644
--- a/pokemodr/models/SpeciesModel.cpp
+++ b/pokemodr/models/SpeciesModel.cpp
@@ -27,12 +27,18 @@
#include "../SpeciesUI.h"
// Pokemod includes
-#include "../../pokemod/Species.h"
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Species.h"
+#include "../../pokemod/SpeciesAbility.h"
+#include "../../pokemod/SpeciesItem.h"
+#include "../../pokemod/SpeciesMove.h"
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
SpeciesModel::SpeciesModel(BaseModel* parent, Species* species) :
GroupObjectModel(parent, species)
{
@@ -59,6 +65,12 @@ QVariant SpeciesModel::data(int role) const
QWidget* widget = new SpeciesUI(static_cast<Species*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Species", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return GroupObjectModel::data(role);
}
@@ -86,9 +98,23 @@ bool SpeciesModel::setData(const QVariant& value, int role)
return false;
}
+void SpeciesModel::addObject(Object* /*object*/)
+{
+}
+
+void SpeciesModel::deleteObject(BaseModel* /*model*/)
+{
+}
+
+void SpeciesModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
+
void SpeciesModel::setupData()
{
- m_objects.append(new SpeciesAbilityGroupModel(this, static_cast<Species*>(m_object)));
- m_objects.append(new SpeciesItemGroupModel(this, static_cast<Species*>(m_object)));
- m_objects.append(new SpeciesMoveGroupModel(this, static_cast<Species*>(m_object)));
+ Species* species = static_cast<Species*>(m_object);
+ m_objects.append(new SpeciesAbilityGroupModel(this, species));
+ m_objects.append(new SpeciesItemGroupModel(this, species));
+ m_objects.append(new SpeciesMoveGroupModel(this, species));
}
diff --git a/pokemodr/models/SpeciesModel.h b/pokemodr/models/SpeciesModel.h
index dc58e581..265a81e4 100644
--- a/pokemodr/models/SpeciesModel.h
+++ b/pokemodr/models/SpeciesModel.h
@@ -26,6 +26,8 @@ class Species;
class SpeciesModel : public GroupObjectModel
{
+ Q_OBJECT
+
public:
SpeciesModel(BaseModel* parent, Species* species);
~SpeciesModel();
@@ -33,6 +35,11 @@ class SpeciesModel : public GroupObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void addObject(Object* /*object = NULL*/);
+ void deleteObject(BaseModel* /*model*/);
+
+ void deleteSelf();
protected:
void setupData();
};
diff --git a/pokemodr/models/SpeciesMoveGroupModel.cpp b/pokemodr/models/SpeciesMoveGroupModel.cpp
index bfb6f040..0093b2aa 100644
--- a/pokemodr/models/SpeciesMoveGroupModel.cpp
+++ b/pokemodr/models/SpeciesMoveGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Species.h"
+#include "../../pokemod/SpeciesMove.h"
+
+// KDE includes
+#include <KMenu>
SpeciesMoveGroupModel::SpeciesMoveGroupModel(BaseModel* parent, Species* species) :
GroupModel(parent, species, "Moves")
{
- setupData();
+ for (int i = 0; i < species->moveCount(); ++i)
+ addObject(species->move(i));
}
SpeciesMoveGroupModel::~SpeciesMoveGroupModel()
{
}
-void SpeciesMoveGroupModel::setupData()
+QVariant SpeciesMoveGroupModel::data(const int role) const
{
- Species* species = static_cast<Species*>(m_object);
- for (int i = 0; i < species->moveCount(); ++i)
- m_objects.append(new SpeciesMoveModel(this, species->move(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Move", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void SpeciesMoveGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Species*>(m_object)->newMove();
+ if (object->className() == "SpeciesMove")
+ m_objects.append(new SpeciesMoveModel(this, static_cast<SpeciesMove*>(object)));
+}
+
+void SpeciesMoveGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Species*>(m_object)->deleteMove(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/SpeciesMoveGroupModel.h b/pokemodr/models/SpeciesMoveGroupModel.h
index 30b80d81..5711f484 100644
--- a/pokemodr/models/SpeciesMoveGroupModel.h
+++ b/pokemodr/models/SpeciesMoveGroupModel.h
@@ -26,11 +26,16 @@ class Species;
class SpeciesMoveGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
SpeciesMoveGroupModel(BaseModel* parent, Species* species);
~SpeciesMoveGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/SpeciesMoveModel.cpp b/pokemodr/models/SpeciesMoveModel.cpp
index ac1e3bda..ab036ab5 100644
--- a/pokemodr/models/SpeciesMoveModel.cpp
+++ b/pokemodr/models/SpeciesMoveModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "SpeciesMoveModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../SpeciesMoveUI.h"
@@ -29,6 +32,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
SpeciesMoveModel::SpeciesMoveModel(BaseModel* parent, SpeciesMove* move) :
ObjectModel(parent, move)
{
@@ -58,6 +64,12 @@ QVariant SpeciesMoveModel::data(int role) const
QWidget* widget = new SpeciesMoveUI(static_cast<SpeciesMove*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Move", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -82,3 +94,8 @@ bool SpeciesMoveModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void SpeciesMoveModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/SpeciesMoveModel.h b/pokemodr/models/SpeciesMoveModel.h
index 6eccca83..ccd73fb5 100644
--- a/pokemodr/models/SpeciesMoveModel.h
+++ b/pokemodr/models/SpeciesMoveModel.h
@@ -26,6 +26,8 @@ class SpeciesMove;
class SpeciesMoveModel : public ObjectModel
{
+ Q_OBJECT
+
public:
SpeciesMoveModel(BaseModel* parent, SpeciesMove* move);
~SpeciesMoveModel();
@@ -33,6 +35,8 @@ class SpeciesMoveModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/StoreGroupModel.cpp b/pokemodr/models/StoreGroupModel.cpp
index 4d94c726..ea5033f8 100644
--- a/pokemodr/models/StoreGroupModel.cpp
+++ b/pokemodr/models/StoreGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Store.h"
+
+// KDE includes
+#include <KMenu>
StoreGroupModel::StoreGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Stores")
{
- setupData();
+ for (int i = 0; i < pokemod->storeCount(); ++i)
+ addObject(pokemod->store(i));
}
StoreGroupModel::~StoreGroupModel()
{
}
-void StoreGroupModel::setupData()
+QVariant StoreGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->storeCount(); ++i)
- m_objects.append(new StoreModel(this, pokemod->store(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Store", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void StoreGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newStore();
+ if (object->className() == "Store")
+ m_objects.append(new StoreModel(this, static_cast<Store*>(object)));
+}
+
+void StoreGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteStore(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/StoreGroupModel.h b/pokemodr/models/StoreGroupModel.h
index 7c3230cd..5ee3f0f1 100644
--- a/pokemodr/models/StoreGroupModel.h
+++ b/pokemodr/models/StoreGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class StoreGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
StoreGroupModel(BaseModel* parent, Pokemod* pokemod);
~StoreGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/StoreModel.cpp b/pokemodr/models/StoreModel.cpp
index 50d69b8c..0ce73054 100644
--- a/pokemodr/models/StoreModel.cpp
+++ b/pokemodr/models/StoreModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "StoreModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../StoreUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
StoreModel::StoreModel(BaseModel* parent, Store* store) :
ObjectModel(parent, store)
{
@@ -52,6 +58,12 @@ QVariant StoreModel::data(int role) const
QWidget* widget = new StoreUI(static_cast<Store*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Store", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool StoreModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void StoreModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/StoreModel.h b/pokemodr/models/StoreModel.h
index a0c17beb..313db08e 100644
--- a/pokemodr/models/StoreModel.h
+++ b/pokemodr/models/StoreModel.h
@@ -26,6 +26,8 @@ class Store;
class StoreModel : public ObjectModel
{
+ Q_OBJECT
+
public:
StoreModel(BaseModel* parent, Store* store);
~StoreModel();
@@ -33,6 +35,8 @@ class StoreModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/TileGroupModel.cpp b/pokemodr/models/TileGroupModel.cpp
index f41ed080..7140b6da 100644
--- a/pokemodr/models/TileGroupModel.cpp
+++ b/pokemodr/models/TileGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Tile.h"
+
+// KDE includes
+#include <KMenu>
TileGroupModel::TileGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Tiles")
{
- setupData();
+ for (int i = 0; i < pokemod->tileCount(); ++i)
+ addObject(pokemod->tile(i));
}
TileGroupModel::~TileGroupModel()
{
}
-void TileGroupModel::setupData()
+QVariant TileGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->tileCount(); ++i)
- m_objects.append(new TileModel(this, pokemod->tile(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Tile", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void TileGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newTile();
+ if (object->className() == "Tile")
+ m_objects.append(new TileModel(this, static_cast<Tile*>(object)));
+}
+
+void TileGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteTile(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/TileGroupModel.h b/pokemodr/models/TileGroupModel.h
index c19820c0..fef822ed 100644
--- a/pokemodr/models/TileGroupModel.h
+++ b/pokemodr/models/TileGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class TileGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
TileGroupModel(BaseModel* parent, Pokemod* pokemod);
~TileGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/TileModel.cpp b/pokemodr/models/TileModel.cpp
index e48d27ae..f6be8941 100644
--- a/pokemodr/models/TileModel.cpp
+++ b/pokemodr/models/TileModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "TileModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../TileUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
TileModel::TileModel(BaseModel* parent, Tile* tile) :
ObjectModel(parent, tile)
{
@@ -52,6 +58,12 @@ QVariant TileModel::data(int role) const
QWidget* widget = new TileUI(static_cast<Tile*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Tile", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool TileModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void TileModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/TileModel.h b/pokemodr/models/TileModel.h
index 4f6ac412..1a635a40 100644
--- a/pokemodr/models/TileModel.h
+++ b/pokemodr/models/TileModel.h
@@ -26,6 +26,8 @@ class Tile;
class TileModel : public ObjectModel
{
+ Q_OBJECT
+
public:
TileModel(BaseModel* parent, Tile* tile);
~TileModel();
@@ -33,6 +35,8 @@ class TileModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/TimeGroupModel.cpp b/pokemodr/models/TimeGroupModel.cpp
index 1645b1c8..1ebac409 100644
--- a/pokemodr/models/TimeGroupModel.cpp
+++ b/pokemodr/models/TimeGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Time.h"
+
+// KDE includes
+#include <KMenu>
TimeGroupModel::TimeGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Times")
{
- setupData();
+ for (int i = 0; i < pokemod->timeCount(); ++i)
+ addObject(pokemod->time(i));
}
TimeGroupModel::~TimeGroupModel()
{
}
-void TimeGroupModel::setupData()
+QVariant TimeGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->timeCount(); ++i)
- m_objects.append(new TimeModel(this, pokemod->time(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Time", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void TimeGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newTime();
+ if (object->className() == "Time")
+ m_objects.append(new TimeModel(this, static_cast<Time*>(object)));
+}
+
+void TimeGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteTime(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/TimeGroupModel.h b/pokemodr/models/TimeGroupModel.h
index 4323dfe5..56e88bd5 100644
--- a/pokemodr/models/TimeGroupModel.h
+++ b/pokemodr/models/TimeGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class TimeGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
TimeGroupModel(BaseModel* parent, Pokemod* pokemod);
~TimeGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/TimeModel.cpp b/pokemodr/models/TimeModel.cpp
index 372a90d3..05e45a15 100644
--- a/pokemodr/models/TimeModel.cpp
+++ b/pokemodr/models/TimeModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "TimeModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../TimeUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
TimeModel::TimeModel(BaseModel* parent, Time* time) :
ObjectModel(parent, time)
{
@@ -52,6 +58,12 @@ QVariant TimeModel::data(int role) const
QWidget* widget = new TimeUI(static_cast<Time*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Time", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool TimeModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void TimeModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/TimeModel.h b/pokemodr/models/TimeModel.h
index 3f9ba657..5513a957 100644
--- a/pokemodr/models/TimeModel.h
+++ b/pokemodr/models/TimeModel.h
@@ -26,6 +26,8 @@ class Time;
class TimeModel : public ObjectModel
{
+ Q_OBJECT
+
public:
TimeModel(BaseModel* parent, Time* time);
~TimeModel();
@@ -33,6 +35,8 @@ class TimeModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/TrainerGroupModel.cpp b/pokemodr/models/TrainerGroupModel.cpp
index 60b4332a..bed923df 100644
--- a/pokemodr/models/TrainerGroupModel.cpp
+++ b/pokemodr/models/TrainerGroupModel.cpp
@@ -23,21 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Trainer.h"
+
+// KDE includes
+#include <KMenu>
TrainerGroupModel::TrainerGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Trainers")
{
- setupData();
+ for (int i = 0; i < pokemod->trainerCount(); ++i)
+ addObject(pokemod->trainer(i));
}
TrainerGroupModel::~TrainerGroupModel()
{
- setupData();
}
-void TrainerGroupModel::setupData()
+QVariant TrainerGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->trainerCount(); ++i)
- m_objects.append(new TrainerModel(this, pokemod->trainer(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Trainer", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void TrainerGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newTrainer();
+ if (object->className() == "Trainer")
+ m_objects.append(new TrainerModel(this, static_cast<Trainer*>(object)));
+}
+
+void TrainerGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteTrainer(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/TrainerGroupModel.h b/pokemodr/models/TrainerGroupModel.h
index 313d3152..aea6a1b0 100644
--- a/pokemodr/models/TrainerGroupModel.h
+++ b/pokemodr/models/TrainerGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class TrainerGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
TrainerGroupModel(BaseModel* parent, Pokemod* pokemod);
~TrainerGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/TrainerModel.cpp b/pokemodr/models/TrainerModel.cpp
index ccc9b54c..1849fe38 100644
--- a/pokemodr/models/TrainerModel.cpp
+++ b/pokemodr/models/TrainerModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "TrainerModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../TrainerUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
TrainerModel::TrainerModel(BaseModel* parent, Trainer* trainer) :
ObjectModel(parent, trainer)
{
@@ -52,6 +58,12 @@ QVariant TrainerModel::data(int role) const
QWidget* widget = new TrainerUI(static_cast<Trainer*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Trainer", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool TrainerModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void TrainerModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/TrainerModel.h b/pokemodr/models/TrainerModel.h
index 052bb39c..84cf8d4d 100644
--- a/pokemodr/models/TrainerModel.h
+++ b/pokemodr/models/TrainerModel.h
@@ -26,6 +26,8 @@ class Trainer;
class TrainerModel : public ObjectModel
{
+ Q_OBJECT
+
public:
TrainerModel(BaseModel* parent, Trainer* trainer);
~TrainerModel();
@@ -33,6 +35,8 @@ class TrainerModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/models/TypeGroupModel.cpp b/pokemodr/models/TypeGroupModel.cpp
index 45deb3a0..944162d5 100644
--- a/pokemodr/models/TypeGroupModel.cpp
+++ b/pokemodr/models/TypeGroupModel.cpp
@@ -23,20 +23,48 @@
// Pokemod includes
#include "../../pokemod/Pokemod.h"
+#include "../../pokemod/Type.h"
+
+// KDE includes
+#include <KMenu>
TypeGroupModel::TypeGroupModel(BaseModel* parent, Pokemod* pokemod) :
GroupModel(parent, pokemod, "Types")
{
- setupData();
+ for (int i = 0; i < pokemod->typeCount(); ++i)
+ addObject(pokemod->type(i));
}
TypeGroupModel::~TypeGroupModel()
{
}
-void TypeGroupModel::setupData()
+QVariant TypeGroupModel::data(const int role) const
{
- Pokemod* pokemod = static_cast<Pokemod*>(m_object);
- for (int i = 0; i < pokemod->typeCount(); ++i)
- m_objects.append(new TypeModel(this, pokemod->type(i)));
+ if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Add Type", this, SLOT(addObject()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
+ return GroupModel::data(role);
+}
+
+void TypeGroupModel::addObject(Object* object)
+{
+ if (!object)
+ object = static_cast<Pokemod*>(m_object)->newType();
+ if (object->className() == "Type")
+ m_objects.append(new TypeModel(this, static_cast<Type*>(object)));
+}
+
+void TypeGroupModel::deleteObject(BaseObjectModel* model)
+{
+ const int index = m_objects.indexOf(model);
+ if (0 <= index)
+ {
+ static_cast<Pokemod*>(m_object)->deleteType(index);
+ m_objects[index]->deleteLater();
+ m_objects.removeAt(index);
+ }
}
diff --git a/pokemodr/models/TypeGroupModel.h b/pokemodr/models/TypeGroupModel.h
index 257a5ba8..e544f8ab 100644
--- a/pokemodr/models/TypeGroupModel.h
+++ b/pokemodr/models/TypeGroupModel.h
@@ -26,11 +26,16 @@ class Pokemod;
class TypeGroupModel : public GroupModel
{
+ Q_OBJECT
+
public:
TypeGroupModel(BaseModel* parent, Pokemod* pokemod);
~TypeGroupModel();
- protected:
- void setupData();
+
+ QVariant data(const int role = Qt::DisplayRole) const;
+ public slots:
+ void addObject(Object* object = NULL);
+ void deleteObject(BaseObjectModel* model);
};
#endif
diff --git a/pokemodr/models/TypeModel.cpp b/pokemodr/models/TypeModel.cpp
index 72c07ab6..7ecad48f 100644
--- a/pokemodr/models/TypeModel.cpp
+++ b/pokemodr/models/TypeModel.cpp
@@ -18,6 +18,9 @@
// Header include
#include "TypeModel.h"
+// Model includes
+#include "GroupModel.h"
+
// PokeModr includes
#include "../TypeUI.h"
@@ -28,6 +31,9 @@
// Qt includes
#include <QFile>
+// KDE includes
+#include <KMenu>
+
TypeModel::TypeModel(BaseModel* parent, Type* type) :
ObjectModel(parent, type)
{
@@ -52,6 +58,12 @@ QVariant TypeModel::data(int role) const
QWidget* widget = new TypeUI(static_cast<Type*>(m_object), NULL);
return QVariant::fromValue(widget);
}
+ else if (role == BaseModel::ContextMenuRole)
+ {
+ KMenu* menu = new KMenu;
+ menu->addAction("Delete Type", this, SLOT(deleteSelf()));
+ return QVariant::fromValue(static_cast<void*>(menu));
+ }
return ObjectModel::data(role);
}
@@ -76,3 +88,8 @@ bool TypeModel::setData(const QVariant& value, int role)
}
return false;
}
+
+void TypeModel::deleteSelf()
+{
+// static_cast<GroupModel*>(m_parent)->deleteObject(this);
+}
diff --git a/pokemodr/models/TypeModel.h b/pokemodr/models/TypeModel.h
index b6ebeab2..5ae2fe42 100644
--- a/pokemodr/models/TypeModel.h
+++ b/pokemodr/models/TypeModel.h
@@ -26,6 +26,8 @@ class Type;
class TypeModel : public ObjectModel
{
+ Q_OBJECT
+
public:
TypeModel(BaseModel* parent, Type* type);
~TypeModel();
@@ -33,6 +35,8 @@ class TypeModel : public ObjectModel
QVariant data(int role = Qt::DisplayRole) const;
bool setData(const QVariant& value, int role = Qt::EditRole);
+ public slots:
+ void deleteSelf();
};
#endif
diff --git a/pokemodr/pokemodr.pro b/pokemodr/pokemodr.pro
index 4517e89a..49e47332 100644
--- a/pokemodr/pokemodr.pro
+++ b/pokemodr/pokemodr.pro
@@ -16,6 +16,7 @@ CONFIG += qt \
warn_on \
gui
QT += xml
+
!win32 {
CONFIG += debug
}
diff --git a/version.inc b/version.inc
index 10c8f5cc..71190b6d 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-VERSION = 0.0.1
+VERSION = 0.0.2