summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog10
-rw-r--r--pokebattle/ATBArena.cpp4
-rw-r--r--pokebattle/ATBArena.h2
-rw-r--r--pokebattle/Arena.cpp3
-rw-r--r--pokebattle/Arena.h4
-rw-r--r--pokebattle/TeamMember.cpp44
-rw-r--r--pokebattle/TeamMember.h2
-rw-r--r--pokebattle/TurnArena.cpp4
-rw-r--r--pokebattle/TurnArena.h2
-rw-r--r--pokemodr/PokemodrUI.cpp2
-rw-r--r--pokemodr/ScriptWidget.cpp47
-rw-r--r--pokemodr/ScriptWidget.h5
-rw-r--r--pokemodr/pokemodrui.rc21
13 files changed, 97 insertions, 53 deletions
diff --git a/Changelog b/Changelog
index ce2ec8ef..6c5e826c 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,14 @@
-----------------
+Rev: 238
+Date: 5 August 2008
+User: MathStuf
+-----------------
+[FIX] ScriptWidget editing now works a lot better
+[FIX] Kate settings saved
+[FIX] Assertions within TeamMember removed
+[FIX] Arenas inherit from Config now
+
+-----------------
Rev: 237
Date: 5 August 2008
User: MathStuf
diff --git a/pokebattle/ATBArena.cpp b/pokebattle/ATBArena.cpp
index 469a6b10..d397ea25 100644
--- a/pokebattle/ATBArena.cpp
+++ b/pokebattle/ATBArena.cpp
@@ -24,8 +24,8 @@
// Qt includes
#include <QtCore/QTimer>
-Pokebattle::ATBArena::ATBArena(QList<Player*> players) :
- Arena(players)
+Pokebattle::ATBArena::ATBArena(QList<Player*> players, QObject* parent) :
+ Arena(players, parent)
{
setupBattle();
}
diff --git a/pokebattle/ATBArena.h b/pokebattle/ATBArena.h
index b312dcdf..d4329cff 100644
--- a/pokebattle/ATBArena.h
+++ b/pokebattle/ATBArena.h
@@ -32,7 +32,7 @@ class POKEBATTLE_EXPORT ATBArena : public Arena
Q_OBJECT
public:
- ATBArena(QList<Player*> players);
+ ATBArena(QList<Player*> players, QObject* parent);
signals:
public slots:
protected slots:
diff --git a/pokebattle/Arena.cpp b/pokebattle/Arena.cpp
index be7b3605..6ab004c2 100644
--- a/pokebattle/Arena.cpp
+++ b/pokebattle/Arena.cpp
@@ -44,7 +44,8 @@ Pokebattle::TeamMember::Action Pokebattle::decision(TeamMember* teamMember)
QSet<int> Pokebattle::Arena::m_arenaIds;
-Pokebattle::Arena::Arena(QList<Player*> players) :
+Pokebattle::Arena::Arena(QList<Player*> players, QObject* parent) :
+ Pokescripting::Config(parent),
m_players(players),
m_id(0)
{
diff --git a/pokebattle/Arena.h b/pokebattle/Arena.h
index 3020c5c4..2d20aab2 100644
--- a/pokebattle/Arena.h
+++ b/pokebattle/Arena.h
@@ -44,12 +44,12 @@ namespace Pokebattle
{
class Player;
-class POKEBATTLE_EXPORT Arena : public QObject
+class POKEBATTLE_EXPORT Arena : public Pokescripting::Config
{
Q_OBJECT
public:
- Arena(QList<Player*> players);
+ Arena(QList<Player*> players, QObject* parent);
~Arena();
QList<TeamMember*> active() const;
diff --git a/pokebattle/TeamMember.cpp b/pokebattle/TeamMember.cpp
index a8e58fc3..595f338d 100644
--- a/pokebattle/TeamMember.cpp
+++ b/pokebattle/TeamMember.cpp
@@ -90,9 +90,28 @@ Pokebattle::TeamMember::TeamMember(Pokescripting::MapTrainerTeamMemberWrapper* t
Pokescripting::SpeciesWrapper* species = pokemod()->species(m_species);
setName(species->name());
setLevel(teamMember->level());
- teamMember->items();
- // TODO: grab information from the class
- // TODO: fill in anything else
+ QList<Pokescripting::ItemWrapper*> items = teamMember->items();
+ foreach (Pokescripting::ItemWrapper* item, items)
+ m_items.append(item->id());
+ QList<Pokescripting::AbilityWrapper*> abilities = teamMember->abilities();
+ foreach (Pokescripting::AbilityWrapper* ability, abilities)
+ m_abilities.append(ability->id());
+ initAbilities();
+ QList<Pokescripting::MoveWrapper*> moves = teamMember->moves();
+ foreach (Pokescripting::MoveWrapper* move, moves)
+ m_moves.append(move->id());
+ initMoves();
+ QList<Pokescripting::NatureWrapper*> natures = teamMember->natures();
+ foreach (Pokescripting::NatureWrapper* nature, natures)
+ m_natures.append(nature->id());
+ initNatures();
+ initStats();
+ if (species->genderFactor() <= 1)
+ m_gender = species->genderFactor().poll();
+ else
+ m_gender = -1;
+ for (int i = 0; i < Pokemod::ST_End_GSC; ++i)
+ m_statExp[i] = 0;
}
QString Pokebattle::TeamMember::name() const
@@ -112,7 +131,6 @@ int Pokebattle::TeamMember::level() const
int Pokebattle::TeamMember::statValue(const int stat, const int exp) const
{
- Q_ASSERT(stat < (pokemod()->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY));
int statValue;
if (exp < 0)
statValue = m_statExp[stat];
@@ -191,7 +209,6 @@ int Pokebattle::TeamMember::calcExp(int level) const
default:
break;
}
- Q_ASSERT(false);
return -1;
}
@@ -361,14 +378,12 @@ Pokescripting::PokemodWrapper* Pokebattle::TeamMember::pokemod() const
void Pokebattle::TeamMember::setSpecies(const int species)
{
- Q_ASSERT(pokemod()->speciesIndex(species) != INT_MAX);
m_species = species;
emit(speciesChanged(m_species));
}
void Pokebattle::TeamMember::setLevel(const int level)
{
- Q_ASSERT(level <= pokemod()->rules()->maxLevel());
m_level = level;
m_levelExp = calcExp();
}
@@ -401,7 +416,11 @@ void Pokebattle::TeamMember::initAbilities()
Pokemod::Hat<Pokescripting::AbilityWrapper*> hat = pokemod()->species(m_species)->abilityHat();
m_abilities.clear();
while (m_abilities.size() < pokemod()->rules()->maxAbilities())
- m_abilities.append(hat.takeAndClear()->id());
+ {
+ int ability = hat.takeAndClear()->id();
+ if (!m_abilities.contains(ability))
+ m_abilities.append(ability);
+ }
}
void Pokebattle::TeamMember::initMoves()
@@ -414,15 +433,18 @@ void Pokebattle::TeamMember::initMoves()
if (!m_moves.contains(move->move()->id()) && (((move->level() < m_level) && move->level()) || (!m_containment->isMutable() && (move->wild() < m_level))))
m_moves.append(move->move()->id());
}
- Q_ASSERT(m_moves.size());
}
void Pokebattle::TeamMember::initNatures()
{
- m_natures.clear();
Pokemod::Hat<Pokescripting::NatureWrapper*> hat = pokemod()->natureHat();
+ m_natures.clear();
while (m_natures.size() < pokemod()->rules()->maxNatures())
- m_natures.append(hat.takeAndClear()->id());
+ {
+ int nature = hat.takeAndClear()->id();
+ if (!m_natures.contains(nature))
+ m_natures.append(nature);
+ }
}
void Pokebattle::TeamMember::initStats()
diff --git a/pokebattle/TeamMember.h b/pokebattle/TeamMember.h
index 1997016b..df1b333b 100644
--- a/pokebattle/TeamMember.h
+++ b/pokebattle/TeamMember.h
@@ -62,7 +62,7 @@ class POKEBATTLE_EXPORT TeamMember : public Pokescripting::Config
End = 6
};
- typedef QPair<ActionType, int> Action;
+ typedef QPair<ActionType, QVariant> Action;
typedef QPair<TeamMember*, QFuture<TeamMember::Action> > RequestedAction;
TeamMember(const int speciesId, const QString& name, const int level, Containment* containment, const bool suppressItems = false);
diff --git a/pokebattle/TurnArena.cpp b/pokebattle/TurnArena.cpp
index 4ca076f2..f01c394e 100644
--- a/pokebattle/TurnArena.cpp
+++ b/pokebattle/TurnArena.cpp
@@ -21,8 +21,8 @@
// Qt includes
#include <QtCore/QtConcurrentMap>
-Pokebattle::TurnArena::TurnArena(QList<Player*> players) :
- Arena(players)
+Pokebattle::TurnArena::TurnArena(QList<Player*> players, QObject* parent) :
+ Arena(players, parent)
{
connect(this, SIGNAL(roundStart()), SLOT(processRound()));
setupBattle();
diff --git a/pokebattle/TurnArena.h b/pokebattle/TurnArena.h
index 215bd3c1..18ade007 100644
--- a/pokebattle/TurnArena.h
+++ b/pokebattle/TurnArena.h
@@ -29,7 +29,7 @@ class POKEBATTLE_EXPORT TurnArena : public Arena
Q_OBJECT
public:
- TurnArena(QList<Player*> players);
+ TurnArena(QList<Player*> players, QObject* parent);
signals:
void roundStart();
void roundEnd();
diff --git a/pokemodr/PokemodrUI.cpp b/pokemodr/PokemodrUI.cpp
index 67977879..1d6dfd8f 100644
--- a/pokemodr/PokemodrUI.cpp
+++ b/pokemodr/PokemodrUI.cpp
@@ -108,7 +108,7 @@ void Pokemodr::PokemodrUI::setDirty(const bool dirty)
{
const Pokemod::Pokemod* pokemod = qobject_cast<const Pokemod::Pokemod*>(static_cast<Pokemod::Object*>(treePokemod->currentIndex().internalPointer())->pokemod());
treePokemod->setDirty(pokemod, dirty);
- stateChanged("file_changed", dirty ? StateNoReverse : StateReverse);
+ actionCollection()->action("file_save")->setEnabled(dirty);
}
void Pokemodr::PokemodrUI::newPokemod()
diff --git a/pokemodr/ScriptWidget.cpp b/pokemodr/ScriptWidget.cpp
index 3258daa8..764d9e4a 100644
--- a/pokemodr/ScriptWidget.cpp
+++ b/pokemodr/ScriptWidget.cpp
@@ -33,6 +33,7 @@
Pokemodr::ScriptWidget::ScriptWidget(QWidget* parent, const Pokemod::Script& value) :
QWidget(parent),
m_value(value),
+ m_editor(KTextEditor::EditorChooser::editor()),
m_document(NULL)
{
setupUi(this);
@@ -48,32 +49,40 @@ Pokemodr::ScriptWidget::ScriptWidget(QWidget* parent, const Pokemod::Script& val
QList<QString> langs = languages.keys();
foreach (QString language, langs)
varInterpreter->addItem(language, languages[language]);
- KTextEditor::Editor* editor = KTextEditor::EditorChooser::editor();
- if (!editor)
+ if (!m_editor)
{
KMessageBox::error(this, "A KDE text-editor component could not be found;\nplease check your KDE installation.");
KApplication::kApplication()->exit(1);
}
- m_document = editor->createDocument(NULL);
+ m_editor->readConfig(NULL);
+ m_document = m_editor->createDocument(NULL);
m_view = m_document->createView(NULL);
+ KActionCollection* collection = m_view->actionCollection();
+ collection->action("file_save")->setVisible(false);
+ collection->action("file_save")->setEnabled(false);
+ collection->action("file_save_as")->setVisible(false);
+ collection->action("file_save_as")->setEnabled(false);
+ collection->action("edit_undo")->setVisible(false);
+ collection->action("edit_undo")->setEnabled(false);
+ collection->action("edit_redo")->setVisible(false);
+ collection->action("edit_redo")->setEnabled(false);
+ collection->action("edit_cut")->setVisible(false);
+ collection->action("edit_copy")->setVisible(false);
+ collection->action("edit_paste")->setVisible(false);
m_view->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
m_view->setMinimumHeight(300);
- qobject_cast<KXmlGuiWindow*>(KApplication::kApplication()->activeWindow())->guiFactory()->addClient(m_view);
-// // FIXME: KatePart bug here?
-// // Stop colliding shortcuts from KateView
-// m_view->action(KStandardAction::name(KStandardAction::Cut))->setShortcuts(QKeySequence::UnknownKey);
-// m_view->action(KStandardAction::name(KStandardAction::Copy))->setShortcuts(QKeySequence::UnknownKey);
-// m_view->action(KStandardAction::name(KStandardAction::PasteText))->setShortcuts(QKeySequence::UnknownKey);
layoutScript->addWidget(m_view);
connect(m_document, SIGNAL(textChanged(KTextEditor::Document*)), this, SLOT(scriptChanged()));
connect(this, SIGNAL(valueChanged(const Pokemod::Script&)), SLOT(setGui()));
+ connect(m_view, SIGNAL(focusIn(KTextEditor::View*)), this, SLOT(focused(KTextEditor::View*)));
+ connect(m_view, SIGNAL(focusOut(KTextEditor::View*)), this, SLOT(unfocused(KTextEditor::View*)));
setGui();
}
Pokemodr::ScriptWidget::~ScriptWidget()
{
- qobject_cast<KXmlGuiWindow*>(KApplication::kApplication()->activeWindow())->guiFactory()->removeClient(m_view);
- delete m_document;
+ m_editor->writeConfig(NULL);
+// delete m_document;
}
Pokemod::Script Pokemodr::ScriptWidget::value() const
@@ -113,3 +122,19 @@ void Pokemodr::ScriptWidget::scriptChanged()
emit(valueChanged(m_value));
}
}
+
+void Pokemodr::ScriptWidget::focused(KTextEditor::View* view)
+{
+ KXmlGuiWindow* topLevel = qobject_cast<KXmlGuiWindow*>(KApplication::kApplication()->activeWindow());
+ if (topLevel)
+ topLevel->guiFactory()->addClient(view);
+}
+
+void Pokemodr::ScriptWidget::unfocused(KTextEditor::View* view)
+{
+ KXmlGuiWindow* topLevel = qobject_cast<KXmlGuiWindow*>(KApplication::kApplication()->activeWindow());
+ QWidget* focused = KApplication::focusWidget();
+ // TODO: Does this fail with non-Kate KTextEditor implementations?
+ if (topLevel && focused && ((focused->metaObject()->className() != QString("KateViewInternal")) || ((QString(focused->metaObject()->className()) == view->metaObject()->className()) && (focused != view))))
+ topLevel->guiFactory()->removeClient(view);
+}
diff --git a/pokemodr/ScriptWidget.h b/pokemodr/ScriptWidget.h
index fffa4a03..eb07bfbc 100644
--- a/pokemodr/ScriptWidget.h
+++ b/pokemodr/ScriptWidget.h
@@ -30,6 +30,7 @@
// Forward declarations
namespace KTextEditor
{
+class Editor;
class Document;
class View;
}
@@ -54,8 +55,12 @@ class ScriptWidget : public QWidget, private Ui::formScript
void on_varInterpreter_activated();
void scriptChanged();
+
+ void focused(KTextEditor::View* view);
+ void unfocused(KTextEditor::View* view);
private:
Pokemod::Script m_value;
+ KTextEditor::Editor* m_editor;
KTextEditor::Document* m_document;
KTextEditor::View* m_view;
};
diff --git a/pokemodr/pokemodrui.rc b/pokemodr/pokemodrui.rc
index ea214c17..177724a2 100644
--- a/pokemodr/pokemodrui.rc
+++ b/pokemodr/pokemodrui.rc
@@ -66,24 +66,5 @@
<Separator />
<DefineGroup name="zoom_operations" />
</ToolBar>
- <Menu name="ktexteditor_popup" noMerge="1" >
- <DefineGroup name="popup_operations" />
- </Menu>
- <StatusBar />>
- <State name="file_changed" >
- <enabled>
- <Action name="file_save" />
- </enabled>
- </State>
- <State name="have_selection" >
- <enabled>
- <Action name="edit_cut" />
- <Action name="edit_copy" />
- </enabled>
- </State>
- <State name="clipboard_empty" >
- <disabled>
- <Action name="edit_paste" />
- </disabled>
- </State>
+ <StatusBar />
</kpartgui>