diff --git a/apps/openmw/mwgui/mw_chargen.cpp b/apps/openmw/mwgui/mw_chargen.cpp index cf888fc0c..f3ac0d5dd 100644 --- a/apps/openmw/mwgui/mw_chargen.cpp +++ b/apps/openmw/mwgui/mw_chargen.cpp @@ -63,6 +63,14 @@ RaceDialog::RaceDialog(MWWorld::Environment& environment) getWidget(skillList, "SkillList"); getWidget(spellPowerList, "SpellPowerList"); + MyGUI::ButtonPtr okButton; + getWidget(okButton, "OKButton"); + okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onOkClicked); + + MyGUI::ButtonPtr backButton; + getWidget(backButton, "BackButton"); + backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onBackClicked); + updateRaces(); updateSkills(); updateSpellPowers(); @@ -98,6 +106,16 @@ int wrap(int index, int max) // widget controls +void RaceDialog::onOkClicked(MyGUI::Widget* _sender) +{ + eventDone(); +} + +void RaceDialog::onBackClicked(MyGUI::Widget* _sender) +{ + eventBack(); +} + void RaceDialog::onHeadRotate(MyGUI::VScroll*, size_t _position) { // TODO: Rotate head diff --git a/apps/openmw/mwgui/mw_chargen.hpp b/apps/openmw/mwgui/mw_chargen.hpp index 4ae1b51e9..f11c692a0 100644 --- a/apps/openmw/mwgui/mw_chargen.hpp +++ b/apps/openmw/mwgui/mw_chargen.hpp @@ -29,6 +29,8 @@ namespace MWGui { using namespace MyGUI; + typedef delegates::CDelegate0 EventHandle_Void; + class RaceDialog : public OEngine::GUI::Layout { public: @@ -36,7 +38,19 @@ namespace MWGui void setRace(const std::string &race); - protected: + // Events + + /** Event : Back button clicked.\n + signature : void method()\n + */ + EventHandle_Void eventBack; + + /** Event : Dialog finished, OK button clicked.\n + signature : void method()\n + */ + EventHandle_Void eventDone; + + protected: void onHeadRotate(MyGUI::VScroll* _sender, size_t _position); void onSelectPreviousGender(MyGUI::Widget* _sender); @@ -50,6 +64,9 @@ namespace MWGui void onSelectRace(MyGUI::List* _sender, size_t _index); + void onOkClicked(MyGUI::Widget* _sender); + void onBackClicked(MyGUI::Widget* _sender); + private: void updateRaces(); void updateSkills(); diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index ba4a549b9..d6706d21a 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -27,6 +27,8 @@ WindowManager::WindowManager(MyGUI::Gui *_gui, MWWorld::Environment& environment console = new Console(w,h, environment, extensions); raceDialog = new RaceDialog (environment); + raceDialog->eventDone = MyGUI::newDelegate(this, &WindowManager::onRaceDialogDone); + raceDialog->eventBack = MyGUI::newDelegate(this, &WindowManager::onRaceDialogBack); // The HUD is always on hud->setVisible(true); @@ -122,3 +124,13 @@ void WindowManager::messageBox (const std::string& message, const std::vectorsetVisible(false); +} + +void WindowManager::onRaceDialogBack() +{ + raceDialog->setVisible(false); +} diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index 0b6e89805..3580db669 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -153,6 +153,10 @@ namespace MWGui ///< Set value for the given ID. void messageBox (const std::string& message, const std::vector& buttons); + + private: + void onRaceDialogDone(); + void onRaceDialogBack(); }; } #endif