diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-08-05 17:44:25 +0000 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-08-05 17:44:25 +0000 |
commit | fa4764c9e4d86fdfa976bb9fa9f6976e82c496d5 (patch) | |
tree | 3137a434b832ddf321723297f5b4b1ed75bc4fc0 | |
parent | cf49a16b29ac412cfea125f7216a0e51e79aa4de (diff) | |
download | sigen-fa4764c9e4d86fdfa976bb9fa9f6976e82c496d5.tar.gz sigen-fa4764c9e4d86fdfa976bb9fa9f6976e82c496d5.tar.xz sigen-fa4764c9e4d86fdfa976bb9fa9f6976e82c496d5.zip |
[FIX] ScriptWidget editing now works a lot better
[FIX] Kate settings saved
[FIX] Assertions within TeamMember removed
[FIX] Arenas inherit from Config now
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@238 6ecfd1a5-f3ed-3746-8530-beee90d26b22
-rw-r--r-- | Changelog | 10 | ||||
-rw-r--r-- | pokebattle/ATBArena.cpp | 4 | ||||
-rw-r--r-- | pokebattle/ATBArena.h | 2 | ||||
-rw-r--r-- | pokebattle/Arena.cpp | 3 | ||||
-rw-r--r-- | pokebattle/Arena.h | 4 | ||||
-rw-r--r-- | pokebattle/TeamMember.cpp | 44 | ||||
-rw-r--r-- | pokebattle/TeamMember.h | 2 | ||||
-rw-r--r-- | pokebattle/TurnArena.cpp | 4 | ||||
-rw-r--r-- | pokebattle/TurnArena.h | 2 | ||||
-rw-r--r-- | pokemodr/PokemodrUI.cpp | 2 | ||||
-rw-r--r-- | pokemodr/ScriptWidget.cpp | 47 | ||||
-rw-r--r-- | pokemodr/ScriptWidget.h | 5 | ||||
-rw-r--r-- | pokemodr/pokemodrui.rc | 21 |
13 files changed, 97 insertions, 53 deletions
@@ -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> |