From f8c8b9b433c66ffb7e545df4367eab6fab160a90 Mon Sep 17 00:00:00 2001 From: Garrett Date: Wed, 2 Apr 2025 10:50:05 +0000 Subject: [PATCH] Replace spellcreationdialog.hpp to add player gold to spell creation window. --- apps/openmw/mwgui/spellcreationdialog.hpp | 375 +++++++++++----------- 1 file changed, 191 insertions(+), 184 deletions(-) diff --git a/apps/openmw/mwgui/spellcreationdialog.hpp b/apps/openmw/mwgui/spellcreationdialog.hpp index 6dfe61fc57..0ffa875620 100644 --- a/apps/openmw/mwgui/spellcreationdialog.hpp +++ b/apps/openmw/mwgui/spellcreationdialog.hpp @@ -1,184 +1,191 @@ -#ifndef MWGUI_SPELLCREATION_H -#define MWGUI_SPELLCREATION_H - -#include - -#include -#include - -#include "referenceinterface.hpp" -#include "windowbase.hpp" - -namespace Gui -{ - class MWList; -} - -namespace MWGui -{ - - class SelectSkillDialog; - class SelectAttributeDialog; - - class EditEffectDialog : public WindowModal - { - public: - EditEffectDialog(); - - void onOpen() override; - bool exit() override; - - void setConstantEffect(bool constant); - - void setSkill(ESM::RefId skill); - void setAttribute(ESM::RefId attribute); - - void newEffect(const ESM::MagicEffect* effect); - void editEffect(ESM::ENAMstruct effect); - typedef MyGUI::delegates::MultiDelegate EventHandle_Effect; - - EventHandle_Effect eventEffectAdded; - EventHandle_Effect eventEffectModified; - EventHandle_Effect eventEffectRemoved; - - protected: - MyGUI::Button* mCancelButton; - MyGUI::Button* mOkButton; - MyGUI::Button* mDeleteButton; - - MyGUI::Button* mRangeButton; - - MyGUI::Widget* mDurationBox; - MyGUI::Widget* mMagnitudeBox; - MyGUI::Widget* mAreaBox; - - MyGUI::TextBox* mMagnitudeMinValue; - MyGUI::TextBox* mMagnitudeMaxValue; - MyGUI::TextBox* mDurationValue; - MyGUI::TextBox* mAreaValue; - - MyGUI::ScrollBar* mMagnitudeMinSlider; - MyGUI::ScrollBar* mMagnitudeMaxSlider; - MyGUI::ScrollBar* mDurationSlider; - MyGUI::ScrollBar* mAreaSlider; - - MyGUI::TextBox* mAreaText; - - MyGUI::ImageBox* mEffectImage; - MyGUI::TextBox* mEffectName; - - bool mEditing; - - protected: - void onRangeButtonClicked(MyGUI::Widget* sender); - void onDeleteButtonClicked(MyGUI::Widget* sender); - void onOkButtonClicked(MyGUI::Widget* sender); - void onCancelButtonClicked(MyGUI::Widget* sender); - - void onMagnitudeMinChanged(MyGUI::ScrollBar* sender, size_t pos); - void onMagnitudeMaxChanged(MyGUI::ScrollBar* sender, size_t pos); - void onDurationChanged(MyGUI::ScrollBar* sender, size_t pos); - void onAreaChanged(MyGUI::ScrollBar* sender, size_t pos); - void setMagicEffect(const ESM::MagicEffect* effect); - - void updateBoxes(); - - protected: - ESM::ENAMstruct mEffect; - ESM::ENAMstruct mOldEffect; - - const ESM::MagicEffect* mMagicEffect; - - bool mConstantEffect; - }; - - class EffectEditorBase - { - public: - enum Type - { - Spellmaking, - Enchanting - }; - - EffectEditorBase(Type type); - virtual ~EffectEditorBase(); - - void setConstantEffect(bool constant); - - protected: - std::map mButtonMapping; // maps button ID to effect ID - - Gui::MWList* mAvailableEffectsList; - MyGUI::ScrollView* mUsedEffectsView; - - EditEffectDialog mAddEffectDialog; - std::unique_ptr mSelectAttributeDialog; - std::unique_ptr mSelectSkillDialog; - - int mSelectedEffect; - short mSelectedKnownEffectId; - - bool mConstantEffect; - - std::vector mEffects; - - void onEffectAdded(ESM::ENAMstruct effect); - void onEffectModified(ESM::ENAMstruct effect); - void onEffectRemoved(ESM::ENAMstruct effect); - - void onAvailableEffectClicked(MyGUI::Widget* sender); - - void onAttributeOrSkillCancel(); - void onSelectAttribute(); - void onSelectSkill(); - - void onEditEffect(MyGUI::Widget* sender); - - void updateEffectsView(); - - void startEditing(); - void setWidgets(Gui::MWList* availableEffectsList, MyGUI::ScrollView* usedEffectsView); - - virtual void notifyEffectsChanged() {} - - private: - Type mType; - }; - - class SpellCreationDialog : public WindowBase, public ReferenceInterface, public EffectEditorBase - { - public: - SpellCreationDialog(); - - void onOpen() override; - void clear() override { resetReference(); } - - void onFrame(float dt) override { checkReferenceAvailable(); } - - void setPtr(const MWWorld::Ptr& actor) override; - - std::string_view getWindowIdForLua() const override { return "SpellCreationDialog"; } - - protected: - void onReferenceUnavailable() override; - - void onCancelButtonClicked(MyGUI::Widget* sender); - void onBuyButtonClicked(MyGUI::Widget* sender); - void onAccept(MyGUI::EditBox* sender); - - void notifyEffectsChanged() override; - - MyGUI::EditBox* mNameEdit; - MyGUI::TextBox* mMagickaCost; - MyGUI::TextBox* mSuccessChance; - MyGUI::Button* mBuyButton; - MyGUI::Button* mCancelButton; - MyGUI::TextBox* mPriceLabel; - - ESM::Spell mSpell; - }; - -} - -#endif +#ifndef MWGUI_SPELLCREATION_H +#define MWGUI_SPELLCREATION_H + +#include + +#include +#include + +#include "referenceinterface.hpp" +#include "windowbase.hpp" + +namespace Gui +{ + class MWList; +} + +namespace MWGui +{ + + class SelectSkillDialog; + class SelectAttributeDialog; + + class EditEffectDialog : public WindowModal + { + public: + EditEffectDialog(); + + void onOpen() override; + bool exit() override; + + void setConstantEffect(bool constant); + + void setSkill(ESM::RefId skill); + void setAttribute(ESM::RefId attribute); + + void newEffect(const ESM::MagicEffect* effect); + void editEffect(ESM::ENAMstruct effect); + typedef MyGUI::delegates::MultiDelegate EventHandle_Effect; + + EventHandle_Effect eventEffectAdded; + EventHandle_Effect eventEffectModified; + EventHandle_Effect eventEffectRemoved; + + protected: + MyGUI::Button* mCancelButton; + MyGUI::Button* mOkButton; + MyGUI::Button* mDeleteButton; + + + MyGUI::Button* mRangeButton; + + MyGUI::Widget* mDurationBox; + MyGUI::Widget* mMagnitudeBox; + MyGUI::Widget* mAreaBox; + + MyGUI::TextBox* mMagnitudeMinValue; + MyGUI::TextBox* mMagnitudeMaxValue; + MyGUI::TextBox* mDurationValue; + MyGUI::TextBox* mAreaValue; + + MyGUI::ScrollBar* mMagnitudeMinSlider; + MyGUI::ScrollBar* mMagnitudeMaxSlider; + MyGUI::ScrollBar* mDurationSlider; + MyGUI::ScrollBar* mAreaSlider; + + MyGUI::TextBox* mAreaText; + + MyGUI::ImageBox* mEffectImage; + MyGUI::TextBox* mEffectName; + + bool mEditing; + + protected: + void onRangeButtonClicked(MyGUI::Widget* sender); + void onDeleteButtonClicked(MyGUI::Widget* sender); + void onOkButtonClicked(MyGUI::Widget* sender); + void onCancelButtonClicked(MyGUI::Widget* sender); + + void onMagnitudeMinChanged(MyGUI::ScrollBar* sender, size_t pos); + void onMagnitudeMaxChanged(MyGUI::ScrollBar* sender, size_t pos); + void onDurationChanged(MyGUI::ScrollBar* sender, size_t pos); + void onAreaChanged(MyGUI::ScrollBar* sender, size_t pos); + void setMagicEffect(const ESM::MagicEffect* effect); + + void updateBoxes(); + + protected: + ESM::ENAMstruct mEffect; + ESM::ENAMstruct mOldEffect; + + const ESM::MagicEffect* mMagicEffect; + + bool mConstantEffect; + }; + + class EffectEditorBase + { + public: + enum Type + { + Spellmaking, + Enchanting + }; + + EffectEditorBase(Type type); + virtual ~EffectEditorBase(); + + void setConstantEffect(bool constant); + + + + protected: + std::map mButtonMapping; // maps button ID to effect ID + + Gui::MWList* mAvailableEffectsList; + MyGUI::ScrollView* mUsedEffectsView; + + + EditEffectDialog mAddEffectDialog; + std::unique_ptr mSelectAttributeDialog; + std::unique_ptr mSelectSkillDialog; + + int mSelectedEffect; + short mSelectedKnownEffectId; + + bool mConstantEffect; + + std::vector mEffects; + + void onEffectAdded(ESM::ENAMstruct effect); + void onEffectModified(ESM::ENAMstruct effect); + void onEffectRemoved(ESM::ENAMstruct effect); + + void onAvailableEffectClicked(MyGUI::Widget* sender); + + void onAttributeOrSkillCancel(); + void onSelectAttribute(); + void onSelectSkill(); + + void onEditEffect(MyGUI::Widget* sender); + + void updateEffectsView(); + + void startEditing(); + void setWidgets(Gui::MWList* availableEffectsList, MyGUI::ScrollView* usedEffectsView); + + virtual void notifyEffectsChanged() {} + + private: + Type mType; + }; + + class SpellCreationDialog : public WindowBase, public ReferenceInterface, public EffectEditorBase + { + public: + SpellCreationDialog(); + + void onOpen() override; + void clear() override { resetReference(); } + + void onFrame(float dt) override { checkReferenceAvailable(); } + + void setPtr(const MWWorld::Ptr& actor) override; + + void updateLabels(); + + std::string_view getWindowIdForLua() const override { return "SpellCreationDialog"; } + + protected: + void onReferenceUnavailable() override; + + void onCancelButtonClicked(MyGUI::Widget* sender); + void onBuyButtonClicked(MyGUI::Widget* sender); + void onAccept(MyGUI::EditBox* sender); + + void notifyEffectsChanged() override; + + MyGUI::EditBox* mNameEdit; + MyGUI::TextBox* mMagickaCost; + MyGUI::TextBox* mSuccessChance; + MyGUI::Button* mBuyButton; + MyGUI::Button* mCancelButton; + MyGUI::TextBox* mPriceLabel; + MyGUI::TextBox* mPlayerGold; + + ESM::Spell mSpell; + }; + +} + +#endif